| @ -0,0 +1,18 @@ | |||||
|  | Car Workshop v14 | ||||
|  | ================ | ||||
|  | Car Workshop Management helps to manage automobile workshop with | ||||
|  | great ease. Keep track of everything, like vehicle owner details, | ||||
|  | Works assigned, Bill details of service provided, etc. | ||||
|  | 
 | ||||
|  | Features | ||||
|  | ======== | ||||
|  | * User Friendly Interface. | ||||
|  | * Effective Time management. | ||||
|  | * Separate Journal Configuration. | ||||
|  | * Integrated with Accounting. | ||||
|  | * High Scalability. | ||||
|  | 
 | ||||
|  |   .. note:: | ||||
|  | 
 | ||||
|  |       # Its Working Domain Based on Project App. | ||||
|  |       # Mapped Fleet for Easy Method. | ||||
| @ -0,0 +1,21 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################## | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | #    Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | ||||
|  | #    Author: ASWATHI C (<https://www.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 LESSER GENERAL PUBLIC LICENSE | ||||
|  | #    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | ||||
|  | #    If not, see <https://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################## | ||||
|  | from . import models | ||||
|  | 
 | ||||
| @ -0,0 +1,52 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################## | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | #    Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | ||||
|  | #    Author: ASWATHI C (<https://www.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 LESSER GENERAL PUBLIC LICENSE | ||||
|  | #    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | ||||
|  | #    If not, see <https://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################## | ||||
|  | { | ||||
|  |     'name': 'Car Workshop', | ||||
|  |     'version': '14.0.1.0.0', | ||||
|  |     'summary': 'Complete Vehicle Workshop Operations & Reports', | ||||
|  |     'description': 'Vehicle workshop operations & Its reports', | ||||
|  |     'category': 'Industries', | ||||
|  |     'author': 'Cybrosys Techno Solutions', | ||||
|  |     'website': "https://www.cybrosys.com", | ||||
|  |     'company': 'Cybrosys Techno Solutions', | ||||
|  |     'depends': [ | ||||
|  |         'base', | ||||
|  |         'fleet', | ||||
|  |         'stock', | ||||
|  |         'account', | ||||
|  |     ], | ||||
|  |     'data': [ | ||||
|  |         'data/workshop_data.xml', | ||||
|  |         'views/worksheet_views.xml', | ||||
|  |         'views/configuration_settings_view.xml', | ||||
|  |         'views/car_dashboard.xml', | ||||
|  |         'views/timesheet_view.xml', | ||||
|  |         'views/worksheet_stages.xml', | ||||
|  |         'views/vehicle.xml', | ||||
|  |         'views/report.xml', | ||||
|  |         'security/workshop_security.xml', | ||||
|  |         'security/ir.model.access.csv', | ||||
|  |     ], | ||||
|  |     'images': ['static/description/banner.jpg'], | ||||
|  |     'license': 'AGPL-3', | ||||
|  |     'installable': True, | ||||
|  |     'auto_install': False, | ||||
|  |     'application': False, | ||||
|  | } | ||||
| @ -0,0 +1,77 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||
|  | <odoo> | ||||
|  | <!--    <data noupdate="1">--> | ||||
|  | <!--        <!– Requests Links –>--> | ||||
|  | <!--        <record id="req_link_car" model="res.request.link">--> | ||||
|  | <!--            <field name="name">Car</field>--> | ||||
|  | <!--            <field name="object">car.car</field>--> | ||||
|  | <!--        </record>--> | ||||
|  | 
 | ||||
|  | <!--        <record id="req_link_worksheet" model="res.request.link">--> | ||||
|  | <!--            <field name="name">Car Worksheet</field>--> | ||||
|  | <!--            <field name="object">car.workshop</field>--> | ||||
|  | <!--        </record>--> | ||||
|  | <!--    </data>--> | ||||
|  | 
 | ||||
|  |     <data noupdate="1"> | ||||
|  |         <!-- Task-related subtypes for messaging / Chatter --> | ||||
|  |         <record id="mt_task_new" model="mail.message.subtype"> | ||||
|  |             <field name="name">Task Opened</field> | ||||
|  |             <field name="res_model">car.workshop</field> | ||||
|  |             <field name="default" eval="False"/> | ||||
|  |             <field name="hidden" eval="False"/> | ||||
|  |             <field name="description">Task opened</field> | ||||
|  |         </record> | ||||
|  |         <record id="mt_task_blocked" model="mail.message.subtype"> | ||||
|  |             <field name="name">Task Blocked</field> | ||||
|  |             <field name="res_model">car.workshop</field> | ||||
|  |             <field name="default" eval="False"/> | ||||
|  |             <field name="description">Task blocked</field> | ||||
|  |         </record> | ||||
|  |         <record id="mt_task_ready" model="mail.message.subtype"> | ||||
|  |             <field name="name">Task Ready</field> | ||||
|  |             <field name="res_model">car.workshop</field> | ||||
|  |             <field name="default" eval="False"/> | ||||
|  |             <field name="description">Task ready for Next Stage</field> | ||||
|  |         </record> | ||||
|  |         <record id="mt_task_stages" model="mail.message.subtype"> | ||||
|  |             <field name="name">Stage Changed</field> | ||||
|  |             <field name="res_model">car.workshop</field> | ||||
|  |             <field name="default" eval="False"/> | ||||
|  |             <field name="description">Stage changed</field> | ||||
|  |         </record> | ||||
|  |         <!-- Project-related subtypes for messaging / Chatter --> | ||||
|  |         <record id="mt_project_task_new" model="mail.message.subtype"> | ||||
|  |             <field name="name">Task Opened</field> | ||||
|  |             <field name="sequence">10</field> | ||||
|  |             <field name="res_model">car.car</field> | ||||
|  |             <field name="default" eval="True"/> | ||||
|  |             <field name="parent_id" eval="ref('mt_task_new')"/> | ||||
|  |             <field name="relation_field">vehicle_id</field> | ||||
|  |         </record> | ||||
|  |         <record id="mt_project_task_blocked" model="mail.message.subtype"> | ||||
|  |             <field name="name">Task Blocked</field> | ||||
|  |             <field name="sequence">11</field> | ||||
|  |             <field name="res_model">car.car</field> | ||||
|  |             <field name="default" eval="False"/> | ||||
|  |             <field name="parent_id" eval="ref('mt_task_blocked')"/> | ||||
|  |             <field name="relation_field">vehicle_id</field> | ||||
|  |         </record> | ||||
|  |         <record id="mt_project_task_ready" model="mail.message.subtype"> | ||||
|  |             <field name="name">Task Ready</field> | ||||
|  |             <field name="sequence">12</field> | ||||
|  |             <field name="res_model">car.car</field> | ||||
|  |             <field name="default" eval="False"/> | ||||
|  |             <field name="parent_id" eval="ref('mt_task_ready')"/> | ||||
|  |             <field name="relation_field">vehicle_id</field> | ||||
|  |         </record> | ||||
|  |         <record id="mt_project_task_stage" model="mail.message.subtype"> | ||||
|  |             <field name="name">Task Stage Changed</field> | ||||
|  |             <field name="sequence">13</field> | ||||
|  |             <field name="res_model">car.car</field> | ||||
|  |             <field name="default" eval="False"/> | ||||
|  |             <field name="parent_id" eval="ref('mt_task_stages')"/> | ||||
|  |             <field name="relation_field">vehicle_id</field> | ||||
|  |         </record> | ||||
|  |     </data> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,10 @@ | |||||
|  | ## Module <fleet_car_workshop> | ||||
|  | 
 | ||||
|  | #### 26.07.2022 | ||||
|  | #### Version 14.0.1.0.0 | ||||
|  | #### ADD | ||||
|  | Initial Commit  | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | 
 | ||||
| @ -0,0 +1,23 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################## | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | #    Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | ||||
|  | #    Author: ASWATHI C(<https://www.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 LESSER GENERAL PUBLIC LICENSE | ||||
|  | #    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | ||||
|  | #    If not, see <https://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################## | ||||
|  | from . import car_workshop | ||||
|  | from . import timesheet | ||||
|  | from . import dashboard | ||||
|  | from . import config | ||||
| @ -0,0 +1,416 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################## | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | #    Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | ||||
|  | #    Author: ASWATHI C (<https://www.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 LESSER GENERAL PUBLIC LICENSE | ||||
|  | #    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | ||||
|  | #    If not, see <https://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################## | ||||
|  | from datetime import date, datetime | ||||
|  | from dateutil.relativedelta import relativedelta | ||||
|  | from psutil import long | ||||
|  | 
 | ||||
|  | from odoo.exceptions import UserError | ||||
|  | from odoo import models, api, fields, _ | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class CarWorkshop(models.Model): | ||||
|  |     _name = 'car.workshop' | ||||
|  |     _description = "Car Workshop" | ||||
|  |     _inherit = ['mail.thread'] | ||||
|  | 
 | ||||
|  |     def _get_default_vehicle(self): | ||||
|  |         car_id = self._context.get('active_id') | ||||
|  |         car = self.env['car.car'].browse(car_id) | ||||
|  |         if car.name: | ||||
|  |             return car.name.id | ||||
|  |         else: | ||||
|  |             return 1 | ||||
|  | 
 | ||||
|  |     vehicle_id = fields.Many2one('car.car', string='Vehicle', | ||||
|  |                                  default=lambda self: self.env.context.get('default_vehicle_id'), index=True, | ||||
|  |                                  tracking=True, | ||||
|  |                                  change_default=True) | ||||
|  | 
 | ||||
|  |     @api.model | ||||
|  |     def _default_company_id(self): | ||||
|  |         car_id = self._context.get('active_id') | ||||
|  |         car = self.env['car.car'].browse(car_id) | ||||
|  |         if car.vehicle_id: | ||||
|  |             return car.vehicle_id.company_id.id | ||||
|  |         else: | ||||
|  |             return self.env.company | ||||
|  | 
 | ||||
|  |     def _get_default_partner(self): | ||||
|  |         if 'default_vehicle_id' in self.env.context: | ||||
|  |             default_vehicle_id = self.env['car.car'].browse(self.env.context['default_vehicle_id']) | ||||
|  |             return default_vehicle_id.partner_id | ||||
|  | 
 | ||||
|  |     def _get_default_stage_id(self): | ||||
|  |         """ Gives default stage_id """ | ||||
|  |         vehicle_id = self.env.context.get('default_vehicle_id') | ||||
|  |         if not vehicle_id: | ||||
|  |             return False | ||||
|  |         return self.stage_find(vehicle_id, [('fold', '=', False)]) | ||||
|  | 
 | ||||
|  |     @api.model | ||||
|  |     def _read_group_stage_ids(self, stages, domain, order): | ||||
|  |         search_domain = [('id', 'in', stages.ids)] | ||||
|  |         if 'default_vehicle_id' in self.env.context: | ||||
|  |             search_domain = ['|', ('vehicle_ids', '=', self.env.context['default_vehicle_id'])] + search_domain | ||||
|  | 
 | ||||
|  |         stage_ids = stages._search(search_domain, order=order) | ||||
|  |         return stages.browse(stage_ids) | ||||
|  | 
 | ||||
|  |     name = fields.Char(string='Title', track_visibility='onchange', required=True) | ||||
|  |     user_id = fields.Many2one('res.users', string='Assigned to', default=lambda self: self.env.user, tracking=True) | ||||
|  |     active = fields.Boolean(string='Active', default=True) | ||||
|  |     partner_id = fields.Many2one('res.partner', string='Customer', default=_get_default_partner) | ||||
|  |     priority = fields.Selection([('0', 'Normal'), ('1', 'High')], 'Priority', select=True, default='0') | ||||
|  |     description = fields.Html(string='Description') | ||||
|  |     sequence = fields.Integer(string='Sequence', select=True, default=10, | ||||
|  |                               help="Gives the sequence order when displaying a list of tasks.") | ||||
|  |     tag_ids = fields.Many2many('worksheet.tags', string='Tags', ondelete='cascade') | ||||
|  |     kanban_state = fields.Selection( | ||||
|  |         [('normal', 'In Progress'), ('done', 'Ready for next stage'), ('blocked', 'Blocked')], 'Kanban State', | ||||
|  |         help="A task's kanban state indicates special situations affecting it:\n" | ||||
|  |              " * Normal is the default situation\n" | ||||
|  |              " * Blocked indicates something is preventing the progress of this task\n" | ||||
|  |              " * Ready for next stage indicates the task is ready to be pulled to the next stage", | ||||
|  |         required=True, track_visibility='onchange', default='normal', copy=False) | ||||
|  |     create_date = fields.Datetime(string='Create Date', readonly=True, select=True) | ||||
|  |     write_date = fields.Datetime(string='Last Modification Date', readonly=True, select=True) | ||||
|  |     date_start = fields.Datetime(string='Starting Date', default=fields.datetime.now(), select=True, copy=False) | ||||
|  |     date_end = fields.Datetime(string='Ending Date', select=True, copy=False) | ||||
|  |     date_assign = fields.Datetime(string='Assigning Date', select=True, copy=False) | ||||
|  |     date_deadline = fields.Datetime(string='Deadline', select=True, copy=False) | ||||
|  |     progress = fields.Integer(string="Working Time Progress(%)", copy=False, readonly=True) | ||||
|  |     date_last_stage_update = fields.Datetime(string='Last Stage Update', select=True, default=fields.datetime.now(), | ||||
|  |                                              copy=False, readonly=True) | ||||
|  |     id = fields.Integer('ID', readonly=True) | ||||
|  |     company_id = fields.Many2one('res.company', string='Company', required=True, default=_default_company_id) | ||||
|  | 
 | ||||
|  |     # company_id = fields.Many2many('res.company', string='Company Name', default=lambda self: self.env['res.company']._company_default_get('car.workshop')) | ||||
|  |     color = fields.Integer(string='Color Index') | ||||
|  |     stage_id = fields.Many2one('worksheet.stages', string='Stage', ondelete='restrict', tracking=True, index=True, | ||||
|  |                                default=_get_default_stage_id, group_expand='_read_group_stage_ids', | ||||
|  |                                domain="[('vehicle_ids', '=', vehicle_id)]", copy=False) | ||||
|  | 
 | ||||
|  |     state = fields.Selection([ | ||||
|  |         ('waiting', 'Ready'), | ||||
|  |         ('workshop_create_invoices', 'Invoiced'), | ||||
|  |         ('cancel', 'Invoice Canceled'), | ||||
|  |     ], string='Status', readonly=True, default='waiting', track_visibility='onchange', select=True) | ||||
|  |     attachment_ids = fields.One2many('ir.attachment', 'res_id', domain=lambda self: [('res_model', '=', self._name)], | ||||
|  |                                      auto_join=True, string='Attachments') | ||||
|  |     displayed_image_id = fields.Many2one('ir.attachment', | ||||
|  |                                          domain="[" | ||||
|  |                                                 "('res_model', '=', 'car.workshop')," | ||||
|  |                                                 "('res_id', '=', id)," | ||||
|  |                                                 "('mimetype', 'ilike', 'image')]", | ||||
|  |                                          string='Displayed Image') | ||||
|  |     planned_works = fields.One2many('planned.work', 'work_id', string='Planned/Ordered Works') | ||||
|  |     works_done = fields.One2many('planned.work', 'work_id', string='Work Done', domain=[('completed', '=', True)]) | ||||
|  |     materials_used = fields.One2many('material.used', 'material_id', string='Materials Used') | ||||
|  |     remaining_hour = fields.Float(string='Remaining Hour', readonly=True, compute="hours_left") | ||||
|  |     effective_hour = fields.Float(string='Hours Spent', readonly=True, compute="hours_spent") | ||||
|  |     amount_total = fields.Float(string='Total Amount', readonly=True, compute="amount_total1") | ||||
|  | 
 | ||||
|  |     invoice_count = fields.Integer(string="Invoice_count", compute='compute_invoice_count') | ||||
|  | 
 | ||||
|  |     @api.depends('planned_works.work_cost', 'materials_used.price') | ||||
|  |     def amount_total1(self): | ||||
|  |         for records in self: | ||||
|  |             for hour in records: | ||||
|  |                 amount_totall = 0.0 | ||||
|  |                 for line in hour.planned_works: | ||||
|  |                     amount_totall += line.work_cost | ||||
|  |                 for line2 in hour.materials_used: | ||||
|  |                     amount_totall += line2.price | ||||
|  |                 records.amount_total = amount_totall | ||||
|  | 
 | ||||
|  |     def cancel(self): | ||||
|  |         self.state = 'cancel' | ||||
|  | 
 | ||||
|  |     def workshop_create_invoices(self): | ||||
|  |         self.state = 'workshop_create_invoices' | ||||
|  |         inv_obj = self.env['account.move'] | ||||
|  |         inv_line_obj = self.env['account.move.line'] | ||||
|  |         customer = self.partner_id | ||||
|  |         if not customer.name: | ||||
|  |             raise UserError( | ||||
|  |                 _( | ||||
|  |                     'Please select a Customer.')) | ||||
|  | 
 | ||||
|  |         invoice_line_ids = [] | ||||
|  |         company_id = self.env['res.users'].browse(1).company_id | ||||
|  |         currency_value = company_id.currency_id.id | ||||
|  |         self.ensure_one() | ||||
|  |         journal_id = self.env['ir.config_parameter'].sudo().get_param( | ||||
|  |             'fleet_car_workshop.invoice_journal_type') | ||||
|  |         if not journal_id: | ||||
|  |             journal_id = 1 | ||||
|  | 
 | ||||
|  |         inv_data = { | ||||
|  |             'ref': self.name, | ||||
|  |             'partner_bank_id': customer.bank_ids[:1].id, | ||||
|  |             'partner_id': customer.id, | ||||
|  |             'currency_id': currency_value, | ||||
|  |             'journal_id': int(journal_id), | ||||
|  |             'invoice_origin': self.name, | ||||
|  |             'company_id': company_id.id, | ||||
|  |             'move_type': 'out_invoice', | ||||
|  |             # 'invoice_line_ids': invoice_line_ids, | ||||
|  |         } | ||||
|  | 
 | ||||
|  |         for records in self.planned_works: | ||||
|  |             if records.planned_work.id: | ||||
|  |                 income_account = records.planned_work.property_account_income_id.id | ||||
|  |                 inv_line_data = (0, 0, { | ||||
|  |                     'name': records.planned_work.name, | ||||
|  |                     'account_id': income_account, | ||||
|  |                     'price_unit': records.work_cost, | ||||
|  |                     'quantity': 1, | ||||
|  |                     'product_id': records.planned_work.id, | ||||
|  |                 }) | ||||
|  |                 invoice_line_ids.append(inv_line_data) | ||||
|  |             if not income_account: | ||||
|  |                 raise UserError(_('There is no income account defined for this product: "%s".') % | ||||
|  |                                 (records.planned_work.name,)) | ||||
|  | 
 | ||||
|  |         for records in self.materials_used: | ||||
|  |             if records.material.id: | ||||
|  |                 income_account = records.material.property_account_income_id.id | ||||
|  |                 inv_line_data = (0, 0, { | ||||
|  |                     'name': records.material.name, | ||||
|  |                     'account_id': records.material.property_account_income_id.id, | ||||
|  |                     'price_unit': records.price, | ||||
|  |                     'quantity': records.amount, | ||||
|  |                     'product_id': records.material.id, | ||||
|  |                 }) | ||||
|  |                 invoice_line_ids.append(inv_line_data) | ||||
|  |             if not income_account: | ||||
|  |                 raise UserError(_('There is no income account defined for this product: "%s".') % | ||||
|  |                                 (records.material.name,)) | ||||
|  |         inv_data.update({ | ||||
|  |             'invoice_line_ids': invoice_line_ids | ||||
|  |         }) | ||||
|  |         inv_id = inv_obj.create(inv_data) | ||||
|  |         result = { | ||||
|  |             'type': 'ir.actions.act_window', | ||||
|  |             'name': _('Invoice'), | ||||
|  |             'view_mode': 'form', | ||||
|  |             'res_model': 'account.move', | ||||
|  |             'target': 'current', | ||||
|  |             'res_id': inv_id.id, | ||||
|  |         } | ||||
|  |         IMD = self.env['ir.model.data'] | ||||
|  |         form_view_id = IMD.xmlid_to_res_id('account.invoice_form') | ||||
|  |         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'} | ||||
|  |         invoiced_records = self.env['car.workshop'] | ||||
|  | 
 | ||||
|  |         total = 0 | ||||
|  |         for rows in invoiced_records: | ||||
|  |             invoiced_date = rows.date | ||||
|  |             invoiced_date = invoiced_date[0:10] | ||||
|  |             if invoiced_date == str(date.today()): | ||||
|  |                 total = total + rows.price_subtotal | ||||
|  |         for lines in self.materials_used: | ||||
|  |             product_ids = self.env['product.product'].search( | ||||
|  |                 [('id', '=', lines.material.id)]) | ||||
|  |             for prod_id in product_ids: | ||||
|  |                 move_id = self.env['stock.picking'] | ||||
|  |                 type_object = self.env['stock.picking.type'] | ||||
|  |                 company_id = self.env.context.get('company_id') or self.env.user.company_id.id | ||||
|  |                 types = type_object.search([('code', '=', 'outgoing'), ('warehouse_id.company_id', '=', company_id)], | ||||
|  |                                            limit=1) | ||||
|  |                 vals = { | ||||
|  |                     'partner_id': self.partner_id.id, | ||||
|  |                     'origin': self.name, | ||||
|  |                     'move_type': 'one', | ||||
|  |                     'picking_type_id': types.id, | ||||
|  |                     'location_id': types.default_location_src_id.id, | ||||
|  |                     'location_dest_id': self.partner_id.property_stock_customer.id, | ||||
|  |                     'move_lines': [(0, 0, { | ||||
|  |                         'name': self.name, | ||||
|  |                         'product_id': prod_id.id, | ||||
|  |                         'product_uom': prod_id.uom_id.id, | ||||
|  |                         'product_uom_qty': lines.amount, | ||||
|  |                         'quantity_done': lines.amount, | ||||
|  |                         'location_id': types.default_location_src_id.id, | ||||
|  |                         'location_dest_id': self.partner_id.property_stock_customer.id, | ||||
|  |                     })], | ||||
|  |                 } | ||||
|  |                 move = move_id.create(vals) | ||||
|  |                 move.action_confirm() | ||||
|  |                 move.action_assign() | ||||
|  |                 move._action_done() | ||||
|  |         return result | ||||
|  | 
 | ||||
|  |     @api.depends('works_done.duration') | ||||
|  |     def hours_spent(self): | ||||
|  |         for hour in self: | ||||
|  |             effective_hour = 0.0 | ||||
|  |             for line in hour.works_done: | ||||
|  |                 effective_hour += line.duration | ||||
|  |             self.effective_hour = effective_hour | ||||
|  | 
 | ||||
|  |     @api.depends('planned_works.time_spent') | ||||
|  |     def hours_left(self): | ||||
|  |         for hour in self: | ||||
|  |             remaining_hour = 0.0 | ||||
|  |             for line in hour.planned_works: | ||||
|  |                 remaining_hour += line.time_spent | ||||
|  |             self.remaining_hour = remaining_hour - self.effective_hour | ||||
|  | 
 | ||||
|  |     def process_demo_scheduler_queue(self): | ||||
|  |         obj = self.env['car.workshop'] | ||||
|  |         obj1 = obj.search([]) | ||||
|  |         now = fields.Datetime.from_string(fields.Datetime.now()) | ||||
|  |         for obj2 in obj1: | ||||
|  |             obj3 = obj2 | ||||
|  |             if obj3.stage_id.name != 'Done' and obj3.stage_id.name != 'Cancelled' and obj3.stage_id.name != 'Verified': | ||||
|  |                 end_date = fields.Datetime.from_string(obj3.date_deadline) | ||||
|  |                 start_date = fields.Datetime.from_string(obj3.date_assign) | ||||
|  |                 if obj3.date_deadline and obj3.date_assign and end_date > start_date: | ||||
|  |                     if now < end_date: | ||||
|  |                         diff1 = relativedelta(end_date, start_date) | ||||
|  |                         if diff1.days == 0: | ||||
|  |                             total_hr = int(diff1.minutes) | ||||
|  |                         else: | ||||
|  |                             total_hr = int(diff1.days) * 24 * 60 + int(diff1.minutes) | ||||
|  |                         diff2 = relativedelta(now, start_date) | ||||
|  |                         if diff2.days == 0: | ||||
|  |                             current_hr = int(diff2.minutes) | ||||
|  |                         else: | ||||
|  |                             current_hr = int(diff2.days) * 24 * 60 + int(diff2.minutes) | ||||
|  |                         if total_hr != 0: | ||||
|  |                             obj3.progress = ((current_hr * 100) / total_hr) | ||||
|  |                         else: | ||||
|  |                             obj3.progress = 100 | ||||
|  |                     else: | ||||
|  |                         obj3.progress = 100 | ||||
|  |                 else: | ||||
|  |                     obj3.progress = 0 | ||||
|  | 
 | ||||
|  |     @api.model | ||||
|  |     def _track_subtype(self, init_values): | ||||
|  |         record = self.ensure_one() | ||||
|  |         if 'kanban_state' in init_values and record.kanban_state == 'blocked': | ||||
|  |             return self.env.ref('fleet_car_workshop.mt_task_blocked') | ||||
|  |         elif 'kanban_state' in init_values and record.kanban_state == 'done': | ||||
|  |             return self.env.ref('fleet_car_workshop.mt_task_ready') | ||||
|  |         elif 'user_id' in init_values and record.user_id:  # assigned -> new | ||||
|  |             return self.env.ref('fleet_car_workshop.mt_task_new') | ||||
|  |         elif 'stage_id' in init_values and record.stage_id and record.stage_id.sequence <= 1:  # start stage -> new | ||||
|  |             self.env.ref('fleet_car_workshop.mt_task_new') | ||||
|  |         elif 'stage_id' in init_values: | ||||
|  |             return self.env.ref('fleet_car_workshop.mt_task_stages') | ||||
|  |         return super(CarWorkshop, self)._track_subtype(init_values) | ||||
|  | 
 | ||||
|  |     @api.model | ||||
|  |     def create(self, vals): | ||||
|  |         # context: no_log, because subtype already handle this | ||||
|  |         context = dict(self.env.context, mail_create_nolog=True) | ||||
|  | 
 | ||||
|  |         # for default stage | ||||
|  |         if vals.get('vehicle_id') and not context.get('default_vehicle_id'): | ||||
|  |             context['default_vehicle_id'] = vals.get('vehicle_id') | ||||
|  |         # user_id change: update date_assign | ||||
|  |         if vals.get('user_id'): | ||||
|  |             vals['date_assign'] = fields.Datetime.now() | ||||
|  |         # Stage change: Update date_end if folded stage and date_last_stage_update | ||||
|  |         if vals.get('stage_id'): | ||||
|  |             vals.update(self.change_date_end(vals['stage_id'])) | ||||
|  |             vals['date_last_stage_update'] = fields.Datetime.now() | ||||
|  |         task = super(CarWorkshop, self.with_context(context)).create(vals) | ||||
|  |         return task | ||||
|  | 
 | ||||
|  |     def write(self, vals): | ||||
|  |         now = fields.Datetime.now(self) | ||||
|  |         # stage change: update date_last_stage_update | ||||
|  |         if 'stage_id' in vals: | ||||
|  |             vals.update(self.change_date_end(vals['stage_id'])) | ||||
|  |             vals['date_last_stage_update'] = now | ||||
|  |             # reset kanban state when changing stage | ||||
|  |             if 'kanban_state' not in vals: | ||||
|  |                 vals['kanban_state'] = 'normal' | ||||
|  |         # user_id change: update date_assign | ||||
|  |         if vals.get('user_id') and 'date_assign' not in vals: | ||||
|  |             vals['date_assign'] = now | ||||
|  |         result = super(CarWorkshop, self).write(vals) | ||||
|  |         return result | ||||
|  | 
 | ||||
|  |     def change_date_end(self, stage_id): | ||||
|  |         worksheet_stage = self.env['worksheet.stages'].browse(stage_id) | ||||
|  |         if worksheet_stage.fold: | ||||
|  |             return {'date_end': fields.Datetime.now()} | ||||
|  |         return {'date_end': False} | ||||
|  | 
 | ||||
|  |     @api.onchange('vehicle_id') | ||||
|  |     def onchange_vehicle(self): | ||||
|  |         # values = {} | ||||
|  |         if self.vehicle_id.exists(): | ||||
|  |             # vehicle = self.pool.get('fleet.vehicle').browse(cr, uid, vehicle_id, context=context) | ||||
|  |             # if self.vehicle_id.exists():` | ||||
|  |             self.partner_id = self.vehicle_id.partner_id | ||||
|  |             self.stage_id = self.stage_find(self.vehicle_id, [('fold', '=', False)]) | ||||
|  | 
 | ||||
|  |     def stage_find(self, section_id, domain=[], order='sequence'): | ||||
|  |         """ Override of the base.stage method | ||||
|  |             Parameter of the stage search taken from the lead: | ||||
|  |             - section_id: if set, stages must belong to this section or | ||||
|  |               be a default stage; if not set, stages must be default | ||||
|  |               stages | ||||
|  |         """ | ||||
|  |         # collect all section_ids | ||||
|  |         section_ids = [] | ||||
|  |         if section_id: | ||||
|  |             section_ids.append(section_id) | ||||
|  |         section_ids.extend(self.mapped('vehicle_id').ids) | ||||
|  |         search_domain = [] | ||||
|  |         if section_ids: | ||||
|  |             search_domain = [('|')] * (len(section_ids) - 1) | ||||
|  |             for section_id in section_ids: | ||||
|  |                 if isinstance(section_id, (int, long)): | ||||
|  |                     search_domain.append(('vehicle_ids', '=', section_id)) | ||||
|  |         search_domain += list(domain) | ||||
|  |         # perform search, return the first found | ||||
|  |         stage_ids = self.env['worksheet.stages'].search(search_domain, order=order, limit=1).id | ||||
|  |         if stage_ids: | ||||
|  |             return stage_ids | ||||
|  |         return False | ||||
|  | 
 | ||||
|  |     def get_invoices(self): | ||||
|  |         self.ensure_one() | ||||
|  |         return { | ||||
|  |             'type': 'ir.actions.act_window', | ||||
|  |             'name': 'Invoices', | ||||
|  |             'view_mode': 'tree,form', | ||||
|  |             'view_type': 'form', | ||||
|  |             'res_model': 'account.move', | ||||
|  |             'domain': [('invoice_origin', '=', self.name)], | ||||
|  |             'context': "{'create': False}" | ||||
|  |         } | ||||
|  | 
 | ||||
|  |     def compute_invoice_count(self): | ||||
|  |         for record in self: | ||||
|  |             record.invoice_count = self.env['account.move'].search_count( | ||||
|  |                 [('invoice_origin', '=', self.name)]) | ||||
| @ -0,0 +1,61 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################## | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | #    Copyright (C) 2017-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | ||||
|  | #    Author: ASWATHI C (<https://www.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 LESSER GENERAL PUBLIC LICENSE | ||||
|  | #    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | ||||
|  | #    If not, see <https://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################## | ||||
|  | from odoo.tools.translate import _ | ||||
|  | from odoo import fields, models, api | ||||
|  | 
 | ||||
|  | from odoo import fields, models | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class WorkshopSetting(models.TransientModel): | ||||
|  |     _inherit = 'res.config.settings' | ||||
|  | 
 | ||||
|  |     invoice_journal_type = fields.Many2one('account.journal', string="Car Workshop Journal", | ||||
|  |                                            config_parameter='fleet_car_workshop.invoice_journal_type') | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class WorksheetTags(models.Model): | ||||
|  |     _name = "worksheet.tags" | ||||
|  |     _description = "Tags of vehicles's tasks, issues..." | ||||
|  | 
 | ||||
|  |     name = fields.Char('Name', required=True) | ||||
|  |     color = fields.Integer('Color Index') | ||||
|  | 
 | ||||
|  |     _sql_constraints = [ | ||||
|  |         ('name_uniq', 'unique (name)', "Tag name already exists !"), | ||||
|  |     ] | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class WorksheetStages(models.Model): | ||||
|  |     _name = 'worksheet.stages' | ||||
|  |     _description = 'worksheet Stage' | ||||
|  |     _order = 'sequence' | ||||
|  | 
 | ||||
|  |     def _get_default_vehicle_ids(self): | ||||
|  |         default_vehicle_id = self.env.context.get('default_vehicle_id') | ||||
|  |         return [default_vehicle_id] if default_vehicle_id else None | ||||
|  | 
 | ||||
|  |     name = fields.Char(string='Stage Name', required=True) | ||||
|  |     description = fields.Text(string='Description', translate=True) | ||||
|  |     sequence = fields.Integer(string='Sequence') | ||||
|  |     vehicle_ids = fields.Many2many('car.car', 'worksheet_type_rel', 'type_id', 'vehicle_id', string='Vechicles', | ||||
|  |                                    default=_get_default_vehicle_ids) | ||||
|  |     fold = fields.Boolean('Folded in Tasks Pipeline', | ||||
|  |                           help='This stage is folded in the kanban view when ' | ||||
|  |                                'there are no records in that stage to display.') | ||||
| @ -0,0 +1,106 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################## | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | #    Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | ||||
|  | #    Author: ASWATHI C (<https://www.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 LESSER GENERAL PUBLIC LICENSE | ||||
|  | #    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | ||||
|  | #    If not, see <https://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################## | ||||
|  | import base64 | ||||
|  | 
 | ||||
|  | from odoo.osv import osv | ||||
|  | from odoo.tools.translate import _ | ||||
|  | from odoo import fields, api | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class CarVehicle(osv.osv): | ||||
|  |     _name = 'car.car' | ||||
|  |     _description = "Vechicles" | ||||
|  |     _inherit = ['mail.thread'] | ||||
|  |     _rec_name = 'vehicle_id' | ||||
|  | 
 | ||||
|  |     active = fields.Boolean('Active', default=True) | ||||
|  |     vehicle_id = fields.Many2one('fleet.vehicle', string='Vehicle Name', tracking=True, required=True) | ||||
|  |     sequence = fields.Integer('Sequence', help="Gives the sequence order when displaying a list of Projects.") | ||||
|  | 
 | ||||
|  |     label_tasks = fields.Char(string='Use Tasks as', help="Gives label to Work on kanban view.", default="Task") | ||||
|  |     worksheet = fields.One2many('car.workshop', 'vehicle_id', string="Task Activities") | ||||
|  | 
 | ||||
|  |     type_ids = fields.Many2many('worksheet.stages', 'car_workshop_type_rel', | ||||
|  |                                 'vehicle_id', 'type_id', string='Worksheet Stages', | ||||
|  |                                 states={'close': [('readonly', True)], 'cancelled': [('readonly', True)]}) | ||||
|  | 
 | ||||
|  |     task_count = fields.Integer(compute='_compute_task_count', type='integer', string="Tasks") | ||||
|  |     task_ids = fields.One2many('car.workshop', 'vehicle_id', | ||||
|  |                                domain=['|', ('stage_id.fold', '=', False), ('stage_id', '=', False)]) | ||||
|  |     doc_count = fields.Integer(compute='_compute_attached_docs_count', string="Number of documents attached") | ||||
|  |     color = fields.Integer(string='Color Index') | ||||
|  |     partner_id = fields.Many2one('res.partner', string='Customer') | ||||
|  |     state = fields.Selection([('draft', 'New'), | ||||
|  |                               ('open', 'In Progress'), | ||||
|  |                               ('cancelled', 'Cancelled'), | ||||
|  |                               ('pending', 'Pending'), | ||||
|  |                               ('close', 'Closed')], string='Status', required=True, | ||||
|  |                              track_visibility='onchange', default='open', copy=False) | ||||
|  | 
 | ||||
|  |     date_start = fields.Date(string='Start Date') | ||||
|  |     date = fields.Date(string='Expiration Date', select=True, track_visibility='onchange') | ||||
|  |     use_tasks = fields.Boolean(string='Tasks', default=True) | ||||
|  |     image_128 = fields.Image(related='vehicle_id.image_128', readonly=False) | ||||
|  | 
 | ||||
|  |     def _get_visibility_selection_id(self, cr, uid, context=None): | ||||
|  |         return [('portal', _('Customer Works: visible in portal if the customer is a follower')), | ||||
|  |                 ('employees', _('All Employees Work: all employees can access')), | ||||
|  |                 ('followers', _('Private Work: followers only'))] | ||||
|  | 
 | ||||
|  |     _visibility_selections = lambda self, *args, **kwargs: self._get_visibility_selection_id(*args, **kwargs) | ||||
|  | 
 | ||||
|  |     def _compute_attached_docs_count(self): | ||||
|  |         Attachment = self.env['ir.attachment'] | ||||
|  |         for vehicle in self: | ||||
|  |             vehicle.doc_count = Attachment.search_count([ | ||||
|  |                 '|', | ||||
|  |                 '&', | ||||
|  |                 ('res_model', '=', 'car.car'), ('res_id', '=', vehicle.id), | ||||
|  |                 '&', | ||||
|  |                 ('res_model', '=', 'car.worksheet'), ('res_id', 'in', vehicle.task_ids.ids) | ||||
|  |             ]) | ||||
|  | 
 | ||||
|  |     def _compute_task_count(self): | ||||
|  |         for vehicle in self: | ||||
|  |             vehicle.task_count = len(vehicle.task_ids) | ||||
|  | 
 | ||||
|  |     def attachment_tree_views(self): | ||||
|  |         self.ensure_one() | ||||
|  |         domain = [ | ||||
|  |             '|', | ||||
|  |             '&', ('res_model', '=', 'car.car'), ('res_id', 'in', self.ids), | ||||
|  |             '&', ('res_model', '=', 'car.workshop'), ('res_id', 'in', self.task_ids.ids)] | ||||
|  | 
 | ||||
|  |         return { | ||||
|  |             'name': _('Attachments'), | ||||
|  |             'domain': domain, | ||||
|  |             'res_model': 'ir.attachment', | ||||
|  |             'type': 'ir.actions.act_window', | ||||
|  |             'view_id': False, | ||||
|  |             'view_mode': 'kanban,tree,form', | ||||
|  |             'view_type': 'form', | ||||
|  |             'help': _('''<p class="oe_view_nocontent_create"> | ||||
|  |                         Documents are attached to the tasks and issues of your Worksheet.</p><p> | ||||
|  |                         Send messages or log internal notes with attachments to link | ||||
|  |                         documents to your Worksheet. | ||||
|  |                     </p>'''), | ||||
|  |             'limit': 80, | ||||
|  |             'context': "{'default_res_model': '%s','default_res_id': %d}" % (self._name, self.id) | ||||
|  |         } | ||||
| @ -0,0 +1,54 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################## | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | #    Copyright (C) 2022-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | ||||
|  | #    Author: ASWATHI C (<https://www.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 LESSER GENERAL PUBLIC LICENSE | ||||
|  | #    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | ||||
|  | #    If not, see <https://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################## | ||||
|  | 
 | ||||
|  | from odoo import fields, models, api | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class PlannedWork(models.Model): | ||||
|  |     _name = 'planned.work' | ||||
|  | 
 | ||||
|  |     planned_work = fields.Many2one('product.product', string='Planned work', domain=[('type', '=', 'service')]) | ||||
|  |     time_spent = fields.Float(string='Estimated Time') | ||||
|  |     work_date = fields.Datetime(string='Date')  # Date of work planned:planned date | ||||
|  |     responsible = fields.Many2one('res.users', string='Responsible') | ||||
|  |     work_id = fields.Many2one('car.workshop', string="Work id") | ||||
|  |     work_cost = fields.Float(string="Service Cost") | ||||
|  |     completed = fields.Boolean(string="Completed") | ||||
|  |     duration = fields.Float(string='Duration') | ||||
|  |     work_date2 = fields.Datetime(string='Date')  # Date of work completed/done:completed date | ||||
|  | 
 | ||||
|  |     @api.onchange('planned_work') | ||||
|  |     def get_price(self): | ||||
|  |         self.work_cost = self.planned_work.lst_price | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class MaterialUsed(models.Model): | ||||
|  |     _name = 'material.used' | ||||
|  | 
 | ||||
|  |     material = fields.Many2one('product.product', string='Products') | ||||
|  |     amount = fields.Integer(string='Quantity') | ||||
|  |     price = fields.Float(string='Unit Price') | ||||
|  |     material_id = fields.Many2one('car.workshop') | ||||
|  |     _defaults = { | ||||
|  |         'amount': 1, } | ||||
|  | 
 | ||||
|  |     @api.onchange('material') | ||||
|  |     def get_price(self): | ||||
|  |         self.price = self.material.lst_price | ||||
| 
 | 
| @ -0,0 +1,26 @@ | |||||
|  | <?xml version="1.0" ?> | ||||
|  | <odoo> | ||||
|  |     <data noupdate="0"> | ||||
|  |         <record id="fleet_car_workshop.main_workshop_menu" model="ir.ui.menu"> | ||||
|  |             <field name="groups_id" eval="[(6, 0, [ref('fleet.fleet_group_user')] )]"/> | ||||
|  |         </record> | ||||
|  |         <record id="fleet_car_workshop.workshop_vehicles" model="ir.ui.menu"> | ||||
|  |             <field name="groups_id" eval="[(6, 0, [ref('fleet.fleet_group_user')] )]"/> | ||||
|  |         </record> | ||||
|  |         <record id="fleet_car_workshop.vehicle_works" model="ir.ui.menu"> | ||||
|  |             <field name="groups_id" eval="[(6, 0, [ref('fleet.fleet_group_user')] )]"/> | ||||
|  |         </record> | ||||
|  |         <record id="fleet_car_workshop.menu_worksheet_config" model="ir.ui.menu"> | ||||
|  |             <field name="groups_id" eval="[(6, 0, [ref('fleet.fleet_group_user')] )]"/> | ||||
|  |         </record> | ||||
|  |         <record id="fleet_car_workshop.menu_worksheet_stages_action" model="ir.ui.menu"> | ||||
|  |             <field name="groups_id" eval="[(6, 0, [ref('fleet.fleet_group_manager')] )]"/> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record id="fleet_user_vehicle_visibility_user" model="ir.rule"> | ||||
|  |             <field name="name">Manager has all rights on vehicle</field> | ||||
|  |             <field name="model_id" ref="fleet.model_fleet_vehicle"/> | ||||
|  |             <field name="groups" eval="[(4, ref('fleet.fleet_group_manager'))]"/> | ||||
|  |         </record> | ||||
|  |     </data> | ||||
|  | </odoo> | ||||
| After Width: | Height: | Size: 27 KiB | 
| After Width: | Height: | Size: 73 KiB | 
| After Width: | Height: | Size: 73 KiB | 
| After Width: | Height: | Size: 61 KiB | 
| After Width: | Height: | Size: 8.5 KiB | 
| After Width: | Height: | Size: 103 KiB | 
| After Width: | Height: | Size: 91 KiB | 
| After Width: | Height: | Size: 114 KiB | 
| After Width: | Height: | Size: 58 KiB | 
| After Width: | Height: | Size: 50 KiB | 
| After Width: | Height: | Size: 17 KiB | 
| @ -0,0 +1,431 @@ | |||||
|  | <section class="oe_container" | ||||
|  |          style="background-image:url(https://www.cybrosys.com/images/odoo-index-header-banner.png); background-repeat:no-repeat; background-size:cover;padding: 13% 0% 22% 15%;"> | ||||
|  |     <div class="oe_row oe_spaced"> | ||||
|  |         <h2 class="oe_slogan" | ||||
|  |             style="font-size: 35px;color: #fff;font-weight: 900;text-transform: uppercase;text-align: left;margin: 0;margin-bottom: 16px;"> | ||||
|  |             Car Workshop Management | ||||
|  |         </h2> | ||||
|  |         <h3 class="oe_slogan" | ||||
|  |             style="font-size: 25px;color: #fff;font-weight: 600;text-align: left;opacity: 1;margin: 0 !important;"> | ||||
|  |             Car Workshop Management | ||||
|  |         </h3> | ||||
|  |         <h5 class="oe_slogan" | ||||
|  |             style="text-align: left;background: #fff;width: 293px;padding: 10px;color: #080808 !important;opacity: 1 !important;font-weight: 600;font-size: 20px;"> | ||||
|  |             <a style="color: #080808 !important;" href="https://www.cybrosys.com">Cybrosys Technologies</a> | ||||
|  |         </h5> | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | <section class="oe_container" style="padding: 3% 0% 3% 15%;"> | ||||
|  |     <div class="oe_row oe_spaced"> | ||||
|  |         <h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> | ||||
|  |             Overview | ||||
|  |         </h2> | ||||
|  |         <h3 class="oe_slogan" | ||||
|  |             style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> | ||||
|  |             Car Workshop Management is a Cybrosys Generic Module to manage automobile workshop with | ||||
|  |             great ease. Keep track of everything, like vehicle owner details, | ||||
|  |             Works assigned, Bill details of service provided,etc.. | ||||
|  |         </h3> | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | 
 | ||||
|  | <section class="oe_container" | ||||
|  |          style="background-image:url(https://www.cybrosys.com/images/odoo-index-banner.png); background-repeat:no-repeat; background-size:cover;padding: 19% 0% 30% 15%;"> | ||||
|  |     <div class="oe_row oe_spaced"> | ||||
|  |         <h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> | ||||
|  |             Features | ||||
|  |         </h2> | ||||
|  |         <h3 class="oe_slogan" | ||||
|  |             style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;"> | ||||
|  |             <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> | ||||
|  |             User Friendly Interface. | ||||
|  |         </h3> | ||||
|  |         <h3 class="oe_slogan" | ||||
|  |             style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;"> | ||||
|  |             <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> | ||||
|  |             Effective Time management. | ||||
|  |         </h3> | ||||
|  |         <h3 class="oe_slogan" | ||||
|  |             style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;"> | ||||
|  |             <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> | ||||
|  |             Separate Journal Configuration.. | ||||
|  |         </h3> | ||||
|  |         <h3 class="oe_slogan" | ||||
|  |             style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;"> | ||||
|  |             <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> | ||||
|  |             Integrated with Accounting.</h3> | ||||
|  |         <h3 class="oe_slogan" | ||||
|  |             style="text-align: left;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 18px;"> | ||||
|  |             <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> | ||||
|  |             High Scalability.</h3> | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | <section class="oe_container" style="padding: 3% 0% 0% 15%;"> | ||||
|  |     <div class="oe_row oe_spaced"> | ||||
|  |         <h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> | ||||
|  |             Dashboard/All Vehicles | ||||
|  |         </h2> | ||||
|  |         <h3 class="oe_slogan" | ||||
|  |             style="text-align: left;padding: 1% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> | ||||
|  |             <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> | ||||
|  |             Whole Workshop Analysis | ||||
|  |         </h3> | ||||
|  |         <div class="oe_row oe_spaced"> | ||||
|  |             <img src="8.png" alt="" style="width: 95%;"/> | ||||
|  |         </div> | ||||
|  |         <h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> | ||||
|  |             All works | ||||
|  |         </h2> | ||||
|  |         <h3>Goto Car Workshop -->Worksheet</h3> | ||||
|  |         <h3 class="oe_slogan" | ||||
|  |             style="text-align: left;padding: 1% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> | ||||
|  |             <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> | ||||
|  |             Organise all the works according to their Status. Works/Tasks assigned works using the kanban view and | ||||
|  |             control deadlines in the calendar view.Each Work may have it's own stages. | ||||
|  |         </h3> | ||||
|  |         <h3>Kanban</h3> | ||||
|  |         <div class="oe_row oe_spaced"> | ||||
|  |             <img src="7.png" alt="" style="width: 95%;"/> | ||||
|  |         </div> | ||||
|  |         <h3>Calendar</h3> | ||||
|  |         <div class="oe_row oe_spaced"> | ||||
|  |             <img src="9.png" alt="" style="width: 95%;"/> | ||||
|  |         </div> | ||||
|  |         <h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> | ||||
|  |             Worksheet View | ||||
|  |         </h2> | ||||
|  |         <h3 class="oe_slogan" | ||||
|  |             style="text-align: left;padding: 1% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> | ||||
|  |             <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> | ||||
|  |             All details related to a work/task | ||||
|  |         </h3> | ||||
|  |         <div class="oe_row oe_spaced"> | ||||
|  |             <img src="1.png" alt="" style="width: 95%;"/> | ||||
|  |         </div> | ||||
|  |         <h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> | ||||
|  |             Timesheet | ||||
|  |         </h2> | ||||
|  |         <h3>Goto Car Workshop >Worksheet >Timesheet</h3> | ||||
|  |         <h3 class="oe_slogan" | ||||
|  |             style="text-align: left;padding: 1% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> | ||||
|  |             <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> | ||||
|  |             In timesheet ,Planned work is the sub works related to main Work. By ticking 'Completed' that work will be | ||||
|  |             automatically updated to Work done.<br/> | ||||
|  |             <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> | ||||
|  |             Work done is the details of completed works.<br/> | ||||
|  |             <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> | ||||
|  |             Hour spent is time taken for completed work(Work Done).<br/> | ||||
|  |             <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> | ||||
|  |             Remaining Hour is total time left(Difference between Total Time and Hour Spent). | ||||
|  |         </h3> | ||||
|  |         <div class="oe_row oe_spaced"> | ||||
|  |             <img src="2.png" alt="" style="width: 95%;"/> | ||||
|  |         </div> | ||||
|  |         <h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> | ||||
|  |             Report | ||||
|  |         </h2> | ||||
|  |         <h3 class="oe_slogan" | ||||
|  |             style="text-align: left;padding: 1% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> | ||||
|  |             <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> | ||||
|  |             Tabular Details of Vehicles | ||||
|  |         </h3> | ||||
|  |         <div class="oe_row oe_spaced"> | ||||
|  |             <img src="10.png" alt="" style="width: 95%;"/> | ||||
|  |         </div> | ||||
|  |         <h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> | ||||
|  |             Settings | ||||
|  |         </h2> | ||||
|  |         <h3 class="oe_slogan" | ||||
|  |             style="text-align: left;padding: 1% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> | ||||
|  |             <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> | ||||
|  |             Configure Preferred journal for Invoicing | ||||
|  |         </h3> | ||||
|  |         <h3>Goto Car Workshop >Configuration >Settings </h3> | ||||
|  |         <div class="oe_row oe_spaced"> | ||||
|  |             <img src="5.png" alt="" style="width: 95%;"/> | ||||
|  |         </div> | ||||
|  |         <h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> | ||||
|  |             Separate Journal | ||||
|  |         </h2> | ||||
|  |         <h3 class="oe_slogan" | ||||
|  |             style="text-align: left;padding: 1% 0% 0% 0%;font-size: 16px;width: 90%;margin: 0;margin-top: 14px;color: #000 !important;opacity: 1 !important;line-height: 24px;"> | ||||
|  |             <i class="fa fa-check-circle-o" style="width:40px; color:#07B700"></i> | ||||
|  |             Invoices from the car workshop will be saved to Separate journal. | ||||
|  |         </h3> | ||||
|  |         <h3>Goto Car Workshop >Worksheet >Create Invoices </h3> | ||||
|  |         <div class="oe_row oe_spaced"> | ||||
|  |             <img src="4.png" alt="" style="width: 95%;"/> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | 
 | ||||
|  | <section class="oe_container" style="padding: 1% 0% 0% 3%;"> | ||||
|  |     <div class="oe_row oe_spaced"> | ||||
|  |         <h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> | ||||
|  |             Our Service | ||||
|  |         </h2> | ||||
|  |         <div style="display:flex;padding-top: 20px;justify-content: space-between;"> | ||||
|  |             <div style="flex-basis: 18%;"> | ||||
|  |                 <a href="https://www.cybrosys.com/odoo-customization-and-installation/" target="_blank"> | ||||
|  |                     <div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> | ||||
|  |                         <img src="https://www.cybrosys.com/images/odoo-customization.png" | ||||
|  |                              style="width: 100%;border-radius: 100%;"/> | ||||
|  |                     </div> | ||||
|  |                     <h3 class="oe_slogan" | ||||
|  |                         style="text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> | ||||
|  |                         Odoo <br/>Customization | ||||
|  |                     </h3> | ||||
|  |                 </a> | ||||
|  |             </div> | ||||
|  |             <div style="flex-basis: 18%;"> | ||||
|  |                 <a href="https://www.cybrosys.com/odoo-erp-implementation/" target="_blank"> | ||||
|  |                     <div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> | ||||
|  |                         <img src="https://www.cybrosys.com/images/odoo-erp-implementation.png" | ||||
|  |                              style="width: 100%;border-radius: 100%;"/> | ||||
|  |                     </div> | ||||
|  |                     <h3 class="oe_slogan" | ||||
|  |                         style="text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> | ||||
|  |                         Odoo <br/>Implementation | ||||
|  |                     </h3> | ||||
|  |                 </a> | ||||
|  |             </div> | ||||
|  |             <div style="flex-basis: 18%;"> | ||||
|  |                 <a href="https://www.cybrosys.com/odoo-erp-integration/" target="_blank"> | ||||
|  |                     <div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> | ||||
|  |                         <img src="https://www.cybrosys.com/images/odoo-erp-integration.png" | ||||
|  |                              style="width: 100%;border-radius: 100%;"/> | ||||
|  |                     </div> | ||||
|  |                     <h3 class="oe_slogan" | ||||
|  |                         style="text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> | ||||
|  |                         Odoo <br/>Integration | ||||
|  |                     </h3> | ||||
|  |                 </a> | ||||
|  |             </div> | ||||
|  |             <div style="flex-basis: 18%;"> | ||||
|  |                 <a href="https://www.cybrosys.com/odoo-erp-support/" target="_blank"> | ||||
|  |                     <div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> | ||||
|  |                         <img src="https://www.cybrosys.com/images/odoo-erp-support.png" | ||||
|  |                              style="width: 100%;border-radius: 100%;"/> | ||||
|  |                     </div> | ||||
|  |                     <h3 class="oe_slogan" | ||||
|  |                         style="text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> | ||||
|  |                         Odoo <br/>Support | ||||
|  |                     </h3> | ||||
|  |                 </a> | ||||
|  |             </div> | ||||
|  |             <div style="flex-basis: 18%;"> | ||||
|  |                 <a href="https://www.cybrosys.com/hire-odoo-developer/" target="_blank"> | ||||
|  |                     <div style="width:75px;height:75px;background:#fff; border-radius:100%;margin: auto;"> | ||||
|  |                         <img src="https://www.cybrosys.com/images/hire-odoo-developer.png" | ||||
|  |                              style="width: 100%;border-radius: 100%;"/> | ||||
|  |                     </div> | ||||
|  |                     <h3 class="oe_slogan" | ||||
|  |                         style="text-align: center;font-size: 14px;width: 100%;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;"> | ||||
|  |                         Hire <br/>Odoo Developer | ||||
|  |                     </h3> | ||||
|  |                 </a> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | <section class="oe_container" style="padding: 3% 0% 0% 3%;"> | ||||
|  |     <div class="oe_row oe_spaced"> | ||||
|  |         <h2 class="oe_slogan" style="text-align: left;font-size: 28px;font-weight: 600;margin: 0px !important;"> | ||||
|  |             Our Industries | ||||
|  |         </h2> | ||||
|  |         <div style="display:flex;justify-content: space-between;flex-wrap:wrap;"> | ||||
|  |             <div style="flex-basis: 32%;padding-top: 20px;"> | ||||
|  |                 <a href="https://www.cybrosys.com/odoo/industries/best-trading-erp/" target="_blank"> | ||||
|  |                     <div style="width:30%; float:left;"> | ||||
|  |                         <div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> | ||||
|  |                             <img src="https://www.cybrosys.com/images/odoo-index-industry-1.png" alt="Odoo Industry" | ||||
|  |                                  style="    border-radius: 100%;width:100%;"/> | ||||
|  |                         </div> | ||||
|  |                     </div> | ||||
|  |                     <div style="width:70%;float:left;"> | ||||
|  |                         <h3 class="oe_slogan" | ||||
|  |                             style=" text-align: left;font-size: 14px;font-weight:600;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> | ||||
|  |                             Trading | ||||
|  |                         </h3> | ||||
|  |                         <h3 class="oe_slogan" | ||||
|  |                             style=" text-align: left;font-size: 13px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;"> | ||||
|  |                             Easily procure and sell your products. | ||||
|  |                         </h3> | ||||
|  |                     </div> | ||||
|  |                 </a> | ||||
|  |             </div> | ||||
|  |             <div style="flex-basis: 32%;padding-top: 20px;"> | ||||
|  |                 <a href="https://www.cybrosys.com/odoo/industries/manufacturing-erp-software/" target="_blank"> | ||||
|  |                     <div style="width:30%; float:left;"> | ||||
|  |                         <div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> | ||||
|  |                             <img src="https://www.cybrosys.com/images/odoo-index-industry-2.png" alt="Odoo Industry" | ||||
|  |                                  style="    border-radius: 100%;width:100%;"/> | ||||
|  |                         </div> | ||||
|  |                     </div> | ||||
|  |                     <div style="width:70%;float:left;"> | ||||
|  |                         <h3 class="oe_slogan" | ||||
|  |                             style=" text-align: left;font-size: 14px;font-weight:600;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> | ||||
|  |                             Manufacturing | ||||
|  |                         </h3> | ||||
|  |                         <h3 class="oe_slogan" | ||||
|  |                             style=" text-align: left;font-size: 13px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;"> | ||||
|  |                             Plan, track and schedule your operations. | ||||
|  |                         </h3> | ||||
|  |                     </div> | ||||
|  |                 </a> | ||||
|  |             </div> | ||||
|  |             <div style="flex-basis: 32%;padding-top: 20px;"> | ||||
|  |                 <a href="https://www.cybrosys.com/odoo/industries/restaurant-management/" target="_blank"> | ||||
|  |                     <div style="width:30%; float:left;"> | ||||
|  |                         <div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> | ||||
|  |                             <img src="https://www.cybrosys.com/images/odoo-index-industry-3.png" alt="Odoo Industry" | ||||
|  |                                  style="    border-radius: 100%;width:100%;"/> | ||||
|  |                         </div> | ||||
|  |                     </div> | ||||
|  |                     <div style="width:70%;float:left;"> | ||||
|  |                         <h3 class="oe_slogan" | ||||
|  |                             style=" text-align: left;font-size: 14px;font-weight:600;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> | ||||
|  |                             Restaurant | ||||
|  |                         </h3> | ||||
|  |                         <h3 class="oe_slogan" | ||||
|  |                             style=" text-align: left;font-size: 13px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;"> | ||||
|  |                             Run your bar or restaurant methodical. | ||||
|  |                         </h3> | ||||
|  |                     </div> | ||||
|  |                 </a> | ||||
|  |             </div> | ||||
|  |             <div style="flex-basis: 32%;padding-top: 20px;"> | ||||
|  |                 <a href="https://www.cybrosys.com/odoo/industries/pos/" target="_blank"> | ||||
|  |                     <div style="width:30%; float:left;"> | ||||
|  |                         <div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> | ||||
|  |                             <img src="https://www.cybrosys.com/images/odoo-index-industry-4.png" alt="Odoo Industry" | ||||
|  |                                  style="    border-radius: 100%;width:100%;"/> | ||||
|  | 
 | ||||
|  |                         </div> | ||||
|  |                     </div> | ||||
|  |                     <div style="width:70%;float:left;"> | ||||
|  |                         <h3 class="oe_slogan" | ||||
|  |                             style=" text-align: left;font-size: 14px;font-weight:600;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> | ||||
|  |                             POS | ||||
|  |                         </h3> | ||||
|  |                         <h3 class="oe_slogan" | ||||
|  |                             style=" text-align: left;font-size: 13px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;"> | ||||
|  |                             Easy configuring and convivial selling. | ||||
|  |                         </h3> | ||||
|  |                     </div> | ||||
|  |                 </a> | ||||
|  |             </div> | ||||
|  |             <div style="flex-basis: 32%;padding-top: 20px;"> | ||||
|  |                 <a href="https://www.cybrosys.com/odoo/industries/ecommerce-website/" target="_blank"> | ||||
|  |                     <div style="width:30%; float:left;"> | ||||
|  |                         <div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> | ||||
|  |                             <img src="https://www.cybrosys.com/images/odoo-index-industry-5.png" alt="Odoo Industry" | ||||
|  |                                  style="    border-radius: 100%;width:100%;"/> | ||||
|  | 
 | ||||
|  |                         </div> | ||||
|  |                     </div> | ||||
|  |                     <div style="width:70%;float:left;"> | ||||
|  |                         <h3 class="oe_slogan" | ||||
|  |                             style=" text-align: left;font-size: 14px;font-weight:600;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 0px;margin-left: 16px;"> | ||||
|  |                             E-commerce & Website | ||||
|  |                         </h3> | ||||
|  |                         <h3 class="oe_slogan" | ||||
|  |                             style=" text-align: left;font-size: 13px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;"> | ||||
|  |                             Mobile friendly, awe-inspiring product pages. | ||||
|  |                         </h3> | ||||
|  |                     </div> | ||||
|  |                 </a> | ||||
|  |             </div> | ||||
|  |             <div style="flex-basis: 32%;padding-top: 20px;"> | ||||
|  |                 <a href="https://www.cybrosys.com/odoo/industries/hotel-management-erp/" target="_blank"> | ||||
|  |                     <div style="width:30%; float:left;"> | ||||
|  |                         <div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> | ||||
|  |                             <img src="https://www.cybrosys.com/images/odoo-index-industry-6.png" alt="Odoo Industry" | ||||
|  |                                  style="    border-radius: 100%;width:100%;"/> | ||||
|  | 
 | ||||
|  |                         </div> | ||||
|  |                     </div> | ||||
|  |                     <div style="width:70%;float:left;"> | ||||
|  |                         <h3 class="oe_slogan" | ||||
|  |                             style=" text-align: left;font-size: 14px;font-weight:600;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> | ||||
|  |                             Hotel Management | ||||
|  |                         </h3> | ||||
|  |                         <h3 class="oe_slogan" | ||||
|  |                             style=" text-align: left;font-size: 13px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;"> | ||||
|  |                             An all-inclusive hotel management application. | ||||
|  |                         </h3> | ||||
|  |                     </div> | ||||
|  |                 </a> | ||||
|  |             </div> | ||||
|  |             <div style="flex-basis: 32%;padding-top: 20px;"> | ||||
|  |                 <a href="https://www.cybrosys.com/odoo/industries/education-erp-software/" target="_blank"> | ||||
|  |                     <div style="width:30%; float:left;"> | ||||
|  |                         <div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> | ||||
|  |                             <img src="https://www.cybrosys.com/images/odoo-index-industry-7.png" alt="Odoo Industry" | ||||
|  |                                  style="    border-radius: 100%;width:100%;"/> | ||||
|  | 
 | ||||
|  |                         </div> | ||||
|  |                     </div> | ||||
|  |                     <div style="width:70%;float:left;"> | ||||
|  |                         <h3 class="oe_slogan" | ||||
|  |                             style=" text-align: left;font-size: 14px;font-weight:600;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> | ||||
|  |                             Education | ||||
|  |                         </h3> | ||||
|  |                         <h3 class="oe_slogan" | ||||
|  |                             style=" text-align: left;font-size: 13px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;"> | ||||
|  |                             A Collaborative platform for educational management. | ||||
|  |                         </h3> | ||||
|  |                     </div> | ||||
|  |                 </a> | ||||
|  |             </div> | ||||
|  |             <div style="flex-basis: 32%;padding-top: 20px;"> | ||||
|  |                 <a href="https://www.cybrosys.com/odoo/industries/service-management/" target="_blank"> | ||||
|  |                     <div style="width:30%; float:left;"> | ||||
|  |                         <div style="width:75px;height:75px;background:#CE2D48; border-radius:100%;float: left;text-align: left;"> | ||||
|  |                             <img src="https://www.cybrosys.com/images/odoo-index-industry-8.png" alt="Odoo Industry" | ||||
|  |                                  style="    border-radius: 100%;width:100%;"/> | ||||
|  | 
 | ||||
|  |                         </div> | ||||
|  |                     </div> | ||||
|  |                     <div style="width:70%;float:left;"> | ||||
|  |                         <h3 class="oe_slogan" | ||||
|  |                             style=" text-align: left;font-size: 14px;font-weight:600;width: auto;margin: 0;margin-top: 14px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 4px;margin-left: 16px;"> | ||||
|  |                             Service Management | ||||
|  |                         </h3> | ||||
|  |                         <h3 class="oe_slogan" | ||||
|  |                             style=" text-align: left;font-size: 13px;width: auto;margin: 0;margin-top:5px;color: #000 !important;margin-top: 5px;opacity: 1 !important;line-height: 17px;float: left;margin-top: 5px;margin-left: 16px;"> | ||||
|  |                             Keep track of services and invoice accordingly. | ||||
|  |                         </h3> | ||||
|  |                     </div> | ||||
|  |                 </a> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </section> | ||||
|  | 
 | ||||
|  | <section class="oe_container" | ||||
|  |          style="background-image:url(https://www.cybrosys.com/images/odoo-index-footer-bg.png); background-repeat:no-repeat; background-size:100%;padding: 13% 0% 6% 0%;"> | ||||
|  |     <div class="oe_slogan" style="margin-top:10px !important;margin-bottom: 0px;"> | ||||
|  |         <div class="col-md-6" style="float:left; padding:20px;"><h4><i class="fa fa-envelope"></i>Email us </h4> | ||||
|  |             <p>odoo@cybrosys.com</p></div> | ||||
|  |         <div class="col-md-6" style="float:left; padding:20px;"><h4><i class="fa fa-phone"></i> Contact Us </h4> <a | ||||
|  |                 href="https://www.cybrosys.com/contact/" target="_blank"> www.cybrosys.com</a></div> | ||||
|  |         <br> | ||||
|  |         <img src="https://www.cybrosys.com/images/logo.png" style="width: 190px; margin-bottom: 25px;margin-top: 30px;" | ||||
|  |              class="center-block"> | ||||
|  |         <div> | ||||
|  |             <a href="https://twitter.com/cybrosys" target="_blank"><i class="fa fa-2x fa-twitter" | ||||
|  |                                                                       style="color:white;background: #00a0d1;width:35px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a></td> | ||||
|  |             <a href="https://www.linkedin.com/company/cybrosys-technologies-pvt-ltd" target="_blank"><i | ||||
|  |                     class="fa fa-2x fa-linkedin" | ||||
|  |                     style="color:white;background: #31a3d6;width:35px;padding-left: 3px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a></td> | ||||
|  |             <a href="https://www.facebook.com/cybrosystechnologies" target="_blank"><i class="fa fa-2x fa-facebook" | ||||
|  |                                                                                        style="color:white;background: #3b5998;width:35px; ;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a></td> | ||||
|  |             <a href="https://plus.google.com/106641282743045431892/about" target="_blank"><i | ||||
|  |                     class="fa fa-2x fa-google-plus" | ||||
|  |                     style="color:white;background: #c53c2c;width:35px;padding-left: 3px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a></td> | ||||
|  |             <a href="https://in.pinterest.com/cybrosys" target="_blank"><i class="fa fa-2x fa-pinterest" | ||||
|  |                                                                            style="color:white;background: #ac0f18;width:35px;padding-left: 3px;height: 35px;padding-top: 7px;font-size: 21px;margin-right: 6px;border-radius: 100%;"></i></a></td> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </section> | ||||
| @ -0,0 +1,40 @@ | |||||
|  | 
 | ||||
|  | .oe_kanban_project_avatars img { | ||||
|  |     width: 30px; | ||||
|  |     border-radius: 2px; | ||||
|  |     -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); | ||||
|  |     -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); | ||||
|  |     -box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); | ||||
|  | } | ||||
|  | .oe_form_gantt_avatars:after { | ||||
|  |   font-family: "mnmliconsRegular" !important; | ||||
|  |   font-size: 21px; | ||||
|  |   font-weight: 300 !important; | ||||
|  |   content: "y"; | ||||
|  |   top: 3px; | ||||
|  |   position: relative; | ||||
|  | } | ||||
|  | 
 | ||||
|  | .openerp .oe_kanban_view .oe_kanban_project { | ||||
|  |   width: 250px; | ||||
|  |   min-height: 160px !important; | ||||
|  |   cursor: default; | ||||
|  | } | ||||
|  | 
 | ||||
|  | .openerp .oe_percent strong:after { | ||||
|  |   content: "%"; | ||||
|  | } | ||||
|  | 
 | ||||
|  | .openerp .oe_margin_top_8 { | ||||
|  |   margin-top: 8px; | ||||
|  | } | ||||
|  | .openerp .oe_kanban_project .oe_kanban_project_list .col-md-6 a{ | ||||
|  |   margin-left: 5px; | ||||
|  | } | ||||
|  | 
 | ||||
|  | /* Kanban status as label in project stage form view */ | ||||
|  | .openerp label.oe_project_kanban_legend { | ||||
|  |   min-width: inherit !important; | ||||
|  |   margin-top: 6px; | ||||
|  |   margin-right: 8px; | ||||
|  | } | ||||
| @ -0,0 +1,38 @@ | |||||
|  | .o_kanban_view.o_kanban_dashboard.o_project_kanban { | ||||
|  |     .o_project_kanban_boxes { | ||||
|  |         display: flex; | ||||
|  |         flex-flow: row wrap; | ||||
|  |         justify-content: space-between; | ||||
|  | 
 | ||||
|  |         .o_project_kanban_box { | ||||
|  |             position: relative; | ||||
|  |             text-align: center; | ||||
|  |             padding: 0 0 0 0; | ||||
|  |             margin: 0 5px; | ||||
|  | 
 | ||||
|  |             .o_value { | ||||
|  |                 font-weight: 800; | ||||
|  |             } | ||||
|  | 
 | ||||
|  |             > div { | ||||
|  |                 font-weight: 500; | ||||
|  | 
 | ||||
|  |                 button.o_needaction { | ||||
|  |                     font-size: small; | ||||
|  |                     font-weight: 400; | ||||
|  |                     margin-left: 4px; | ||||
|  |                     @include o-hover-opacity(0.5, 1); | ||||
|  | 
 | ||||
|  |                     &:before { | ||||
|  |                         content: "/ "; | ||||
|  |                     } | ||||
|  | 
 | ||||
|  |                     &:after { | ||||
|  |                         content: "\f086"; | ||||
|  |                         font: normal normal normal 14px/1 FontAwesome; | ||||
|  |                     } | ||||
|  |                 } | ||||
|  |             } | ||||
|  |         } | ||||
|  |     } | ||||
|  | } | ||||
| @ -0,0 +1,215 @@ | |||||
|  | <odoo> | ||||
|  |     <record id="car_car_form" model="ir.ui.view"> | ||||
|  |         <field name="name">car.car.form</field> | ||||
|  |         <field name="model">car.car</field> | ||||
|  |         <field name="arch" type="xml"> | ||||
|  |             <form string="Vehicle"> | ||||
|  |                 <header> | ||||
|  |                     <field name="state" widget="statusbar" clickable="True"/> | ||||
|  |                 </header> | ||||
|  |                 <sheet string="Vehicle"> | ||||
|  |                     <div class="oe_button_box" name="button_box" groups="base.group_user"> | ||||
|  | 
 | ||||
|  |                         <button class="oe_stat_button" | ||||
|  |                                 icon="fa-tasks" | ||||
|  |                                 name="%(fleet_car_workshop.worksheet_action_super_button)d" | ||||
|  |                                 type="action"> | ||||
|  |                             <field string="Tasks" name="task_count" widget="statinfo"/> | ||||
|  |                         </button> | ||||
|  |                         <button class="oe_stat_button" name="attachment_tree_views" type="object" icon="fa-files-o"> | ||||
|  |                             <field string="Documents" name="doc_count" widget="statinfo"/> | ||||
|  |                         </button> | ||||
|  |                         <button name="toggle_active" type="object" | ||||
|  |                                 confirm="(Un)archiving a project automatically (un)archives its tasks and issues. Do you want to proceed?" | ||||
|  |                                 class="oe_stat_button" icon="fa-archive"> | ||||
|  |                             <field name="active" widget="boolean_button" | ||||
|  |                                    options='{"terminology": "archive"}'/> | ||||
|  |                         </button> | ||||
|  | 
 | ||||
|  |                     </div> | ||||
|  |                     <field name="image_128" widget='image' class="oe_avatar"/> | ||||
|  |                     <div class="oe_title"> | ||||
|  |                         <h1> | ||||
|  |                             <field name="vehicle_id" placeholder="Vehicle Name"/> | ||||
|  |                         </h1> | ||||
|  |                         <div name="options_active" class="oe_edit_only"> | ||||
|  |                             <div> | ||||
|  |                                 <field name="use_tasks" class="oe_inline" string="Use Tasks"/> | ||||
|  |                                 <label for="use_tasks" class="oe_inline"/> | ||||
|  |                                 <span attrs="{'invisible':[('use_tasks', '=', False)]}">as</span> | ||||
|  |                                 <field name="label_tasks" class="oe_inline oe_input_align" | ||||
|  |                                        attrs="{'invisible': [('use_tasks', '=', False)]}"/> | ||||
|  |                             </div> | ||||
|  |                         </div> | ||||
|  |                     </div> | ||||
|  |                     <notebook> | ||||
|  |                         <page string="Settings"> | ||||
|  |                             <group> | ||||
|  |                                 <field name="partner_id" string="Customer"/> | ||||
|  |                             </group> | ||||
|  |                         </page> | ||||
|  | 
 | ||||
|  |                     </notebook> | ||||
|  |                 </sheet> | ||||
|  |                 <div class="oe_chatter"> | ||||
|  |                     <field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/> | ||||
|  |                     <field name="message_ids" widget="mail_thread"/> | ||||
|  |                 </div> | ||||
|  |             </form> | ||||
|  |         </field> | ||||
|  |     </record> | ||||
|  | 
 | ||||
|  |     <record id="view_car_car_filter" model="ir.ui.view"> | ||||
|  |         <field name="name">car.car.select</field> | ||||
|  |         <field name="model">car.car</field> | ||||
|  |         <field name="arch" type="xml"> | ||||
|  |             <search string="Search Vehicle"> | ||||
|  |                 <field name="vehicle_id" string="Vehicle Name"/> | ||||
|  |                 <filter string="Open" name="Current" domain="[('state', '=','open')]"/> | ||||
|  |                 <filter string="Pending" name="Pending" domain="[('state', '=','pending')]"/> | ||||
|  |                 <separator/> | ||||
|  |                 <separator/> | ||||
|  |                 <filter string="Archived" name="inactive" domain="[('active','=',False)]"/> | ||||
|  |                 <field name="partner_id" string="Contact" filter_domain="[('partner_id', 'child_of', self)]"/> | ||||
|  |                 <group expand="0" string="Group By"> | ||||
|  |                     <filter string="Contact" name="Partner" context="{'group_by':'partner_id'}"/> | ||||
|  |                 </group> | ||||
|  |             </search> | ||||
|  |         </field> | ||||
|  |     </record> | ||||
|  | 
 | ||||
|  |     <record model="ir.ui.view" id="view_car_car_kanban"> | ||||
|  |         <field name="name">car.car.kanban</field> | ||||
|  |         <field name="model">car.car</field> | ||||
|  |         <field name="arch" type="xml"> | ||||
|  |             <kanban class="oe_background_grey o_kanban_dashboard o_project_kanban"> | ||||
|  |                 <field name="vehicle_id"/> | ||||
|  |                 <field name="use_tasks"/> | ||||
|  |                 <field name="color"/> | ||||
|  |                 <field name="task_count"/> | ||||
|  |                 <field name="label_tasks"/> | ||||
|  |                 <field name="task_ids"/> | ||||
|  |                 <field name="doc_count"/> | ||||
|  |                 <field name="image_128"/> | ||||
|  |                 <field name="id"/> | ||||
|  |                 <templates> | ||||
|  |                     <t t-name="kanban-box"> | ||||
|  |                         <div t-attf-class="#{!selection_mode ? kanban_color(record.color.raw_value) : ''} oe_kanban_global_click"> | ||||
|  |                             <div class="o_project_kanban_main"> | ||||
|  |                                 <div class="o_kanban_card_content"> | ||||
|  |                                     <div class="o_kanban_image"> | ||||
|  |                                         <img t-att-src="kanban_image('car.car', 'image_128', record.id.raw_value)" | ||||
|  |                                              alt="Vehicle" class="o_image_64_contain"/> | ||||
|  |                                     </div> | ||||
|  |                                     <div class="o_kanban_primary_left"> | ||||
|  |                                         <div class="oe_kanban_details"> | ||||
|  |                                             <div class="o_primary"> | ||||
|  |                                                 <span> | ||||
|  |                                                     <t t-esc="record.vehicle_id.value"/> | ||||
|  |                                                 </span> | ||||
|  |                                             </div> | ||||
|  |                                         </div> | ||||
|  | 
 | ||||
|  |                                     </div> | ||||
|  |                                 </div> | ||||
|  |                                 <div class="o_kanban_card_manage_pane o_invisible"> | ||||
|  |                                     <div class="o_kanban_card_manage_pane dropdown-menu" role="menu"> | ||||
|  |                                         <div class="o_kanban_card_manage_section o_kanban_manage_reports"> | ||||
|  |                                             <div role="menuitem"> | ||||
|  |                                                 <a type="edit">Settings</a> | ||||
|  |                                             </div> | ||||
|  |                                         </div> | ||||
|  |                                         <div role="menuitem" aria-haspopup="true" | ||||
|  |                                              class="o_no_padding_kanban_colorpicker"> | ||||
|  |                                             <ul class="oe_kanban_colorpicker" data-field="color" role="popup"/> | ||||
|  |                                         </div> | ||||
|  |                                     </div> | ||||
|  | 
 | ||||
|  |                                 </div> | ||||
|  |                                 <div class="o_project_kanban_manage"> | ||||
|  |                                     <a class="o_kanban_manage_toggle_button" href="#"> | ||||
|  |                                         <i class="fa fa-ellipsis-v" role="img" aria-label="Manage" title="Manage"/> | ||||
|  |                                     </a> | ||||
|  |                                 </div> | ||||
|  |                             </div> | ||||
|  |                             <div class="o_project_kanban_boxes"> | ||||
|  |                                 <div t-if="record.use_tasks.raw_value" class="o_project_kanban_box"> | ||||
|  |                                     <a name="%(fleet_car_workshop.worksheet_action_super_button)d" type="action"> | ||||
|  |                                         <span class="o_value"> | ||||
|  |                                             <t t-esc="record.task_count.value"/> | ||||
|  |                                         </span> | ||||
|  |                                         <span class="o_label"> | ||||
|  |                                             <t t-esc="record.label_tasks.value"/> | ||||
|  |                                         </span> | ||||
|  |                                     </a> | ||||
|  | 
 | ||||
|  |                                 </div> | ||||
|  |                                 <a t-if="record.doc_count.raw_value" class="o_project_kanban_box" | ||||
|  |                                    name="attachment_tree_views" type="object"> | ||||
|  |                                     <span class="o_value"> | ||||
|  |                                         <t t-esc="record.doc_count.value"/> | ||||
|  |                                     </span> | ||||
|  |                                     <span class="o_label">Documents</span> | ||||
|  |                                 </a> | ||||
|  |                             </div> | ||||
|  | 
 | ||||
|  |                         </div> | ||||
|  |                     </t> | ||||
|  |                 </templates> | ||||
|  |             </kanban> | ||||
|  |         </field> | ||||
|  |     </record> | ||||
|  | 
 | ||||
|  |     <record id="view_car_car_tree" model="ir.ui.view"> | ||||
|  |         <field name="name">car.car.tree</field> | ||||
|  |         <field name="model">car.car</field> | ||||
|  |         <field name="field_parent">child_ids</field> | ||||
|  |         <field name="arch" type="xml"> | ||||
|  |             <tree decoration-info="state in ('draft','pending')" decoration-muted="state in ('close','cancelled')" | ||||
|  |                   string="Vehicles"> | ||||
|  |                 <field name="vehicle_id" string="Vehicle Name"/> | ||||
|  |                 <field name="partner_id" string="Contact"/> | ||||
|  |                 <field name="state"/> | ||||
|  |             </tree> | ||||
|  |         </field> | ||||
|  |     </record> | ||||
|  | 
 | ||||
|  |     <record id="open_view_vehicle_all" model="ir.actions.act_window"> | ||||
|  |         <field name="name">Vehicles</field> | ||||
|  |         <field name="res_model">car.car</field> | ||||
|  |         <!--        <field name="view_type">form</field>--> | ||||
|  |         <field name="domain">[]</field> | ||||
|  |         <field name="view_mode">kanban,form</field> | ||||
|  |         <field name="search_view_id" ref="view_car_car_filter"/> | ||||
|  |         <field name="context">{'search_default_Current': 1}</field> | ||||
|  |         <field name="help" type="html"> | ||||
|  |             <p class="oe_view_nocontent_create"> | ||||
|  |                 Create a new project. | ||||
|  |             </p> | ||||
|  |             <p> | ||||
|  |                 Organize your activities (plan tasks, track issues, invoice timesheets) for internal, personal or | ||||
|  |                 customer projects. | ||||
|  |             </p> | ||||
|  |         </field> | ||||
|  |     </record> | ||||
|  | 
 | ||||
|  |     <record id="config_view_vehicle_all" model="ir.actions.act_window"> | ||||
|  |         <field name="name">Vehicles</field> | ||||
|  |         <field name="res_model">car.car</field> | ||||
|  |         <!--        <field name="view_type">form</field>--> | ||||
|  |         <field name="domain">[]</field> | ||||
|  |         <field name="view_mode">tree,form</field> | ||||
|  |         <field name="search_view_id" ref="view_car_car_filter"/> | ||||
|  |         <field name="context">{'search_default_Current': 1}</field> | ||||
|  |         <field name="help" type="html"> | ||||
|  |             <p class="oe_view_nocontent_create"> | ||||
|  |                 Create a new vehicle. | ||||
|  |             </p> | ||||
|  |         </field> | ||||
|  |     </record> | ||||
|  | 
 | ||||
|  |     <menuitem name="Dashboard" parent="main_workshop_menu" id="workshop_vehicles" sequence="1" | ||||
|  |               action="open_view_vehicle_all"/> | ||||
|  |     <menuitem name="Vehicles" action="config_view_vehicle_all" id="config_vehicle_view_action" | ||||
|  |               parent="menu_worksheet_config"/> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,41 @@ | |||||
|  | <?xml version="1.0" encoding="UTF-8" ?> | ||||
|  | <odoo> | ||||
|  |     <record id="car_workshop_config_settings" model="ir.actions.act_window"> | ||||
|  |         <field name="name">Settings</field> | ||||
|  |         <field name="type">ir.actions.act_window</field> | ||||
|  |         <field name="res_model">res.config.settings</field> | ||||
|  |         <field name="view_mode">form</field> | ||||
|  |         <field name="target">inline</field> | ||||
|  |         <field name="context">{'module' : 'fleet_car_workshop'}</field> | ||||
|  |     </record> | ||||
|  | 
 | ||||
|  |     <record id="car_workshop_res_config_settings_view_form" model="ir.ui.view"> | ||||
|  |         <field name="name">res wrk shop settings</field> | ||||
|  |         <field name="model">res.config.settings</field> | ||||
|  |         <field name="priority" eval="91"/> | ||||
|  |         <field name="inherit_id" ref="base.res_config_settings_view_form"/> | ||||
|  |         <field name="arch" type="xml"> | ||||
|  |             <xpath expr="//div[hasclass('settings')]" position="inside"> | ||||
|  |                 <div class="app_settings_block" data-string="Car Workshop" id="car_workshop" string="Car Workshop" | ||||
|  |                      data-key="fleet_car_workshop"> | ||||
|  |                     <h2>Car Work Shop</h2> | ||||
|  |                     <div class="row mt16 o_settings_container"> | ||||
|  |                         <div class="col-12 col-lg-6 o_setting_box"> | ||||
|  |                             <div class="o_setting_left_pane"/> | ||||
|  |                             <div class="o_setting_right_pane"> | ||||
|  |                                 <span class="o_form_label">Seperate Journal</span> | ||||
|  |                                 <div class="text-muted content-group mt16"> | ||||
|  |                                     <span>Choose Journal</span> | ||||
|  |                                     <field name="invoice_journal_type" class="text-center oe_inline"/> | ||||
|  |                                 </div> | ||||
|  |                             </div> | ||||
|  |                         </div> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |             </xpath> | ||||
|  |         </field> | ||||
|  |     </record> | ||||
|  |     <menuitem name="Settings" sequence="1" id="config_settings_view_action" | ||||
|  |               parent="fleet_car_workshop.menu_worksheet_config" action="car_workshop_config_settings"/> | ||||
|  | 
 | ||||
|  | </odoo> | ||||
| @ -0,0 +1,15 @@ | |||||
|  | <odoo> | ||||
|  |     <record model="ir.actions.act_window" id="action_car_workshop_report"> | ||||
|  |         <field name="name">Worksheets</field> | ||||
|  |         <field name="res_model">car.workshop</field> | ||||
|  |         <field name="view_mode">pivot,graph</field> | ||||
|  |         <field name="help" type="html"> | ||||
|  |             <p> | ||||
|  |                 Odoo's car workshop management allows you to manage the pipeline of your work efficiently. You can track | ||||
|  |                 progress, discuss on works, attach documents, etc. | ||||
|  |             </p> | ||||
|  |         </field> | ||||
|  |     </record> | ||||
|  |     <menuitem name="Report" id="report_worksheet" parent="main_workshop_menu" sequence="3"/> | ||||
|  |     <menuitem name="Worksheet" id="vehicle_report" parent="report_worksheet" action="action_car_workshop_report"/> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,53 @@ | |||||
|  | <odoo> | ||||
|  |     <data> | ||||
|  |         <record model="ir.ui.view" id="planned_work_form_view"> | ||||
|  |             <field name="name">planned.work.form</field> | ||||
|  |             <field name="model">planned.work</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <form string="Planned Work"> | ||||
|  |                     <group> | ||||
|  |                         <group> | ||||
|  |                             <field name="planned_work"/> | ||||
|  |                             <field name="time_spent" widget="float_time"/> | ||||
|  |                         </group> | ||||
|  |                         <group> | ||||
|  |                             <field name="responsible"/> | ||||
|  |                             <field name="work_date"/> | ||||
|  |                             <field name="work_cost"/> | ||||
|  |                         </group> | ||||
|  |                     </group> | ||||
|  |                 </form> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record model="ir.ui.view" id="material_used_form_view"> | ||||
|  |             <field name="name">material.used.form</field> | ||||
|  |             <field name="model">material.used</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <form string="Work Done"> | ||||
|  |                     <group> | ||||
|  |                         <group> | ||||
|  |                             <field name="material"/> | ||||
|  |                         </group> | ||||
|  |                         <group> | ||||
|  |                             <field name="amount"/> | ||||
|  |                             <field name="price"/> | ||||
|  |                         </group> | ||||
|  |                     </group> | ||||
|  |                 </form> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record model="ir.ui.view" id="material_used_tree_view"> | ||||
|  |             <field name="name">material.used.tree</field> | ||||
|  |             <field name="model">material.used</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <tree string="Materials" editable="bottom"> | ||||
|  |                     <field name="material"/> | ||||
|  |                     <field name="amount"/> | ||||
|  |                     <field name="price"/> | ||||
|  |                 </tree> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  |     </data> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,11 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8"?> | ||||
|  | <odoo> | ||||
|  |     <data> | ||||
|  |         <template id="assets_backend" name="vehicle assets" inherit_id="web.assets_backend"> | ||||
|  |             <xpath expr="." position="inside"> | ||||
|  |                 <link rel="stylesheet" href="/fleet_car_workshop/static/src/css/vehicles.css"/> | ||||
|  |                 <link rel="stylesheet" href="/fleet_car_workshop/static/src/less/car_dashboard.less"/> | ||||
|  |             </xpath> | ||||
|  |         </template> | ||||
|  |     </data> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,124 @@ | |||||
|  | <odoo> | ||||
|  |     <data> | ||||
|  |         <record id="worksheet_stages_form" model="ir.ui.view"> | ||||
|  |             <field name="name">worksheet.stages.form</field> | ||||
|  |             <field name="model">worksheet.stages</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <form string="Worksheet Stages"> | ||||
|  |                     <sheet> | ||||
|  |                         <div class="oe_title"> | ||||
|  |                             <div class="oe_edit_only"> | ||||
|  |                                 <label for="name"/> | ||||
|  |                             </div> | ||||
|  |                             <h1> | ||||
|  |                                 <field name="name"/> | ||||
|  |                             </h1> | ||||
|  |                         </div> | ||||
|  |                         <group> | ||||
|  |                             <group> | ||||
|  |                                 <field name="sequence" groups="base.group_no_one"/> | ||||
|  |                             </group> | ||||
|  |                             <group> | ||||
|  |                                 <field name="fold"/> | ||||
|  |                             </group> | ||||
|  |                         </group> | ||||
|  |                         <group string="Vehicles using this stage"> | ||||
|  |                             <group> | ||||
|  |                                 <field name="vehicle_ids" widget="many2many_tags"/> | ||||
|  |                             </group> | ||||
|  |                         </group> | ||||
|  |                         <group> | ||||
|  |                             <p class="text-muted" colspan="2"> | ||||
|  |                                 You can also add a description to help your co-workers understand the meaning and | ||||
|  |                                 purpose of the stage. | ||||
|  |                             </p> | ||||
|  |                             <field name="description" placeholder="Add a description..." nolabel="1" colspan="2"/> | ||||
|  |                         </group> | ||||
|  |                     </sheet> | ||||
|  |                 </form> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record id="worksheet_stages_tree" model="ir.ui.view"> | ||||
|  |             <field name="name">worksheet.stages.tree</field> | ||||
|  |             <field name="model">worksheet.stages</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <tree string="Task Stage"> | ||||
|  |                     <field name="sequence" widget="handle" groups="base.group_no_one"/> | ||||
|  |                     <field name="name"/> | ||||
|  |                     <field name="fold"/> | ||||
|  |                     <field name="description"/> | ||||
|  |                     <field name="vehicle_ids" widget="many2many_tags"/> | ||||
|  |                 </tree> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record id="worksheet_stages_action" model="ir.actions.act_window"> | ||||
|  |             <field name="name">Stages</field> | ||||
|  |             <field name="res_model">worksheet.stages</field> | ||||
|  |             <field name="view_mode">tree,form</field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record model="ir.ui.view" id="worksheet_tags_tree_view"> | ||||
|  |             <field name="name">Tags</field> | ||||
|  |             <field name="model">worksheet.tags</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <tree editable="bottom"> | ||||
|  |                     <field name="name"/> | ||||
|  |                     <field name="color" widget="color_picker"/> | ||||
|  |                 </tree> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record model="ir.ui.view" id="worksheet_tags_form_view"> | ||||
|  |             <field name="name">Tags</field> | ||||
|  |             <field name="model">worksheet.tags</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <form string="Tags"> | ||||
|  |                     <sheet> | ||||
|  |                         <group col="2"> | ||||
|  |                             <group> | ||||
|  |                                 <field name="name"/> | ||||
|  |                             </group> | ||||
|  |                             <group> | ||||
|  |                                 <field name="color" widget="color_picker"/> | ||||
|  | 
 | ||||
|  |                             </group> | ||||
|  | 
 | ||||
|  |                         </group> | ||||
|  |                     </sheet> | ||||
|  | 
 | ||||
|  |                 </form> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |         <record id="worksheet_tags_action" model="ir.actions.act_window"> | ||||
|  |             <field name="name">Tags</field> | ||||
|  |             <field name="res_model">worksheet.tags</field> | ||||
|  |             <field name="view_mode">tree,form</field> | ||||
|  |             <field name="help" type="html"> | ||||
|  |                 <p class="oe_view_nocontent_create"> | ||||
|  |                     Click to add a new tag. | ||||
|  |                 </p> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record id="workshop_services" model="ir.actions.act_window"> | ||||
|  |             <field name="name">Service-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_services":'service'}</field> | ||||
|  |             <field name="help" type="html"> | ||||
|  |                 <p class="oe_view_nocontent_create"> | ||||
|  |                     Click to define a new product. | ||||
|  |                 </p> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <menuitem action="worksheet_tags_action" id="menu_worksheet_tags_act" parent="menu_worksheet_config"/> | ||||
|  |         <menuitem action="worksheet_stages_action" id="menu_worksheet_stages_action" parent="menu_worksheet_config"/> | ||||
|  |         <menuitem action="workshop_services" id="menu_workshop_product_services" parent="menu_worksheet_config"/> | ||||
|  |     </data> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,319 @@ | |||||
|  | <odoo> | ||||
|  |     <data> | ||||
|  |         <record id="ir_cron_scheduler_demo_action" model="ir.cron"> | ||||
|  |             <field name="name">Demo scheduler</field> | ||||
|  |             <field name="user_id" ref="base.user_root"/> | ||||
|  |             <field name="interval_number">1</field> | ||||
|  |             <field name="interval_type">minutes</field> | ||||
|  |             <field name="numbercall">-1</field> | ||||
|  |             <field eval="False" name="doall"/> | ||||
|  |             <field name="model_id" ref="fleet_car_workshop.model_car_workshop"/> | ||||
|  |             <field name="state">code</field> | ||||
|  |             <field name="code">model.process_demo_scheduler_queue()</field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record model="ir.ui.view" id="worksheet_form_view"> | ||||
|  |             <field name="name">worksheet.form.view</field> | ||||
|  |             <field name="model">car.workshop</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <form string="Worksheet"> | ||||
|  |                     <header> | ||||
|  |                         <button name="workshop_create_invoices" string="Create Invoices" type="object" | ||||
|  |                                 class="btn-primary" states="waiting"/> | ||||
|  |                         <button class="btn-primary" name="cancel" string="Cancel" type="object" states="waiting"/> | ||||
|  |                         <field name="state" widget="statusbar" statusbar_visible="workshop_create_invoices,cancel"/> | ||||
|  |                     </header> | ||||
|  |                     <header> | ||||
|  |                         <field name="stage_id" widget="statusbar" clickable="True" | ||||
|  |                                options="{'fold_field': 'fold'}"/> | ||||
|  |                     </header> | ||||
|  | 
 | ||||
|  |                     <sheet string="Worksheet"> | ||||
|  |                         <div class="oe_button_box" name="button_box"> | ||||
|  |                             <button class="oe_stat_button" type="object" name="get_invoices" | ||||
|  |                                     icon="fa-pencil-square-o"> | ||||
|  |                                 <field string="Invoices" name="invoice_count" widget="statinfo"/> | ||||
|  |                             </button> | ||||
|  |                         </div> | ||||
|  |                         <field name="kanban_state" widget="kanban_state_selection"/> | ||||
|  |                         <div class="oe_title"> | ||||
|  |                             <h1 class="o_row"> | ||||
|  |                                 <field name="company_id" invisible="1"/> | ||||
|  |                                 <field name="priority" widget="priority"/> | ||||
|  |                                 <field name="name" placeholder="Title..."/> | ||||
|  |                             </h1> | ||||
|  |                         </div> | ||||
|  |                         <group> | ||||
|  |                             <group> | ||||
|  |                                 <field name="vehicle_id"/> | ||||
|  |                                 <field name="user_id"/> | ||||
|  |                             </group> | ||||
|  |                             <group> | ||||
|  |                                 <field name="date_deadline"/> | ||||
|  |                                 <field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/> | ||||
|  |                                 <field name="progress" widget="progressbar"/> | ||||
|  |                             </group> | ||||
|  |                         </group> | ||||
|  |                         <notebook> | ||||
|  |                             <page name="description_page" string="Description"> | ||||
|  |                                 <field name="description" type="html"/> | ||||
|  |                                 <div class="oe_clear"/> | ||||
|  |                             </page> | ||||
|  |                             <page name="timesheet_page" string="Timesheets"> | ||||
|  |                                 <group string="Planned/Ordered Work"> | ||||
|  |                                     <field name="planned_works"> | ||||
|  |                                         <tree string="Planned Work" editable="bottom"> | ||||
|  |                                             <field name="planned_work"/> | ||||
|  |                                             <field name="time_spent" sum="Estimated Time" widget="float_time"/> | ||||
|  |                                             <field name="work_date"/> | ||||
|  |                                             <field name="responsible"/> | ||||
|  |                                             <field name="work_cost"/> | ||||
|  |                                             <field name="completed"/> | ||||
|  |                                         </tree> | ||||
|  |                                     </field> | ||||
|  |                                 </group> | ||||
|  |                                 <group string="Work Done"> | ||||
|  |                                     <field name="works_done"> | ||||
|  |                                         <tree string="Planned Work" editable="bottom"> | ||||
|  |                                             <field name="planned_work" string="Work Done"/> | ||||
|  |                                             <field name="duration" sum="Estimated Time" widget="float_time"/> | ||||
|  |                                             <field name="work_date2"/> | ||||
|  |                                             <field name="responsible" string="User"/> | ||||
|  |                                             <field name="work_cost"/> | ||||
|  |                                         </tree> | ||||
|  |                                     </field> | ||||
|  |                                 </group> | ||||
|  |                                 <group string="Materials Used"> | ||||
|  |                                     <field name="materials_used"/> | ||||
|  |                                 </group> | ||||
|  |                                 <group> | ||||
|  |                                     <field name="amount_total"/> | ||||
|  |                                 </group> | ||||
|  |                                 <group class="oe_subtotal_footer oe_right" name="project_hours"> | ||||
|  |                                     <field name="effective_hour" widget="float_time"/> | ||||
|  |                                     <field name="remaining_hour" class="oe_subtotal_footer_separator" | ||||
|  |                                            widget="float_time"/> | ||||
|  |                                 </group> | ||||
|  |                             </page> | ||||
|  |                             <page string="Extra Info"> | ||||
|  | 
 | ||||
|  |                                 <group col="4"> | ||||
|  |                                     <field name="sequence"/> | ||||
|  |                                     <field name="partner_id"/> | ||||
|  | 
 | ||||
|  |                                     <field name="displayed_image_id"/> | ||||
|  |                                 </group> | ||||
|  |                                 <group col="4"> | ||||
|  |                                     <field name="date_assign"/> | ||||
|  |                                     <field name="date_last_stage_update"/> | ||||
|  |                                 </group> | ||||
|  | 
 | ||||
|  |                             </page> | ||||
|  |                         </notebook> | ||||
|  |                     </sheet> | ||||
|  |                     <div class="oe_chatter"> | ||||
|  |                         <field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/> | ||||
|  |                         <field name="message_ids" widget="mail_thread"/> | ||||
|  |                     </div> | ||||
|  |                 </form> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record model="ir.ui.view" id="car_workshop_view_kanban"> | ||||
|  |             <field name="name">car workshop kanban</field> | ||||
|  |             <field name="model">car.workshop</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <kanban default_group_by="stage_id" class="o_kanban_small_column" records_draggable="1"> | ||||
|  |                     <field name="color"/> | ||||
|  |                     <field name="priority"/> | ||||
|  |                     <field name="stage_id" options='{"group_by_tooltip": {"description": "Stage Description"}}'/> | ||||
|  |                     <field name="user_id"/> | ||||
|  |                     <field name="description"/> | ||||
|  |                     <field name="sequence"/> | ||||
|  |                     <field name="date_deadline"/> | ||||
|  |                     <field name="tag_ids" options="{'color_field': 'color'}"/> | ||||
|  |                     <field name="attachment_ids"/> | ||||
|  |                     <field name="displayed_image_id"/> | ||||
|  |                     <field name="active"/> | ||||
|  |                     <progressbar field="kanban_state" | ||||
|  |                                  colors='{"done": "success", "blocked": "danger", "normal": "muted"}'/> | ||||
|  | 
 | ||||
|  |                     <templates> | ||||
|  |                         <t t-name="kanban-box"> | ||||
|  |                             <div t-attf-class="oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_card oe_kanban_global_click"> | ||||
|  | 
 | ||||
|  |                                 <div class="o_dropdown_kanban dropdown" t-if="!selection_mode" groups="base.group_user"> | ||||
|  |                                     <a role="button" class="dropdown-toggle o-no-caret btn" data-toggle="dropdown" | ||||
|  |                                        data-display="static" href="#" aria-label="Dropdown menu" title="Dropdown menu"> | ||||
|  |                                         <span class="fa fa-ellipsis-v"/> | ||||
|  |                                     </a> | ||||
|  |                                     <div class="dropdown-menu" role="menu"> | ||||
|  |                                         <a t-if="widget.editable" role="menuitem" type="edit" class="dropdown-item">Edit | ||||
|  |                                             Task | ||||
|  |                                         </a> | ||||
|  |                                         <a t-if="widget.deletable" role="menuitem" type="delete" class="dropdown-item"> | ||||
|  |                                             Delete | ||||
|  |                                         </a> | ||||
|  |                                         <div role="separator" class="dropdown-divider"></div> | ||||
|  |                                         <ul class="oe_kanban_colorpicker" data-field="color"/> | ||||
|  |                                     </div> | ||||
|  |                                 </div> | ||||
|  | 
 | ||||
|  |                                 <div class="oe_kanban_content"> | ||||
|  |                                     <div> | ||||
|  |                                         <field name="tag_ids" options="{'color_field': 'color'}"/> | ||||
|  |                                     </div> | ||||
|  |                                     <div> | ||||
|  |                                         <strong> | ||||
|  |                                             <field name="name"/> | ||||
|  |                                         </strong> | ||||
|  |                                     </div> | ||||
|  |                                     <div class="text-muted"> | ||||
|  |                                         <field name="vehicle_id" invisible="context.get('default_vehicle_id', False)"/> | ||||
|  |                                         <t t-if="record.date_deadline.raw_value and record.date_deadline.raw_value lt (new Date())" | ||||
|  |                                            t-set="red">oe_kanban_text_red | ||||
|  |                                         </t> | ||||
|  |                                         <span t-attf-class="#{red || ''}"> | ||||
|  |                                             <i> | ||||
|  |                                                 <field name="date_deadline"/> | ||||
|  |                                             </i> | ||||
|  |                                         </span> | ||||
|  |                                     </div> | ||||
|  |                                     <div class="oe_kanban_bottom_left"> | ||||
|  |                                         <field name="priority" widget="priority"/> | ||||
|  | 
 | ||||
|  |                                     </div> | ||||
|  |                                     <div class="oe_kanban_bottom_right"> | ||||
|  |                                         <img t-att-src="kanban_image('res.users', 'image_128', record.user_id.raw_value)" | ||||
|  |                                              t-att-title="record.user_id.value" width="24" height="24" | ||||
|  |                                              class="oe_kanban_avatar pull-right" alt="img"/> | ||||
|  |                                         <div class="pull-left"> | ||||
|  |                                             <field name="kanban_state" widget="kanban_state_selection"/> | ||||
|  |                                         </div> | ||||
|  |                                     </div> | ||||
|  |                                 </div> | ||||
|  |                                 <div t-if="record.displayed_image_id.value"> | ||||
|  |                                     <field name="displayed_image_id" widget="attachment_image"/> | ||||
|  |                                 </div> | ||||
|  |                                 <div class="oe_clear"></div> | ||||
|  |                             </div> | ||||
|  |                         </t> | ||||
|  |                     </templates> | ||||
|  |                 </kanban> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |         <record model="ir.ui.view" id="worksheet_tree_view"> | ||||
|  |             <field name="name">worksheet.tree.view</field> | ||||
|  |             <field name="model">car.workshop</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <tree string="Worksheet"> | ||||
|  |                     <field name="name"/> | ||||
|  |                     <field name="vehicle_id" invisible="context.get('user_invisible', False)"/> | ||||
|  |                     <field name="user_id" invisible="context.get('user_invisible', False)"/> | ||||
|  |                     <field name="date_deadline" invisible="context.get('deadline_visible',True)"/> | ||||
|  |                     <field name="amount_total"/> | ||||
|  |                     <field name="stage_id" invisible="context.get('set_visible',False)"/> | ||||
|  |                     <field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/> | ||||
|  |                 </tree> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record id="worksheet_calender_view" model="ir.ui.view"> | ||||
|  |             <field name="name">worksheet.calender.view</field> | ||||
|  |             <field name="model">car.workshop</field> | ||||
|  |             <field eval="2" name="priority"/> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <calendar color="user_id" date_start="date_deadline" string="Tasks"> | ||||
|  |                     <field name="name"/> | ||||
|  |                     <field name="vehicle_id"/> | ||||
|  |                 </calendar> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record id="view_car_workshop_pivot" model="ir.ui.view"> | ||||
|  |             <field name="name">car.workshop.pivot</field> | ||||
|  |             <field name="model">car.workshop</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <pivot string="Project Tasks"> | ||||
|  |                     <field name="vehicle_id" type="row"/> | ||||
|  |                     <field name="stage_id" type="col"/> | ||||
|  |                 </pivot> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record id="view_car_workshop_graph" model="ir.ui.view"> | ||||
|  |             <field name="name">car.workshop.graph</field> | ||||
|  |             <field name="model">car.workshop</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <graph string="Project Tasks"> | ||||
|  |                     <field name="vehicle_id"/> | ||||
|  |                     <field name="stage_id"/> | ||||
|  |                 </graph> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record id="view_vehicle_search_form" model="ir.ui.view"> | ||||
|  |             <field name="name">car.workshop.search.form</field> | ||||
|  |             <field name="model">car.workshop</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <search string="Worksheet"> | ||||
|  |                     <field name="name" string="Tasks"/> | ||||
|  |                     <field name="tag_ids" options="{'color_field': 'color'}"/> | ||||
|  |                     <field name="partner_id"/> | ||||
|  |                     <field name="vehicle_id"/> | ||||
|  |                     <field name="user_id"/> | ||||
|  |                     <field name="stage_id"/> | ||||
|  |                     <filter string="My worksheets" name="my_worksheets" domain="[('user_id', '=', uid)]"/> | ||||
|  |                     <filter string="Unassigned" name="unassigned" domain="[('user_id', '=', False)]"/> | ||||
|  |                     <separator/> | ||||
|  |                     <filter string="New" name="draft" domain="[('stage_id.sequence', '<=', 1)]"/> | ||||
|  |                     <separator/> | ||||
|  |                     <filter string="Archived" name="inactive" domain="[('active','=',False)]"/> | ||||
|  |                     <group expand="0" string="Group By"> | ||||
|  |                         <filter string="Vehicle" name="vehicle" context="{'group_by':'vehicle_id'}"/> | ||||
|  |                         <filter string="Worksheets" name="name" context="{'group_by':'name'}"/> | ||||
|  |                         <filter string="Assigned to" name="User" context="{'group_by':'user_id'}"/> | ||||
|  |                         <filter string="Stage" name="Stage" context="{'group_by':'stage_id'}"/> | ||||
|  |                         <separator/> | ||||
|  |                     </group> | ||||
|  |                 </search> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |         <record model="ir.actions.act_window" id="worksheet_action_super_button"> | ||||
|  |             <field name="name">Worksheets</field> | ||||
|  |             <field name="res_model">car.workshop</field> | ||||
|  |             <field name="view_mode">kanban,tree,form,calendar,pivot,graph</field> | ||||
|  |             <field name="context">{'search_default_vehicle_id': [active_id], | ||||
|  |                 'default_vehicle_id':active_id} | ||||
|  |             </field> | ||||
|  |             <field name="search_view_id" ref="view_vehicle_search_form"/> | ||||
|  |             <field name="help" type="html"> | ||||
|  |                 <p> | ||||
|  |                     Odoo's car workshop management allows you to manage the pipeline of your work efficiently. You can | ||||
|  |                     track progress, discuss on works, attach documents, etc. | ||||
|  |                 </p> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record model="ir.actions.act_window" id="action_car_workshop_filtered"> | ||||
|  |             <field name="name">Worksheets</field> | ||||
|  |             <field name="res_model">car.workshop</field> | ||||
|  |             <field name="view_mode">kanban,tree,form,calendar,pivot,graph</field> | ||||
|  |             <field name="help" type="html"> | ||||
|  |                 <p> | ||||
|  |                     Odoo's car workshop management allows you to manage the pipeline of your work efficiently. You can | ||||
|  |                     track progress, discuss on works, attach documents, etc. | ||||
|  |                 </p> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <menuitem id="main_workshop_menu" name="Car Workshop"/> | ||||
|  |         <menuitem name="Worksheets" id="search_worksheet" parent="main_workshop_menu" sequence="2"/> | ||||
|  |         <menuitem name="Worksheet" id="vehicle_works" parent="search_worksheet" action="action_car_workshop_filtered"/> | ||||
|  |         <menuitem id="menu_worksheet_config" name="Configuration" parent="main_workshop_menu" sequence="4"/> | ||||
|  |     </data> | ||||
|  | </odoo> | ||||