@ -0,0 +1,35 @@ | 
				
			|||
Mobile Service Management | 
				
			|||
========================= | 
				
			|||
Module for mobile service shop daily activities | 
				
			|||
 | 
				
			|||
Configuration | 
				
			|||
============= | 
				
			|||
* No additional configurations needed | 
				
			|||
 | 
				
			|||
Company | 
				
			|||
------- | 
				
			|||
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__ | 
				
			|||
 | 
				
			|||
Credits | 
				
			|||
------- | 
				
			|||
* Developers: 	Milind Mohan @ Cybrosys, odoo@cybrosys.com | 
				
			|||
                Mohammed Shahil M P @cybrosys, odoo@cybrosys.com | 
				
			|||
                Neenu Merlin Jose @cybrosys, odoo@cybrosys.com | 
				
			|||
 | 
				
			|||
Bug Tracker | 
				
			|||
----------- | 
				
			|||
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. | 
				
			|||
 | 
				
			|||
Maintainer | 
				
			|||
========== | 
				
			|||
.. image:: https://cybrosys.com/images/logo.png | 
				
			|||
   :target: https://cybrosys.com | 
				
			|||
 | 
				
			|||
This module is maintained by Cybrosys Technologies. | 
				
			|||
 | 
				
			|||
For support and more information, please visit `Our Website <https://cybrosys.com/>`__ | 
				
			|||
 | 
				
			|||
Further information | 
				
			|||
=================== | 
				
			|||
HTML Description: `<static/description/index.html>`__ | 
				
			|||
 | 
				
			|||
@ -0,0 +1,24 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################# | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			|||
#    Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com) | 
				
			|||
#            Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com) | 
				
			|||
#    You can modify it under the terms of the GNU LESSER | 
				
			|||
#    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    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 AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################# | 
				
			|||
 | 
				
			|||
from . import models | 
				
			|||
from . import wizard | 
				
			|||
@ -0,0 +1,56 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################# | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			|||
#    Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com) | 
				
			|||
#            Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com) | 
				
			|||
#            Noorjahan @ Cybrosys, (odoo@cybrosys.com) | 
				
			|||
#    You can modify it under the terms of the GNU AFFERO | 
				
			|||
#    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################# | 
				
			|||
{ | 
				
			|||
    'name': 'Mobile Service Management', | 
				
			|||
    'version': '16.0.1.0.0', | 
				
			|||
    'summary': 'Module for managing mobile service shop daily activities.', | 
				
			|||
    'category': 'Industries', | 
				
			|||
    'author': 'Cybrosys Techno Solutions', | 
				
			|||
    'company': 'Cybrosys Techno Solutions', | 
				
			|||
    'website': 'https://www.cybrosys.com', | 
				
			|||
    'depends': ['base', 'stock_account', 'mail', 'product', 'account'], | 
				
			|||
    'data': ['security/security.xml', | 
				
			|||
             'security/ir.model.access.csv', | 
				
			|||
             'views/mobile_service_views.xml', | 
				
			|||
             'views/product_template.xml', | 
				
			|||
             'views/terms_and_condition.xml', | 
				
			|||
             'views/complaint_template.xml', | 
				
			|||
             'views/complaint_type.xml', | 
				
			|||
             'views/brand_models.xml', | 
				
			|||
             'views/brand.xml', | 
				
			|||
             'wizard/mobile_create_invoice_views.xml', | 
				
			|||
             'reports/mobile_service_ticket.xml', | 
				
			|||
             'reports/service_ticket_template.xml', | 
				
			|||
             'data/mobile_service_data.xml', | 
				
			|||
             'data/mobile_service_email_template.xml'], | 
				
			|||
    'images': ['static/description/banner.png'], | 
				
			|||
    'assets': { | 
				
			|||
        'web.assets_backend': [ | 
				
			|||
            'mobile_service_shop/static/src/css/mobile_service.css', | 
				
			|||
        ], | 
				
			|||
    }, | 
				
			|||
    'installable': True, | 
				
			|||
    'application': True, | 
				
			|||
    'auto_install': False, | 
				
			|||
    'license': 'LGPL-3', | 
				
			|||
} | 
				
			|||
@ -0,0 +1,23 @@ | 
				
			|||
<?xml version="1.0" encoding="utf-8"?> | 
				
			|||
<odoo> | 
				
			|||
 | 
				
			|||
    <data noupdate="1"> | 
				
			|||
        <record model="account.journal" id="mobile_service_journal"> | 
				
			|||
            <field name="name">Mobile Service</field> | 
				
			|||
            <field name="type">sale</field> | 
				
			|||
            <field name="code">SERV</field> | 
				
			|||
            <field name="active">TRUE</field> | 
				
			|||
        </record> | 
				
			|||
        <record model="product.template" id="mobile_service_product"> | 
				
			|||
            <field name="name">Mobile Service Charge</field> | 
				
			|||
            <field name="type">service</field> | 
				
			|||
<!--            <field name="invoice_policy">order</field>--> | 
				
			|||
        </record> | 
				
			|||
        <record model="product.template" id="mobile_service_advance_product"> | 
				
			|||
            <field name="name">Mobile Service Advance</field> | 
				
			|||
            <field name="type">service</field> | 
				
			|||
<!--            <field name="invoice_policy">order</field>--> | 
				
			|||
        </record> | 
				
			|||
    </data> | 
				
			|||
 | 
				
			|||
</odoo> | 
				
			|||
@ -0,0 +1,24 @@ | 
				
			|||
<?xml version="1.0" encoding="utf-8"?> | 
				
			|||
<odoo> | 
				
			|||
 | 
				
			|||
    <data noupdate="1"> | 
				
			|||
        <!--Email template --> | 
				
			|||
        <record id="email_template_mobile_service" model="mail.template"> | 
				
			|||
            <field name="name">Service Status Email</field> | 
				
			|||
            <field name="model_id" ref="mobile_service_shop.model_mobile_service"/> | 
				
			|||
            <field name="email_from">${(object.user_id.email |safe}</field> | 
				
			|||
            <field name="email_to" >${object.person_name.email |safe}</field> | 
				
			|||
            <field name="subject">Ref ${object.name or 'n/a' }</field> | 
				
			|||
            <field name="auto_delete" eval="True"/> | 
				
			|||
            <field name="lang">${object.person_name.lang}</field> | 
				
			|||
            <field name="body_html"><![CDATA[ | 
				
			|||
                <p>Dear ${object.person_name.name},</p> | 
				
			|||
                <p>Your service request for ${object.brand_name.brand_name or 'n/a' } (${object.model_name.mobile_brand_models or 'n/a' }) with reference no <b>${object.name or 'n/a' }</b> has been processed to <b>${object.service_state or 'n/a' }</b> stage.</p> | 
				
			|||
                <p>If you have any questions, please let us know.</p> | 
				
			|||
                <p>Best regards,</p>]]> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
    </data> | 
				
			|||
 | 
				
			|||
</odoo> | 
				
			|||
@ -0,0 +1,8 @@ | 
				
			|||
## Module <mobile_service_shop> | 
				
			|||
 | 
				
			|||
#### 05.10.2020 | 
				
			|||
#### Version 16.0.1.0.0 | 
				
			|||
#### ADD | 
				
			|||
 | 
				
			|||
Initial Commit. | 
				
			|||
 | 
				
			|||
@ -0,0 +1,25 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################# | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			|||
#    Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com) | 
				
			|||
#            Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com) | 
				
			|||
#    You can modify it under the terms of the GNU AFFERO | 
				
			|||
#    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################# | 
				
			|||
from . import mobile_service | 
				
			|||
from . import service_ticket | 
				
			|||
from . import product_order_line | 
				
			|||
from . import product | 
				
			|||
@ -0,0 +1,405 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################# | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			|||
#    Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com) | 
				
			|||
#            Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com) | 
				
			|||
#    You can modify it under the terms of the GNU AFFERO | 
				
			|||
#    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################# | 
				
			|||
############################################################################# | 
				
			|||
from datetime import datetime, date, timedelta | 
				
			|||
from odoo import models, fields, api, _ | 
				
			|||
from odoo.exceptions import Warning, UserError | 
				
			|||
import pytz | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class MobileServiceShop(models.Model): | 
				
			|||
    _name = 'mobile.service' | 
				
			|||
    _rec_name = 'name' | 
				
			|||
    _inherit = ['mail.thread', 'mail.activity.mixin'] | 
				
			|||
 | 
				
			|||
    name = fields.Char(string='Service Number', copy=False, default="New") | 
				
			|||
    person_name = fields.Many2one('res.partner', string="Customer Name", required=True) | 
				
			|||
    contact_no = fields.Char(related='person_name.mobile', string="Contact Number") | 
				
			|||
    email_id = fields.Char(related='person_name.email', string="Email") | 
				
			|||
 | 
				
			|||
    street = fields.Char(related='person_name.street', string="Address") | 
				
			|||
    street2 = fields.Char(related='person_name.street2', string="Address") | 
				
			|||
    city = fields.Char(related='person_name.city', string="Address") | 
				
			|||
    state_id = fields.Many2one(related='person_name.state_id', string="Address") | 
				
			|||
    zip = fields.Char(related='person_name.zip', string="Address") | 
				
			|||
    country_id = fields.Many2one(related='person_name.country_id', string="Address") | 
				
			|||
 | 
				
			|||
    brand_name = fields.Many2one('mobile.brand', string="Mobile Brand") | 
				
			|||
    is_in_warranty = fields.Boolean( | 
				
			|||
        'In Warranty', default=False, | 
				
			|||
        help="Specify if the product is in warranty.") | 
				
			|||
 | 
				
			|||
    warranty_number = fields.Char(string="Warranty No ", help="warranty details") | 
				
			|||
 | 
				
			|||
    re_repair = fields.Boolean( | 
				
			|||
        'Re-repair', default=False, | 
				
			|||
        help="Re-repairing.") | 
				
			|||
 | 
				
			|||
    imei_no = fields.Char(string="IMEI Number") | 
				
			|||
 | 
				
			|||
    model_name = fields.Many2one('brand.model', string="Model", domain="[('mobile_brand_name','=',brand_name)]") | 
				
			|||
    image_medium = fields.Binary(related='model_name.image_medium', store=True, attachment=True) | 
				
			|||
    date_request = fields.Date(string="Requested date", default=fields.Date.context_today) | 
				
			|||
    return_date = fields.Date(string="Return date", required=True) | 
				
			|||
    technician_name = fields.Many2one('res.users', string="Technician Name", | 
				
			|||
                                      default=lambda self: self.env.user, required=True) | 
				
			|||
    service_state = fields.Selection([('draft', 'Draft'), ('assigned', 'Assigned'), | 
				
			|||
                                      ('completed', 'Completed'), ('returned', 'Returned'), | 
				
			|||
                                      ('not_solved', 'Not solved')], | 
				
			|||
                                     string='Service Status', default='draft', track_visibility='always') | 
				
			|||
 | 
				
			|||
    complaints_tree = fields.One2many('mobile.complaint.tree', 'complaint_id', string='Complaints Tree') | 
				
			|||
 | 
				
			|||
    product_order_line = fields.One2many('product.order.line', 'product_order_id', string='Parts Order Lines') | 
				
			|||
 | 
				
			|||
    internal_notes = fields.Text(string="Internal notes") | 
				
			|||
    invoice_count = fields.Integer(compute='_invoice_count', string='# Invoice', copy=False) | 
				
			|||
    invoice_ids = fields.Many2many("account.move", string='Invoices', compute="_get_invoiced", readonly=True, | 
				
			|||
                                   copy=False) | 
				
			|||
 | 
				
			|||
    first_payment_inv = fields.Many2one('account.move', copy=False) | 
				
			|||
 | 
				
			|||
    first_invoice_created = fields.Boolean(string="First Invoice Created", invisible=True, copy=False) | 
				
			|||
 | 
				
			|||
    journal_type = fields.Many2one('account.journal', 'Journal', invisible=True, | 
				
			|||
                                   default=lambda self: self.env['account.journal'].search([('code', '=', 'SERV')])) | 
				
			|||
 | 
				
			|||
    company_id = fields.Many2one('res.company', 'Company', | 
				
			|||
                                 default=lambda self: self.env['res.company']._company_default_get('mobile.service')) | 
				
			|||
 | 
				
			|||
    @api.model | 
				
			|||
    def _default_picking_transfer(self): | 
				
			|||
        type_obj = self.env['stock.picking.type'] | 
				
			|||
        company_id = self.env.context.get('company_id') or self.env.user.company_id.id | 
				
			|||
        types = type_obj.search([('code', '=', 'outgoing'), ('warehouse_id.company_id', '=', company_id)], limit=1) | 
				
			|||
        if not types: | 
				
			|||
            types = type_obj.search([('code', '=', 'outgoing'), ('warehouse_id', '=', False)]) | 
				
			|||
        return types[:4] | 
				
			|||
 | 
				
			|||
    stock_picking_id = fields.Many2one('stock.picking', string="Picking Id") | 
				
			|||
 | 
				
			|||
    picking_transfer_id = fields.Many2one('stock.picking.type', 'Deliver To', required=True, | 
				
			|||
                                          default=_default_picking_transfer, | 
				
			|||
                                          help="This will determine picking type of outgoing shipment") | 
				
			|||
 | 
				
			|||
    picking_count = fields.Integer() | 
				
			|||
 | 
				
			|||
    @api.onchange('return_date') | 
				
			|||
    def check_date(self): | 
				
			|||
        if self.return_date != False: | 
				
			|||
            return_date_string = datetime.strptime(str(self.return_date), "%Y-%m-%d") | 
				
			|||
            request_date_string = datetime.strptime(str(self.date_request), "%Y-%m-%d") | 
				
			|||
            if return_date_string < request_date_string: | 
				
			|||
                raise UserError("Return date should be greater than requested date") | 
				
			|||
 | 
				
			|||
    def approve(self): | 
				
			|||
        self.service_state = 'assigned' | 
				
			|||
 | 
				
			|||
    def complete(self): | 
				
			|||
        self.service_state = 'completed' | 
				
			|||
 | 
				
			|||
    def return_to(self): | 
				
			|||
        self.service_state = 'returned' | 
				
			|||
 | 
				
			|||
    def not_solved(self): | 
				
			|||
        self.service_state = 'not_solved' | 
				
			|||
 | 
				
			|||
    def action_send_mail(self): | 
				
			|||
        ''' | 
				
			|||
        This function opens a window to compose an email, with the edi sale template message loaded by default | 
				
			|||
        ''' | 
				
			|||
        self.ensure_one() | 
				
			|||
        ir_model_data = self.env['ir.model.data'] | 
				
			|||
        try: | 
				
			|||
            template_id = ir_model_data._xmlid_lookup('mobile_service_shop.email_template_mobile_service')[2] | 
				
			|||
        except ValueError: | 
				
			|||
            template_id = False | 
				
			|||
        try: | 
				
			|||
            compose_form_id = ir_model_data._xmlid_lookup('mail.email_compose_message_wizard_form')[2] | 
				
			|||
        except ValueError: | 
				
			|||
            compose_form_id = False | 
				
			|||
        ctx = { | 
				
			|||
            'default_model': 'mobile.service', | 
				
			|||
            'default_res_id': self.ids[0], | 
				
			|||
            'default_use_template': bool(template_id), | 
				
			|||
            'default_template_id': template_id, | 
				
			|||
            'default_composition_mode': 'comment', | 
				
			|||
        } | 
				
			|||
        return { | 
				
			|||
            'name': _('Compose Email'), | 
				
			|||
            'type': 'ir.actions.act_window', | 
				
			|||
            'view_mode': 'form', | 
				
			|||
            'res_model': 'mail.compose.message', | 
				
			|||
            'views': [(compose_form_id, 'form')], | 
				
			|||
            'view_id': compose_form_id, | 
				
			|||
            'target': 'new', | 
				
			|||
            'context': ctx, | 
				
			|||
        } | 
				
			|||
 | 
				
			|||
    def return_advance(self): | 
				
			|||
        inv_obj = self.env['account.move'].search([('invoice_origin', '=', self.name)]) | 
				
			|||
        inv_ids = [] | 
				
			|||
        for each in inv_obj: | 
				
			|||
            inv_ids.append(each.id) | 
				
			|||
        view_id = self.env.ref('account.view_move_form').id | 
				
			|||
 | 
				
			|||
 | 
				
			|||
        if inv_ids: | 
				
			|||
            if len(inv_ids) <= 1: | 
				
			|||
                value = { | 
				
			|||
                    'view_mode': 'form', | 
				
			|||
                    'res_model': 'account.move', | 
				
			|||
                    'view_id': view_id, | 
				
			|||
                    'type': 'ir.actions.act_window', | 
				
			|||
                    'name': 'Invoice', | 
				
			|||
                    'res_id': inv_ids[0] | 
				
			|||
                } | 
				
			|||
            else: | 
				
			|||
                value = { | 
				
			|||
                    'domain': str([('id', 'in', inv_ids)]), | 
				
			|||
                    'view_mode': 'tree,form', | 
				
			|||
                    'res_model': 'account.move', | 
				
			|||
                    'view_id': False, | 
				
			|||
                    'type': 'ir.actions.act_window', | 
				
			|||
                    'name': 'Invoice', | 
				
			|||
                    'res_id': inv_ids[0] | 
				
			|||
                } | 
				
			|||
 | 
				
			|||
            return value | 
				
			|||
        else: | 
				
			|||
            raise UserError("No invoice created") | 
				
			|||
 | 
				
			|||
    def _invoice_count(self): | 
				
			|||
        invoice_ids = self.env['account.move'].search([('invoice_origin', '=', self.name)]) | 
				
			|||
        self.invoice_count = len(invoice_ids) | 
				
			|||
 | 
				
			|||
    @api.model | 
				
			|||
    def create(self, vals): | 
				
			|||
        print(self.env.user.company_id) | 
				
			|||
        if 'company_id' in vals: | 
				
			|||
            vals['name'] = self.env['ir.sequence'].with_context(force_company=self.env.user.company_id.id).next_by_code( | 
				
			|||
                'mobile.service') or _('New') | 
				
			|||
        else: | 
				
			|||
            vals['name'] = self.env['ir.sequence'].next_by_code('mobile.service') or _('New') | 
				
			|||
        vals['service_state'] = 'draft' | 
				
			|||
        return super(MobileServiceShop, self).create(vals) | 
				
			|||
 | 
				
			|||
    def unlink(self): | 
				
			|||
        for i in self: | 
				
			|||
            if i.service_state != 'draft': | 
				
			|||
                raise UserError(_('You cannot delete an assigned service request')) | 
				
			|||
        return super(MobileServiceShop, self).unlink() | 
				
			|||
 | 
				
			|||
    def action_invoice_create_wizard(self): | 
				
			|||
 | 
				
			|||
        return { | 
				
			|||
            'name': _('Create Invoice'), | 
				
			|||
            'view_mode': 'form', | 
				
			|||
            'res_model': 'mobile.invoice', | 
				
			|||
            'type': 'ir.actions.act_window', | 
				
			|||
            'target': 'new' | 
				
			|||
        } | 
				
			|||
 | 
				
			|||
    def action_post_stock(self): | 
				
			|||
        flag = 0 | 
				
			|||
        for order in self.product_order_line: | 
				
			|||
            if order.product_uom_qty > order.qty_stock_move: | 
				
			|||
                flag = 1 | 
				
			|||
                pick = { | 
				
			|||
                    'picking_type_id': self.picking_transfer_id.id, | 
				
			|||
                    'partner_id': self.person_name.id, | 
				
			|||
                    'origin': self.name, | 
				
			|||
                    'location_dest_id': self.person_name.property_stock_customer.id, | 
				
			|||
                    'location_id': self.picking_transfer_id.default_location_src_id.id, | 
				
			|||
 | 
				
			|||
                } | 
				
			|||
 | 
				
			|||
                picking = self.env['stock.picking'].create(pick) | 
				
			|||
                self.stock_picking_id = picking.id | 
				
			|||
                self.picking_count = len(picking) | 
				
			|||
                moves = order.filtered( | 
				
			|||
                    lambda r: r.product_id.type in ['product', 'consu'])._create_stock_moves_transfer(picking) | 
				
			|||
                move_ids = moves._action_confirm() | 
				
			|||
                move_ids._action_assign() | 
				
			|||
            if order.product_uom_qty < order.qty_stock_move: | 
				
			|||
                raise UserError(_('Used quantity is less than quantity stock move posted. ')) | 
				
			|||
        if flag != 1: | 
				
			|||
            raise UserError(_('Nothing to post stock move')) | 
				
			|||
        if flag != 1: | 
				
			|||
            raise UserError(_('Nothing to post stock move')) | 
				
			|||
 | 
				
			|||
    def action_view_invoice(self): | 
				
			|||
        self.ensure_one() | 
				
			|||
        ctx = dict( | 
				
			|||
                create=False, | 
				
			|||
            ) | 
				
			|||
        action = { | 
				
			|||
            'name': _("Invoices"), | 
				
			|||
            'type': 'ir.actions.act_window', | 
				
			|||
            'res_model': 'account.move', | 
				
			|||
            'target': 'current', | 
				
			|||
            'context': ctx | 
				
			|||
        } | 
				
			|||
        invoice_ids = self.env['account.move'].search([('invoice_origin', '=', self.name)]) | 
				
			|||
        inv_ids = [] | 
				
			|||
        for each in invoice_ids: | 
				
			|||
            inv_ids.append(each.id) | 
				
			|||
        if len(invoice_ids) == 1: | 
				
			|||
            invoice = inv_ids and inv_ids[0] | 
				
			|||
            action['res_id'] = invoice | 
				
			|||
            action['view_mode'] = 'form' | 
				
			|||
            action['views'] = [ | 
				
			|||
                (self.env.ref('account.view_move_form').id, 'form')] | 
				
			|||
        else: | 
				
			|||
 | 
				
			|||
            action['view_mode'] = 'tree,form' | 
				
			|||
            action['domain'] = [('id', 'in', inv_ids)] | 
				
			|||
        return action | 
				
			|||
        # inv_obj = self.env['account.move'].search([('invoice_origin', '=', self.name)]) | 
				
			|||
        # inv_ids = [] | 
				
			|||
        # for each in inv_obj: | 
				
			|||
        #     inv_ids.append(each.id) | 
				
			|||
        # view_id = self.env.ref('account.view_move_form').id | 
				
			|||
        # ctx = dict( | 
				
			|||
        #     create=False, | 
				
			|||
        # ) | 
				
			|||
        # if inv_ids: | 
				
			|||
        #     if len(inv_ids) <= 1: | 
				
			|||
        #         value = { | 
				
			|||
        #             'view_mode': 'form', | 
				
			|||
        #             'res_model': 'account.move', | 
				
			|||
        #             'view_id': view_id, | 
				
			|||
        #             'type': 'ir.actions.act_window', | 
				
			|||
        #             'name': 'Invoice', | 
				
			|||
        #             'context': ctx, | 
				
			|||
        #             'res_id': inv_ids and inv_ids[0] | 
				
			|||
        #         } | 
				
			|||
        #     else: | 
				
			|||
        #         value = { | 
				
			|||
        #             'domain': str([('id', 'in', inv_ids)]), | 
				
			|||
        #             'view_mode': 'tree,form', | 
				
			|||
        #             'res_model': 'account.move', | 
				
			|||
        #             'view_id': False, | 
				
			|||
        #             'type': 'ir.actions.act_window', | 
				
			|||
        #             'context': ctx, | 
				
			|||
        #             'name': 'Invoice', | 
				
			|||
        #             'res_id': inv_ids | 
				
			|||
        #         } | 
				
			|||
        # | 
				
			|||
        #     return value | 
				
			|||
 | 
				
			|||
    def get_ticket(self): | 
				
			|||
        self.ensure_one() | 
				
			|||
        user = self.env['res.users'].browse(self.env.uid) | 
				
			|||
        if user.tz: | 
				
			|||
            tz = pytz.timezone(user.tz) | 
				
			|||
            time = pytz.utc.localize(datetime.now()).astimezone(tz) | 
				
			|||
            date_today = time.strftime("%Y-%m-%d %H:%M %p") | 
				
			|||
        else: | 
				
			|||
            date_today = datetime.strftime(datetime.now(), "%Y-%m-%d %I:%M:%S %p") | 
				
			|||
        complaint_text = "" | 
				
			|||
        description_text = "" | 
				
			|||
        complaint_id = self.env['mobile.complaint.tree'].search([('complaint_id', '=', self.id)]) | 
				
			|||
        if complaint_id: | 
				
			|||
            for obj in complaint_id: | 
				
			|||
                complaint = obj.complaint_type_tree | 
				
			|||
                description = obj.description_tree | 
				
			|||
                complaint_text = complaint.complaint_type + ", " + complaint_text | 
				
			|||
                if description.description: | 
				
			|||
                    description_text = description.description + ", " + description_text | 
				
			|||
        else: | 
				
			|||
            for obj in complaint_id: | 
				
			|||
                complaint = obj.complaint_type_tree | 
				
			|||
                complaint_text = complaint.complaint_type + ", " + complaint_text | 
				
			|||
        data = { | 
				
			|||
            'ids': self.ids, | 
				
			|||
            'model': self._name, | 
				
			|||
            'date_today': date_today, | 
				
			|||
            'date_request': self.date_request, | 
				
			|||
            'date_return': self.return_date, | 
				
			|||
            'sev_id': self.name, | 
				
			|||
            'warranty': self.is_in_warranty, | 
				
			|||
            'customer_name': self.person_name.name, | 
				
			|||
            'imei_no': self.imei_no, | 
				
			|||
            'technician': self.technician_name.name, | 
				
			|||
            'complaint_types': complaint_text, | 
				
			|||
            'complaint_description': description_text, | 
				
			|||
            'mobile_brand': self.brand_name.brand_name, | 
				
			|||
            'model_name': self.model_name.mobile_brand_models, | 
				
			|||
 | 
				
			|||
        } | 
				
			|||
        return self.env.ref('mobile_service_shop.mobile_service_ticket').report_action(self, data=data) | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class MobileBrand(models.Model): | 
				
			|||
    _name = 'mobile.brand' | 
				
			|||
    _rec_name = 'brand_name' | 
				
			|||
 | 
				
			|||
    brand_name = fields.Char(string="Mobile Brand", required=True) | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class MobileComplaintType(models.Model): | 
				
			|||
    _name = 'mobile.complaint' | 
				
			|||
    _rec_name = 'complaint_type' | 
				
			|||
 | 
				
			|||
    complaint_type = fields.Char(string="Complaint Type", required=True) | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class MobileComplaintTypeTemplate(models.Model): | 
				
			|||
    _name = 'mobile.complaint.description' | 
				
			|||
    _rec_name = 'description' | 
				
			|||
 | 
				
			|||
    complaint_type_template = fields.Many2one('mobile.complaint', string="Complaint Type Template", required=True) | 
				
			|||
    description = fields.Text(string="Complaint Description") | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class MobileComplaintTree(models.Model): | 
				
			|||
    _name = 'mobile.complaint.tree' | 
				
			|||
    _rec_name = 'complaint_type_tree' | 
				
			|||
 | 
				
			|||
    complaint_id = fields.Many2one('mobile.service') | 
				
			|||
 | 
				
			|||
    complaint_type_tree = fields.Many2one('mobile.complaint', string="Category", required=True) | 
				
			|||
    description_tree = fields.Many2one('mobile.complaint.description', string="Description", | 
				
			|||
                                       domain="[('complaint_type_template','=',complaint_type_tree)]") | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class MobileBrandModels(models.Model): | 
				
			|||
    _name = 'brand.model' | 
				
			|||
    _rec_name = 'mobile_brand_models' | 
				
			|||
 | 
				
			|||
    mobile_brand_name = fields.Many2one('mobile.brand', string="Mobile Brand", required=True) | 
				
			|||
    mobile_brand_models = fields.Char(string="Model Name", required=True) | 
				
			|||
    image_medium = fields.Binary(string='image', store=True, attachment=True) | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class MobileServiceTermsAndConditions(models.Model): | 
				
			|||
    _name = 'terms.conditions' | 
				
			|||
    _rec_name = 'terms_id' | 
				
			|||
 | 
				
			|||
    terms_id = fields.Char(String="Terms and condition", compute="_find_id") | 
				
			|||
    terms_conditions = fields.Text(string="Terms and Conditions") | 
				
			|||
 | 
				
			|||
    def _find_id(self): | 
				
			|||
        self.terms_id = self.id or '' | 
				
			|||
 | 
				
			|||
 | 
				
			|||
@ -0,0 +1,36 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################# | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			|||
#    Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com) | 
				
			|||
#            Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com) | 
				
			|||
#    You can modify it under the terms of the GNU AFFERO | 
				
			|||
#    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################# | 
				
			|||
from odoo import models, fields, api, _ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class ProductProduct(models.Model): | 
				
			|||
    _inherit = 'product.template' | 
				
			|||
 | 
				
			|||
    is_a_parts = fields.Boolean( | 
				
			|||
        'Is a Mobile Part', default=False, | 
				
			|||
        help="Specify if the product is a mobile part or not.") | 
				
			|||
 | 
				
			|||
    brand_name = fields.Many2one('mobile.brand', String="Brand", help="Select a mobile brand for the part") | 
				
			|||
    model_name = fields.Many2one('brand.model', String="Model Name", domain="[('mobile_brand_name','=',brand_name)]", | 
				
			|||
                                 help="Select a model for the part") | 
				
			|||
    model_colour = fields.Char(string="Colour", help="colour for the part") | 
				
			|||
    extra_descriptions = fields.Text(string="Note") | 
				
			|||
@ -0,0 +1,92 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################# | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			|||
#    Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com) | 
				
			|||
#            Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com) | 
				
			|||
#    You can modify it under the terms of the GNU AFFERO | 
				
			|||
#    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################# | 
				
			|||
from odoo import models, fields, api, _ | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class ProductOrderLine(models.Model): | 
				
			|||
 | 
				
			|||
    _name = 'product.order.line' | 
				
			|||
 | 
				
			|||
    product_order_id = fields.Many2one('mobile.service') | 
				
			|||
 | 
				
			|||
    product_id = fields.Many2one('product.product', string='Product', | 
				
			|||
                                 domain="[('is_a_parts','=', True)]", required=True) | 
				
			|||
    product_uom_qty = fields.Float(string='Used Quantity', default=1.0, required=True) | 
				
			|||
    price_unit = fields.Float(string='Unit Price', default=0.0, required=True) | 
				
			|||
    qty_invoiced = fields.Float(string='Invoiced qty', readonly=True) | 
				
			|||
    qty_stock_move = fields.Float(string='Stock Move Posted Qty', readonly=True) | 
				
			|||
    part_price = fields.Char(compute='_compute_amount', string='Price', readonly=True, store=True) | 
				
			|||
    product_uom = fields.Char(string='Unit of Measure', required=True) | 
				
			|||
 | 
				
			|||
    @api.onchange('product_id') | 
				
			|||
    def change_prod(self): | 
				
			|||
        self.ensure_one() | 
				
			|||
        if self.product_id: | 
				
			|||
            product_template_obj = self.product_id.product_tmpl_id | 
				
			|||
            self.price_unit = product_template_obj.list_price | 
				
			|||
            self.product_uom = product_template_obj.uom_id.name | 
				
			|||
 | 
				
			|||
    @api.depends('product_uom_qty', 'product_id') | 
				
			|||
    def _compute_amount(self): | 
				
			|||
        """ | 
				
			|||
        Compute the amount | 
				
			|||
        """ | 
				
			|||
        for line in self: | 
				
			|||
            price = line.price_unit * line.product_uom_qty | 
				
			|||
 | 
				
			|||
            line.update({ | 
				
			|||
                'part_price': price, | 
				
			|||
            }) | 
				
			|||
 | 
				
			|||
    def _create_stock_moves_transfer(self, picking): | 
				
			|||
        moves = self.env['stock.move'] | 
				
			|||
        done = self.env['stock.move'].browse() | 
				
			|||
        if self.product_id.product_tmpl_id.type != 'service': | 
				
			|||
            price_unit = self.price_unit | 
				
			|||
            template = { | 
				
			|||
                'name': self.product_id.product_tmpl_id.name or '', | 
				
			|||
                'product_id': self.product_id.id, | 
				
			|||
                'product_uom': self.product_id.product_tmpl_id.uom_id.id, | 
				
			|||
                'location_id': picking.picking_type_id.default_location_src_id.id, | 
				
			|||
                'location_dest_id': self.product_order_id.person_name.property_stock_customer.id, | 
				
			|||
                'picking_id': picking.id, | 
				
			|||
                'move_dest_ids': False, | 
				
			|||
                'state': 'draft', | 
				
			|||
                'company_id': self.product_order_id.company_id.id, | 
				
			|||
                'price_unit': price_unit, | 
				
			|||
                'picking_type_id': picking.picking_type_id.id, | 
				
			|||
                'route_ids': 1 and [ | 
				
			|||
                    (6, 0, [x.id for x in self.env['stock.route'].search([('id', 'in', (2, 3))])])] or [], | 
				
			|||
                'warehouse_id': picking.picking_type_id.warehouse_id.id, | 
				
			|||
 | 
				
			|||
            } | 
				
			|||
            qty = self.product_uom_qty - self.qty_stock_move | 
				
			|||
            print(qty) | 
				
			|||
            diff_quantity = qty | 
				
			|||
            tmp = template.copy() | 
				
			|||
            tmp.update({ | 
				
			|||
                'product_uom_qty': diff_quantity, | 
				
			|||
            }) | 
				
			|||
            template['product_uom_qty'] = diff_quantity | 
				
			|||
            done += moves.create(template) | 
				
			|||
            self.qty_stock_move = self.qty_stock_move + qty | 
				
			|||
        return done | 
				
			|||
@ -0,0 +1,46 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################# | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			|||
#    Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com) | 
				
			|||
#            Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com) | 
				
			|||
#    You can modify it under the terms of the GNU AFFERO | 
				
			|||
#    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################# | 
				
			|||
from odoo import models, api | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class StockMoveReport(models.AbstractModel): | 
				
			|||
 | 
				
			|||
    _name = 'report.mobile_service_shop.mobile_service_ticket_template' | 
				
			|||
 | 
				
			|||
    @api.model | 
				
			|||
    def _get_report_values(self, docids, data): | 
				
			|||
        terms = self.env['terms.conditions'].search([]) | 
				
			|||
        return { | 
				
			|||
            'date_today': data['date_today'], | 
				
			|||
            'date_request': data['date_request'], | 
				
			|||
            'date_return': data['date_return'], | 
				
			|||
            'sev_id': data['sev_id'], | 
				
			|||
            'imei_no': data['imei_no'], | 
				
			|||
            'technician': data['technician'], | 
				
			|||
            'complaint_types': data['complaint_types'], | 
				
			|||
            'complaint_description': data['complaint_description'], | 
				
			|||
            'mobile_brand': data['mobile_brand'], | 
				
			|||
            'model_name': data['model_name'], | 
				
			|||
            'customer_name': data['customer_name'], | 
				
			|||
            'warranty': data['warranty'], | 
				
			|||
            'terms': terms, | 
				
			|||
        } | 
				
			|||
@ -0,0 +1,12 @@ | 
				
			|||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			|||
<odoo> | 
				
			|||
    <data> | 
				
			|||
      <record id="mobile_service_ticket"  model="ir.actions.report"> | 
				
			|||
         <field name="name">Mobile Service Ticket</field> | 
				
			|||
         <field name="model">mobile.service</field> | 
				
			|||
         <field name="report_type">qweb-pdf</field> | 
				
			|||
         <field name="report_name">mobile_service_shop.mobile_service_ticket_template</field> | 
				
			|||
         <field name="report_file">mobile_service_shop.mobile_service_ticket_template</field> | 
				
			|||
      </record> | 
				
			|||
    </data> | 
				
			|||
</odoo> | 
				
			|||
@ -0,0 +1,78 @@ | 
				
			|||
<?xml version="1.0" encoding="utf-8"?> | 
				
			|||
<odoo> | 
				
			|||
 | 
				
			|||
    <template id="mobile_service_ticket_template"> | 
				
			|||
        <t t-call="web.external_layout"> | 
				
			|||
            <t t-call="web.html_container"> | 
				
			|||
                <div class="page"> | 
				
			|||
                    <br/> | 
				
			|||
                    <div class="row" style="margin-bottom:40px; text-align:center;margin-left:0;margin-top:2%;"> | 
				
			|||
                        <h3><strong>Service Ticket</strong></h3> | 
				
			|||
                    </div> | 
				
			|||
                    <div class="col-xs-6" style="margin-top:2%; margin-left:15%;"> | 
				
			|||
                        <table style="width:100%;"> | 
				
			|||
                            <tbody style="line-height:2"> | 
				
			|||
                                <tr> | 
				
			|||
                                    <td><strong>Ref no</strong></td><td> : </td> | 
				
			|||
                                    <td><strong> <span style="font-size:16px; font-weight:2px;" t-esc="sev_id"/></strong></td> | 
				
			|||
                                    <td><strong>Customer name </strong></td><td> : </td> | 
				
			|||
                                    <td> <span t-esc="customer_name"/></td> | 
				
			|||
                                </tr> | 
				
			|||
                            </tbody> | 
				
			|||
                        </table> | 
				
			|||
                    </div> | 
				
			|||
                    <div class="col-xs-6" style="margin-top:2%; margin-left:15%;"> | 
				
			|||
                        <table style="width:100%;"> | 
				
			|||
                            <tbody style="line-height:2"> | 
				
			|||
                                <tr> | 
				
			|||
                                    <td style="margin-right:10%;"><strong>Requested date </strong></td><td> : </td> | 
				
			|||
                                    <td> <span t-esc="date_request"/></td> | 
				
			|||
                                    <td style="margin-right:10%;"><strong>Return date </strong></td><td> : </td> | 
				
			|||
                                    <td> <span t-esc="date_return"/></td> | 
				
			|||
                                </tr> | 
				
			|||
                            </tbody> | 
				
			|||
                        </table> | 
				
			|||
                    </div> | 
				
			|||
                    <div class="col-xs-6" style="margin-top:20%;margin-left:5%; text-align:center;"><h2>Device details</h2></div> | 
				
			|||
                    <table style="margin-top:5%;margin-left:5%;width:95%;border:1px solid black;line-height:2;text-align:center;"> | 
				
			|||
                        <thead style="background-color:#c9cacc;font-size:15px;"> | 
				
			|||
                            <tr> | 
				
			|||
                                <td>Sl no.</td> | 
				
			|||
                                <td>Device brand</td> | 
				
			|||
                                <td>Model name</td> | 
				
			|||
                                <td>IMEI</td> | 
				
			|||
                                <td>Complaints</td> | 
				
			|||
                                <td>Description</td> | 
				
			|||
                            </tr> | 
				
			|||
                        </thead> | 
				
			|||
                        <tbody> | 
				
			|||
                            <tr> | 
				
			|||
                                <td>1</td> | 
				
			|||
                                <td><t t-esc="mobile_brand"/></td> | 
				
			|||
                                <td><t t-esc="model_name"/></td> | 
				
			|||
                                <td><t t-esc="imei_no"/></td> | 
				
			|||
                                <td><t t-esc="complaint_types"/></td> | 
				
			|||
                                <td><t t-esc="complaint_description"/></td> | 
				
			|||
                            </tr> | 
				
			|||
                        </tbody> | 
				
			|||
                    </table> | 
				
			|||
                </div> | 
				
			|||
                <div style="margin-top:10px;"> | 
				
			|||
                    <t t-if="warranty==True"> | 
				
			|||
                        <span>The device is in warranty range !!</span> | 
				
			|||
                    </t> | 
				
			|||
                </div> | 
				
			|||
                <div style="margin-top:30px;"> | 
				
			|||
                    <h5><strong>Terms and Conditions</strong></h5> | 
				
			|||
                    <t t-foreach="terms" t-as="term"> | 
				
			|||
                        <span><t t-esc="term.terms_conditions"/><br/></span> | 
				
			|||
                    </t> | 
				
			|||
                </div> | 
				
			|||
                <div style="margin-top:200px;"> | 
				
			|||
                    <span>Keep this ticket safely for future reference.</span><br/> | 
				
			|||
                   <span>Issue Date :</span> <t t-esc="date_today"/> | 
				
			|||
                </div> | 
				
			|||
            </t> | 
				
			|||
        </t> | 
				
			|||
    </template> | 
				
			|||
</odoo> | 
				
			|||
		
		
			
  | 
@ -0,0 +1,36 @@ | 
				
			|||
<?xml version="1.0" encoding="UTF-8"?> | 
				
			|||
<odoo> | 
				
			|||
 | 
				
			|||
    <record id="mobile_service_execute" model="ir.module.category"> | 
				
			|||
        <field name="name">Mobile Service</field> | 
				
			|||
        <field name="sequence">5</field> | 
				
			|||
    </record> | 
				
			|||
 | 
				
			|||
    <record id="mobile_service_group_executer" model="res.groups"> | 
				
			|||
        <field name="name">Mobile Technician</field> | 
				
			|||
        <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/> | 
				
			|||
        <field name="category_id" ref="mobile_service_execute"/> | 
				
			|||
    </record> | 
				
			|||
 | 
				
			|||
     <record id="mobile_service_group_manager" model="res.groups"> | 
				
			|||
        <field name="name">Manager</field> | 
				
			|||
        <field name="implied_ids" eval="[(4, ref('mobile_service_group_executer'))]"/> | 
				
			|||
        <field name="category_id" ref="mobile_service_execute"/> | 
				
			|||
        <field name="users" eval="[(4, ref('base.user_admin')), (4, ref('base.user_root'))]"/> | 
				
			|||
    </record> | 
				
			|||
 | 
				
			|||
    <record id="mobile_service_tech_rules" model="ir.rule"> | 
				
			|||
        <field name="name">Mobile Service rule</field> | 
				
			|||
        <field name="model_id" ref="model_mobile_service" /> | 
				
			|||
        <field name="domain_force">[('technician_name','=',user.id),('service_state','!=','draft'), ('company_id','=',user.company_id.id)]</field> | 
				
			|||
        <field name="groups" eval="[(4,ref('mobile_service_group_executer'))]"/> | 
				
			|||
    </record> | 
				
			|||
 | 
				
			|||
    <record id="mobile_service_rule_manager" model="ir.rule"> | 
				
			|||
        <field name="name">Mobile Service Manager rule</field> | 
				
			|||
        <field name="model_id" ref="model_mobile_service" /> | 
				
			|||
        <field name="domain_force">[('company_id','=',user.company_id.id)]</field> | 
				
			|||
        <field name="groups" eval="[(4,ref('mobile_service_group_manager'))]"/> | 
				
			|||
    </record> | 
				
			|||
 | 
				
			|||
</odoo> | 
				
			|||
| 
		 After Width: | Height: | Size: 3.6 KiB  | 
| 
		 After Width: | Height: | Size: 310 B  | 
| 
		 After Width: | Height: | Size: 1.3 KiB  | 
| 
		 After Width: | Height: | Size: 1.4 KiB  | 
| 
		 After Width: | Height: | Size: 576 B  | 
| 
		 After Width: | Height: | Size: 733 B  | 
| 
		 After Width: | Height: | Size: 911 B  | 
| 
		 After Width: | Height: | Size: 1.1 KiB  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 673 B  | 
| 
		 After Width: | Height: | Size: 878 B  | 
| 
		 After Width: | Height: | Size: 653 B  | 
| 
		 After Width: | Height: | Size: 905 B  | 
| 
		 After Width: | Height: | Size: 839 B  | 
| 
		 After Width: | Height: | Size: 427 B  | 
| 
		 After Width: | Height: | Size: 627 B  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 988 B  | 
| 
		 After Width: | Height: | Size: 1.2 KiB  | 
| 
		 After Width: | Height: | Size: 1.5 KiB  | 
| 
		 After Width: | Height: | Size: 1.1 KiB  | 
| 
		 After Width: | Height: | Size: 1.9 KiB  | 
| 
		 After Width: | Height: | Size: 1.1 KiB  | 
| 
		 After Width: | Height: | Size: 2.1 KiB  | 
| 
		 After Width: | Height: | Size: 4.4 KiB  | 
| 
		 After Width: | Height: | Size: 589 B  | 
| 
		 After Width: | Height: | Size: 3.4 KiB  | 
| 
		 After Width: | Height: | Size: 1.7 KiB  | 
| 
		 After Width: | Height: | Size: 2.3 KiB  | 
| 
		 After Width: | Height: | Size: 967 B  | 
| 
		 After Width: | Height: | Size: 1.6 KiB  | 
| 
		 After Width: | Height: | Size: 3.8 KiB  | 
| 
		 After Width: | Height: | Size: 5.0 KiB  | 
| 
		 After Width: | Height: | Size: 60 KiB  | 
| 
		 After Width: | Height: | Size: 56 KiB  | 
| 
		 After Width: | Height: | Size: 56 KiB  | 
| 
		 After Width: | Height: | Size: 59 KiB  | 
| 
		 After Width: | Height: | Size: 1.8 MiB  | 
| 
		 After Width: | Height: | Size: 57 KiB  | 
| 
		 After Width: | Height: | Size: 65 KiB  | 
| 
		 After Width: | Height: | Size: 43 KiB  | 
| 
		 After Width: | Height: | Size: 38 KiB  | 
| 
		 After Width: | Height: | Size: 43 KiB  | 
| 
		 After Width: | Height: | Size: 98 KiB  | 
| 
		 After Width: | Height: | Size: 48 KiB  | 
| 
		 After Width: | Height: | Size: 96 KiB  | 
| 
		 After Width: | Height: | Size: 95 KiB  | 
| 
		 After Width: | Height: | Size: 92 KiB  | 
| 
		 After Width: | Height: | Size: 30 KiB  | 
| 
		 After Width: | Height: | Size: 48 KiB  | 
| 
		 After Width: | Height: | Size: 45 KiB  | 
| 
		 After Width: | Height: | Size: 292 KiB  | 
| 
		 After Width: | Height: | Size: 81 KiB  | 
| 
		 After Width: | Height: | Size: 12 KiB  | 
@ -0,0 +1,663 @@ | 
				
			|||
<div style="background-color: #714B67; min-height: 600px; width: 100%; padding: 15px; position: relative;"> | 
				
			|||
    <!-- TITLE BAR --> | 
				
			|||
    <div | 
				
			|||
        style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;"> | 
				
			|||
        <img src="assets/misc/cybrosys-logo.png" width="42" height="42" style="width: 42px; height: 42px;" /> | 
				
			|||
        <div> | 
				
			|||
            <div style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" | 
				
			|||
                class="mr-2"> | 
				
			|||
                <i class="fa fa-check mr-1"></i>Community | 
				
			|||
            </div> | 
				
			|||
            <div style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" | 
				
			|||
                class="mr-2"> | 
				
			|||
                <i class="fa fa-check mr-1"></i>Enterprise | 
				
			|||
            </div> | 
				
			|||
            <div style="color: #017E84; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;" | 
				
			|||
                class="mr-2"> | 
				
			|||
                <i class="fa fa-check mr-1"></i>Odoo.sh | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
    <!-- END OF TITLE BAR --> | 
				
			|||
 | 
				
			|||
    <!-- APP HERO --> | 
				
			|||
    <h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">Mobile Service Management</h1> | 
				
			|||
    <p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;"> This module helps in managing mobile service shop daily activities.</p> | 
				
			|||
    <!-- END OF APP HERO --> | 
				
			|||
    <img src="assets/screenshots/hero.gif" | 
				
			|||
        style="width: 75%; height: auto; position: absolute; margin-left: auto; margin-right: auto; top: 45%; left: 12%; right: auto;" /> | 
				
			|||
 | 
				
			|||
</div> | 
				
			|||
 | 
				
			|||
<!-- NAVIGATION SECTION --> | 
				
			|||
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px; margin-top: 300px;"> | 
				
			|||
    <div class="d-flex justify-content-center align-items-center mr-2" | 
				
			|||
        style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | 
				
			|||
        <img src="assets/misc/compass.png" /> | 
				
			|||
    </div> | 
				
			|||
    <h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Explore This | 
				
			|||
        Module</h2> | 
				
			|||
</div> | 
				
			|||
<div class="row my-4" style="font-family: 'Montserrat', sans-serif;"> | 
				
			|||
    <div class="col-sm-12 col-md-6 my-3"> | 
				
			|||
        <a href="#overview"> | 
				
			|||
            <div class="d-flex justify-content-between align-items-center" | 
				
			|||
                style="background-color: #f5f5f5; padding: 30px; width: 100%;"> | 
				
			|||
                <div> | 
				
			|||
                    <span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Overview</span> | 
				
			|||
                    <span | 
				
			|||
                        style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33;  display: block;">Learn | 
				
			|||
                        more about this | 
				
			|||
                        module</span> | 
				
			|||
                </div> | 
				
			|||
                <img src="assets/misc/right-arrow.png" width="36" height="36" /> | 
				
			|||
            </div> | 
				
			|||
        </a> | 
				
			|||
    </div> | 
				
			|||
    <div class="col-sm-12 col-md-6 my-3"> | 
				
			|||
        <a href="#features"> | 
				
			|||
            <div class="d-flex justify-content-between align-items-center" | 
				
			|||
                style="background-color: #f5f5f5; padding: 30px; width: 100%;"> | 
				
			|||
                <div> | 
				
			|||
                    <span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Features</span> | 
				
			|||
                    <span | 
				
			|||
                        style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33;  display: block;">View | 
				
			|||
                        features of this | 
				
			|||
                        module</span> | 
				
			|||
                </div> | 
				
			|||
                <img src="assets/misc/right-arrow.png" width="36" height="36" /> | 
				
			|||
            </div> | 
				
			|||
        </a> | 
				
			|||
    </div> | 
				
			|||
    <div class="col-sm-12 col-md-6 my-3"> | 
				
			|||
        <a href="#screenshots"> | 
				
			|||
            <div class="d-flex justify-content-between align-items-center" | 
				
			|||
                style="background-color: #f5f5f5; padding: 30px; width: 100%;"> | 
				
			|||
                <div> | 
				
			|||
                    <span style="color: #714B67; font-size: 24px; font-weight: 500; display: block;">Screenshots</span> | 
				
			|||
                    <span | 
				
			|||
                        style="color: #714B67; font-size: 16px; font-weight: 400; color:#282F33;  display: block;">View | 
				
			|||
                        screenshots for this | 
				
			|||
                        module</span> | 
				
			|||
                </div> | 
				
			|||
                <img src="assets/misc/right-arrow.png" width="36" height="36" /> | 
				
			|||
            </div> | 
				
			|||
        </a> | 
				
			|||
    </div> | 
				
			|||
</div> | 
				
			|||
<!-- END OF NAVIGATION SECTION --> | 
				
			|||
 | 
				
			|||
<!-- OVERVIEW SECTION --> | 
				
			|||
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="overview"> | 
				
			|||
    <div class="d-flex justify-content-center align-items-center mr-2" | 
				
			|||
        style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | 
				
			|||
        <img src="assets/misc/pie-chart.png" /> | 
				
			|||
    </div> | 
				
			|||
    <h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Overview | 
				
			|||
    </h2> | 
				
			|||
</div> | 
				
			|||
<div class="row" style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;"> | 
				
			|||
    <div class="col-sm-12 py-4"> | 
				
			|||
        This module is exclusively designed for the mobile service shop for managing their daily activities | 
				
			|||
                inside the service center. The module comes integrated with accounting and inventory modules | 
				
			|||
                maximizing the efficiency. It comes embedded with features such as adding complaint templates, | 
				
			|||
                making it a much user-friendly application. The module also helps in generating service tickets in | 
				
			|||
                the workplace. | 
				
			|||
    </div> | 
				
			|||
</div> | 
				
			|||
<div class="row" id="access"> | 
				
			|||
        <div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important"> | 
				
			|||
            <h2 | 
				
			|||
                style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> | 
				
			|||
                <i class="fa fa-cogs mr-2"></i>Access Rights | 
				
			|||
            </h2> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="col-md-6 pl-3 d-flex"> | 
				
			|||
            <div> | 
				
			|||
                <img src="assets/icons/check.png"> | 
				
			|||
            </div> | 
				
			|||
            <div> | 
				
			|||
                <h4 | 
				
			|||
                    style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | 
				
			|||
                    Manager </h4> | 
				
			|||
                <p | 
				
			|||
                    style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> | 
				
			|||
                    Manager has the complete access over the mobile shop management.</p> | 
				
			|||
            </div> | 
				
			|||
 | 
				
			|||
        </div> | 
				
			|||
        <div class="col-md-6 pl-3 d-flex"> | 
				
			|||
            <div> | 
				
			|||
                <img src="assets/icons/check.png"> | 
				
			|||
            </div> | 
				
			|||
            <div> | 
				
			|||
                <h4 | 
				
			|||
                    style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | 
				
			|||
                    Mobile Technician </h4> | 
				
			|||
                <p | 
				
			|||
                    style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> | 
				
			|||
                    Mobile Technician can read and write service requests and also update the parts usage.</p> | 
				
			|||
            </div> | 
				
			|||
 | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
<!-- END OF OVERVIEW SECTION --> | 
				
			|||
 | 
				
			|||
<!-- FEATURES SECTION --> | 
				
			|||
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="features"> | 
				
			|||
    <div class="d-flex justify-content-center align-items-center mr-2" | 
				
			|||
        style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | 
				
			|||
        <img src="assets/misc/features.png" /> | 
				
			|||
    </div> | 
				
			|||
    <h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Features | 
				
			|||
    </h2> | 
				
			|||
</div> | 
				
			|||
<div class="row" style="font-family: 'Montserrat', sans-serif; font-weight: 400; font-size: 14px; line-height: 200%;"> | 
				
			|||
    <div class="col-sm-12 col-md-6"> | 
				
			|||
        <div class="d-flex align-items-center" style="margin-top: 40px; margin-bottom: 40px"> | 
				
			|||
            <img src="assets/misc/check-box.png" class="mr-2" /> | 
				
			|||
            <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Service request creation.</span> | 
				
			|||
        </div> | 
				
			|||
        <div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px"> | 
				
			|||
            <img src="assets/misc/check-box.png" class="mr-2" /> | 
				
			|||
            <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Assigning service request to technicians</span> | 
				
			|||
        </div> | 
				
			|||
        <div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px"> | 
				
			|||
            <img src="assets/misc/check-box.png" class="mr-2" /> | 
				
			|||
            <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Mobile service ticket generation.</span> | 
				
			|||
        </div> | 
				
			|||
        <div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px"> | 
				
			|||
            <img src="assets/misc/check-box.png" class="mr-2" /> | 
				
			|||
            <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Tracking the service status.</span> | 
				
			|||
        </div> | 
				
			|||
        <div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px"> | 
				
			|||
            <img src="assets/misc/check-box.png" class="mr-2" /> | 
				
			|||
            <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Integrated with accounting and sales module.</span> | 
				
			|||
        </div> | 
				
			|||
        <div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px"> | 
				
			|||
            <img src="assets/misc/check-box.png" class="mr-2" /> | 
				
			|||
            <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Multi-level access rights.</span> | 
				
			|||
        </div> | 
				
			|||
        <div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px"> | 
				
			|||
            <img src="assets/misc/check-box.png" class="mr-2" /> | 
				
			|||
            <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Mobile complaint templates.</span> | 
				
			|||
        </div> | 
				
			|||
        <div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px"> | 
				
			|||
            <img src="assets/misc/check-box.png" class="mr-2" /> | 
				
			|||
            <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Invoice for parts usage and service charges.</span> | 
				
			|||
        </div> | 
				
			|||
        <div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px"> | 
				
			|||
            <img src="assets/misc/check-box.png" class="mr-2" /> | 
				
			|||
            <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Email notifications to customer.</span> | 
				
			|||
        </div> | 
				
			|||
        <div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px"> | 
				
			|||
            <img src="assets/misc/check-box.png" class="mr-2" /> | 
				
			|||
            <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Parts inventory.</span> | 
				
			|||
        </div> | 
				
			|||
        <div class="d-flex align-items-center" style="margin-top: 30px; margin-bottom: 30px"> | 
				
			|||
            <img src="assets/misc/check-box.png" class="mr-2" /> | 
				
			|||
            <span style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Flexible for further customization.</span> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</div> | 
				
			|||
<!-- END OF FEATURES SECTION --> | 
				
			|||
 | 
				
			|||
<!-- SCREENSHOTS SECTION --> | 
				
			|||
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;" id="screenshots"> | 
				
			|||
    <div class="d-flex justify-content-center align-items-center mr-2" | 
				
			|||
        style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | 
				
			|||
        <img src="assets/misc/pictures.png" /> | 
				
			|||
    </div> | 
				
			|||
    <h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Screenshots | 
				
			|||
    </h2> | 
				
			|||
</div> | 
				
			|||
<div class="row"> | 
				
			|||
    <div class="col-sm-12"> | 
				
			|||
 | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Mobile Service Shop</h3> | 
				
			|||
            <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">When you install the module, an extra menu named Mobile Service is created. Here you can see the | 
				
			|||
                service requests and thereafter configure your mobile service shop.</p> | 
				
			|||
            <img src="assets/screenshots/12.png" class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Mobile Service -> Service Request -> Create</h3> | 
				
			|||
            <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">This is the service request creation form. Service request can be created according to the device | 
				
			|||
                brand and model. One can assign the technician, service request, provide with warranty details, | 
				
			|||
                customer details, IMEI no, request and return dates etc.</p> | 
				
			|||
            <img src="assets/screenshots/1.png" class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Generating tickets for service request.</h3> | 
				
			|||
            <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Here you can create tickets for service requests by using the 'Print Ticket' button.</p> | 
				
			|||
            <img src="assets/screenshots/2.png" class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Mobile parts inventory.</h3> | 
				
			|||
            <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Here you see the mobile parts used for service processing..</p> | 
				
			|||
            <img src="assets/screenshots/3.png" class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Invoice for service requests.</h3> | 
				
			|||
            <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Here you can create invoices for service requests.</p> | 
				
			|||
            <img src="assets/screenshots/4.png" class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Post Stock moves.</h3> | 
				
			|||
            <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">No need to create stock moves for parts usage manually. 'Post Stock Moves' will generate stock for | 
				
			|||
                the parts usage.</p> | 
				
			|||
            <img src="assets/screenshots/5.png" class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Email Notification.</h3> | 
				
			|||
            <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">The system will send email notification to the customer for each stage in the service request. | 
				
			|||
                Note:- You should configure outgoing and incoming e-mail settings from your Odoo for email service.</p> | 
				
			|||
            <img src="assets/screenshots/6.png" class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Brands Configuration.</h3> | 
				
			|||
            <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Create mobile brands which is used in service request creation. Mobile Service -> Configuration -> | 
				
			|||
                Brands.</p> | 
				
			|||
            <img src="assets/screenshots/7.png" class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Models Configuration.</h3> | 
				
			|||
            <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">You can also create models for different mobile brands from. Mobile Service -> Configuration -> | 
				
			|||
                Models</p> | 
				
			|||
            <img src="assets/screenshots/8.png" class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Complaint Types.</h3> | 
				
			|||
            <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">You can create different complaint types from. Mobile Service -> Configuration -> Complaint Types</p> | 
				
			|||
            <img src="assets/screenshots/9.png" class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Complaint Templates</h3> | 
				
			|||
            <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Complaint Templates can be created from. Mobile Service -> Configuration -> Complaint Templates</p> | 
				
			|||
            <img src="assets/screenshots/10.png" class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
        <div style="display: block; margin: 30px auto;"> | 
				
			|||
            <h3 style="font-family: 'Montserrat', sans-serif; font-size: 18px; font-weight: bold;">Terms and Conditions</h3> | 
				
			|||
            <p style="font-weight: 400; font-family: 'Montserrat', sans-serif; font-size: 14px;">Terms and Conditions can be  created from. Mobile Service -> Configuration ->Terms and Conditions </p> | 
				
			|||
            <img src="assets/screenshots/11.png" class="img-thumbnail"> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
    </div> | 
				
			|||
</div> | 
				
			|||
<!-- END OF SCREENSHOTS SECTION --> | 
				
			|||
 | 
				
			|||
<!-- RELATED PRODUCTS --> | 
				
			|||
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | 
				
			|||
    <div class="d-flex justify-content-center align-items-center mr-2" | 
				
			|||
        style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | 
				
			|||
        <img src="assets/misc/categories.png" /> | 
				
			|||
    </div> | 
				
			|||
    <h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Related | 
				
			|||
        Products | 
				
			|||
    </h2> | 
				
			|||
</div> | 
				
			|||
<div class="row"> | 
				
			|||
    <div class="col-sm-12"> | 
				
			|||
        <div id="demo1" class="row carousel slide" data-ride="carousel"> | 
				
			|||
            <!-- The slideshow --> | 
				
			|||
            <div class="carousel-inner" style="padding: 30px;"> | 
				
			|||
                <div class="carousel-item" style="min-height: 198.656px;"> | 
				
			|||
                    <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> | 
				
			|||
                        <a href="https://apps.odoo.com/apps/modules/15.0/dynamic_accounts_report/" target="_blank"> | 
				
			|||
                            <div style="border-radius:10px"> | 
				
			|||
                                <img class="img img-responsive center-block" style="border-radius: 0px;" | 
				
			|||
                                    src="assets/modules/1.png"> | 
				
			|||
                            </div> | 
				
			|||
                        </a> | 
				
			|||
                    </div> | 
				
			|||
                    <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> | 
				
			|||
                        <a href="https://apps.odoo.com/apps/modules/15.0/custom_gantt_view/" target="_blank"> | 
				
			|||
                            <div style="border-radius:10px"> | 
				
			|||
                                <img class="img img-responsive center-block" style="border-radius: 0px;" | 
				
			|||
                                    src="assets/modules/2.png"> | 
				
			|||
                            </div> | 
				
			|||
                        </a> | 
				
			|||
                    </div> | 
				
			|||
                    <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> | 
				
			|||
                        <a href="https://apps.odoo.com/apps/modules/15.0/project_custom_gantt/" target="_blank"> | 
				
			|||
                            <div style="border-radius:10px"> | 
				
			|||
                                <img class="img img-responsive center-block" style="border-radius: 0px;" | 
				
			|||
                                    src="assets/modules/3.png"> | 
				
			|||
                            </div> | 
				
			|||
                        </a> | 
				
			|||
                    </div> | 
				
			|||
                </div> | 
				
			|||
                <div class="carousel-item active" style="min-height: 198.656px;"> | 
				
			|||
                    <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> | 
				
			|||
                        <a href="https://apps.odoo.com/apps/modules/15.0/account_reports_xlsx/" target="_blank"> | 
				
			|||
                            <div style="border-radius:10px"> | 
				
			|||
                                <img class="img img-responsive center-block" style="border-radius: 0px;" | 
				
			|||
                                    src="assets/modules/4.png"> | 
				
			|||
                            </div> | 
				
			|||
                        </a> | 
				
			|||
                    </div> | 
				
			|||
                    <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> | 
				
			|||
                        <a href="https://apps.odoo.com/apps/modules/15.0/base_accounting_kit/" target="_blank"> | 
				
			|||
                            <div style="border-radius:10px"> | 
				
			|||
                                <img class="img img-responsive center-block" style="border-radius: 0px;" | 
				
			|||
                                    src="assets/modules/5.png"> | 
				
			|||
                            </div> | 
				
			|||
                        </a> | 
				
			|||
                    </div> | 
				
			|||
                    <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> | 
				
			|||
                        <a href="https://apps.odoo.com/apps/modules/15.0/hr_payroll_community/" target="_blank"> | 
				
			|||
                            <div style="border-radius:10px"> | 
				
			|||
                                <img class="img img-responsive center-block" style="border-radius: 0px;" | 
				
			|||
                                    src="assets/modules/6.png"> | 
				
			|||
                            </div> | 
				
			|||
                        </a> | 
				
			|||
                    </div> | 
				
			|||
                </div> | 
				
			|||
            </div> | 
				
			|||
            <!-- Left and right controls --> | 
				
			|||
            <a class="carousel-control-prev" href="#demo1" data-slide="prev" style="width:35px; color:#000"> <span | 
				
			|||
                    class="carousel-control-prev-icon"><i class="fa fa-chevron-left" style="font-size:24px"></i></span> | 
				
			|||
            </a> <a class="carousel-control-next" href="#demo1" data-slide="next" style="width:35px; color:#000"> | 
				
			|||
                <span class="carousel-control-next-icon"><i class="fa fa-chevron-right" | 
				
			|||
                        style="font-size:24px"></i></span> | 
				
			|||
            </a> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</div> | 
				
			|||
<!-- END OF RELATED PRODUCTS --> | 
				
			|||
 | 
				
			|||
<!-- OUR SERVICES --> | 
				
			|||
 | 
				
			|||
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | 
				
			|||
    <div class="d-flex justify-content-center align-items-center mr-2" | 
				
			|||
        style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | 
				
			|||
        <img src="assets/misc/star.png" /> | 
				
			|||
    </div> | 
				
			|||
    <h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Our Services | 
				
			|||
    </h2> | 
				
			|||
</div> | 
				
			|||
 | 
				
			|||
<div class="container my-5"> | 
				
			|||
    <div class="row"> | 
				
			|||
        <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | 
				
			|||
            <div class="d-flex justify-content-center align-items-center mx-3 my-3" | 
				
			|||
                style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | 
				
			|||
                <img src="assets/icons/cogs.png" class="img-responsive" height="48px" width="48px"> | 
				
			|||
            </div> | 
				
			|||
            <h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | 
				
			|||
                Odoo | 
				
			|||
                Customization</h6> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | 
				
			|||
            <div class="d-flex justify-content-center align-items-center mx-3 my-3" | 
				
			|||
                style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;"> | 
				
			|||
                <img src="assets/icons/wrench.png" class="img-responsive" height="48px" width="48px"> | 
				
			|||
            </div> | 
				
			|||
            <h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | 
				
			|||
                Odoo | 
				
			|||
                Implementation</h6> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | 
				
			|||
            <div class="d-flex justify-content-center align-items-center mx-3 my-3" | 
				
			|||
                style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;"> | 
				
			|||
                <img src="assets/icons/lifebuoy.png" class="img-responsive" height="48px" width="48px"> | 
				
			|||
            </div> | 
				
			|||
            <h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | 
				
			|||
                Odoo | 
				
			|||
                Support</h6> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
        <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | 
				
			|||
            <div class="d-flex justify-content-center align-items-center mx-3 my-3" | 
				
			|||
                style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | 
				
			|||
                <img src="assets/icons/user.png" class="img-responsive" height="48px" width="48px"> | 
				
			|||
            </div> | 
				
			|||
            <h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | 
				
			|||
                Hire | 
				
			|||
                Odoo | 
				
			|||
                Developer</h6> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | 
				
			|||
            <div class="d-flex justify-content-center align-items-center mx-3 my-3" | 
				
			|||
                style="background-color: #54a0ff  !important; border-radius: 15px !important; height: 80px; width: 80px;"> | 
				
			|||
                <img src="assets/icons/puzzle.png" class="img-responsive" height="48px" width="48px"> | 
				
			|||
            </div> | 
				
			|||
            <h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | 
				
			|||
                Odoo | 
				
			|||
                Integration</h6> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | 
				
			|||
            <div class="d-flex justify-content-center align-items-center mx-3 my-3" | 
				
			|||
                style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | 
				
			|||
                <img src="assets/icons/update.png" class="img-responsive" height="48px" width="48px"> | 
				
			|||
            </div> | 
				
			|||
            <h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | 
				
			|||
                Odoo | 
				
			|||
                Migration</h6> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
        <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | 
				
			|||
            <div class="d-flex justify-content-center align-items-center mx-3 my-3" | 
				
			|||
                style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | 
				
			|||
                <img src="assets/icons/consultation.png" class="img-responsive" height="48px" width="48px"> | 
				
			|||
            </div> | 
				
			|||
            <h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | 
				
			|||
                Odoo | 
				
			|||
                Consultancy</h6> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | 
				
			|||
            <div class="d-flex justify-content-center align-items-center mx-3 my-3" | 
				
			|||
                style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | 
				
			|||
                <img src="assets/icons/training.png" class="img-responsive" height="48px" width="48px"> | 
				
			|||
            </div> | 
				
			|||
            <h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | 
				
			|||
                Odoo | 
				
			|||
                Implementation</h6> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | 
				
			|||
            <div class="d-flex justify-content-center align-items-center mx-3 my-3" | 
				
			|||
                style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | 
				
			|||
                <img src="assets/icons/license.png" class="img-responsive" height="48px" width="48px"> | 
				
			|||
            </div> | 
				
			|||
            <h6 class="text-center" style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;"> | 
				
			|||
                Odoo | 
				
			|||
                Licensing Consultancy</h6> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
 | 
				
			|||
</div> | 
				
			|||
 | 
				
			|||
<!-- END OF END OF OUR SERVICES --> | 
				
			|||
 | 
				
			|||
<!-- OUR INDUSTRIES --> | 
				
			|||
 | 
				
			|||
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | 
				
			|||
    <div class="d-flex justify-content-center align-items-center mr-2" | 
				
			|||
        style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | 
				
			|||
        <img src="assets/misc/corporate.png" /> | 
				
			|||
    </div> | 
				
			|||
    <h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Our | 
				
			|||
        Industries | 
				
			|||
    </h2> | 
				
			|||
</div> | 
				
			|||
 | 
				
			|||
<div class="container my-5"> | 
				
			|||
    <div class="row"> | 
				
			|||
        <div class="col-lg-3"> | 
				
			|||
            <div class="my-4 d-flex flex-column justify-content-center" | 
				
			|||
                style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | 
				
			|||
                <img src="assets/icons/trading-black.png" class="img-responsive mb-3" height="48px" width="48px"> | 
				
			|||
                <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | 
				
			|||
                    Trading | 
				
			|||
                </h5> | 
				
			|||
                <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | 
				
			|||
                    Easily procure | 
				
			|||
                    and | 
				
			|||
                    sell your products</p> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="col-lg-3"> | 
				
			|||
            <div class="my-4 d-flex flex-column justify-content-center" | 
				
			|||
                style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | 
				
			|||
                <img src="assets/icons/pos-black.png" class="img-responsive mb-3" height="48px" width="48px"> | 
				
			|||
                <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | 
				
			|||
                    POS | 
				
			|||
                </h5> | 
				
			|||
                <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | 
				
			|||
                    Easy | 
				
			|||
                    configuration | 
				
			|||
                    and convivial experience</p> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="col-lg-3"> | 
				
			|||
            <div class="my-4 d-flex flex-column justify-content-center" | 
				
			|||
                style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | 
				
			|||
                <img src="assets/icons/education-black.png" class="img-responsive mb-3" height="48px" width="48px"> | 
				
			|||
                <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | 
				
			|||
                    Education | 
				
			|||
                </h5> | 
				
			|||
                <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | 
				
			|||
                    A platform for | 
				
			|||
                    educational management</p> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="col-lg-3"> | 
				
			|||
            <div class="my-4 d-flex flex-column justify-content-center" | 
				
			|||
                style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | 
				
			|||
                <img src="assets/icons/manufacturing-black.png" class="img-responsive mb-3" height="48px" | 
				
			|||
                    width="48px"> | 
				
			|||
                <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | 
				
			|||
                    Manufacturing | 
				
			|||
                </h5> | 
				
			|||
                <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | 
				
			|||
                    Plan, track and | 
				
			|||
                    schedule your operations</p> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="col-lg-3"> | 
				
			|||
            <div class="my-4 d-flex flex-column justify-content-center" | 
				
			|||
                style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | 
				
			|||
                <img src="assets/icons/ecom-black.png" class="img-responsive mb-3" height="48px" width="48px"> | 
				
			|||
                <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | 
				
			|||
                    E-commerce & Website | 
				
			|||
                </h5> | 
				
			|||
                <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | 
				
			|||
                    Mobile | 
				
			|||
                    friendly, | 
				
			|||
                    awe-inspiring product pages</p> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="col-lg-3"> | 
				
			|||
            <div class="my-4 d-flex flex-column justify-content-center" | 
				
			|||
                style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | 
				
			|||
                <img src="assets/icons/service-black.png" class="img-responsive mb-3" height="48px" width="48px"> | 
				
			|||
                <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | 
				
			|||
                    Service Management | 
				
			|||
                </h5> | 
				
			|||
                <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | 
				
			|||
                    Keep track of | 
				
			|||
                    services and invoice</p> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="col-lg-3"> | 
				
			|||
            <div class="my-4 d-flex flex-column justify-content-center" | 
				
			|||
                style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | 
				
			|||
                <img src="assets/icons/restaurant-black.png" class="img-responsive mb-3" height="48px" width="48px"> | 
				
			|||
                <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | 
				
			|||
                    Restaurant | 
				
			|||
                </h5> | 
				
			|||
                <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | 
				
			|||
                    Run your bar or | 
				
			|||
                    restaurant methodically</p> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
 | 
				
			|||
        <div class="col-lg-3"> | 
				
			|||
            <div class="my-4 d-flex flex-column justify-content-center" | 
				
			|||
                style="background-color: #f6f8f9 !important; border-radius: 0px; padding: 2rem !important; height: 250px !important;"> | 
				
			|||
                <img src="assets/icons/hotel-black.png" class="img-responsive mb-3" height="48px" width="48px"> | 
				
			|||
                <h5 style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | 
				
			|||
                    Hotel Management | 
				
			|||
                </h5> | 
				
			|||
                <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | 
				
			|||
                    An | 
				
			|||
                    all-inclusive | 
				
			|||
                    hotel management application</p> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</div> | 
				
			|||
 | 
				
			|||
<!-- END OF END OF OUR INDUSTRIES --> | 
				
			|||
 | 
				
			|||
<!-- SUPPORT --> | 
				
			|||
<div class="d-flex align-items-center" style="border-bottom: 2px solid #714B67; padding: 15px 0px;"> | 
				
			|||
    <div class="d-flex justify-content-center align-items-center mr-2" | 
				
			|||
        style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;"> | 
				
			|||
        <img src="assets/misc/customer-support.png" /> | 
				
			|||
    </div> | 
				
			|||
    <h2 class="mt-2" style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">Support | 
				
			|||
    </h2> | 
				
			|||
</div> | 
				
			|||
<div class="container mt-5"> | 
				
			|||
    <div class="row"> | 
				
			|||
        <div class="col-sm-12 col-md-6"> | 
				
			|||
            <div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;"> | 
				
			|||
                <div class="mr-4" | 
				
			|||
                    style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;"> | 
				
			|||
                    <img src="assets/misc/support.png" height="48" width="48" style="width: 42px; height: 42px;" /> | 
				
			|||
                </div> | 
				
			|||
                <div> | 
				
			|||
                    <h4>Need Help?</h4> | 
				
			|||
                    <p style="line-height: 100%;">Got questions or need help? Get in touch.</p> | 
				
			|||
                    <a href="mailto:odoo@cybrosys.com"> | 
				
			|||
                        <p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;"> | 
				
			|||
                            odoo@cybrosys.com</p> | 
				
			|||
                    </a> | 
				
			|||
                </div> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
        <div class="col-sm-12 col-md-6"> | 
				
			|||
            <div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;"> | 
				
			|||
                <div class="mr-4" | 
				
			|||
                    style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;"> | 
				
			|||
                    <img src="assets/misc/whatsapp.png" height="52" width="52" style="width: 52px; height: 52px;" /> | 
				
			|||
                </div> | 
				
			|||
                <div> | 
				
			|||
                    <h4>WhatsApp</h4> | 
				
			|||
                    <p style="line-height: 100%;">Say hi to us on WhatsApp!</p> | 
				
			|||
                    <a href="https://api.whatsapp.com/send?phone=918606827707"> | 
				
			|||
                        <p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">+91 86068 | 
				
			|||
                            27707</p> | 
				
			|||
                    </a> | 
				
			|||
                </div> | 
				
			|||
            </div> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
    <div class="row"> | 
				
			|||
        <div class="col-sm-12 my-5 d-flex justify-content-center align-items-center"> | 
				
			|||
            <img src="assets/misc/logo.png" width="144" height="31" | 
				
			|||
                style="width:144px; height: 31px; margin-top: 40px;" /> | 
				
			|||
        </div> | 
				
			|||
    </div> | 
				
			|||
</div> | 
				
			|||
<!-- END OF SUPPORT --> | 
				
			|||
@ -0,0 +1,6 @@ | 
				
			|||
.Your_custom_class { | 
				
			|||
    height: 80px; width: 80px; overflow:hidden; | 
				
			|||
} | 
				
			|||
.openerp .oe_form .oe_form_field_image img { | 
				
			|||
    max-width:80px; max-height: 80px; | 
				
			|||
} | 
				
			|||
@ -0,0 +1,45 @@ | 
				
			|||
<odoo> | 
				
			|||
    <data> | 
				
			|||
 | 
				
			|||
        <record id="mobile_brand_form_view" model="ir.ui.view"> | 
				
			|||
            <field name="name">mobile.brand.form</field> | 
				
			|||
            <field name="model">mobile.brand</field> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <form string="Brand"> | 
				
			|||
                    <sheet> | 
				
			|||
                        <group> | 
				
			|||
                            <group> | 
				
			|||
                                <field name="brand_name"/> | 
				
			|||
                            </group> | 
				
			|||
                        </group> | 
				
			|||
                    </sheet> | 
				
			|||
                </form> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <record id="mobile_brand_tree_view" model="ir.ui.view"> | 
				
			|||
            <field name="name">mobile.brand.tree</field> | 
				
			|||
            <field name="model">mobile.brand</field> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <tree> | 
				
			|||
                    <field name="brand_name"/> | 
				
			|||
                </tree> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <record id="action_mobile_brand" model="ir.actions.act_window"> | 
				
			|||
            <field name="name">Brand</field> | 
				
			|||
            <field name="res_model">mobile.brand</field> | 
				
			|||
            <field name="view_mode">tree,form</field> | 
				
			|||
            <field name="view_id" ref="mobile_brand_tree_view"/> | 
				
			|||
            <field name="help" type="html"> | 
				
			|||
                <p class="oe_view_nocontent_create"> | 
				
			|||
                    Click to Create a New Record. | 
				
			|||
                </p> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <menuitem action="action_mobile_brand" id="mobile_service_shop_conf1" parent="mobile_service_shop_configuration" | 
				
			|||
                  name="Brand" sequence="1"/> | 
				
			|||
    </data> | 
				
			|||
</odoo> | 
				
			|||
@ -0,0 +1,82 @@ | 
				
			|||
<odoo> | 
				
			|||
    <data> | 
				
			|||
 | 
				
			|||
        <record id="mobile_brand_model_form_view" model="ir.ui.view"> | 
				
			|||
            <field name="name">mobile.brand.model.form</field> | 
				
			|||
            <field name="model">brand.model</field> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <form string="Brand Model"> | 
				
			|||
                    <sheet> | 
				
			|||
                        <field name="image_medium" widget='image' class="oe_avatar"/> | 
				
			|||
                        <group> | 
				
			|||
                            <group> | 
				
			|||
                                <field name="mobile_brand_name"/> | 
				
			|||
                                <field name="mobile_brand_models"/> | 
				
			|||
                            </group> | 
				
			|||
                        </group> | 
				
			|||
                    </sheet> | 
				
			|||
                </form> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
         <record id="mobile_brand_model_view_kanban" model="ir.ui.view"> | 
				
			|||
                <field name="name">mobile.service.kanban</field> | 
				
			|||
                <field name="model">brand.model</field> | 
				
			|||
                <field name="arch" type="xml"> | 
				
			|||
                    <kanban> | 
				
			|||
                <field name="image_medium"/> | 
				
			|||
                <field name="id"/> | 
				
			|||
                <progressbar field="activity_state" colors="{"planned": "success", "today": "warning", "overdue": "danger"}"/> | 
				
			|||
                <templates> | 
				
			|||
                    <t t-name="kanban-box"> | 
				
			|||
                        <div class="oe_kanban_global_click"> | 
				
			|||
                            <div class="o_kanban_image"> | 
				
			|||
                                <img t-att-src="kanban_image('brand.model', 'image_medium', record.id.raw_value)" alt="Product" class="o_image_64_contain"/> | 
				
			|||
                            </div> | 
				
			|||
                            <div class="oe_kanban_details"> | 
				
			|||
                                <strong class="o_kanban_record_title"> | 
				
			|||
                                    <field name="mobile_brand_name"/> | 
				
			|||
                                </strong> | 
				
			|||
                                </div> | 
				
			|||
                                <div name="tags"/> | 
				
			|||
                                <ul> | 
				
			|||
                                    <li> model: <field name="mobile_brand_models"/></li> | 
				
			|||
                                </ul> | 
				
			|||
                                <div name="tags"/> | 
				
			|||
                            </div> | 
				
			|||
                    </t> | 
				
			|||
                </templates> | 
				
			|||
            </kanban> | 
				
			|||
 | 
				
			|||
                </field> | 
				
			|||
             </record> | 
				
			|||
 | 
				
			|||
        <record id="mobile_brand_model_tree_view" model="ir.ui.view"> | 
				
			|||
            <field name="name">mobile.brand.model.tree</field> | 
				
			|||
            <field name="model">brand.model</field> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <tree> | 
				
			|||
                    <field name="mobile_brand_name"/> | 
				
			|||
                    <field name="mobile_brand_models"/> | 
				
			|||
                    <field name="image_medium" widget='image' class="Your_custom_class"/> | 
				
			|||
                </tree> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
        <record id="action_mobile_brand_models" model="ir.actions.act_window"> | 
				
			|||
            <field name="name">Models</field> | 
				
			|||
            <field name="res_model">brand.model</field> | 
				
			|||
            <field name="view_mode">kanban,tree,form</field> | 
				
			|||
            <field name="help" type="html"> | 
				
			|||
                <p class="o_view_nocontent_empty_folder"> | 
				
			|||
                    Click to Create a New Record. | 
				
			|||
                </p> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <menuitem action="action_mobile_brand_models" id="mobile_service_shop_conf3" | 
				
			|||
                  parent="mobile_service_shop_configuration" | 
				
			|||
                  name="Models" sequence="2"/> | 
				
			|||
    </data> | 
				
			|||
</odoo> | 
				
			|||
@ -0,0 +1,45 @@ | 
				
			|||
<odoo> | 
				
			|||
    <data> | 
				
			|||
 | 
				
			|||
        <record id="mobile_complaint_template_form_view" model="ir.ui.view"> | 
				
			|||
            <field name="name">mobile.complaint.template.form</field> | 
				
			|||
            <field name="model">mobile.complaint.description</field> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <form string="Complaint Template"> | 
				
			|||
                    <sheet> | 
				
			|||
                        <group> | 
				
			|||
                            <field name="complaint_type_template"/> | 
				
			|||
                            <field name="description"/> | 
				
			|||
                        </group> | 
				
			|||
                    </sheet> | 
				
			|||
                </form> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <record id="mobile_complaint_template_tree_view" model="ir.ui.view"> | 
				
			|||
            <field name="name">mobile.complaint.type.tree</field> | 
				
			|||
            <field name="model">mobile.complaint.description</field> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <tree> | 
				
			|||
                    <field name="complaint_type_template"/> | 
				
			|||
                    <field name="description"/> | 
				
			|||
                </tree> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <record id="action_mobile_complaint_template" model="ir.actions.act_window"> | 
				
			|||
            <field name="name">Complaint Types</field> | 
				
			|||
            <field name="res_model">mobile.complaint.description</field> | 
				
			|||
            <field name="view_mode">tree,form</field> | 
				
			|||
            <field name="view_id" ref="mobile_complaint_template_tree_view"/> | 
				
			|||
            <field name="help" type="html"> | 
				
			|||
                <p class="oe_view_nocontent_create"> | 
				
			|||
                    Click to Create a New Record. | 
				
			|||
                </p> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <menuitem action="action_mobile_complaint_template" id="mobile_service_shop_conf6" parent="mobile_service_shop_configuration" | 
				
			|||
                  name="Complaint Templates" sequence="3"/> | 
				
			|||
    </data> | 
				
			|||
</odoo> | 
				
			|||
@ -0,0 +1,47 @@ | 
				
			|||
<odoo> | 
				
			|||
    <data> | 
				
			|||
 | 
				
			|||
        <record id="mobile_complaint_type_form_view" model="ir.ui.view"> | 
				
			|||
            <field name="name">mobile.complaint.type.form</field> | 
				
			|||
            <field name="model">mobile.complaint</field> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <form string="Complaint Type"> | 
				
			|||
                    <sheet> | 
				
			|||
                        <group> | 
				
			|||
                            <group> | 
				
			|||
                                <field name="complaint_type"/> | 
				
			|||
                            </group> | 
				
			|||
                        </group> | 
				
			|||
                    </sheet> | 
				
			|||
                </form> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <record id="mobile_complaint_type_tree_view" model="ir.ui.view"> | 
				
			|||
            <field name="name">mobile.complaint.type.tree</field> | 
				
			|||
            <field name="model">mobile.complaint</field> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <tree> | 
				
			|||
                    <field name="complaint_type"/> | 
				
			|||
                </tree> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <record id="action_mobile_complaint_type" model="ir.actions.act_window"> | 
				
			|||
            <field name="name">Complaint Types</field> | 
				
			|||
            <field name="res_model">mobile.complaint</field> | 
				
			|||
            <field name="view_mode">tree,form</field> | 
				
			|||
            <field name="view_id" ref="mobile_complaint_type_tree_view"/> | 
				
			|||
            <field name="help" type="html"> | 
				
			|||
                <p class="oe_view_nocontent_create"> | 
				
			|||
                    Click to Create a New Record. | 
				
			|||
                </p> | 
				
			|||
            </field> | 
				
			|||
 | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <menuitem action="mobile_service_shop.action_mobile_complaint_type" id="mobile_service_shop_conf2" | 
				
			|||
                  parent="mobile_service_shop_configuration" | 
				
			|||
                  name="Complaint Type" sequence="3"/> | 
				
			|||
    </data> | 
				
			|||
</odoo> | 
				
			|||
@ -0,0 +1,298 @@ | 
				
			|||
<odoo> | 
				
			|||
    <data> | 
				
			|||
 | 
				
			|||
        <record id="mobile_service_sequence" model="ir.sequence"> | 
				
			|||
            <field name="name">Service Code</field> | 
				
			|||
            <field name="code">mobile.service</field> | 
				
			|||
            <field name="prefix">SERV/</field> | 
				
			|||
            <field eval="4" name="padding"/> | 
				
			|||
            <field name="company_id" eval="False"/> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <record id="mobile_service_request_search_view" model="ir.ui.view"> | 
				
			|||
            <field name="name">service.request.search1</field> | 
				
			|||
            <field name="model">mobile.service</field> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <search string="Search in requests"> | 
				
			|||
                    <field name="person_name" widget="res_partner_many2one" | 
				
			|||
                           context="{'res_partner_search_mode': 'customer'}"/> | 
				
			|||
                    <field name="contact_no"/> | 
				
			|||
                    <field name="technician_name"/> | 
				
			|||
                    <field name="imei_no"/> | 
				
			|||
                    <field name="return_date"/> | 
				
			|||
                    <field name="service_state"/> | 
				
			|||
 | 
				
			|||
                    <filter string="Returned" name="Service Status" domain="[('service_state', '=', 'returned')]"/> | 
				
			|||
                    <filter string="Draft" name="Service Status" domain="[('service_state', '=', 'draft')]"/> | 
				
			|||
                    <filter string="Not Solved" name="Service Status" domain="[('service_state', '=', 'not_solved')]"/> | 
				
			|||
 | 
				
			|||
                    <separator/> | 
				
			|||
                    <group expand="0" string="Group By"> | 
				
			|||
                        <filter string="Service State" name="service_state" domain="[]" | 
				
			|||
                                context="{'group_by': 'service_state'}"/> | 
				
			|||
                        <filter string="Technician" name="technician" domain="[]" | 
				
			|||
                                context="{'group_by': 'technician_name'}"/> | 
				
			|||
                    </group> | 
				
			|||
                </search> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <record id="mobile_service_request_form_view" model="ir.ui.view"> | 
				
			|||
            <field name="name">mobile.service.request.form</field> | 
				
			|||
            <field name="model">mobile.service</field> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <form string="Mobile Shop"> | 
				
			|||
                    <header> | 
				
			|||
                        <button string="Assign to technician" type="object" name="approve" | 
				
			|||
                                class="oe_highlight" | 
				
			|||
                                attrs="{'invisible': [('service_state','not in',('draft'))]}" | 
				
			|||
                                groups="mobile_service_shop.mobile_service_group_manager"/> | 
				
			|||
                        <button string="Completed" type="object" name="complete" | 
				
			|||
                                class="oe_highlight" | 
				
			|||
                                attrs="{'invisible': [('service_state','not in',('assigned'))]}"/> | 
				
			|||
 | 
				
			|||
                        <button string="Return advance" type="object" name="return_advance" | 
				
			|||
                                class="oe_highlight" | 
				
			|||
                                attrs="{'invisible': [('service_state','not in',('not_solved'))]}" | 
				
			|||
                                groups="mobile_service_shop.mobile_service_group_manager"/> | 
				
			|||
 | 
				
			|||
                        <button name="action_invoice_create_wizard" string="Create Invoice" | 
				
			|||
                                attrs="{'invisible': [('service_state','not in',('completed', 'assigned'))]}" | 
				
			|||
                                type="object" class="oe_highlight" | 
				
			|||
                                groups="mobile_service_shop.mobile_service_group_manager"/> | 
				
			|||
 | 
				
			|||
                        <button name="action_post_stock" string="Post Stock moves" | 
				
			|||
                                attrs="{'invisible': [('service_state','not in',('completed', 'assigned'))]}" | 
				
			|||
                                type="object" class="oe_highlight" | 
				
			|||
                                groups="mobile_service_shop.mobile_service_group_manager"/> | 
				
			|||
 | 
				
			|||
                        <button string="Return to customer" type="object" name="return_to" | 
				
			|||
                                attrs="{'invisible': [('service_state','not in',('completed'))]}" | 
				
			|||
                                groups="mobile_service_shop.mobile_service_group_manager"/> | 
				
			|||
 | 
				
			|||
                        <button string="Not Solved" type="object" name="not_solved" | 
				
			|||
                                attrs="{'invisible': [('service_state','not in',('assigned'))]}"/> | 
				
			|||
 | 
				
			|||
                        <button name="get_ticket" string="Print Ticket" type="object" class="oe_highlight" | 
				
			|||
                                groups="mobile_service_shop.mobile_service_group_manager"/> | 
				
			|||
 | 
				
			|||
                        <button name="action_send_mail" string="Send email" type="object" | 
				
			|||
                                attrs="{'invisible': [('service_state','=',('draft'))]}" | 
				
			|||
                                groups="mobile_service_shop.mobile_service_group_manager"/> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
                        <field name="service_state" widget="statusbar" statusbar_visible="draft,returned,not_solved"/> | 
				
			|||
                    </header> | 
				
			|||
                    <sheet> | 
				
			|||
                        <div class="oe_button_box" name="button_box"> | 
				
			|||
                            <button name='action_view_invoice' class="oe_stat_button" type="object" icon="fa-money" | 
				
			|||
                                    attrs="{'invisible': [('service_state','=',('draft'))]}"> | 
				
			|||
                                <field string="Invoice" name="invoice_count" widget="statinfo"/> | 
				
			|||
                            </button> | 
				
			|||
                        </div> | 
				
			|||
                        <div class="oe_title"> | 
				
			|||
                            <h1> | 
				
			|||
                                <field name="name" readonly="1"/> | 
				
			|||
                            </h1> | 
				
			|||
                        </div> | 
				
			|||
                        <group> | 
				
			|||
                            <div> | 
				
			|||
                                <field name="is_in_warranty" | 
				
			|||
                                       attrs="{'readonly': [('service_state','in',('returned','not_solved'))]}"/> | 
				
			|||
                                <label for="is_in_warranty"/> | 
				
			|||
                                <field name="re_repair" | 
				
			|||
                                       attrs="{'readonly': [('service_state','in',('returned','not_solved'))]}"/> | 
				
			|||
                                <label for="re_repair"/> | 
				
			|||
                            </div> | 
				
			|||
                        </group> | 
				
			|||
 | 
				
			|||
                        <group> | 
				
			|||
                            <group> | 
				
			|||
                                <field name="person_name" widget="res_partner_many2one" | 
				
			|||
                                       context="{'res_partner_search_mode': 'customer'}" style="width:50%;" | 
				
			|||
                                       attrs="{'readonly': [('service_state','not in',('draft'))]}"/> | 
				
			|||
                                <field name="contact_no" style="width:50%;" | 
				
			|||
                                       attrs="{'readonly': [('service_state','in',('returned','not_solved'))]}"/> | 
				
			|||
                                <field name="email_id" style="width:50%;" | 
				
			|||
                                       attrs="{'readonly': [('service_state','in',('returned','not_solved'))]}"/> | 
				
			|||
                                <label for="street" string="Address"/> | 
				
			|||
                                <div class="o_address_format"> | 
				
			|||
                                    <field name="street" placeholder="Street..." class="o_address_street"/> | 
				
			|||
                                    <field name="street2" placeholder="Street 2..." class="o_address_street"/> | 
				
			|||
                                    <field name="city" placeholder="City" class="o_address_city"/> | 
				
			|||
                                    <field name="state_id" class="o_address_state" placeholder="State" | 
				
			|||
                                           options='{"no_open": True}'/> | 
				
			|||
                                    <field name="zip" placeholder="ZIP" class="o_address_zip"/> | 
				
			|||
                                    <field name="country_id" placeholder="Country" class="o_address_country" | 
				
			|||
                                           options='{"no_open": True, "no_create": True}'/> | 
				
			|||
                                </div> | 
				
			|||
                            </group> | 
				
			|||
                            <group> | 
				
			|||
                                <label for="brand_name"/> | 
				
			|||
                                <div class="o_row"> | 
				
			|||
                                    <field name="brand_name" placeholder="Brand name" | 
				
			|||
                                           attrs="{'readonly': [('service_state','not in',('draft'))]}"/> | 
				
			|||
                                    <field name="model_name" placeholder="Model name" | 
				
			|||
                                           attrs="{'readonly': [('service_state','not in',('draft'))]}"/> | 
				
			|||
                                </div> | 
				
			|||
                                <field name="date_request" style="width:50%;" | 
				
			|||
                                       attrs="{'readonly': [('service_state','not in',('draft'))]}"/> | 
				
			|||
                                <field name="return_date" style="width:50%;" | 
				
			|||
                                       attrs="{'readonly': [('service_state','in',('returned','not_solved'))]}"/> | 
				
			|||
                                <field name="technician_name" style="width:50%;" | 
				
			|||
                                       attrs="{'readonly': [('service_state','not in',('draft'))]}"/> | 
				
			|||
                                <field name="picking_count" invisible="1"/> | 
				
			|||
                            </group> | 
				
			|||
 | 
				
			|||
                        </group> | 
				
			|||
                        <notebook> | 
				
			|||
                            <page string="Description"> | 
				
			|||
                                <group> | 
				
			|||
                                    <group> | 
				
			|||
                                        <field name="imei_no" style="width:50%;" colspan="1" | 
				
			|||
                                               attrs="{'readonly': [('service_state','not in',('draft'))]}"/> | 
				
			|||
                                        <field name="warranty_number" style="width:50%;" attrs="{'readonly': [('service_state','not in',('draft'))], | 
				
			|||
                                                    'required': [('is_in_warranty', '=', True)], 'invisible': [('is_in_warranty', '!=', True)]}"/> | 
				
			|||
                                    </group> | 
				
			|||
                                    <group> | 
				
			|||
                                        <field name="internal_notes" | 
				
			|||
                                               placeholder="Notes used internally (eg: device password)" | 
				
			|||
                                               attrs="{'readonly': [('service_state','in',('returned','not_solved'))]}"/> | 
				
			|||
                                    </group> | 
				
			|||
                                </group> | 
				
			|||
                            </page> | 
				
			|||
                            <page string="Complaints"> | 
				
			|||
                                <field name="complaints_tree" mode="tree" | 
				
			|||
                                       attrs="{'readonly': [('service_state','in',('returned','not_solved'))]}"> | 
				
			|||
                                    <tree string="Complaints" editable="bottom"> | 
				
			|||
                                        <field name="complaint_type_tree"/> | 
				
			|||
                                        <field name="description_tree"/> | 
				
			|||
                                    </tree> | 
				
			|||
                                    <form> | 
				
			|||
                                        <field name="complaint_type_tree"/> | 
				
			|||
                                        <field name="description_tree"/> | 
				
			|||
                                    </form> | 
				
			|||
                                </field> | 
				
			|||
                            </page> | 
				
			|||
                            <page string="Parts Usage"> | 
				
			|||
                                <field name="product_order_line" mode="tree" | 
				
			|||
                                       attrs="{'readonly': [('service_state','in',('returned','not_solved'))]}"> | 
				
			|||
                                    <tree string="Complaints" editable="bottom"> | 
				
			|||
                                        <field name="product_id"/> | 
				
			|||
                                        <field name="product_uom_qty"/> | 
				
			|||
                                        <field name="product_uom"/> | 
				
			|||
                                        <field name="price_unit"/> | 
				
			|||
                                        <field name="qty_stock_move"/> | 
				
			|||
                                        <field name="qty_invoiced"/> | 
				
			|||
                                        <field name="part_price"/> | 
				
			|||
                                    </tree> | 
				
			|||
                                    <form> | 
				
			|||
                                        <field name="product_id"/> | 
				
			|||
                                        <field name="product_uom_qty"/> | 
				
			|||
                                    </form> | 
				
			|||
                                </field> | 
				
			|||
                            </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> | 
				
			|||
 | 
				
			|||
        <record id="service_request_view_kanban" model="ir.ui.view"> | 
				
			|||
            <field name="name">mobile.service.kanban</field> | 
				
			|||
            <field name="model">mobile.service</field> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <kanban class="o_kanban_small_column"> | 
				
			|||
                    <field name="image_medium"/> | 
				
			|||
                    <field name="id"/> | 
				
			|||
                    <templates> | 
				
			|||
                        <t t-name="kanban-box"> | 
				
			|||
                            <div class="oe_kanban_card oe_kanban_global_click"> | 
				
			|||
                                <div class="o_kanban_image"> | 
				
			|||
                                    <img t-att-src="kanban_image('mobile.service', 'image_medium', record.id.raw_value)"/> | 
				
			|||
                                </div> | 
				
			|||
                                <div class="oe_kanban_content"> | 
				
			|||
                                    <div> | 
				
			|||
                                        <strong class="o_kanban_record_title"> | 
				
			|||
                                            <field name="name"/> | 
				
			|||
                                        </strong> | 
				
			|||
                                    </div> | 
				
			|||
                                    <div class="text-muted o_kanban_record_subtitle"> | 
				
			|||
                                        <field name="person_name" widget="res_partner_many2one" | 
				
			|||
                                               context="{'res_partner_search_mode': 'customer'}"/> | 
				
			|||
                                        <br/> | 
				
			|||
                                        <field name="service_state"/> | 
				
			|||
                                    </div> | 
				
			|||
                                </div> | 
				
			|||
                                <div class="oe_clear"></div> | 
				
			|||
                            </div> | 
				
			|||
                        </t> | 
				
			|||
                    </templates> | 
				
			|||
                </kanban> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <record id="mobile_service_graph" model="ir.ui.view"> | 
				
			|||
            <field name="name">mobile.service.graph</field> | 
				
			|||
            <field name="model">mobile.service</field> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <graph string="Service Graph"> | 
				
			|||
                    <field name="technician_name" type="row"/> | 
				
			|||
                </graph> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <record id="mobile_service_request_tree_view" model="ir.ui.view"> | 
				
			|||
            <field name="name">mobile.service.request.tree</field> | 
				
			|||
            <field name="model">mobile.service</field> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <tree decoration-danger="service_state == 'not_solved'" decoration-muted="service_state=='returned'" | 
				
			|||
                      default_order="name desc"> | 
				
			|||
                    <field name="name"/> | 
				
			|||
                    <field name="person_name"/> | 
				
			|||
                    <field name="contact_no"/> | 
				
			|||
                    <field name="brand_name"/> | 
				
			|||
                    <field name="model_name"/> | 
				
			|||
                    <field name="imei_no"/> | 
				
			|||
                    <field name="image_medium" widget='image' class="Your_custom_class" string="Image"/> | 
				
			|||
                    <field name="technician_name"/> | 
				
			|||
                    <field name="return_date"/> | 
				
			|||
                    <field name="service_state"/> | 
				
			|||
                </tree> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <record id="action_mobile_service_request" model="ir.actions.act_window"> | 
				
			|||
            <field name="name">Service Request</field> | 
				
			|||
            <field name="res_model">mobile.service</field> | 
				
			|||
            <field name="view_mode">tree,form,kanban,pivot,graph</field> | 
				
			|||
            <field name="search_view_id" ref="mobile_service_request_search_view"/> | 
				
			|||
            <field name="view_id" ref="mobile_service_request_tree_view"/> | 
				
			|||
            <field name="help" type="html"> | 
				
			|||
                <p class="oe_view_nocontent_create"> | 
				
			|||
                    Click to Create a New Record. | 
				
			|||
                </p> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
        <menuitem id="mobile_service_main_menu" web_icon="mobile_service_shop,static/description/web-icon.png" | 
				
			|||
                  name="Mobile Service" sequence="20"/> | 
				
			|||
 | 
				
			|||
        <menuitem id="mobile_service_shop_menu" parent="mobile_service_main_menu" sequence="20"/> | 
				
			|||
 | 
				
			|||
        <menuitem action="action_mobile_service_request" id="mobile_service_shop_menu2" | 
				
			|||
                  parent="mobile_service_main_menu" | 
				
			|||
                  name="Service Request" sequence="1"/> | 
				
			|||
 | 
				
			|||
        <menuitem id="mobile_service_shop_configuration" parent="mobile_service_main_menu" | 
				
			|||
                  name="Configuration" sequence="3"/> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
    </data> | 
				
			|||
</odoo> | 
				
			|||
@ -0,0 +1,83 @@ | 
				
			|||
<odoo> | 
				
			|||
    <data> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
        <record id="mobile_service_products_parts" model="ir.ui.view"> | 
				
			|||
            <field name="name">product.parts.form.view</field> | 
				
			|||
            <field name="model">product.template</field> | 
				
			|||
            <field name="inherit_id" ref="product.product_template_form_view"/> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <xpath expr="//div[@name='options']" position="inside"> | 
				
			|||
                    <field name="is_a_parts"/> | 
				
			|||
                    <label for="is_a_parts"/> | 
				
			|||
                </xpath> | 
				
			|||
                <xpath expr="//page[@name='general_information']" position="after"> | 
				
			|||
                    <page string="Parts details" attrs="{'invisible': [('is_a_parts', '=', False)]}"> | 
				
			|||
                        <group> | 
				
			|||
                            <group> | 
				
			|||
                                <field name="brand_name" attrs="{'required': [('is_a_parts', '=', True)]}"/> | 
				
			|||
                                <field name="model_name" attrs="{'required': [('is_a_parts', '=', True)]}"/> | 
				
			|||
                            </group> | 
				
			|||
                            <group> | 
				
			|||
                                <field name="model_colour"/> | 
				
			|||
                                <field name="extra_descriptions"/> | 
				
			|||
                            </group> | 
				
			|||
                        </group> | 
				
			|||
                    </page> | 
				
			|||
                </xpath> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
 | 
				
			|||
        <record id="view_product_name_kanban" model="ir.ui.view"> | 
				
			|||
            <field name="name">product.template.product.kanban</field> | 
				
			|||
            <field name="model">product.product</field> | 
				
			|||
            <field name="inherit_id" ref="product.product_kanban_view"/> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <xpath expr="//field[@name='name']" | 
				
			|||
                       position="after"> | 
				
			|||
                    <strong> | 
				
			|||
                        <field name="brand_name"/> | 
				
			|||
                        <field name="model_name"/> | 
				
			|||
                    </strong> | 
				
			|||
                </xpath> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <record id="view_product_template_name_kanban" model="ir.ui.view"> | 
				
			|||
            <field name="name">product.template.product.kanban</field> | 
				
			|||
            <field name="model">product.template</field> | 
				
			|||
            <field name="inherit_id" ref="product.product_template_kanban_view"/> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <xpath expr="//field[@name='name']" | 
				
			|||
                       position="after"> | 
				
			|||
                    <strong> | 
				
			|||
                        <field name="brand_name"/> | 
				
			|||
                        <field name="model_name"/> | 
				
			|||
                    </strong> | 
				
			|||
                </xpath> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
        <record id="product_template_action_product" model="ir.actions.act_window"> | 
				
			|||
            <field name="name">Products</field> | 
				
			|||
            <field name="type">ir.actions.act_window</field> | 
				
			|||
            <field name="res_model">product.product</field> | 
				
			|||
            <field name="view_mode">kanban,tree,form</field> | 
				
			|||
            <field name="context">{"search_default_consumable":1, 'default_type': 'product'}</field> | 
				
			|||
            <field name="domain">[('is_a_parts', '=', True)]</field> | 
				
			|||
            <field name="help" type="html"> | 
				
			|||
                <p class="oe_view_nocontent_create"> | 
				
			|||
                    Click to define a new product. | 
				
			|||
                </p> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <menuitem action="product_template_action_product" id="mobile_service_shop_parts" parent="mobile_service_main_menu" | 
				
			|||
                  name="Parts inventory" sequence="2"/> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
    </data> | 
				
			|||
</odoo> | 
				
			|||
@ -0,0 +1,44 @@ | 
				
			|||
<odoo> | 
				
			|||
    <data> | 
				
			|||
 | 
				
			|||
        <record id="mobile_terms_and_conditions_form_view" model="ir.ui.view"> | 
				
			|||
            <field name="name">mobile.terms.and.conditions.form</field> | 
				
			|||
            <field name="model">terms.conditions</field> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <form string="Complaint Type"> | 
				
			|||
                    <sheet> | 
				
			|||
                        <group> | 
				
			|||
                            <field name="terms_conditions"/> | 
				
			|||
                        </group> | 
				
			|||
                    </sheet> | 
				
			|||
                </form> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <record id="mobile_terms_and_conditions_tree_view" model="ir.ui.view"> | 
				
			|||
            <field name="name">mobile.terms.and.conditions.tree</field> | 
				
			|||
            <field name="model">terms.conditions</field> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <tree> | 
				
			|||
                    <field name="terms_conditions"/> | 
				
			|||
                </tree> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <record id="action_mobile_terms_and_conditions" model="ir.actions.act_window"> | 
				
			|||
            <field name="name">Terms and Conditions</field> | 
				
			|||
            <field name="res_model">terms.conditions</field> | 
				
			|||
            <field name="view_mode">tree,form</field> | 
				
			|||
            <field name="view_id" ref="mobile_terms_and_conditions_tree_view"/> | 
				
			|||
            <field name="help" type="html"> | 
				
			|||
                <p class="oe_view_nocontent_create"> | 
				
			|||
                    Click to Create a New Record. | 
				
			|||
                </p> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
        <menuitem action="action_mobile_terms_and_conditions" id="mobile_service_shop_conf5" | 
				
			|||
                  parent="mobile_service_shop_configuration" | 
				
			|||
                  name="Terms and Conditions" sequence="4"/> | 
				
			|||
    </data> | 
				
			|||
</odoo> | 
				
			|||
@ -0,0 +1,23 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################# | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			|||
#    Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com) | 
				
			|||
#            Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com) | 
				
			|||
#    You can modify it under the terms of the GNU AFFERO | 
				
			|||
#    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################# | 
				
			|||
from . import mobile_create_invoice | 
				
			|||
 | 
				
			|||
@ -0,0 +1,159 @@ | 
				
			|||
# -*- coding: utf-8 -*- | 
				
			|||
############################################################################# | 
				
			|||
# | 
				
			|||
#    Cybrosys Technologies Pvt. Ltd. | 
				
			|||
# | 
				
			|||
#    Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | 
				
			|||
#    Author: Milind Mohan @ Cybrosys, (odoo@cybrosys.com) | 
				
			|||
#            Mohammed Shahil M P @ Cybrosys, (odoo@cybrosys.com) | 
				
			|||
#    You can modify it under the terms of the GNU AFFERO | 
				
			|||
#    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | 
				
			|||
# | 
				
			|||
#    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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | 
				
			|||
# | 
				
			|||
#    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | 
				
			|||
#    (AGPL v3) along with this program. | 
				
			|||
#    If not, see <http://www.gnu.org/licenses/>. | 
				
			|||
# | 
				
			|||
############################################################################# | 
				
			|||
from odoo import api, fields, models, _ | 
				
			|||
from odoo.exceptions import Warning, UserError | 
				
			|||
from odoo.exceptions import UserError, ValidationError | 
				
			|||
 | 
				
			|||
 | 
				
			|||
class MobileServiceInvoice(models.Model): | 
				
			|||
 | 
				
			|||
    _name = 'mobile.invoice' | 
				
			|||
 | 
				
			|||
    advance_payment_method = fields.Selection([('advance', 'Advance'), ('full_amount', 'Full amount')], | 
				
			|||
                                              string='Invoice method', default='advance') | 
				
			|||
    amount = fields.Integer(string='Amount') | 
				
			|||
    number = fields.Char(string='Service Id') | 
				
			|||
 | 
				
			|||
    def action_invoice_create(self): | 
				
			|||
        active_id = self._context.get('active_id') | 
				
			|||
        service_id = self.env['mobile.service'].search([('id', '=', active_id)]) | 
				
			|||
        if not service_id.env['product.product'].search([("name", "=", "Mobile Service Advance")]): | 
				
			|||
            vals = self._prepare_advance_product() | 
				
			|||
            self.env['product.product'].create(vals) | 
				
			|||
 | 
				
			|||
        if not service_id.env['product.product'].search([("name", "=", "Mobile Service Charge")]): | 
				
			|||
            vals1 = self._prepare_service_product() | 
				
			|||
            self.env['product.product'].create(vals1) | 
				
			|||
 | 
				
			|||
        service_id.first_invoice_created = True | 
				
			|||
        inv_obj = self.env['account.move'] | 
				
			|||
 | 
				
			|||
        inv_line_obj = self.env['account.move.line'] | 
				
			|||
        supplier = service_id.person_name | 
				
			|||
        inv_data = { | 
				
			|||
            'move_type': 'out_invoice', | 
				
			|||
            'ref': supplier.name, | 
				
			|||
            'partner_id': supplier.id, | 
				
			|||
            'currency_id': service_id.company_id.currency_id.id, | 
				
			|||
            'journal_id': service_id.journal_type.id, | 
				
			|||
            'invoice_origin': service_id.name, | 
				
			|||
            'company_id': service_id.company_id.id, | 
				
			|||
        } | 
				
			|||
        inv_id = inv_obj.create(inv_data) | 
				
			|||
        service_id.first_payment_inv = inv_id.id | 
				
			|||
        self.number = service_id.name | 
				
			|||
        if self.advance_payment_method != 'advance': | 
				
			|||
            product_id = service_id.env['product.product'].search([("name", "=", "Mobile Service Charge")]) | 
				
			|||
        else: | 
				
			|||
            product_id = service_id.env['product.product'].search([("name", "=", "Mobile Service Advance")]) | 
				
			|||
 | 
				
			|||
        if product_id.property_account_income_id.id: | 
				
			|||
            income_account = product_id.property_account_income_id.id | 
				
			|||
        elif product_id.categ_id.property_account_income_categ_id.id: | 
				
			|||
            income_account = product_id.categ_id.property_account_income_categ_id.id | 
				
			|||
        else: | 
				
			|||
            raise UserError('Please define income account for this product: "%s" (id:%d).' % | 
				
			|||
                            (product_id.name, product_id.id)) | 
				
			|||
        flag = 0 | 
				
			|||
        if self.amount: | 
				
			|||
            flag = 1 | 
				
			|||
            inv_line_data = [(0, 0, { | 
				
			|||
                'name': product_id.name, | 
				
			|||
                'price_unit': self.amount, | 
				
			|||
                'quantity': 1, | 
				
			|||
                'credit': self.amount, | 
				
			|||
                'debit': 0, | 
				
			|||
                'account_id': income_account, | 
				
			|||
                'product_id': product_id.id, | 
				
			|||
                'move_id': inv_id.id, | 
				
			|||
            })] | 
				
			|||
            inv_id.write({ | 
				
			|||
                'invoice_line_ids': inv_line_data}) | 
				
			|||
            inv_id._compute_journal_id() | 
				
			|||
 | 
				
			|||
        sale_order_product = self.env['product.order.line'].search([('product_order_id', '=', service_id.name)]) | 
				
			|||
        for line_data in sale_order_product: | 
				
			|||
            qty = line_data.product_uom_qty - line_data.qty_invoiced | 
				
			|||
            if line_data.product_uom_qty < line_data.qty_invoiced: | 
				
			|||
                raise UserError(_('Used quantity is less than invoiced quantity')) | 
				
			|||
            uom_id = line_data.product_id.product_tmpl_id.uom_id | 
				
			|||
            if qty > 0: | 
				
			|||
                flag = 1 | 
				
			|||
                price = line_data.product_id.list_price | 
				
			|||
                inv_line_data = [(0, 0, { | 
				
			|||
                    'name': line_data.product_id.name, | 
				
			|||
                    'price_unit': price, | 
				
			|||
                    'quantity': qty, | 
				
			|||
                    'product_uom_id': uom_id.id, | 
				
			|||
                    'credit': price, | 
				
			|||
                    'debit': 0, | 
				
			|||
                    'account_id': income_account, | 
				
			|||
                    'product_id': line_data.product_id.id, | 
				
			|||
                    'move_id': inv_id.id, | 
				
			|||
                })] | 
				
			|||
                inv_id.write({ | 
				
			|||
                    'invoice_line_ids': inv_line_data}) | 
				
			|||
                print(line_data.product_id.id,'pr') | 
				
			|||
                line_data.qty_invoiced = line_data.qty_invoiced + qty | 
				
			|||
                inv_id._compute_journal_id() | 
				
			|||
 | 
				
			|||
        # inv_id.post() | 
				
			|||
        if flag != 1: | 
				
			|||
            raise UserError(_('Nothing to create invoice')) | 
				
			|||
        imd = service_id.env['ir.model.data'] | 
				
			|||
        action = self.env.ref('account.action_move_out_invoice_type') | 
				
			|||
        list_view_id = imd._xmlid_to_res_id('account.view_move_tree') | 
				
			|||
        form_view_id = imd._xmlid_to_res_id('account.view_move_form') | 
				
			|||
        result = { | 
				
			|||
            'name': action.name, | 
				
			|||
            'help': action.help, | 
				
			|||
            'type': 'ir.actions.act_window', | 
				
			|||
            'views': [[list_view_id, 'tree'], [form_view_id, 'form'], [False, 'graph'], [False, 'kanban'], | 
				
			|||
                      [False, 'calendar'], [False, 'pivot']], | 
				
			|||
            'target': action.target, | 
				
			|||
            'context': action.context, | 
				
			|||
            'res_model': 'account.move', | 
				
			|||
        } | 
				
			|||
        if len(inv_id) > 1: | 
				
			|||
            result['domain'] = "[('id','in',%s)]" % inv_id.ids | 
				
			|||
        elif len(inv_id) == 1: | 
				
			|||
            result['views'] = [(form_view_id, 'form')] | 
				
			|||
            result['res_id'] = inv_id.ids[0] | 
				
			|||
        else: | 
				
			|||
            result = {'type': 'ir.actions.act_window_close'} | 
				
			|||
        return result | 
				
			|||
 | 
				
			|||
    def _prepare_advance_product(self): | 
				
			|||
        return { | 
				
			|||
            'name': 'Mobile Service Advance', | 
				
			|||
            'type': 'service', | 
				
			|||
            'invoice_policy': 'order', | 
				
			|||
            'company_id': False, | 
				
			|||
        } | 
				
			|||
 | 
				
			|||
    def _prepare_service_product(self): | 
				
			|||
        return { | 
				
			|||
            'name': 'Mobile Service Charge', | 
				
			|||
            'type': 'service', | 
				
			|||
            'invoice_policy': 'order', | 
				
			|||
            'company_id': False, | 
				
			|||
        } | 
				
			|||
@ -0,0 +1,37 @@ | 
				
			|||
<odoo> | 
				
			|||
       <record id="view_mobile_create_inv" model="ir.ui.view"> | 
				
			|||
            <field name="name">Create Invoice</field> | 
				
			|||
            <field name="model">mobile.invoice</field> | 
				
			|||
            <field name="arch" type="xml"> | 
				
			|||
                <form string="Invoice Service Order"> | 
				
			|||
                    <p class="oe_grey"> | 
				
			|||
                        Invoices will be created in draft so that you can review | 
				
			|||
                        them before validation. | 
				
			|||
                    </p> | 
				
			|||
                    <group> | 
				
			|||
                        <field name="advance_payment_method" class="oe_inline" widget="radio" /> | 
				
			|||
                        <label for="amount"/> | 
				
			|||
                        <div> | 
				
			|||
                            <field name="amount" | 
				
			|||
                                 class="oe_inline" widget="monetary"/> | 
				
			|||
                        </div> | 
				
			|||
                    </group> | 
				
			|||
                    <footer> | 
				
			|||
                        <button name="action_invoice_create" string="Create Invoices" type="object" | 
				
			|||
                            class="btn-primary"/> | 
				
			|||
                        <button string="Cancel" class="btn-default" special="cancel"/> | 
				
			|||
                    </footer> | 
				
			|||
                </form> | 
				
			|||
            </field> | 
				
			|||
        </record> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
      <record id="action_mobile_service_inv" model="ir.actions.act_window"> | 
				
			|||
            <field name="name">Create Invoice</field> | 
				
			|||
            <field name="type">ir.actions.act_window</field> | 
				
			|||
            <field name="res_model">mobile.invoice</field> | 
				
			|||
            <field name="view_mode">form</field> | 
				
			|||
            <field name="target">new</field> | 
				
			|||
            <field name="view_id" ref="view_mobile_create_inv"/> | 
				
			|||
      </record> | 
				
			|||
</odoo> | 
				
			|||