@ -0,0 +1,20 @@ | 
				
			|||
POS Claims v9 | 
				
			|||
============= | 
				
			|||
 | 
				
			|||
This application allows you to track your customers/vendors pos claims and grievances. | 
				
			|||
 | 
				
			|||
Installation | 
				
			|||
============ | 
				
			|||
 | 
				
			|||
Just select it from available modules to install it, there is no need to extra installations. | 
				
			|||
 | 
				
			|||
Configuration | 
				
			|||
============= | 
				
			|||
 | 
				
			|||
Nothing to configure. | 
				
			|||
 | 
				
			|||
Credits | 
				
			|||
======= | 
				
			|||
Developers: Jesni Banu & Saritha | 
				
			|||
Guidance: Nilmar Shereef @ cybrosys, shereef@cybrosys.in | 
				
			|||
 | 
				
			|||
@ -0,0 +1,24 @@ | 
				
			|||
# -*- 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 . import models | 
				
			|||
@ -0,0 +1,40 @@ | 
				
			|||
# -*- 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/>. | 
				
			|||
# | 
				
			|||
############################################################################## | 
				
			|||
{ | 
				
			|||
    'name': "POS Claims", | 
				
			|||
    'version': '9.0.1.0.0', | 
				
			|||
    'summary': """Manage your customer claims""", | 
				
			|||
    'description': """ This application allows you to manage your customers claims.""", | 
				
			|||
    'category': 'Point of sale', | 
				
			|||
    'author': "Cybrosys Techno Solutions", | 
				
			|||
    'website': "http://www.cybrosys.com", | 
				
			|||
    'company': 'Cybrosys Techno Solutions', | 
				
			|||
    'depends': ['base', 'point_of_sale'], | 
				
			|||
    'data': ['views/pos_claims_views.xml', 'views/pos_claims_popup.xml', 'views/pos_claim_sequence.xml'], | 
				
			|||
    'qweb': ['static/src/xml/pos_claim.xml'], | 
				
			|||
    'images': ['static/description/banner.jpg'], | 
				
			|||
    'license': 'AGPL-3', | 
				
			|||
    'installable': True, | 
				
			|||
    'auto_install': False, | 
				
			|||
    'application': False, | 
				
			|||
} | 
				
			|||
@ -0,0 +1,24 @@ | 
				
			|||
# -*- 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 . import pos_claim | 
				
			|||
@ -0,0 +1,165 @@ | 
				
			|||
# -*- 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) | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
| 
		 After Width: | Height: | Size: 128 KiB  | 
| 
		 After Width: | Height: | Size: 20 KiB  | 
| 
		 After Width: | Height: | Size: 91 KiB  | 
| 
		 After Width: | Height: | Size: 91 KiB  | 
| 
		 After Width: | Height: | Size: 102 KiB  | 
| 
		 After Width: | Height: | Size: 17 KiB  | 
@ -0,0 +1,114 @@ | 
				
			|||
<section class="oe_container"> | 
				
			|||
    <div class="oe_row oe_spaced"> | 
				
			|||
        <h2 class="oe_slogan">POS Claims</h2> | 
				
			|||
        <h3 class="oe_slogan">Manage Customer Claims</h3> | 
				
			|||
        <h4 class="oe_slogan">Cybrosys Technologies , www.cybrosys.com</h4> | 
				
			|||
        <div> | 
				
			|||
            <h4><p>Features:</p></h4> | 
				
			|||
            <ul> | 
				
			|||
                <div class="col-md-6"> | 
				
			|||
                ☀Easily create claims from POS interface.<br> | 
				
			|||
                ☀ Automatic stage changes for assignment of claims.<br> | 
				
			|||
                ☀ Email Notification.<br> | 
				
			|||
                ☀ Calender view.<br> | 
				
			|||
 | 
				
			|||
        </div> | 
				
			|||
            </ul> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</section> | 
				
			|||
 | 
				
			|||
<section class="oe_container"> | 
				
			|||
    <div class="oe_row oe_spaced"> | 
				
			|||
        <div class="oe_span12"> | 
				
			|||
            <div class="oe_demo oe_picture oe_screenshot"> | 
				
			|||
            	<img src="pos_claims.png"> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
        <div class="oe_span12"> | 
				
			|||
            <p class='oe_mt32'><center> | 
				
			|||
                This application allows you to manage your customers claims. | 
				
			|||
            </center></p> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</section> | 
				
			|||
 | 
				
			|||
<section class="oe_container oe_dark"> | 
				
			|||
    <div class="oe_row oe_spaced"> | 
				
			|||
        <h3 class="oe_slogan">Create Claims</h3> | 
				
			|||
        <div class="oe_span6"> | 
				
			|||
            <div class="oe_demo oe_picture oe_screenshot"> | 
				
			|||
            	<img src="interface_pos.png"> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
        <div class="oe_span6"> | 
				
			|||
        <p class='oe_mt32'> | 
				
			|||
            Create claims easily from pos interface.Ticket is generated automatically and | 
				
			|||
            it is send to corresponding user on creation of claims. | 
				
			|||
        </p> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</section> | 
				
			|||
 | 
				
			|||
<section class="oe_container oe_dark"> | 
				
			|||
    <div class="oe_row oe_space"> | 
				
			|||
        <h3 class="oe_slogan"> Automatic Stage Change</h3> | 
				
			|||
        <div class="oe_span6"> | 
				
			|||
        <p class='oe_mt32'> | 
				
			|||
                On assigning claim to responsible user,state of claim is changed. | 
				
			|||
        </p> | 
				
			|||
        </div> | 
				
			|||
        <div class="oe_span6"> | 
				
			|||
            <div class="oe_demo oe_picture oe_screenshot"> | 
				
			|||
                <img src="claim_state_change.png"> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</section> | 
				
			|||
 | 
				
			|||
<section class="oe_container oe_dark"> | 
				
			|||
    <div class="oe_row oe_spaced"> | 
				
			|||
        <h3 class="oe_slogan">Email Notification</h3> | 
				
			|||
        <div class="oe_span6"> | 
				
			|||
            <div class="oe_demo oe_picture oe_screenshot"> | 
				
			|||
            	<img src="email.png"> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
        <div class="oe_span6"> | 
				
			|||
        <p class='oe_mt32'> | 
				
			|||
         An email is sent to corresponding customer | 
				
			|||
        </p> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</section> | 
				
			|||
 | 
				
			|||
<section class="oe_container oe_dark"> | 
				
			|||
    <div class="oe_row oe_space"> | 
				
			|||
        <h3 class="oe_slogan"> Calender view</h3> | 
				
			|||
        <div class="oe_span6"> | 
				
			|||
        <p class='oe_mt32'> | 
				
			|||
        You can see all your next action on calender view | 
				
			|||
        </p> | 
				
			|||
        </div> | 
				
			|||
        <div class="oe_span6"> | 
				
			|||
            <div class="oe_demo oe_picture oe_screenshot"> | 
				
			|||
                <img src="calender.png"> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</section> | 
				
			|||
 | 
				
			|||
<section class="oe_container"> | 
				
			|||
    <div class="oe_row oe_spaced"> | 
				
			|||
        <h3 class="oe_slogan">View your claims</h3> | 
				
			|||
        <div class="oe_span12"> | 
				
			|||
            <div class="oe_demo oe_picture oe_screenshot"> | 
				
			|||
            	<img src="claim.png"> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</section> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
| 
		 After Width: | Height: | Size: 127 KiB  | 
| 
		 After Width: | Height: | Size: 83 KiB  | 
| 
		 After Width: | Height: | Size: 142 KiB  | 
@ -0,0 +1,184 @@ | 
				
			|||
odoo.define('point_of_sale.pos_claims', function (require) { | 
				
			|||
"use strict"; | 
				
			|||
var chrome = require('point_of_sale.chrome'); | 
				
			|||
var db = require('point_of_sale.DB'); | 
				
			|||
var gui = require('point_of_sale.gui'); | 
				
			|||
var models = require('point_of_sale.models'); | 
				
			|||
var Model = require('web.DataModel'); | 
				
			|||
var popup = require('point_of_sale.popups'); | 
				
			|||
var Model = require('web.DataModel'); | 
				
			|||
var core = require('web.core'); | 
				
			|||
var QWeb = core.qweb; | 
				
			|||
var _t = core._t; | 
				
			|||
 | 
				
			|||
models.load_models({ | 
				
			|||
    model: 'pos.order', | 
				
			|||
    fields: ['name', 'lines', 'partner_id'], | 
				
			|||
    loaded: function(self,claim_orders){ | 
				
			|||
        self.order = []; | 
				
			|||
        for (var i = 0; i < claim_orders.length; i++) { | 
				
			|||
            self.order[i] = claim_orders[i]; | 
				
			|||
        } | 
				
			|||
    }, | 
				
			|||
}); | 
				
			|||
 | 
				
			|||
models.load_models({ | 
				
			|||
    model: 'res.partner', | 
				
			|||
    fields: ['name', 'id', 'email'], | 
				
			|||
    loaded: function(self,claim_customers){ | 
				
			|||
        self.customer = []; | 
				
			|||
        for (var i = 0; i < claim_customers.length; i++) { | 
				
			|||
            self.customer[i] = claim_customers[i]; | 
				
			|||
        } | 
				
			|||
    }, | 
				
			|||
}); | 
				
			|||
 | 
				
			|||
models.load_models({ | 
				
			|||
    model: 'pos.order.line', | 
				
			|||
    fields: ['product_id','qty'], | 
				
			|||
    loaded: function(self,claim_products){ | 
				
			|||
    self.order_line = []; | 
				
			|||
    for (var i = 0; i < claim_products.length; i++) { | 
				
			|||
        self.order_line[i] = claim_products[i]; | 
				
			|||
    } | 
				
			|||
    }, | 
				
			|||
}); | 
				
			|||
 | 
				
			|||
chrome.Chrome.include({ | 
				
			|||
    events: { | 
				
			|||
            "click .pos-claims": "on_click_pos_claims", | 
				
			|||
        }, | 
				
			|||
    renderElement: function(){ | 
				
			|||
        var self = this; | 
				
			|||
        return this._super(); | 
				
			|||
    }, | 
				
			|||
     on_click_pos_claims: function () { | 
				
			|||
        var list =[]; | 
				
			|||
        var list1 =[]; | 
				
			|||
        for (var i = 0; i < this.pos.order.length; i++) { | 
				
			|||
            var orders = this.pos.order[i]; | 
				
			|||
            if (orders.name){ | 
				
			|||
                list.push({ | 
				
			|||
                    'label': orders.name, | 
				
			|||
                    'id':orders.id, | 
				
			|||
                    }); | 
				
			|||
            } | 
				
			|||
        } | 
				
			|||
         for (var i = 0; i < this.pos.customer.length; i++) { | 
				
			|||
            var customers = this.pos.customer[i]; | 
				
			|||
            if (customers.name){ | 
				
			|||
                list1.push({ | 
				
			|||
                    'label': customers.name, | 
				
			|||
                    'id':customers.id, | 
				
			|||
                    }); | 
				
			|||
            } | 
				
			|||
        } | 
				
			|||
        this.gui.show_popup('pos_claim',{orders:list, customers:list1}); | 
				
			|||
    }, | 
				
			|||
}); | 
				
			|||
 | 
				
			|||
var PosClaimWidget = popup.extend({ | 
				
			|||
    template:'PosClaimWidget', | 
				
			|||
    events : { | 
				
			|||
            'click .selected_order': 'on_click_select_order', | 
				
			|||
            'click .selected_customer': 'on_click_select_customer', | 
				
			|||
            'click .button.confirm': 'click_confirm', | 
				
			|||
            'click .button.cancel':  'click_cancel', | 
				
			|||
        }, | 
				
			|||
    show : function(options){ | 
				
			|||
        options = options || []; | 
				
			|||
        var self = this; | 
				
			|||
        this._super(options); | 
				
			|||
        this.orders = options.orders || []; | 
				
			|||
        this.customers = options.customers || []; | 
				
			|||
        this.product = options.product || []; | 
				
			|||
        this.renderElement(); | 
				
			|||
        }, | 
				
			|||
 | 
				
			|||
    on_click_select_order:function(){ | 
				
			|||
    var selected_order = $('.selected_order').val(); | 
				
			|||
    for (var i = 0; i < this.pos.order.length; i++) { | 
				
			|||
        if (this.pos.order[i].id==selected_order){ | 
				
			|||
            var orders = this.pos.order[i]; | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
    if (orders) { | 
				
			|||
        var x = document.getElementsByClassName('selected_customer'); | 
				
			|||
        x[0].selectedIndex = orders.partner_id[0]; | 
				
			|||
        if (orders.partner_id) | 
				
			|||
        { | 
				
			|||
            for (var i = 0; i < this.pos.customer.length; i++) { | 
				
			|||
            if (this.pos.customer[i].id==orders.partner_id[0]){ | 
				
			|||
                var customers = this.pos.customer[i]; | 
				
			|||
                } | 
				
			|||
            } | 
				
			|||
            if (customers) | 
				
			|||
            { | 
				
			|||
                var x = document.getElementsByClassName('select_email'); | 
				
			|||
                x[0].value = customers.email; | 
				
			|||
            } | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
    var product = []; | 
				
			|||
        if (orders) | 
				
			|||
        { | 
				
			|||
            for (var i = 0; i < this.pos.order_line.length; i++){ | 
				
			|||
            for (var j = 0; j < orders.lines.length; j++){ | 
				
			|||
                if (this.pos.order_line[i].id == orders.lines[j]){ | 
				
			|||
                var product_line = this.pos.order_line[i]; | 
				
			|||
                if (product_line.product_id){ | 
				
			|||
                    product.push({ | 
				
			|||
                        'label': product_line.product_id[1], | 
				
			|||
                        'id':product_line.id, | 
				
			|||
                        }); | 
				
			|||
                    } | 
				
			|||
                } | 
				
			|||
            } | 
				
			|||
         } | 
				
			|||
            this.$('.selected_product').html(QWeb.render('PosClaimProductWidget',{product:product})); | 
				
			|||
        } | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    on_click_select_customer:function() { | 
				
			|||
        var selected_customer = $('.selected_customer').val(); | 
				
			|||
        for (var i = 0; i < this.pos.customer.length; i++) { | 
				
			|||
        if (this.pos.customer[i].id==selected_customer){ | 
				
			|||
            var customers = this.pos.customer[i]; | 
				
			|||
            } | 
				
			|||
        } | 
				
			|||
        if (customers) | 
				
			|||
        { | 
				
			|||
            var x = document.getElementsByClassName('select_email'); | 
				
			|||
            x[0].value = customers.email; | 
				
			|||
        } | 
				
			|||
    }, | 
				
			|||
     | 
				
			|||
   click_confirm: function(){ | 
				
			|||
        var self   = this; | 
				
			|||
        var fields = {}; | 
				
			|||
        this.$('.popup .detail').each(function(idx,el){ | 
				
			|||
        fields[el.name] = el.value; | 
				
			|||
        }); | 
				
			|||
        if (fields.partner_id && fields.claim_product) { | 
				
			|||
            new Model('pos.claims').call('create_from_ui', [fields]); | 
				
			|||
            this.gui.close_popup(); | 
				
			|||
        } | 
				
			|||
       else{ | 
				
			|||
            alert('You need to specify the Product and Customer') | 
				
			|||
        } | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
   click_cancel: function(){ | 
				
			|||
        this.gui.close_popup(); | 
				
			|||
        if (this.options.cancel) { | 
				
			|||
            this.options.cancel.call(this); | 
				
			|||
        } | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
   renderElement: function(){ | 
				
			|||
        var self = this; | 
				
			|||
        return this._super(); | 
				
			|||
    }, | 
				
			|||
}); | 
				
			|||
gui.define_popup({name:'pos_claim', widget: PosClaimWidget}); | 
				
			|||
}); | 
				
			|||
@ -0,0 +1,105 @@ | 
				
			|||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			|||
<template id="template" xml:space="preserve"> | 
				
			|||
<t t-extend="Chrome"> | 
				
			|||
    <t t-jquery="div.pos-rightheader" t-operation="append"> | 
				
			|||
        <div class="oe_status"> | 
				
			|||
            <a title="Claims" href="#"> | 
				
			|||
                <i class="fa fa-exclamation-triangle pos-claims"/> | 
				
			|||
            </a> | 
				
			|||
        </div> | 
				
			|||
    </t> | 
				
			|||
</t> | 
				
			|||
 | 
				
			|||
<t t-name="PosClaimWidget"> | 
				
			|||
    <div class="modal-dialog"> | 
				
			|||
        <div class="popup popup-pos_claim"> | 
				
			|||
            <p class="title"> | 
				
			|||
                <a >Pos Claims</a> | 
				
			|||
            </p> | 
				
			|||
            <div style="text-align: left !important;padding-left: 70px;padding-top: 7px;border: solid;"> | 
				
			|||
                <table> | 
				
			|||
                    <tr> | 
				
			|||
                        <td> | 
				
			|||
                            <label>Select Order:</label> | 
				
			|||
                        </td> | 
				
			|||
                        <td style="padding-left: 21px;"> | 
				
			|||
                            <select class="selected_order detail" name="name"> | 
				
			|||
                                <option/> | 
				
			|||
                                <t t-foreach="widget.orders || []" t-as="orders"> | 
				
			|||
                                <option t-att-value="orders.id" t-attf-class="select_order"> | 
				
			|||
                                    <t t-esc="orders.label" /> | 
				
			|||
                                </option> | 
				
			|||
                                </t> | 
				
			|||
                            </select> | 
				
			|||
                        </td> | 
				
			|||
                    </tr> | 
				
			|||
                    <tr> | 
				
			|||
                        <td> | 
				
			|||
                            <label>Customer:</label> | 
				
			|||
                        </td> | 
				
			|||
                        <td style="padding-left: 21px;"> | 
				
			|||
                             <select class="selected_customer detail" name="partner_id"> | 
				
			|||
                                <option/> | 
				
			|||
                                <t t-foreach="widget.customers || []" t-as="customers"> | 
				
			|||
                                <option t-att-value="customers.id" t-attf-class="select_customer"> | 
				
			|||
                                    <t t-esc="customers.label" /> | 
				
			|||
                                </option> | 
				
			|||
                                </t> | 
				
			|||
                             </select> | 
				
			|||
                        </td> | 
				
			|||
                    </tr> | 
				
			|||
                    <tr> | 
				
			|||
                        <td> | 
				
			|||
                            <label>Email:</label> | 
				
			|||
                        </td> | 
				
			|||
                        <td style="padding-left: 21px;"> | 
				
			|||
                            <input type='text'  class="select_email detail" name="partner_email"/> | 
				
			|||
                        </td> | 
				
			|||
                    </tr> | 
				
			|||
                </table> | 
				
			|||
                <div class="selected_product" style="align:left;"> | 
				
			|||
                </div> | 
				
			|||
                <div class="selected_quantity" style="align:left;"> | 
				
			|||
                 </div> | 
				
			|||
                 <div class="footer centered"> | 
				
			|||
                    <div class="button cancel"> | 
				
			|||
                        Cancel | 
				
			|||
                    </div> | 
				
			|||
                    <div class="button confirm"> | 
				
			|||
                        Ok | 
				
			|||
                    </div> | 
				
			|||
                 </div> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</t> | 
				
			|||
 | 
				
			|||
<t t-name="PosClaimProductWidget"> | 
				
			|||
    <table> | 
				
			|||
        <tr> | 
				
			|||
            <td> | 
				
			|||
                <label>Select Product:</label> | 
				
			|||
            </td> | 
				
			|||
            <td> | 
				
			|||
                <select class="select_product detail" name="claim_product"> | 
				
			|||
                    <option/> | 
				
			|||
                    <t t-foreach="product || []" t-as="products"> | 
				
			|||
                    <option t-att-value="products.id" t-attf-class="select_pdt"> | 
				
			|||
                        <t t-esc="products.label" /> | 
				
			|||
                    </option> | 
				
			|||
                    </t> | 
				
			|||
                </select> | 
				
			|||
            </td> | 
				
			|||
        </tr> | 
				
			|||
        <tr> | 
				
			|||
            <td> | 
				
			|||
            <label>Description :</label> | 
				
			|||
            </td> | 
				
			|||
            <td> | 
				
			|||
                <input type='text'  class="select_description detail" name="description"/> | 
				
			|||
            </td> | 
				
			|||
        </tr> | 
				
			|||
    </table> | 
				
			|||
</t> | 
				
			|||
 | 
				
			|||
</template> | 
				
			|||
@ -0,0 +1,13 @@ | 
				
			|||
<?xml version="1.0"?> | 
				
			|||
<openerp> | 
				
			|||
    <data> | 
				
			|||
        <record model="ir.sequence" id="seq_pos_claim"> | 
				
			|||
            <field name="name">POS Claims</field> | 
				
			|||
            <field name="code">pos.claims</field> | 
				
			|||
            <field name="prefix">Ticket/</field> | 
				
			|||
            <field name="number_next">001</field> | 
				
			|||
            <field name="number_increment">1</field> | 
				
			|||
            <field name="padding">3</field> | 
				
			|||
        </record> | 
				
			|||
    </data> | 
				
			|||
</openerp> | 
				
			|||
@ -0,0 +1,10 @@ | 
				
			|||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			|||
<openerp> | 
				
			|||
    <data> | 
				
			|||
        <template id="pos_claims" inherit_id="point_of_sale.assets"> | 
				
			|||
            <xpath expr="." position="inside"> | 
				
			|||
                <script type="text/javascript" src="/pos_claims/static/src/js/pos_claim.js"/> | 
				
			|||
            </xpath> | 
				
			|||
        </template> | 
				
			|||
    </data> | 
				
			|||
</openerp> | 
				
			|||
@ -0,0 +1,218 @@ | 
				
			|||
<?xml version="1.0"?> | 
				
			|||
 | 
				
			|||
<openerp> | 
				
			|||
    <data> | 
				
			|||
        <!-- Form view of pos claim --> | 
				
			|||
        <record id="pos_claim_category_form" model="ir.ui.view"> | 
				
			|||
            <field name="name">Claims</field> | 
				
			|||
            <field name="model">pos.claims</field> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <form string="ClaimS"> | 
				
			|||
                    <header> | 
				
			|||
                        <button name="action_sent" | 
				
			|||
                                string="Send Mail" | 
				
			|||
                                type="object" | 
				
			|||
                                state="assigned" | 
				
			|||
                                class="oe_highlight" | 
				
			|||
                                context="{'send_rfq':True }" | 
				
			|||
                                attrs = "{'invisible': [('state', 'in', ('new','settle','feedback','paid','reject'))]}" /> | 
				
			|||
                        <button name="action_settle" | 
				
			|||
                                string="Accept" | 
				
			|||
                                type="object" | 
				
			|||
                                state="feedback" | 
				
			|||
                                class="oe_highlight" | 
				
			|||
                                attrs = "{'invisible': [('state', 'in', ('new','settle','paid','reject','assigned'))]}"/> | 
				
			|||
                        <button name="action_reject" | 
				
			|||
                                string="Cancel" | 
				
			|||
                                type="object" | 
				
			|||
                                state="feedback" | 
				
			|||
                                class="oe_highlight" | 
				
			|||
                                attrs = "{'invisible': [('state', 'in', ('new','settle','paid','reject','assigned'))]}"/> | 
				
			|||
                        <field name="state" | 
				
			|||
                               widget="statusbar" | 
				
			|||
                               statusbar_visible="new,assigned,feedback,settle,reject" clickable="1"/> | 
				
			|||
                    </header> | 
				
			|||
                    <sheet> | 
				
			|||
                        <div class="oe_title"> | 
				
			|||
                        <h1> | 
				
			|||
                            <field name="ref_name" readonly="1"/> | 
				
			|||
                        </h1> | 
				
			|||
                        </div> | 
				
			|||
                        <group> | 
				
			|||
                            <group> | 
				
			|||
                                <field name="name" style="width:40%%"  options="{'no_create': True}"/> | 
				
			|||
                                <field name="claim_date"/> | 
				
			|||
                            </group> | 
				
			|||
                            <group colspan="4" col="4"> | 
				
			|||
                                <field name="user_id"  style="width:70%%"/> | 
				
			|||
                                <field name="priority" widget="priority"/> | 
				
			|||
                            </group> | 
				
			|||
                        </group> | 
				
			|||
                        <notebook> | 
				
			|||
 | 
				
			|||
                            <page string="Claim Description"> | 
				
			|||
                                <group> | 
				
			|||
                                    <group> | 
				
			|||
                                        <separator colspan="2" string="Product Details"/> | 
				
			|||
                                        <field name="claim_product" style="width:60%%"  options="{'no_create': True}"/> | 
				
			|||
                                        <field name="claim_qty" style="width:60%%"/> | 
				
			|||
                                        <field name="session_id"  style="width:60%%"/> | 
				
			|||
                                    </group> | 
				
			|||
                                    <group> | 
				
			|||
                                    </group> | 
				
			|||
                                </group> | 
				
			|||
                                <group> | 
				
			|||
                                    <group> | 
				
			|||
                                        <separator colspan="2" string="Claim Reporter"/> | 
				
			|||
                                        <field name="partner_id"/> | 
				
			|||
                                        <field name="partner_phone"/> | 
				
			|||
                                        <field name="partner_email"/> | 
				
			|||
                                    </group> | 
				
			|||
                                    <group> | 
				
			|||
                                    </group> | 
				
			|||
                                </group> | 
				
			|||
                                <group colspan="2" col="2"> | 
				
			|||
                                    <separator colspan="2" string="Responsibilities"/> | 
				
			|||
                                    <field name="user_fault"/> | 
				
			|||
                                    <field name="cate_id" style="width:25%%" options="{'no_create': True, 'no_open': True}"/> | 
				
			|||
                                </group> | 
				
			|||
                                <separator colspan="4" string="Claim/Action Description" groups="base.group_user"/> | 
				
			|||
                                <field name="description" colspan="4" nolabel="1"/> | 
				
			|||
                            </page> | 
				
			|||
                            <page string="Follow Up" groups="base.group_user"> | 
				
			|||
                                <group colspan="2" col="2"> | 
				
			|||
                                    <separator colspan="2" string="Actions"/> | 
				
			|||
                                    <field name="date_action_next"/> | 
				
			|||
                                    <field name="action_next"/> | 
				
			|||
                                </group> | 
				
			|||
                                <group colspan="2" col="2"> | 
				
			|||
                                    <separator colspan="2" string="Root Causes"/> | 
				
			|||
                                    <field name="cause" colspan="2" nolabel="1"/> | 
				
			|||
                                </group> | 
				
			|||
                                <group colspan="2" col="2"> | 
				
			|||
                                    <separator colspan="2" string="Resolution Actions"/> | 
				
			|||
                                    <field name="type_action" style="width:25%%"/> | 
				
			|||
                                    <field name="resolution" colspan="2" nolabel="1" placeholder="Action Description..."/> | 
				
			|||
                                </group> | 
				
			|||
                            </page> | 
				
			|||
                        </notebook> | 
				
			|||
                    </sheet> | 
				
			|||
                    <div class="oe_chatter"> | 
				
			|||
                        <field name="message_follower_ids" widget="mail_followers"/> | 
				
			|||
                        <field name="message_ids" widget="mail_thread"/> | 
				
			|||
                    </div> | 
				
			|||
                </form> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <!-- Tree view of pos claim --> | 
				
			|||
 | 
				
			|||
        <record model="ir.ui.view" id="pos_case_claims_tree_view"> | 
				
			|||
            <field name="name">Claims</field> | 
				
			|||
            <field name="model">pos.claims</field> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <tree string="Claims"> | 
				
			|||
                    <field name="ref_name" string="Ticket Number"/> | 
				
			|||
                    <field name="name"/> | 
				
			|||
                    <field name="claim_product"/> | 
				
			|||
                    <field name="claim_qty"/> | 
				
			|||
                    <field name="partner_id"/> | 
				
			|||
                    <field name="session_id"/> | 
				
			|||
                    <field name="claim_date"/> | 
				
			|||
                    <field name="date_action_next"/> | 
				
			|||
                    <field name="action_next"/> | 
				
			|||
                    <field name="cate_id" string="Type"/> | 
				
			|||
                    <field name="state"/> | 
				
			|||
                </tree> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <!-- Calender view of pos claim --> | 
				
			|||
        <record model="ir.ui.view" id="pos_case_claims_calendar_view"> | 
				
			|||
            <field name="name">Claims</field> | 
				
			|||
            <field name="model">pos.claims</field> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <calendar string="Claims" date_start="date_action_next" color="user_id"> | 
				
			|||
                    <field name="name"/> | 
				
			|||
                </calendar> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <record id="pos_claim_cate_action" model="ir.actions.act_window"> | 
				
			|||
            <field name="name">Claims</field> | 
				
			|||
            <field name="res_model">pos.claims</field> | 
				
			|||
            <field name="view_mode">tree,form,calendar</field> | 
				
			|||
            <field name="help" type="html"> | 
				
			|||
                <p class="oe_view_nocontent_create"> | 
				
			|||
                Click to create a claim category. | 
				
			|||
                </p><p> | 
				
			|||
                Create claim categories to better manage and classify your | 
				
			|||
                claims. Some example of claims can be: preventive action, | 
				
			|||
                corrective action. | 
				
			|||
                </p> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <!--Email template --> | 
				
			|||
        <record id="email_template_edi_pos_ticket" model="mail.template"> | 
				
			|||
            <field name="name">Pos Ticket</field> | 
				
			|||
            <field name="email_from">${(object.user_id.email)}</field> | 
				
			|||
            <field name="email_to">${object.partner_id.id}</field> | 
				
			|||
            <field name="partner_to">${object.partner_id.id}</field> | 
				
			|||
            <field name="subject">Pos Ticket</field> | 
				
			|||
            <field name="model_id" ref="pos_claims.model_pos_claims" /> | 
				
			|||
            <field name="auto_delete" eval="True" /> | 
				
			|||
            <field name="body_html"><![CDATA[ | 
				
			|||
                <div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; "> | 
				
			|||
                    <p>Dear ${object.partner_id.name},</p> | 
				
			|||
                     <p> | 
				
			|||
                         Your claim is reported successfully and your ticket ${object.ref_name} is now on hold. | 
				
			|||
                    </p> | 
				
			|||
                    <p> | 
				
			|||
                         We will be in contact with you in the coming days to make our best attempt in regaining your | 
				
			|||
                         confidence in our company. | 
				
			|||
                    </p> | 
				
			|||
                    <p> | 
				
			|||
                         Please accept our sincerest apology for any trouble or inconvenience we have caused you. | 
				
			|||
                    </p> | 
				
			|||
                    <p>Thank you,</p> | 
				
			|||
 | 
				
			|||
                </div> | 
				
			|||
            ]]> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <record id="email_template_edi_pos_claims" model="mail.template"> | 
				
			|||
            <field name="name">Pos Claims</field> | 
				
			|||
                <field name="email_from">${(object.user_id.email}</field> | 
				
			|||
                <field name="email_to">${object.partner_id.id}</field> | 
				
			|||
                <field name="partner_to">${object.partner_id.id}</field> | 
				
			|||
                <field name="subject">Pos Claims</field> | 
				
			|||
                <field name="model_id" ref="pos_claims.model_pos_claims" /> | 
				
			|||
                <field name="auto_delete" eval="True" /> | 
				
			|||
                <field name="body_html"><![CDATA[ | 
				
			|||
                    <div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; "> | 
				
			|||
                        <p>Dear ${object.partner_id.name},</p> | 
				
			|||
                        <p> Thank you for taking the time to communicate to us why our {product / service } did not meet | 
				
			|||
                        your expectations. We have every desire to address your needs and provide the best solution | 
				
			|||
                        available to resolve your issue as soon as possible.</p> | 
				
			|||
                        <p>  We  will be in contact with you in the coming days to make our best attempt in regaining your | 
				
			|||
                        confidence in our company. In addition, we will further evaluate how we can prevent this problem | 
				
			|||
                        from occurring again in the future.</p> | 
				
			|||
                        <p>Please accept our sincerest apology for any trouble or inconvenience we have caused you. Again, | 
				
			|||
                        we highly appreciate your feedback as it will assist us in becoming better at what we do. | 
				
			|||
                        As with any business like ours, the greatest advertising we can have is word of mouth from a | 
				
			|||
                        satisfied customer. It’s  our goal to retain you as a satisfied customer and will hope to | 
				
			|||
                        serve you again in the future. | 
				
			|||
                        <p>Thank you,</p> | 
				
			|||
 | 
				
			|||
                </div> | 
				
			|||
                ]]> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <menuitem name="Pos Claims" id="menu_point_of_sale_claim" parent="point_of_sale.menu_point_root" sequence="22"/> | 
				
			|||
        <menuitem name="Pos Claims" parent="menu_point_of_sale_claim" id="point_of_sale_claim" | 
				
			|||
              action="pos_claim_cate_action" sequence="10" /> | 
				
			|||
    </data> | 
				
			|||
</openerp> | 
				
			|||