| @ -0,0 +1,41 @@ | |||||
|  | Laundry Management v15 | ||||
|  | ====================== | ||||
|  | This module helps you to manage laundry service. | ||||
|  | 
 | ||||
|  | Configuration | ||||
|  | ============= | ||||
|  | * No additional configurations needed | ||||
|  | 
 | ||||
|  | Company | ||||
|  | ------- | ||||
|  | * `Cybrosys Techno Solutions <https://cybrosys.com/>`__ | ||||
|  | 
 | ||||
|  | Credits | ||||
|  | ------- | ||||
|  | * Developers: 	Jesni Banu@cybrosys | ||||
|  | 		    Nilmar Shereef@cybrosys | ||||
|  |     		Version 13: Nimisha Murali@cybrosys | ||||
|  |     		Version 14: Minhaj T @cybrosys | ||||
|  |             Version 15: Gion @cybrosys | ||||
|  | 
 | ||||
|  | Contacts | ||||
|  | -------- | ||||
|  | * Mail Contact : odoo@cybrosys.com | ||||
|  | * Website : https://cybrosys.com | ||||
|  | 
 | ||||
|  | Bug Tracker | ||||
|  | ----------- | ||||
|  | Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. | ||||
|  | 
 | ||||
|  | Maintainer | ||||
|  | ========== | ||||
|  | .. image:: https://cybrosys.com/images/logo.png | ||||
|  |    :target: https://cybrosys.com | ||||
|  | 
 | ||||
|  | This module is maintained by Cybrosys Technologies. | ||||
|  | 
 | ||||
|  | For support and more information, please visit `Our Website <https://cybrosys.com/>`__ | ||||
|  | 
 | ||||
|  | Further information | ||||
|  | =================== | ||||
|  | HTML Description: `<static/description/index.html>`__ | ||||
| @ -0,0 +1,24 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | ||||
|  | #    Author: Jesni Banu and Nilmar Shereef(odoo@cybrosys.com) | ||||
|  | # | ||||
|  | #    You can modify it under the terms of the GNU AFFERO | ||||
|  | #    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | ||||
|  | #    (AGPL v3) along with this program. | ||||
|  | #    If not, see <http://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | 
 | ||||
|  | from . import models | ||||
|  | from . import reports | ||||
| @ -0,0 +1,48 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2021-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | ||||
|  | #    Author: Jesni Banu and Nilmar Shereef(odoo@cybrosys.com) | ||||
|  | # | ||||
|  | #    You can modify it under the terms of the GNU AFFERO | ||||
|  | #    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | ||||
|  | #    (AGPL v3) along with this program. | ||||
|  | #    If not, see <http://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | 
 | ||||
|  | { | ||||
|  |     'name': 'Laundry Management', | ||||
|  |     'version': '15.0.1.0.0', | ||||
|  |     'summary': """Complete Laundry Service Management""", | ||||
|  |     'description': 'This module is very useful to manage all process of laundry service', | ||||
|  |     "category": "Industries", | ||||
|  |     'author': 'Cybrosys Techno Solutions', | ||||
|  |     'company': 'Cybrosys Techno Solutions', | ||||
|  |     'website': "https://www.cybrosys.com", | ||||
|  |     'depends': ['base', 'mail', 'sale', 'account', 'uom'], | ||||
|  |     'data': [ | ||||
|  |         'data/data.xml', | ||||
|  |         'security/laundry_security.xml', | ||||
|  |         'security/ir.model.access.csv', | ||||
|  |         'views/laundry_view.xml', | ||||
|  |         'views/washing_view.xml', | ||||
|  |         'views/config_view.xml', | ||||
|  |         'views/laundry_report.xml', | ||||
|  |         'views/laundry_label.xml', | ||||
|  |     ], | ||||
|  |     'images': ['static/description/banner.png'], | ||||
|  |     'license': 'AGPL-3', | ||||
|  |     'installable': True, | ||||
|  |     'auto_install': False, | ||||
|  |     'application': False, | ||||
|  | } | ||||
| @ -0,0 +1,8 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8" ?> | ||||
|  | <odoo> | ||||
|  |     <record id="laundry_service" model="product.product"> | ||||
|  |         <field name="name">Laundry Service</field> | ||||
|  |         <field name="type">service</field> | ||||
|  |         <field name="invoice_policy">order</field> | ||||
|  |     </record> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,10 @@ | |||||
|  | ## Module <laundry_management> | ||||
|  | 
 | ||||
|  | #### 20.12.2021 | ||||
|  | #### Version 15.0.1.0.0 | ||||
|  | #### ADD | ||||
|  | Initial commit for Laundry Management | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | 
 | ||||
| @ -0,0 +1,23 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | ||||
|  | #    Author: Jesni Banu and Nilmar Shereef(odoo@cybrosys.com) | ||||
|  | # | ||||
|  | #    You can modify it under the terms of the GNU AFFERO | ||||
|  | #    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | ||||
|  | #    (AGPL v3) along with this program. | ||||
|  | #    If not, see <http://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | 
 | ||||
|  | from . import laundry | ||||
| @ -0,0 +1,472 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | ||||
|  | #    Author: Jesni Banu and Nilmar Shereef(odoo@cybrosys.com) | ||||
|  | # | ||||
|  | #    You can modify it under the terms of the GNU AFFERO | ||||
|  | #    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | ||||
|  | #    (AGPL v3) along with this program. | ||||
|  | #    If not, see <http://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | 
 | ||||
|  | import time | ||||
|  | from datetime import datetime | ||||
|  | from odoo import models, fields, api, _ | ||||
|  | from odoo.exceptions import UserError | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class LaundryManagement(models.Model): | ||||
|  |     _name = 'laundry.order' | ||||
|  |     _inherit = 'mail.thread' | ||||
|  |     _description = "Laundry Order" | ||||
|  |     _order = 'order_date desc, id desc' | ||||
|  |      | ||||
|  |     @api.model | ||||
|  |     def create(self, vals): | ||||
|  |         vals['name'] = self.env['ir.sequence'].next_by_code('laundry.order') | ||||
|  |         return super(LaundryManagement, self).create(vals) | ||||
|  |      | ||||
|  |     @api.depends('order_lines') | ||||
|  |     def get_total(self): | ||||
|  |         total = 0 | ||||
|  |         for obj in self: | ||||
|  |             for each in obj.order_lines: | ||||
|  |                 total += each.amount | ||||
|  |             obj.total_amount = total | ||||
|  |      | ||||
|  |     def confirm_order(self): | ||||
|  |         self.state = 'order' | ||||
|  |         sale_obj = self.env['sale.order'].create( | ||||
|  |             {'partner_id': self.partner_id.id, | ||||
|  |              'partner_invoice_id': self.partner_invoice_id.id, | ||||
|  |              'partner_shipping_id': self.partner_shipping_id.id}) | ||||
|  |         self.sale_obj = sale_obj | ||||
|  |         product_id = self.env.ref('laundry_management.laundry_service') | ||||
|  |         self.env['sale.order.line'].create({'product_id': product_id.id, | ||||
|  |                                             'name': 'Laundry Service', | ||||
|  |                                             'price_unit': self.total_amount, | ||||
|  |                                             'order_id': sale_obj.id | ||||
|  |                                             }) | ||||
|  |         for each in self: | ||||
|  |             for obj in each.order_lines: | ||||
|  |                 self.env['washing.washing'].create( | ||||
|  |                     {'name': obj.product_id.name + '-Washing', | ||||
|  |                      'user_id': obj.washing_type.assigned_person.id, | ||||
|  |                      'description': obj.description, | ||||
|  |                      'laundry_obj': obj.id, | ||||
|  |                      'state': 'draft', | ||||
|  |                      'washing_date': datetime.now().strftime( | ||||
|  |                          '%Y-%m-%d %H:%M:%S')}) | ||||
|  |      | ||||
|  |     def create_invoice(self): | ||||
|  |         if self.sale_obj.state in ['draft', 'sent']: | ||||
|  |             self.sale_obj.action_confirm() | ||||
|  |         self.invoice_status = self.sale_obj.invoice_status | ||||
|  |         return { | ||||
|  |             'name': 'Create Invoice', | ||||
|  |             'view_type': 'form', | ||||
|  |             'view_mode': 'form', | ||||
|  |             'res_model': 'sale.advance.payment.inv', | ||||
|  |             'type': 'ir.actions.act_window', | ||||
|  |             'context': {'laundry_sale_obj': self.sale_obj.id}, | ||||
|  |             'target': 'new' | ||||
|  |         } | ||||
|  |      | ||||
|  |     def return_dress(self): | ||||
|  |         self.state = 'return' | ||||
|  |      | ||||
|  |     def cancel_order(self): | ||||
|  |         self.state = 'cancel' | ||||
|  |      | ||||
|  |     def _invoice_count(self): | ||||
|  |         wrk_ordr_ids = self.env['account.move'].search([('invoice_origin', '=', self.sale_obj.name)]) | ||||
|  |         self.invoice_count = len(wrk_ordr_ids) | ||||
|  | 
 | ||||
|  |     def _work_count(self): | ||||
|  |         if self.id: | ||||
|  |             wrk_ordr_ids = self.env['washing.washing'].search([('laundry_obj.laundry_obj.id', '=', self.id)]) | ||||
|  |             self.work_count = len(wrk_ordr_ids) | ||||
|  |         else: | ||||
|  |             self.work_count = False | ||||
|  | 
 | ||||
|  |     def action_view_laundry_works(self): | ||||
|  |          | ||||
|  |         work_obj = self.env['washing.washing'].search( | ||||
|  |             [('laundry_obj.laundry_obj.id', '=', self.id)]) | ||||
|  |         work_ids = [] | ||||
|  |         for each in work_obj: | ||||
|  |             work_ids.append(each.id) | ||||
|  |         view_id = self.env.ref('laundry_management.washing_form_view').id | ||||
|  |         if work_ids: | ||||
|  |             if len(work_ids) <= 1: | ||||
|  |                 value = { | ||||
|  |                     'view_type': 'form', | ||||
|  |                     'view_mode': 'form', | ||||
|  |                     'res_model': 'washing.washing', | ||||
|  |                     'view_id': view_id, | ||||
|  |                     'type': 'ir.actions.act_window', | ||||
|  |                     'name': _('Works'), | ||||
|  |                     'res_id': work_ids and work_ids[0] | ||||
|  |                 } | ||||
|  |             else: | ||||
|  |                 value = { | ||||
|  |                     'domain': str([('id', 'in', work_ids)]), | ||||
|  |                     'view_type': 'form', | ||||
|  |                     'view_mode': 'tree,form', | ||||
|  |                     'res_model': 'washing.washing', | ||||
|  |                     'view_id': False, | ||||
|  |                     'type': 'ir.actions.act_window', | ||||
|  |                     'name': _('Works'), | ||||
|  |                     # 'res_id': work_ids | ||||
|  |                 } | ||||
|  |             return value | ||||
|  |      | ||||
|  |     def action_view_invoice(self): | ||||
|  |          | ||||
|  |         inv_obj = self.env['account.move'].search( | ||||
|  |             [('invoice_origin', '=', self.sale_obj.name)]) | ||||
|  |         inv_ids = [] | ||||
|  |         for each in inv_obj: | ||||
|  |             inv_ids.append(each.id) | ||||
|  |         view_id = self.env.ref('account.view_move_form').id | ||||
|  |         if inv_ids: | ||||
|  |             if len(inv_ids) <= 1: | ||||
|  |                 value = { | ||||
|  |                     'view_type': 'form', | ||||
|  |                     'view_mode': 'form', | ||||
|  |                     'res_model': 'account.move', | ||||
|  |                     'view_id': view_id, | ||||
|  |                     'type': 'ir.actions.act_window', | ||||
|  |                     'name': _('Invoice'), | ||||
|  |                     'res_id': inv_ids and inv_ids[0] | ||||
|  |                 } | ||||
|  |             else: | ||||
|  |                 value = { | ||||
|  |                     'domain': str([('id', 'in', inv_ids)]), | ||||
|  |                     'view_type': 'form', | ||||
|  |                     'view_mode': 'tree,form', | ||||
|  |                     'res_model': 'account.move', | ||||
|  |                     'view_id': False, | ||||
|  |                     'type': 'ir.actions.act_window', | ||||
|  |                     'name': _('Invoice'), | ||||
|  |                     'res_id': inv_ids | ||||
|  |                 } | ||||
|  |              | ||||
|  |             return value | ||||
|  |      | ||||
|  |     name = fields.Char(string="Label", copy=False) | ||||
|  |     invoice_status = fields.Selection([ | ||||
|  |         ('upselling', 'Upselling Opportunity'), | ||||
|  |         ('invoiced', 'Fully Invoiced'), | ||||
|  |         ('to invoice', 'To Invoice'), | ||||
|  |         ('no', 'Nothing to Invoice') | ||||
|  |     ], string='Invoice Status', invisible=1, related='sale_obj.invoice_status', | ||||
|  |         store=True) | ||||
|  |     sale_obj = fields.Many2one('sale.order', invisible=1) | ||||
|  |     invoice_count = fields.Integer(compute='_invoice_count', | ||||
|  |                                    string='# Invoice') | ||||
|  |     work_count = fields.Integer(compute='_work_count', string='# Works') | ||||
|  |     partner_id = fields.Many2one('res.partner', string='Customer', | ||||
|  |                                  readonly=True, | ||||
|  |                                  states={'draft': [('readonly', False)], | ||||
|  |                                          'order': [('readonly', False)]}, | ||||
|  |                                  required=True, | ||||
|  |                                  change_default=True, index=True, | ||||
|  |                                  track_visibility='always') | ||||
|  |     partner_invoice_id = fields.Many2one('res.partner', | ||||
|  |                                          string='Invoice Address', | ||||
|  |                                          readonly=True, required=True, | ||||
|  |                                          states={ | ||||
|  |                                              'draft': [('readonly', False)], | ||||
|  |                                              'order': [('readonly', False)]}, | ||||
|  |                                          help="Invoice address for current sales order.") | ||||
|  |     partner_shipping_id = fields.Many2one('res.partner', | ||||
|  |                                           string='Delivery Address', | ||||
|  |                                           readonly=True, required=True, | ||||
|  |                                           states={ | ||||
|  |                                               'draft': [('readonly', False)], | ||||
|  |                                               'order': [('readonly', False)]}, | ||||
|  |                                           help="Delivery address for current sales order.") | ||||
|  |     order_date = fields.Datetime(string="Date", | ||||
|  |                                  default=datetime.now().strftime( | ||||
|  |                                      '%Y-%m-%d %H:%M:%S')) | ||||
|  |     laundry_person = fields.Many2one('res.users', string='Laundry Person', | ||||
|  |                                      required=1) | ||||
|  |     order_lines = fields.One2many('laundry.order.line', 'laundry_obj', | ||||
|  |                                   required=1, ondelete='cascade') | ||||
|  |     total_amount = fields.Float(compute='get_total', string='Total', store=1) | ||||
|  |     currency_id = fields.Many2one("res.currency", string="Currency") | ||||
|  |     note = fields.Text(string='Terms and conditions') | ||||
|  |     state = fields.Selection([ | ||||
|  |         ('draft', 'Draft'), | ||||
|  |         ('order', 'Laundry Order'), | ||||
|  |         ('process', 'Processing'), | ||||
|  |         ('done', 'Done'), | ||||
|  |         ('return', 'Returned'), | ||||
|  |         ('cancel', 'Cancelled'), | ||||
|  |     ], string='Status', readonly=True, copy=False, index=True, | ||||
|  |         track_visibility='onchange', default='draft') | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class LaundryManagementLine(models.Model): | ||||
|  |     _name = 'laundry.order.line' | ||||
|  |      | ||||
|  |     @api.depends('washing_type', 'extra_work', 'qty') | ||||
|  |     def get_amount(self): | ||||
|  |         for obj in self: | ||||
|  |             total = obj.washing_type.amount * obj.qty | ||||
|  |             for each in obj.extra_work: | ||||
|  |                 total += each.amount * obj.qty | ||||
|  |             obj.amount = total | ||||
|  |      | ||||
|  |     product_id = fields.Many2one('product.product', string='Dress', required=1) | ||||
|  |     qty = fields.Integer(string='No of items', required=1) | ||||
|  |     description = fields.Text(string='Description') | ||||
|  |     washing_type = fields.Many2one('washing.type', string='Washing Type', | ||||
|  |                                    required=1) | ||||
|  |     extra_work = fields.Many2many('washing.work', string='Extra Work') | ||||
|  |     amount = fields.Float(compute='get_amount', string='Amount') | ||||
|  |     laundry_obj = fields.Many2one('laundry.order', invisible=1) | ||||
|  |     state = fields.Selection([ | ||||
|  |         ('draft', 'Draft'), | ||||
|  |         ('wash', 'Washing'), | ||||
|  |         ('extra_work', 'Make Over'), | ||||
|  |         ('done', 'Done'), | ||||
|  |         ('cancel', 'Cancelled'), | ||||
|  |     ], string='Status', readonly=True, copy=False, index=True, default='draft') | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class WashingType(models.Model): | ||||
|  |     _name = 'washing.type' | ||||
|  |      | ||||
|  |     name = fields.Char(string='Name', required=1) | ||||
|  |     assigned_person = fields.Many2one('res.users', string='Assigned Person', | ||||
|  |                                       required=1) | ||||
|  |     amount = fields.Float(string='Service Charge', required=1) | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class ExtraWork(models.Model): | ||||
|  |     _name = 'washing.work' | ||||
|  |      | ||||
|  |     name = fields.Char(string='Name', required=1) | ||||
|  |     assigned_person = fields.Many2one('res.users', string='Assigned Person', | ||||
|  |                                       required=1) | ||||
|  |     amount = fields.Float(string='Service Charge', required=1) | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class Washing(models.Model): | ||||
|  |     _name = 'washing.washing' | ||||
|  |      | ||||
|  |     def start_wash(self): | ||||
|  |         if not self.laundry_works: | ||||
|  |             self.laundry_obj.state = 'wash' | ||||
|  |             self.laundry_obj.laundry_obj.state = 'process' | ||||
|  |         for each in self: | ||||
|  |             for obj in each.product_line: | ||||
|  |                 self.env['sale.order.line'].create( | ||||
|  |                     {'product_id': obj.product_id.id, | ||||
|  |                      'name': obj.name, | ||||
|  |                      'price_unit': obj.price_unit, | ||||
|  |                      'order_id': each.laundry_obj.laundry_obj.sale_obj.id, | ||||
|  |                      'product_uom_qty': obj.quantity, | ||||
|  |                      'product_uom': obj.uom_id.id, | ||||
|  |                      }) | ||||
|  |         self.state = 'process' | ||||
|  |      | ||||
|  |     def set_to_done(self): | ||||
|  |         self.state = 'done' | ||||
|  |         f = 0 | ||||
|  |         if not self.laundry_works: | ||||
|  |             if self.laundry_obj.extra_work: | ||||
|  |                 for each in self.laundry_obj.extra_work: | ||||
|  |                     self.create({'name': each.name, | ||||
|  |                                  'user_id': each.assigned_person.id, | ||||
|  |                                  'description': self.laundry_obj.description, | ||||
|  |                                  'laundry_obj': self.laundry_obj.id, | ||||
|  |                                  'state': 'draft', | ||||
|  |                                  'laundry_works': True, | ||||
|  |                                  'washing_date': datetime.now().strftime( | ||||
|  |                                      '%Y-%m-%d %H:%M:%S')}) | ||||
|  |                 self.laundry_obj.state = 'extra_work' | ||||
|  |         laundry_obj = self.search([('laundry_obj.laundry_obj', '=', | ||||
|  |                                     self.laundry_obj.laundry_obj.id)]) | ||||
|  |         for each in laundry_obj: | ||||
|  |             if each.state != 'done' or each.state == 'cancel': | ||||
|  |                 f = 1 | ||||
|  |                 break | ||||
|  |         if f == 0: | ||||
|  |             self.laundry_obj.laundry_obj.state = 'done' | ||||
|  |         laundry_obj1 = self.search([('laundry_obj', '=', self.laundry_obj.id)]) | ||||
|  |         f1 = 0 | ||||
|  |         for each in laundry_obj1: | ||||
|  |             if each.state != 'done' or each.state == 'cancel': | ||||
|  |                 f1 = 1 | ||||
|  |                 break | ||||
|  |         if f1 == 0: | ||||
|  |             self.laundry_obj.state = 'done' | ||||
|  |      | ||||
|  |     @api.depends('product_line') | ||||
|  |     def get_total(self): | ||||
|  |         total = 0 | ||||
|  |         for obj in self: | ||||
|  |             for each in obj.product_line: | ||||
|  |                 total += each.subtotal | ||||
|  |             obj.total_amount = total | ||||
|  |      | ||||
|  |     name = fields.Char(string='Work') | ||||
|  |     laundry_works = fields.Boolean(default=False, invisible=1) | ||||
|  |     user_id = fields.Many2one('res.users', string='Assigned Person') | ||||
|  |     washing_date = fields.Datetime(string='Date') | ||||
|  |     description = fields.Text(string='Description') | ||||
|  |     state = fields.Selection([ | ||||
|  |         ('draft', 'Draft'), | ||||
|  |         ('process', 'Process'), | ||||
|  |         ('done', 'Done'), | ||||
|  |         ('cancel', 'Cancelled'), | ||||
|  |     ], string='Status', readonly=True, copy=False, index=True, default='draft') | ||||
|  |     laundry_obj = fields.Many2one('laundry.order.line', invisible=1) | ||||
|  |     product_line = fields.One2many('wash.order.line', 'wash_obj', | ||||
|  |                                    string='Products', ondelete='cascade') | ||||
|  |     total_amount = fields.Float(compute='get_total', string='Grand Total') | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class SaleOrderInherit(models.Model): | ||||
|  |     _name = 'wash.order.line' | ||||
|  |      | ||||
|  |     @api.depends('price_unit', 'quantity') | ||||
|  |     def compute_amount(self): | ||||
|  |         total = 0 | ||||
|  |         for obj in self: | ||||
|  |             total += obj.price_unit * obj.quantity | ||||
|  |         obj.subtotal = total | ||||
|  |      | ||||
|  |     wash_obj = fields.Many2one('washing.washing', string='Order Reference', | ||||
|  |                                ondelete='cascade') | ||||
|  |     name = fields.Text(string='Description', required=True) | ||||
|  |     uom_id = fields.Many2one('uom.uom', 'Unit of Measure ', required=True) | ||||
|  |     quantity = fields.Integer(string='Quantity') | ||||
|  |     product_id = fields.Many2one('product.product', string='Product') | ||||
|  |     price_unit = fields.Float('Unit Price', default=0.0, | ||||
|  |                               related='product_id.list_price') | ||||
|  |     subtotal = fields.Float(compute='compute_amount', string='Subtotal', | ||||
|  |                             readonly=True, store=True) | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class LaundryManagementInvoice(models.TransientModel): | ||||
|  |     _inherit = 'sale.advance.payment.inv' | ||||
|  |      | ||||
|  |     def create_invoices(self): | ||||
|  |         context = self._context | ||||
|  |         if context.get('laundry_sale_obj'): | ||||
|  |             sale_orders = self.env['sale.order'].browse( | ||||
|  |                 context.get('laundry_sale_obj')) | ||||
|  |         else: | ||||
|  |             sale_orders = self.env['sale.order'].browse( | ||||
|  |                 self._context.get('active_ids', [])) | ||||
|  |         if self.advance_payment_method == 'delivered': | ||||
|  |             sale_orders._create_invoices() | ||||
|  |         elif self.advance_payment_method == 'all': | ||||
|  |             sale_orders._create_invoices()(final=True) | ||||
|  |         else: | ||||
|  |             # Create deposit product if necessary | ||||
|  |             if not self.product_id: | ||||
|  |                 vals = self._prepare_deposit_product() | ||||
|  |                 self.product_id = self.env['product.product'].create(vals) | ||||
|  |                 self.env['ir.values'].sudo().set_default( | ||||
|  |                     'sale.config.settings', 'deposit_product_id_setting', | ||||
|  |                     self.product_id.id) | ||||
|  |              | ||||
|  |             sale_line_obj = self.env['sale.order.line'] | ||||
|  |             for order in sale_orders: | ||||
|  |                 if self.advance_payment_method == 'percentage': | ||||
|  |                     amount = order.amount_untaxed * self.amount / 100 | ||||
|  |                 else: | ||||
|  |                     amount = self.amount | ||||
|  |                 if self.product_id.invoice_policy != 'order': | ||||
|  |                     raise UserError(_( | ||||
|  |                         'The product used to invoice a down payment should have an invoice policy set to "Ordered' | ||||
|  |                         ' quantities". Please update your deposit product to be able to create a deposit invoice.')) | ||||
|  |                 if self.product_id.type != 'service': | ||||
|  |                     raise UserError(_( | ||||
|  |                         "The product used to invoice a down payment should be of type 'Service'. Please use another " | ||||
|  |                         "product or update this product.")) | ||||
|  |                 taxes = self.product_id.taxes_id.filtered( | ||||
|  |                     lambda | ||||
|  |                         r: not order.company_id or r.company_id == order.company_id) | ||||
|  |                 if order.fiscal_position_id and taxes: | ||||
|  |                     tax_ids = order.fiscal_position_id.map_tax(taxes).ids | ||||
|  |                 else: | ||||
|  |                     tax_ids = taxes.ids | ||||
|  |                 so_line = sale_line_obj.create({ | ||||
|  |                     'name': _('Advance: %s') % (time.strftime('%m %Y'),), | ||||
|  |                     'price_unit': amount, | ||||
|  |                     'product_uom_qty': 0.0, | ||||
|  |                     'order_id': order.id, | ||||
|  |                     'discount': 0.0, | ||||
|  |                     'product_uom': self.product_id.uom_id.id, | ||||
|  |                     'product_id': self.product_id.id, | ||||
|  |                     'tax_id': [(6, 0, tax_ids)], | ||||
|  |                 }) | ||||
|  |                 self._create_invoice(order, so_line, amount) | ||||
|  |         if self._context.get('open_invoices', False): | ||||
|  |             return sale_orders.action_view_invoice() | ||||
|  |         return {'type': 'ir.actions.act_window_close'} | ||||
|  |      | ||||
|  |     def _create_invoice(self, order, so_line, amount): | ||||
|  |         if ( | ||||
|  |                 self.advance_payment_method == 'percentage' and self.amount <= 0.00) or ( | ||||
|  |                 self.advance_payment_method == 'fixed' and self.fixed_amount <= 0.00): | ||||
|  |             raise UserError( | ||||
|  |                 _('The value of the down payment amount must be positive.')) | ||||
|  |         if self.advance_payment_method == 'percentage': | ||||
|  |             amount = order.amount_untaxed * self.amount / 100 | ||||
|  |             name = _("Down payment of %s%%") % (self.amount,) | ||||
|  |         else: | ||||
|  |             amount = self.fixed_amount | ||||
|  |             name = _('Down Payment') | ||||
|  |          | ||||
|  |         invoice_vals = { | ||||
|  |             'move_type': 'out_invoice', | ||||
|  |             'invoice_origin': order.name, | ||||
|  |             'invoice_user_id': order.user_id.id, | ||||
|  |             'narration': order.note, | ||||
|  |             'partner_id': order.partner_invoice_id.id, | ||||
|  |             'fiscal_position_id': order.fiscal_position_id.id or order.partner_id.property_account_position_id.id, | ||||
|  |             'partner_shipping_id': order.partner_shipping_id.id, | ||||
|  |             'currency_id': order.pricelist_id.currency_id.id, | ||||
|  |             'invoice_payment_ref': order.client_order_ref, | ||||
|  |             'invoice_payment_term_id': order.payment_term_id.id, | ||||
|  |             'team_id': order.team_id.id, | ||||
|  |             'campaign_id': order.campaign_id.id, | ||||
|  |             'medium_id': order.medium_id.id, | ||||
|  |             'source_id': order.source_id.id, | ||||
|  |             'invoice_line_ids': [(0, 0, { | ||||
|  |                 'name': name, | ||||
|  |                 'price_unit': amount, | ||||
|  |                 'quantity': 1.0, | ||||
|  |                 'product_id': self.product_id.id, | ||||
|  |                 'sale_line_ids': [(6, 0, [so_line.id])], | ||||
|  |                 'analytic_tag_ids': [(6, 0, so_line.analytic_tag_ids.ids)], | ||||
|  |                 'analytic_account_id': order.analytic_account_id.id or False, | ||||
|  |             })], | ||||
|  |         } | ||||
|  |         if order.fiscal_position_id: | ||||
|  |             invoice_vals['fiscal_position_id'] = order.fiscal_position_id.id | ||||
|  |         invoice = self.env['account.move'].create(invoice_vals) | ||||
|  |         invoice.message_post_with_view('mail.message_origin_link', | ||||
|  |                                        values={'self': invoice, | ||||
|  |                                                'origin': order}, | ||||
|  |                                        subtype_id=self.env.ref( | ||||
|  |                                            'mail.mt_note').id) | ||||
|  |         return invoice | ||||
| @ -0,0 +1,23 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | ||||
|  | #    Author: Jesni Banu and Nilmar Shereef(odoo@cybrosys.com) | ||||
|  | # | ||||
|  | #    You can modify it under the terms of the GNU AFFERO | ||||
|  | #    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | ||||
|  | #    (AGPL v3) along with this program. | ||||
|  | #    If not, see <http://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | 
 | ||||
|  | from . import laundry_report | ||||
| @ -0,0 +1,98 @@ | |||||
|  | # -*- coding: utf-8 -*- | ||||
|  | ############################################################################# | ||||
|  | # | ||||
|  | #    Cybrosys Technologies Pvt. Ltd. | ||||
|  | # | ||||
|  | #    Copyright (C) 2019-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | ||||
|  | #    Author: Jesni Banu and Nilmar Shereef(odoo@cybrosys.com) | ||||
|  | # | ||||
|  | #    You can modify it under the terms of the GNU AFFERO | ||||
|  | #    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | ||||
|  | # | ||||
|  | #    This program is distributed in the hope that it will be useful, | ||||
|  | #    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  | #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  | #    GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | ||||
|  | # | ||||
|  | #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | ||||
|  | #    (AGPL v3) along with this program. | ||||
|  | #    If not, see <http://www.gnu.org/licenses/>. | ||||
|  | # | ||||
|  | ############################################################################# | ||||
|  | 
 | ||||
|  | from odoo import models, fields, tools | ||||
|  | 
 | ||||
|  | 
 | ||||
|  | class DifferedCheckHistory(models.Model): | ||||
|  |     _name = "report.laundry.order" | ||||
|  |     _description = "Laundry Order Analysis" | ||||
|  |     _auto = False | ||||
|  | 
 | ||||
|  |     name = fields.Char(string="Label") | ||||
|  |     invoice_status = fields.Selection([ | ||||
|  |         ('upselling', 'Upselling Opportunity'), | ||||
|  |         ('invoiced', 'Fully Invoiced'), | ||||
|  |         ('to invoice', 'To Invoice'), | ||||
|  |         ('no', 'Nothing to Invoice') | ||||
|  |     ], string='Invoice Status', store=True) | ||||
|  |     partner_id = fields.Many2one('res.partner', string='Customer') | ||||
|  |     partner_invoice_id = fields.Many2one('res.partner', string='Invoice Address') | ||||
|  |     partner_shipping_id = fields.Many2one('res.partner', string='Delivery Address') | ||||
|  |     order_date = fields.Datetime(string="Date") | ||||
|  |     laundry_person = fields.Many2one('res.users', string='Laundry Person') | ||||
|  |     total_amount = fields.Float(string='Total') | ||||
|  |     currency_id = fields.Many2one("res.currency", string="Currency") | ||||
|  |     state = fields.Selection([ | ||||
|  |         ('draft', 'Draft'), | ||||
|  |         ('order', 'Laundry Order'), | ||||
|  |         ('process', 'Processing'), | ||||
|  |         ('done', 'Done'), | ||||
|  |         ('return', 'Returned'), | ||||
|  |         ('cancel', 'Cancelled'), | ||||
|  |     ], string='Status') | ||||
|  | 
 | ||||
|  |     _order = 'name desc' | ||||
|  | 
 | ||||
|  |     def _select(self): | ||||
|  |         select_str = """ | ||||
|  |              SELECT | ||||
|  |                     (select 1 ) AS nbr, | ||||
|  |                     t.id as id, | ||||
|  |                     t.name as name, | ||||
|  |                     t.invoice_status as invoice_status, | ||||
|  |                     t.partner_id as partner_id, | ||||
|  |                     t.partner_invoice_id as partner_invoice_id, | ||||
|  |                     t.partner_shipping_id as partner_shipping_id, | ||||
|  |                     t.order_date as order_date, | ||||
|  |                     t.laundry_person as laundry_person, | ||||
|  |                     t.total_amount as total_amount, | ||||
|  |                     t.currency_id as currency_id, | ||||
|  |                     t.state as state | ||||
|  |         """ | ||||
|  |         return select_str | ||||
|  | 
 | ||||
|  |     def _group_by(self): | ||||
|  |         group_by_str = """ | ||||
|  |                 GROUP BY | ||||
|  |                     t.id, | ||||
|  |                     name, | ||||
|  |                     invoice_status, | ||||
|  |                     partner_id, | ||||
|  |                     partner_invoice_id, | ||||
|  |                     partner_shipping_id, | ||||
|  |                     order_date, | ||||
|  |                     laundry_person, | ||||
|  |                     total_amount, | ||||
|  |                     currency_id, | ||||
|  |                     state | ||||
|  |         """ | ||||
|  |         return group_by_str | ||||
|  | 
 | ||||
|  |     def init(self): | ||||
|  |         tools.sql.drop_view_if_exists(self._cr, 'report_laundry_order') | ||||
|  |         self._cr.execute(""" | ||||
|  |             CREATE view report_laundry_order as | ||||
|  |               %s | ||||
|  |               FROM laundry_order t | ||||
|  |                 %s | ||||
|  |         """ % (self._select(), self._group_by())) | ||||
| 
 | 
| @ -0,0 +1,34 @@ | |||||
|  | <?xml version="1.0" ?> | ||||
|  | <odoo> | ||||
|  |     <data> | ||||
|  |         <record id="module_laundry_category" model="ir.module.category"> | ||||
|  |             <field name="name">Laundry</field> | ||||
|  |             <field name="sequence">18</field> | ||||
|  |         </record> | ||||
|  |         <record id="laundry_group_user" model="res.groups"> | ||||
|  |             <field name="name">User</field> | ||||
|  |             <field name="category_id" ref="module_laundry_category"/> | ||||
|  |             <field name="users" eval="[(4, ref('base.group_user'))]"/> | ||||
|  |         </record> | ||||
|  |         <record id="laundry_group_manager" model="res.groups"> | ||||
|  |             <field name="name">Manager</field> | ||||
|  |             <field name="implied_ids" eval="[(4, ref('laundry_group_user'))]"/> | ||||
|  |             <field name="category_id" ref="module_laundry_category"/> | ||||
|  |             <field name="users" eval="[(4, ref('base.user_root')), (4, ref('base.user_admin'))]"/> | ||||
|  |         </record> | ||||
|  |         <record id="laundry_order_admin_rule" model="ir.rule"> | ||||
|  |             <field name="name">laundry manager: full access</field> | ||||
|  |             <field name="model_id" ref="model_laundry_order"/> | ||||
|  |             <field name="domain_force">[(1,'=',1)]</field> | ||||
|  |             <field name="groups" eval="[(4,ref('laundry_group_manager'))]"/> | ||||
|  |         </record> | ||||
|  |         <record id="laundry_order_user_rule" model="ir.rule"> | ||||
|  |             <field name="name">user: own document only</field> | ||||
|  |             <field name="model_id" ref="model_laundry_order"/> | ||||
|  |             <field name="domain_force">[('laundry_person.id','=',user.id)]</field> | ||||
|  |             <field name="groups" eval="[(4,ref('laundry_group_user'))]"/> | ||||
|  |         </record> | ||||
|  |     </data> | ||||
|  | </odoo> | ||||
|  | 
 | ||||
|  | 
 | ||||
| After Width: | Height: | Size: 310 B | 
| After Width: | Height: | Size: 1.3 KiB | 
| After Width: | Height: | Size: 1.4 KiB | 
| After Width: | Height: | Size: 576 B | 
| After Width: | Height: | Size: 733 B | 
| After Width: | Height: | Size: 911 B | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 673 B | 
| After Width: | Height: | Size: 878 B | 
| After Width: | Height: | Size: 653 B | 
| After Width: | Height: | Size: 905 B | 
| After Width: | Height: | Size: 839 B | 
| After Width: | Height: | Size: 427 B | 
| After Width: | Height: | Size: 627 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 988 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 58 KiB | 
| After Width: | Height: | Size: 16 KiB | 
| After Width: | Height: | Size: 22 KiB | 
| After Width: | Height: | Size: 174 KiB | 
| After Width: | Height: | Size: 80 KiB | 
| After Width: | Height: | Size: 40 KiB | 
| After Width: | Height: | Size: 51 KiB | 
| After Width: | Height: | Size: 78 KiB | 
| After Width: | Height: | Size: 34 KiB | 
| After Width: | Height: | Size: 30 KiB | 
| After Width: | Height: | Size: 50 KiB | 
| After Width: | Height: | Size: 81 KiB | 
| After Width: | Height: | Size: 82 KiB | 
| After Width: | Height: | Size: 81 KiB | 
| After Width: | Height: | Size: 42 KiB | 
| After Width: | Height: | Size: 3.4 KiB | 
| After Width: | Height: | Size: 57 KiB | 
| After Width: | Height: | Size: 63 KiB | 
| After Width: | Height: | Size: 60 KiB | 
| After Width: | Height: | Size: 58 KiB | 
| After Width: | Height: | Size: 57 KiB | 
| After Width: | Height: | Size: 58 KiB | 
| @ -0,0 +1,706 @@ | |||||
|  | <div class="container" style="padding: 1rem !important; margin-bottom: 1.5rem !important;"> | ||||
|  |     <div class="row"> | ||||
|  |         <div class="col-sm-12 col-md-12 col-lg-12 d-flex justify-content-between" | ||||
|  |             style="border-bottom: 1px solid #d5d5d5;"> | ||||
|  |             <div class="my-3"> | ||||
|  |                 <img src="./images/logo.png" style="width: auto !important; height: 40px !important;"> | ||||
|  |             </div> | ||||
|  |             <div class="my-3 d-flex align-items-center"> | ||||
|  |                 <div | ||||
|  |                     style="background-color: #7C7BAD !important; color: #fff !important; font-weight: 600 !important; padding: 5px 15px 8px !important; margin: 0 5px !important;"> | ||||
|  |                     <i class="fa fa-check mr-1"></i>Community | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |     </div> | ||||
|  | </div> | ||||
|  | 
 | ||||
|  | <div style="padding: 3.5rem 1.5rem !important; background-color: #ffffff !important;"> | ||||
|  |     <div class="container"> | ||||
|  |         <!-- HERO --> | ||||
|  |         <div class="row"> | ||||
|  |             <div class="col-lg-12 d-flex flex-column justify-content-center" | ||||
|  |                 style="text-align: center; padding: 1rem !important;"> | ||||
|  |                 <h1 class="text-center" style="color: #212121 !important; font-size: 3.5rem !important;"><span | ||||
|  |                         style="font-weight: 700 !important;">Laundry Management</span></h1> | ||||
|  |                 <p class="text-center" | ||||
|  |                     style="color: #212529 !important; font-size: 1.5rem !important; letter-spacing: 5px !important;"> | ||||
|  |                     Helps You To Manage Laundry Service | ||||
|  |                 </p> | ||||
|  |                 <img src="./images/hero.png" class="img-responsive"> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <!-- END OF HERO --> | ||||
|  | 
 | ||||
|  |         <!-- OVERVIEW --> | ||||
|  |         <div class="row"> | ||||
|  |             <div class="col-lg-12 d-flex flex-column justify-content-center" | ||||
|  |                 style="text-align: center; padding: 2.5rem 1rem !important;"> | ||||
|  |                 <h2 style="color: #212529 !important;">Overview</h2> | ||||
|  |                 <hr | ||||
|  |                     style="border: 3px solid #AC1015 !important; background-color: #AC1015 !important; width: 80px !important; margin-bottom: 2rem !important;" /> | ||||
|  |                 <p class="text-center" style="color: #212529 !important; font-size: 1.5rem !important;"> | ||||
|  |                     This is an industrial specific module by Cybrosys Technologies for Laundry Management. It | ||||
|  |                     manages the laundry process with assigning works to workers. | ||||
|  |                 </p> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <!-- END OF OVERVIEW --> | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |         <!-- KEY FEATURES --> | ||||
|  |         <div class="row"> | ||||
|  |             <div class="col-lg-12 d-flex flex-column justify-content-center" style="padding: 2.5rem 1rem !important;"> | ||||
|  |                 <h2 class="text-center" style="color: #212529 !important;">Key Features</h2> | ||||
|  |                 <hr | ||||
|  |                     style="border: 3px solid #AC1015 !important; background-color: #AC1015 !important; width: 80px !important; margin-bottom: 2rem !important;" /> | ||||
|  |                 <div class="row"> | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |                     <div class="col-lg-6"> | ||||
|  | 
 | ||||
|  |                         <div class="d-flex deep-2" | ||||
|  |                             style="height: 60px !important; padding: 1rem 1.5rem !important; border-radius: 0 !important; margin: 1.5rem 0"> | ||||
|  |                             <img src="./images/checked.png" style="height: 24px !important; width: 24px !important;" | ||||
|  |                                 class="mt-1 mr-2" height="24px" width="24px"> | ||||
|  |                             <p style="color: #212529 !important; font-size: 1.3rem !important;"> | ||||
|  |                                 Recording Laundry Order. | ||||
|  |                             </p> | ||||
|  |                         </div> | ||||
|  | 
 | ||||
|  |                         <div class="d-flex deep-2" | ||||
|  |                             style="height: 60px !important; padding: 1rem 1.5rem !important; border-radius: 0 !important; margin: 1.5rem 0"> | ||||
|  |                             <img src="./images/checked.png" style="height: 24px !important; width: 24px !important;" | ||||
|  |                                 class="mt-1 mr-2" height="24px" width="24px"> | ||||
|  |                             <p style="color: #212529 !important; font-size: 1.3rem !important;"> | ||||
|  |                                 Make Invoices. | ||||
|  |                             </p> | ||||
|  |                         </div> | ||||
|  |                         <div class="d-flex deep-2" | ||||
|  |                             style="height: 60px !important; padding: 1rem 1.5rem !important; border-radius: 0 !important; margin: 1.5rem 0"> | ||||
|  |                             <img src="./images/checked.png" style="height: 24px !important; width: 24px !important;" | ||||
|  |                                 class="mt-1 mr-2" height="24px" width="24px"> | ||||
|  |                             <p style="color: #212529 !important; font-size: 1.3rem !important;"> | ||||
|  |                                 Billing Facility for Extra Works. | ||||
|  |                             </p> | ||||
|  |                         </div> | ||||
|  |                         <div class="d-flex deep-2" | ||||
|  |                             style="height: 60px !important; padding: 1rem 1.5rem !important; border-radius: 0 !important; margin: 1.5rem 0"> | ||||
|  |                             <img src="./images/checked.png" style="height: 24px !important; width: 24px !important;" | ||||
|  |                                 class="mt-1 mr-2" height="24px" width="24px"> | ||||
|  |                             <p style="color: #212529 !important; font-size: 1.3rem !important;"> | ||||
|  |                                 Detailed Laundry Work Analysis Report. | ||||
|  |                             </p> | ||||
|  |                         </div> | ||||
|  |                         <div class="d-flex deep-2" | ||||
|  |                             style="height: 60px !important; padding: 1rem 1.5rem !important; border-radius: 0 !important; margin: 1.5rem 0"> | ||||
|  |                             <img src="./images/checked.png" style="height: 24px !important; width: 24px !important;" | ||||
|  |                                 class="mt-1 mr-2" height="24px" width="24px"> | ||||
|  |                             <p style="color: #212529 !important; font-size: 1.3rem !important;"> | ||||
|  |                                 Configuration for Washing Type. | ||||
|  |                             </p> | ||||
|  |                         </div> | ||||
|  | 
 | ||||
|  |                     </div> | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |                     <div class="col-lg-6"> | ||||
|  | 
 | ||||
|  |                         <div class="d-flex deep-2" | ||||
|  |                             style="height: 60px !important; padding: 1rem 1.5rem !important; border-radius: 0 !important; margin: 1.5rem 0"> | ||||
|  |                             <img src="./images/checked.png" style="height: 24px !important; width: 24px !important;" | ||||
|  |                                 class="mt-1 mr-2" height="24px" width="24px"> | ||||
|  |                             <p style="color: #212529 !important; font-size: 1.3rem !important;"> | ||||
|  |                                 Assigning Works. | ||||
|  |                             </p> | ||||
|  |                         </div> | ||||
|  | 
 | ||||
|  |                         <div class="d-flex deep-2" | ||||
|  |                             style="height: 60px !important; padding: 1rem 1.5rem !important; border-radius: 0 !important; margin: 1.5rem 0"> | ||||
|  |                             <img src="./images/checked.png" style="height: 24px !important; width: 24px !important;" | ||||
|  |                                 class="mt-1 mr-2" height="24px" width="24px"> | ||||
|  |                             <p style="color: #212529 !important; font-size: 1.3rem !important;"> | ||||
|  |                                 Separate View for Works. | ||||
|  |                             </p> | ||||
|  |                         </div> | ||||
|  |                         <div class="d-flex deep-2" | ||||
|  |                             style="height: 60px !important; padding: 1rem 1.5rem !important; border-radius: 0 !important; margin: 1.5rem 0"> | ||||
|  |                             <img src="./images/checked.png" style="height: 24px !important; width: 24px !important;" | ||||
|  |                                 class="mt-1 mr-2" height="24px" width="24px"> | ||||
|  |                             <p style="color: #212529 !important; font-size: 1.3rem !important;"> | ||||
|  |                                 Label Printing for Every Order. | ||||
|  |                             </p> | ||||
|  |                         </div> | ||||
|  |                         <div class="d-flex deep-2" | ||||
|  |                             style="height: 60px !important; padding: 1rem 1.5rem !important; border-radius: 0 !important; margin: 1.5rem 0"> | ||||
|  |                             <img src="./images/checked.png" style="height: 24px !important; width: 24px !important;" | ||||
|  |                                 class="mt-1 mr-2" height="24px" width="24px"> | ||||
|  |                             <p style="color: #212529 !important; font-size: 1.3rem !important;"> | ||||
|  |                                 Access Rights From Multiple Level. | ||||
|  |                             </p> | ||||
|  |                         </div> | ||||
|  |                         <div class="d-flex deep-2" | ||||
|  |                             style="height: 60px !important; padding: 1rem 1.5rem !important; border-radius: 0 !important; margin: 1.5rem 0"> | ||||
|  |                             <img src="./images/checked.png" style="height: 24px !important; width: 24px !important;" | ||||
|  |                                 class="mt-1 mr-2" height="24px" width="24px"> | ||||
|  |                             <p style="color: #212529 !important; font-size: 1.3rem !important;"> | ||||
|  |                                 Config. for Extra Works (Ironing/Patching etc.) | ||||
|  |                             </p> | ||||
|  |                         </div> | ||||
|  | 
 | ||||
|  |                     </div> | ||||
|  | 
 | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  | 
 | ||||
|  |         <!-- END OF KEY FEATURES --> | ||||
|  | 
 | ||||
|  |         <!-- SCREENSHOTS --> | ||||
|  |         <div class="row"> | ||||
|  |             <div class="col-lg-12 d-flex flex-column justify-content-center" style="padding: 2.5rem 1rem !important;"> | ||||
|  |                 <h2 style="text-align: center;  color: #212529 !important;">Screenshots</h2> | ||||
|  |                 <hr | ||||
|  |                     style="border: 3px solid #AC1015 !important; background-color: #AC1015 !important; width: 80px !important; margin-bottom: 2rem !important;" /> | ||||
|  | 
 | ||||
|  |                 <!-- img --> | ||||
|  |                 <div class="d-flex m-0" style="border-bottom: 1px solid #e5e5e5 !important;"> | ||||
|  |                     <div class="mr-3"> | ||||
|  |                         <h3 | ||||
|  |                             style="font-size: 2rem !important; font-weight: 800 !important; color: #ffffff !important; background-color: #AC1015 !important; padding: 1rem !important; width: 70px !important;    height: 75px !important;"> | ||||
|  |                             01</h3> | ||||
|  |                     </div> | ||||
|  |                     <div> | ||||
|  |                         <h3 style="font-size: 1.7rem !important; font-weight: 600 !important;"> | ||||
|  |                             Recording Laundry Order | ||||
|  |                         </h3> | ||||
|  |                         <p | ||||
|  |                             style="color: #212529 !important; font-size: 1.3rem !important; font-weight: 300 !important;"> | ||||
|  | 
 | ||||
|  |                             Laundry Management -> Laundry Management -> Laundry Order<br /> | ||||
|  | 
 | ||||
|  |                             When you install this module, an extra menu Laundry Management will created in main | ||||
|  |                             menu. Youcan see the different sub menus under the main menu. Here you can create | ||||
|  |                             Laundry Order via clicking the 'Create' button. There you can specify the customer, | ||||
|  |                             laundry person, order lines with washing type and Extra works for your order.s | ||||
|  | 
 | ||||
|  |                         </p> | ||||
|  | 
 | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |                 <img src="./images/laundry1.png" class="img-responsive border" | ||||
|  |                     style="margin-top: -15px !important; margin-top: 1rem !important;  margin-bottom: 4rem !important;"> | ||||
|  | 
 | ||||
|  |                 <p style="color: #212529 !important; font-size: 1.3rem !important; font-weight: 300 !important;"> | ||||
|  |                     When you confirm the Laundry Order the corresponding works will created under the | ||||
|  |                     assigned person. There you can add extra products also. It will also add in Billing. | ||||
|  |                 </p> | ||||
|  | 
 | ||||
|  |                 <img src="./images/laundry2.png" class="img-responsive border" | ||||
|  |                     style="margin-top: -15px !important; margin-top: 1rem !important;  margin-bottom: 4rem !important;"> | ||||
|  |                 <img src="./images/laundry3.png" class="img-responsive border" | ||||
|  |                     style="margin-top: -15px !important; margin-top: 1rem !important;  margin-bottom: 4rem !important;"> | ||||
|  |                 <!-- endo of img --> | ||||
|  | 
 | ||||
|  |                 <!-- img --> | ||||
|  |                 <div class="d-flex m-0" style="border-bottom: 1px solid #e5e5e5 !important;"> | ||||
|  |                     <div class="mr-3"> | ||||
|  |                         <h3 | ||||
|  |                             style="font-size: 2rem !important; font-weight: 800 !important; color: #ffffff !important; background-color: #AC1015 !important; padding: 1rem !important; width: 70px !important;    height: 75px !important;"> | ||||
|  |                             02</h3> | ||||
|  |                     </div> | ||||
|  |                     <div> | ||||
|  |                         <h3 style="font-size: 1.7rem !important; font-weight: 600 !important;"> | ||||
|  |                             Laundry Label | ||||
|  |                         </h3> | ||||
|  |                         <p | ||||
|  |                             style="color: #212529 !important; font-size: 1.3rem !important; font-weight: 300 !important;"> | ||||
|  |                             You can print label for each order from the print menu | ||||
|  |                         </p> | ||||
|  | 
 | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |                 <img src="./images/laundry4.png" class="img-responsive border" | ||||
|  |                     style="margin-top: -15px !important; margin-top: 1rem !important;  margin-bottom: 4rem !important;"> | ||||
|  |                 <!-- endo of img --> | ||||
|  | 
 | ||||
|  |                 <!-- img --> | ||||
|  |                 <div class="d-flex m-0" style="border-bottom: 1px solid #e5e5e5 !important;"> | ||||
|  |                     <div class="mr-3"> | ||||
|  |                         <h3 | ||||
|  |                             style="font-size: 2rem !important; font-weight: 800 !important; color: #ffffff !important; background-color: #AC1015 !important; padding: 1rem !important; width: 70px !important;    height: 75px !important;"> | ||||
|  |                             03</h3> | ||||
|  |                     </div> | ||||
|  |                     <div> | ||||
|  |                         <h3 style="font-size: 1.7rem !important; font-weight: 600 !important;"> | ||||
|  |                             Laundry Works | ||||
|  |                         </h3> | ||||
|  |                         <p | ||||
|  |                             style="color: #212529 !important; font-size: 1.3rem !important; font-weight: 300 !important;"> | ||||
|  | 
 | ||||
|  |                             Laundry Management -> Laundry Management -> Laundry Works</br> | ||||
|  | 
 | ||||
|  |                             This is the Separate Laundry Works Form. Here you can see the work status of Laundry | ||||
|  |                             Works | ||||
|  |                         </p> | ||||
|  | 
 | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |                 <img src="./images/laundry5.png" class="img-responsive border" | ||||
|  |                     style="margin-top: -15px !important; margin-top: 1rem !important;  margin-bottom: 4rem !important;"> | ||||
|  |                 <p style="color: #212529 !important; font-size: 1.3rem !important; font-weight: 300 !important;"> | ||||
|  |                     If there is any extra works , it will created as work When you finish the main work. Then we can | ||||
|  |                     see the status of that order line is become 'Make Over' | ||||
|  |                 </p> | ||||
|  |                 <img src="./images/laundry6.png" class="img-responsive border" | ||||
|  |                     style="margin-top: -15px !important; margin-top: 1rem !important;  margin-bottom: 4rem !important;"> | ||||
|  |                 <!-- endo of img --> | ||||
|  | 
 | ||||
|  |                 <!-- img --> | ||||
|  |                 <div class="d-flex m-0" style="border-bottom: 1px solid #e5e5e5 !important;"> | ||||
|  |                     <div class="mr-3"> | ||||
|  |                         <h3 | ||||
|  |                             style="font-size: 2rem !important; font-weight: 800 !important; color: #ffffff !important; background-color: #AC1015 !important; padding: 1rem !important; width: 70px !important;    height: 75px !important;"> | ||||
|  |                             04</h3> | ||||
|  |                     </div> | ||||
|  |                     <div> | ||||
|  |                         <h3 style="font-size: 1.7rem !important; font-weight: 600 !important;"> | ||||
|  |                             Invoice | ||||
|  |                         </h3> | ||||
|  |                         <p | ||||
|  |                             style="color: #212529 !important; font-size: 1.3rem !important; font-weight: 300 !important;"> | ||||
|  |                             You can create Invoice via the button 'Create Invoice' when the order reaches to 'Done' | ||||
|  |                             state. | ||||
|  |                         </p> | ||||
|  | 
 | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |                 <img src="./images/laundry7.png" class="img-responsive border" | ||||
|  |                     style="margin-top: -15px !important; margin-top: 1rem !important;  margin-bottom: 4rem !important;"> | ||||
|  | 
 | ||||
|  |                 <p style="color: #212529 !important; font-size: 1.3rem !important; font-weight: 300 !important;"> | ||||
|  |                     You can see all the Invoice through the smart button "Invoices" from the Laundry Order form. | ||||
|  |                 </p> | ||||
|  | 
 | ||||
|  |                 <img src="./images/laundry8.png" class="img-responsive border" | ||||
|  |                     style="margin-top: -15px !important; margin-top: 1rem !important;  margin-bottom: 4rem !important;"> | ||||
|  |                 <!-- endo of img --> | ||||
|  | 
 | ||||
|  |                 <!-- img --> | ||||
|  |                 <div class="d-flex m-0" style="border-bottom: 1px solid #e5e5e5 !important;"> | ||||
|  |                     <div class="mr-3"> | ||||
|  |                         <h3 | ||||
|  |                             style="font-size: 2rem !important; font-weight: 800 !important; color: #ffffff !important; background-color: #AC1015 !important; padding: 1rem !important; width: 70px !important;    height: 75px !important;"> | ||||
|  |                             05</h3> | ||||
|  |                     </div> | ||||
|  |                     <div> | ||||
|  |                         <h3 style="font-size: 1.7rem !important; font-weight: 600 !important;"> | ||||
|  |                             Configuration | ||||
|  |                         </h3> | ||||
|  |                         <p | ||||
|  |                             style="color: #212529 !important; font-size: 1.3rem !important; font-weight: 300 !important;"> | ||||
|  | 
 | ||||
|  |                             You can configure washing types from the menu Laundry Management -> Configuration -> | ||||
|  |                             Washing Type by specifying the name, assigned person and service charge | ||||
|  |                         </p> | ||||
|  | 
 | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  |                 <img src="./images/laundry9.png" class="img-responsive border" | ||||
|  |                     style="margin-top: -15px !important; margin-top: 1rem !important;  margin-bottom: 4rem !important;"> | ||||
|  |                 <p style="color: #212529 !important; font-size: 1.3rem !important; font-weight: 300 !important;"> | ||||
|  | 
 | ||||
|  |                     You can configure additional works from the menu Laundry Management -> Configuration -> | ||||
|  |                     Additional Works by specifying the name, assigned person and service charge | ||||
|  |                 </p> | ||||
|  |                 <img src="./images/laundry10.png" class="img-responsive border" | ||||
|  |                     style="margin-top: -15px !important; margin-top: 1rem !important;  margin-bottom: 4rem !important;"> | ||||
|  |                 <!-- endo of img --> | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <!-- END OF SCREENSHOTS --> | ||||
|  | 
 | ||||
|  |         <!-- SUGGESTED PRODUCTS --> | ||||
|  |         <div class="row"> | ||||
|  |             <div class="col-lg-12 d-flex flex-column justify-content-center" | ||||
|  |                 style="text-align: center; padding: 2.5rem 1rem !important;"> | ||||
|  |                 <h2 style="color: #212529 !important;">Suggested Products</h2> | ||||
|  |                 <hr | ||||
|  |                     style="border: 3px solid #AC1015 !important; background-color: #AC1015 !important; width: 80px !important; margin-bottom: 2rem !important;" /> | ||||
|  | 
 | ||||
|  |                 <div id="demo1" class="row carousel slide" data-ride="carousel"> | ||||
|  |                     <!-- The slideshow --> | ||||
|  |                     <div class="carousel-inner"> | ||||
|  |                         <div class="carousel-item active" style="min-height:0px"> | ||||
|  |                             <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> | ||||
|  |                                 <a href="https://apps.odoo.com/apps/modules/14.0/export_stockinfo_xls/" target="_blank"> | ||||
|  |                                     <div style="border-radius:10px"> | ||||
|  |                                         <img class="img img-responsive center-block" | ||||
|  |                                             style="border-top-left-radius:10px; border-top-right-radius:10px" | ||||
|  |                                             src="./images/modules/export_image.png"> | ||||
|  |                                     </div> | ||||
|  |                                 </a> | ||||
|  |                             </div> | ||||
|  |                             <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> | ||||
|  |                                 <a href="https://apps.odoo.com/apps/modules/14.0/product_barcode/" target="_blank"> | ||||
|  |                                     <div style="border-radius:10px"> | ||||
|  |                                         <img class="img img-responsive center-block" | ||||
|  |                                             style="border-top-left-radius:10px; border-top-right-radius:10px" | ||||
|  |                                             src="./images/modules/barcode_image.png"> | ||||
|  |                                     </div> | ||||
|  |                                 </a> | ||||
|  |                             </div> | ||||
|  |                             <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> | ||||
|  |                                 <a href="https://apps.odoo.com/apps/modules/14.0/barcode_scanning_sale_purchase/" | ||||
|  |                                     target="_blank"> | ||||
|  |                                     <div style="border-radius:10px"> | ||||
|  |                                         <img class="img img-responsive center-block" | ||||
|  |                                             style="border-top-left-radius:10px; border-top-right-radius:10px" | ||||
|  |                                             src="./images/modules/barcode_scan_image.png"> | ||||
|  |                                     </div> | ||||
|  |                                 </a> | ||||
|  |                             </div> | ||||
|  |                         </div> | ||||
|  |                         <div class="carousel-item" style="min-height:0px"> | ||||
|  |                             <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> | ||||
|  |                                 <a href="https://apps.odoo.com/apps/modules/14.0/access_restriction_by_ip/" | ||||
|  |                                     target="_blank"> | ||||
|  |                                     <div style="border-radius:10px"> | ||||
|  |                                         <img class="img img-responsive center-block" | ||||
|  |                                             style="border-top-left-radius:10px; border-top-right-radius:10px" | ||||
|  |                                             src="./images/modules/ip_image.png"> | ||||
|  |                                     </div> | ||||
|  |                                 </a> | ||||
|  |                             </div> | ||||
|  |                             <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> | ||||
|  |                                 <a href="https://apps.odoo.com/apps/modules/14.0/account_payment_approval/" | ||||
|  |                                     target="_blank"> | ||||
|  |                                     <div style="border-radius:10px"> | ||||
|  |                                         <img class="img img-responsive center-block" | ||||
|  |                                             style="border-top-left-radius:10px; border-top-right-radius:10px" | ||||
|  |                                             src="./images/modules/payment_image.png"> | ||||
|  |                                     </div> | ||||
|  |                                 </a> | ||||
|  |                             </div> | ||||
|  |                             <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> | ||||
|  |                                 <a href="https://apps.odoo.com/apps/modules/14.0/hide_menu_user/" target="_blank"> | ||||
|  |                                     <div style="border-radius:10px"> | ||||
|  |                                         <img class="img img-responsive center-block" | ||||
|  |                                             style="border-top-left-radius:10px; border-top-right-radius:10px" | ||||
|  |                                             src="./images/modules/hide_image.png"> | ||||
|  |                                     </div> | ||||
|  |                                 </a> | ||||
|  |                             </div> | ||||
|  |                         </div> | ||||
|  |                     </div> | ||||
|  |                     <!-- Left and right controls --> | ||||
|  |                     <a class="carousel-control-prev" href="#demo1" data-slide="prev" | ||||
|  |                         style="left:-25px;width: 35px;color: #000;"> <span class="carousel-control-prev-icon"><i | ||||
|  |                                 class="fa fa-chevron-left" style="font-size:24px"></i></span> </a> <a | ||||
|  |                         class="carousel-control-next" href="#demo1" data-slide="next" | ||||
|  |                         style="right:-25px;width: 35px;color: #000;"> | ||||
|  |                         <span class="carousel-control-next-icon"><i class="fa fa-chevron-right" | ||||
|  |                                 style="font-size:24px"></i></span> | ||||
|  |                     </a> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  |         </div> | ||||
|  |         <!-- END OF SUGGESTED PRODUCTS --> | ||||
|  | 
 | ||||
|  |         <!-- OUR SERVICES --> | ||||
|  |         <section class="container" style="margin-top: 6rem !important;"> | ||||
|  |             <div class="row"> | ||||
|  |                 <div class="col-lg-12 d-flex flex-column justify-content-center align-items-center"> | ||||
|  |                     <h2 style="color: #212529 !important;">Our Services</h2> | ||||
|  |                     <hr | ||||
|  |                         style="border: 3px solid #AC1015 !important; background-color: #AC1015 !important; width: 80px !important; margin-bottom: 2rem !important;" /> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  |                 <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | ||||
|  |                     <div class="d-flex justify-content-center align-items-center mx-3 my-3" | ||||
|  |                         style="background-color: #1dd1a1 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | ||||
|  |                         <img src="assets/icons/cogs.png" class="img-responsive" height="48px" width="48px"> | ||||
|  |                     </div> | ||||
|  |                     <h6 class="text-center" | ||||
|  |                         style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo | ||||
|  |                         Customization</h6> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  |                 <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | ||||
|  |                     <div class="d-flex justify-content-center align-items-center mx-3 my-3" | ||||
|  |                         style="background-color: #ff6b6b !important; border-radius: 15px !important; height: 80px; width: 80px;"> | ||||
|  |                         <img src="assets/icons/wrench.png" class="img-responsive" height="48px" width="48px"> | ||||
|  |                     </div> | ||||
|  |                     <h6 class="text-center" | ||||
|  |                         style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo | ||||
|  |                         Implementation</h6> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  |                 <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | ||||
|  |                     <div class="d-flex justify-content-center align-items-center mx-3 my-3" | ||||
|  |                         style="background-color: #6462CD !important; border-radius: 15px !important; height: 80px; width: 80px;"> | ||||
|  |                         <img src="assets/icons/lifebuoy.png" class="img-responsive" height="48px" width="48px"> | ||||
|  |                     </div> | ||||
|  |                     <h6 class="text-center" | ||||
|  |                         style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo | ||||
|  |                         Support</h6> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |                 <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | ||||
|  |                     <div class="d-flex justify-content-center align-items-center mx-3 my-3" | ||||
|  |                         style="background-color: #ffa801 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | ||||
|  |                         <img src="assets/icons/user.png" class="img-responsive" height="48px" width="48px"> | ||||
|  |                     </div> | ||||
|  |                     <h6 class="text-center" | ||||
|  |                         style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Hire | ||||
|  |                         Odoo | ||||
|  |                         Developer</h6> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  |                 <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | ||||
|  |                     <div class="d-flex justify-content-center align-items-center mx-3 my-3" | ||||
|  |                         style="background-color: #54a0ff  !important; border-radius: 15px !important; height: 80px; width: 80px;"> | ||||
|  |                         <img src="assets/icons/puzzle.png" class="img-responsive" height="48px" width="48px"> | ||||
|  |                     </div> | ||||
|  |                     <h6 class="text-center" | ||||
|  |                         style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo | ||||
|  |                         Integration</h6> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  |                 <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | ||||
|  |                     <div class="d-flex justify-content-center align-items-center mx-3 my-3" | ||||
|  |                         style="background-color: #6d7680 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | ||||
|  |                         <img src="assets/icons/update.png" class="img-responsive" height="48px" width="48px"> | ||||
|  |                     </div> | ||||
|  |                     <h6 class="text-center" | ||||
|  |                         style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo | ||||
|  |                         Migration</h6> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |                 <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | ||||
|  |                     <div class="d-flex justify-content-center align-items-center mx-3 my-3" | ||||
|  |                         style="background-color: #786fa6 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | ||||
|  |                         <img src="assets/icons/consultation.png" class="img-responsive" height="48px" width="48px"> | ||||
|  |                     </div> | ||||
|  |                     <h6 class="text-center" | ||||
|  |                         style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo | ||||
|  |                         Consultancy</h6> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  |                 <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | ||||
|  |                     <div class="d-flex justify-content-center align-items-center mx-3 my-3" | ||||
|  |                         style="background-color: #f8a5c2 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | ||||
|  |                         <img src="assets/icons/training.png" class="img-responsive" height="48px" width="48px"> | ||||
|  |                     </div> | ||||
|  |                     <h6 class="text-center" | ||||
|  |                         style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo | ||||
|  |                         Implementation</h6> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  |                 <div class="col-lg-4 d-flex flex-column justify-content-center align-items-center my-4"> | ||||
|  |                     <div class="d-flex justify-content-center align-items-center mx-3 my-3" | ||||
|  |                         style="background-color: #e6be26 !important; border-radius: 15px !important; height: 80px; width: 80px;"> | ||||
|  |                         <img src="assets/icons/license.png" class="img-responsive" height="48px" width="48px"> | ||||
|  |                     </div> | ||||
|  |                     <h6 class="text-center" | ||||
|  |                         style="font-family: Montserrat, 'sans-serif' !important; font-weight: bold;">Odoo | ||||
|  |                         Licensing Consultancy</h6> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  |         </section> | ||||
|  |         <!-- END OF END OF OUR SERVICES --> | ||||
|  | 
 | ||||
|  |         <!-- OUR INDUSTRIES --> | ||||
|  |         <section class="container" style="margin-top: 6rem !important;"> | ||||
|  |             <div class="row"> | ||||
|  |                 <div class="col-lg-12 d-flex flex-column justify-content-center align-items-center"> | ||||
|  |                     <h2 style="color: #212529 !important;">Our Industries</h2> | ||||
|  |                     <hr | ||||
|  |                         style="border: 3px solid #AC1015 !important; background-color: #AC1015 !important; width: 80px !important; margin-bottom: 2rem !important;" /> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  |                 <div class="col-lg-3"> | ||||
|  |                     <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                         style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                         <img src="./assets/icons/trading-black.png" class="img-responsive mb-3" height="48px" | ||||
|  |                             width="48px"> | ||||
|  |                         <h5 | ||||
|  |                             style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                             Trading | ||||
|  |                         </h5> | ||||
|  |                         <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                             Easily procure | ||||
|  |                             and | ||||
|  |                             sell your products</p> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  |                 <div class="col-lg-3"> | ||||
|  |                     <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                         style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                         <img src="./assets/icons/pos-black.png" class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |                         <h5 | ||||
|  |                             style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                             POS | ||||
|  |                         </h5> | ||||
|  |                         <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                             Easy | ||||
|  |                             configuration | ||||
|  |                             and convivial experience</p> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  |                 <div class="col-lg-3"> | ||||
|  |                     <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                         style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                         <img src="./assets/icons/education-black.png" class="img-responsive mb-3" height="48px" | ||||
|  |                             width="48px"> | ||||
|  |                         <h5 | ||||
|  |                             style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                             Education | ||||
|  |                         </h5> | ||||
|  |                         <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                             A platform for | ||||
|  |                             educational management</p> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  |                 <div class="col-lg-3"> | ||||
|  |                     <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                         style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                         <img src="./assets/icons/manufacturing-black.png" class="img-responsive mb-3" height="48px" | ||||
|  |                             width="48px"> | ||||
|  |                         <h5 | ||||
|  |                             style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                             Manufacturing | ||||
|  |                         </h5> | ||||
|  |                         <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                             Plan, track and | ||||
|  |                             schedule your operations</p> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  |                 <div class="col-lg-3"> | ||||
|  |                     <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                         style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                         <img src="./assets/icons/ecom-black.png" class="img-responsive mb-3" height="48px" width="48px"> | ||||
|  |                         <h5 | ||||
|  |                             style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                             E-commerce & Website | ||||
|  |                         </h5> | ||||
|  |                         <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                             Mobile | ||||
|  |                             friendly, | ||||
|  |                             awe-inspiring product pages</p> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  |                 <div class="col-lg-3"> | ||||
|  |                     <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                         style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                         <img src="./assets/icons/service-black.png" class="img-responsive mb-3" height="48px" | ||||
|  |                             width="48px"> | ||||
|  |                         <h5 | ||||
|  |                             style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                             Service Management | ||||
|  |                         </h5> | ||||
|  |                         <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                             Keep track of | ||||
|  |                             services and invoice</p> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  |                 <div class="col-lg-3"> | ||||
|  |                     <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                         style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                         <img src="./assets/icons/restaurant-black.png" class="img-responsive mb-3" height="48px" | ||||
|  |                             width="48px"> | ||||
|  |                         <h5 | ||||
|  |                             style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                             Restaurant | ||||
|  |                         </h5> | ||||
|  |                         <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                             Run your bar or | ||||
|  |                             restaurant methodically</p> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  |                 <div class="col-lg-3"> | ||||
|  |                     <div class="my-4 d-flex flex-column justify-content-center" | ||||
|  |                         style="background-color: #f6f8f9 !important; border-radius: 10px; padding: 2rem !important; height: 250px !important;"> | ||||
|  |                         <img src="./assets/icons/hotel-black.png" class="img-responsive mb-3" height="48px" | ||||
|  |                             width="48px"> | ||||
|  |                         <h5 | ||||
|  |                             style="font-family: Montserrat, sans-serif !important; color: #000 !important; font-weight: bold;"> | ||||
|  |                             Hotel Management | ||||
|  |                         </h5> | ||||
|  |                         <p style="font-family: Montserrat, sans-serif !important; font-size: 0.9rem !important;"> | ||||
|  |                             An | ||||
|  |                             all-inclusive | ||||
|  |                             hotel management application</p> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  |             </div> | ||||
|  |         </section> | ||||
|  | 
 | ||||
|  |         <!-- END OF END OF OUR INDUSTRIES --> | ||||
|  | 
 | ||||
|  |         <!-- FOOTER --> | ||||
|  |         <!-- Footer Section --> | ||||
|  |         <section class="container" style="margin: 5rem auto 2rem;"> | ||||
|  |             <div class="row" style="max-width:1540px;"> | ||||
|  |                 <div class="col-lg-12 d-flex flex-column justify-content-center align-items-center"> | ||||
|  |                     <h2 style="color: #212529 !important;">Need Help?</h2> | ||||
|  |                     <hr | ||||
|  |                         style="border: 3px solid #AC1015 !important; background-color: #AC1015 !important; width: 80px !important; margin-bottom: 2rem !important;" /> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  | 
 | ||||
|  |             <!-- Contact Cards --> | ||||
|  |             <div class="row d-flex justify-content-center align-items-center" | ||||
|  |                 style="max-width:1540px; margin: 0 auto 2rem auto;"> | ||||
|  | 
 | ||||
|  |                 <div class="col-lg-12" style="padding: 0rem 3rem 2rem; border-radius: 10px; margin-right: 3rem; "> | ||||
|  | 
 | ||||
|  |                     <div class="row mt-4"> | ||||
|  |                         <div class="col-lg-6"> | ||||
|  |                             <a href="mailto:odoo@cybrosys.com" target="_blank" class="btn btn-block mb-2 deep_hover" | ||||
|  |                                 style="text-decoration: none;  background-color: #4d4d4d; color: #FFF;  border-radius: 4px;"><i | ||||
|  |                                     class="fa fa-envelope mr-2"></i>odoo@cybrosys.com</a> | ||||
|  |                         </div> | ||||
|  |                         <div class="col-lg-6"> | ||||
|  |                             <a href="https://api.whatsapp.com/send?phone=918606827707" target="_blank" | ||||
|  |                                 class="btn btn-block mb-2 deep_hover" | ||||
|  |                                 style="text-decoration: none;  background-color: #25D366; color: #FFF;  border-radius: 4px;"><i | ||||
|  |                                     class="fa fa-whatsapp mr-2"></i>WhatsApp</a> | ||||
|  |                         </div> | ||||
|  |                     </div> | ||||
|  |                 </div> | ||||
|  | 
 | ||||
|  |             </div> | ||||
|  |             <!-- End of Contact Cards --> | ||||
|  |         </section> | ||||
|  |         <!-- Footer --> | ||||
|  |         <section class="oe_container" style="padding: 2rem 3rem 1rem;"> | ||||
|  |             <div class="row" style="max-width:1540px; margin: 0 auto; margin-right: 3rem; "> | ||||
|  |                 <!-- Logo --> | ||||
|  |                 <div class="col-lg-12 d-flex justify-content-center align-items-center" style="margin-top: 3rem;"> | ||||
|  |                     <img src="https://www.cybrosys.com/images/logo.png" width="200px" height="auto" /> | ||||
|  |                 </div> | ||||
|  |                 <!-- End of Logo --> | ||||
|  |                 <div class="col-lg-12"> | ||||
|  |                     <hr | ||||
|  |                         style="margin-top: 3rem;background: linear-gradient(90deg, rgba(2,0,36,0) 0%, rgba(229,229,229,1) 33%, rgba(229,229,229,1) 58%, rgba(0,212,255,0) 100%); height: 2px; border-style: none;"> | ||||
|  |                     <!-- End of Footer Section --> | ||||
|  |                 </div> | ||||
|  |             </div> | ||||
|  |         </section> | ||||
|  |         <!-- END OF FOOTER --> | ||||
|  |     </div> | ||||
|  | </div> | ||||
| @ -0,0 +1,90 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8" ?> | ||||
|  | <odoo> | ||||
|  |     <data> | ||||
|  | 
 | ||||
|  |         <record id="washing_type_form_view" model="ir.ui.view"> | ||||
|  |             <field name="name">washing.type.form</field> | ||||
|  |             <field name="model">washing.type</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <form> | ||||
|  |                     <sheet> | ||||
|  |                         <group> | ||||
|  |                             <group> | ||||
|  |                                 <field name="name"/> | ||||
|  |                                 <field name="assigned_person"/> | ||||
|  |                             </group> | ||||
|  |                             <group> | ||||
|  |                                 <field name="amount"/> | ||||
|  |                             </group> | ||||
|  |                         </group> | ||||
|  |                     </sheet> | ||||
|  |                 </form> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record id="washing_type_tree_view" model="ir.ui.view"> | ||||
|  |             <field name="name">washing.type.tree</field> | ||||
|  |             <field name="model">washing.type</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <tree> | ||||
|  |                     <field name="name"/> | ||||
|  |                     <field name="assigned_person"/> | ||||
|  |                     <field name="amount"/> | ||||
|  |                 </tree> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record id="action_washing_type" model="ir.actions.act_window"> | ||||
|  |             <field name="name">Washing Type</field> | ||||
|  |             <field name="type">ir.actions.act_window</field> | ||||
|  |             <field name="res_model">washing.type</field> | ||||
|  |             <field name="view_mode">tree,form</field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record id="washing_work_form_view" model="ir.ui.view"> | ||||
|  |             <field name="name">washing.work.form</field> | ||||
|  |             <field name="model">washing.work</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <form> | ||||
|  |                     <sheet> | ||||
|  |                         <group> | ||||
|  |                             <group> | ||||
|  |                                 <field name="name"/> | ||||
|  |                                 <field name="assigned_person"/> | ||||
|  |                             </group> | ||||
|  |                             <group> | ||||
|  |                                 <field name="amount"/> | ||||
|  |                             </group> | ||||
|  |                         </group> | ||||
|  |                     </sheet> | ||||
|  |                 </form> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record id="washing_work_tree_view" model="ir.ui.view"> | ||||
|  |             <field name="name">washing.work.tree</field> | ||||
|  |             <field name="model">washing.work</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <tree> | ||||
|  |                     <field name="name"/> | ||||
|  |                     <field name="assigned_person"/> | ||||
|  |                     <field name="amount"/> | ||||
|  |                 </tree> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record id="action_washing_work" model="ir.actions.act_window"> | ||||
|  |             <field name="name">Additional Works</field> | ||||
|  |             <field name="type">ir.actions.act_window</field> | ||||
|  |             <field name="res_model">washing.work</field> | ||||
|  |             <field name="view_mode">tree,form</field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <menuitem id="laundry_config_menu" name="Configuration" parent="laundry_management_menu" sequence="3"/> | ||||
|  |         <menuitem id="laundry_customer" name="Customers" parent="laundry_config_menu" action="base.action_partner_customer_form" sequence="1"/> | ||||
|  |         <menuitem id="laundry_products" name="Products" parent="laundry_config_menu" action="product.product_normal_action_sell" sequence="2"/> | ||||
|  |         <menuitem id="laundry_washing_type" name="Washing Type" parent="laundry_config_menu" action="action_washing_type" sequence="3"/> | ||||
|  |         <menuitem id="laundry_washing_work" name="Additional Works" parent="laundry_config_menu" action="action_washing_work" sequence="4"/> | ||||
|  | 
 | ||||
|  |     </data> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,47 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8" ?> | ||||
|  | <odoo> | ||||
|  |     <data> | ||||
|  | 
 | ||||
|  |         <template id="laundry_order_label"> | ||||
|  |             <t t-call="web.html_container"> | ||||
|  |                 <t t-foreach="docs" t-as="obj"> | ||||
|  |                         <t t-call="web.external_layout"> | ||||
|  |                             <div class="page"> | ||||
|  |                                 <div class="col-xs-4" style="padding:0;"> | ||||
|  |                                     <table style="border: 2px solid black;border-spacing:0;margin-bottom:0;height:122px;" class="table"> | ||||
|  |                                         <tbody> | ||||
|  |                                             <tr> | ||||
|  |                                                 <th style="text-align: left; vertical-align: middle;" colspan="2"> | ||||
|  |                                                     <span t-esc="obj.name"/> | ||||
|  |                                                 </th> | ||||
|  |                                                 <th style="text-align: right; vertical-align: middle;" colspan="2"> | ||||
|  |                                                     <span t-esc="obj.order_date"/> | ||||
|  |                                                 </th> | ||||
|  |                                             </tr> | ||||
|  |                                             <tr> | ||||
|  |                                                 <td style="border: 2px solid black;text-align: center; vertical-align: middle;" colspan="2"> | ||||
|  |                                                     <span>CUSTOMER</span> | ||||
|  |                                                 </td> | ||||
|  |                                                 <td style="border: 2px solid black;text-align: center; vertical-align: middle;" colspan="2"> | ||||
|  |                                                     <span t-esc="obj.partner_id.name"/> | ||||
|  |                                                 </td> | ||||
|  |                                             </tr> | ||||
|  |                                         </tbody> | ||||
|  |                                     </table> | ||||
|  |                                 </div> | ||||
|  |                             </div> | ||||
|  |                         </t> | ||||
|  |                     </t> | ||||
|  |                 </t> | ||||
|  |         </template> | ||||
|  | 
 | ||||
|  |         <report | ||||
|  |             string="Laundry Order Label" | ||||
|  |             id="laundry_label" | ||||
|  |             model="laundry.order" | ||||
|  |             report_type="qweb-pdf" | ||||
|  |             name="laundry_management.laundry_order_label" | ||||
|  |             file="laundry_management.laundry_order_label"/> | ||||
|  | 
 | ||||
|  |     </data> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,27 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8" ?> | ||||
|  | <odoo> | ||||
|  |     <data> | ||||
|  | 
 | ||||
|  |          <record id="view_report_laundry_order" model="ir.ui.view"> | ||||
|  |             <field name="name">report.laundry.order.pivot</field> | ||||
|  |             <field name="model">report.laundry.order</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <pivot string="Laundry Order Analysis" display_quantity="true" disable_linking="True"> | ||||
|  |                      <field name="name" type="row"/> | ||||
|  |                  </pivot> | ||||
|  |              </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record id="action_laundry_order_analysis" model="ir.actions.act_window"> | ||||
|  |             <field name="name">Laundry Order Analysis</field> | ||||
|  |             <field name="res_model">report.laundry.order</field> | ||||
|  |             <field name="view_mode">pivot</field> | ||||
|  |             <field name="context">{'group_by_no_leaf':1,'group_by':[]}</field> | ||||
|  |             <field name="help">This report allows you to analyse the performance of your Laundry Mangement. </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <menuitem id="laundry_report_menu" name="Report" parent="laundry_management_menu" sequence="2"/> | ||||
|  |         <menuitem name="Laundry Order Analysis" action="action_laundry_order_analysis" id="menu_laundry_order_analysis" parent="laundry_report_menu" sequence="1"/> | ||||
|  | 
 | ||||
|  |     </data> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,122 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8" ?> | ||||
|  | <odoo> | ||||
|  |     <data> | ||||
|  | 
 | ||||
|  |                 <record id="sequence_laundry" model="ir.sequence"> | ||||
|  |                     <field name="name">Laundry Order Code</field> | ||||
|  |                     <field name="code">laundry.order</field> | ||||
|  |                     <field eval="4" name="padding" /> | ||||
|  |                     <field name="prefix">LO</field> | ||||
|  |                 </record> | ||||
|  | 
 | ||||
|  |                 <record id="laundry_order_form_view" model="ir.ui.view"> | ||||
|  |                     <field name="name">laundry.order.form</field> | ||||
|  |                     <field name="model">laundry.order</field> | ||||
|  |                     <field name="arch" type="xml"> | ||||
|  |                         <form string="Laundry Order" class="o_sale_order"> | ||||
|  |                         <header> | ||||
|  |                             <button name="confirm_order" class="oe_highlight" string="Confirm Order" type="object" states="draft"/> | ||||
|  |                             <button name="create_invoice" class="oe_highlight" string="Create Invoice" type="object" | ||||
|  |                             attrs="{'invisible': ['|',('invoice_status', '=', 'invoiced'), ('state', '!=', 'done')]}"/> | ||||
|  |                             <button name="return_dress" string="Return" class="oe_highlight" type="object" states="done"/> | ||||
|  |                             <button name="cancel_order" string="Cancel" type="object" states="draft"/> | ||||
|  |                             <field name="state" widget="statusbar" statusbar_visible="draft,order,done,return"/> | ||||
|  |                         </header> | ||||
|  |                         <sheet> | ||||
|  |                             <div class="oe_button_box" name="buttons"> | ||||
|  |                                 <button name='action_view_laundry_works' class="oe_stat_button" type="object" icon="fa-money" states="order,done,return,process"> | ||||
|  |                                     <field string="Works" name="work_count" widget="statinfo" /> | ||||
|  |                                 </button> | ||||
|  |                                 <button name='action_view_invoice' class="oe_stat_button" type="object" icon="fa-money" states="done,return"> | ||||
|  |                                     <field string="Invoice" name="invoice_count" widget="statinfo" /> | ||||
|  |                                 </button> | ||||
|  |                             </div> | ||||
|  |                             <div class="oe_title"> | ||||
|  |                                 <h1> | ||||
|  |                                     <field name="name" readonly="1"/> | ||||
|  |                                 </h1> | ||||
|  |                             </div> | ||||
|  |                             <group> | ||||
|  |                                 <group> | ||||
|  |                                     <field name="partner_id"/> | ||||
|  |                                     <field name="partner_invoice_id" context="{'default_type':'invoice'}" | ||||
|  |                                            attrs="{'readonly': [('state','in',('done','return','cancel'))]}"/> | ||||
|  |                                     <field name="partner_shipping_id" context="{'default_type':'delivery'}" | ||||
|  |                                            attrs="{'readonly': [('state','in',('done','return','cancel'))]}"/> | ||||
|  |                                 </group> | ||||
|  |                                 <group> | ||||
|  |                                     <field name="order_date" attrs="{'readonly': [('state','!=','draft')]}"/> | ||||
|  |                                     <field name="currency_id" attrs="{'readonly': [('state','!=','draft')]}"/> | ||||
|  |                                     <field name="laundry_person" attrs="{'readonly': [('state','in',('return', 'cancel'))]}"/> | ||||
|  |                                     <field name="invoice_status" invisible="1"/> | ||||
|  |                                     <field name="sale_obj" invisible="1"/> | ||||
|  |                                 </group> | ||||
|  |                             </group> | ||||
|  |                             <notebook> | ||||
|  |                                 <page string="Order Lines"> | ||||
|  |                                     <field name="order_lines" attrs="{'readonly': [('state','!=','draft')]}"> | ||||
|  |                                         <tree string="Laundry Order Lines" editable="bottom" decoration-info="state == 'draft'" | ||||
|  |                                               colors="grey:state == 'done';black:state == 'extra_work';green:state == 'wash';"> | ||||
|  |                                             <field name="product_id"/> | ||||
|  |                                             <field name="description"/> | ||||
|  |                                             <field name="qty"/> | ||||
|  |                                             <field name="washing_type"/> | ||||
|  |                                             <field name="extra_work" widget="many2many_tags"/> | ||||
|  |                                             <field name="state"/> | ||||
|  |                                             <field name="amount"/> | ||||
|  |                                         </tree> | ||||
|  |                                     </field> | ||||
|  |                                     <group class="oe_subtotal_footer oe_right" colspan="2" name="laundry_total"> | ||||
|  |                                         <field name="total_amount" widget='monetary' options="{'currency_field': 'currency_id'}"/> | ||||
|  |                                     </group> | ||||
|  |                                     <field name="note" class="oe_inline" placeholder="Setup default terms and conditions in your company settings."/> | ||||
|  |                                     <div class="oe_clear"/> | ||||
|  |                                 </page> | ||||
|  |                             </notebook> | ||||
|  |                         </sheet> | ||||
|  |                         <div class="oe_chatter"> | ||||
|  |                             <field name="message_follower_ids" widget="mail_followers"/> | ||||
|  |                             <field name="message_ids" widget="mail_thread"/> | ||||
|  |                         </div> | ||||
|  |                         </form> | ||||
|  |                     </field> | ||||
|  |                 </record> | ||||
|  | 
 | ||||
|  |                 <record id="laundry_order_tree_view" model="ir.ui.view"> | ||||
|  |                     <field name="name">laundry.order.tree</field> | ||||
|  |                     <field name="model">laundry.order</field> | ||||
|  |                     <field name="arch" type="xml"> | ||||
|  |                         <tree decoration-info="state == 'draft'"> | ||||
|  |                             <field name="name"/> | ||||
|  |                             <field name="partner_id"/> | ||||
|  |                             <field name="order_date"/> | ||||
|  |                             <field name="laundry_person"/> | ||||
|  |                             <field name="total_amount"/> | ||||
|  |                             <field name="state"/> | ||||
|  |                         </tree> | ||||
|  |                     </field> | ||||
|  |                 </record> | ||||
|  | 
 | ||||
|  |                 <record id="action_laundry_order" model="ir.actions.act_window"> | ||||
|  |                     <field name="name">Laundry Management</field> | ||||
|  |                     <field name="type">ir.actions.act_window</field> | ||||
|  |                     <field name="res_model">laundry.order</field> | ||||
|  |                     <field name="view_mode">tree,form</field> | ||||
|  |                     <field name="domain">[]</field> | ||||
|  |                     <field name="help" type="html"> | ||||
|  |                         <p class="oe_view_nocontent_create"> | ||||
|  |                             Click to create a New Order. | ||||
|  |                         </p> | ||||
|  |                     </field> | ||||
|  |                 </record> | ||||
|  | 
 | ||||
|  |         <menuitem name="Laundry Management" id="laundry_management_menu" | ||||
|  |                   /> | ||||
|  |         <menuitem id="laundry_management_sub_menu" name="Laundry Management" | ||||
|  |                   parent="laundry_management_menu" sequence="1"/> | ||||
|  |         <menuitem id="laundry_management_order" name="Laundry Order" | ||||
|  |                   parent="laundry_management_sub_menu" | ||||
|  |                   action="action_laundry_order" sequence="1"/> | ||||
|  | 
 | ||||
|  |     </data> | ||||
|  | </odoo> | ||||
| @ -0,0 +1,77 @@ | |||||
|  | <?xml version="1.0" encoding="utf-8" ?> | ||||
|  | <odoo> | ||||
|  |     <data> | ||||
|  | 
 | ||||
|  |         <record id="washing_form_view" model="ir.ui.view"> | ||||
|  |             <field name="name">washing.washing.form</field> | ||||
|  |             <field name="model">washing.washing</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <form string="Washing" create="false"> | ||||
|  |                     <header> | ||||
|  |                         <button name="start_wash" class="oe_highlight" string="Start" type="object" states="draft"/> | ||||
|  |                         <button name="set_to_done" class="oe_highlight" string="Set to Done" type="object" states="process"/> | ||||
|  |                         <field name="state" widget="statusbar" statusbar_visible="draft,process,done"/> | ||||
|  |                     </header> | ||||
|  |                     <sheet> | ||||
|  |                         <group> | ||||
|  |                             <group> | ||||
|  |                                 <field name="name" readonly="1"/> | ||||
|  |                                 <field name="user_id"/> | ||||
|  |                             </group> | ||||
|  |                             <group> | ||||
|  |                                 <field name="washing_date" readonly="1"/> | ||||
|  |                             </group> | ||||
|  |                         </group> | ||||
|  |                         <notebook> | ||||
|  |                             <page string="Description"> | ||||
|  |                                 <field name="description"/> | ||||
|  |                             </page> | ||||
|  |                             <page string="Additional Products"> | ||||
|  |                                 <field name="product_line" attrs="{'readonly': [('state','!=','draft')]}"> | ||||
|  |                                     <tree editable="bottom"> | ||||
|  |                                         <field name="product_id"/> | ||||
|  |                                         <field name="name"/> | ||||
|  |                                         <field name="quantity"/> | ||||
|  |                                         <field name="uom_id"/> | ||||
|  |                                         <field name="price_unit"/> | ||||
|  |                                         <field name="subtotal"/> | ||||
|  |                                         <field name="wash_obj" invisible="1"/> | ||||
|  |                                     </tree> | ||||
|  |                                 </field> | ||||
|  |                                 <group class="oe_subtotal_footer oe_right" colspan="2" name="product_total"> | ||||
|  |                                 <field name="total_amount" widget='monetary'/> | ||||
|  |                                 </group> | ||||
|  |                                 <div class="oe_clear"/> | ||||
|  |                             </page> | ||||
|  |                         </notebook> | ||||
|  |                     </sheet> | ||||
|  |                 </form> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  | 
 | ||||
|  |         <record id="washing_tree_view" model="ir.ui.view"> | ||||
|  |             <field name="name">washing.washing.tree</field> | ||||
|  |             <field name="model">washing.washing</field> | ||||
|  |             <field name="arch" type="xml"> | ||||
|  |                 <tree create="false" edit="false" decoration-info="state == 'draft'"> | ||||
|  |                     <field name="name"/> | ||||
|  |                     <field name="user_id"/> | ||||
|  |                     <field name="washing_date"/> | ||||
|  |                     <field name="state"/> | ||||
|  |                 </tree> | ||||
|  |             </field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <record id="action_washing" model="ir.actions.act_window"> | ||||
|  |             <field name="name">Washing</field> | ||||
|  |             <field name="type">ir.actions.act_window</field> | ||||
|  |             <field name="res_model">washing.washing</field> | ||||
|  |             <field name="view_mode">tree,form</field> | ||||
|  |             <field name="domain">[('user_id','=', uid)]</field> | ||||
|  |         </record> | ||||
|  | 
 | ||||
|  |         <menuitem id="laundry_washing" name="Laundry Works" parent="laundry_management_sub_menu" action="action_washing" sequence="2"/> | ||||
|  | 
 | ||||
|  |     </data> | ||||
|  | </odoo> | ||||