You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

165 lines
6.4 KiB

# -*- coding: utf-8 -*-
##############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
# Copyright (C) 2017-TODAY Cybrosys Technologies(<http://www.cybrosys.com>).
# Author: Cybrosys Technologies (<http://www.cybrosys.com>)
# you can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# It is forbidden to publish, distribute, sublicense, or sell copies
# of the Software or modified copies of the Software.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# GENERAL PUBLIC LICENSE (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
from openerp import SUPERUSER_ID
from openerp import models, fields, api, _
class PosClaims(models.Model):
_name = 'pos.claims'
_description = "Claim"
_inherit = ['mail.thread']
name = fields.Many2one('pos.order', string='Claim Order', required=True)
ref_name = fields.Char(string="Claim Ticket", readonly=True, default=lambda self: _('New'))
claim_product = fields.Many2one('pos.order.line', string="Product",
domain="[('order_id', '=',name)]", required=True)
claim_qty = fields.Integer(string="Quantity")
claim_date = fields.Datetime(string='Claim Date', default=fields.Datetime.now, required=True)
session_id = fields.Many2one('pos.session', string='Session', related='name.session_id')
user_id = fields.Many2one('res.users', string="Assigned Person")
priority = fields.Selection([('0', 'Low'), ('1', 'Normal'), ('2', 'High')], 'Priority')
partner_id = fields.Many2one('res.partner', string='Partner', required=1)
partner_phone = fields.Char(string='Phone')
partner_email = fields.Char(string='Email', related='partner_id.email')
description = fields.Text(string='Description')
user_fault = fields.Char(string='Trouble Responsible')
cate_id = fields.Selection([('0', 'Factual Claims'), ('1', 'Value Claims'), ('2', 'Policy Claim')], 'Category Id',
)
date_action_next = fields.Datetime(string='Next Action Date')
action_next = fields.Char(string='Next Action')
resolution = fields.Text(string='Resolution')
cause = fields.Text(string='Root Cause')
type_action = fields.Selection([('correction', 'Corrective Action'),
('prevention', 'Preventive Action')], 'Action Type')
date_closed = fields.Datetime('Closed')
state = fields.Selection([
('new', 'New'),
('assigned', 'Assigned'),
('feedback', 'Feedback'),
('paid', 'Paid'),
('settle', 'Settled'),
('reject', 'Rejected'),
], default='new')
def create_from_ui(self, cr, uid, claim, context=None):
""" create claims from the point of sale ui. """
claim_id = self.create(cr, uid, claim, context=context)
return claim_id
@api.model
def create(self, vals):
if vals.get('ref_name', 'New') == 'New':
vals['ref_name'] = self.env['ir.sequence'].next_by_code('pos.claims') or 'New'
if vals.get('user_id'):
vals['state'] = 'assigned'
result = super(PosClaims, self).create(vals)
result.claim_ticket()
return result
@api.multi
def write(self, vals):
if vals.get('user_id'):
vals['state'] = 'assigned'
result = super(PosClaims, self).write(vals)
return result
@api.multi
def action_settle(self):
self.state = 'settle'
@api.multi
def action_reject(self):
self.state = 'reject'
@api.one
def claim_ticket(self):
su_id = self.env['res.partner'].browse(SUPERUSER_ID)
self.ensure_one()
ir_model_data = self.env['ir.model.data']
try:
template_id = ir_model_data.get_object_reference('pos_claims', 'email_template_edi_pos_ticket')[1]
except ValueError:
template_id = False
email_template_obj = self.env['mail.template'].browse(template_id)
if template_id:
values = email_template_obj.generate_email(self.id, fields=None)
values['email_from'] = su_id.email
values['email_to'] = self.partner_id.email
values['res_id'] = False
mail_mail_obj = self.env['mail.mail']
msg_id = mail_mail_obj.create(values)
if msg_id:
msg_id.send()
@api.multi
def action_sent(self):
self.ensure_one()
ir_model_data = self.env['ir.model.data']
try:
template_id = ir_model_data.get_object_reference('pos_claims', 'email_template_edi_pos_claims')[1]
except ValueError:
template_id = False
try:
compose_form_id = ir_model_data.get_object_reference('mail', 'email_compose_message_wizard_form')[1]
except ValueError:
compose_form_id = False
ctx = dict()
ctx.update({
'default_model': 'pos.claims',
'default_res_id': self.ids[0],
'default_use_template': bool(template_id),
'default_template_id': template_id,
'default_composition_mode': 'comment',
})
return {
'type': 'ir.actions.act_window',
'view_type': 'form',
'view_mode': 'form',
'res_model': 'mail.compose.message',
'views': [(compose_form_id, 'form')],
'view_id': compose_form_id,
'target': 'new',
'context': ctx,
}
class MailComposeMessage(models.TransientModel):
_inherit = 'mail.compose.message'
@api.multi
def send_mail(self, auto_commit=False):
if self._context.get('default_model') == 'pos.claims' and self._context.get('default_res_id'):
order = self.env['pos.claims'].browse([self._context['default_res_id']])
if order.state == 'assigned':
order.state = 'feedback'
order.sent = True
self = self.with_context(mail_post_autofollow=True)
return super(MailComposeMessage, self).send_mail(auto_commit=auto_commit)