| @ -0,0 +1,46 @@ | |||
| .. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg | |||
|     :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html | |||
|     :alt: License: AGPL-3 | |||
| 
 | |||
| Odoo Professional Report Templates | |||
| ================================== | |||
| Change design of report of sale order, purchase order, invoice and stock | |||
| 
 | |||
| Configuration | |||
| ============= | |||
| * No additional configurations needed | |||
| 
 | |||
| License | |||
| ------- | |||
| General Public License, Version 3 (AGPL v3). | |||
| (https://www.gnu.org/licenses/agpl-3.0-standalone.html) | |||
| 
 | |||
| Company | |||
| ------- | |||
| * `Cybrosys Techno Solutions <https://cybrosys.com/>`__ | |||
| 
 | |||
| Credits | |||
| ------- | |||
| * Developer: (V14) Ammu Raj, Contact: odoo@cybrosys.com | |||
| 
 | |||
| 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,22 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Ammu Raj (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 model | |||
| @ -0,0 +1,74 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Ammu Raj (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': 'Odoo Professional Report Templates', | |||
|     'version': '14.0.1.0.0', | |||
|     'category': 'Sales,Purchases,Accounting,Warehouse', | |||
|     'summary': "Change design of report of sale order, purchase order, " | |||
|                "invoice and stock", | |||
|     'description': "To tailor the presentation of different reports such as" | |||
|                    "Sales Orders, Purchase Orders, Invoices, and Delivery" | |||
|                    "Orders, the process involves customizing the report" | |||
|                    "templates , especially for PDF reports. By doing so,you can" | |||
|                    "personalize the design,content of these reports to better" | |||
|                    "suit your business needs and preferences", | |||
|     'author': 'Cybrosys Techno Solutions', | |||
|     'company': 'Cybrosys Techno Solutions', | |||
|     'maintainer': 'Cybrosys Techno Solutions', | |||
|     'website': 'https://www.cybrosys.com', | |||
|     'depends': ['base', 'sale_management', 'account', 'stock', 'purchase'], | |||
|     'data': [ | |||
|         'security/ir.model.access.csv', | |||
|         'data/doc_layout_data.xml', | |||
|         'report/account_move_reports.xml', | |||
|         'report/account_move_attractive_templates.xml', | |||
|         'report/account_move_modern_templates.xml', | |||
|         'report/account_move_standard_templates.xml', | |||
|         'report/account_move_traditional_templates.xml', | |||
|         'report/purchase_order_reports.xml', | |||
|         'report/purchase_attractive_templates.xml', | |||
|         'report/purchase_modern_templates.xml', | |||
|         'report/purchase_standard_templates.xml', | |||
|         'report/purchase_traditional_templates.xml', | |||
|         'report/sale_order_reports.xml', | |||
|         'report/sale_attractive_templates.xml', | |||
|         'report/sale_modern_templates.xml', | |||
|         'report/sale_standard_templates.xml', | |||
|         'report/sale_traditional_templates.xml', | |||
|         'report/stock_move_reports.xml', | |||
|         'report/stock_move_attractive_templates.xml', | |||
|         'report/stock_move_modern_templates.xml', | |||
|         'report/stock_move_standard_templates.xml', | |||
|         'report/stock_move_traditional_templates.xml', | |||
|         'views/res_company_views.xml', | |||
|         'views/sale_order_views.xml', | |||
|         'views/purchase_order_views.xml', | |||
|         'views/account_move_views.xml', | |||
|         'views/stock_move_views.xml', | |||
|         'views/doc_layout_views.xml', | |||
|     ], | |||
|     'images': ['static/description/banner.png'], | |||
|     'license': 'AGPL-3', | |||
|     'installable': True, | |||
|     'auto_install': False, | |||
|     'application': False, | |||
| } | |||
| @ -0,0 +1,49 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <odoo> | |||
|     <data noupdate="1"> | |||
|         <record id="modern" model="doc.layout"> | |||
|             <field name="name">Modern</field> | |||
|             <field name="base_color">#732673</field> | |||
|             <field name="heading_text_color">#ffffff</field> | |||
|             <field name="text_color">#000000</field> | |||
|             <field name="customer_text_color">#000000</field> | |||
|             <field name="logo_position">right</field> | |||
|             <field name="customer_position">right</field> | |||
|             <field name="company_position">left</field> | |||
|             <field name="company_text_color">#808080</field> | |||
|         </record> | |||
|         <record id="standard" model="doc.layout"> | |||
|             <field name="name">Standard</field> | |||
|             <field name="base_color">#ff7733</field> | |||
|             <field name="heading_text_color">#ffffff</field> | |||
|             <field name="text_color">#000000</field> | |||
|             <field name="customer_text_color">#000000</field> | |||
|             <field name="logo_position">left</field> | |||
|             <field name="customer_position">left</field> | |||
|             <field name="company_position">right</field> | |||
|             <field name="company_text_color">#808080</field> | |||
|         </record> | |||
|         <record id="traditional" model="doc.layout"> | |||
|             <field name="name">Traditional</field> | |||
|             <field name="base_color">#ff7733</field> | |||
|             <field name="heading_text_color">#ffffff</field> | |||
|             <field name="text_color">#000000</field> | |||
|             <field name="customer_text_color">#000000</field> | |||
|             <field name="logo_position">left</field> | |||
|             <field name="customer_position">left</field> | |||
|             <field name="company_position">right</field> | |||
|             <field name="company_text_color">#808080</field> | |||
|         </record> | |||
|         <record id="attractive" model="doc.layout"> | |||
|             <field name="name">Attractive</field> | |||
|             <field name="base_color">#ff7733</field> | |||
|             <field name="heading_text_color">#ffffff</field> | |||
|             <field name="text_color">#000000</field> | |||
|             <field name="customer_text_color">#000000</field> | |||
|             <field name="logo_position">left</field> | |||
|             <field name="customer_position">left</field> | |||
|             <field name="company_position">right</field> | |||
|             <field name="company_text_color">#808080</field> | |||
|         </record> | |||
|     </data> | |||
| </odoo> | |||
| @ -0,0 +1,6 @@ | |||
| ## Module <base_advanced_report_templates> | |||
| 
 | |||
| #### 12.10.2023 | |||
| #### Version 14.0.1.0.0 | |||
| ##### ADD | |||
| - Initial commit for Odoo Professional Report Templates Module | |||
| @ -0,0 +1,32 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Ammu Raj (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 account_move | |||
| from . import account_move_line | |||
| from . import base_document_layout | |||
| from . import doc_layout | |||
| from . import purchase_order | |||
| from . import purchase_order_line | |||
| from . import res_company | |||
| from . import sale_order | |||
| from . import sale_order_line | |||
| from . import stock_move | |||
| from . import stock_picking | |||
| @ -0,0 +1,32 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Ammu Raj (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 fields, models | |||
| 
 | |||
| 
 | |||
| class AccountMove(models.Model): | |||
|     """Adding the feature advanced report template""" | |||
|     _inherit = 'account.move' | |||
| 
 | |||
|     theme_id = fields.Many2one('doc.layout', string="Account Move Template", | |||
|                                related='company_id.account_document_layout_id', | |||
|                                help='The template to be used for this account ' | |||
|                                     'move.') | |||
| @ -0,0 +1,31 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Ammu Raj (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 fields, models | |||
| 
 | |||
| 
 | |||
| class AccountMoveLine(models.Model): | |||
|     """invoice line image""" | |||
|     _inherit = 'account.move.line' | |||
| 
 | |||
|     order_line_image = fields.Binary(string="Image", | |||
|                                      related="product_id.image_128", | |||
|                                      help="Image of product in invoice line") | |||
| @ -0,0 +1,91 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Ammu Raj (odoo@cybrosys.com) | |||
| # | |||
| #    You can modify it under the terms of the GNU AFFERO | |||
| #    GENERAL PUBLIC LICENSE (AGPL v3), Version 3. | |||
| # | |||
| #    This program is distributed in the hope that it will be useful, | |||
| #    but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | |||
| #    GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE | |||
| #    (AGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ################################################################################ | |||
| from odoo import api, fields, models | |||
| 
 | |||
| 
 | |||
| class BaseDocumentLayout(models.TransientModel): | |||
|     """Inherited base document layout for selecting layouts""" | |||
|     _inherit = 'base.document.layout' | |||
| 
 | |||
|     sale_document_layout_id = fields.Many2one(string="Sale Template", | |||
|                                               related='company_id.sale_document_layout_id', | |||
|                                               help="selected layout for sale") | |||
|     purchase_document_layout_id = fields.Many2one(string="Purchase Template", | |||
|                                                   related='company_id.purchase_document_layout_id', | |||
|                                                   help="Selected layout for purchase") | |||
|     account_document_layout_id = fields.Many2one(string="Account Template", | |||
|                                                  related='company_id.account_document_layout_id', | |||
|                                                  help="Selected layout for Invoice") | |||
|     stock_document_layout_id = fields.Many2one(string="Delivery Template", | |||
|                                                related='company_id.stock_document_layout_id', | |||
|                                                help="selected document for Delivery") | |||
| 
 | |||
|     @api.depends('report_layout_id', 'logo', 'font', 'primary_color', | |||
|                  'secondary_color', 'report_header', 'report_footer', | |||
|                  'sale_document_layout_id', | |||
|                  'stock_document_layout_id', 'account_document_layout_id', | |||
|                  'purchase_document_layout_id') | |||
|     def _compute_preview(self): | |||
|         """Compute a qweb based preview to display on the wizard""" | |||
|         styles = self._get_asset_style() | |||
| 
 | |||
|         layout_mapping = { | |||
|             'sale': { | |||
|                 'modern': 'report_saleorder_modern_document', | |||
|                 'traditional': 'report_saleorder_traditional_document', | |||
|                 'standard': 'report_saleorder_standard_document', | |||
|                 'attractive': 'report_saleorder_attractive_document', | |||
|             }, | |||
|             'purchase': { | |||
|                 'modern': 'report_purchaseorder_modern_document', | |||
|                 'traditional': 'report_purchaseorder_traditional_document', | |||
|                 'standard': 'report_purchaseorder_standard_document', | |||
|                 'attractive': 'report_purchaseorder_attractive_document', | |||
|             }, | |||
|             'account': { | |||
|                 'modern': 'report_account_modern_document', | |||
|                 'traditional': 'report_account_traditional_document', | |||
|                 'standard': 'report_account_standard_document', | |||
|                 'attractive': 'report_account_attractive_document', | |||
|             }, | |||
|             'stock': { | |||
|                 'modern': 'report_stock_modern_document', | |||
|                 'traditional': 'report_stock_traditional_document', | |||
|                 'standard': 'report_stock_standard_document', | |||
|                 'attractive': 'report_stock_attractive_document', | |||
|             }, | |||
|         } | |||
|         ir_ui_view = self.env['ir.ui.view'] | |||
|         for wizard in self: | |||
|             for doc_type, layouts in layout_mapping.items(): | |||
|                 layout_id = getattr(wizard, f"{doc_type}_document_layout_id") | |||
|                 if layout_id and layout_id in layouts: | |||
|                     preview_css = self._get_css_for_preview(styles, wizard.id) | |||
|                     template_name = layouts[layout_id] | |||
|                     template = f'base_advanced_report_templates.{template_name}' | |||
|                     wizard.preview = ir_ui_view._render_template(template, { | |||
|                         'company': wizard, 'preview_css': preview_css}) | |||
|                     break  # Once a valid layout is found, exit the loop | |||
|             else: | |||
|                 wizard.preview = False  # If no valid layout is found | |||
|             if not wizard.report_layout_id: | |||
|                 wizard.preview = False | |||
| @ -0,0 +1,52 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Ammu Raj (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 | |||
| 
 | |||
| 
 | |||
| class DocLayout(models.Model): | |||
|     """Adding the fields for customization""" | |||
|     _name = "doc.layout" | |||
|     _description = 'Adding the fields for customization' | |||
|     _rec_name = 'name' | |||
| 
 | |||
|     name = fields.Char(string="Name", help="Name of the layout") | |||
|     base_color = fields.Char(string="Base Color", | |||
|                              help="Background color for the invoice") | |||
|     heading_text_color = fields.Char(string="Heading text Color", | |||
|                                      help="Text color of the Heading") | |||
|     text_color = fields.Char(string="Text Color", help="Text color of items") | |||
|     customer_text_color = fields.Char(string="Text Color of the customer", | |||
|                                       help="Text color of the customer address") | |||
|     company_text_color = fields.Char(string="Company Text Color", | |||
|                                      help="Text color of the company address") | |||
|     logo_position = fields.Selection([('left', 'Left'), ('right', 'Right')], | |||
|                                      string="Logo Position", | |||
|                                      help="The position of the company logo") | |||
|     customer_position = fields.Selection( | |||
|         [('left', 'Left'), ('right', 'Right')], string="Customer position", | |||
|         help="The position of the company address") | |||
|     company_position = fields.Selection([('left', 'Left'), ('right', 'Right')], | |||
|                                         string="Company Address Position", | |||
|                                         help="The position of the company address") | |||
|     company_id = fields.Many2one('res.company', string='Company', index=True, | |||
|                                  default=lambda self: self.env.company, | |||
|                                  help="Current company") | |||
| @ -0,0 +1,32 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Ammu Raj (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 fields, models | |||
| 
 | |||
| 
 | |||
| class PurchaseOrder(models.Model): | |||
|     """Adding the feature advanced templates""" | |||
|     _inherit = 'purchase.order' | |||
| 
 | |||
|     theme_id = fields.Many2one('doc.layout', string="Purchase Template", | |||
|                                related='company_id.purchase_document_layout_id', | |||
|                                help='The template to be used for this purchase ' | |||
|                                     'order') | |||
| @ -0,0 +1,32 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Ammu Raj (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 fields, models | |||
| 
 | |||
| 
 | |||
| class PurchaseOrderLine(models.Model): | |||
|     """purchase order line image""" | |||
|     _inherit = 'purchase.order.line' | |||
| 
 | |||
|     order_line_image = fields.Binary(string="Image", | |||
|                                      related="product_id.image_128", | |||
|                                      help="The image product in purchase order " | |||
|                                           "line") | |||
| @ -0,0 +1,44 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Ammu Raj (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 fields, models | |||
| 
 | |||
| 
 | |||
| class ResCompany(models.Model): | |||
|     """Adding the layouts in company""" | |||
|     _inherit = 'res.company' | |||
| 
 | |||
|     sale_document_layout_id = fields.Many2one("doc.layout", | |||
|                                               string="Sale", | |||
|                                               help="Select the required layout " | |||
|                                                    "for Sales") | |||
|     purchase_document_layout_id = fields.Many2one("doc.layout", | |||
|                                                   string="Purchase", | |||
|                                                   help="Select the required " | |||
|                                                        "layout for Purchase") | |||
|     account_document_layout_id = fields.Many2one("doc.layout", | |||
|                                                  string="Account", | |||
|                                                  help="Select the required " | |||
|                                                       "layout for Invoice") | |||
|     stock_document_layout_id = fields.Many2one("doc.layout", | |||
|                                                string="Stock", | |||
|                                                help="Select the required " | |||
|                                                     "layout for Delivery") | |||
| @ -0,0 +1,32 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Ammu Raj (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 fields, models | |||
| 
 | |||
| 
 | |||
| class SaleOrder(models.Model): | |||
|     """Adding the feature advanced templates""" | |||
|     _inherit = 'sale.order' | |||
| 
 | |||
|     theme_id = fields.Many2one('doc.layout', string="Sales Template", | |||
|                                related='company_id.sale_document_layout_id', | |||
|                                help='The template to be used for this sale ' | |||
|                                     'order') | |||
| @ -0,0 +1,32 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Ammu Raj (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 fields, models | |||
| 
 | |||
| 
 | |||
| class SaleOrderLine(models.Model): | |||
|     """sale order line image""" | |||
|     _inherit = 'sale.order.line' | |||
| 
 | |||
|     order_line_image = fields.Binary(string="Image", | |||
|                                      related="product_id.image_128", | |||
|                                      help="The image of the product in sale " | |||
|                                           "order line") | |||
| @ -0,0 +1,31 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Ammu Raj (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 fields, models | |||
| 
 | |||
| 
 | |||
| class StockMove(models.Model): | |||
|     """Delivery report image""" | |||
|     _inherit = 'stock.move' | |||
| 
 | |||
|     order_line_image = fields.Binary(string="Image", | |||
|                                      related="product_id.image_128", | |||
|                                      help="The image of product in stock move") | |||
| @ -0,0 +1,31 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ################################################################################ | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| # | |||
| #    Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>). | |||
| #    Author: Ammu Raj (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 fields, models | |||
| 
 | |||
| 
 | |||
| class StockPicking(models.Model): | |||
|     """Adding the advanced templates""" | |||
|     _inherit = 'stock.picking' | |||
| 
 | |||
|     theme_id = fields.Many2one('doc.layout', string="Delivery Template", | |||
|                                related='company_id.stock_document_layout_id', | |||
|                                help='The template to be used for this delivery') | |||
| @ -0,0 +1,348 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
| <!--    Account Attractive Template--> | |||
|     <template id="report_account_attractive_document"> | |||
|         <t t-if="o and 'company_id' in o"> | |||
|             <t t-set="company" t-value="o.company_id"/> | |||
|         </t> | |||
|         <t t-if="not o or not 'company_id' in o"> | |||
|             <t t-set="company" t-value="res_company"/> | |||
|         </t> | |||
|         <div class="header row mt32 mb32"> | |||
|             <div class="page-header col-12"> | |||
|                 <div t-attf-style="text-align:#{o.theme_id.logo_position};"> | |||
|                     <t t-if="company.logo"> | |||
|                         <img t-if="company.logo" | |||
|                              t-att-src="image_data_uri(company.logo)" | |||
|                              style="max-height: 80px;"/> | |||
|                     </t> | |||
|                 </div> | |||
|                 <div t-attf-style="text-align:#{o.theme_id.company_position};"> | |||
|                     <div t-attf-style="font:14px lucida-console,sans-serif; color:#{o.theme_id.company_text_color} !important;"> | |||
|                         <span t-field="company.partner_id"/> | |||
|                         <br/> | |||
|                         <span t-field="company.partner_id.street"/> | |||
|                         <br/> | |||
|                         <span t-field="company.partner_id.street2"/> | |||
|                         <br/> | |||
|                         <span t-field="company.partner_id.city"/> | |||
|                         <br/> | |||
|                         <span t-field="company.partner_id.country_id"/> | |||
|                         <br/> | |||
|                         <span t-field="company.partner_id.vat"/> | |||
|                         <br/> | |||
|                     </div> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|         <t t-call="web.external_layout"> | |||
|             <div class="mt-5"> | |||
|                 <div class="page"> | |||
|                     <div t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                         <h2 t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                             <span t-if="o.move_type == 'out_invoice' and o.state == 'posted'"> | |||
|                                 Invoice | |||
|                             </span> | |||
|                             <span t-if="o.move_type == 'out_invoice' and o.state == 'draft'"> | |||
|                                 Draft Invoice | |||
|                             </span> | |||
|                             <span t-if="o.move_type == 'out_invoice' and o.state == 'cancel'"> | |||
|                                 Cancelled Invoice | |||
|                             </span> | |||
|                             <span t-if="o.move_type == 'out_refund'">Credit Note | |||
|                             </span> | |||
|                             <span t-if="o.move_type == 'in_refund'">Vendor Credit | |||
|                                 Note | |||
|                             </span> | |||
|                             <span t-if="o.move_type == 'in_invoice'">Vendor Bill | |||
|                             </span> | |||
|                             <span t-if="o.name != '/'" t-field="o.name"/> | |||
|                         </h2> | |||
|                         <strong>Customer</strong> | |||
|                         <span class="mb-0" t-field="o.partner_id" | |||
|                               t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/> | |||
|                         <div t-if="o.partner_id.vat"> | |||
|                             <t t-if="o.company_id.account_fiscal_country_id.vat_label" | |||
|                                t-esc="o.company_id.account_fiscal_country_id.vat_label" | |||
|                                id="inv_tax_id_label"/> | |||
|                             <t t-else="">Tax ID</t>: | |||
|                             <span t-field="o.partner_id.vat"/> | |||
|                         </div> | |||
|                     </div> | |||
|                     <table class="table table-sm o_main_table" | |||
|                            name="invoice_line_table"> | |||
|                         <thead t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                             <tr t-if="o.invoice_date"> | |||
|                                 <th name="th_description" | |||
|                                     t-if="o.move_type == 'out_invoice'" | |||
|                                     class="text-start"> | |||
|                                     <span>Invoice Date</span> | |||
|                                 </th> | |||
|                                 <th name="th_description" | |||
|                                     t-if="o.move_type == 'out_invoice'" | |||
|                                     class="text-start"> | |||
|                                     <span>Invoice Number</span> | |||
|                                 </th> | |||
|                                 <th name="th_quantity" | |||
|                                     t-elif="o.move_type == 'out_refund'" | |||
|                                     class="text-end"> | |||
|                                     <span>Credit Note Date</span> | |||
|                                 </th> | |||
|                                 <th name="th_quantity" | |||
|                                     t-elif="o.move_type == 'out_receipt'" | |||
|                                     class="text-end"> | |||
|                                     <span>Receipt Date</span> | |||
|                                 </th> | |||
|                                 <th name="th_quantity" | |||
|                                     t-elif="o.move_type == 'out_receipt'" | |||
|                                     class="text-end"> | |||
|                                     <span>Receipt Date</span> | |||
|                                 </th> | |||
|                                 <th name="th_quantity" | |||
|                                     t-elif="o.move_type == 'out_receipt'" | |||
|                                     class="text-end"> | |||
|                                     <span>Receipt Date</span> | |||
|                                 </th> | |||
|                                 <th name="th_quantity" t-else="" class="text-end"> | |||
|                                     <span>Date</span> | |||
|                                 </th> | |||
|                                 <th name="th_quantity" | |||
|                                     t-if="o.invoice_date_due and o.move_type == 'out_invoice' and o.state == 'posted'" | |||
|                                     class="text-end"> | |||
|                                     <span>Due Date</span> | |||
|                                 </th> | |||
|                                 <th name="th_quantity" t-if="o.invoice_origin" | |||
|                                     class="text-end"> | |||
|                                     <span>Source</span> | |||
|                                 </th> | |||
|                                 <th name="th_quantity" t-if="o.partner_id.ref" | |||
|                                     class="text-end"> | |||
|                                     <span>Customer Code</span> | |||
|                                 </th> | |||
|                                 <th name="th_quantity" t-if="o.ref" class="text-end"> | |||
|                                     <span>Reference</span> | |||
|                                 </th> | |||
|                             </tr> | |||
|                         </thead> | |||
|                         <tbody> | |||
|                             <tr t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                                 <td class="text-start"> | |||
|                                     <p class="m-0" t-field="o.invoice_date"/> | |||
|                                 </td> | |||
|                                 <td class="text-enf" t-if="o.payment_reference"> | |||
|                                     <p class="m-0" t-field="o.payment_reference"/> | |||
|                                 </td> | |||
|                                 <td t-if="o.invoice_date_due and o.move_type == 'out_invoice' and o.state == 'posted'" | |||
|                                     class="text-end"> | |||
|                                     <p class="m-0" t-field="o.invoice_date_due"/> | |||
|                                 </td> | |||
|                                 <td t-if="o.invoice_origin" class="text-end"> | |||
|                                     <p class="m-0" t-field="o.invoice_origin"/> | |||
|                                 </td> | |||
|                                 <td t-if="o.partner_id.ref" class="text-end"> | |||
|                                     <p class="m-0" t-field="o.partner_id.ref"/> | |||
|                                 </td> | |||
|                                 <td t-if="o.ref" class="text-end"> | |||
|                                     <p class="m-0" t-field="o.ref"/> | |||
|                                 </td> | |||
|                             </tr> | |||
|                         </tbody> | |||
|                     </table> | |||
|                     <br/> | |||
|                     <br/> | |||
|                     <br/> | |||
|                     <t t-set="display_discount" | |||
|                        t-value="any(l.discount for l in o.invoice_line_ids)"/> | |||
| 
 | |||
|                     <table class="table table-sm o_main_table" | |||
|                            name="invoice_line_table"> | |||
|                         <thead t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                             <tr> | |||
|                                 <th name="th_description" class="text-start"> | |||
|                                     <span>Description</span> | |||
|                                 </th> | |||
|                                 <th name="th_quantity" class="text-end"> | |||
|                                     <span>Quantity</span> | |||
|                                 </th> | |||
|                                 <th name="th_priceunit" | |||
|                                     t-attf-class="text-end {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                     <span>Unit Price</span> | |||
|                                 </th> | |||
|                                 <th name="th_price_unit" t-if="display_discount" | |||
|                                     t-attf-class="text-end {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                     <span>Disc.%</span> | |||
|                                 </th> | |||
|                                 <th name="th_taxes" | |||
|                                     t-attf-class="text-start {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                     <span>Taxes</span> | |||
|                                 </th> | |||
|                                 <th name="th_subtotal" class="text-end"> | |||
|                                     <span groups="account.group_show_line_subtotals_tax_excluded"> | |||
|                                         Amount | |||
|                                     </span> | |||
|                                     <span groups="account.group_show_line_subtotals_tax_included"> | |||
|                                         Total Price | |||
|                                     </span> | |||
|                                 </th> | |||
|                             </tr> | |||
|                         </thead> | |||
|                         <tbody class="invoice_tbody"> | |||
|                             <t t-set="current_subtotal" t-value="0"/> | |||
|                             <t t-set="lines" | |||
|                                t-value="o.invoice_line_ids.sorted(key=lambda l: (-l.sequence, l.date, l.move_name, -l.id), reverse=True)"/> | |||
|                             <t t-foreach="lines" t-as="line"> | |||
|                                 <t t-set="current_subtotal" | |||
|                                    t-value="current_subtotal + line.price_subtotal" | |||
|                                    groups="account.group_show_line_subtotals_tax_excluded"/> | |||
|                                 <t t-set="current_subtotal" | |||
|                                    t-value="current_subtotal + line.price_total" | |||
|                                    groups="account.group_show_line_subtotals_tax_included"/> | |||
|                                 <tr t-att-class="'bg-200 fw-bold o_line_section' if line.display_type == 'line_section' else 'fst-italic o_line_note' if line.display_type == 'line_note' else ''" | |||
|                                     t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                                     <t t-if="not line.display_type" | |||
|                                        name="account_invoice_line_accountable"> | |||
|                                         <td name="account_invoice_line_name"> | |||
|                                             <span t-field="line.name" | |||
|                                                   t-options="{'widget': 'text'}"/> | |||
|                                         </td> | |||
|                                         <td class="text-end"> | |||
|                                             <span t-field="line.quantity"/> | |||
|                                             <span t-field="line.product_uom_id" | |||
|                                                   groups="uom.group_uom"/> | |||
|                                         </td> | |||
|                                         <td t-attf-class="text-end {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                             <span class="text-nowrap" | |||
|                                                   t-field="line.price_unit"/> | |||
|                                         </td> | |||
|                                         <td t-if="display_discount" | |||
|                                             t-attf-class="text-end {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                             <span class="text-nowrap" | |||
|                                                   t-field="line.discount"/> | |||
|                                         </td> | |||
|                                         <td t-attf-class="text-start {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                             <span t-esc="', '.join(map(lambda x: (x.description or x.name), line.tax_ids))" | |||
|                                                   id="line_tax_ids"/> | |||
|                                         </td> | |||
|                                         <td class="text-end o_price_total"> | |||
|                                             <span class="text-nowrap" | |||
|                                                   t-field="line.price_subtotal" | |||
|                                                   groups="account.group_show_line_subtotals_tax_excluded"/> | |||
|                                             <span class="text-nowrap" | |||
|                                                   t-field="line.price_total" | |||
|                                                   groups="account.group_show_line_subtotals_tax_included"/> | |||
|                                         </td> | |||
|                                     </t> | |||
|                                     <t t-if="line.display_type == 'line_section'"> | |||
|                                         <td colspan="99"> | |||
|                                             <span t-field="line.name" | |||
|                                                   t-options="{'widget': 'text'}"/> | |||
|                                         </td> | |||
|                                         <t t-set="current_section" t-value="line"/> | |||
|                                         <t t-set="current_subtotal" t-value="0"/> | |||
|                                     </t> | |||
|                                     <t t-if="line.display_type == 'line_note'"> | |||
|                                         <td colspan="99"> | |||
|                                             <span t-field="line.name" | |||
|                                                   t-options="{'widget': 'text'}"/> | |||
|                                         </td> | |||
|                                     </t> | |||
|                                 </tr> | |||
|                                 <t t-if="current_section and (line_last or lines[line_index+1].display_type == 'line_section')"> | |||
|                                     <tr class="is-subtotal text-end"> | |||
|                                         <td colspan="99"> | |||
|                                             <strong class="mr16">Subtotal</strong> | |||
|                                             <span | |||
|                                                     t-esc="current_subtotal" | |||
|                                                     t-options='{"widget": "monetary", "display_currency": o.currency_id}' | |||
|                                             /> | |||
|                                         </td> | |||
|                                     </tr> | |||
|                                 </t> | |||
|                             </t> | |||
|                         </tbody> | |||
|                     </table> | |||
|                     <div class="clearfix" > | |||
|                         <div id="total" class="row"> | |||
|                             <div t-attf-class="#{'col-6' if report_type != 'html' else 'col-sm-7 col-md-6'} ml-auto"> | |||
|                                 <table class="table table-sm" | |||
|                                        t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                                     <t t-if="print_with_payments"> | |||
|                                         <t t-if="o.payment_state != 'invoicing_legacy'"> | |||
|                                             <t t-set="payments_vals" | |||
|                                                t-value="o.sudo().invoice_payments_widget and o.sudo().invoice_payments_widget['content'] or []"/> | |||
|                                             <t t-foreach="payments_vals" | |||
|                                                t-as="payment_vals"> | |||
|                                                 <tr t-if="payment_vals['is_exchange'] == 0"> | |||
|                                                     <td> | |||
|                                                         <i class="oe_form_field text-end oe_payment_label"> | |||
|                                                             Paid on | |||
|                                                             <t t-esc="payment_vals['date']" | |||
|                                                                t-options='{"widget": "date"}'/> | |||
|                                                         </i> | |||
|                                                     </td> | |||
|                                                     <td class="text-end"> | |||
|                                                         <span t-esc="payment_vals['amount']" | |||
|                                                               t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                                     </td> | |||
|                                                 </tr> | |||
|                                             </t> | |||
|                                             <t t-if="len(payments_vals) > 0"> | |||
|                                                 <tr class="border-black" | |||
|                                                     t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                                                     <td> | |||
|                                                         <strong>Amount Due</strong> | |||
|                                                     </td> | |||
|                                                     <td class="text-end"> | |||
|                                                         <span t-field="o.amount_residual"/> | |||
|                                                     </td> | |||
|                                                 </tr> | |||
|                                             </t> | |||
|                                         </t> | |||
|                                     </t> | |||
|                                 </table> | |||
|                             </div> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|                 <div t-if="o.move_type in ('out_invoice', 'in_refund') and o.payment_reference" | |||
|                      t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};" | |||
|                      name="payment_communication" class="mt-4"> | |||
|                     Please use the following communication for your payment : | |||
|                     <b> | |||
|                         <span t-field="o.payment_reference"/> | |||
|                     </b> | |||
|                     <div class="col-auto col-3 mw-100 mb-2" | |||
|                          t-if="o.invoice_payment_term_id.note" | |||
|                          name="reference"> | |||
|                         <div t-field="o.invoice_payment_term_id.note" | |||
|                              name="payment_term"/> | |||
|                     </div> | |||
|                 </div> | |||
|                 <p t-if="o.narration" name="comment"> | |||
|                     <span t-field="o.narration"/> | |||
|                 </p> | |||
|                 <p t-if="o.fiscal_position_id.note" name="note"> | |||
|                     <span t-field="o.fiscal_position_id.note"/> | |||
|                 </p> | |||
|                 <p t-if="o.invoice_incoterm_id" name="incoterm"> | |||
|                     <strong>Incoterm:</strong> | |||
|                     <span t-attf-style="color:#{o.theme_id.customer_text_color} !important;" | |||
|                           t-field="o.invoice_incoterm_id.code"/> | |||
|                     - | |||
|                     <span t-attf-style="color:#{o.theme_id.customer_text_color} !important;" | |||
|                           t-field="o.invoice_incoterm_id.name"/> | |||
|                 </p> | |||
|                 <div id="qrcode" t-if="o.display_qr_code and o.amount_residual > 0"> | |||
|                     <p t-if="qr_code_urls.get(o.id)"> | |||
|                         <strong class="text-center">Scan me with your banking app. | |||
|                         </strong> | |||
|                         <br/> | |||
|                         <br/> | |||
|                         <img class="border border-dark rounded" | |||
|                              t-att-src="qr_code_urls[o.id]"/> | |||
|                     </p> | |||
|                 </div> | |||
|             </div> | |||
|         </t> | |||
|     </template> | |||
| </odoo> | |||
| @ -0,0 +1,324 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--    Account Modern Template--> | |||
|     <template id="report_account_modern_document"> | |||
|         <t t-if="o and 'company_id' in o"> | |||
|             <t t-set="company" t-value="o.company_id"/> | |||
|         </t> | |||
|         <t t-if="not o or not 'company_id' in o"> | |||
|             <t t-set="company" t-value="res_company"/> | |||
|         </t> | |||
|         <div class="header row mt32 mb32"> | |||
|             <div class="page-header col-12"> | |||
|                 <div t-attf-class="pull-left"> | |||
|                     <t t-if="company.logo"> | |||
|                         <img t-if="company.logo" | |||
|                              t-att-src="image_data_uri(company.logo)" | |||
|                              style="max-height: 80px;"/> | |||
|                     </t> | |||
|                 </div> | |||
|                 <div t-attf-class="pull-left" | |||
|                      t-attf-style="font:14px lucida-console,sans-serif; color:#{o.theme_id.company_text_color} !important;"> | |||
|                     <span t-field="company.partner_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street2"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.city"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.country_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.vat"/> | |||
|                     <br/> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|         <t t-call="web.external_layout"> | |||
|             <t t-set="o" t-value="o.with_context(lang=lang)"/> | |||
|             <table class="table table-sm o_main_table"> | |||
|                 <thead t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                     <tr t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                         <td> | |||
|                             <span t-if="o.move_type == 'out_invoice' and o.state == 'posted'"> | |||
|                                 Invoice | |||
|                             </span> | |||
|                             <span t-if="o.move_type == 'out_invoice' and o.state == 'draft'"> | |||
|                                 Draft Invoice | |||
|                             </span> | |||
|                             <span t-if="o.move_type == 'out_invoice' and o.state == 'cancel'"> | |||
|                                 Cancelled Invoice | |||
|                             </span> | |||
|                             <span t-if="o.move_type == 'out_refund'">Credit | |||
|                                 Note | |||
|                             </span> | |||
|                             <span t-if="o.move_type == 'in_refund'">Vendor | |||
|                                 Credit Note | |||
|                             </span> | |||
|                             <span t-if="o.move_type == 'in_invoice'">Vendor | |||
|                                 Bill | |||
|                             </span> | |||
|                             <span t-if="o.name != '/'" t-field="o.name"/> | |||
|                         </td> | |||
|                     </tr> | |||
|                     <tr> | |||
|                         <th name="th_description" class="text-start"> | |||
|                             <span>Customer</span> | |||
|                         </th> | |||
|                         <th name="th_quantity" | |||
|                             t-if="o.partner_shipping_id and (o.partner_shipping_id != o.partner_id)" | |||
|                             class="text-end"> | |||
|                             <span>Shipping Address</span> | |||
|                         </th> | |||
|                     </tr> | |||
|                 </thead> | |||
|                 <tbody> | |||
|                     <tr t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                         <td> | |||
|                             <span class="mb-0" t-field="o.partner_id" | |||
|                                   t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/> | |||
|                             <div t-if="o.partner_id.vat"> | |||
|                                 <t t-if="o.company_id.account_fiscal_country_id.vat_label" | |||
|                                    t-esc="o.company_id.account_fiscal_country_id.vat_label" | |||
|                                    id="inv_tax_id_label"/> | |||
|                                 <t t-else="">Tax ID</t>: | |||
|                                 <span t-field="o.partner_id.vat"/> | |||
|                             </div> | |||
|                         </td> | |||
|                         <td> | |||
|                             <t t-set="information_block"> | |||
|                                 <div groups="account.group_delivery_invoice_address" | |||
|                                      name="shipping_address_block"> | |||
|                                     <div t-field="o.partner_shipping_id" | |||
|                                          t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/> | |||
|                                 </div> | |||
|                             </t> | |||
|                         </td> | |||
|                     </tr> | |||
|                 </tbody> | |||
|             </table> | |||
|             <div class="mt-5"> | |||
|                 <div class="page"> | |||
|                     <div id="informations" class="mt-4 mb-4" | |||
|                          t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                         <div class="col-auto col-3 mw-100 mb-2" | |||
|                              t-if="o.invoice_date" name="invoice_date"> | |||
|                             <t t-if="o.move_type == 'out_invoice'"> | |||
|                                 <strong>Invoice Date:</strong> | |||
|                             </t> | |||
|                             <t t-elif="o.move_type == 'out_refund'"> | |||
|                                 <strong>Credit Note Date:</strong> | |||
|                             </t> | |||
|                             <t t-elif="o.move_type == 'out_receipt'"> | |||
|                                 <strong>Receipt Date:</strong> | |||
|                             </t> | |||
|                             <t t-else=""> | |||
|                                 <strong>Date:</strong> | |||
|                             </t> | |||
|                             <p class="m-0" t-field="o.invoice_date"/> | |||
|                         </div> | |||
|                         <div class="col-auto col-3 mw-100 mb-2" | |||
|                              t-if="o.invoice_date_due and o.move_type == 'out_invoice' and o.state == 'posted'" | |||
|                              name="due_date"> | |||
|                             <strong>Due Date:</strong> | |||
|                             <p class="m-0" t-field="o.invoice_date_due"/> | |||
|                         </div> | |||
|                         <div class="col-auto col-3 mw-100 mb-2" | |||
|                              t-if="o.invoice_origin" name="origin"> | |||
|                             <strong>Source:</strong> | |||
|                             <p class="m-0" t-field="o.invoice_origin"/> | |||
|                         </div> | |||
|                         <div class="col-auto col-3 mw-100 mb-2" | |||
|                              t-if="o.partner_id.ref" name="customer_code"> | |||
|                             <strong>Customer Code:</strong> | |||
|                             <p class="m-0" t-field="o.partner_id.ref"/> | |||
|                         </div> | |||
|                         <div class="col-auto col-3 mw-100 mb-2" t-if="o.ref" | |||
|                              name="reference"> | |||
|                             <strong>Reference:</strong> | |||
|                             <p class="m-0" t-field="o.ref"/> | |||
|                         </div> | |||
|                     </div> | |||
|                     <t t-set="display_discount" | |||
|                        t-value="any(l.discount for l in o.invoice_line_ids)"/> | |||
|                     <table class="table table-sm o_main_table" name="invoice_line_table"> | |||
|                         <thead t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};" | |||
|                                class="col-12"> | |||
|                             <tr> | |||
|                                 <th name="th_description" class="text-left"><span>Description</span></th> | |||
|                                 <th name="th_quantity" class="text-right"><span>Quantity</span></th> | |||
|                                 <th name="th_priceunit" t-attf-class="text-right {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"><span>Unit Price</span></th> | |||
|                                 <th name="th_price_unit" t-if="display_discount" t-attf-class="text-right {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                     <span>Disc.%</span> | |||
|                                 </th> | |||
|                                 <th name="th_taxes" t-attf-class="text-left {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"><span>Taxes</span></th> | |||
|                                 <th name="th_subtotal" class="text-right"> | |||
|                                     <span groups="account.group_show_line_subtotals_tax_excluded">Amount</span> | |||
|                                     <span groups="account.group_show_line_subtotals_tax_included">Total Price</span> | |||
|                                 </th> | |||
|                             </tr> | |||
|                         </thead> | |||
|                         <tbody class="invoice_tbody"> | |||
|                             <t t-set="current_subtotal" t-value="0"/> | |||
|                             <t t-set="lines" t-value="o.invoice_line_ids.sorted(key=lambda l: (-l.sequence, l.date, l.move_name, -l.id), reverse=True)"/> | |||
|                             <t t-foreach="lines" t-as="line"> | |||
|                                 <t t-set="current_subtotal" t-value="current_subtotal + line.price_subtotal" groups="account.group_show_line_subtotals_tax_excluded"/> | |||
|                                 <t t-set="current_subtotal" t-value="current_subtotal + line.price_total" groups="account.group_show_line_subtotals_tax_included"/> | |||
| 
 | |||
|                                 <tr t-attf-style="color:#{o.theme_id.customer_text_color} !important;" t-att-class="'bg-200 font-weight-bold o_line_section' if line.display_type == 'line_section' else 'font-italic o_line_note' if line.display_type == 'line_note' else ''"> | |||
|                                     <t t-if="not line.display_type" name="account_invoice_line_accountable"> | |||
|                                         <td name="account_invoice_line_name"><span t-field="line.name" t-options="{'widget': 'text'}"/></td> | |||
|                                         <td class="text-right"> | |||
|                                             <span t-field="line.quantity"/> | |||
|                                             <span t-field="line.product_uom_id"  groups="uom.group_uom"/> | |||
|                                         </td> | |||
|                                         <td t-attf-class="text-right {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                             <span class="text-nowrap" t-field="line.price_unit"/> | |||
|                                         </td> | |||
|                                         <td t-if="display_discount" t-attf-class="text-right {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                             <span class="text-nowrap" t-field="line.discount"/> | |||
|                                         </td> | |||
|                                         <td t-attf-class="text-left {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                             <span t-esc="', '.join(map(lambda x: (x.description or x.name), line.tax_ids))" id="line_tax_ids"/> | |||
|                                         </td> | |||
|                                         <td class="text-right o_price_total"> | |||
|                                             <span class="text-nowrap" t-field="line.price_subtotal" groups="account.group_show_line_subtotals_tax_excluded"/> | |||
|                                             <span class="text-nowrap" t-field="line.price_total" groups="account.group_show_line_subtotals_tax_included"/> | |||
|                                         </td> | |||
|                                     </t> | |||
|                                     <t t-if="line.display_type == 'line_section'"> | |||
|                                         <td colspan="99"> | |||
|                                             <span t-field="line.name" t-options="{'widget': 'text'}"/> | |||
|                                         </td> | |||
|                                         <t t-set="current_section" t-value="line"/> | |||
|                                         <t t-set="current_subtotal" t-value="0"/> | |||
|                                     </t> | |||
|                                     <t t-if="line.display_type == 'line_note'"> | |||
|                                         <td colspan="99"> | |||
|                                             <span t-field="line.name" t-options="{'widget': 'text'}"/> | |||
|                                         </td> | |||
|                                     </t> | |||
|                                 </tr> | |||
|                                 <t t-if="current_section and (line_last or lines[line_index+1].display_type == 'line_section')"> | |||
|                                     <tr class="is-subtotal text-right"> | |||
|                                         <td colspan="99"> | |||
|                                             <strong class="mr16">Subtotal</strong> | |||
|                                             <span | |||
|                                                 t-esc="current_subtotal" | |||
|                                                 t-options='{"widget": "monetary", "display_currency": o.currency_id}' | |||
|                                             /> | |||
|                                         </td> | |||
|                                     </tr> | |||
|                                 </t> | |||
|                             </t> | |||
|                         </tbody> | |||
|                     </table> | |||
|                     <div class="clearfix"> | |||
|                         <div id="total" class="row"> | |||
|                             <div t-attf-class="#{'col-6' if report_type != 'html' else 'col-sm-7 col-md-6'} ml-auto"> | |||
|                                 <table class="table table-sm" t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};" style="page-break-inside: avoid;"> | |||
|                                     <tr class="border-black o_subtotal" style=""> | |||
|                                         <td><strong>Subtotal</strong></td> | |||
|                                         <td class="text-right"> | |||
|                                             <span t-field="o.amount_untaxed"/> | |||
|                                         </td> | |||
|                                     </tr> | |||
|                                     <t t-foreach="o.amount_by_group" t-as="amount_by_group"> | |||
|                                         <tr style=""> | |||
|                                             <t t-if="len(o.line_ids.filtered(lambda line: line.tax_line_id)) in [0, 1] and float_compare(o.amount_untaxed, amount_by_group[2], precision_rounding=o.currency_id.rounding) == 0"> | |||
|                                                 <td><span class="text-nowrap" t-esc="amount_by_group[0]"/></td> | |||
|                                                 <td class="text-right o_price_total"> | |||
|                                                     <span class="text-nowrap" t-esc="amount_by_group[3]" /> | |||
|                                                 </td> | |||
|                                             </t> | |||
|                                             <t t-else=""> | |||
|                                                 <td> | |||
|                                                     <span t-esc="amount_by_group[0]"/> | |||
|                                                     <span class="text-nowrap"> on | |||
|                                                         <t t-esc="amount_by_group[4]"/> | |||
|                                                     </span> | |||
|                                                 </td> | |||
|                                                 <td class="text-right o_price_total"> | |||
|                                                     <span class="text-nowrap" t-esc="amount_by_group[3]"/> | |||
|                                                 </td> | |||
|                                             </t> | |||
|                                         </tr> | |||
|                                     </t> | |||
|                                     <tr class="border-black o_total"> | |||
|                                         <td><strong>Total</strong></td> | |||
|                                         <td class="text-right"> | |||
|                                             <span class="text-nowrap" t-field="o.amount_total"/> | |||
|                                         </td> | |||
|                                     </tr> | |||
|                                     <t t-if="print_with_payments"> | |||
|                                         <t t-if="o.payment_state != 'invoicing_legacy'"> | |||
|                                             <t t-set="payments_vals" t-value="o.sudo()._get_reconciled_info_JSON_values()"/> | |||
| 
 | |||
|                                             <t t-foreach="payments_vals" t-as="payment_vals"> | |||
|                                                 <tr> | |||
|                                                     <td> | |||
|                                                         <i class="oe_form_field text-right oe_payment_label">Paid on <t t-esc="payment_vals['date']" t-options='{"widget": "date"}'/></i> | |||
|                                                     </td> | |||
|                                                     <td class="text-right"> | |||
|                                                         <span t-esc="payment_vals['amount']" t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                                     </td> | |||
|                                                 </tr> | |||
|                                             </t> | |||
|                                             <t t-if="len(payments_vals) > 0"> | |||
|                                                 <tr class="border-black"> | |||
|                                                     <td><strong>Amount Due</strong></td> | |||
|                                                     <td class="text-right"> | |||
|                                                         <span t-field="o.amount_residual"/> | |||
|                                                     </td> | |||
|                                                 </tr> | |||
|                                             </t> | |||
|                                         </t> | |||
|                                     </t> | |||
|                                 </table> | |||
|                             </div> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|                 <div t-if="o.move_type in ('out_invoice', 'in_refund') and o.payment_reference" | |||
|                      t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};" | |||
|                      name="payment_communication" class="mt-4">Please use the | |||
|                     following communication for your payment : | |||
|                     <b> | |||
|                         <span t-field="o.payment_reference"/> | |||
|                     </b> | |||
|                     <div class="col-auto col-3 mw-100 mb-2" | |||
|                          t-if="o.invoice_payment_term_id.note" name="reference"> | |||
|                         <t t-set="payment_term_details" | |||
|                            t-value="o.invoice_payment_term_id.note"/> | |||
|                         <div t-field="o.invoice_payment_term_id.note" | |||
|                              name="payment_term"/> | |||
|                     </div> | |||
|                 </div> | |||
|                 <p t-if="o.narration" name="comment"> | |||
|                         <span t-field="o.narration"/> | |||
|                 </p> | |||
|                 <p t-if="o.fiscal_position_id.note" name="note"> | |||
|                         <span t-field="o.fiscal_position_id.note"/> | |||
|                 </p> | |||
|                 <p t-if="o.invoice_incoterm_id" name="incoterm"> | |||
|                     <strong>Incoterm:</strong> | |||
|                     <span t-field="o.invoice_incoterm_id.code"/> | |||
|                     - | |||
|                     <span t-field="o.invoice_incoterm_id.name"/> | |||
|                 </p> | |||
|                 <div id="qrcode" | |||
|                      t-if="o.display_qr_code and o.amount_residual > 0"> | |||
|                     <p t-if="qr_code_urls.get(o.id)"> | |||
|                         <strong class="text-center">Scan me with your banking | |||
|                             app. | |||
|                         </strong> | |||
|                         <br/> | |||
|                         <br/> | |||
|                         <img class="border border-dark rounded" | |||
|                              t-att-src="qr_code_urls[o.id]"/> | |||
|                     </p> | |||
|                 </div> | |||
|             </div> | |||
|         </t> | |||
|     </template> | |||
| </odoo> | |||
| @ -0,0 +1,17 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--    Report Function in Account --> | |||
|     <record id="account.account_invoices" model="ir.actions.report"> | |||
|         <field name="name">Invoices</field> | |||
|         <field name="model">account.move</field> | |||
|         <field name="report_type">qweb-pdf</field> | |||
|         <field name="report_name">base_advanced_report_templates.report_invoice_custom</field> | |||
|         <field name="report_file">base_advanced_report_templates.report_invoice_custom</field> | |||
|         <field name="print_report_name">(object._get_report_base_filename())</field> | |||
|         <field name="attachment">(object.state == 'posted') and ((object.name or 'INV').replace('/','_')+'.pdf')</field> | |||
|         <field name="binding_model_id" ref="model_account_move"/> | |||
|         <field name="binding_type">report</field> | |||
|         <field name="groups_id" eval="[(4, ref('account.group_account_invoice')), | |||
|              (4, ref('account.group_account_readonly'))]"/> | |||
|     </record> | |||
| </odoo> | |||
| @ -0,0 +1,292 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--    Account Standard Template--> | |||
|     <template id="report_account_standard_document"> | |||
|         <t t-if="o and 'company_id' in o"> | |||
|             <t t-set="company" t-value="o.company_id"/> | |||
|         </t> | |||
|         <t t-if="not o or not 'company_id' in o"> | |||
|             <t t-set="company" t-value="res_company"/> | |||
|         </t> | |||
|         <div class="header row mt32 mb32"> | |||
|             <div class="page-header col-12"> | |||
|                 <div t-attf-class="pull-left"> | |||
|                     <t t-if="company.logo"> | |||
|                         <img t-if="company.logo" | |||
|                              t-att-src="image_data_uri(company.logo)" | |||
|                              style="max-height: 80px;"/> | |||
|                     </t> | |||
|                 </div> | |||
|                 <div t-attf-class="pull-left" | |||
|                      t-attf-style="font:14px lucida-console,sans-serif; color:#{o.theme_id.company_text_color} !important;"> | |||
|                     <span t-field="company.partner_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street2"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.city"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.country_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.vat"/> | |||
|                     <br/> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|         <t t-call="web.external_layout"> | |||
|             <t t-set="o" t-value="o.with_context(lang=lang)"/> | |||
|             <div class="mt-5"> | |||
|                 <div class="page"> | |||
|                     <h5 t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                         <span t-if="o.move_type == 'out_invoice' and o.state == 'posted'"> | |||
|                             Invoice | |||
|                         </span> | |||
|                         <span t-if="o.move_type == 'out_invoice' and o.state == 'draft'"> | |||
|                             Draft Invoice | |||
|                         </span> | |||
|                         <span t-if="o.move_type == 'out_invoice' and o.state == 'cancel'"> | |||
|                             Cancelled Invoice | |||
|                         </span> | |||
|                         <span t-if="o.move_type == 'out_refund'">Credit Note | |||
|                         </span> | |||
|                         <span t-if="o.move_type == 'in_refund'">Vendor Credit | |||
|                             Note | |||
|                         </span> | |||
|                         <span t-if="o.move_type == 'in_invoice'">Vendor Bill | |||
|                         </span> | |||
|                         <span t-if="o.name != '/'" t-field="o.name"/> | |||
|                         <div id="informations" class="row mt-4 mb-4"> | |||
|                             <div class="col-auto col-3 mw-100 mb-2" | |||
|                                  t-if="o.invoice_date" name="invoice_date"> | |||
|                                 <t t-if="o.move_type == 'out_invoice'"> | |||
|                                     <strong>Invoice Date:</strong> | |||
|                                 </t> | |||
|                                 <t t-elif="o.move_type == 'out_refund'"> | |||
|                                     <strong>Credit Note Date:</strong> | |||
|                                 </t> | |||
|                                 <t t-elif="o.move_type == 'out_receipt'"> | |||
|                                     <strong>Receipt Date:</strong> | |||
|                                 </t> | |||
|                                 <t t-else=""> | |||
|                                     <strong>Date:</strong> | |||
|                                 </t> | |||
|                                 <p class="m-0" t-field="o.invoice_date"/> | |||
|                             </div> | |||
|                             <div class="col-auto col-3 mw-100 mb-2" | |||
|                                  t-if="o.invoice_date_due and o.move_type == 'out_invoice' and o.state == 'posted'" | |||
|                                  name="due_date"> | |||
|                                 <strong>Due Date:</strong> | |||
|                                 <p class="m-0" t-field="o.invoice_date_due"/> | |||
|                             </div> | |||
|                             <div class="col-auto col-3 mw-100 mb-2" | |||
|                                  t-if="o.invoice_origin" name="origin"> | |||
|                                 <strong>Source:</strong> | |||
|                                 <p class="m-0" t-field="o.invoice_origin"/> | |||
|                             </div> | |||
|                             <div class="col-auto col-3 mw-100 mb-2" | |||
|                                  t-if="o.partner_id.ref" name="customer_code"> | |||
|                                 <strong>Customer Code:</strong> | |||
|                                 <p class="m-0" t-field="o.partner_id.ref"/> | |||
|                             </div> | |||
|                             <div class="col-auto col-3 mw-100 mb-2" t-if="o.ref" | |||
|                                  name="reference"> | |||
|                                 <strong>Reference:</strong> | |||
|                                 <p class="m-0" t-field="o.ref"/> | |||
|                             </div> | |||
|                             <div class="col-auto col-3 mw-100 mb-2" | |||
|                                  t-if="o.invoice_payment_term_id.note" | |||
|                                  name="reference"> | |||
|                                 <t t-set="payment_term_details" | |||
|                                    t-value="o.invoice_payment_term_id.note"/> | |||
|                                 <div t-field="o.invoice_payment_term_id.note" | |||
|                                      name="payment_term"/> | |||
|                             </div> | |||
|                             <div class="col-auto col-3 mw-100 mb-2" | |||
|                                  t-if="o.invoice_user_id" name="reference"> | |||
|                                 <t t-set="payment_term_details" | |||
|                                    t-value="o.invoice_user_id"/> | |||
|                                 <strong>SalesPerson:</strong> | |||
|                                 <div t-field="o.invoice_user_id.name" | |||
|                                      name="payment_term"/> | |||
|                             </div> | |||
|                         </div> | |||
|                         <strong>Customer</strong> | |||
|                     </h5> | |||
|                     <div class="offset-col-6 col-6" name="no_shipping"> | |||
|                         <span class="mb-0" t-field="o.partner_id" | |||
|                               t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/> | |||
|                         <div t-if="o.partner_id.vat"> | |||
|                             <t t-if="o.company_id.account_fiscal_country_id.vat_label" | |||
|                                t-esc="o.company_id.account_fiscal_country_id.vat_label" | |||
|                                id="inv_tax_id_label"/> | |||
|                             <t t-else="">Tax ID</t>: | |||
|                             <span t-field="o.partner_id.vat"/> | |||
|                         </div> | |||
|                     </div> | |||
|                     <t t-set="display_discount" | |||
|                        t-value="any(l.discount for l in o.invoice_line_ids)"/> | |||
|                         <table class="table table-sm o_main_table" name="invoice_line_table"> | |||
|                         <thead t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                             <tr> | |||
|                                 <th name="th_description" class="text-left"><span>Description</span></th> | |||
|                                 <th name="th_quantity" class="text-right"><span>Quantity</span></th> | |||
|                                 <th name="th_priceunit" t-attf-class="text-right {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"><span>Unit Price</span></th> | |||
|                                 <th name="th_price_unit" t-if="display_discount" t-attf-class="text-right {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                     <span>Disc.%</span> | |||
|                                 </th> | |||
|                                 <th name="th_taxes" t-attf-class="text-left {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"><span>Taxes</span></th> | |||
|                                 <th name="th_subtotal" class="text-right"> | |||
|                                     <span groups="account.group_show_line_subtotals_tax_excluded">Amount</span> | |||
|                                     <span groups="account.group_show_line_subtotals_tax_included">Total Price</span> | |||
|                                 </th> | |||
|                             </tr> | |||
|                         </thead> | |||
|                         <tbody class="invoice_tbody"> | |||
|                             <t t-set="current_subtotal" t-value="0"/> | |||
|                             <t t-set="lines" t-value="o.invoice_line_ids.sorted(key=lambda l: (-l.sequence, l.date, l.move_name, -l.id), reverse=True)"/> | |||
| 
 | |||
|                             <t t-foreach="lines" t-as="line"> | |||
|                                 <t t-set="current_subtotal" t-value="current_subtotal + line.price_subtotal" groups="account.group_show_line_subtotals_tax_excluded"/> | |||
|                                 <t t-set="current_subtotal" t-value="current_subtotal + line.price_total" groups="account.group_show_line_subtotals_tax_included"/> | |||
| 
 | |||
|                                 <tr t-att-class="'bg-200 font-weight-bold o_line_section' if line.display_type == 'line_section' else 'font-italic o_line_note' if line.display_type == 'line_note' else ''" t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                                     <t t-if="not line.display_type" name="account_invoice_line_accountable"> | |||
|                                         <td name="account_invoice_line_name"><span t-field="line.name" t-options="{'widget': 'text'}"/></td> | |||
|                                         <td class="text-right"> | |||
|                                             <span t-field="line.quantity"/> | |||
|                                             <span t-field="line.product_uom_id"  groups="uom.group_uom"/> | |||
|                                         </td> | |||
|                                         <td t-attf-class="text-right {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                             <span class="text-nowrap" t-field="line.price_unit"/> | |||
|                                         </td> | |||
|                                         <td t-if="display_discount" t-attf-class="text-right {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                             <span class="text-nowrap" t-field="line.discount"/> | |||
|                                         </td> | |||
|                                         <td t-attf-class="text-left {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                             <span t-esc="', '.join(map(lambda x: (x.description or x.name), line.tax_ids))" id="line_tax_ids"/> | |||
|                                         </td> | |||
|                                         <td class="text-right o_price_total"> | |||
|                                             <span class="text-nowrap" t-field="line.price_subtotal" groups="account.group_show_line_subtotals_tax_excluded"/> | |||
|                                             <span class="text-nowrap" t-field="line.price_total" groups="account.group_show_line_subtotals_tax_included"/> | |||
|                                         </td> | |||
|                                     </t> | |||
|                                     <t t-if="line.display_type == 'line_section'"> | |||
|                                         <td colspan="99"> | |||
|                                             <span t-field="line.name" t-options="{'widget': 'text'}"/> | |||
|                                         </td> | |||
|                                         <t t-set="current_section" t-value="line"/> | |||
|                                         <t t-set="current_subtotal" t-value="0"/> | |||
|                                     </t> | |||
|                                     <t t-if="line.display_type == 'line_note'"> | |||
|                                         <td colspan="99"> | |||
|                                             <span t-field="line.name" t-options="{'widget': 'text'}"/> | |||
|                                         </td> | |||
|                                     </t> | |||
|                                 </tr> | |||
|                                 <t t-if="current_section and (line_last or lines[line_index+1].display_type == 'line_section')"> | |||
|                                     <tr class="is-subtotal text-right"> | |||
|                                         <td colspan="99"> | |||
|                                             <strong class="mr16">Subtotal</strong> | |||
|                                             <span | |||
|                                                 t-esc="current_subtotal" | |||
|                                                 t-options='{"widget": "monetary", "display_currency": o.currency_id}' | |||
|                                             /> | |||
|                                         </td> | |||
|                                     </tr> | |||
|                                 </t> | |||
|                             </t> | |||
|                         </tbody> | |||
|                     </table> | |||
|                         <div class="clearfix"> | |||
|                         <div id="total" class="row"> | |||
|                             <div t-attf-class="#{'col-6' if report_type != 'html' else 'col-sm-7 col-md-6'} ml-auto"> | |||
|                                 <table class="table table-sm" t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};" style="page-break-inside: avoid;"> | |||
|                                     <tr class="border-black o_subtotal" style=""> | |||
|                                         <td><strong>Subtotal</strong></td> | |||
|                                         <td class="text-right"> | |||
|                                             <span t-field="o.amount_untaxed"/> | |||
|                                         </td> | |||
|                                     </tr> | |||
|                                     <t t-foreach="o.amount_by_group" t-as="amount_by_group"> | |||
|                                         <tr style=""> | |||
|                                             <t t-if="len(o.line_ids.filtered(lambda line: line.tax_line_id)) in [0, 1] and float_compare(o.amount_untaxed, amount_by_group[2], precision_rounding=o.currency_id.rounding) == 0"> | |||
|                                                 <td><span class="text-nowrap" t-esc="amount_by_group[0]"/></td> | |||
|                                                 <td class="text-right o_price_total"> | |||
|                                                     <span class="text-nowrap" t-esc="amount_by_group[3]" /> | |||
|                                                 </td> | |||
|                                             </t> | |||
|                                             <t t-else=""> | |||
|                                                 <td> | |||
|                                                     <span t-esc="amount_by_group[0]"/> | |||
|                                                     <span class="text-nowrap"> on | |||
|                                                         <t t-esc="amount_by_group[4]"/> | |||
|                                                     </span> | |||
|                                                 </td> | |||
|                                                 <td class="text-right o_price_total"> | |||
|                                                     <span class="text-nowrap" t-esc="amount_by_group[3]"/> | |||
|                                                 </td> | |||
|                                             </t> | |||
|                                         </tr> | |||
|                                     </t> | |||
|                                     <tr class="border-black o_total"> | |||
|                                         <td><strong>Total</strong></td> | |||
|                                         <td class="text-right"> | |||
|                                             <span class="text-nowrap" t-field="o.amount_total"/> | |||
|                                         </td> | |||
|                                     </tr> | |||
|                                     <t t-if="print_with_payments"> | |||
|                                         <t t-if="o.payment_state != 'invoicing_legacy'"> | |||
|                                             <t t-set="payments_vals" t-value="o.sudo()._get_reconciled_info_JSON_values()"/> | |||
|                                             <t t-foreach="payments_vals" t-as="payment_vals"> | |||
|                                                 <tr> | |||
|                                                     <td> | |||
|                                                         <i class="oe_form_field text-right oe_payment_label">Paid on <t t-esc="payment_vals['date']" t-options='{"widget": "date"}'/></i> | |||
|                                                     </td> | |||
|                                                     <td class="text-right"> | |||
|                                                         <span t-esc="payment_vals['amount']" t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                                     </td> | |||
|                                                 </tr> | |||
|                                             </t> | |||
|                                             <t t-if="len(payments_vals) > 0"> | |||
|                                                 <tr class="border-black"> | |||
|                                                     <td><strong>Amount Due</strong></td> | |||
|                                                     <td class="text-right"> | |||
|                                                         <span t-field="o.amount_residual"/> | |||
|                                                     </td> | |||
|                                                 </tr> | |||
|                                             </t> | |||
|                                         </t> | |||
|                                     </t> | |||
|                                 </table> | |||
|                             </div> | |||
|                         </div> | |||
|                     </div>                </div> | |||
|                 <p t-if="o.narration" name="comment"> | |||
|                         <span t-field="o.narration"/> | |||
|                 </p> | |||
|                 <p t-if="o.fiscal_position_id.note" name="note"> | |||
|                         <span t-field="o.fiscal_position_id.note"/> | |||
|                 </p> | |||
|                 <p t-if="o.invoice_incoterm_id" name="incoterm"> | |||
|                     <strong>Incoterm:</strong> | |||
|                     <span t-field="o.invoice_incoterm_id.code"/> | |||
|                     - | |||
|                     <span t-field="o.invoice_incoterm_id.name"/> | |||
|                 </p> | |||
|                 <div id="qrcode" | |||
|                      t-if="o.display_qr_code and o.amount_residual > 0"> | |||
|                     <p t-if="qr_code_urls.get(o.id)"> | |||
|                         <strong class="text-center">Scan me with your banking | |||
|                             app. | |||
|                         </strong> | |||
|                         <br/> | |||
|                         <br/> | |||
|                         <img class="border border-dark rounded" | |||
|                              t-att-src="qr_code_urls[o.id]"/> | |||
|                     </p> | |||
|                 </div> | |||
|             </div> | |||
|         </t> | |||
|     </template> | |||
| </odoo> | |||
| @ -0,0 +1,336 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--Account Traditional Template--> | |||
|     <template id="report_invoice_custom"> | |||
|         <t t-call="web.html_container"> | |||
|             <t t-foreach="docs" t-as="o"> | |||
|                 <t t-set="lang" t-value="o.partner_id.lang"/> | |||
|                 <t t-if="o._get_name_invoice_report() == 'base_advanced_report_templates.report_invoice_custom'"/> | |||
|                 <t t-if="o.theme_id.name=='Traditional'"> | |||
|                     <t t-call="base_advanced_report_templates.report_account_traditional_document" | |||
|                        t-lang="ang"/> | |||
|                 </t> | |||
|                 <t t-elif="o.theme_id.name=='Standard'"> | |||
|                     <t t-call="base_advanced_report_templates.report_account_standard_document" | |||
|                        t-lang="lang"/> | |||
|                 </t> | |||
|                 <t t-elif="o.theme_id.name=='Modern'"> | |||
|                     <t t-call="base_advanced_report_templates.report_account_modern_document" | |||
|                        t-lang="lang"/> | |||
|                 </t> | |||
|                 <t t-elif="o.theme_id.name=='Attractive'"> | |||
|                     <t t-call="base_advanced_report_templates.report_account_attractive_document" | |||
|                        t-lang="lang"/> | |||
|                 </t> | |||
|                 <t t-else=""> | |||
|                     <t t-call="account.report_invoice_document" | |||
|                        t-lang="lang"/> | |||
|                 </t> | |||
|             </t> | |||
|         </t> | |||
|     </template> | |||
|     <template id="report_account_traditional_document"> | |||
|         <t t-if="o and 'company_id' in o"> | |||
|             <t t-set="company" t-value="o.company_id"/> | |||
|         </t> | |||
|         <t t-if="not o or not 'company_id' in o"> | |||
|             <t t-set="company" t-value="res_company"/> | |||
|         </t> | |||
|         <div class="header row mt32 mb32"> | |||
|             <div class="page-header col-12"> | |||
|                 <div t-attf-style="text-align:#{o.theme_id.logo_position};"> | |||
|                     <t t-if="company.logo"> | |||
|                         <img t-if="company.logo" | |||
|                              t-att-src="image_data_uri(company.logo)" | |||
|                              style="max-height: 80px;"/> | |||
|                     </t> | |||
|                 </div> | |||
|                 <div t-attf-style="text-align:#{o.theme_id.company_position};"> | |||
|                     <div t-attf-style="font:14px lucida-console,sans-serif; color:#{o.theme_id.company_text_color} !important;"> | |||
|                         <span t-field="company.partner_id"/> | |||
|                         <br/> | |||
|                         <span t-field="company.partner_id.street"/> | |||
|                         <br/> | |||
|                         <span t-field="company.partner_id.street2"/> | |||
|                         <br/> | |||
|                         <span t-field="company.partner_id.city"/> | |||
|                         <br/> | |||
|                         <span t-field="company.partner_id.country_id"/> | |||
|                         <br/> | |||
|                         <span t-field="company.partner_id.vat"/> | |||
|                         <br/> | |||
|                     </div> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|         <t t-call="web.external_layout"> | |||
|             <t t-set="o" t-value="o.with_context(lang=lang)"/> | |||
|             <div class="mt-5"> | |||
|                 <div class="page"> | |||
|                     <h1 style="size:200px;"> | |||
|                         <span t-if="o.move_type == 'out_invoice' and o.state == 'posted'"> | |||
|                             Invoice | |||
|                         </span> | |||
|                         <span t-if="o.move_type == 'out_invoice' and o.state == 'draft'"> | |||
|                             Draft Invoice | |||
|                         </span> | |||
|                         <span t-if="o.move_type == 'out_invoice' and o.state == 'cancel'"> | |||
|                             Cancelled Invoice | |||
|                         </span> | |||
|                         <span t-if="o.move_type == 'out_refund'">Credit Note | |||
|                         </span> | |||
|                         <span t-if="o.move_type == 'in_refund'">Vendor Credit | |||
|                             Note | |||
|                         </span> | |||
|                         <span t-if="o.move_type == 'in_invoice'">Vendor Bill | |||
|                         </span> | |||
|                         <span t-if="o.name != '/'" t-field="o.name"/> | |||
|                     </h1> | |||
|                     <table class="table table-sm o_main_table" | |||
|                            name="invoice_line_table"> | |||
|                         <thead t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};" | |||
|                                class="col-12"> | |||
|                             <tr> | |||
|                                 <th class="text-start"> | |||
|                                     Customer | |||
|                                 </th> | |||
|                                 <th t-if="o.move_type == 'out_invoice'" | |||
|                                     name="th_description"> | |||
|                                     Invoice Date: | |||
|                                 </th> | |||
|                                 <th t-if="o.move_type == 'out_refund'" | |||
|                                     name="th_description"> | |||
|                                     Credit Note Date | |||
|                                 </th> | |||
|                                 <th t-if="o.move_type == 'out_receipt'" | |||
|                                     name="th_description"> | |||
|                                 </th> | |||
|                                 <th t-if="o.move_type == 'out_refund'" | |||
|                                     name="th_description"> | |||
|                                     Receipt Date | |||
|                                 </th> | |||
|                                 <th t-if="o.move_type == 'out_refund'" | |||
|                                     name="th_description"> | |||
|                                     Receipt Date | |||
|                                 </th> | |||
|                                 <th t-else="" name="th_description">Date | |||
|                                 </th> | |||
|                                 <th t-if="o.ref" name="th_description"> | |||
|                                     Reference | |||
|                                 </th> | |||
|                             </tr> | |||
|                         </thead> | |||
|                         <tbody> | |||
|                             <tr t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                                 <td> | |||
|                                     <address class="mb-0" t-field="o.partner_id" | |||
|                                              t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/> | |||
|                                     <div t-if="o.partner_id.vat"> | |||
|                                         <t t-if="o.company_id.account_fiscal_country_id.vat_label" | |||
|                                            t-esc="o.company_id.account_fiscal_country_id.vat_label" | |||
|                                            id="inv_tax_id_label"/> | |||
|                                         <t t-else="">Tax ID</t>: | |||
|                                         <span t-field="o.partner_id.vat"/> | |||
|                                     </div> | |||
|                                 </td> | |||
|                                 <td class="text-end"> | |||
|                                     <p class="m-0" t-field="o.invoice_date"/> | |||
|                                 </td> | |||
|                                 <td class="text-end"> | |||
|                                     <p class="m-0" | |||
|                                        t-field="o.invoice_date_due"/> | |||
|                                 </td> | |||
|                                 <td class="text-end"> | |||
|                                     <p class="m-0" t-field="o.ref"/> | |||
|                                 </td> | |||
|                             </tr> | |||
|                         </tbody> | |||
|                     </table> | |||
|                     <t t-set="display_discount" | |||
|                        t-value="any(l.discount for l in o.invoice_line_ids)"/> | |||
|                     <table class="table table-sm o_main_table" | |||
|                            name="invoice_line_table"> | |||
|                         <thead t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                             <tr> | |||
|                                 <th name="th_description" class="text-start"> | |||
|                                     <span>Description</span> | |||
|                                 </th> | |||
|                                 <th name="th_product" class="text-start"> | |||
|                                     <span>Product</span> | |||
|                                 </th> | |||
|                                 <th name="th_quantity" class="text-end"> | |||
|                                     <span>Quantity</span> | |||
|                                 </th> | |||
|                                 <th name="th_priceunit" | |||
|                                     t-attf-class="text-end {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                     <span>Unit Price</span> | |||
|                                 </th> | |||
|                                 <th name="th_price_unit" t-if="display_discount" | |||
|                                     t-attf-class="text-end {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                     <span>Disc.%</span> | |||
|                                 </th> | |||
|                                 <th name="th_taxes" | |||
|                                     t-attf-class="text-start {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                     <span>Taxes</span> | |||
|                                 </th> | |||
|                                 <th name="th_subtotal" class="text-end"> | |||
|                                     <span groups="account.group_show_line_subtotals_tax_excluded"> | |||
|                                         Amount | |||
|                                     </span> | |||
|                                     <span groups="account.group_show_line_subtotals_tax_included"> | |||
|                                         Total Price | |||
|                                     </span> | |||
|                                 </th> | |||
|                             </tr> | |||
|                         </thead> | |||
|                         <tbody class="invoice_tbody"> | |||
|                             <t t-set="current_subtotal" t-value="0"/> | |||
|                             <t t-set="lines" | |||
|                                t-value="o.invoice_line_ids.sorted(key=lambda l: (-l.sequence, l.date, l.move_name, -l.id), reverse=True)"/> | |||
|                             <t t-foreach="lines" t-as="line"> | |||
|                                 <t t-set="current_subtotal" | |||
|                                    t-value="current_subtotal + line.price_subtotal" | |||
|                                    groups="account.group_show_line_subtotals_tax_excluded"/> | |||
|                                 <t t-set="current_subtotal" | |||
|                                    t-value="current_subtotal + line.price_total" | |||
|                                    groups="account.group_show_line_subtotals_tax_included"/> | |||
|                                 <tr t-attf-style="color:#{o.theme_id.customer_text_color} !important;" | |||
|                                     t-att-class="'bg-200 fw-bold o_line_section' if line.display_type == 'line_section' else 'fst-italic o_line_note' if line.display_type == 'line_note' else ''"> | |||
|                                     <t t-if="not line.display_type" | |||
|                                        name="account_invoice_line_accountable"> | |||
|                                         <td name="account_invoice_line_name"> | |||
|                                             <span t-field="line.name" | |||
|                                                   t-options="{'widget': 'text'}"/> | |||
|                                         </td> | |||
|                                         <td name="td_image"> | |||
|                                             <span t-field="line.order_line_image" | |||
|                                                   t-options="{'widget': 'image'}"/> | |||
|                                         </td> | |||
|                                         <td class="text-end"> | |||
|                                             <span t-field="line.quantity"/> | |||
|                                             <span t-field="line.product_uom_id" | |||
|                                                   groups="uom.group_uom"/> | |||
|                                         </td> | |||
|                                         <td t-attf-class="text-end {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                             <span class="text-nowrap" | |||
|                                                   t-field="line.price_unit"/> | |||
|                                         </td> | |||
|                                         <td t-if="display_discount" | |||
|                                             t-attf-class="text-end {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                             <span class="text-nowrap" | |||
|                                                   t-field="line.discount"/> | |||
|                                         </td> | |||
|                                         <td t-attf-class="text-start {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"> | |||
|                                             <span t-esc="', '.join(map(lambda x: (x.description or x.name), line.tax_ids))" | |||
|                                                   id="line_tax_ids"/> | |||
|                                         </td> | |||
|                                         <td class="text-end o_price_total"> | |||
|                                             <span class="text-nowrap" | |||
|                                                   t-field="line.price_subtotal" | |||
|                                                   groups="account.group_show_line_subtotals_tax_excluded"/> | |||
|                                             <span class="text-nowrap" | |||
|                                                   t-field="line.price_total" | |||
|                                                   groups="account.group_show_line_subtotals_tax_included"/> | |||
|                                         </td> | |||
|                                     </t> | |||
|                                     <t t-if="line.display_type == 'line_section'"> | |||
|                                         <td colspan="99"> | |||
|                                             <span t-field="line.name" | |||
|                                                   t-options="{'widget': 'text'}"/> | |||
|                                         </td> | |||
|                                         <t t-set="current_section" | |||
|                                            t-value="line"/> | |||
|                                         <t t-set="current_subtotal" | |||
|                                            t-value="0"/> | |||
|                                     </t> | |||
|                                     <t t-if="line.display_type == 'line_note'"> | |||
|                                         <td colspan="99"> | |||
|                                             <span t-field="line.name" | |||
|                                                   t-options="{'widget': 'text'}"/> | |||
|                                         </td> | |||
|                                     </t> | |||
|                                 </tr> | |||
|                                 <t t-if="current_section and (line_last or lines[line_index+1].display_type == 'line_section')"> | |||
|                                     <tr class="is-subtotal text-end"> | |||
|                                         <td colspan="99"> | |||
|                                             <strong class="mr16">Subtotal | |||
|                                             </strong> | |||
|                                             <span | |||
|                                                     t-esc="current_subtotal" | |||
|                                                     t-options='{"widget": "monetary", "display_currency": o.currency_id}' | |||
|                                             /> | |||
|                                         </td> | |||
|                                     </tr> | |||
|                                 </t> | |||
|                             </t> | |||
|                         </tbody> | |||
|                     </table> | |||
|                     <div class="clearfix"> | |||
|                         <div id="total" class="row"> | |||
|                             <div t-attf-class="#{'col-6' if report_type != 'html' else 'col-sm-7 col-md-6'} ml-auto"> | |||
|                                 <table class="table table-sm" style="page-break-inside: avoid;"> | |||
|                                     <tr class="border-black o_subtotal" style=""> | |||
|                                         <td><strong>Subtotal</strong></td> | |||
|                                         <td class="text-right"> | |||
|                                             <span t-field="o.amount_untaxed"/> | |||
|                                         </td> | |||
|                                     </tr> | |||
|                                     <t t-foreach="o.amount_by_group" t-as="amount_by_group"> | |||
|                                         <tr style=""> | |||
|                                             <t t-if="len(o.line_ids.filtered(lambda line: line.tax_line_id)) in [0, 1] and float_compare(o.amount_untaxed, amount_by_group[2], precision_rounding=o.currency_id.rounding) == 0"> | |||
|                                                 <td><span class="text-nowrap" t-esc="amount_by_group[0]"/></td> | |||
|                                                 <td class="text-right o_price_total"> | |||
|                                                     <span class="text-nowrap" t-esc="amount_by_group[3]" /> | |||
|                                                 </td> | |||
|                                             </t> | |||
|                                             <t t-else=""> | |||
|                                                 <td> | |||
|                                                     <span t-esc="amount_by_group[0]"/> | |||
|                                                     <span class="text-nowrap"> on | |||
|                                                         <t t-esc="amount_by_group[4]"/> | |||
|                                                     </span> | |||
|                                                 </td> | |||
|                                                 <td class="text-right o_price_total"> | |||
|                                                     <span class="text-nowrap" t-esc="amount_by_group[3]"/> | |||
|                                                 </td> | |||
|                                             </t> | |||
|                                         </tr> | |||
|                                     </t> | |||
|                                     <tr class="border-black o_total"> | |||
|                                         <td><strong>Total</strong></td> | |||
|                                         <td class="text-right"> | |||
|                                             <span class="text-nowrap" t-field="o.amount_total"/> | |||
|                                         </td> | |||
|                                     </tr> | |||
|                                     <t t-if="print_with_payments"> | |||
|                                         <t t-if="o.payment_state != 'invoicing_legacy'"> | |||
|                                             <t t-set="payments_vals" t-value="o.sudo()._get_reconciled_info_JSON_values()"/> | |||
|                                             <t t-foreach="payments_vals" t-as="payment_vals"> | |||
|                                                 <tr> | |||
|                                                     <td> | |||
|                                                         <i class="oe_form_field text-right oe_payment_label">Paid on <t t-esc="payment_vals['date']" t-options='{"widget": "date"}'/></i> | |||
|                                                     </td> | |||
|                                                     <td class="text-right"> | |||
|                                                         <span t-esc="payment_vals['amount']" t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                                     </td> | |||
|                                                 </tr> | |||
|                                             </t> | |||
|                                             <t t-if="len(payments_vals) > 0"> | |||
|                                                 <tr class="border-black"> | |||
|                                                     <td><strong>Amount Due</strong></td> | |||
|                                                     <td class="text-right"> | |||
|                                                         <span t-field="o.amount_residual"/> | |||
|                                                     </td> | |||
|                                                 </tr> | |||
|                                             </t> | |||
|                                         </t> | |||
|                                     </t> | |||
|                                 </table> | |||
|                             </div> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|             </div> | |||
|         </t> | |||
|     </template> | |||
| </odoo> | |||
| @ -0,0 +1,217 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--    Purchase Attractive Template--> | |||
|     <template id="report_purchaseorder_attractive_document"> | |||
|         <t t-if="o and 'company_id' in o"> | |||
|             <t t-set="company" t-value="o.company_id"/> | |||
|         </t> | |||
|         <t t-if="not o or not 'company_id' in o"> | |||
|             <t t-set="company" t-value="res_company"/> | |||
|         </t> | |||
|         <div class="header row mt32 mb32"> | |||
|             <div class="page-header col-12"> | |||
|                 <div t-attf-class="pull-left"> | |||
|                     <t t-if="company.logo"> | |||
|                         <img t-if="company.logo" | |||
|                              t-att-src="image_data_uri(company.logo)" | |||
|                              style="max-height: 80px;"/> | |||
|                     </t> | |||
|                 </div> | |||
|                 <div t-attf-class="pull-left" | |||
|                      t-attf-style="font:14px lucida-console,sans-serif; color:#{o.theme_id.company_text_color} !important;"> | |||
|                     <span t-field="company.partner_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street2"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.city"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.country_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.vat"/> | |||
|                     <br/> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|         <t t-call="web.external_layout"> | |||
|             <t t-set="o" t-value="o.with_context(lang=o.partner_id.lang)"/> | |||
|             <t t-set="address"> | |||
|                 <div class="mt-4" | |||
|                      t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                     <h4 t-if="o.state in ['draft', 'sent', 'to approve']"> | |||
|                         Request for Quotation # | |||
|                         <span t-field="o.name"/> | |||
|                     </h4> | |||
|                     <h4 t-if="o.state in ['purchase', 'done']">Purchase Order # | |||
|                         <span t-field="o.name"/> | |||
|                     </h4> | |||
|                     <h2 t-if="o.state == 'cancel'">Cancelled Purchase Order # | |||
|                         <span t-field="o.name"/> | |||
|                     </h2> | |||
|                 </div> | |||
|             </t> | |||
|             <table class="table table-sm mt-4" | |||
|                    t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                 <thead style="display: table-row-group"> | |||
|                     <tr t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                         <th name="th_description" class="text-center"> | |||
|                             <strong>Vendor</strong> | |||
|                         </th> | |||
|                         <th t-if="o.dest_address_id" class="text-center"> | |||
|                             <strong>Shipping Address</strong> | |||
|                         </th> | |||
|                     </tr> | |||
|                 </thead> | |||
|                 <tbody> | |||
|                     <tr t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                         <td class="text-center"> | |||
|                             <div t-field="o.partner_id" | |||
|                                  t-options='{"widget": "contact", "fields": ["address", "name", "phone", "vat"], "no_marker": True, "phone_icons": True}'/> | |||
|                         </td> | |||
|                         <td class="text-end"> | |||
|                             <t t-if="o.dest_address_id"> | |||
|                                 <t t-set="information_block"> | |||
|                                     <strong>Shipping address:</strong> | |||
|                                     <div t-field="o.dest_address_id" | |||
|                                          t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}' | |||
|                                          name="purchase_shipping_address"/> | |||
|                                 </t> | |||
|                             </t> | |||
|                         </td> | |||
|                     </tr> | |||
|                 </tbody> | |||
|             </table> | |||
|             <br/> | |||
|             <br/> | |||
|             <table class="table table-sm o_main_table mt-4"> | |||
|                 <thead t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                     <tr> | |||
|                         <th name="th_description"> | |||
|                             <strong>Order Date</strong> | |||
|                         </th> | |||
|                         <th name="th_taxes"> | |||
|                             <strong>Scheduled Date</strong> | |||
|                         </th> | |||
|                         <th name="th_date_req" class="text-center"> | |||
|                             <strong>Approval Date</strong> | |||
|                         </th> | |||
|                         <th name="th_quantity" class="text-end"> | |||
|                             <strong>Payment Term</strong> | |||
|                         </th> | |||
|                     </tr> | |||
|                 </thead> | |||
|                 <tbody> | |||
|                     <tr t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                         <td class="text-end"> | |||
|                             <div t-if="o.date_order"> | |||
|                                 <span t-field="o.date_order" class="m-0"/> | |||
|                             </div> | |||
|                         </td> | |||
|                         <td class="text-end"> | |||
|                             <div t-if="o.date_planned"> | |||
|                                 <span t-field="o.date_planned" class="m-0"/> | |||
|                             </div> | |||
|                         </td> | |||
|                         <td class="text-end"> | |||
|                             <div t-if="o.state in ['purchase','done'] and o.date_approve"> | |||
|                                 <span t-field="o.date_approve" class="m-0"/> | |||
|                             </div> | |||
|                         </td> | |||
|                         <td class="text-end"> | |||
|                             <div t-if="o.payment_term_id"> | |||
|                                 <span t-field="o.payment_term_id.name" | |||
|                                       class="m-0"/> | |||
|                             </div> | |||
|                         </td> | |||
|                     </tr> | |||
|                 </tbody> | |||
|             </table> | |||
|             <br/> | |||
|             <br/> | |||
|             <br/> | |||
|             <br/> | |||
|             <div class="page"> | |||
|                 <div class="oe_structure"/> | |||
|                 <table class="table table-sm mt-4"> | |||
|                     <thead t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                         <tr> | |||
|                             <th name="th_description"> | |||
|                                 <strong>Description</strong> | |||
|                             </th> | |||
|                             <th name="th_expected_date" class="text-center"> | |||
|                                 <strong>Expected Date</strong> | |||
|                             </th> | |||
|                             <th name="th_quantity" class="text-end"> | |||
|                                 <strong>Qty</strong> | |||
|                             </th> | |||
|                         </tr> | |||
|                     </thead> | |||
|                     <tbody> | |||
|                         <t t-foreach="o.order_line" t-as="order_line"> | |||
|                             <tr t-attf-style="color:#{o.theme_id.customer_text_color} !important;" | |||
|                                 t-att-class="'bg-200 fw-bold o_line_section' if order_line.display_type == 'line_section' else 'fst-italic o_line_note' if order_line.display_type == 'line_note' else ''"> | |||
|                                 <t t-if="not order_line.display_type"> | |||
|                                     <td id="product"> | |||
|                                         <span t-field="order_line.name"/> | |||
|                                     </td> | |||
|                                     <td class="text-center"> | |||
|                                         <span t-field="order_line.date_planned"/> | |||
|                                     </td> | |||
|                                     <td class="text-end"> | |||
|                                         <span t-field="order_line.product_qty"/> | |||
|                                         <span t-field="order_line.product_uom" | |||
|                                               groups="uom.group_uom"/> | |||
|                                     </td> | |||
|                                 </t> | |||
|                                 <t t-else=""> | |||
|                                     <td colspan="99" id="section"> | |||
|                                         <span t-field="order_line.name"/> | |||
|                                     </td> | |||
|                                 </t> | |||
|                             </tr> | |||
|                         </t> | |||
|                     </tbody> | |||
|                 </table> | |||
|                 <div id="total" class="row justify-content-end" | |||
|                      t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                     <div class="col-4"> | |||
|                         <table class="table table-sm"> | |||
|                             <tr class="border-black"> | |||
|                                 <td name="td_subtotal_label"> | |||
|                                     <strong>Subtotal</strong> | |||
|                                 </td> | |||
|                                 <td class="text-right"> | |||
|                                     <span t-field="o.amount_untaxed" | |||
|                                           t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                 </td> | |||
|                             </tr> | |||
|                             <tr> | |||
|                                 <td name="td_taxes_label">Taxes</td> | |||
|                                 <td class="text-right"> | |||
|                                     <span t-field="o.amount_tax" | |||
|                                           t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                 </td> | |||
|                             </tr> | |||
|                             <tr class="border-black o_total"> | |||
|                                 <td name="td_amount_total_label"> | |||
|                                     <strong>Total</strong> | |||
|                                 </td> | |||
|                                 <td class="text-right"> | |||
|                                     <span t-field="o.amount_total" | |||
|                                           t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                 </td> | |||
|                             </tr> | |||
|                         </table> | |||
|                     </div> | |||
|                 </div> | |||
|                 <br/> | |||
|                 <div t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                     <span>Note</span> | |||
|                     <p t-field="o.notes" class="mt-4"/> | |||
|                     <div class="oe_structure"/> | |||
|                 </div> | |||
|             </div> | |||
|         </t> | |||
|     </template> | |||
| </odoo> | |||
| @ -0,0 +1,262 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--    Purchase Modern Template--> | |||
|     <template id="report_purchaseorder_modern_document"> | |||
|         <t t-if="o and 'company_id' in o"> | |||
|             <t t-set="company" t-value="o.company_id"/> | |||
|         </t> | |||
|         <t t-if="not o or not 'company_id' in o"> | |||
|             <t t-set="company" t-value="res_company"/> | |||
|         </t> | |||
|         <div class="header row mt32 mb32"> | |||
|             <div class="page-header col-12"> | |||
|                 <div t-attf-class="pull-left"> | |||
|                     <t t-if="company.logo"> | |||
|                         <img t-if="company.logo" | |||
|                              t-att-src="image_data_uri(company.logo)" | |||
|                              style="max-height: 80px;"/> | |||
|                     </t> | |||
|                 </div> | |||
|                 <div t-attf-class="pull-left" | |||
|                      t-attf-style="font:14px lucida-console,sans-serif; color:#{o.theme_id.company_text_color} !important;"> | |||
|                     <span t-field="company.partner_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street2"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.city"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.country_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.vat"/> | |||
|                     <br/> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|         <t t-call="web.external_layout"> | |||
|             <t t-set="o" t-value="o.with_context(lang=o.partner_id.lang)"/> | |||
|             <div class="page"> | |||
|                 <table class="table table-sm o_main_table mt-4"> | |||
|                     <thead t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                         <tr> | |||
|                             <th name="th_description" class="text-start"> | |||
|                                 <strong>Vendor</strong> | |||
|                             </th> | |||
|                             <th name="th_taxes" t-if="o.dest_address_id" | |||
|                                 class="text-end"> | |||
|                                 <strong>Shipping Address</strong> | |||
|                             </th> | |||
|                             <th name="th_date_req" t-if="o.partner_ref" | |||
|                                 class="text-end"> | |||
|                                 <strong>Reference/Description</strong> | |||
|                             </th> | |||
|                             <th t-if="o.state in ['draft', 'sent', 'to approve']" | |||
|                                 name="th_quantity" class="text-end"> | |||
|                                 <strong>Request For Quotation</strong> | |||
|                             </th> | |||
|                             <th t-if="o.state in ['purchase', 'done']" | |||
|                                 name="th_quantity" class="text-end"> | |||
|                                 <strong>Purchase Order</strong> | |||
|                             </th> | |||
|                             <th t-if="o.state == 'cancel'" name="th_quantity" | |||
|                                 class="text-end"> | |||
|                                 <strong>Cancelled Purchase Order #</strong> | |||
|                             </th> | |||
|                         </tr> | |||
|                     </thead> | |||
|                     <tbody> | |||
|                         <tr t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                             <td class="text-start"> | |||
|                                 <div t-field="o.partner_id" | |||
|                                      t-options='{"widget": "contact", "fields": ["address", "name", "phone", "vat"], "no_marker": True, "phone_icons": True}'/> | |||
|                             </td> | |||
|                             <td class="text-end" t-if="o.dest_address_id"> | |||
|                                 <t t-if="o.dest_address_id"> | |||
|                                     <t t-set="information_block"> | |||
|                                         <div t-if="o.dest_address_id"> | |||
|                                             <div t-field="o.dest_address_id" | |||
|                                                  t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}' | |||
|                                                  name="purchase_shipping_address"/> | |||
|                                         </div> | |||
|                                     </t> | |||
|                                 </t> | |||
|                             </td> | |||
|                             <td class="text-end" t-if="o.partner_ref"> | |||
|                                 <div t-if="o.partner_ref"> | |||
|                                     <p t-field="o.partner_ref" class="m-0"/> | |||
|                                 </div> | |||
|                             </td> | |||
|                             <td class="text-end"> | |||
|                                 <span t-field="o.name"/> | |||
|                             </td> | |||
|                         </tr> | |||
|                     </tbody> | |||
|                 </table> | |||
|                 <br/> | |||
|                 <br/> | |||
|                 <table class="table table-sm o_main_table mt-4"> | |||
|                     <thead t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                         <tr> | |||
|                             <th name="th_description"> | |||
|                                 <strong>Order Date</strong> | |||
|                             </th> | |||
|                             <th name="th_taxes"> | |||
|                                 <strong>Scheduled Date</strong> | |||
|                             </th> | |||
|                             <th name="th_date_req" class="text-center"> | |||
|                                 <strong>Approval Date</strong> | |||
|                             </th> | |||
|                             <th name="th_quantity" class="text-end"> | |||
|                                 <strong>Payment Term</strong> | |||
|                             </th> | |||
|                         </tr> | |||
|                     </thead> | |||
|                     <tbody> | |||
|                         <tr t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                             <td class="text-end"> | |||
|                                 <div t-if="o.date_order"> | |||
|                                     <span t-field="o.date_order" class="m-0"/> | |||
|                                 </div> | |||
|                             </td> | |||
|                             <td class="text-end"> | |||
|                                 <div t-if="o.date_planned"> | |||
|                                     <span t-field="o.date_planned" class="m-0"/> | |||
|                                 </div> | |||
|                             </td> | |||
|                             <td class="text-end"> | |||
|                                 <div t-if="o.state in ['purchase','done'] and o.date_approve"> | |||
|                                     <span t-field="o.date_approve" class="m-0"/> | |||
|                                 </div> | |||
|                             </td> | |||
|                             <td class="text-end"> | |||
|                                 <div t-if="o.payment_term_id"> | |||
|                                     <span t-field="o.payment_term_id.name" | |||
|                                           class="m-0"/> | |||
|                                 </div> | |||
|                             </td> | |||
|                         </tr> | |||
|                     </tbody> | |||
|                 </table> | |||
|                 <table class="table table-sm o_main_table mt-4"> | |||
|                     <thead t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                         <tr> | |||
|                             <th name="th_description"> | |||
|                                 <strong>Description</strong> | |||
|                             </th> | |||
|                             <th name="th_taxes"> | |||
|                                 <strong>Taxes</strong> | |||
|                             </th> | |||
|                             <th name="th_date_req" class="text-center"> | |||
|                                 <strong>Date Req.</strong> | |||
|                             </th> | |||
|                             <th name="th_quantity" class="text-end"> | |||
|                                 <strong>Qty</strong> | |||
|                             </th> | |||
|                             <th name="th_price_unit" class="text-end"> | |||
|                                 <strong>Unit Price</strong> | |||
|                             </th> | |||
|                             <th name="th_amount" class="text-end"> | |||
|                                 <strong>Amount</strong> | |||
|                             </th> | |||
|                         </tr> | |||
|                     </thead> | |||
|                     <tbody> | |||
|                         <t t-set="current_subtotal" t-value="0"/> | |||
|                         <t t-foreach="o.order_line" t-as="line"> | |||
|                             <t t-set="current_subtotal" | |||
|                                t-value="current_subtotal + line.price_subtotal" | |||
|                                groups="account.group_show_line_subtotals_tax_excluded"/> | |||
|                             <t t-set="current_subtotal" | |||
|                                t-value="current_subtotal + line.price_total" | |||
|                                groups="account.group_show_line_subtotals_tax_included"/> | |||
|                             <tr t-attf-style="color:#{o.theme_id.customer_text_color} !important;" | |||
|                                 t-att-class="'bg-200 fw-bold o_line_section' if line.display_type == 'line_section' else 'fst-italic o_line_note' if line.display_type == 'line_note' else ''"> | |||
|                                 <t t-if="not line.display_type"> | |||
|                                     <td id="product"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                     <td name="td_taxes"> | |||
|                                         <span t-esc="', '.join(map(lambda x: x.name, line.taxes_id))"/> | |||
|                                     </td> | |||
|                                     <td class="text-center"> | |||
|                                         <span t-field="line.date_planned"/> | |||
|                                     </td> | |||
|                                     <td class="text-end"> | |||
|                                         <span t-field="line.product_qty"/> | |||
|                                         <span t-field="line.product_uom.name" | |||
|                                               groups="uom.group_uom"/> | |||
|                                     </td> | |||
|                                     <td class="text-end"> | |||
|                                         <span t-field="line.price_unit"/> | |||
|                                     </td> | |||
|                                     <td class="text-end"> | |||
|                                         <span t-field="line.price_subtotal" | |||
|                                               t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                     </td> | |||
|                                 </t> | |||
|                                 <t t-if="line.display_type == 'line_section'"> | |||
|                                     <td colspan="99" id="section"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                     <t t-set="current_section" t-value="line"/> | |||
|                                     <t t-set="current_subtotal" t-value="0"/> | |||
|                                 </t> | |||
|                                 <t t-if="line.display_type == 'line_note'"> | |||
|                                     <td colspan="99" id="note"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                 </t> | |||
|                             </tr> | |||
|                             <t t-if="current_section and (line_last or o.order_line[line_index+1].display_type == 'line_section')"> | |||
|                                 <tr class="is-subtotal text-end"> | |||
|                                     <td colspan="99" id="subtotal"> | |||
|                                         <strong class="mr16">Subtotal</strong> | |||
|                                         <span t-esc="current_subtotal" | |||
|                                               t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                     </td> | |||
|                                 </tr> | |||
|                             </t> | |||
|                         </t> | |||
|                     </tbody> | |||
|                 </table> | |||
|                 <div id="total" class="row justify-content-end" | |||
|                      t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                     <div class="col-4"> | |||
|                         <table class="table table-sm"> | |||
|                             <tr class="border-black"> | |||
|                                 <td name="td_subtotal_label"> | |||
|                                     <strong>Subtotal</strong> | |||
|                                 </td> | |||
|                                 <td class="text-right"> | |||
|                                     <span t-field="o.amount_untaxed" | |||
|                                           t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                 </td> | |||
|                             </tr> | |||
|                             <tr> | |||
|                                 <td name="td_taxes_label">Taxes</td> | |||
|                                 <td class="text-right"> | |||
|                                     <span t-field="o.amount_tax" | |||
|                                           t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                 </td> | |||
|                             </tr> | |||
|                             <tr class="border-black o_total"> | |||
|                                 <td name="td_amount_total_label"> | |||
|                                     <strong>Total</strong> | |||
|                                 </td> | |||
|                                 <td class="text-right"> | |||
|                                     <span t-field="o.amount_total" | |||
|                                           t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                 </td> | |||
|                             </tr> | |||
|                         </table> | |||
|                     </div> | |||
|                 </div> | |||
|                 <div t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                     <p t-field="o.notes" class="mt-4"/> | |||
|                     <div class="oe_structure"/> | |||
|                 </div> | |||
|             </div> | |||
|         </t> | |||
|     </template> | |||
| </odoo> | |||
| @ -0,0 +1,26 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--    Report Function of RFQ in Purchase --> | |||
|     <record id="purchase.report_purchase_quotation" model="ir.actions.report"> | |||
|         <field name="name">Request for Quotation</field> | |||
|         <field name="model">purchase.order</field> | |||
|         <field name="report_type">qweb-pdf</field> | |||
|         <field name="report_name">base_advanced_report_templates.report_purchase_custom</field> | |||
|         <field name="report_file">base_advanced_report_templates.report_purchase_custom</field> | |||
|         <field name="print_report_name">'Request for Quotation - %s' % (object.name)</field> | |||
|         <field name="binding_model_id" ref="model_purchase_order"/> | |||
|         <field name="binding_type">report</field> | |||
|     </record> | |||
|     <!--    Report Function of Purchase Order in Purchase --> | |||
|     <record id="purchase.action_report_purchase_order" | |||
|             model="ir.actions.report"> | |||
|         <field name="name">Purchase Order</field> | |||
|         <field name="model">purchase.order</field> | |||
|         <field name="report_type">qweb-pdf</field> | |||
|         <field name="report_name">base_advanced_report_templates.report_purchase_custom</field> | |||
|         <field name="report_file">base_advanced_report_templates.report_purchase_custom</field> | |||
|         <field name="print_report_name">'Request for Quotation - %s' % (object.name)</field> | |||
|         <field name="binding_model_id" ref="model_purchase_order"/> | |||
|         <field name="binding_type">report</field> | |||
|     </record> | |||
| </odoo> | |||
| @ -0,0 +1,191 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--    Purchase Standard Template--> | |||
|     <template id="report_purchaseorder_standard_document"> | |||
|         <t t-if="o and 'company_id' in o"> | |||
|             <t t-set="company" t-value="o.company_id"/> | |||
|         </t> | |||
|         <t t-if="not o or not 'company_id' in o"> | |||
|             <t t-set="company" t-value="res_company"/> | |||
|         </t> | |||
|         <div class="header row mt32 mb32"> | |||
|             <div class="page-header col-12"> | |||
|                 <div t-attf-class="pull-left"> | |||
|                     <t t-if="company.logo"> | |||
|                         <img t-if="company.logo" | |||
|                              t-att-src="image_data_uri(company.logo)" | |||
|                              style="max-height: 80px;"/> | |||
|                     </t> | |||
|                 </div> | |||
|                 <div t-attf-class="pull-left" | |||
|                      t-attf-style="font:14px lucida-console,sans-serif; color:#{o.theme_id.company_text_color} !important;"> | |||
|                     <span t-field="company.partner_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street2"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.city"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.country_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.vat"/> | |||
|                     <br/> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|         <t t-call="web.external_layout"> | |||
|             <t t-set="o" t-value="o.with_context(lang=o.partner_id.lang)"/> | |||
|             <div class="page"> | |||
|                 <div class="oe_structure"/> | |||
|                 <div class="mt-4" | |||
|                      t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                     <h2 t-if="o.state in ['draft', 'sent', 'to approve']"> | |||
|                         Request for Quotation # | |||
|                         <span t-field="o.name"/> | |||
|                     </h2> | |||
|                     <h2 t-if="o.state in ['purchase', 'done']">Purchase Order # | |||
|                         <span t-field="o.name"/> | |||
|                     </h2> | |||
|                     <h2 t-if="o.state == 'cancel'">Cancelled Purchase Order # | |||
|                         <span t-field="o.name"/> | |||
|                     </h2> | |||
|                 </div> | |||
|                 <div t-field="o.partner_id" | |||
|                      t-options='{"widget": "contact", "fields": ["address", "name", "phone", "vat"], "no_marker": True, "phone_icons": True}'/> | |||
|                 <t t-if="o.dest_address_id"> | |||
|                     <t t-set="information_block"> | |||
|                         <strong>Shipping address:</strong> | |||
|                         <div t-if="o.dest_address_id"> | |||
|                             <div t-field="o.dest_address_id" | |||
|                                  t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}' | |||
|                                  name="purchase_shipping_address"/> | |||
|                         </div> | |||
|                     </t> | |||
|                 </t> | |||
|                 <table class="table table-sm o_main_table mt-4"> | |||
|                     <thead t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                         <tr> | |||
|                             <th name="th_description"> | |||
|                                 <strong>Description</strong> | |||
|                             </th> | |||
|                             <th name="th_taxes"> | |||
|                                 <strong>Taxes</strong> | |||
|                             </th> | |||
|                             <th name="th_date_req" class="text-center"> | |||
|                                 <strong>Date Req.</strong> | |||
|                             </th> | |||
|                             <th name="th_quantity" class="text-end"> | |||
|                                 <strong>Qty</strong> | |||
|                             </th> | |||
|                             <th name="th_price_unit" class="text-end"> | |||
|                                 <strong>Unit Price</strong> | |||
|                             </th> | |||
|                             <th name="th_amount" class="text-end"> | |||
|                                 <strong>Amount</strong> | |||
|                             </th> | |||
|                         </tr> | |||
|                     </thead> | |||
|                     <tbody> | |||
|                         <t t-set="current_subtotal" t-value="0"/> | |||
|                         <t t-foreach="o.order_line" t-as="line"> | |||
|                             <t t-set="current_subtotal" | |||
|                                t-value="current_subtotal + line.price_subtotal" | |||
|                                groups="account.group_show_line_subtotals_tax_excluded"/> | |||
|                             <t t-set="current_subtotal" | |||
|                                t-value="current_subtotal + line.price_total" | |||
|                                groups="account.group_show_line_subtotals_tax_included"/> | |||
|                             <tr t-attf-style="color:#{o.theme_id.customer_text_color} !important;" | |||
|                                 t-att-class="'bg-200 fw-bold o_line_section' if line.display_type == 'line_section' else 'fst-italic o_line_note' if line.display_type == 'line_note' else ''"> | |||
|                                 <t t-if="not line.display_type"> | |||
|                                     <td id="product"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                     <td name="td_taxes"> | |||
|                                         <span t-esc="', '.join(map(lambda x: x.name, line.taxes_id))"/> | |||
|                                     </td> | |||
|                                     <td class="text-center"> | |||
|                                         <span t-field="line.date_planned"/> | |||
|                                     </td> | |||
|                                     <td class="text-end"> | |||
|                                         <span t-field="line.product_qty"/> | |||
|                                         <span t-field="line.product_uom.name" | |||
|                                               groups="uom.group_uom"/> | |||
|                                     </td> | |||
|                                     <td class="text-end"> | |||
|                                         <span t-field="line.price_unit"/> | |||
|                                     </td> | |||
|                                     <td class="text-end"> | |||
|                                         <span t-field="line.price_subtotal" | |||
|                                               t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                     </td> | |||
|                                 </t> | |||
|                                 <t t-if="line.display_type == 'line_section'"> | |||
|                                     <td colspan="99" id="section"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                     <t t-set="current_section" t-value="line"/> | |||
|                                     <t t-set="current_subtotal" t-value="0"/> | |||
|                                 </t> | |||
|                                 <t t-if="line.display_type == 'line_note'"> | |||
|                                     <td colspan="99" id="note"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                 </t> | |||
|                             </tr> | |||
|                             <t t-if="current_section and (line_last or o.order_line[line_index+1].display_type == 'line_section')"> | |||
|                                 <tr class="is-subtotal text-end"> | |||
|                                     <td colspan="99" id="subtotal"> | |||
|                                         <strong class="mr16">Subtotal</strong> | |||
|                                         <span t-esc="current_subtotal" | |||
|                                               t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                     </td> | |||
|                                 </tr> | |||
|                             </t> | |||
|                         </t> | |||
|                     </tbody> | |||
|                 </table> | |||
|                 <div id="total" class="row justify-content-end" | |||
|                      t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                     <div class="col-4"> | |||
|                         <table class="table table-sm"> | |||
|                             <tr class="border-black"> | |||
|                                 <td name="td_subtotal_label"> | |||
|                                     <strong>Subtotal</strong> | |||
|                                 </td> | |||
|                                 <td class="text-right"> | |||
|                                     <span t-field="o.amount_untaxed" | |||
|                                           t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                 </td> | |||
|                             </tr> | |||
|                             <tr> | |||
|                                 <td name="td_taxes_label">Taxes</td> | |||
|                                 <td class="text-right"> | |||
|                                     <span t-field="o.amount_tax" | |||
|                                           t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                 </td> | |||
|                             </tr> | |||
|                             <tr class="border-black o_total"> | |||
|                                 <td name="td_amount_total_label"> | |||
|                                     <strong>Total</strong> | |||
|                                 </td> | |||
|                                 <td class="text-right"> | |||
|                                     <span t-field="o.amount_total" | |||
|                                           t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                 </td> | |||
|                             </tr> | |||
|                         </table> | |||
|                     </div> | |||
|                 </div> | |||
|                 <br/> | |||
|                 <br/> | |||
|                 <br/> | |||
|                 <div t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                     <span>Notes</span> | |||
|                     <p t-field="o.notes" class="mt-4"/> | |||
|                     <div class="oe_structure"/> | |||
|                 </div> | |||
|             </div> | |||
|         </t> | |||
|     </template> | |||
| </odoo> | |||
| @ -0,0 +1,249 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--    Purchase Traditional Template--> | |||
|     <template id="report_purchase_custom"> | |||
|         <t t-call="web.html_container"> | |||
|             <t t-foreach="docs" t-as="o"> | |||
|                 <t t-if="o.theme_id.name=='Traditional'"> | |||
|                     <t t-call="base_advanced_report_templates.report_purchaseorder_traditional_document" | |||
|                        t-lang="o.partner_id.lang"/> | |||
|                 </t> | |||
|                 <t t-elif="o.theme_id.name=='Standard'"> | |||
|                     <t t-call="base_advanced_report_templates.report_purchaseorder_standard_document" | |||
|                        t-lang="o.partner_id.lang"/> | |||
|                 </t> | |||
|                 <t t-elif="o.theme_id.name=='Modern'"> | |||
|                     <t t-call="base_advanced_report_templates.report_purchaseorder_modern_document" | |||
|                        t-lang="o.partner_id.lang"/> | |||
|                 </t> | |||
|                 <t t-elif="o.theme_id.name=='Attractive'"> | |||
|                     <t t-call="base_advanced_report_templates.report_purchaseorder_attractive_document" | |||
|                        t-lang="o.partner_id.lang"/> | |||
|                 </t> | |||
|             </t> | |||
|         </t> | |||
|     </template> | |||
|     <!-- Traditional Template Preview --> | |||
|     <template id="report_purchaseorder_traditional_document"> | |||
|         <t t-if="o and 'company_id' in o"> | |||
|             <t t-set="company" t-value="o.company_id"/> | |||
|         </t> | |||
|         <t t-if="not o or not 'company_id' in o"> | |||
|             <t t-set="company" t-value="res_company"/> | |||
|         </t> | |||
|         <div class="header row mt32 mb32"> | |||
|             <div class="page-header col-12"> | |||
|                 <div t-attf-class="pull-left"> | |||
|                     <t t-if="company.logo"> | |||
|                         <img t-if="company.logo" | |||
|                              t-att-src="image_data_uri(company.logo)" | |||
|                              style="max-height: 80px;"/> | |||
|                     </t> | |||
|                 </div> | |||
|                 <div t-attf-class="pull-left" | |||
|                      t-attf-style="font:14px lucida-console,sans-serif; color:#{o.theme_id.company_text_color} !important;"> | |||
|                     <span t-field="company.partner_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street2"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.city"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.country_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.vat"/> | |||
|                     <br/> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|         <t t-call="web.external_layout"> | |||
|             <t t-set="o" t-value="o.with_context(lang=o.partner_id.lang)"/> | |||
|             <div class="page"> | |||
|                 <div class="oe_structure"/> | |||
|                 <div class="mt-4"> | |||
|                     <h2 t-if="o.state in ['draft', 'sent', 'to approve']"> | |||
|                         Request for Quotation # | |||
|                         <span t-field="o.name"/> | |||
|                     </h2> | |||
|                     <h2 t-if="o.state in ['purchase', 'done']">Purchase Order # | |||
|                         <span t-field="o.name"/> | |||
|                     </h2> | |||
|                     <h2 t-if="o.state == 'cancel'">Cancelled Purchase Order # | |||
|                         <span t-field="o.name"/> | |||
|                     </h2> | |||
|                 </div> | |||
|                 <div id="informations" class="row mt-4 mb32"> | |||
|                     <div t-if="o.state in ['purchase','done'] and o.date_approve" | |||
|                          class="col-3 bm-2"> | |||
|                         <strong>Order Date:</strong> | |||
|                         <p t-field="o.date_approve" class="m-0"/> | |||
|                     </div> | |||
|                     <div t-elif="o.date_order" class="col-3 bm-2"> | |||
|                         <strong>Order Deadline:</strong> | |||
|                         <p t-field="o.date_order" class="m-0"/> | |||
|                     </div> | |||
|                 </div> | |||
|                 <table class="table table-sm o_main_table mt-4"> | |||
|                     <thead t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                         <tr> | |||
|                             <th name="th_description"> | |||
|                                 <strong>Purchase Representative</strong> | |||
|                             </th> | |||
|                             <th name="th_description"> | |||
|                                 <strong>Your Order Reference</strong> | |||
|                             </th> | |||
|                             <th name="th_description"> | |||
|                                 <strong>Shipping address</strong> | |||
|                             </th> | |||
|                         </tr> | |||
|                     </thead> | |||
|                     <tbody> | |||
|                         <tr t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                             <td class="text-center"> | |||
|                                 <div t-if="o.user_id"> | |||
|                                     <p t-field="o.user_id" class="m-0"/> | |||
|                                 </div> | |||
|                             </td> | |||
|                             <td class="text-end"> | |||
|                                 <div t-if="o.partner_ref"> | |||
|                                     <p t-field="o.partner_ref" class="m-0"/> | |||
|                                 </div> | |||
|                             </td> | |||
|                             <td class="text-end"> | |||
|                                 <div t-field="o.partner_id" | |||
|                                      t-options='{"widget": "contact", "fields": ["address", "name", "phone", "vat"], "no_marker": True, "phone_icons": True}'/> | |||
|                             </td> | |||
|                         </tr> | |||
|                     </tbody> | |||
|                 </table> | |||
|                 <br/> | |||
|                 <br/> | |||
|                 <br/> | |||
|                 <br/> | |||
|                 <table class="table table-sm o_main_table mt-4"> | |||
|                     <thead t-attf-style=" background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                         <tr> | |||
|                             <th name="th_description"> | |||
|                                 <strong>Description</strong> | |||
|                             </th> | |||
|                             <th name="th_product"> | |||
|                                 <strong>Product</strong> | |||
|                             </th> | |||
|                             <th name="th_taxes"> | |||
|                                 <strong>Taxes</strong> | |||
|                             </th> | |||
|                             <th name="th_date_req" class="text-center"> | |||
|                                 <strong>Date Req.</strong> | |||
|                             </th> | |||
|                             <th name="th_quantity" class="text-end"> | |||
|                                 <strong>Qty</strong> | |||
|                             </th> | |||
|                             <th name="th_price_unit" class="text-end"> | |||
|                                 <strong>Unit Price</strong> | |||
|                             </th> | |||
|                             <th name="th_amount" class="text-end"> | |||
|                                 <strong>Amount</strong> | |||
|                             </th> | |||
|                         </tr> | |||
|                     </thead> | |||
|                     <tbody> | |||
|                         <t t-set="current_subtotal" t-value="0"/> | |||
|                         <t t-foreach="o.order_line" t-as="line"> | |||
|                             <t t-set="current_subtotal" | |||
|                                t-value="current_subtotal + line.price_subtotal" | |||
|                                groups="account.group_show_line_subtotals_tax_excluded"/> | |||
|                             <t t-set="current_subtotal" | |||
|                                t-value="current_subtotal + line.price_total" | |||
|                                groups="account.group_show_line_subtotals_tax_included"/> | |||
|                             <tr t-attf-style="color:#{o.theme_id.customer_text_color} !important;" | |||
|                                 t-att-class="'bg-200 fw-bold o_line_section' if line.display_type == 'line_section' else 'fst-italic o_line_note' if line.display_type == 'line_note' else ''"> | |||
|                                 <t t-if="not line.display_type"> | |||
|                                     <td id="product"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                     <td id="product"> | |||
|                                         <span t-field="line.order_line_image" | |||
|                                               t-options='{"widget": "image"}'/> | |||
|                                     </td> | |||
|                                     <td name="td_taxes"> | |||
|                                         <span t-esc="', '.join(map(lambda x: x.name, line.taxes_id))"/> | |||
|                                     </td> | |||
|                                     <td class="text-center"> | |||
|                                         <span t-field="line.date_planned"/> | |||
|                                     </td> | |||
|                                     <td class="text-end"> | |||
|                                         <span t-field="line.product_qty"/> | |||
|                                         <span t-field="line.product_uom.name" | |||
|                                               groups="uom.group_uom"/> | |||
|                                     </td> | |||
|                                     <td class="text-end"> | |||
|                                         <span t-field="line.price_unit"/> | |||
|                                     </td> | |||
|                                     <td class="text-end"> | |||
|                                         <span t-field="line.price_subtotal" | |||
|                                               t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                     </td> | |||
|                                 </t> | |||
|                                 <t t-if="line.display_type == 'line_section'"> | |||
|                                     <td colspan="99" id="section"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                     <t t-set="current_section" t-value="line"/> | |||
|                                     <t t-set="current_subtotal" t-value="0"/> | |||
|                                 </t> | |||
|                                 <t t-if="line.display_type == 'line_note'"> | |||
|                                     <td colspan="99" id="note"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                 </t> | |||
|                             </tr> | |||
|                             <t t-if="current_section and (line_last or o.order_line[line_index+1].display_type == 'line_section')"> | |||
|                                 <tr class="is-subtotal text-end"> | |||
|                                     <td colspan="99" id="subtotal"> | |||
|                                         <strong class="mr16">Subtotal</strong> | |||
|                                         <span t-esc="current_subtotal" | |||
|                                               t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                     </td> | |||
|                                 </tr> | |||
|                             </t> | |||
|                         </t> | |||
|                     </tbody> | |||
|                 </table> | |||
|                 <div id="total" class="row justify-content-end"> | |||
|                     <div class="col-4"> | |||
|                         <table class="table table-sm"> | |||
|                             <tr class="border-black"> | |||
|                                 <td name="td_subtotal_label"> | |||
|                                     <strong>Subtotal</strong> | |||
|                                 </td> | |||
|                                 <td class="text-right"> | |||
|                                     <span t-field="o.amount_untaxed" | |||
|                                           t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                 </td> | |||
|                             </tr> | |||
|                             <tr> | |||
|                                 <td name="td_taxes_label">Taxes</td> | |||
|                                 <td class="text-right"> | |||
|                                     <span t-field="o.amount_tax" | |||
|                                           t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                 </td> | |||
|                             </tr> | |||
|                             <tr class="border-black o_total"> | |||
|                                 <td name="td_amount_total_label"> | |||
|                                     <strong>Total</strong> | |||
|                                 </td> | |||
|                                 <td class="text-right"> | |||
|                                     <span t-field="o.amount_total" | |||
|                                           t-options='{"widget": "monetary", "display_currency": o.currency_id}'/> | |||
|                                 </td> | |||
|                             </tr> | |||
|                         </table> | |||
|                     </div> | |||
|                 </div> | |||
|                 <p t-field="o.notes" class="mt-4"/> | |||
|                 <div class="oe_structure"/> | |||
|             </div> | |||
|         </t> | |||
|     </template> | |||
| </odoo> | |||
| @ -0,0 +1,289 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--    Sale Attractive Template--> | |||
|     <template id="report_saleorder_attractive_document"> | |||
|         <t t-if="doc and 'company_id' in doc"> | |||
|             <t t-set="company" t-value="doc.company_id"/> | |||
|         </t> | |||
|         <t t-if="not doc or not 'company_id' in doc"> | |||
|             <t t-set="company" t-value="res_company"/> | |||
|         </t> | |||
|         <div class="header row mt32 mb32"> | |||
|             <div class="page-header col-12"> | |||
|                 <div t-attf-class="pull-left"> | |||
|                     <t t-if="company.logo"> | |||
|                         <img t-if="company.logo" | |||
|                              t-att-src="image_data_uri(company.logo)" | |||
|                              style="max-height: 80px;"/> | |||
|                     </t> | |||
|                 </div> | |||
|                 <div t-attf-class="pull-left" | |||
|                      t-attf-style="font:14px lucida-console,sans-serif; color:#{doc.theme_id.company_text_color} !important;"> | |||
|                     <span t-field="company.partner_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street2"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.city"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.country_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.vat"/> | |||
|                     <br/> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|         <t t-call="web.external_layout"> | |||
|             <t t-set="doc" | |||
|                t-value="doc.with_context(lang=doc.partner_id.lang)"/> | |||
|             <h4 t-attf-style="background-color:#{doc.theme_id.base_color};color:#{doc.theme_id.heading_text_color};"> | |||
|                 <div class="row mt-4 mb-4" id="informations"> | |||
|                     <div t-if="doc.client_order_ref" | |||
|                          class="col-auto col-3 mw-100 mb-2" | |||
|                          name="informations_reference"> | |||
|                         <strong>Your Reference:</strong> | |||
|                         <p class="m-0" t-field="doc.client_order_ref"/> | |||
|                     </div> | |||
|                     <div t-if="doc.date_order" | |||
|                          class="col-auto col-3 mw-100 mb-2" | |||
|                          name="informations_date"> | |||
|                         <strong t-if="doc.state in ['draft', 'sent']">Quotation | |||
|                             Date: | |||
|                         </strong> | |||
|                         <strong t-else="">Order Date:</strong> | |||
|                         <p class="m-0" t-field="doc.date_order" | |||
|                            t-options='{"widget": "date"}'/> | |||
|                     </div> | |||
|                     <div t-if="doc.validity_date and doc.state in ['draft', 'sent']" | |||
|                          class="col-auto col-3 mw-100 mb-2" | |||
|                          name="expiration_date"> | |||
|                         <strong>Expiration:</strong> | |||
|                         <p class="m-0" t-field="doc.validity_date"/> | |||
|                     </div> | |||
|                     <div t-if="doc.user_id.name" | |||
|                          class="col-auto col-3 mw-100 mb-2"> | |||
|                         <strong>Salesperson:</strong> | |||
|                         <p class="m-0" t-field="doc.user_id"/> | |||
|                     </div> | |||
|                 </div> | |||
|             </h4> | |||
|             <table class="table table-sm o_main_table mt-4"> | |||
|                 <thead t-attf-style="background-color:#{doc.theme_id.base_color};color:#{doc.theme_id.heading_text_color};"> | |||
|                     <th t-if="doc.state not in ['draft','sent']">Customer</th> | |||
|                     <th t-if="env.context.get('proforma', False) or is_pro_forma"> | |||
|                         Pro-Forma Invoice # | |||
|                     </th> | |||
|                     <th t-if="doc.state in ['draft','sent']">Quotation #</th> | |||
|                     <th t-if="doc.state not in ['draft','sent']">Order #</th> | |||
|                     <th t-if="doc.state not in ['draft','sent']">Payment Term | |||
|                     </th> | |||
|                 </thead> | |||
|                 <tbody> | |||
|                     <tr t-attf-style="color:#{doc.theme_id.customer_text_color} !important;"> | |||
|                         <td> | |||
|                             <div t-field="doc.partner_id" | |||
|                                  t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'> | |||
|                                 <p t-if="doc.partner_id.vat"> | |||
|                                     <t t-out="doc.company_id.account_fiscal_country_id.vat_label or 'Tax ID'"/> | |||
|                                     : | |||
|                                     <span t-field="doc.partner_id.vat"/> | |||
|                                 </p> | |||
|                             </div> | |||
|                         </td> | |||
|                         <td class="text-end"> | |||
|                             <span t-field="doc.name"/> | |||
|                         </td> | |||
|                         <td class="text-end"> | |||
|                             <span t-field="doc.payment_term_id.note"/> | |||
|                         </td> | |||
|                     </tr> | |||
|                 </tbody> | |||
|             </table> | |||
|             <t t-if="doc.partner_shipping_id == doc.partner_invoice_id | |||
|                              and doc.partner_invoice_id != doc.partner_id | |||
|                              or doc.partner_shipping_id != doc.partner_invoice_id"> | |||
|                 <t t-set="information_block"> | |||
|                     <strong> | |||
|                         <t t-if="doc.partner_shipping_id == doc.partner_invoice_id"> | |||
|                             Invoicing and Shipping Address: | |||
|                         </t> | |||
|                         <t t-else="">Invoicing Address:</t> | |||
|                     </strong> | |||
|                     <div t-field="doc.partner_invoice_id" | |||
|                          t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}'/> | |||
|                     <t t-if="doc.partner_shipping_id != doc.partner_invoice_id"> | |||
|                         <strong>Shipping Address:</strong> | |||
|                         <div t-field="doc.partner_shipping_id" | |||
|                              t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}'/> | |||
|                     </t> | |||
|                 </t> | |||
|             </t> | |||
|             <div class="page"> | |||
|                 <div class="oe_structure"/> | |||
|                 <t t-set="display_discount" | |||
|                    t-value="any(l.discount for l in doc.order_line)"/> | |||
|                 <table class="table table-sm o_main_table mt-4"> | |||
|                     <!-- In case we want to repeat the header, remove "display: table-row-group" --> | |||
|                     <thead t-attf-style="background-color:#{doc.theme_id.base_color};color:#{doc.theme_id.heading_text_color};"> | |||
|                         <tr> | |||
|                             <th name="th_description" class="text-start"> | |||
|                                 Description | |||
|                             </th> | |||
|                             <th name="th_quantity" class="text-end">Quantity | |||
|                             </th> | |||
|                             <th name="th_priceunit" class="text-end">Unit | |||
|                                 Price | |||
|                             </th> | |||
|                             <th name="th_discount" t-if="display_discount" | |||
|                                 class="text-end" | |||
|                                 groups="product.group_discount_per_so_line"> | |||
|                                 <span>Disc.%</span> | |||
|                             </th> | |||
|                             <th name="th_taxes" class="text-end">Taxes</th> | |||
|                             <th name="th_subtotal" class="text-end"> | |||
|                                 <span groups="account.group_show_line_subtotals_tax_excluded"> | |||
|                                     Amount | |||
|                                 </span> | |||
|                                 <span groups="account.group_show_line_subtotals_tax_included"> | |||
|                                     Total Price | |||
|                                 </span> | |||
|                             </th> | |||
|                         </tr> | |||
|                     </thead> | |||
|                     <tbody class="sale_tbody"> | |||
|                         <t t-set="current_subtotal" t-value="0"/> | |||
|                         <t t-foreach="doc.order_line" t-as="line"> | |||
|                             <t t-set="current_subtotal" | |||
|                                t-value="current_subtotal + line.price_subtotal" | |||
|                                groups="account.group_show_line_subtotals_tax_excluded"/> | |||
|                             <t t-set="current_subtotal" | |||
|                                t-value="current_subtotal + line.price_total" | |||
|                                groups="account.group_show_line_subtotals_tax_included"/> | |||
|                             <tr t-attf-style="color:#{doc.theme_id.customer_text_color} !important;" | |||
|                                 t-att-class="'bg-200 fw-bold o_line_section' if line.display_type == 'line_section' else 'fst-italic o_line_note' if line.display_type == 'line_note' else ''"> | |||
|                                 <t t-if="not line.display_type"> | |||
|                                     <td name="td_name"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                     <td name="td_quantity" class="text-end"> | |||
|                                         <span t-field="line.product_uom_qty"/> | |||
|                                         <span t-field="line.product_uom"/> | |||
|                                     </td> | |||
|                                     <td name="td_priceunit" class="text-end"> | |||
|                                         <span t-field="line.price_unit"/> | |||
|                                     </td> | |||
|                                     <td t-if="display_discount" class="text-end" | |||
|                                         groups="product.group_discount_per_so_line"> | |||
|                                         <span t-field="line.discount"/> | |||
|                                     </td> | |||
|                                     <td name="td_taxes" class="text-end"> | |||
|                                         <span t-out="', '.join(map(lambda x: (x.description or x.name), line.tax_id))"/> | |||
|                                     </td> | |||
|                                     <td t-if="not line.is_downpayment" | |||
|                                         name="td_subtotal" | |||
|                                         class="text-end o_price_total"> | |||
|                                         <span t-field="line.price_subtotal" | |||
|                                               groups="account.group_show_line_subtotals_tax_excluded"/> | |||
|                                         <span t-field="line.price_total" | |||
|                                               groups="account.group_show_line_subtotals_tax_included"/> | |||
|                                     </td> | |||
|                                 </t> | |||
|                                 <t t-elif="line.display_type == 'line_section'"> | |||
|                                     <td name="td_section_line" colspan="99"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                     <t t-set="current_section" t-value="line"/> | |||
|                                     <t t-set="current_subtotal" t-value="0"/> | |||
|                                 </t> | |||
|                                 <t t-elif="line.display_type == 'line_note'"> | |||
|                                     <td name="td_note_line" colspan="99"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                 </t> | |||
|                             </tr> | |||
|                             <t t-if="current_section and (line_last or doc.order_line[line_index+1].display_type == 'line_section') and not line.is_downpayment"> | |||
|                                 <tr class="is-subtotal text-end"> | |||
|                                     <td name="td_section_subtotal" colspan="99"> | |||
|                                         <strong class="mr16">Subtotal</strong> | |||
|                                         <span t-out="current_subtotal" | |||
|                                               t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/> | |||
|                                     </td> | |||
|                                 </tr> | |||
|                             </t> | |||
|                         </t> | |||
|                     </tbody> | |||
|                 </table> | |||
|                 <div class="clearfix col-6" name="so_total_summary" | |||
|                      t-attf-style="background-color:#{doc.theme_id.base_color};color:#{doc.theme_id.heading_text_color};"> | |||
|                     <div id="total" class="row" name="total"> | |||
|                         <div t-attf-class="#{'col-6' if report_type != 'html' else 'col-sm-7 col-md-6'} ml-auto"> | |||
|                             <table class="table table-sm"> | |||
|                                 <tr class="border-black o_subtotal" style=""> | |||
|                                     <td name="td_amount_untaxed_label"> | |||
|                                         <strong>Subtotal</strong> | |||
|                                     </td> | |||
|                                     <td name="td_amount_untaxed" | |||
|                                         class="text-right"> | |||
|                                         <span t-field="doc.amount_untaxed"/> | |||
|                                     </td> | |||
|                                 </tr> | |||
|                                 <t t-foreach="doc.amount_by_group" | |||
|                                    t-as="amount_by_group"> | |||
|                                     <tr style=""> | |||
|                                         <t t-if="amount_by_group[5] == 1 and doc.amount_untaxed == amount_by_group[2]"> | |||
|                                             <td name="td_amount_by_group_label_3"> | |||
|                                                 <span t-esc="amount_by_group[0]"/> | |||
|                                                 <span>&nbsp; <span>on</span>&nbsp; | |||
|                                                     <t t-esc="amount_by_group[2]" | |||
|                                                        t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/> | |||
|                                                 </span> | |||
|                                             </td> | |||
|                                             <td name="td_amount_by_group_3" | |||
|                                                 class="text-right o_price_total"> | |||
|                                                 <span t-esc="amount_by_group[1]" | |||
|                                                       t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/> | |||
|                                             </td> | |||
|                                         </t> | |||
|                                         <t t-else=""> | |||
|                                             <td name="td_amount_by_group_label"> | |||
|                                                 <span t-esc="amount_by_group[0]"/> | |||
|                                             </td> | |||
|                                             <td name="td_amount_by_group" | |||
|                                                 class="text-right o_price_total"> | |||
|                                                 <span t-esc="amount_by_group[1]" | |||
|                                                       t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/> | |||
|                                             </td> | |||
|                                         </t> | |||
|                                     </tr> | |||
|                                 </t> | |||
|                                 <tr class="border-black o_total"> | |||
|                                     <td name="td_amount_total_label"> | |||
|                                         <strong>Total</strong> | |||
|                                     </td> | |||
|                                     <td name="td_amount_total" | |||
|                                         class="text-right"> | |||
|                                         <span t-field="doc.amount_total"/> | |||
|                                     </td> | |||
|                                 </tr> | |||
|                             </table> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|                 <div t-if="doc.signature" class="mt-4 ml64 mr4" | |||
|                      name="signature"> | |||
|                     <div class="offset-8"> | |||
|                         <strong>Signature</strong> | |||
|                     </div> | |||
|                     <div class="offset-8"> | |||
|                         <img t-att-src="image_data_uri(doc.signature)" | |||
|                              style="max-height: 4cm; max-width: 8cm;"/> | |||
|                     </div> | |||
|                     <div class="offset-8 text-center"> | |||
|                         <p t-field="doc.signed_by"/> | |||
|                     </div> | |||
|                 </div> | |||
|             </div> | |||
|         </t> | |||
|     </template> | |||
| </odoo> | |||
| @ -0,0 +1,299 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--    Sale Modern Template--> | |||
|     <template id="report_saleorder_modern_document"> | |||
|         <t t-if="doc and 'company_id' in doc"> | |||
|             <t t-set="company" t-value="doc.company_id"/> | |||
|         </t> | |||
|         <t t-if="not doc or not 'company_id' in doc"> | |||
|             <t t-set="company" t-value="res_company"/> | |||
|         </t> | |||
|         <div class="header row mt32 mb32"> | |||
|             <div class="page-header col-12"> | |||
|                 <div t-attf-class="pull-left"> | |||
|                     <t t-if="company.logo"> | |||
|                         <img t-if="company.logo" | |||
|                              t-att-src="image_data_uri(company.logo)" | |||
|                              style="max-height: 80px;"/> | |||
|                     </t> | |||
|                 </div> | |||
|                 <div t-attf-class="pull-left" | |||
|                      t-attf-style="font:14px lucida-console,sans-serif; color:#{doc.theme_id.company_text_color} !important;"> | |||
|                     <span t-field="company.partner_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street2"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.city"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.country_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.vat"/> | |||
|                     <br/> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|         <t t-call="web.external_layout"> | |||
|             <t t-set="doc" | |||
|                t-value="doc.with_context(lang=doc.partner_id.lang)"/> | |||
|             <table class="table table-sm o_main_table mt-4"> | |||
|                 <thead t-attf-style="background-color:#{doc.theme_id.base_color};color:#{doc.theme_id.heading_text_color};"> | |||
|                     <tr> | |||
|                         <th name="th_description">Customer</th> | |||
|                         <t t-if="doc.partner_shipping_id == doc.partner_invoice_id | |||
|                              and doc.partner_invoice_id != doc.partner_id | |||
|                              or doc.partner_shipping_id != doc.partner_invoice_id"> | |||
|                             <t t-if="doc.partner_shipping_id == doc.partner_invoice_id"> | |||
|                                 <th name="th_quantity" class="text-end"> | |||
|                                     Invoicing and shipping Address | |||
|                                 </th> | |||
|                             </t> | |||
|                         </t> | |||
|                         <t t-else=""> | |||
|                             <th name="th_priceunit" | |||
|                                 t-if="doc.partner_shipping_id != doc.partner_invoice_id" | |||
|                                 class="text-end">Invoicing Address | |||
|                             </th> | |||
|                         </t> | |||
|                     </tr> | |||
|                 </thead> | |||
|                 <tbody> | |||
|                     <tr t-attf-style="color:#{doc.theme_id.customer_text_color} !important;"> | |||
|                         <td> | |||
|                             <div t-field="doc.partner_id" | |||
|                                  t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/> | |||
|                             <p t-if="doc.partner_id.vat"> | |||
|                                 <t t-out="doc.company_id.account_fiscal_country_id.vat_label or 'Tax ID'"/> | |||
|                                 : | |||
|                                 <span t-field="doc.partner_id.vat"/> | |||
|                             </p> | |||
|                         </td> | |||
|                         <td> | |||
|                             <t t-set="information_block"> | |||
|                                 <div t-field="doc.partner_invoice_id" | |||
|                                      t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}'/> | |||
|                                 <t t-if="doc.partner_shipping_id != doc.partner_invoice_id"> | |||
|                                     <div t-field="doc.partner_shipping_id" | |||
|                                          t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}'/> | |||
|                                 </t> | |||
|                             </t> | |||
|                         </td> | |||
|                     </tr> | |||
|                 </tbody> | |||
|             </table> | |||
|             <h4 class="mt-4" | |||
|                 t-attf-style="background-color:#{doc.theme_id.base_color};color:#{doc.theme_id.heading_text_color};"> | |||
|                 <span t-if="env.context.get('proforma', False) or is_pro_forma"> | |||
|                     <strong>Pro-Forma Invoice #</strong> | |||
|                 </span> | |||
|                 <span t-elif="doc.state in ['draft','sent']"> | |||
|                     <strong>Quotation #</strong> | |||
|                 </span> | |||
|                 <span t-else=""> | |||
|                     <strong>Order #</strong> | |||
|                 </span> | |||
|                 <span t-field="doc.name"/> | |||
|                 <span t-if="doc.date_order" class="col-auto col-3 mw-100 mb-2" | |||
|                       name="informations_date"> | |||
|                     <strong t-if="doc.state in ['draft', 'sent']">Quotation | |||
|                         Date: | |||
|                     </strong> | |||
|                     <strong t-else="">Order Date:</strong> | |||
|                     <span class="m-0" t-field="doc.date_order" | |||
|                           t-options='{"widget": "date"}'/> | |||
|                 </span> | |||
|                 <span class="text-end"> | |||
|                     <span t-field="doc.payment_term_id.note"/> | |||
|                 </span> | |||
|                 <span t-if="doc.user_id.name" | |||
|                       class="col-auto col-3 mw-100 mb-2"> | |||
|                     <strong>Salesperson:</strong> | |||
|                     <span t-field="doc.user_id"/> | |||
|                 </span> | |||
|             </h4> | |||
|             <div class="page"> | |||
|                 <div class="oe_structure"/> | |||
|                 <t t-set="display_discount" | |||
|                    t-value="any(l.discount for l in doc.order_line)"/> | |||
|                 <table class="table table-sm o_main_table mt-4"> | |||
|                     <!-- In case we want to repeat the header, remove "display: table-row-group" --> | |||
|                     <thead t-attf-style="background-color:#{doc.theme_id.base_color};color:#{doc.theme_id.heading_text_color};"> | |||
|                         <tr> | |||
|                             <th name="th_description" class="text-start"> | |||
|                                 Description | |||
|                             </th> | |||
|                             <th name="th_quantity" class="text-end">Quantity | |||
|                             </th> | |||
|                             <th name="th_priceunit" class="text-end">Unit | |||
|                                 Price | |||
|                             </th> | |||
|                             <th name="th_discount" t-if="display_discount" | |||
|                                 class="text-end" | |||
|                                 groups="product.group_discount_per_so_line"> | |||
|                                 <span>Disc.%</span> | |||
|                             </th> | |||
|                             <th name="th_taxes" class="text-end">Taxes</th> | |||
|                             <th name="th_subtotal" class="text-end"> | |||
|                                 <span groups="account.group_show_line_subtotals_tax_excluded"> | |||
|                                     Amount | |||
|                                 </span> | |||
|                                 <span groups="account.group_show_line_subtotals_tax_included"> | |||
|                                     Total Price | |||
|                                 </span> | |||
|                             </th> | |||
|                         </tr> | |||
|                     </thead> | |||
|                     <tbody class="sale_tbody"> | |||
|                         <t t-set="current_subtotal" t-value="0"/> | |||
|                         <t t-foreach="doc.order_line" t-as="line"> | |||
|                             <t t-set="current_subtotal" | |||
|                                t-value="current_subtotal + line.price_subtotal" | |||
|                                groups="account.group_show_line_subtotals_tax_excluded"/> | |||
|                             <t t-set="current_subtotal" | |||
|                                t-value="current_subtotal + line.price_total" | |||
|                                groups="account.group_show_line_subtotals_tax_included"/> | |||
|                             <tr t-attf-style="color:#{doc.theme_id.customer_text_color} !important;" | |||
|                                 t-att-class="'bg-200 fw-bold o_line_section' if line.display_type == 'line_section' else 'fst-italic o_line_note' if line.display_type == 'line_note' else ''"> | |||
|                                 <t t-if="not line.display_type"> | |||
|                                     <td name="td_name"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                     <td name="td_quantity" class="text-end"> | |||
|                                         <span t-field="line.product_uom_qty"/> | |||
|                                         <span t-field="line.product_uom"/> | |||
|                                     </td> | |||
|                                     <td name="td_priceunit" class="text-end"> | |||
|                                         <span t-field="line.price_unit"/> | |||
|                                     </td> | |||
|                                     <td t-if="display_discount" class="text-end" | |||
|                                         groups="product.group_discount_per_so_line"> | |||
|                                         <span t-field="line.discount"/> | |||
|                                     </td> | |||
|                                     <td name="td_taxes" class="text-end"> | |||
|                                         <span t-out="', '.join(map(lambda x: (x.description or x.name), line.tax_id))"/> | |||
|                                     </td> | |||
|                                     <td t-if="not line.is_downpayment" | |||
|                                         name="td_subtotal" | |||
|                                         class="text-end o_price_total"> | |||
|                                         <span t-field="line.price_subtotal" | |||
|                                               groups="account.group_show_line_subtotals_tax_excluded"/> | |||
|                                         <span t-field="line.price_total" | |||
|                                               groups="account.group_show_line_subtotals_tax_included"/> | |||
|                                     </td> | |||
|                                 </t> | |||
|                                 <t t-elif="line.display_type == 'line_section'"> | |||
|                                     <td name="td_section_line" colspan="99"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                     <t t-set="current_section" t-value="line"/> | |||
|                                     <t t-set="current_subtotal" t-value="0"/> | |||
|                                 </t> | |||
|                                 <t t-elif="line.display_type == 'line_note'"> | |||
|                                     <td name="td_note_line" colspan="99"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                 </t> | |||
|                             </tr> | |||
|                             <t t-if="current_section and (line_last or doc.order_line[line_index+1].display_type == 'line_section') and not line.is_downpayment"> | |||
|                                 <tr class="is-subtotal text-end"> | |||
|                                     <td name="td_section_subtotal" colspan="99"> | |||
|                                         <strong class="mr16">Subtotal</strong> | |||
|                                         <span t-out="current_subtotal" | |||
|                                               t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/> | |||
|                                     </td> | |||
|                                 </tr> | |||
|                             </t> | |||
|                         </t> | |||
|                     </tbody> | |||
|                 </table> | |||
|                 <div class="clearfix" name="so_total_summary"> | |||
|                     <div id="total" class="row" name="total"> | |||
|                         <div t-attf-class="#{'col-6' if report_type != 'html' else 'col-sm-7 col-md-6'} ml-auto"> | |||
|                             <table class="table table-sm"> | |||
|                                 <tr class="border-black o_subtotal" style=""> | |||
|                                     <td name="td_amount_untaxed_label"> | |||
|                                         <strong>Subtotal</strong> | |||
|                                     </td> | |||
|                                     <td name="td_amount_untaxed" | |||
|                                         class="text-right"> | |||
|                                         <span t-field="doc.amount_untaxed"/> | |||
|                                     </td> | |||
|                                 </tr> | |||
|                                 <t t-foreach="doc.amount_by_group" | |||
|                                    t-as="amount_by_group"> | |||
|                                     <tr style=""> | |||
|                                         <t t-if="amount_by_group[5] == 1 and doc.amount_untaxed == amount_by_group[2]"> | |||
|                                             <td name="td_amount_by_group_label_3"> | |||
|                                                 <span t-esc="amount_by_group[0]"/> | |||
|                                                 <span>&nbsp; <span>on</span>&nbsp; | |||
|                                                     <t t-esc="amount_by_group[2]" | |||
|                                                        t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/> | |||
|                                                 </span> | |||
|                                             </td> | |||
|                                             <td name="td_amount_by_group_3" | |||
|                                                 class="text-right o_price_total"> | |||
|                                                 <span t-esc="amount_by_group[1]" | |||
|                                                       t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/> | |||
|                                             </td> | |||
|                                         </t> | |||
|                                         <t t-else=""> | |||
|                                             <td name="td_amount_by_group_label"> | |||
|                                                 <span t-esc="amount_by_group[0]"/> | |||
|                                             </td> | |||
|                                             <td name="td_amount_by_group" | |||
|                                                 class="text-right o_price_total"> | |||
|                                                 <span t-esc="amount_by_group[1]" | |||
|                                                       t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/> | |||
|                                             </td> | |||
|                                         </t> | |||
|                                     </tr> | |||
|                                 </t> | |||
|                                 <tr class="border-black o_total"> | |||
|                                     <td name="td_amount_total_label"> | |||
|                                         <strong>Total</strong> | |||
|                                     </td> | |||
|                                     <td name="td_amount_total" | |||
|                                         class="text-right"> | |||
|                                         <span t-field="doc.amount_total"/> | |||
|                                     </td> | |||
|                                 </tr> | |||
|                             </table> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|                 <br/> | |||
|                 <br/> | |||
|                 <br/> | |||
|                 <br/> | |||
|                 <div t-if="doc.signature" class="mt-4 ml64 mr4" | |||
|                      name="signature"> | |||
|                     <div class="offset-8"> | |||
|                         <strong>Signature</strong> | |||
|                     </div> | |||
|                     <div class="offset-8"> | |||
|                         <img t-att-src="image_data_uri(doc.signature)" | |||
|                              style="max-height: 4cm; max-width: 8cm;"/> | |||
|                     </div> | |||
|                     <div class="offset-8 text-center"> | |||
|                         <p t-field="doc.signed_by"/> | |||
|                     </div> | |||
|                 </div> | |||
|                 <div t-attf-style="background-color:#{doc.theme_id.base_color};color:#{doc.theme_id.heading_text_color};"> | |||
|                     <t t-if="doc.note"> | |||
|                         <strong>Note</strong> | |||
|                         <br/> | |||
|                         <br/> | |||
|                         <br/> | |||
|                     </t> | |||
|                     <p t-field="doc.note" name="order_note"/> | |||
|                     <p t-if="doc.fiscal_position_id and not is_html_empty(doc.fiscal_position_id.sudo().note)" | |||
|                        id="fiscal_position_remark"> | |||
|                         <strong>Fiscal Position Remark:</strong> | |||
|                         <span t-field="doc.fiscal_position_id.sudo().note"/> | |||
|                     </p> | |||
|                 </div> | |||
|             </div> | |||
|         </t> | |||
|     </template> | |||
| </odoo> | |||
| @ -0,0 +1,14 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--    Report Function in Sale --> | |||
|     <record id="sale.action_report_saleorder" model="ir.actions.report"> | |||
|         <field name="name">Quotation / Order</field> | |||
|         <field name="model">sale.order</field> | |||
|         <field name="report_type">qweb-pdf</field> | |||
|         <field name="report_name">base_advanced_report_templates.report_saleorder_custom</field> | |||
|         <field name="report_file">base_advanced_report_templates.report_saleorder</field> | |||
|         <field name="print_report_name">(object.state in ('draft', 'sent') and 'Quotation - %s' % (object.name)) or 'Order - %s' % (object.name)</field> | |||
|         <field name="binding_model_id" ref="model_sale_order"/> | |||
|         <field name="binding_type">report</field> | |||
|     </record> | |||
| </odoo> | |||
| @ -0,0 +1,260 @@ | |||
| <?xml version="1.0" encoding="utf-8" ?> | |||
| <odoo> | |||
|     <!--    Sale Standard Template--> | |||
|     <template id="report_saleorder_standard_document"> | |||
|         <t t-if="doc and 'company_id' in doc"> | |||
|             <t t-set="company" t-value="doc.company_id"/> | |||
|         </t> | |||
|         <t t-if="not doc or not 'company_id' in doc"> | |||
|             <t t-set="company" t-value="res_company"/> | |||
|         </t> | |||
|         <div class="header row mt32 mb32"> | |||
|             <div class="page-header col-12"> | |||
|                 <div t-attf-class="pull-left"> | |||
|                     <t t-if="company.logo"> | |||
|                         <img t-if="company.logo" | |||
|                              t-att-src="image_data_uri(company.logo)" | |||
|                              style="max-height: 80px;"/> | |||
|                     </t> | |||
|                 </div> | |||
|                 <div t-attf-class="pull-left" | |||
|                      t-attf-style="font:14px lucida-console,sans-serif; color:#{doc.theme_id.company_text_color} !important;"> | |||
|                     <span t-field="company.partner_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street2"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.city"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.country_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.vat"/> | |||
|                     <br/> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|         <t t-call="web.external_layout"> | |||
|             <t t-set="doc" | |||
|                t-value="doc.with_context(lang=doc.partner_id.lang)"/> | |||
|             <h1 class="mt-4 col-12" | |||
|                 t-attf-style="background-color:#{doc.theme_id.base_color};color:#{doc.theme_id.heading_text_color};"> | |||
|                 <span t-if="env.context.get('proforma', False) or is_pro_forma"> | |||
|                     Pro-Forma Invoice # | |||
|                 </span> | |||
|                 <span t-elif="doc.state in ['draft','sent']">Quotation #</span> | |||
|                 <span t-else="">Order #</span> | |||
|                 <span t-field="doc.name"/> | |||
|             </h1> | |||
|             <t t-if="doc.partner_id"> | |||
|                 <div t-field="doc.partner_id" | |||
|                      t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/> | |||
|                 <p t-if="doc.partner_id.vat"> | |||
|                     <t t-out="doc.company_id.account_fiscal_country_id.vat_label or 'Tax ID'"/> | |||
|                     : | |||
|                     <span t-field="doc.partner_id.vat"/> | |||
|                 </p> | |||
|             </t> | |||
|             <t t-if="doc.partner_shipping_id == doc.partner_invoice_id | |||
|                              and doc.partner_invoice_id != doc.partner_id | |||
|                              or doc.partner_shipping_id != doc.partner_invoice_id"> | |||
|                 <t t-set="information_block"> | |||
|                     <strong> | |||
|                         <t t-if="doc.partner_shipping_id == doc.partner_invoice_id"> | |||
|                             Invoicing and Shipping Address: | |||
|                         </t> | |||
|                         <t t-else="">Invoicing Address:</t> | |||
|                     </strong> | |||
|                     <div t-field="doc.partner_invoice_id" | |||
|                          t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}'/> | |||
|                     <t t-if="doc.partner_shipping_id != doc.partner_invoice_id"> | |||
|                         <strong>Shipping Address:</strong> | |||
|                         <div t-field="doc.partner_shipping_id" | |||
|                              t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}'/> | |||
|                     </t> | |||
|                 </t> | |||
|             </t> | |||
|             <div class="page"> | |||
|                 <div class="oe_structure"/> | |||
|                 <t t-set="display_discount" | |||
|                    t-value="any(l.discount for l in doc.order_line)"/> | |||
|                 <table class="table table-sm o_main_table mt-4"> | |||
|                     <!-- In case we want to repeat the header, remove "display: table-row-group" --> | |||
|                     <thead t-attf-style="background-color:#{doc.theme_id.base_color};color:#{doc.theme_id.heading_text_color};"> | |||
|                         <tr> | |||
|                             <th name="th_description" class="text-start"> | |||
|                                 Description | |||
|                             </th> | |||
|                             <th name="th_quantity" class="text-end">Quantity | |||
|                             </th> | |||
|                             <th name="th_priceunit" class="text-end">Unit | |||
|                                 Price | |||
|                             </th> | |||
|                             <th name="th_discount" t-if="display_discount" | |||
|                                 class="text-end" | |||
|                                 groups="product.group_discount_per_so_line"> | |||
|                                 <span>Disc.%</span> | |||
|                             </th> | |||
|                             <th name="th_taxes" class="text-end">Taxes</th> | |||
|                             <th name="th_subtotal" class="text-end"> | |||
|                                 <span groups="account.group_show_line_subtotals_tax_excluded"> | |||
|                                     Amount | |||
|                                 </span> | |||
|                                 <span groups="account.group_show_line_subtotals_tax_included"> | |||
|                                     Total Price | |||
|                                 </span> | |||
|                             </th> | |||
|                         </tr> | |||
|                     </thead> | |||
|                     <tbody class="sale_tbody"> | |||
|                         <t t-set="current_subtotal" t-value="0"/> | |||
|                         <t t-foreach="doc.order_line" t-as="line"> | |||
|                             <t t-set="current_subtotal" | |||
|                                t-value="current_subtotal + line.price_subtotal" | |||
|                                groups="account.group_show_line_subtotals_tax_excluded"/> | |||
|                             <t t-set="current_subtotal" | |||
|                                t-value="current_subtotal + line.price_total" | |||
|                                groups="account.group_show_line_subtotals_tax_included"/> | |||
|                             <tr t-attf-style="color:#{doc.theme_id.customer_text_color} !important;" | |||
|                                 t-att-class="'bg-200 fw-bold o_line_section' if line.display_type == 'line_section' else 'fst-italic o_line_note' if line.display_type == 'line_note' else ''"> | |||
|                                 <t t-if="not line.display_type"> | |||
|                                     <td name="td_name"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                     <td name="td_quantity" class="text-end"> | |||
|                                         <span t-field="line.product_uom_qty"/> | |||
|                                         <span t-field="line.product_uom"/> | |||
|                                     </td> | |||
|                                     <td name="td_priceunit" class="text-end"> | |||
|                                         <span t-field="line.price_unit"/> | |||
|                                     </td> | |||
|                                     <td t-if="display_discount" class="text-end" | |||
|                                         groups="product.group_discount_per_so_line"> | |||
|                                         <span t-field="line.discount"/> | |||
|                                     </td> | |||
|                                     <td name="td_taxes" class="text-end"> | |||
|                                         <span t-out="', '.join(map(lambda x: (x.description or x.name), line.tax_id))"/> | |||
|                                     </td> | |||
|                                     <td t-if="not line.is_downpayment" | |||
|                                         name="td_subtotal" | |||
|                                         class="text-end o_price_total"> | |||
|                                         <span t-field="line.price_subtotal" | |||
|                                               groups="account.group_show_line_subtotals_tax_excluded"/> | |||
|                                         <span t-field="line.price_total" | |||
|                                               groups="account.group_show_line_subtotals_tax_included"/> | |||
|                                     </td> | |||
|                                 </t> | |||
|                                 <t t-elif="line.display_type == 'line_section'"> | |||
|                                     <td name="td_section_line" colspan="99"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                     <t t-set="current_section" t-value="line"/> | |||
|                                     <t t-set="current_subtotal" t-value="0"/> | |||
|                                 </t> | |||
|                                 <t t-elif="line.display_type == 'line_note'"> | |||
|                                     <td name="td_note_line" colspan="99"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                 </t> | |||
|                             </tr> | |||
|                             <t t-if="current_section and (line_last or doc.order_line[line_index+1].display_type == 'line_section') and not line.is_downpayment"> | |||
|                                 <tr class="is-subtotal text-end"> | |||
|                                     <td name="td_section_subtotal" colspan="99"> | |||
|                                         <strong class="mr16">Subtotal</strong> | |||
|                                         <span t-out="current_subtotal" | |||
|                                               t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/> | |||
|                                     </td> | |||
|                                 </tr> | |||
|                             </t> | |||
|                         </t> | |||
|                     </tbody> | |||
|                 </table> | |||
|                 <div class="clearfix" name="so_total_summary" | |||
|                      t-attf-style="background-color:#{doc.theme_id.base_color};color:#{doc.theme_id.heading_text_color};"> | |||
|                     <div id="total" class="row" name="total"> | |||
|                         <div t-attf-class="#{'col-6' if report_type != 'html' else 'col-sm-7 col-md-6'} ml-auto"> | |||
|                             <table class="table table-sm"> | |||
|                                 <tr class="border-black o_subtotal" style=""> | |||
|                                     <td name="td_amount_untaxed_label"> | |||
|                                         <strong>Subtotal</strong> | |||
|                                     </td> | |||
|                                     <td name="td_amount_untaxed" | |||
|                                         class="text-right"> | |||
|                                         <span t-field="doc.amount_untaxed"/> | |||
|                                     </td> | |||
|                                 </tr> | |||
|                                 <t t-foreach="doc.amount_by_group" | |||
|                                    t-as="amount_by_group"> | |||
|                                     <tr style=""> | |||
|                                         <t t-if="amount_by_group[5] == 1 and doc.amount_untaxed == amount_by_group[2]"> | |||
|                                             <td name="td_amount_by_group_label_3"> | |||
|                                                 <span t-esc="amount_by_group[0]"/> | |||
|                                                 <span>&nbsp; <span>on</span>&nbsp; | |||
|                                                     <t t-esc="amount_by_group[2]" | |||
|                                                        t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/> | |||
|                                                 </span> | |||
|                                             </td> | |||
|                                             <td name="td_amount_by_group_3" | |||
|                                                 class="text-right o_price_total"> | |||
|                                                 <span t-esc="amount_by_group[1]" | |||
|                                                       t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/> | |||
|                                             </td> | |||
|                                         </t> | |||
|                                         <t t-else=""> | |||
|                                             <td name="td_amount_by_group_label"> | |||
|                                                 <span t-esc="amount_by_group[0]"/> | |||
|                                             </td> | |||
|                                             <td name="td_amount_by_group" | |||
|                                                 class="text-right o_price_total"> | |||
|                                                 <span t-esc="amount_by_group[1]" | |||
|                                                       t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/> | |||
|                                             </td> | |||
|                                         </t> | |||
|                                     </tr> | |||
|                                 </t> | |||
|                                 <tr class="border-black o_total"> | |||
|                                     <td name="td_amount_total_label"> | |||
|                                         <strong>Total</strong> | |||
|                                     </td> | |||
|                                     <td name="td_amount_total" | |||
|                                         class="text-right"> | |||
|                                         <span t-field="doc.amount_total"/> | |||
|                                     </td> | |||
|                                 </tr> | |||
|                             </table> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|                 <div t-if="doc.signature" class="mt-4 ml64 mr4" | |||
|                      name="signature"> | |||
|                     <div class="offset-8"> | |||
|                         <strong>Signature</strong> | |||
|                     </div> | |||
|                     <div class="offset-8"> | |||
|                         <img t-att-src="image_data_uri(doc.signature)" | |||
|                              style="max-height: 4cm; max-width: 8cm;"/> | |||
|                     </div> | |||
|                     <div class="offset-8 text-center"> | |||
|                         <p t-field="doc.signed_by"/> | |||
|                     </div> | |||
|                 </div> | |||
|                 <div t-attf-style="background-color:#{doc.theme_id.base_color};color:#{doc.theme_id.heading_text_color};" | |||
|                      class="col-6"> | |||
|                     <p t-field="doc.note" name="order_note"/> | |||
|                     <span> | |||
|                         <span t-field="doc.payment_term_id.note"/> | |||
|                     </span> | |||
|                     <div t-if="doc.user_id.name" class="col-auto  mw-100 mb-2"> | |||
|                         <strong>Salesperson:</strong> | |||
|                         <p class="m-0" t-field="doc.user_id"/> | |||
|                     </div> | |||
|                     <p t-if="doc.fiscal_position_id and not is_html_empty(doc.fiscal_position_id.sudo().note)" | |||
|                        id="fiscal_position_remark"> | |||
|                         <strong>Fiscal Position Remark:</strong> | |||
|                         <span t-field="doc.fiscal_position_id.sudo().note"/> | |||
|                     </p> | |||
|                 </div> | |||
|             </div> | |||
|         </t> | |||
|     </template> | |||
| </odoo> | |||
| @ -0,0 +1,298 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--    Sale Standard Template--> | |||
|     <template id="report_saleorder_custom"> | |||
|         <t t-call="web.html_container"> | |||
|             <t t-foreach="docs" t-as="doc"> | |||
|                 <t t-if="doc.theme_id.name=='Traditional'"> | |||
|                     <t t-call="base_advanced_report_templates.report_saleorder_traditional_document" | |||
|                        t-lang="doc.partner_id.lang"/> | |||
|                 </t> | |||
|                 <t t-elif="doc.theme_id.name=='Standard'"> | |||
|                     <t t-call="base_advanced_report_templates.report_saleorder_standard_document" | |||
|                        t-lang="doc.partner_id.lang"/> | |||
|                 </t> | |||
|                 <t t-elif="doc.theme_id.name=='Modern'"> | |||
|                     <t t-call="base_advanced_report_templates.report_saleorder_modern_document" | |||
|                        t-lang="doc.partner_id.lang"/> | |||
|                 </t> | |||
|                 <t t-elif="doc.theme_id.name=='Attractive'"> | |||
|                     <t t-call="base_advanced_report_templates.report_saleorder_attractive_document" | |||
|                        t-lang="doc.partner_id.lang"/> | |||
|                 </t> | |||
|                 <t t-else=""> | |||
|                     <t t-call="sale.report_saleorder_document" | |||
|                        t-lang="doc.partner_id.lang"/> | |||
|                 </t> | |||
|             </t> | |||
|         </t> | |||
|     </template> | |||
|     <template id="report_saleorder_traditional_document"> | |||
|         <t t-if="doc and 'company_id' in doc"> | |||
|             <t t-set="company" t-value="doc.company_id"/> | |||
|         </t> | |||
|         <t t-if="not doc or not 'company_id' in doc"> | |||
|             <t t-set="company" t-value="res_company"/> | |||
|         </t> | |||
|         <div class="header row mt32 mb32"> | |||
|             <div class="page-header col-12"> | |||
|                 <div t-attf-class="pull-left"> | |||
|                     <t t-if="company.logo"> | |||
|                         <img t-if="company.logo" | |||
|                              t-att-src="image_data_uri(company.logo)" | |||
|                              style="max-height: 80px;"/> | |||
|                     </t> | |||
|                 </div> | |||
|                 <div t-attf-class="pull-left" | |||
|                      t-attf-style="font:14px lucida-console,sans-serif; color:#{doc.theme_id.company_text_color} !important;"> | |||
|                     <span t-field="company.partner_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street2"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.city"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.country_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.vat"/> | |||
|                     <br/> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|         <t t-call="web.external_layout"> | |||
|             <t t-set="doc" | |||
|                t-value="doc.with_context(lang=doc.partner_id.lang)"/> | |||
|             <div class="page"> | |||
|                 <t t-set="display_discount" | |||
|                    t-value="any(l.discount for l in doc.order_line)"/> | |||
|                 <table class="table table-sm o_main_table mt-4"> | |||
|                     <!-- In case we want to repeat the header, remove "display: table-row-group" --> | |||
|                     <thead t-attf-style=" background-color:#{doc.theme_id.base_color};color:#{doc.theme_id.heading_text_color};"> | |||
|                         <tr> | |||
|                             <th name="th_description" class="text-start"> | |||
|                                 Customer Address | |||
|                             </th> | |||
|                             <th name="th_priceunit" | |||
|                                 t-if="doc.state in ['draft', 'sent']" | |||
|                                 class="text-end">Quotaion Date | |||
|                             </th> | |||
|                             <th name="th_priceunit" | |||
|                                 t-if="doc.state not in ['draft', 'sent']" | |||
|                                 class="text-end">Order Date | |||
|                             </th> | |||
|                             <th name="th_priceunit" | |||
|                                 t-if="doc.state in ['draft','sent']" | |||
|                                 class="text-end">Quotaion | |||
|                             </th> | |||
|                             <th name="th_priceunit" | |||
|                                 t-if="doc.state not in ['draft','sent']" | |||
|                                 class="text-end">Order | |||
|                             </th> | |||
|                         </tr> | |||
|                     </thead> | |||
|                     <tbody> | |||
|                         <tr t-attf-style="color:#{doc.theme_id.customer_text_color} !important;"> | |||
|                             <td class="text-start"> | |||
|                                 <div t-field="doc.partner_id" | |||
|                                      t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/> | |||
|                                 <p t-if="doc.partner_id.vat"> | |||
|                                     <t t-out="doc.company_id.account_fiscal_country_id.vat_label or 'Tax ID'"/> | |||
|                                     : | |||
|                                     <span t-field="doc.partner_id.vat"/> | |||
|                                 </p> | |||
|                             </td> | |||
|                             <td class="text-end"> | |||
|                                 <p class="m-0" t-field="doc.date_order" | |||
|                                    t-options='{"widget": "date"}'/> | |||
|                             </td> | |||
|                             <td class="text-end"> | |||
|                                 <span t-field="doc.name"/> | |||
|                             </td> | |||
|                         </tr> | |||
|                     </tbody> | |||
|                 </table> | |||
|                 <table class="table table-sm o_main_table mt-4"> | |||
|                     <!-- In case we want to repeat the header, remove "display: table-row-group" --> | |||
|                     <thead t-attf-style=" background-color:#{doc.theme_id.base_color};color:#{doc.theme_id.heading_text_color};"> | |||
|                         <tr> | |||
|                             <th name="th_description" class="text-start"> | |||
|                                 Description | |||
|                             </th> | |||
|                             <th name="th_product" class="text-start">Product | |||
|                             </th> | |||
|                             <th name="th_quantity" class="text-end">Quantity | |||
|                             </th> | |||
|                             <th name="th_priceunit" class="text-end">Unit | |||
|                                 Price | |||
|                             </th> | |||
|                             <th name="th_discount" t-if="display_discount" | |||
|                                 class="text-end" | |||
|                                 groups="product.group_discount_per_so_line"> | |||
|                                 <span>Disc.%</span> | |||
|                             </th> | |||
|                             <th name="th_taxes" class="text-end">Taxes</th> | |||
|                             <th name="th_subtotal" class="text-end"> | |||
|                                 <span groups="account.group_show_line_subtotals_tax_excluded"> | |||
|                                     Amount | |||
|                                 </span> | |||
|                                 <span groups="account.group_show_line_subtotals_tax_included"> | |||
|                                     Total Price | |||
|                                 </span> | |||
|                             </th> | |||
|                         </tr> | |||
|                     </thead> | |||
|                     <tbody class="sale_tbody"> | |||
|                         <t t-set="current_subtotal" t-value="0"/> | |||
|                         <t t-foreach="doc.order_line" t-as="line"> | |||
|                             <t t-set="current_subtotal" | |||
|                                t-value="current_subtotal + line.price_subtotal" | |||
|                                groups="account.group_show_line_subtotals_tax_excluded"/> | |||
|                             <t t-set="current_subtotal" | |||
|                                t-value="current_subtotal + line.price_total" | |||
|                                groups="account.group_show_line_subtotals_tax_included"/> | |||
|                             <tr t-attf-style="color:#{doc.theme_id.customer_text_color} !important;" | |||
|                                 t-att-class="'bg-200 fw-bold o_line_section' if line.display_type == 'line_section' else 'fst-italic o_line_note' if line.display_type == 'line_note' else ''"> | |||
|                                 <t t-if="not line.display_type"> | |||
|                                     <td name="td_name"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                     <td name="td_image"> | |||
|                                         <span t-field="line.order_line_image" | |||
|                                               t-options='{"widget": "image"}'/> | |||
|                                     </td> | |||
|                                     <td name="td_quantity" class="text-end"> | |||
|                                         <span t-field="line.product_uom_qty"/> | |||
|                                         <span t-field="line.product_uom"/> | |||
|                                     </td> | |||
|                                     <td name="td_priceunit" class="text-end"> | |||
|                                         <span t-field="line.price_unit"/> | |||
|                                     </td> | |||
|                                     <td t-if="display_discount" class="text-end" | |||
|                                         groups="product.group_discount_per_so_line"> | |||
|                                         <span t-field="line.discount"/> | |||
|                                     </td> | |||
|                                     <td name="td_taxes" class="text-end"> | |||
|                                         <span t-out="', '.join(map(lambda x: (x.description or x.name), line.tax_id))"/> | |||
|                                     </td> | |||
|                                     <td t-if="not line.is_downpayment" | |||
|                                         name="td_subtotal" | |||
|                                         class="text-end o_price_total"> | |||
|                                         <span t-field="line.price_subtotal" | |||
|                                               groups="account.group_show_line_subtotals_tax_excluded"/> | |||
|                                         <span t-field="line.price_total" | |||
|                                               groups="account.group_show_line_subtotals_tax_included"/> | |||
|                                     </td> | |||
|                                 </t> | |||
|                                 <t t-elif="line.display_type == 'line_section'"> | |||
|                                     <td name="td_section_line" colspan="99"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                     <t t-set="current_section" t-value="line"/> | |||
|                                     <t t-set="current_subtotal" t-value="0"/> | |||
|                                 </t> | |||
|                                 <t t-elif="line.display_type == 'line_note'"> | |||
|                                     <td name="td_note_line" colspan="99"> | |||
|                                         <span t-field="line.name"/> | |||
|                                     </td> | |||
|                                 </t> | |||
|                             </tr> | |||
|                             <t t-if="current_section and (line_last or doc.order_line[line_index+1].display_type == 'line_section') and not line.is_downpayment"> | |||
|                                 <tr class="is-subtotal text-end"> | |||
|                                     <td name="td_section_subtotal" colspan="99"> | |||
|                                         <strong class="mr16">Subtotal</strong> | |||
|                                         <span t-out="current_subtotal" | |||
|                                               t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/> | |||
|                                     </td> | |||
|                                 </tr> | |||
|                             </t> | |||
|                         </t> | |||
|                     </tbody> | |||
|                 </table> | |||
|                 <div class="clearfix" name="so_total_summary"> | |||
|                     <div id="total" class="row" name="total"> | |||
|                         <div t-attf-class="#{'col-6' if report_type != 'html' else 'col-sm-7 col-md-6'} ml-auto"> | |||
|                             <table class="table table-sm"> | |||
|                                 <tr class="border-black o_subtotal" style=""> | |||
|                                     <td name="td_amount_untaxed_label"> | |||
|                                         <strong>Subtotal</strong> | |||
|                                     </td> | |||
|                                     <td name="td_amount_untaxed" | |||
|                                         class="text-right"> | |||
|                                         <span t-field="doc.amount_untaxed"/> | |||
|                                     </td> | |||
|                                 </tr> | |||
|                                 <t t-foreach="doc.amount_by_group" | |||
|                                    t-as="amount_by_group"> | |||
|                                     <tr style=""> | |||
|                                         <t t-if="amount_by_group[5] == 1 and doc.amount_untaxed == amount_by_group[2]"> | |||
|                                             <td name="td_amount_by_group_label_3"> | |||
|                                                 <span t-esc="amount_by_group[0]"/> | |||
|                                                 <span>&nbsp; <span>on</span>&nbsp; | |||
|                                                     <t t-esc="amount_by_group[2]" | |||
|                                                        t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/> | |||
|                                                 </span> | |||
|                                             </td> | |||
|                                             <td name="td_amount_by_group_3" | |||
|                                                 class="text-right o_price_total"> | |||
|                                                 <span t-esc="amount_by_group[1]" | |||
|                                                       t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/> | |||
|                                             </td> | |||
|                                         </t> | |||
|                                         <t t-else=""> | |||
|                                             <td name="td_amount_by_group_label"> | |||
|                                                 <span t-esc="amount_by_group[0]"/> | |||
|                                             </td> | |||
|                                             <td name="td_amount_by_group" | |||
|                                                 class="text-right o_price_total"> | |||
|                                                 <span t-esc="amount_by_group[1]" | |||
|                                                       t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/> | |||
|                                             </td> | |||
|                                         </t> | |||
|                                     </tr> | |||
|                                 </t> | |||
|                                 <tr class="border-black o_total"> | |||
|                                     <td name="td_amount_total_label"> | |||
|                                         <strong>Total</strong> | |||
|                                     </td> | |||
|                                     <td name="td_amount_total" | |||
|                                         class="text-right"> | |||
|                                         <span t-field="doc.amount_total"/> | |||
|                                     </td> | |||
|                                 </tr> | |||
|                             </table> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|                 <div t-if="doc.signature" class="mt-4 ml64 mr4" | |||
|                      name="signature"> | |||
|                     <div class="offset-8"> | |||
|                         <strong>Signature</strong> | |||
|                     </div> | |||
|                     <div class="offset-8"> | |||
|                         <img t-att-src="image_data_uri(doc.signature)" | |||
|                              style="max-height: 4cm; max-width: 8cm;"/> | |||
|                     </div> | |||
|                     <div class="offset-8 text-center"> | |||
|                         <p t-field="doc.signed_by"/> | |||
|                     </div> | |||
|                 </div> | |||
|                 <br/> | |||
|                 <br/> | |||
|                 <br/> | |||
|                 <br/> | |||
|                 <br/> | |||
|                 <div> | |||
|                     <div> | |||
|                         <p t-field="doc.note" name="order_note"/> | |||
|                     </div> | |||
|                     <p t-if="doc.fiscal_position_id and not is_html_empty(doc.fiscal_position_id.sudo().note)" | |||
|                        id="fiscal_position_remark"> | |||
|                         <strong>Fiscal Position Remark:</strong> | |||
|                         <span t-field="doc.fiscal_position_id.sudo().note"/> | |||
|                     </p> | |||
|                 </div> | |||
|             </div> | |||
|         </t> | |||
|     </template> | |||
| </odoo> | |||
| @ -0,0 +1,283 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--    Delivery Slip Attractive Template--> | |||
|     <template id="report_stock_attractive_document"> | |||
|         <t t-if="o and 'company_id' in o"> | |||
|             <t t-set="company" t-value="o.company_id"/> | |||
|         </t> | |||
|         <t t-if="not o or not 'company_id' in o"> | |||
|             <t t-set="company" t-value="res_company"/> | |||
|         </t> | |||
|         <div class="header row mt32 mb32"> | |||
|             <div class="page-header col-12"> | |||
|                 <div t-attf-class="pull-left"> | |||
|                     <t t-if="company.logo"> | |||
|                         <img t-if="company.logo" | |||
|                              t-att-src="image_data_uri(company.logo)" | |||
|                              style="max-height: 80px;"/> | |||
|                     </t> | |||
|                 </div> | |||
|                 <div t-attf-class="pull-left" | |||
|                      t-attf-style="font:14px lucida-console,sans-serif; color:#{o.theme_id.company_text_color} !important;"> | |||
|                     <span t-field="company.partner_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street2"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.city"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.country_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.vat"/> | |||
|                     <br/> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|         <t t-call="web.html_container"> | |||
|             <t t-call="web.external_layout"> | |||
|                 <t t-set="o" t-value="o.with_context(lang=o.partner_id.lang)"/> | |||
|                 <t t-set="partner" | |||
|                    t-value="o.partner_id or (o.move_lines and o.move_lines[0].partner_id) or False"/> | |||
|                 <div class="row col-6" | |||
|                      t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                     <div name="div_incoming_address"> | |||
|                         <div name="vendor_address" | |||
|                              t-if="o.picking_type_id.code=='incoming' and partner"> | |||
|                             <span> | |||
|                                 <strong>Vendor Address:</strong> | |||
|                             </span> | |||
|                         </div> | |||
|                         <div name="warehouse_address" | |||
|                              t-if="o.picking_type_id.code=='internal' and partner"> | |||
|                             <span> | |||
|                                 <strong>Warehouse Address:</strong> | |||
|                             </span> | |||
|                         </div> | |||
|                         <div name="customer_address" | |||
|                              t-if="o.picking_type_id.code=='outgoing' and partner"> | |||
|                             <span> | |||
|                                 <strong>Customer Address:</strong> | |||
|                             </span> | |||
|                         </div> | |||
|                         <div t-if="partner" name="partner_header"> | |||
|                             <div t-field="partner.commercial_partner_id" | |||
|                                  t-options='{"widget": "contact", "fields": ["address", "name", "phone", "vat"], "no_marker": True, "phone_icons": True}'/> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|                 <br/> | |||
|                 <br/> | |||
|                 <div class="col-12" | |||
|                      t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                     <h2>Number | |||
|                         <span t-field="o.name"/> | |||
|                     </h2> | |||
|                 </div> | |||
|                 <div class="page"> | |||
|                     <div class="row mt32 mb32" | |||
|                          t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                         <div t-if="o.origin" class="col-auto" name="div_origin"> | |||
|                             <strong>Order:</strong> | |||
|                             <p t-field="o.origin"/> | |||
|                         </div> | |||
|                         <div t-if="o.state" class="col-auto" | |||
|                              name="div_sched_date"> | |||
|                             <strong>Shipping Date:</strong> | |||
|                             <t t-if="o.state == 'done'"> | |||
|                                 <p t-field="o.date_done"/> | |||
|                             </t> | |||
|                             <t t-if="o.state != 'done'"> | |||
|                                 <p t-field="o.scheduled_date"/> | |||
|                             </t> | |||
|                         </div> | |||
|                         <div t-if="o.scheduled_date" class="col-auto" | |||
|                              name="div_sched_date"> | |||
|                             <strong>Scheduled Date:</strong> | |||
|                             <p t-field="o.scheduled_date"/> | |||
|                         </div> | |||
|                         <div t-if="o.origin" class="col-auto" | |||
|                              name="div_sched_date"> | |||
|                             <strong>Source:</strong> | |||
|                             <p t-field="o.origin"/> | |||
|                         </div> | |||
|                     </div> | |||
|                     <br/> | |||
|                     <br/> | |||
|                     <br/> | |||
|                     <table class="table table-sm" t-if="o.state!='done'" | |||
|                            name="stock_move_table"> | |||
|                         <thead t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                             <tr> | |||
|                                 <th name="th_sm_product"> | |||
|                                     <strong>Product</strong> | |||
|                                 </th> | |||
|                                 <th name="th_sm_ordered"> | |||
|                                     <strong>Ordered</strong> | |||
|                                 </th> | |||
|                                 <th name="th_sm_quantity"> | |||
|                                     <strong>Delivered</strong> | |||
|                                 </th> | |||
|                             </tr> | |||
|                         </thead> | |||
|                         <tbody> | |||
|                             <t t-set="lines" | |||
|                                t-value="o.move_lines.filtered(lambda x: x.product_uom_qty)"/> | |||
|                             <tr t-foreach="lines" t-as="move"> | |||
|                                 <td> | |||
|                                     <span t-field="move.product_id"/> | |||
|                                     <p t-if="move.description_picking != move.product_id.name and move.description_picking != move.product_id.display_name"> | |||
|                                         <span t-field="move.description_picking"/> | |||
|                                     </p> | |||
|                                 </td> | |||
|                                 <td> | |||
|                                     <span t-field="move.product_uom_qty"/> | |||
|                                     <span t-field="move.product_uom"/> | |||
|                                 </td> | |||
|                                 <td> | |||
|                                     <span t-field="move.quantity_done"/> | |||
|                                     <span t-field="move.product_uom"/> | |||
|                                 </td> | |||
|                             </tr> | |||
|                         </tbody> | |||
|                     </table> | |||
|                     <table class="table table-sm mt48" | |||
|                            t-if="o.move_line_ids and o.state=='done'" | |||
|                            name="stock_move_line_table"> | |||
|                         <t t-set="has_serial_number" t-value="False"/> | |||
|                         <t t-set="has_serial_number" | |||
|                            t-value="o.move_line_ids.mapped('lot_id')" | |||
|                            groups="stock.group_lot_on_delivery_slip"/> | |||
|                         <thead t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                             <tr> | |||
|                                 <th name="th_sml_product"> | |||
|                                     <strong>Product</strong> | |||
|                                 </th> | |||
|                                 <t name="lot_serial" t-if="has_serial_number"> | |||
|                                     <th>Lot/Serial Number</th> | |||
|                                 </t> | |||
|                                 <th name="th_sml_qty_ordered" | |||
|                                     class="text-center" | |||
|                                     t-if="not has_serial_number"> | |||
|                                     <strong>Ordered</strong> | |||
|                                 </th> | |||
|                                 <th name="th_sml_quantity" class="text-center"> | |||
|                                     <strong>Delivered</strong> | |||
|                                 </th> | |||
|                             </tr> | |||
|                         </thead> | |||
|                         <tbody> | |||
|                             <!-- This part gets complicated with different use cases (additional use cases in extensions of this report): | |||
|                                                   1. If serial numbers are used and set to print on delivery slip => print lines as is, otherwise group them by overlapping | |||
|                                                       product + description + uom combinations | |||
|                                                   2. If any packages are assigned => split products up by package (or non-package) and then apply use case 1 --> | |||
|                             <!-- If has destination packages => create sections of corresponding products --> | |||
|                             <t t-if="o.has_packages" name="has_packages"> | |||
|                                 <t t-set="packages" | |||
|                                    t-value="o.move_line_ids.mapped('result_package_id')"/> | |||
|                                 <t t-foreach="packages" t-as="package"> | |||
|                                     <t t-call="stock.stock_report_delivery_package_section_line"/> | |||
|                                     <t t-set="package_move_lines" | |||
|                                        t-value="o.move_line_ids.filtered(lambda l: l.result_package_id == package)"/> | |||
|                                     <!-- If printing lots/serial numbers => keep products in original lines --> | |||
|                                     <t t-if="has_serial_number"> | |||
|                                         <tr t-foreach="package_move_lines" | |||
|                                             t-as="move_line"> | |||
|                                             <t t-call="stock.stock_report_delivery_has_serial_move_line"/> | |||
|                                         </tr> | |||
|                                     </t> | |||
|                                     <!-- If not printing lots/serial numbers => merge lines with same product+description+uom --> | |||
|                                     <t t-else=""> | |||
|                                         <t t-set="aggregated_lines" | |||
|                                            t-value="package_move_lines._get_aggregated_product_quantities(strict=True)"/> | |||
|                                         <t t-call="stock.stock_report_delivery_aggregated_move_lines"/> | |||
|                                     </t> | |||
|                                 </t> | |||
|                                 <!-- Make sure we do another section for package-less products if they exist --> | |||
|                                 <t t-set="move_lines" | |||
|                                    t-value="o.move_line_ids.filtered(lambda l: not l.result_package_id)"/> | |||
|                                 <t t-set="aggregated_lines" | |||
|                                    t-value="o.move_line_ids._get_aggregated_product_quantities(except_package=True)"/> | |||
|                                 <t t-if="move_lines or aggregated_lines" | |||
|                                    name="no_package_move_lines"> | |||
|                                     <t t-call="stock.stock_report_delivery_no_package_section_line" | |||
|                                        name="no_package_section"/> | |||
|                                     <t t-if="has_serial_number"> | |||
|                                         <tr t-foreach="move_lines" | |||
|                                             t-as="move_line"> | |||
|                                             <t t-call="stock.stock_report_delivery_has_serial_move_line"/> | |||
|                                         </tr> | |||
|                                     </t> | |||
|                                     <t t-elif="aggregated_lines"> | |||
|                                         <t t-call="stock.stock_report_delivery_aggregated_move_lines"/> | |||
|                                     </t> | |||
|                                 </t> | |||
|                             </t> | |||
|                             <!-- No destination packages --> | |||
|                             <t t-else=""> | |||
|                                 <!-- If printing lots/serial numbers => keep products in original lines --> | |||
|                                 <t t-if="has_serial_number"> | |||
|                                     <tr t-foreach="o.move_line_ids" | |||
|                                         t-as="move_line"> | |||
|                                         <t t-call="stock.stock_report_delivery_has_serial_move_line"/> | |||
|                                     </tr> | |||
|                                 </t> | |||
|                                 <!-- If not printing lots/serial numbers => merge lines with same product --> | |||
|                                 <t t-else="" name="aggregated_move_lines"> | |||
|                                     <t t-set="aggregated_lines" | |||
|                                        t-value="o.move_line_ids._get_aggregated_product_quantities()"/> | |||
|                                     <t t-call="stock.stock_report_delivery_aggregated_move_lines"/> | |||
|                                 </t> | |||
|                             </t> | |||
|                         </tbody> | |||
|                     </table> | |||
|                     <t t-set="backorders" | |||
|                        t-value="o.backorder_ids.filtered(lambda x: x.state not in ('done', 'cancel'))"/> | |||
|                     <t t-if="o.backorder_ids and backorders"> | |||
|                         <p class="mt-5"> | |||
|                             <span>Remaining quantities not yet delivered:</span> | |||
|                         </p> | |||
|                         <table class="table table-sm" | |||
|                                name="stock_backorder_table" | |||
|                                style="table-layout: fixed;"> | |||
|                             <thead t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                                 <tr> | |||
|                                     <th name="th_sb_product"> | |||
|                                         <strong>Product</strong> | |||
|                                     </th> | |||
|                                     <th/> | |||
|                                     <th name="th_sb_quantity" | |||
|                                         class="text-center"> | |||
|                                         <strong>Quantity</strong> | |||
|                                     </th> | |||
|                                 </tr> | |||
|                             </thead> | |||
|                             <tbody> | |||
|                                 <t t-foreach="backorders" t-as="backorder"> | |||
|                                     <t t-set="bo_lines" | |||
|                                        t-value="backorder.move_lines.filtered(lambda x: x.product_uom_qty)"/> | |||
|                                     <tr t-foreach="bo_lines" t-as="bo_line"> | |||
|                                         <td class="w-auto"> | |||
|                                             <span t-field="bo_line.product_id"/> | |||
|                                             <p t-if="bo_line.description_picking != bo_line.product_id.name and bo_line.description_picking != bo_line.product_id.display_name"> | |||
|                                                 <span t-field="bo_line.description_picking"/> | |||
|                                             </p> | |||
|                                         </td> | |||
|                                         <td/> | |||
|                                         <td class="text-center w-auto"> | |||
|                                             <span t-field="bo_line.product_uom_qty"/> | |||
|                                             <span t-field="bo_line.product_uom"/> | |||
|                                         </td> | |||
|                                     </tr> | |||
|                                 </t> | |||
|                             </tbody> | |||
|                         </table> | |||
|                         <br/> | |||
|                         <br/> | |||
|                         <br/> | |||
|                     </t> | |||
|                 </div> | |||
|             </t> | |||
|         </t> | |||
|     </template> | |||
| </odoo> | |||
| @ -0,0 +1,303 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--    Delivery Slip Modern Template--> | |||
|     <template id="report_stock_modern_document"> | |||
|         <t t-if="o and 'company_id' in o"> | |||
|             <t t-set="company" t-value="o.company_id"/> | |||
|         </t> | |||
|         <t t-if="not o or not 'company_id' in o"> | |||
|             <t t-set="company" t-value="res_company"/> | |||
|         </t> | |||
|         <div class="header row mt32 mb32"> | |||
|             <div class="page-header col-12"> | |||
|                 <div t-attf-class="pull-left"> | |||
|                     <t t-if="company.logo"> | |||
|                         <img t-if="company.logo" | |||
|                              t-att-src="image_data_uri(company.logo)" | |||
|                              style="max-height: 80px;"/> | |||
|                     </t> | |||
|                 </div> | |||
|                 <div t-attf-class="pull-left" | |||
|                      t-attf-style="font:14px lucida-console,sans-serif; color:#{o.theme_id.company_text_color} !important;"> | |||
|                     <span t-field="company.partner_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street2"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.city"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.country_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.vat"/> | |||
|                     <br/> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|         <t t-call="web.html_container"> | |||
|             <t t-call="web.external_layout"> | |||
|                 <t t-set="o" t-value="o.with_context(lang=o.partner_id.lang)"/> | |||
|                 <t t-set="partner" | |||
|                    t-value="o.partner_id or (o.move_lines and o.move_lines[0].partner_id) or False"/> | |||
|                 <div name="vendor_address" | |||
|                      t-if="o.picking_type_id.code=='incoming' and partner" | |||
|                      t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                     <span> | |||
|                         <strong>Vendor Address:</strong> | |||
|                     </span> | |||
|                 </div> | |||
|                 <div name="warehouse_address" | |||
|                      t-if="o.picking_type_id.code=='internal' and partner" | |||
|                      t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                     <span> | |||
|                         <strong>Warehouse Address:</strong> | |||
|                     </span> | |||
|                 </div> | |||
|                 <div name="customer_address" | |||
|                      t-if="o.picking_type_id.code=='outgoing' and partner" | |||
|                      t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                     <span> | |||
|                         <strong>Customer Address:</strong> | |||
|                     </span> | |||
|                 </div> | |||
|                 <div t-if="partner" name="partner_header"> | |||
|                     <div t-field="partner.commercial_partner_id" | |||
|                          t-options='{"widget": "contact", "fields": ["address", "name", "phone", "vat"], "no_marker": True, "phone_icons": True}'/> | |||
|                 </div> | |||
|                 <div name="customer_address" | |||
|                      t-if="o.picking_type_id.code != 'internal' and (not o.move_ids_without_package or not o.move_ids_without_package[0].partner_id or o.move_ids_without_package[0].partner_id == partner) and o.picking_type_id.warehouse_id.partner_id" | |||
|                      t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                     <span> | |||
|                         <strong>Warehouse Address:</strong> | |||
|                     </span> | |||
|                 </div> | |||
|                 <div t-if="partner" name="partner_header"> | |||
|                     <div t-field="o.picking_type_id.warehouse_id.partner_id" | |||
|                          t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}'/> | |||
|                 </div> | |||
|                 <div name="customer_address" | |||
|                      t-if="o.move_ids_without_package and o.move_ids_without_package[0].partner_id and o.move_ids_without_package[0].partner_id != partner" | |||
|                      t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                     <span> | |||
|                         <strong>Delivery Address:</strong> | |||
|                     </span> | |||
|                 </div> | |||
|                 <div t-if="partner" name="partner_header"> | |||
|                     <div t-field="o.move_ids_without_package[0].partner_id" | |||
|                          t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}'/> | |||
|                 </div> | |||
|                 <table class="table table-sm" t-if="o.state!='done'" | |||
|                        name="stock_move_table"> | |||
|                     <thead t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                         <tr> | |||
|                             <th name="th_sm_ordered" t-if="o.state"> | |||
|                                 <strong>Source</strong> | |||
|                             </th> | |||
|                             <th name="th_sm_product" t-if="o.origin"> | |||
|                                 <strong>Order</strong> | |||
|                             </th> | |||
|                             <th name="th_sm_ordered" t-if="o.state"> | |||
|                                 <strong>Shipping Date</strong> | |||
|                             </th> | |||
|                         </tr> | |||
|                     </thead> | |||
|                     <tbody> | |||
|                         <tr t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                             <td> | |||
|                                 <span t-field="o.name"/> | |||
|                             </td> | |||
|                             <td t-if="o.origin"> | |||
|                                 <p t-field="o.origin"/> | |||
|                             </td> | |||
|                             <td> | |||
|                                 <t t-if="o.state == 'done'"> | |||
|                                     <p t-field="o.date_done"/> | |||
|                                 </t> | |||
|                                 <t t-if="o.state != 'done'"> | |||
|                                     <p t-field="o.scheduled_date"/> | |||
|                                 </t> | |||
|                             </td> | |||
|                         </tr> | |||
|                     </tbody> | |||
|                 </table> | |||
|                 <br/> | |||
|                 <br/> | |||
|                 <br/> | |||
|                 <div class="page"> | |||
|                     <table class="table table-sm" t-if="o.state!='done'" | |||
|                            name="stock_move_table"> | |||
|                         <thead t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                             <tr> | |||
|                                 <th name="th_sm_product"> | |||
|                                     <strong>Product</strong> | |||
|                                 </th> | |||
|                                 <th name="th_sm_ordered"> | |||
|                                     <strong>Ordered</strong> | |||
|                                 </th> | |||
|                                 <th name="th_sm_quantity"> | |||
|                                     <strong>Delivered</strong> | |||
|                                 </th> | |||
|                             </tr> | |||
|                         </thead> | |||
|                         <tbody t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                             <t t-set="lines" | |||
|                                t-value="o.move_lines.filtered(lambda x: x.product_uom_qty)"/> | |||
|                             <tr t-foreach="lines" t-as="move"> | |||
|                                 <td> | |||
|                                     <span t-field="move.product_id"/> | |||
|                                     <p t-if="move.description_picking != move.product_id.name and move.description_picking != move.product_id.display_name"> | |||
|                                         <span t-field="move.description_picking"/> | |||
|                                     </p> | |||
|                                 </td> | |||
|                                 <td> | |||
|                                     <span t-field="move.product_uom_qty"/> | |||
|                                     <span t-field="move.product_uom"/> | |||
|                                 </td> | |||
|                                 <td> | |||
|                                     <span t-field="move.quantity_done"/> | |||
|                                     <span t-field="move.product_uom"/> | |||
|                                 </td> | |||
|                             </tr> | |||
|                         </tbody> | |||
|                     </table> | |||
|                     <br/> | |||
|                     <br/> | |||
|                     <br/> | |||
|                     <br/> | |||
|                     <table class="table table-sm mt48" | |||
|                            t-if="o.move_line_ids and o.state=='done'" | |||
|                            name="stock_move_line_table"> | |||
|                         <t t-set="has_serial_number" t-value="False"/> | |||
|                         <t t-set="has_serial_number" | |||
|                            t-value="o.move_line_ids.mapped('lot_id')" | |||
|                            groups="stock.group_lot_on_delivery_slip"/> | |||
|                         <thead t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                             <tr> | |||
|                                 <th name="th_sml_product"> | |||
|                                     <strong>Product</strong> | |||
|                                 </th> | |||
|                                 <t name="lot_serial" t-if="has_serial_number"> | |||
|                                     <th>Lot/Serial Number</th> | |||
|                                 </t> | |||
|                                 <th name="th_sml_qty_ordered" | |||
|                                     class="text-center" | |||
|                                     t-if="not has_serial_number"> | |||
|                                     <strong>Ordered</strong> | |||
|                                 </th> | |||
|                                 <th name="th_sml_quantity" class="text-center"> | |||
|                                     <strong>Delivered</strong> | |||
|                                 </th> | |||
|                             </tr> | |||
|                         </thead> | |||
|                         <tbody t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                             <!-- This part gets complicated with different use cases (additional use cases in extensions of this report): | |||
|                                                   1. If serial numbers are used and set to print on delivery slip => print lines as is, otherwise group them by overlapping | |||
|                                                       product + description + uom combinations | |||
|                                                   2. If any packages are assigned => split products up by package (or non-package) and then apply use case 1 --> | |||
|                             <!-- If has destination packages => create sections of corresponding products --> | |||
|                             <t t-if="o.has_packages" name="has_packages"> | |||
|                                 <t t-set="packages" | |||
|                                    t-value="o.move_line_ids.mapped('result_package_id')"/> | |||
|                                 <t t-foreach="packages" t-as="package"> | |||
|                                     <t t-call="stock.stock_report_delivery_package_section_line"/> | |||
|                                     <t t-set="package_move_lines" | |||
|                                        t-value="o.move_line_ids.filtered(lambda l: l.result_package_id == package)"/> | |||
|                                     <!-- If printing lots/serial numbers => keep products in original lines --> | |||
|                                     <t t-if="has_serial_number"> | |||
|                                         <tr t-foreach="package_move_lines" | |||
|                                             t-as="move_line"> | |||
|                                             <t t-call="stock.stock_report_delivery_has_serial_move_line"/> | |||
|                                         </tr> | |||
|                                     </t> | |||
|                                     <!-- If not printing lots/serial numbers => merge lines with same product+description+uom --> | |||
|                                     <t t-else=""> | |||
|                                         <t t-set="aggregated_lines" | |||
|                                            t-value="package_move_lines._get_aggregated_product_quantities(strict=True)"/> | |||
|                                         <t t-call="stock.stock_report_delivery_aggregated_move_lines"/> | |||
|                                     </t> | |||
|                                 </t> | |||
|                                 <!-- Make sure we do another section for package-less products if they exist --> | |||
|                                 <t t-set="move_lines" | |||
|                                    t-value="o.move_line_ids.filtered(lambda l: not l.result_package_id)"/> | |||
|                                 <t t-set="aggregated_lines" | |||
|                                    t-value="o.move_line_ids._get_aggregated_product_quantities(except_package=True)"/> | |||
|                                 <t t-if="move_lines or aggregated_lines" | |||
|                                    name="no_package_move_lines"> | |||
|                                     <t t-call="stock.stock_report_delivery_no_package_section_line" | |||
|                                        name="no_package_section"/> | |||
|                                     <t t-if="has_serial_number"> | |||
|                                         <tr t-foreach="move_lines" | |||
|                                             t-as="move_line"> | |||
|                                             <t t-call="stock.stock_report_delivery_has_serial_move_line"/> | |||
|                                         </tr> | |||
|                                     </t> | |||
|                                     <t t-elif="aggregated_lines"> | |||
|                                         <t t-call="stock.stock_report_delivery_aggregated_move_lines"/> | |||
|                                     </t> | |||
|                                 </t> | |||
|                             </t> | |||
|                             <!-- No destination packages --> | |||
|                             <t t-else=""> | |||
|                                 <!-- If printing lots/serial numbers => keep products in original lines --> | |||
|                                 <t t-if="has_serial_number"> | |||
|                                     <tr t-foreach="o.move_line_ids" | |||
|                                         t-as="move_line"> | |||
|                                         <t t-call="stock.stock_report_delivery_has_serial_move_line"/> | |||
|                                     </tr> | |||
|                                 </t> | |||
|                                 <!-- If not printing lots/serial numbers => merge lines with same product --> | |||
|                                 <t t-else="" name="aggregated_move_lines"> | |||
|                                     <t t-set="aggregated_lines" | |||
|                                        t-value="o.move_line_ids._get_aggregated_product_quantities()"/> | |||
|                                     <t t-call="stock.stock_report_delivery_aggregated_move_lines"/> | |||
|                                 </t> | |||
|                             </t> | |||
|                         </tbody> | |||
|                     </table> | |||
|                     <t t-set="backorders" | |||
|                        t-value="o.backorder_ids.filtered(lambda x: x.state not in ('done', 'cancel'))"/> | |||
|                     <t t-if="o.backorder_ids and backorders"> | |||
|                         <p class="mt-5"> | |||
|                             <span>Remaining quantities not yet delivered:</span> | |||
|                         </p> | |||
|                         <table class="table table-sm" | |||
|                                name="stock_backorder_table" | |||
|                                style="table-layout: fixed;"> | |||
|                             <thead> | |||
|                                 <tr> | |||
|                                     <th name="th_sb_product"> | |||
|                                         <strong>Product</strong> | |||
|                                     </th> | |||
|                                     <th/> | |||
|                                     <th name="th_sb_quantity" | |||
|                                         class="text-center"> | |||
|                                         <strong>Quantity</strong> | |||
|                                     </th> | |||
|                                 </tr> | |||
|                             </thead> | |||
|                             <tbody t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                                 <t t-foreach="backorders" t-as="backorder"> | |||
|                                     <t t-set="bo_lines" | |||
|                                        t-value="backorder.move_lines.filtered(lambda x: x.product_uom_qty)"/> | |||
|                                     <tr t-foreach="bo_lines" t-as="bo_line"> | |||
|                                         <td class="w-auto"> | |||
|                                             <span t-field="bo_line.product_id"/> | |||
|                                             <p t-if="bo_line.description_picking != bo_line.product_id.name and bo_line.description_picking != bo_line.product_id.display_name"> | |||
|                                                 <span t-field="bo_line.description_picking"/> | |||
|                                             </p> | |||
|                                         </td> | |||
|                                         <td/> | |||
|                                         <td class="text-center w-auto"> | |||
|                                             <span t-field="bo_line.product_uom_qty"/> | |||
|                                             <span t-field="bo_line.product_uom"/> | |||
|                                         </td> | |||
|                                     </tr> | |||
|                                 </t> | |||
|                             </tbody> | |||
|                         </table> | |||
|                     </t> | |||
|                 </div> | |||
|             </t> | |||
|         </t> | |||
|     </template> | |||
| </odoo> | |||
| @ -0,0 +1,13 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--    Report Function in Delivery Slip --> | |||
|     <record id="stock.action_report_delivery" model="ir.actions.report"> | |||
|         <field name="name">Delivery Slip</field> | |||
|         <field name="model">stock.picking</field> | |||
|         <field name="report_type">qweb-pdf</field> | |||
|         <field name="report_name">base_advanced_report_templates.report_deliveryslip_custom</field> | |||
|         <field name="report_file">base_advanced_report_templates.report_deliveryslip_custom</field> | |||
|         <field name="print_report_name">'Delivery Slip - %s - %s' % (object.partner_id.name or '', object.name)</field> | |||
|         <field name="binding_type">report</field> | |||
|     </record> | |||
| </odoo> | |||
| @ -0,0 +1,296 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--    Delivery Slip Standard Template--> | |||
|     <template id="report_stock_standard_document"> | |||
|         <t t-if="o and 'company_id' in o"> | |||
|             <t t-set="company" t-value="o.company_id"/> | |||
|         </t> | |||
|         <t t-if="not o or not 'company_id' in o"> | |||
|             <t t-set="company" t-value="res_company"/> | |||
|         </t> | |||
|         <div class="header row mt32 mb32"> | |||
|             <div class="page-header col-12"> | |||
|                 <div t-attf-class="pull-left"> | |||
|                     <t t-if="company.logo"> | |||
|                         <img t-if="company.logo" | |||
|                              t-att-src="image_data_uri(company.logo)" | |||
|                              style="max-height: 80px;"/> | |||
|                     </t> | |||
|                 </div> | |||
|                 <div t-attf-class="pull-left" | |||
|                      t-attf-style="font:14px lucida-console,sans-serif; color:#{o.theme_id.company_text_color} !important;"> | |||
|                     <span t-field="company.partner_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street2"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.city"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.country_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.vat"/> | |||
|                     <br/> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|         <t t-call="web.html_container"> | |||
|             <t t-call="web.external_layout"> | |||
|                 <t t-set="o" t-value="o.with_context(lang=o.partner_id.lang)"/> | |||
|                 <t t-set="partner" | |||
|                    t-value="o.partner_id or (o.move_lines and o.move_lines[0].partner_id) or False"/> | |||
|                 <div t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                     <h2> | |||
|                         <span t-field="o.name"/> | |||
|                     </h2> | |||
|                     <div class="row mt32 mb32"> | |||
|                         <div t-if="o.origin" class="col-auto" name="div_origin"> | |||
|                             <strong>Order:</strong> | |||
|                             <p t-field="o.origin"/> | |||
|                         </div> | |||
|                         <div t-if="o.state" class="col-auto" | |||
|                              name="div_sched_date"> | |||
|                             <strong>Shipping Date:</strong> | |||
|                             <t t-if="o.state == 'done'"> | |||
|                                 <p t-field="o.date_done"/> | |||
|                             </t> | |||
|                             <t t-if="o.state != 'done'"> | |||
|                                 <p t-field="o.scheduled_date"/> | |||
|                             </t> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|                 <div class="row mt32 mb32"> | |||
|                     <div name="vendor_address" | |||
|                          t-if="o.picking_type_id.code=='incoming' and partner" | |||
|                          class="col-auto"> | |||
|                         <div> | |||
|                             <strong>Vendor Address:</strong> | |||
|                         </div> | |||
|                     </div> | |||
|                     <div name="warehouse_address" | |||
|                          t-if="o.picking_type_id.code=='internal' and partner" | |||
|                          class="col-auto"> | |||
|                         <div> | |||
|                             <strong>Warehouse Address:</strong> | |||
|                         </div> | |||
|                     </div> | |||
|                     <div name="customer_address" | |||
|                          t-if="o.picking_type_id.code=='outgoing' and partner" | |||
|                          class="col-auto"> | |||
|                         <div> | |||
|                             <strong>Customer Address:</strong> | |||
|                         </div> | |||
|                         <div t-if="partner" name="partner_header" | |||
|                              class="col-auto"> | |||
|                             <div t-field="partner.commercial_partner_id" | |||
|                                  t-options='{"widget": "contact", "fields": ["address", "name", "phone", "vat"], "no_marker": True, "phone_icons": True}'/> | |||
|                         </div> | |||
|                     </div> | |||
|                     <div name="outgoing_delivery_address" class="col-auto" | |||
|                          t-if="o.move_ids_without_package and o.move_ids_without_package[0].partner_id and o.move_ids_without_package[0].partner_id != partner"> | |||
|                         <div> | |||
|                             <strong>Delivery Address:</strong> | |||
|                         </div> | |||
|                         <div t-field="o.move_ids_without_package[0].partner_id" | |||
|                              t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}'/> | |||
|                     </div> | |||
|                     <div name="outgoing_warehouse_address" class="col-auto" | |||
|                          t-if="o.picking_type_id.code != 'internal' and (not o.move_ids_without_package or not o.move_ids_without_package[0].partner_id or o.move_ids_without_package[0].partner_id == partner) and o.picking_type_id.warehouse_id.partner_id"> | |||
|                         <div> | |||
|                             <strong>Warehouse Address:</strong> | |||
|                         </div> | |||
|                         <div t-field="o.picking_type_id.warehouse_id.partner_id" | |||
|                              t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}'/> | |||
|                     </div> | |||
|                 </div> | |||
|                 <br/> | |||
|                 <br/> | |||
|                 <br/> | |||
|                 <div class="page"> | |||
|                     <table class="table table-sm" t-if="o.state!='done'" | |||
|                            name="stock_move_table"> | |||
|                         <thead t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                             <tr> | |||
|                                 <th name="th_sm_product"> | |||
|                                     <strong>Product</strong> | |||
|                                 </th> | |||
|                                 <th name="th_sm_ordered"> | |||
|                                     <strong>Ordered</strong> | |||
|                                 </th> | |||
|                                 <th name="th_sm_quantity"> | |||
|                                     <strong>Delivered</strong> | |||
|                                 </th> | |||
|                             </tr> | |||
|                         </thead> | |||
|                         <tbody t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                             <t t-set="lines" | |||
|                                t-value="o.move_lines.filtered(lambda x: x.product_uom_qty)"/> | |||
|                             <tr t-foreach="lines" t-as="move"> | |||
|                                 <td> | |||
|                                     <span t-field="move.product_id"/> | |||
|                                     <p t-if="move.description_picking != move.product_id.name and move.description_picking != move.product_id.display_name"> | |||
|                                         <span t-field="move.description_picking"/> | |||
|                                     </p> | |||
|                                 </td> | |||
|                                 <td> | |||
|                                     <span t-field="move.product_uom_qty"/> | |||
|                                     <span t-field="move.product_uom"/> | |||
|                                 </td> | |||
|                                 <td> | |||
|                                     <span t-field="move.quantity_done"/> | |||
|                                     <span t-field="move.product_uom"/> | |||
|                                 </td> | |||
|                             </tr> | |||
|                         </tbody> | |||
|                     </table> | |||
|                     <table class="table table-sm mt48" | |||
|                            t-if="o.move_line_ids and o.state=='done'" | |||
|                            name="stock_move_line_table"> | |||
|                         <t t-set="has_serial_number" t-value="False"/> | |||
|                         <t t-set="has_serial_number" | |||
|                            t-value="o.move_line_ids.mapped('lot_id')" | |||
|                            groups="stock.group_lot_on_delivery_slip"/> | |||
|                         <thead> | |||
|                             <tr> | |||
|                                 <th name="th_sml_product"> | |||
|                                     <strong>Product</strong> | |||
|                                 </th> | |||
|                                 <t name="lot_serial" t-if="has_serial_number"> | |||
|                                     <th>Lot/Serial Number</th> | |||
|                                 </t> | |||
|                                 <th name="th_sml_qty_ordered" | |||
|                                     class="text-center" | |||
|                                     t-if="not has_serial_number"> | |||
|                                     <strong>Ordered</strong> | |||
|                                 </th> | |||
|                                 <th name="th_sml_quantity" class="text-center"> | |||
|                                     <strong>Delivered</strong> | |||
|                                 </th> | |||
|                             </tr> | |||
|                         </thead> | |||
|                         <tbody t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                             <!-- This part gets complicated with different use cases (additional use cases in extensions of this report): | |||
|                                                   1. If serial numbers are used and set to print on delivery slip => print lines as is, otherwise group them by overlapping | |||
|                                                       product + description + uom combinations | |||
|                                                   2. If any packages are assigned => split products up by package (or non-package) and then apply use case 1 --> | |||
|                             <!-- If has destination packages => create sections of corresponding products --> | |||
|                             <t t-if="o.has_packages" name="has_packages"> | |||
|                                 <t t-set="packages" | |||
|                                    t-value="o.move_line_ids.mapped('result_package_id')"/> | |||
|                                 <t t-foreach="packages" t-as="package"> | |||
|                                     <t t-call="stock.stock_report_delivery_package_section_line"/> | |||
|                                     <t t-set="package_move_lines" | |||
|                                        t-value="o.move_line_ids.filtered(lambda l: l.result_package_id == package)"/> | |||
|                                     <!-- If printing lots/serial numbers => keep products in original lines --> | |||
|                                     <t t-if="has_serial_number"> | |||
|                                         <tr t-foreach="package_move_lines" | |||
|                                             t-as="move_line"> | |||
|                                             <t t-call="stock.stock_report_delivery_has_serial_move_line"/> | |||
|                                         </tr> | |||
|                                     </t> | |||
|                                     <!-- If not printing lots/serial numbers => merge lines with same product+description+uom --> | |||
|                                     <t t-else=""> | |||
|                                         <t t-set="aggregated_lines" | |||
|                                            t-value="package_move_lines._get_aggregated_product_quantities(strict=True)"/> | |||
|                                         <t t-call="stock.stock_report_delivery_aggregated_move_lines"/> | |||
|                                     </t> | |||
|                                 </t> | |||
|                                 <!-- Make sure we do another section for package-less products if they exist --> | |||
|                                 <t t-set="move_lines" | |||
|                                    t-value="o.move_line_ids.filtered(lambda l: not l.result_package_id)"/> | |||
|                                 <t t-set="aggregated_lines" | |||
|                                    t-value="o.move_line_ids._get_aggregated_product_quantities(except_package=True)"/> | |||
|                                 <t t-if="move_lines or aggregated_lines" | |||
|                                    name="no_package_move_lines"> | |||
|                                     <t t-call="stock.stock_report_delivery_no_package_section_line" | |||
|                                        name="no_package_section"/> | |||
|                                     <t t-if="has_serial_number"> | |||
|                                         <tr t-foreach="move_lines" | |||
|                                             t-as="move_line"> | |||
|                                             <t t-call="stock.stock_report_delivery_has_serial_move_line"/> | |||
|                                         </tr> | |||
|                                     </t> | |||
|                                     <t t-elif="aggregated_lines"> | |||
|                                         <t t-call="stock.stock_report_delivery_aggregated_move_lines"/> | |||
|                                     </t> | |||
|                                 </t> | |||
|                             </t> | |||
|                             <!-- No destination packages --> | |||
|                             <t t-else=""> | |||
|                                 <!-- If printing lots/serial numbers => keep products in original lines --> | |||
|                                 <t t-if="has_serial_number"> | |||
|                                     <tr t-foreach="o.move_line_ids" | |||
|                                         t-as="move_line"> | |||
|                                         <t t-call="stock.stock_report_delivery_has_serial_move_line"/> | |||
|                                     </tr> | |||
|                                 </t> | |||
|                                 <!-- If not printing lots/serial numbers => merge lines with same product --> | |||
|                                 <t t-else="" name="aggregated_move_lines"> | |||
|                                     <t t-set="aggregated_lines" | |||
|                                        t-value="o.move_line_ids._get_aggregated_product_quantities()"/> | |||
|                                     <t t-call="stock.stock_report_delivery_aggregated_move_lines"/> | |||
|                                 </t> | |||
|                             </t> | |||
|                         </tbody> | |||
|                     </table> | |||
|                     <t t-set="backorders" | |||
|                        t-value="o.backorder_ids.filtered(lambda x: x.state not in ('done', 'cancel'))"/> | |||
|                     <t t-if="o.backorder_ids and backorders"> | |||
|                         <p class="mt-5"> | |||
|                             <span>Remaining quantities not yet delivered:</span> | |||
|                         </p> | |||
|                         <table class="table table-sm" | |||
|                                name="stock_backorder_table" | |||
|                                style="table-layout: fixed;"> | |||
|                             <thead> | |||
|                                 <tr> | |||
|                                     <th name="th_sb_product"> | |||
|                                         <strong>Product</strong> | |||
|                                     </th> | |||
|                                     <th/> | |||
|                                     <th name="th_sb_quantity" | |||
|                                         class="text-center"> | |||
|                                         <strong>Quantity</strong> | |||
|                                     </th> | |||
|                                 </tr> | |||
|                             </thead> | |||
|                             <tbody t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                                 <t t-foreach="backorders" t-as="backorder"> | |||
|                                     <t t-set="bo_lines" | |||
|                                        t-value="backorder.move_lines.filtered(lambda x: x.product_uom_qty)"/> | |||
|                                     <tr t-foreach="bo_lines" t-as="bo_line"> | |||
|                                         <td class="w-auto"> | |||
|                                             <span t-field="bo_line.product_id"/> | |||
|                                             <p t-if="bo_line.description_picking != bo_line.product_id.name and bo_line.description_picking != bo_line.product_id.display_name"> | |||
|                                                 <span t-field="bo_line.description_picking"/> | |||
|                                             </p> | |||
|                                         </td> | |||
|                                         <td/> | |||
|                                         <td class="text-center w-auto"> | |||
|                                             <span t-field="bo_line.product_uom_qty"/> | |||
|                                             <span t-field="bo_line.product_uom"/> | |||
|                                         </td> | |||
|                                     </tr> | |||
|                                 </t> | |||
|                             </tbody> | |||
|                         </table> | |||
|                     </t> | |||
|                     <div t-if="o.signature" class="mt32 ml64 mr4" | |||
|                          name="signature"> | |||
|                         <div class="offset-8"> | |||
|                             <strong>Signature</strong> | |||
|                         </div> | |||
|                         <div class="offset-8"> | |||
|                             <img t-att-src="image_data_uri(o.signature)" | |||
|                                  style="max-height: 4cm; max-width: 8cm;"/> | |||
|                         </div> | |||
|                         <div class="offset-8 text-center"> | |||
|                             <p t-field="o.partner_id.name"/> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|             </t> | |||
|         </t> | |||
|     </template> | |||
| </odoo> | |||
| @ -0,0 +1,327 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <odoo> | |||
|     <!--Delivery Traditional Template--> | |||
|     <template id="report_deliveryslip_custom"> | |||
|         <t t-foreach="docs" t-as="o"> | |||
|             <t t-if="o.theme_id.name=='Traditional'"> | |||
|                 <t t-call="base_advanced_report_templates.report_stock_traditional_document" | |||
|                    t-lang="o.partner_id.lang"/> | |||
|             </t> | |||
|             <t t-elif="o.theme_id.name=='Standard'"> | |||
|                 <t t-call="base_advanced_report_templates.report_stock_standard_document" | |||
|                    t-lang="o.partner_id.lang"/> | |||
|             </t> | |||
|             <t t-elif="o.theme_id.name=='Modern'"> | |||
|                 <t t-call="base_advanced_report_templates.report_stock_modern_document" | |||
|                    t-lang="o.partner_id.lang"/> | |||
|             </t> | |||
|             <t t-elif="o.theme_id.name=='Attractive'"> | |||
|                 <t t-call="base_advanced_report_templates.report_stock_attractive_document" | |||
|                    t-lang="o.partner_id.lang"/> | |||
|             </t> | |||
|         </t> | |||
|     </template> | |||
|     <template id="report_stock_traditional_document"> | |||
|         <t t-if="o and 'company_id' in o"> | |||
|             <t t-set="company" t-value="o.company_id"/> | |||
|         </t> | |||
|         <t t-if="not o or not 'company_id' in o"> | |||
|             <t t-set="company" t-value="res_company"/> | |||
|         </t> | |||
|         <div class="header row mt32 mb32"> | |||
|             <div class="page-header col-12"> | |||
|                 <div t-attf-class="pull-left"> | |||
|                     <t t-if="company.logo"> | |||
|                         <img t-if="company.logo" | |||
|                              t-att-src="image_data_uri(company.logo)" | |||
|                              style="max-height: 80px;"/> | |||
|                     </t> | |||
|                 </div> | |||
|                 <div t-attf-class="pull-left" | |||
|                      t-attf-style="font:14px lucida-console,sans-serif; color:#{o.theme_id.company_text_color} !important;"> | |||
|                     <span t-field="company.partner_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.street2"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.city"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.country_id"/> | |||
|                     <br/> | |||
|                     <span t-field="company.partner_id.vat"/> | |||
|                     <br/> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|         <t t-call="web.html_container"> | |||
|             <t t-call="web.external_layout"> | |||
|                 <t t-set="o" t-value="o.with_context(lang=o.partner_id.lang)"/> | |||
|                 <t t-set="partner" | |||
|                    t-value="o.partner_id or (o.move_lines and o.move_lines[0].partner_id) or False"/> | |||
|                 <div class="page"> | |||
|                     <table class="table table-sm" t-if="o.state!='done'" | |||
|                            name="stock_move_table"> | |||
|                         <thead t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                             <tr> | |||
|                                 <th name="th_sm_quantity" | |||
|                                     t-if="o.picking_type_id.code=='incoming' and partner" | |||
|                                     class="text-start"> | |||
|                                     <strong>Vendor Address</strong> | |||
|                                 </th> | |||
|                                 <th name="th_sm_quantity" | |||
|                                     t-if="o.picking_type_id.code=='internal'" | |||
|                                     class="text-start"> | |||
|                                     <strong>Warehouse Address</strong> | |||
|                                 </th> | |||
|                                 <th name="th_sm_quantity" | |||
|                                     t-if="o.picking_type_id.code=='outgoing' and partner" | |||
|                                     class="text-start"> | |||
|                                     <strong>Customer Address</strong> | |||
|                                 </th> | |||
|                                 <th name="th_sm_quantity" | |||
|                                     t-if="o.picking_type_id.code != 'internal' and (not o.move_ids_without_package or not o.move_ids_without_package[0].partner_id or o.move_ids_without_package[0].partner_id == partner) and o.picking_type_id.warehouse_id.partner_id" | |||
|                                     class="text-start"> | |||
|                                     <strong>Warehouse Address</strong> | |||
|                                 </th> | |||
|                                 <th name="th_sm_quantity" | |||
|                                     t-if="o.move_ids_without_package and o.move_ids_without_package[0].partner_id and o.move_ids_without_package[0].partner_id != partner"> | |||
|                                     <strong>Delivery Address</strong> | |||
|                                 </th> | |||
|                                 <th name="th_sm_product" t-if="o.origin"> | |||
|                                     <strong>Order</strong> | |||
|                                 </th> | |||
|                                 <th name="th_sm_ordered" t-if="o.state"> | |||
|                                     <strong>Shipping Date</strong> | |||
|                                 </th> | |||
|                             </tr> | |||
|                         </thead> | |||
|                         <tbody> | |||
|                             <tr t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                                 <td> | |||
|                                     <div t-if="partner" name="partner_header"> | |||
|                                         <div t-field="partner.commercial_partner_id" | |||
|                                              t-options='{"widget": "contact", "fields": ["address", "name", "phone", "vat"], "no_marker": True, "phone_icons": True}'/> | |||
|                                     </div> | |||
|                                 </td> | |||
|                                 <td t-if="o.picking_type_id.code != 'internal' and (not o.move_ids_without_package or not o.move_ids_without_package[0].partner_id or o.move_ids_without_package[0].partner_id == partner) and o.picking_type_id.warehouse_id.partner_id"> | |||
|                                     <div t-field="o.picking_type_id.warehouse_id.partner_id" | |||
|                                          t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}'/> | |||
|                                 </td> | |||
|                                 <td t-if="o.move_ids_without_package and | |||
|                                         o.move_ids_without_package[0].partner_id and | |||
|                                         o.move_ids_without_package[0].partner_id != partner"> | |||
|                                     <div t-field="o.move_ids_without_package[0].partner_id" | |||
|                                          t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}'/> | |||
|                                 </td> | |||
|                                 <td> | |||
|                                     <p t-field="o.origin"/> | |||
|                                 </td> | |||
|                                 <td> | |||
|                                     <t t-if="o.state == 'done'"> | |||
|                                         <p t-field="o.date_done"/> | |||
|                                     </t> | |||
|                                     <t t-if="o.state != 'done'"> | |||
|                                         <p t-field="o.scheduled_date"/> | |||
|                                     </t> | |||
|                                 </td> | |||
|                             </tr> | |||
|                         </tbody> | |||
|                     </table> | |||
|                     <br/> | |||
|                     <br/> | |||
|                     <br/> | |||
|                     <br/> | |||
|                     <table class="table table-sm" t-if="o.state!='done'" | |||
|                            name="stock_move_table"> | |||
|                         <thead t-attf-style="background-color:#{o.theme_id.base_color};color:#{o.theme_id.heading_text_color};"> | |||
|                             <tr> | |||
|                                 <th name="th_sm_product"> | |||
|                                     <strong>Product</strong> | |||
|                                 </th> | |||
|                                 <th name="th_sm_product"> | |||
|                                     <strong>Image</strong> | |||
|                                 </th> | |||
|                                 <th name="th_sm_ordered"> | |||
|                                     <strong>Ordered</strong> | |||
|                                 </th> | |||
|                                 <th name="th_sm_quantity"> | |||
|                                     <strong>Delivered</strong> | |||
|                                 </th> | |||
|                             </tr> | |||
|                         </thead> | |||
|                         <tbody t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                             <t t-set="lines" | |||
|                                t-value="o.move_lines.filtered(lambda x: x.product_uom_qty)"/> | |||
|                             <tr t-foreach="lines" t-as="move"> | |||
|                                 <td> | |||
|                                     <span t-field="move.product_id"/> | |||
|                                     <p t-if="move.description_picking != move.product_id.name and move.description_picking != move.product_id.display_name"> | |||
|                                         <span t-field="move.description_picking"/> | |||
|                                     </p> | |||
|                                 </td> | |||
|                                 <td> | |||
|                                     <span t-field="move.order_line_image" | |||
|                                           t-options='{"widget": "image"}'/> | |||
|                                 </td> | |||
|                                 <td> | |||
|                                     <span t-field="move.product_uom_qty"/> | |||
|                                     <span t-field="move.product_uom"/> | |||
|                                 </td> | |||
|                                 <td> | |||
|                                     <span t-field="move.quantity_done"/> | |||
|                                     <span t-field="move.product_uom"/> | |||
|                                 </td> | |||
|                             </tr> | |||
|                         </tbody> | |||
|                     </table> | |||
|                     <table class="table table-sm mt48" | |||
|                            t-if="o.move_line_ids and o.state=='done'" | |||
|                            name="stock_move_line_table"> | |||
|                         <t t-set="has_serial_number" t-value="False"/> | |||
|                         <t t-set="has_serial_number" | |||
|                            t-value="o.move_line_ids.mapped('lot_id')" | |||
|                            groups="stock.group_lot_on_delivery_slip"/> | |||
|                         <thead> | |||
|                             <tr> | |||
|                                 <th name="th_sml_product"> | |||
|                                     <strong>Product</strong> | |||
|                                 </th> | |||
|                                 <t name="lot_serial" t-if="has_serial_number"> | |||
|                                     <th>Lot/Serial Number</th> | |||
|                                 </t> | |||
|                                 <th name="th_sml_qty_ordered" | |||
|                                     class="text-center" | |||
|                                     t-if="not has_serial_number"> | |||
|                                     <strong>Ordered</strong> | |||
|                                 </th> | |||
|                                 <th name="th_sml_quantity" class="text-center"> | |||
|                                     <strong>Delivered</strong> | |||
|                                 </th> | |||
|                             </tr> | |||
|                         </thead> | |||
|                         <tbody t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                             <!-- This part gets complicated with different use cases (additional use cases in extensions of this report): | |||
|                                                   1. If serial numbers are used and set to print on delivery slip => print lines as is, otherwise group them by overlapping | |||
|                                                       product + description + uom combinations | |||
|                                                   2. If any packages are assigned => split products up by package (or non-package) and then apply use case 1 --> | |||
|                             <!-- If has destination packages => create sections of corresponding products --> | |||
|                             <t t-if="o.has_packages" name="has_packages"> | |||
|                                 <t t-set="packages" | |||
|                                    t-value="o.move_line_ids.mapped('result_package_id')"/> | |||
|                                 <t t-foreach="packages" t-as="package"> | |||
|                                     <t t-call="stock.stock_report_delivery_package_section_line"/> | |||
|                                     <t t-set="package_move_lines" | |||
|                                        t-value="o.move_line_ids.filtered(lambda l: l.result_package_id == package)"/> | |||
|                                     <!-- If printing lots/serial numbers => keep products in original lines --> | |||
|                                     <t t-if="has_serial_number"> | |||
|                                         <tr t-foreach="package_move_lines" | |||
|                                             t-as="move_line"> | |||
|                                             <t t-call="stock.stock_report_delivery_has_serial_move_line"/> | |||
|                                         </tr> | |||
|                                     </t> | |||
|                                     <!-- If not printing lots/serial numbers => merge lines with same product+description+uom --> | |||
|                                     <t t-else=""> | |||
|                                         <t t-set="aggregated_lines" | |||
|                                            t-value="package_move_lines._get_aggregated_product_quantities(strict=True)"/> | |||
|                                         <t t-call="stock.stock_report_delivery_aggregated_move_lines"/> | |||
|                                     </t> | |||
|                                 </t> | |||
|                                 <!-- Make sure we do another section for package-less products if they exist --> | |||
|                                 <t t-set="move_lines" | |||
|                                    t-value="o.move_line_ids.filtered(lambda l: not l.result_package_id)"/> | |||
|                                 <t t-set="aggregated_lines" | |||
|                                    t-value="o.move_line_ids._get_aggregated_product_quantities(except_package=True)"/> | |||
|                                 <t t-if="move_lines or aggregated_lines" | |||
|                                    name="no_package_move_lines"> | |||
|                                     <t t-call="stock.stock_report_delivery_no_package_section_line" | |||
|                                        name="no_package_section"/> | |||
|                                     <t t-if="has_serial_number"> | |||
|                                         <tr t-foreach="move_lines" | |||
|                                             t-as="move_line"> | |||
|                                             <t t-call="stock.stock_report_delivery_has_serial_move_line"/> | |||
|                                         </tr> | |||
|                                     </t> | |||
|                                     <t t-elif="aggregated_lines"> | |||
|                                         <t t-call="stock.stock_report_delivery_aggregated_move_lines"/> | |||
|                                     </t> | |||
|                                 </t> | |||
|                             </t> | |||
|                             <!-- No destination packages --> | |||
|                             <t t-else=""> | |||
|                                 <!-- If printing lots/serial numbers => keep products in original lines --> | |||
|                                 <t t-if="has_serial_number"> | |||
|                                     <tr t-foreach="o.move_line_ids" | |||
|                                         t-as="move_line"> | |||
|                                         <t t-call="stock.stock_report_delivery_has_serial_move_line"/> | |||
|                                     </tr> | |||
|                                 </t> | |||
|                                 <!-- If not printing lots/serial numbers => merge lines with same product --> | |||
|                                 <t t-else="" name="aggregated_move_lines"> | |||
|                                     <t t-set="aggregated_lines" | |||
|                                        t-value="o.move_line_ids._get_aggregated_product_quantities()"/> | |||
|                                     <t t-call="stock.stock_report_delivery_aggregated_move_lines"/> | |||
|                                 </t> | |||
|                             </t> | |||
|                         </tbody> | |||
|                     </table> | |||
|                     <t t-set="backorders" | |||
|                        t-value="o.backorder_ids.filtered(lambda x: x.state not in ('done', 'cancel'))"/> | |||
|                     <t t-if="o.backorder_ids and backorders"> | |||
|                         <p class="mt-5"> | |||
|                             <span>Remaining quantities not yet delivered:</span> | |||
|                         </p> | |||
|                         <table class="table table-sm" | |||
|                                name="stock_backorder_table" | |||
|                                style="table-layout: fixed;"> | |||
|                             <thead> | |||
|                                 <tr> | |||
|                                     <th name="th_sb_product"> | |||
|                                         <strong>Product</strong> | |||
|                                     </th> | |||
|                                     <th/> | |||
|                                     <th name="th_sb_quantity" | |||
|                                         class="text-center"> | |||
|                                         <strong>Quantity</strong> | |||
|                                     </th> | |||
|                                 </tr> | |||
|                             </thead> | |||
|                             <tbody t-attf-style="color:#{o.theme_id.customer_text_color} !important;"> | |||
|                                 <t t-foreach="backorders" t-as="backorder"> | |||
|                                     <t t-set="bo_lines" | |||
|                                        t-value="backorder.move_lines.filtered(lambda x: x.product_uom_qty)"/> | |||
|                                     <tr t-foreach="bo_lines" t-as="bo_line"> | |||
|                                         <td class="w-auto"> | |||
|                                             <span t-field="bo_line.product_id"/> | |||
|                                             <p t-if="bo_line.description_picking != bo_line.product_id.name and bo_line.description_picking != bo_line.product_id.display_name"> | |||
|                                                 <span t-field="bo_line.description_picking"/> | |||
|                                             </p> | |||
|                                         </td> | |||
|                                         <td/> | |||
|                                         <td class="text-center w-auto"> | |||
|                                             <span t-field="bo_line.product_uom_qty"/> | |||
|                                             <span t-field="bo_line.product_uom"/> | |||
|                                         </td> | |||
|                                     </tr> | |||
|                                 </t> | |||
|                             </tbody> | |||
|                         </table> | |||
|                     </t> | |||
|                     <div t-if="o.signature" class="mt32 ml64 mr4" | |||
|                          name="signature"> | |||
|                         <div class="offset-8"> | |||
|                             <strong>Signature</strong> | |||
|                         </div> | |||
|                         <div class="offset-8"> | |||
|                             <img t-att-src="image_data_uri(o.signature)" | |||
|                                  style="max-height: 4cm; max-width: 8cm;"/> | |||
|                         </div> | |||
|                         <div class="offset-8 text-center"> | |||
|                             <p t-field="o.partner_id.name"/> | |||
|                         </div> | |||
|                     </div> | |||
|                 </div> | |||
|             </t> | |||
|         </t> | |||
|     </template> | |||
| </odoo> | |||
| 
 | 
| After Width: | Height: | Size: 3.6 KiB | 
| After Width: | Height: | Size: 310 B | 
| After Width: | Height: | Size: 1.3 KiB | 
| After Width: | Height: | Size: 1.4 KiB | 
| After Width: | Height: | Size: 576 B | 
| After Width: | Height: | Size: 733 B | 
| After Width: | Height: | Size: 911 B | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 3.4 KiB | 
| After Width: | Height: | Size: 673 B | 
| After Width: | Height: | Size: 878 B | 
| After Width: | Height: | Size: 653 B | 
| After Width: | Height: | Size: 905 B | 
| After Width: | Height: | Size: 839 B | 
| After Width: | Height: | Size: 427 B | 
| After Width: | Height: | Size: 627 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 988 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 1.5 KiB | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 1.9 KiB | 
| After Width: | Height: | Size: 1.1 KiB | 
| After Width: | Height: | Size: 2.1 KiB | 
| After Width: | Height: | Size: 4.4 KiB | 
| After Width: | Height: | Size: 589 B | 
| After Width: | Height: | Size: 3.4 KiB | 
| After Width: | Height: | Size: 1.7 KiB | 
| After Width: | Height: | Size: 2.3 KiB | 
| After Width: | Height: | Size: 967 B | 
| After Width: | Height: | Size: 1.6 KiB | 
| After Width: | Height: | Size: 3.8 KiB | 
| After Width: | Height: | Size: 5.0 KiB | 
| After Width: | Height: | Size: 61 KiB | 
| After Width: | Height: | Size: 61 KiB | 
| After Width: | Height: | Size: 456 KiB | 
| After Width: | Height: | Size: 85 KiB | 
| After Width: | Height: | Size: 45 KiB | 
| After Width: | Height: | Size: 73 KiB | 
| After Width: | Height: | Size: 54 KiB | 
| After Width: | Height: | Size: 52 KiB | 
| After Width: | Height: | Size: 53 KiB | 
| After Width: | Height: | Size: 49 KiB | 
| After Width: | Height: | Size: 48 KiB | 
| After Width: | Height: | Size: 42 KiB | 
| After Width: | Height: | Size: 42 KiB | 
| After Width: | Height: | Size: 58 KiB | 
| After Width: | Height: | Size: 92 KiB | 
| After Width: | Height: | Size: 49 KiB | 
| After Width: | Height: | Size: 45 KiB | 
| After Width: | Height: | Size: 50 KiB | 
| After Width: | Height: | Size: 54 KiB | 
| After Width: | Height: | Size: 44 KiB | 
| After Width: | Height: | Size: 40 KiB | 
| After Width: | Height: | Size: 88 KiB | 
| After Width: | Height: | Size: 11 KiB | 
| @ -0,0 +1,678 @@ | |||
| <div class="container" style="padding: 1rem !important; margin-bottom: 1rem !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="./assets/icons/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 | |||
|                         style="background-color: #875A7B !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>Enterprise | |||
|                 </div> | |||
|                 <div | |||
|                         style="background-color: #875A7B !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>Odoo SH | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
|     </div> | |||
| </div> | |||
| <div class="container" style="padding: 0rem 1.5rem 4rem !important"> | |||
|     <div class="row" style="height: 900px !important;"> | |||
|         <div class="col-sm-12 col-md-12 col-lg-12" | |||
|              style="padding: 4rem 1rem !important; background-color: #714B67 !important; height: 600px !important; border-radius: 20px !important;"> | |||
|             <h1 | |||
|                     style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #FFFFFF !important;  font-size: 3.5rem !important; text-align: center !important;"> | |||
|                 Odoo Professional Report Templates</h1> | |||
|             <p | |||
|                     style="font-family: 'Montserrat', sans-serif !important; font-weight: 300 !important; color: #FFFFFF !important;  font-size: 1.4rem !important; text-align: center !important;"> | |||
|                 Customizable Multiple Report Templates for Sale, Purchase, Invoice and Delivery | |||
|             </p> | |||
|             <img src="./assets/screenshots/hero.gif" class="img-responsive" width="100%" height="auto"/> | |||
|         </div> | |||
|     </div> | |||
| 
 | |||
|     <div class="row"> | |||
|         <div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin-bottom: 2rem !important"> | |||
|             <h2 | |||
|                     style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> | |||
|                 <i class="fa fa-compass mr-2"></i>Explore this module | |||
|             </h2> | |||
|             <div class="row"> | |||
|                 <div class="col-md-6"> | |||
|                     <a href="#overview" style="text-decoration: none !important;"> | |||
|                         <div class="row" | |||
|                              style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;"> | |||
|                             <div class="col-8"> | |||
|                                 <h3 | |||
|                                         style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;"> | |||
|                                     Overview</h3> | |||
|                                 <p | |||
|                                         style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;"> | |||
|                                     Learn more about this module</p> | |||
|                             </div> | |||
|                             <div class="col-4 text-right d-flex justify-content-end align-items-center"> | |||
|                                 <i class="fa fa-chevron-right" style="color: #714B67 !important;"></i> | |||
|                             </div> | |||
|                         </div> | |||
|                     </a> | |||
|                 </div> | |||
|                 <div class="col-md-6"> | |||
|                     <a href="#features" style="text-decoration: none !important;"> | |||
|                         <div class="row" | |||
|                              style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;"> | |||
|                             <div class="col-8"> | |||
|                                 <h3 | |||
|                                         style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;"> | |||
|                                     Features</h3> | |||
|                                 <p | |||
|                                         style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;"> | |||
|                                     View features of this module</p> | |||
|                             </div> | |||
|                             <div class="col-4 text-right d-flex justify-content-end align-items-center"> | |||
|                                 <i class="fa fa-chevron-right" style="color: #714B67 !important;"></i> | |||
|                             </div> | |||
|                         </div> | |||
|                     </a> | |||
|                 </div> | |||
|                 <div class="col-md-6"> | |||
|                     <a href="#screenshots" style="text-decoration: none !important;"> | |||
|                         <div class="row" | |||
|                              style="background-color: #f5f2f5 !important; border-radius: 10px !important; margin: 1rem !important; padding: 1.5em !important; height: 100px !important;"> | |||
|                             <div class="col-8"> | |||
|                                 <h3 | |||
|                                         style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.2rem !important;"> | |||
|                                     Screenshots</h3> | |||
|                                 <p | |||
|                                         style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #714B67 !important; font-size: 0.9rem !important;"> | |||
|                                     See key screenshots of this module</p> | |||
|                             </div> | |||
|                             <div class="col-4 text-right d-flex justify-content-end align-items-center"> | |||
|                                 <i class="fa fa-chevron-right" style="color: #714B67 !important;"></i> | |||
|                             </div> | |||
|                         </div> | |||
|                     </a> | |||
|                 </div> | |||
|             </div> | |||
|         </div> | |||
| 
 | |||
|     </div> | |||
| 
 | |||
|     <div class="row" id="overview"> | |||
|         <div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important"> | |||
|             <h2 | |||
|                     style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> | |||
|                 <i class="fa fa-pie-chart mr-2"></i>Overview | |||
|             </h2> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-mg-12 pl-3"> | |||
|             <p style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important; line-height: 30px !important;"> | |||
|                 In the Odoo Professional Report Templates App, We can configure the report templates to our own need. | |||
|                 There we can have | |||
|                 4 types of templates - Standard, Modern, Traditional, Attractive. We can also customize the | |||
|                 SO,PO,Invoices and Delivery.</p> | |||
|         </div> | |||
|     </div> | |||
|     <div class="row" id="features"> | |||
|         <div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important"> | |||
|             <h2 | |||
|                     style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> | |||
|                 <i class="fa fa-star mr-2"></i>Features | |||
|             </h2> | |||
|         </div> | |||
|         <div class="col-md-6 pl-3 py-3 d-flex"> | |||
|             <div> | |||
|                 <img src="assets/icons/check.png"> | |||
|             </div> | |||
|             <div> | |||
|                 <h4 | |||
|                         style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                     Configure the layout</h4> | |||
|             </div> | |||
|         </div> | |||
|         <div class="col-md-6 pl-3 py-3 d-flex"> | |||
|             <div> | |||
|                 <img src="assets/icons/check.png"> | |||
|             </div> | |||
|             <div> | |||
|                 <h4 | |||
|                         style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                     Configure the position of Text color,Heading,Background</h4> | |||
|             </div> | |||
|         </div> | |||
|         <div class="col-md-6 pl-3 py-3 d-flex"> | |||
|             <div> | |||
|                 <img src="assets/icons/check.png"> | |||
|             </div> | |||
|             <div> | |||
|                 <h4 | |||
|                         style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                     Configure Layout In Each Module</h4> | |||
|             </div> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-md-6 pl-3 py-3 d-flex"> | |||
|             <div> | |||
|                 <img src="assets/icons/check.png"> | |||
|             </div> | |||
|             <div> | |||
|                 <h4 | |||
|                         style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                     Edit the theme</h4> | |||
|             </div> | |||
|         </div> | |||
|     </div> | |||
|     <div class="row" id="screenshots"> | |||
|         <div class="col-md-12" style="border-bottom: 1px solid #d5d5d5 !important; margin: 2rem 0 !important"> | |||
|             <h2 | |||
|                     style="font-family: 'Montserrat', sans-serif !important; font-weight: 600 !important; color: #714B67 !important; font-size: 1.5rem !important;"> | |||
|                 <i class="fa fa-image mr-2"></i>Screenshots | |||
|             </h2> | |||
|         </div> | |||
|         <div class="col-lg-12 my-2"> | |||
|             <h4 class="mt-2" | |||
|                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                 Select The Configuration Layout</h4> | |||
|             <p | |||
|                     style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> | |||
|                 From the company form view we can select the layout type in each module.</p> | |||
|             <img src="assets/screenshots/image1.png" class="img-responsive img-thumbnail border" width="100%" | |||
|                  height="auto"/> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-12 my-3"> | |||
|             <h4 class="mt-3" | |||
|                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                 Report Template Configuration</h4> | |||
|             <p | |||
|                     style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;"> | |||
|                 you can configure the template on the external link of the template type. | |||
|             </p> | |||
|             <img src="assets/screenshots/image2.png" class="img-responsive img-thumbnail border" width="100%" | |||
|                  height="auto"/> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-12 my-3"> | |||
|             <h4 class="mt-3" | |||
|                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                 Print SalesOrder Traditional report</h4> | |||
|             <img src="assets/screenshots/image3.png" class="img-responsive img-thumbnail border" width="100%" | |||
|                  height="auto"/> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-12 my-3"> | |||
|             <h4 class="mt-3" | |||
|                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                 Print SalesOrder Modern report</h4> | |||
|             <img src="assets/screenshots/image4.png" class="img-responsive img-thumbnail border" width="100%" | |||
|                  height="auto"/> | |||
|         </div> | |||
|         <div class="col-lg-12 my-3"> | |||
|             <h4 class="mt-3" | |||
|                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                 Print SalesOrder Standard report</h4> | |||
|             <img src="assets/screenshots/image5.png" class="img-responsive img-thumbnail border" width="100%" | |||
|                  height="auto"/> | |||
|         </div> | |||
|         <div class="col-lg-12 my-3"> | |||
|             <h4 class="mt-3" | |||
|                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                 Print SalesOrder Attractive report</h4> | |||
|             <img src="assets/screenshots/image6.png" class="img-responsive img-thumbnail border" width="100%" | |||
|                  height="auto"/> | |||
|         </div> | |||
|         <div class="col-lg-12 my-3"> | |||
|             <h4 class="mt-3" | |||
|                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                 Print PurchaseOrder Traditional report</h4> | |||
|             <img src="assets/screenshots/image7.png" class="img-responsive img-thumbnail border" width="100%" | |||
|                  height="auto"/> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-12 my-3"> | |||
|             <h4 class="mt-3" | |||
|                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                 Print PurchaseOrder Modern report</h4> | |||
|             <img src="assets/screenshots/image8.png" class="img-responsive img-thumbnail border" width="100%" | |||
|                  height="auto"/> | |||
|         </div> | |||
|         <div class="col-lg-12 my-3"> | |||
|             <h4 class="mt-3" | |||
|                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                 Print PurchaseOrder Standard report</h4> | |||
|             <img src="assets/screenshots/image9.png" class="img-responsive img-thumbnail border" width="100%" | |||
|                  height="auto"/> | |||
|         </div> | |||
|         <div class="col-lg-12 my-3"> | |||
|             <h4 class="mt-3" | |||
|                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                 Print PurchaseOrder Attractive report</h4> | |||
|             <img src="assets/screenshots/image10.png" class="img-responsive img-thumbnail border" width="100%" | |||
|                  height="auto"/> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-12 my-3"> | |||
|             <h4 class="mt-3" | |||
|                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                 Print Invoice Traditional report</h4> | |||
|             <img src="assets/screenshots/image11.png" class="img-responsive img-thumbnail border" width="100%" | |||
|                  height="auto"/> | |||
|         </div> | |||
|         <div class="col-lg-12 my-3"> | |||
|             <h4 class="mt-3" | |||
|                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                 Print Invoice Modern report</h4> | |||
|             <img src="assets/screenshots/image12.png" class="img-responsive img-thumbnail border" width="100%" | |||
|                  height="auto"/> | |||
|         </div> | |||
|         <div class="col-lg-12 my-3"> | |||
|             <h4 class="mt-3" | |||
|                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                 Print Invoice Standard report</h4> | |||
|             <img src="assets/screenshots/image13.png" class="img-responsive img-thumbnail border" width="100%" | |||
|                  height="auto"/> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-12 my-3"> | |||
|             <h4 class="mt-3" | |||
|                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                 Print Invoice Attractive report</h4> | |||
|             <img src="assets/screenshots/image14.png" class="img-responsive img-thumbnail border" width="100%" | |||
|                  height="auto"/> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-12 my-3"> | |||
|             <h4 class="mt-3" | |||
|                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                 Print Delivery Traditional report</h4> | |||
|             <img src="assets/screenshots/image15.png" class="img-responsive img-thumbnail border" width="100%" | |||
|                  height="auto"/> | |||
|         </div> | |||
| 
 | |||
|         <div class="col-lg-12 my-3"> | |||
|             <h4 class="mt-3" | |||
|                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                 Print Delivery Modern report</h4> | |||
|             <img src="assets/screenshots/image16.png" class="img-responsive img-thumbnail border" width="100%" | |||
|                  height="auto"/> | |||
|         </div> | |||
|         <div class="col-lg-12 my-3"> | |||
|             <h4 class="mt-3" | |||
|                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                 Print Delivery Standard report</h4> | |||
|             <img src="assets/screenshots/image17.png" class="img-responsive img-thumbnail border" width="100%" | |||
|                  height="auto"/> | |||
|         </div> | |||
|         <div class="col-lg-12 my-3"> | |||
|             <h4 class="mt-3" | |||
|                 style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;"> | |||
|                 Print Delivery Attractive report</h4> | |||
|             <img src="assets/screenshots/image18.png" class="img-responsive img-thumbnail border" width="100%" | |||
|                  height="auto"/> | |||
|         </div> | |||
|     </div> | |||
|     <!-- 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 #714B67 !important; background-color: #714B67 !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/sale_report_advanced/" 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="./assets/modules/1.png"> | |||
|                                 </div> | |||
|                             </a> | |||
|                         </div> | |||
|                         <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> | |||
|                             <a href="https://apps.odoo.com/apps/modules/14.0/manufacturing_reports/" 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="./assets/modules/2.png"> | |||
|                                 </div> | |||
|                             </a> | |||
|                         </div> | |||
|                         <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> | |||
|                             <a href="https://apps.odoo.com/apps/modules/14.0/pos_report_generator/" 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="./assets/modules/3.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/fleet_complete_report/" 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="./assets/modules/4.png"> | |||
|                                 </div> | |||
|                             </a> | |||
|                         </div> | |||
|                         <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> | |||
|                             <a href="https://apps.odoo.com/apps/modules/14.0/purchase_report_generator/" 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="./assets/modules/5.png"> | |||
|                                 </div> | |||
|                             </a> | |||
|                         </div> | |||
|                         <div class="col-xs-12 col-sm-4 col-md-4 mb16 mt16" style="float:left"> | |||
|                             <a href="https://apps.odoo.com/apps/modules/14.0/dynamic_accounts_report/" | |||
|                                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="./assets/modules/6.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 #714B67 !important; background-color: #714B67 !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 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 #714B67 !important; background-color: #714B67 !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 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 #714B67 !important; background-color: #714B67 !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>+91 86068 27707</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> | |||