Browse Source

Jan 10 [ADD] : Initial Commit 'purchase_format_editor'

pull/301/head
AjmalCybro 1 year ago
parent
commit
47afd3e517
  1. 42
      purchase_format_editor/README.rst
  2. 23
      purchase_format_editor/__init__.py
  3. 60
      purchase_format_editor/__manifest__.py
  4. 22
      purchase_format_editor/controllers/__init__.py
  5. 47
      purchase_format_editor/controllers/purchase_format_editor.py
  6. 30
      purchase_format_editor/data/doc_layout_purchase_data.xml
  7. 6
      purchase_format_editor/doc/RELEASE_NOTES.md
  8. 25
      purchase_format_editor/models/__init__.py
  9. 82
      purchase_format_editor/models/base_document_layout.py
  10. 85
      purchase_format_editor/models/doc_layout_purchase.py
  11. 39
      purchase_format_editor/models/purchase_order.py
  12. 38
      purchase_format_editor/models/res_company.py
  13. 271
      purchase_format_editor/report/purchase_order_custom_quotation_templates.xml
  14. 364
      purchase_format_editor/report/purchase_order_custom_templates.xml
  15. 298
      purchase_format_editor/report/purchase_order_fantacy_templates.xml
  16. 293
      purchase_format_editor/report/purchase_order_old_standard_templates.xml
  17. 216
      purchase_format_editor/report/purchase_order_quotation_fantacy_templates.xml
  18. 203
      purchase_format_editor/report/purchase_order_quotation_old_standard_templates.xml
  19. 188
      purchase_format_editor/report/purchase_order_templates.xml
  20. 78
      purchase_format_editor/report/purchase_quotation_templates.xml
  21. 2
      purchase_format_editor/security/ir.model.access.csv
  22. BIN
      purchase_format_editor/static/description/assets/icons/check.png
  23. BIN
      purchase_format_editor/static/description/assets/icons/chevron.png
  24. BIN
      purchase_format_editor/static/description/assets/icons/cogs.png
  25. BIN
      purchase_format_editor/static/description/assets/icons/consultation.png
  26. BIN
      purchase_format_editor/static/description/assets/icons/ecom-black.png
  27. BIN
      purchase_format_editor/static/description/assets/icons/education-black.png
  28. BIN
      purchase_format_editor/static/description/assets/icons/hotel-black.png
  29. BIN
      purchase_format_editor/static/description/assets/icons/license.png
  30. BIN
      purchase_format_editor/static/description/assets/icons/lifebuoy.png
  31. BIN
      purchase_format_editor/static/description/assets/icons/logo.png
  32. BIN
      purchase_format_editor/static/description/assets/icons/manufacturing-black.png
  33. BIN
      purchase_format_editor/static/description/assets/icons/pos-black.png
  34. BIN
      purchase_format_editor/static/description/assets/icons/puzzle.png
  35. BIN
      purchase_format_editor/static/description/assets/icons/restaurant-black.png
  36. BIN
      purchase_format_editor/static/description/assets/icons/service-black.png
  37. BIN
      purchase_format_editor/static/description/assets/icons/trading-black.png
  38. BIN
      purchase_format_editor/static/description/assets/icons/training.png
  39. BIN
      purchase_format_editor/static/description/assets/icons/update.png
  40. BIN
      purchase_format_editor/static/description/assets/icons/user.png
  41. BIN
      purchase_format_editor/static/description/assets/icons/wrench.png
  42. BIN
      purchase_format_editor/static/description/assets/misc/categories.png
  43. BIN
      purchase_format_editor/static/description/assets/misc/check-box.png
  44. BIN
      purchase_format_editor/static/description/assets/misc/compass.png
  45. BIN
      purchase_format_editor/static/description/assets/misc/config.png
  46. BIN
      purchase_format_editor/static/description/assets/misc/corporate.png
  47. BIN
      purchase_format_editor/static/description/assets/misc/customer-support.png
  48. BIN
      purchase_format_editor/static/description/assets/misc/cybrosys-logo.png
  49. BIN
      purchase_format_editor/static/description/assets/misc/features.png
  50. BIN
      purchase_format_editor/static/description/assets/misc/logo.png
  51. BIN
      purchase_format_editor/static/description/assets/misc/pictures.png
  52. BIN
      purchase_format_editor/static/description/assets/misc/pie-chart.png
  53. BIN
      purchase_format_editor/static/description/assets/misc/right-arrow.png
  54. BIN
      purchase_format_editor/static/description/assets/misc/star.png
  55. BIN
      purchase_format_editor/static/description/assets/misc/support.png
  56. BIN
      purchase_format_editor/static/description/assets/misc/whatsapp.png
  57. BIN
      purchase_format_editor/static/description/assets/modules/employee_purchase_requisition.png
  58. BIN
      purchase_format_editor/static/description/assets/modules/merge_rfq.png
  59. BIN
      purchase_format_editor/static/description/assets/modules/product_brand_purchase.png
  60. BIN
      purchase_format_editor/static/description/assets/modules/product_multi_vendor_update.png
  61. BIN
      purchase_format_editor/static/description/assets/modules/purchase_product_history.png
  62. BIN
      purchase_format_editor/static/description/assets/modules/vendor_portal_odoo.png
  63. BIN
      purchase_format_editor/static/description/assets/screenshots/1.png
  64. BIN
      purchase_format_editor/static/description/assets/screenshots/2.png
  65. BIN
      purchase_format_editor/static/description/assets/screenshots/3.png
  66. BIN
      purchase_format_editor/static/description/assets/screenshots/4.png
  67. BIN
      purchase_format_editor/static/description/assets/screenshots/5.png
  68. BIN
      purchase_format_editor/static/description/assets/screenshots/6.png
  69. BIN
      purchase_format_editor/static/description/assets/screenshots/conf.png
  70. BIN
      purchase_format_editor/static/description/assets/screenshots/default.png
  71. BIN
      purchase_format_editor/static/description/assets/screenshots/hero.gif
  72. BIN
      purchase_format_editor/static/description/assets/screenshots/modern_modern.png
  73. BIN
      purchase_format_editor/static/description/assets/screenshots/normal_modern.png
  74. BIN
      purchase_format_editor/static/description/assets/screenshots/old_standard.png
  75. BIN
      purchase_format_editor/static/description/assets/screenshots/screenshot_1.png
  76. BIN
      purchase_format_editor/static/description/assets/screenshots/screenshot_2.png
  77. BIN
      purchase_format_editor/static/description/banner.png
  78. BIN
      purchase_format_editor/static/description/icon.png
  79. 672
      purchase_format_editor/static/description/index.html
  80. 26
      purchase_format_editor/views/base_document_layout_views.xml
  81. 60
      purchase_format_editor/views/doc_layout_purchase_views.xml
  82. 212
      purchase_format_editor/views/purchase_order_default_templates.xml
  83. 246
      purchase_format_editor/views/purchase_order_modern_templates.xml
  84. 231
      purchase_format_editor/views/purchase_order_normal_templates.xml
  85. 251
      purchase_format_editor/views/purchase_order_old_templates.xml

42
purchase_format_editor/README.rst

@ -0,0 +1,42 @@
.. image:: https://img.shields.io/badge/license-LGPL--3-green.svg
:target: https://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
Purchase Report Format Editor
=============================
This module allows to edit the style of the purchase pdf reports.
Company
-------
* `Cybrosys Techno Solutions <https://cybrosys.com/>`__
License
-------
Lesser General Public License, Version 3 (LGPL v3).
(https://www.gnu.org/licenses/lgpl-3.0-standalone.html)
Credits
-------
Developer : (V16) Abhin K, 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>`__

23
purchase_format_editor/__init__.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Abhin K(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import controllers
from . import models

60
purchase_format_editor/__manifest__.py

@ -0,0 +1,60 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Abhin K(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
{
'name': 'Purchase Report Format Editor',
'version': '16.0.1.0.0',
'category': 'Purchases',
'summary': 'Configure Purchase Report Templates With Different Styles',
'description': "To configure purchase report templates with different "
"styles, you need to design a layout that includes "
"components such as headers, tables, summaries, and "
"footers, and customize the template with suitable fonts "
"and visual elements to match your desired styles.",
'author': 'Cybrosys Techno Solutions',
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
'website': 'https://www.cybrosys.com',
'depends': ['purchase'],
'data': [
'security/ir.model.access.csv',
'data/doc_layout_purchase_data.xml',
'views/doc_layout_purchase_views.xml',
'views/base_document_layout_views.xml',
'report/purchase_order_custom_templates.xml',
'report/purchase_order_fantacy_templates.xml',
'report/purchase_order_old_standard_templates.xml',
'report/purchase_order_templates.xml',
'report/purchase_order_custom_quotation_templates.xml',
'report/purchase_order_quotation_fantacy_templates.xml',
'report/purchase_order_quotation_old_standard_templates.xml',
'report/purchase_quotation_templates.xml',
'views/purchase_order_default_templates.xml',
'views/purchase_order_normal_templates.xml',
'views/purchase_order_modern_templates.xml',
'views/purchase_order_old_templates.xml',
],
'images': ['static/description/banner.png'],
'license': 'LGPL-3',
'installable': True,
'auto_install': False,
'application': False,
}

22
purchase_format_editor/controllers/__init__.py

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Abhin K(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import purchase_format_editor

47
purchase_format_editor/controllers/purchase_format_editor.py

@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Abhin K(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from ast import literal_eval
from odoo.http import Controller, request, route
class PurchaseFormatEditor(Controller):
"""The PurchaseFormatEditor class provides the functionality to
download the preview of PDF"""
@route('/purchase/pdf/preview', type="http", auth="public",
website=True)
def purchase_pdf_preview(self):
"""Then demo pdfs are downloaded using this controller.
The html file from the preview compute field is then converted into
binary pdf and then returns a response to download it"""
value = literal_eval(request.params['params'])
base_doc_layout = request.env['base.document.layout'].sudo().browse(
value)
pdf_data = request.env['ir.actions.report'].sudo()._run_wkhtmltopdf(
[base_doc_layout.preview])
filename = (f'{base_doc_layout.base_layout_purchase} '
f'{base_doc_layout.document_layout_purchase_id.name}.pdf')
headers = [('Content-Type', 'application/pdf'),
('Content-Disposition',
f'attachment; filename="{filename}"')]
# Send the PDF content as a response with the headers
return request.make_response(pdf_data, headers=headers)

30
purchase_format_editor/data/doc_layout_purchase_data.xml

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Modern and standard default template is designed here-->
<data noupdate="1">
<record id="doc_layout_purchase_modern" model="doc.layout.purchase">
<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="shipping_address_position">left</field>
<field name="company_position">left</field>
<field name="company_text_color">#808080</field>
</record>
<record id="doc_layout_purchase_standard" model="doc.layout.purchase">
<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="shipping_address_position">right</field>
<field name="company_position">right</field>
<field name="company_text_color">#808080</field>
</record>
</data>
</odoo>

6
purchase_format_editor/doc/RELEASE_NOTES.md

@ -0,0 +1,6 @@
## Module <purchase_format_editor>
#### 08.01.2024
#### Version 16.0.1.0.0
#### ADD
- Initial commit for Purchase Report Format Editor

25
purchase_format_editor/models/__init__.py

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Abhin K(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from . import base_document_layout
from . import doc_layout_purchase
from . import purchase_order
from . import res_company

82
purchase_format_editor/models/base_document_layout.py

@ -0,0 +1,82 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Abhin K(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import api, fields, models
class BaseDocumentLayout(models.TransientModel):
"""Model is inherited to add required field
and to add function to display the preview"""
_inherit = 'base.document.layout'
base_layout_purchase = fields.Selection(
related='company_id.base_layout_purchase',
readonly=False, string='Base Layout Purchase',
required=True,
help='Select the base layout for the Purchase module.')
document_layout_purchase_id = fields.Many2one(
related='company_id.document_layout_purchase_id', readonly=False,
string='Document Layout Purchase ID',
help='Choose the document layout for the Purchase module.')
@api.depends('report_layout_id', 'logo', 'font', 'primary_color',
'secondary_color', 'report_header', 'report_footer',
'base_layout_purchase', 'document_layout_purchase_id')
def _compute_preview(self):
"""Compute a qweb based preview to display on the wizard """
styles = self._get_asset_style()
for wizard in self:
ir_ui_view = wizard.env['ir.ui.view']
preview_css = self._get_css_for_preview(styles, wizard.id)
if wizard.report_layout_id:
style = wizard.document_layout_purchase_id
if wizard.base_layout_purchase == 'default':
wizard.preview = ir_ui_view._render_template(
'purchase_format_editor.'
'report_preview_default_purchase',
{'company': wizard, 'preview_css': preview_css,"style": style})
elif wizard.base_layout_purchase == 'normal':
wizard.preview = ir_ui_view._render_template(
'purchase_format_editor.'
'report_preview_normal_purchase',
{'company': wizard, 'preview_css': preview_css, }
)
elif wizard.base_layout_purchase == 'modern':
wizard.preview = ir_ui_view._render_template(
'purchase_format_editor.'
'report_preview_modern_purchase',
{'company': wizard, 'preview_css': preview_css, }
)
elif wizard.base_layout_purchase == 'old':
wizard.preview = ir_ui_view._render_template(
'purchase_format_editor.'
'report_preview_old_purchase',
{'company': wizard, 'preview_css': preview_css, })
def print_pdf(self):
"""This function replaces the existing function to print
the preview of pdf.Returns: self.id to the controller and
the controller makes the response to download the pdf"""
return {
'type': 'ir.actions.act_url',
'target': 'self',
'url': f'/purchase/pdf/preview?params={self.id}',
}

85
purchase_format_editor/models/doc_layout_purchase.py

@ -0,0 +1,85 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Abhin K(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class DocLayoutPurchase(models.Model):
"""Model is created to add customizations to the pdf report"""
_name = "doc.layout.purchase"
_description = "Doc Layout Purchase"
name = fields.Char(string="Name", help="Name of the record")
base_color = fields.Char(string="Base Color",
help="Background color for the invoice")
heading_text_color = fields.Char(string="Heading text Color",
help="Heading Text color")
text_color = fields.Char(string="Text Color", help="Text color of items")
customer_text_color = fields.Char(string="Customer Text Color",
help="Customer address text color")
company_text_color = fields.Char(string="Company Text Color",
help="Company address Text color")
logo_position = fields.Selection(selection=[("left", "Left"),
("right", "Right")],
string="Logo Position",
help="Company logo position")
customer_position = fields.Selection(selection=[("left", "Left"),
("right", "Right")],
string="Customer position",
help="Customer address position")
shipping_address = fields.Boolean(string="Shipping Address",
default=True,
help="Enable shipping address if "
"required to print on report.")
shipping_address_position = fields.Selection(
selection=[("left", "Left"), ("right", "Right")],
string="Shipping Address position",
help="Select the Customer address position")
company_position = fields.Selection(
selection=[("left", "Left"), ("right", "Right")],
string="Company Address Position",
help="The position of the company address")
purchase_rep = fields.Boolean(string="Purchase Representative",
default=False,
help="Indicates whether the contact is a "
"Purchase Representative.")
description = fields.Boolean(string="Description", default=False,
help=" Indicates whether a description "
"is included.")
code = fields.Boolean(string="Internal Reference", default=False,
help="Indicates whether an internal reference "
"(HSN code) is included.")
tax_value = fields.Boolean(string="Tax", default=False,
help="Indicates whether the tax value is "
"included.")
reference = fields.Boolean(string="Order Reference", default=False,
help="Indicates whether the customer reference "
"(order reference) is included.")
source = fields.Boolean(string="Source", default=False,
help="Indicates whether the source document is "
"included.")
address = fields.Boolean(string="Address", default=False,
help="Indicates whether the address is included.")
city = fields.Boolean(string="City", default=False,
help="Indicates whether the city is included.")
country = fields.Boolean(string="Country", default=False,
help="Indicates whether the Country is included.")

39
purchase_format_editor/models/purchase_order.py

@ -0,0 +1,39 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Abhin K(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class PurchaseOrder(models.Model):
"""Model is inherited to add
theme_id_purchase and base_layout_purchase fields"""
_inherit = 'purchase.order'
base_layout_purchase = fields.Selection(
selection=[('normal', 'Normal'), ('modern', 'Modern'),
('old', 'Old Standard'), ('default', 'Default')],
string='Base Layout Purchase', help='Select Base Layout of Purchase')
theme_id_purchase = fields.Many2one(
comodel_name='doc.layout.purchase', string="Theme Id Purchase",
related='company_id.document_layout_purchase_id',
help='The theme ID for the purchase document layout. It is related '
'to the document layout ID of the company. This field helps in '
'selecting the specific theme for the purchase documents.')

38
purchase_format_editor/models/res_company.py

@ -0,0 +1,38 @@
# -*- coding: utf-8 -*-
#############################################################################
#
# Cybrosys Technologies Pvt. Ltd.
#
# Copyright (C) 2024-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
# Author: Abhin K(odoo@cybrosys.com)
#
# You can modify it under the terms of the GNU LESSER
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
# (LGPL v3) along with this program.
# If not, see <http://www.gnu.org/licenses/>.
#
#############################################################################
from odoo import fields, models
class ResCompany(models.Model):
"""Model is inherited to add the
base_layout_purchase selection field"""
_inherit = 'res.company'
base_layout_purchase = fields.Selection(
selection=[('normal', 'Normal'), ('modern', 'Modern'),
('old', 'Old Standard'), ('default', 'Default')],
string="Purchase Order Document Layout", default="default",
help='Select the Layout of the Purchase Order Document')
document_layout_purchase_id = fields.Many2one(
"doc.layout.purchase",
string="Purchase Order Layout Configuration",
help='Configuration of Purchase Order Layout')

271
purchase_format_editor/report/purchase_order_custom_quotation_templates.xml

@ -0,0 +1,271 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- This template is used to display a purchase quotation report
in a normal view. It includes the header section with the company logo
and details, such as partner information, address, and VAT number.-->
<template id="custom_template_report_purchase_quotation_normal">
<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="float: {{o.theme_id_purchase.logo_position}}">
<img t-if="company.logo"
t-attf-src="data:image/png;base64,{{ company.logo }}"
style="max-height: 80px;"/>
</div>
<div t-attf-style="float: {{o.theme_id_purchase.company_position}}; font:14px lucida-console,sans-serif; color:#{o.theme_id_purchase.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="forced_vat"
t-value="o.fiscal_position_id.foreign_vat"/>
<!-- So that it appears in the footer of the report instead of the company VAT if it's set -->
<table class="table table-borderless">
<tr>
<th scope="col"
t-attf-style="float: {{o.theme_id_purchase.customer_position}};font:15px lucida-console,sans-serif !important;color:#{o.theme_id_purchase.heading_text_color};">
<font>
<strong>Customer Address</strong>
</font>
</th>
<span t-if="o.state in ['purchase','done'] and o.date_approve">
<th scope="col"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<font>
<strong>Order Date</strong>
</font>
</th>
</span>
<span t-if="o.date_order">
<th scope="col"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<font>
<strong>Order Deadline</strong>
</font>
</th>
</span>
<span t-if="o.theme_id_purchase.purchase_rep">
<span t-if="o.user_id">
<th scope="col"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<font>
<strong>Purchase Representative</strong>
</font>
</th>
</span>
</span>
<span t-if="o.theme_id_purchase.reference">
<span t-if="o.partner_ref">
<th scope="col"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<font>
<strong>Order Reference</strong>
</font>
</th>
</span>
</span>
<span t-if="o.theme_id_purchase.source">
<span t-if="o.origin">
<th scope="col"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<font>
<strong>Source</strong>
</font>
</th>
</span>
</span>
</tr>
<tr>
<td>
<span style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id"/>
<br/>
<span t-if="o.theme_id_purchase.address">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.street"/>
<br/>
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.street2"/>
<br/>
</span>
<span t-if="o.theme_id_purchase.city">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.city"/>
<br/>
</span>
<span t-if="o.theme_id_purchase.country">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.country_id"/>
<br/>
</span>
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.vat"/>
<br/>
</td>
<span t-if="o.state in ['purchase','done'] and o.date_approve">
<td>
<font>
<p t-field="o.date_approve"/>
</font>
</td>
</span>
<span t-if="o.date_order">
<td>
<font>
<p t-field="o.date_order"/>
</font>
</td>
</span>
<span t-if="o.theme_id_purchase.purchase_rep">
<span t-if="o.user_id">
<td>
<font>
<p t-field="o.user_id"/>
</font>
</td>
</span>
</span>
<span t-if="o.theme_id_purchase.reference">
<span t-if="o.partner_ref">
<td>
<font>
<p t-field="o.partner_ref"/>
</font>
</td>
</span>
</span>
<span t-if="o.theme_id_purchase.source">
<span t-if="o.origin">
<td>
<font>
<p t-field="o.origin"/>
</font>
</td>
</span>
</span>
</tr>
</table>
<div class="page">
<div class="oe_structure"/>
<div class="col-12">
<div t-attf-style="float: {{o.theme_id_purchase.shipping_address_position}};font:15px lucida-console,sans-serif !important;color:#{o.theme_id_purchase.heading_text_color};">
<t t-if="o.dest_address_id">
<t t-if="o.theme_id_purchase.shipping_address">
<div>
<strong>Shipping address:</strong>
<div>
<div style="color:#{o.theme_id_purchase.customer_text_color} !important;"
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>
<br/>
<br/>
</div>
</t>
</t>
</div>
</div>
<h2>Request for Quotation #
<span t-field="o.name"/>
</h2>
<table class="table table-sm o_main_table">
<thead>
<tr>
<th t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
Description
</th>
<th name="th_date_req" class="text-center"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<strong>Expected Date</strong>
</th>
<th name="th_quantity" class="text-right"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<strong>Qty</strong>
</th>
</tr>
</thead>
<tbody>
<t t-foreach="o.order_line" t-as="order_line">
<tr t-att-class="'bg-200 font-weight-bold o_line_section' if order_line.display_type == 'line_section' else 'font-italic o_line_note' if order_line.display_type == 'line_note' else ''">
<t t-if="not order_line.display_type">
<td t-attf-style="color:#{o.theme_id_purchase.text_color};"
id="product">
<span t-field="order_line.name"/>
</td>
<td t-attf-style="color:#{o.theme_id_purchase.text_color};"
class="text-center">
<span t-field="order_line.date_planned"/>
</td>
<td t-attf-style="color:#{o.theme_id_purchase.text_color};"
class="text-right">
<span t-field="order_line.product_qty"/>
<span t-field="order_line.product_uom"
groups="uom.group_uom"/>
</td>
</t>
<t t-else="">
<td t-attf-style="color:#{o.theme_id_purchase.text_color};"
colspan="99"
id="section">
<span t-field="order_line.name"/>
</td>
</t>
</tr>
</t>
</tbody>
</table>
<p t-field="o.notes"/>
<p t-field="o.notes"/>
<div class="oe_structure"/>
</div>
</t>
</template>
<!-- This template is used to generate a purchase quotation report based
on different base layouts. It dynamically selects the appropriate template
based on the 'base_layout_purchase' field of the company associated with the
document. The selected template is then called with the language specified by
the partner associated with the document.-->
<template id="purchase.report_purchasequotation">
<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.company_id.base_layout_purchase == 'normal'">
<t t-call="purchase_format_editor.custom_template_report_purchase_quotation_normal"
t-lang="o.partner_id.lang"/>
</t>
<t t-if="o.company_id.base_layout_purchase == 'old'">
<t t-call="purchase_format_editor.old_std_report_purchase_quotation_document"
t-lang="o.partner_id.lang"/>
</t>
<t t-if="o.company_id.base_layout_purchase == 'modern'">
<t t-call="purchase_format_editor.custom_template_report_purchase_quotation_modern"
t-lang="o.partner_id.lang"/>
</t>
<t t-if="o.company_id.base_layout_purchase == 'default'">
<t t-call="purchase_format_editor.report_purchase_quotation_document"
t-lang="o.partner_id.lang"/>
</t>
</t>
</t>
</template>
</odoo>

364
purchase_format_editor/report/purchase_order_custom_templates.xml

@ -0,0 +1,364 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- This template is used to display a purchase order report in a
custom view. It includes the header section with the company logo and details,
such as partner information, address, and VAT number. It also utilizes the
external layout for a consistent layout structure.-->
<template id="custom_template_report_purchase_order_normal">
<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>
<t t-call="web.external_layout">
<div class="row mt32 mb32">
<div class="page-header col-12">
<div t-attf-class="pull-left">
<img t-if="company.logo"
t-attf-src="data:image/png;base64,{{ company.logo }}"
style="max-height: 80px;"/>
</div>
<div t-attf-class="pull-left"
t-attf-style="font:14px lucida-console,sans-serif; color:#{o.theme_id_purchase.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-set="o" t-value="o.with_context(lang=o.partner_id.lang)"/>
<table class="table table-borderless">
<tr>
<th scope="col"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<font>
<strong>Customer Address</strong>
</font>
</th>
<span t-if="o.state in ['purchase','done'] and o.date_approve">
<th scope="col"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<font>
<strong>Order Date</strong>
</font>
</th>
</span>
<span t-if="o.date_order">
<th scope="col"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<font>
<strong>Order Deadline</strong>
</font>
</th>
</span>
<span t-if="o.theme_id_purchase.purchase_rep">
<span t-if="o.user_id">
<th scope="col"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<font>
<strong>Purchase Representative</strong>
</font>
</th>
</span>
</span>
<span t-if="o.theme_id_purchase.reference">
<span t-if="o.partner_ref">
<th scope="col"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<font>
<strong>Order Reference</strong>
</font>
</th>
</span>
</span>
<span t-if="o.theme_id_purchase.source">
<span t-if="o.origin">
<th scope="col"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<font>
<strong>Source</strong>
</font>
</th>
</span>
</span>
</tr>
<tr>
<td>
<span style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id"/>
<br/>
<span t-if="o.theme_id_purchase.address">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.street"/>
<br/>
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.street2"/>
<br/>
</span>
<span t-if="o.theme_id_purchase.city">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.city"/>
<br/>
</span>
<span t-if="o.theme_id_purchase.country">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.country_id"/>
<br/>
</span>
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.vat"/>
<br/>
</td>
<span t-if="o.state in ['purchase','done'] and o.date_approve">
<td>
<font>
<p t-field="o.date_approve"/>
</font>
</td>
</span>
<span t-if="o.date_order">
<td>
<font>
<p t-field="o.date_order"/>
</font>
</td>
</span>
<span t-if="o.theme_id_purchase.purchase_rep">
<span t-if="o.user_id">
<td>
<font>
<p t-field="o.user_id"/>
</font>
</td>
</span>
</span>
<span t-if="o.theme_id_purchase.reference">
<span t-if="o.partner_ref">
<td>
<font>
<p t-field="o.partner_ref"/>
</font>
</td>
</span>
</span>
<span t-if="o.theme_id_purchase.source">
<span t-if="o.origin">
<td>
<font>
<p t-field="o.origin"/>
</font>
</td>
</span>
</span>
</tr>
</table>
<div class="page">
<div class="oe_structure"/>
<div class="col-12">
<div
style="font:15px lucida-console,sans-serif !important;color:#{o.theme_id_purchase.heading_text_color};">
<t t-if="o.dest_address_id">
<t t-if="o.theme_id_purchase.shipping_address">
<div>
<strong>Shipping address:</strong>
<div>
<div style="color:#{o.theme_id_purchase.customer_text_color} !important;"
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>
<br/>
<br/>
</div>
</t>
</t>
</div>
</div>
<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>
<table class="table table-sm o_main_table">
<thead>
<tr>
<th t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
Product
</th>
<span t-if="o.theme_id_purchase.description">
<th t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
Description
</th>
</span>
<span t-if="o.theme_id_purchase.code">
<th class="text-right"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
Internal Reference
</th>
</span>
<span t-if="o.theme_id_purchase.tax_value">
<th class="text-right"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
Taxes
</th>
</span>
<th name="th_date_req" class="text-center"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<strong>Date Req.</strong>
</th>
<th name="th_quantity" class="text-right"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<strong>Qty</strong>
</th>
<th name="th_price_unit" class="text-right"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<strong>Unit Price</strong>
</th>
<th name="th_amount" class="text-right"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<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-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">
<td t-attf-style="color:#{o.theme_id_purchase.text_color};">
<span t-field="line.product_id.name"/>
</td>
<span t-if="o.theme_id_purchase.description">
<td t-attf-style="color:#{o.theme_id_purchase.text_color};">
<span t-field="line.name"/>
</td>
</span>
<span t-if="o.theme_id_purchase.code">
<td class="text-right"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<t t-if="line.product_id.default_code">
<span t-field="line.product_id.default_code"/>
</t>
</td>
</span>
<span t-if="o.theme_id_purchase.tax_value">
<td name="td_taxes"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<span t-esc="', '.join(map(lambda x: x.name, line.taxes_id))"/>
</td>
</span>
<td class="text-center"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<span t-field="line.date_planned"/>
</td>
<td class="text-right"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<span t-field="line.product_qty"/>
<span t-field="line.product_uom.name"
groups="uom.group_uom"/>
</td>
<td class="text-right"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<span t-field="line.price_unit"/>
</td>
<td class="text-right"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<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"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<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"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<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-right">
<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">
<t t-set="tax_totals" t-value="o.tax_totals"/>
<t t-call="account.document_tax_totals"/>
</table>
</div>
</div>
<p t-field="o.notes"/>
<div class="oe_structure"/>
</div>
</t>
</template>
<!--This template is used to generate a purchase order report based on
different base layouts. It dynamically selects the appropriate template based
on the 'base_layout_purchase' field of the company associated with the document.
The selected template is then called with the language specified by the partner
associated with the document.-->
<template id="purchase.report_purchaseorder">
<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.company_id.base_layout_purchase == 'normal'">
<t t-call="purchase_format_editor.custom_template_report_purchase_order_normal"
t-lang="o.partner_id.lang"/>
</t>
<t t-if="o.company_id.base_layout_purchase == 'old'">
<t t-call="purchase_format_editor.old_std_report_purchaseorder_document"
t-lang="o.partner_id.lang"/>
</t>
<t t-if="o.company_id.base_layout_purchase == 'modern'">
<t t-call="purchase_format_editor.custom_template_report_purchaseorder_modern"
t-lang="o.partner_id.lang"/>
</t>
<t t-if="o.company_id.base_layout_purchase == 'default'">
<t t-call="purchase_format_editor.report_purchaseorder_document"
t-lang="o.partner_id.lang"/>
</t>
</t>
</t>
</template>
</odoo>

298
purchase_format_editor/report/purchase_order_fantacy_templates.xml

@ -0,0 +1,298 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- This template is used to display a purchase order report in a modern
view. It includes the header section with the company logo and details, such as
partner information, address, and VAT number.-->
<template id="custom_template_report_purchaseorder_modern">
<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="float: {{o.theme_id_purchase.logo_position}}">
<img t-if="company.logo"
t-attf-src="data:image/png;base64,{{ company.logo }}"
style="max-height: 80px;"/>
</div>
<div t-attf-style="float: {{o.theme_id_purchase.company_position}}; font:14px lucida-console,sans-serif; color:#{o.theme_id_purchase.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 t-attf-style=" background-color:#{o.theme_id_purchase.base_color};padding:2%">
<h2>
<span t-if="o.state in ['draft', 'sent', 'to approve']">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
Request for Quotation
</font>
</span>
<span t-if="o.state in ['purchase', 'done']">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
Purchase Order
</font>
</span>
<span t-if="o.state == 'cancel'">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
Cancelled Purchase Order
</font>
</span>
<font t-attf-style=" color:#{o.theme_id_purchase.heading_text_color}">
<span t-field="o.name"/>
</font>
</h2>
<div class="row mt32 mb32">
<div class="col-3"
t-if="o.state in ['purchase','done'] and o.date_approve">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Order Date:</strong>
<p t-field="o.date_approve"/>
</font>
</div>
<div class="col-3"
t-if="o.date_order">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Order Deadline:</strong>
<p t-field="o.date_order"/>
</font>
</div>
<div class="col-3" t-if="o.user_id">
<div t-if="o.theme_id_purchase.purchase_rep">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Purchase Representative</strong>
<p t-field="o.user_id"/>
</font>
</div>
</div>
<div class="col-3" t-if="o.partner_ref">
<div t-if="o.theme_id_purchase.reference">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Reference:</strong>
<p t-field="o.partner_ref"/>
</font>
</div>
</div>
<div class="col-3" t-if="o.origin">
<div t-if="o.theme_id_purchase.source">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Source:</strong>
<p t-field="o.origin"/>
</font>
</div>
</div>
</div>
</div>
<div style="padding-top:20px;width:100%">
<div class="col-12">
<div t-attf-style="float: {{o.theme_id_purchase.shipping_address_position}};font:15px lucida-console,sans-serif !important;color:#{o.theme_id_purchase.heading_text_color};">
<t t-if="o.dest_address_id">
<t t-if="o.theme_id_purchase.shipping_address">
<div>
<strong>Shipping address:</strong>
<div>
<div style="color:#{o.theme_id_purchase.customer_text_color} !important;"
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>
<br/>
<br/>
</div>
</t>
</t>
</div>
<div t-attf-style="float: {{o.theme_id_purchase.customer_position}};font:15px lucida-console,sans-serif !important;color:#{o.theme_id_purchase.heading_text_color};">
<strong>Customer Address</strong>
<br/>
<div>
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id"/>
<br/>
<span t-if="o.theme_id_purchase.address">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.street"/>
<br/>
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.street2"/>
</span>
<br/>
<span t-if="o.theme_id_purchase.city">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.city"/>
</span>
<br/>
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.state_id"/>
<br/>
<span t-if="o.theme_id_purchase.country">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.country_id"/>
</span>
<br/>
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.vat"/>
</div>
<br/>
<br/>
</div>
</div>
<table class="table table-sm o_main_table">
<thead>
<tr>
<th t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
Product
</th>
<span t-if="o.theme_id_purchase.description">
<th t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
Description
</th>
</span>
<span t-if="o.theme_id_purchase.code">
<th class="text-right"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
Internal Reference
</th>
</span>
<span t-if="o.theme_id_purchase.tax_value">
<th class="text-right"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
Taxes
</th>
</span>
<th name="th_date_req" class="text-center"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<strong>Date Req.</strong>
</th>
<th name="th_quantity" class="text-right"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<strong>Qty</strong>
</th>
<th name="th_price_unit" class="text-right"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<strong>Unit Price</strong>
</th>
<th name="th_amount" class="text-right"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<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-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">
<td t-attf-style="color:#{o.theme_id_purchase.text_color};">
<span t-field="line.product_id.name"/>
</td>
<span t-if="o.theme_id_purchase.description">
<td t-attf-style="color:#{o.theme_id_purchase.text_color};">
<span t-field="line.name"/>
</td>
</span>
<span t-if="o.theme_id_purchase.code">
<td class="text-right"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<t t-if="line.product_id.default_code">
<span t-field="line.product_id.default_code"/>
</t>
</td>
</span>
<span t-if="o.theme_id_purchase.tax_value">
<td name="td_taxes"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<span t-esc="', '.join(map(lambda x: x.name, line.taxes_id))"/>
</td>
</span>
<td class="text-center"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<span t-field="line.date_planned"/>
</td>
<td class="text-right"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<span t-field="line.product_qty"/>
<span t-field="line.product_uom.name"
groups="uom.group_uom"/>
</td>
<td class="text-right"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<span t-field="line.price_unit"/>
</td>
<td class="text-right"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<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"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<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"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<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-right">
<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>
<div id="total" class="row justify-content-end">
<div class="col-4">
<table class="table table-sm">
<t t-set="tax_totals" t-value="o.tax_totals"/>
<t t-call="account.document_tax_totals"/>
</table>
</div>
</div>
<p t-field="o.notes"/>
<div class="oe_structure"/>
</div>
</t>
</template>
</odoo>

293
purchase_format_editor/report/purchase_order_old_standard_templates.xml

@ -0,0 +1,293 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--This template is used to display a purchase order report in an old standard
format. It includes the header section with the company logo and details,
such as partner information, address, and VAT number.-->
<template id="old_std_report_purchaseorder_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="float: {{o.theme_id_purchase.logo_position}}">
<img t-if="company.logo"
t-attf-src="data:image/png;base64,{{ company.logo }}"
style="max-height: 80px;"/>
</div>
<div t-attf-style="float: {{o.theme_id_purchase.company_position}};font:14px lucida-console,sans-serif; color:#{o.theme_id_purchase.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">
<div class="col-12">
<div t-attf-style="float: {{o.theme_id_purchase.shipping_address_position}};font:15px lucida-console,sans-serif !important;color:#{o.theme_id_purchase.heading_text_color};">
<t t-if="o.dest_address_id">
<t t-if="o.theme_id_purchase.shipping_address">
<div>
<strong>Shipping address:</strong>
<div>
<div style="color:#{o.theme_id_purchase.customer_text_color} !important;"
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>
<br/>
<br/>
</div>
</t>
</t>
</div>
</div>
<div class="pt-5">
<div class="address row">
<div name="address" class="col-md-5 ml-auto w-100">
<div class="col-12" style="padding-top:20px;">
<div t-attf-style="float: {{o.theme_id_purchase.customer_position}};font:15px lucida-console,sans-serif !important;color:#{o.theme_id_purchase.heading_text_color};">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id"/>
<br/>
<span t-if="o.theme_id_purchase.address">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.street"/>
<br/>
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.street2"/>
</span>
<br/>
<span t-if="o.theme_id_purchase.city">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.city"/>
</span>
<br/>
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.state_id"/>
<br/>
<span t-if="o.theme_id_purchase.country">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.country_id"/>
</span>
<br/>
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.vat"/>
<br/>
</div>
<div t-attf-class="pull-right"
t-attf-style="font:15px lucida-console,sans-serif !important;background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};padding:2%">
<h2>
<span t-if="o.state in ['draft', 'sent', 'to approve']">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
Request for Quotation
</font>
</span>
<span t-if="o.state in ['purchase', 'done']">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
Purchase Order
</font>
</span>
<span t-if="o.state == 'cancel'">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
Cancelled Purchase Order
</font>
</span>
<font t-attf-style=" color:#{o.theme_id_purchase.heading_text_color}">
<span t-field="o.name"/>
</font>
</h2>
<div t-if="o.state in ['purchase','done'] and o.date_approve">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Date Order:</strong>
<p t-field="o.date_approve"/>
</font>
</div>
<div t-if="o.date_order">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Date Deadline:</strong>
<p t-field="o.date_order"/>
</font>
</div>
<div t-if="o.user_id">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Purchase Representative:
</strong>
<p t-field="o.user_id"/>
</font>
</div>
<div t-if="o.theme_id_purchase.reference">
<div t-if="o.partner_ref">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Reference:</strong>
<p t-field="o.partner_ref"/>
</font>
</div>
</div>
<div t-if="o.theme_id_purchase.source">
<div t-if="o.origin">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Source:</strong>
<p t-field="o.origin"/>
</font>
</div>
</div>
</div>
</div>
</div>
</div>
<div style="padding-top:20px;"/>
<table class="table table-sm o_main_table">
<thead>
<tr>
<th t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
Product
</th>
<span t-if="o.theme_id_purchase.description">
<th t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
Description
</th>
</span>
<span t-if="o.theme_id_purchase.code">
<th class="text-right"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
Internal Reference
</th>
</span>
<span t-if="o.theme_id_purchase.tax_value">
<th class="text-right"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
Taxes
</th>
</span>
<th name="th_date_req" class="text-center"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<strong>Date Req.</strong>
</th>
<th name="th_quantity" class="text-right"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<strong>Qty</strong>
</th>
<th name="th_price_unit" class="text-right"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<strong>Unit Price</strong>
</th>
<th name="th_amount" class="text-right"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<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-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">
<td t-attf-style="color:#{o.theme_id_purchase.text_color};">
<span t-field="line.product_id.name"/>
</td>
<span t-if="o.theme_id_purchase.description">
<td t-attf-style="color:#{o.theme_id_purchase.text_color};">
<span t-field="line.name"/>
</td>
</span>
<span t-if="o.theme_id_purchase.code">
<td class="text-right"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<t t-if="line.product_id.default_code">
<span t-field="line.product_id.default_code"/>
</t>
</td>
</span>
<span t-if="o.theme_id_purchase.tax_value">
<td name="td_taxes"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<span t-esc="', '.join(map(lambda x: x.name, line.taxes_id))"/>
</td>
</span>
<td class="text-center"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<span t-field="line.date_planned"/>
</td>
<td class="text-right"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<span t-field="line.product_qty"/>
<span t-field="line.product_uom.name"
groups="uom.group_uom"/>
</td>
<td class="text-right"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<span t-field="line.price_unit"/>
</td>
<td class="text-right"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<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"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<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"
t-attf-style="color:#{o.theme_id_purchase.text_color};">
<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-right">
<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">
<t t-set="tax_totals" t-value="o.tax_totals"/>
<t t-call="account.document_tax_totals"/>
</table>
</div>
</div>
<p t-field="o.notes"/>
<div class="oe_structure"/>
</div>
</t>
</template>
</odoo>

216
purchase_format_editor/report/purchase_order_quotation_fantacy_templates.xml

@ -0,0 +1,216 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- This template is used to display a purchase quotation report in a
modern view. It includes the header section with the company logo and details,
such as partner information, address, and VAT number.-->
<template id="custom_template_report_purchase_quotation_modern">
<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-#{o.theme_id_purchase.logo_position}">
<img t-if="company.logo"
t-attf-src="data:image/png;base64,{{ company.logo }}"
style="max-height: 80px;"/>
</div>
<div t-attf-class="pull-#{o.theme_id_purchase.company_position}"
t-attf-style="font:14px lucida-console,sans-serif; color:#{o.theme_id_purchase.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="o" t-value="o.with_context(lang=o.partner_id.lang)"/>
<t t-set="forced_vat"
t-value="o.fiscal_position_id.foreign_vat"/>
<!-- So that it appears in the footer of the report instead of the company VAT if it's set -->
<div class="page">
<div class="oe_structure"/>
<div t-attf-style=" background-color:#{o.theme_id_purchase.base_color};padding:2%">
<h2>
<span t-if="o.state in ['draft', 'sent', 'to approve']">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
Request for Quotation
</font>
</span>
<span t-if="o.state in ['purchase', 'done']">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
Purchase Order
</font>
</span>
<span t-if="o.state == 'cancel'">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
Cancelled Purchase Order
</font>
</span>
<font t-attf-style=" color:#{o.theme_id_purchase.heading_text_color}">
<span t-field="o.name"/>
</font>
</h2>
<div class="row mt32 mb32">
<div class="col-3"
t-if="o.state in ['purchase','done'] and o.date_approve">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Order Date:</strong>
<p t-field="o.date_approve"/>
</font>
</div>
<div class="col-3"
t-if="o.date_order">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Order Deadline:</strong>
<p t-field="o.date_order"/>
</font>
</div>
<div class="col-3" t-if="o.user_id">
<div t-if="o.theme_id_purchase.purchase_rep">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Purchase Representative</strong>
<p t-field="o.user_id"/>
</font>
</div>
</div>
<div class="col-3" t-if="o.partner_ref">
<div t-if="o.theme_id_purchase.reference">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Reference:</strong>
<p t-field="o.partner_ref"/>
</font>
</div>
</div>
<div class="col-3" t-if="o.origin">
<div t-if="o.theme_id_purchase.source">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Source:</strong>
<p t-field="o.origin"/>
</font>
</div>
</div>
</div>
</div>
<div style="padding-top:20px;width:100%">
<div class="col-12">
<div t-attf-class="text-#{o.theme_id_purchase.shipping_address_position} "
style="font:15px lucida-console,sans-serif !important;color:#{o.theme_id_purchase.heading_text_color};">
<t t-if="o.dest_address_id">
<t t-if="o.theme_id_purchase.shipping_address">
<div>
<strong>Shipping address:</strong>
<div>
<div style="color:#{o.theme_id_purchase.customer_text_color} !important;"
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>
<br/>
<br/>
</div>
</t>
</t>
</div>
<div t-attf-class="text-#{o.theme_id_purchase.customer_position} "
style="font:15px lucida-console,sans-serif !important;color:#{o.theme_id_purchase.heading_text_color};">
<strong>Customer Address</strong>
<br/>
<div>
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id"/>
<br/>
<span t-if="o.theme_id_purchase.address">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.street"/>
<br/>
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.street2"/>
</span>
<br/>
<span t-if="o.theme_id_purchase.city">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.city"/>
</span>
<br/>
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.state_id"/>
<br/>
<span t-if="o.theme_id_purchase.country">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.country_id"/>
</span>
<br/>
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.vat"/>
</div>
<br/>
<br/>
</div>
</div>
<table class="table table-sm o_main_table">
<thead>
<tr>
<th t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
Description
</th>
<th name="th_date_req" class="text-center"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<strong>Expected Date</strong>
</th>
<th name="th_quantity" class="text-right"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<strong>Qty</strong>
</th>
</tr>
</thead>
<tbody>
<t t-foreach="o.order_line" t-as="order_line">
<tr t-att-class="'bg-200 font-weight-bold o_line_section' if order_line.display_type == 'line_section' else 'font-italic o_line_note' if order_line.display_type == 'line_note' else ''">
<t t-if="not order_line.display_type">
<td t-attf-style="color:#{o.theme_id_purchase.text_color};"
id="product">
<span t-field="order_line.name"/>
</td>
<td t-attf-style="color:#{o.theme_id_purchase.text_color};"
class="text-center">
<span t-field="order_line.date_planned"/>
</td>
<td t-attf-style="color:#{o.theme_id_purchase.text_color};"
class="text-right">
<span t-field="order_line.product_qty"/>
<span t-field="order_line.product_uom"
groups="uom.group_uom"/>
</td>
</t>
<t t-else="">
<td t-attf-style="color:#{o.theme_id_purchase.text_color};"
colspan="99"
id="section">
<span t-field="order_line.name"/>
</td>
</t>
</tr>
</t>
</tbody>
</table>
</div>
<p t-field="o.notes"/>
<div class="oe_structure"/>
</div>
</t>
</template>
</odoo>

203
purchase_format_editor/report/purchase_order_quotation_old_standard_templates.xml

@ -0,0 +1,203 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- This template is used to display a purchase quotation report in an
old standard format. It includes the header section with the company logo
and details, such as partner information, address, and VAT number. -->
<template id="old_std_report_purchase_quotation_document">
<t t-call="web.external_layout">
<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="row mt32 mb32" style="padding-top:-10px;">
<div class="page-header col-12">
<div t-attf-class="pull-#{o.theme_id_purchase.logo_position}">
<img t-if="company.logo"
t-attf-src="data:image/png;base64,{{ company.logo }}"
style="max-height: 80px;"/>
</div>
<div t-attf-class="pull-#{o.theme_id_purchase.company_position}"
t-attf-style="font:14px lucida-console,sans-serif; color:#{o.theme_id_purchase.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 class="col-12">
<div t-attf-class="text-#{o.theme_id_purchase.shipping_address_position} "
style="font:15px lucida-console,sans-serif !important;color:#{o.theme_id_purchase.heading_text_color};">
<t t-if="o.partner_id">
<t t-if="o.theme_id_purchase.shipping_address">
<div>
<strong>Shipping address:</strong>
<div>
<div style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id"
t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}'
name="purchase_shipping_address"/>
</div>
<br/>
<br/>
</div>
</t>
</t>
</div>
</div>
<div class="page">
<div class=" row mt32 mb32">
<div class="col-12" style="padding-top:20px;">
<div t-attf-class=" pull-#{o.theme_id_purchase.customer_position} text-#{o.theme_id_purchase.customer_position}"
style="font:15px lucida-console,sans-serif !important;">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id"/>
<br/>
<span t-if="o.theme_id_purchase.address">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.street"/>
<br/>
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.street2"/>
</span>
<br/>
<span t-if="o.theme_id_purchase.city">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.city"/>
</span>
<br/>
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.state_id"/>
<br/>
<span t-if="o.theme_id_purchase.country">
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.country_id"/>
</span>
<br/>
<span t-attf-style="color:#{o.theme_id_purchase.customer_text_color} !important;"
t-field="o.partner_id.vat"/>
<br/>
</div>
<div t-attf-class="pull-right"
t-attf-style="font:15px lucida-console,sans-serif !important;background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};padding:2%">
<h2>
<span t-if="o.state in ['draft', 'sent', 'to approve']">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
Request for Quotation
</font>
</span>
<span t-if="o.state in ['purchase', 'done']">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
Purchase Order
</font>
</span>
<span t-if="o.state == 'cancel'">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
Cancelled Purchase Order
</font>
</span>
<font t-attf-style=" color:#{o.theme_id_purchase.heading_text_color}">
<span t-field="o.name"/>
</font>
</h2>
<div t-if="o.state in ['purchase','done'] and o.date_approve">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Date Order:</strong>
<p t-field="o.date_approve"/>
</font>
</div>
<div t-if="o.date_order">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Date Deadline:</strong>
<p t-field="o.date_order"/>
</font>
</div>
<div t-if="o.user_id">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Purchase Representative:</strong>
<p t-field="o.user_id"/>
</font>
</div>
<div t-if="o.theme_id_purchase.reference">
<div t-if="o.partner_ref">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Reference:</strong>
<p t-field="o.partner_ref"/>
</font>
</div>
</div>
<div t-if="o.theme_id_purchase.source">
<div t-if="o.origin">
<font t-attf-style="color:#{o.theme_id_purchase.heading_text_color}">
<strong>Source:</strong>
<p t-field="o.origin"/>
</font>
</div>
</div>
</div>
</div>
</div>
<div style="padding-top:20px;"/>
<table class="table table-sm o_main_table">
<thead>
<tr>
<th t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
Description
</th>
<th name="th_date_req" class="text-center"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<strong>Expected Date</strong>
</th>
<th name="th_quantity" class="text-right"
t-attf-style=" background-color:#{o.theme_id_purchase.base_color};color:#{o.theme_id_purchase.heading_text_color};">
<strong>Qty</strong>
</th>
</tr>
</thead>
<tbody>
<t t-foreach="o.order_line" t-as="order_line">
<tr t-att-class="'bg-200 font-weight-bold o_line_section' if order_line.display_type == 'line_section' else 'font-italic o_line_note' if order_line.display_type == 'line_note' else ''">
<t t-if="not order_line.display_type">
<td t-attf-style="color:#{o.theme_id_purchase.text_color};"
id="product">
<span t-field="order_line.name"/>
</td>
<td t-attf-style="color:#{o.theme_id_purchase.text_color};"
class="text-center">
<span t-field="order_line.date_planned"/>
</td>
<td t-attf-style="color:#{o.theme_id_purchase.text_color};"
class="text-right">
<span t-field="order_line.product_qty"/>
<span t-field="order_line.product_uom"
groups="uom.group_uom"/>
</td>
</t>
<t t-else="">
<td t-attf-style="color:#{o.theme_id_purchase.text_color};"
colspan="99"
id="section">
<span t-field="order_line.name"/>
</td>
</t>
</tr>
</t>
</tbody>
</table>
<p t-field="o.notes"/>
<div class="oe_structure"/>
</div>
</t>
</template>
</odoo>

188
purchase_format_editor/report/purchase_order_templates.xml

@ -0,0 +1,188 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- This template is used to generate a purchase order document.
It includes an external layout for consistent formatting. The template also
sets the context with the partner's language. The address information of the
partner is displayed, including the address, name, phone number,
and VAT number.-->
<template id="report_purchaseorder_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="float: {{o.theme_id_purchase.logo_position}}">
<img t-if="company.logo"
t-attf-src="data:image/png;base64,{{ company.logo }}"
style="max-height: 80px;"/>
</div>
<div t-attf-style="float: {{o.theme_id_purchase.company_position}}; font:14px lucida-console,sans-serif; color:#{o.theme_id_purchase.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 t-attf-style="float: {{o.theme_id_purchase.customer_position}};color:#{o.theme_id_purchase.customer_text_color} !important;" t-field="o.partner_id"
t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}'/>
<p t-attf-style="float: {{o.theme_id_purchase.customer_position}};color:#{o.theme_id_purchase.customer_text_color} !important;" t-if="o.partner_id.vat">
<t
t-esc="o.company_id.account_fiscal_country_id.vat_label or 'Tax ID'"/>
:
<span t-field="o.partner_id.vat"/>
</p>
<div t-attf-style="float: {{o.theme_id_purchase.shipping_address_position}};font:15px lucida-console,sans-serif !important;color:#{o.theme_id_purchase.heading_text_color};">
<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>
</div>
<div class="page">
<div class="oe_structure"/>
<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 id="informations" class="row mt32 mb32">
<div t-if="o.user_id" class="col-3 bm-2">
<strong>Purchase Representative:</strong>
<p t-field="o.user_id" class="m-0"/>
</div>
<div t-if="o.partner_ref" class="col-3 bm-2">
<strong>Your Order Reference:</strong>
<p t-field="o.partner_ref" class="m-0"/>
</div>
<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">
<thead>
<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-right">
<strong>Qty</strong>
</th>
<th name="th_price_unit" class="text-right">
<strong>Unit Price</strong>
</th>
<th name="th_amount" class="text-right">
<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-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">
<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-right">
<span t-field="line.product_qty"/>
<span t-field="line.product_uom.name"
groups="uom.group_uom"/>
</td>
<td class="text-right">
<span t-field="line.price_unit"/>
</td>
<td class="text-right">
<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-right">
<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">
<t t-set="tax_totals" t-value="o.tax_totals"/>
<t t-call="account.document_tax_totals"/>
</table>
</div>
</div>
<p t-field="o.notes"/>
<div class="oe_structure"/>
</div>
</t>
</template>
</odoo>

78
purchase_format_editor/report/purchase_quotation_templates.xml

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- This template is used to generate a purchase quotation document.
It utilizes an external layout for consistent formatting. The context is set
with the partner's language. The address information of the partner is
displayed, including the address, name, phone number, and VAT number. -->
<template id="report_purchase_quotation_document">
<t t-call="web.external_layout">
<t t-set="o" t-value="o.with_context(lang=o.partner_id.lang)"/>
<t t-set="forced_vat"
t-value="o.fiscal_position_id.foreign_vat"/> <!-- So that it appears in the footer of the report instead of the company VAT if it's set -->
<t t-set="address">
<div t-field="o.partner_id"
t-options='{"widget": "contact", "fields": ["address", "name", "phone"], "no_marker": True, "phone_icons": True}'/>
<p t-if="o.partner_id.vat"><t
t-esc="o.company_id.account_fiscal_country_id.vat_label or 'Tax ID'"/>
:
<span t-field="o.partner_id.vat"/>
</p>
</t>
<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>
<div class="page">
<div class="oe_structure"/>
<h2>Request for Quotation
<span t-field="o.name"/>
</h2>
<table class="table table-sm">
<thead>
<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-right">
<strong>Qty</strong>
</th>
</tr>
</thead>
<tbody>
<t t-foreach="o.order_line" t-as="order_line">
<tr t-att-class="'bg-200 font-weight-bold o_line_section' if order_line.display_type == 'line_section' else 'font-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-right">
<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>
<p t-field="o.notes"/>
<div class="oe_structure"/>
</div>
</t>
</template>
</odoo>

2
purchase_format_editor/security/ir.model.access.csv

@ -0,0 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_doc_layout_purchase,access.doc.layout.purchase,model_doc_layout_purchase,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_doc_layout_purchase access.doc.layout.purchase model_doc_layout_purchase base.group_user 1 1 1 1

BIN
purchase_format_editor/static/description/assets/icons/check.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
purchase_format_editor/static/description/assets/icons/chevron.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

BIN
purchase_format_editor/static/description/assets/icons/cogs.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
purchase_format_editor/static/description/assets/icons/consultation.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
purchase_format_editor/static/description/assets/icons/ecom-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

BIN
purchase_format_editor/static/description/assets/icons/education-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

BIN
purchase_format_editor/static/description/assets/icons/hotel-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

BIN
purchase_format_editor/static/description/assets/icons/license.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
purchase_format_editor/static/description/assets/icons/lifebuoy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
purchase_format_editor/static/description/assets/icons/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
purchase_format_editor/static/description/assets/icons/manufacturing-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

BIN
purchase_format_editor/static/description/assets/icons/pos-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 878 B

BIN
purchase_format_editor/static/description/assets/icons/puzzle.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

BIN
purchase_format_editor/static/description/assets/icons/restaurant-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

BIN
purchase_format_editor/static/description/assets/icons/service-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

BIN
purchase_format_editor/static/description/assets/icons/trading-black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

BIN
purchase_format_editor/static/description/assets/icons/training.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

BIN
purchase_format_editor/static/description/assets/icons/update.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
purchase_format_editor/static/description/assets/icons/user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 988 B

BIN
purchase_format_editor/static/description/assets/icons/wrench.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
purchase_format_editor/static/description/assets/misc/categories.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
purchase_format_editor/static/description/assets/misc/check-box.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
purchase_format_editor/static/description/assets/misc/compass.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
purchase_format_editor/static/description/assets/misc/config.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
purchase_format_editor/static/description/assets/misc/corporate.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
purchase_format_editor/static/description/assets/misc/customer-support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
purchase_format_editor/static/description/assets/misc/cybrosys-logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
purchase_format_editor/static/description/assets/misc/features.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

BIN
purchase_format_editor/static/description/assets/misc/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
purchase_format_editor/static/description/assets/misc/pictures.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
purchase_format_editor/static/description/assets/misc/pie-chart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
purchase_format_editor/static/description/assets/misc/right-arrow.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

BIN
purchase_format_editor/static/description/assets/misc/star.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
purchase_format_editor/static/description/assets/misc/support.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
purchase_format_editor/static/description/assets/misc/whatsapp.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
purchase_format_editor/static/description/assets/modules/employee_purchase_requisition.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
purchase_format_editor/static/description/assets/modules/merge_rfq.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

BIN
purchase_format_editor/static/description/assets/modules/product_brand_purchase.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

BIN
purchase_format_editor/static/description/assets/modules/product_multi_vendor_update.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
purchase_format_editor/static/description/assets/modules/purchase_product_history.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
purchase_format_editor/static/description/assets/modules/vendor_portal_odoo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

BIN
purchase_format_editor/static/description/assets/screenshots/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

BIN
purchase_format_editor/static/description/assets/screenshots/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

BIN
purchase_format_editor/static/description/assets/screenshots/3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
purchase_format_editor/static/description/assets/screenshots/4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
purchase_format_editor/static/description/assets/screenshots/5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
purchase_format_editor/static/description/assets/screenshots/6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

BIN
purchase_format_editor/static/description/assets/screenshots/conf.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

BIN
purchase_format_editor/static/description/assets/screenshots/default.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

BIN
purchase_format_editor/static/description/assets/screenshots/hero.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

BIN
purchase_format_editor/static/description/assets/screenshots/modern_modern.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
purchase_format_editor/static/description/assets/screenshots/normal_modern.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

BIN
purchase_format_editor/static/description/assets/screenshots/old_standard.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

BIN
purchase_format_editor/static/description/assets/screenshots/screenshot_1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

BIN
purchase_format_editor/static/description/assets/screenshots/screenshot_2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

BIN
purchase_format_editor/static/description/banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

BIN
purchase_format_editor/static/description/icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

672
purchase_format_editor/static/description/index.html

@ -0,0 +1,672 @@
<div style="background-color: #714B67; height: 810px; width: 100%; padding: 15px; position: relative;">
<!-- TITLE BAR -->
<div class="d-flex align-items-center justify-content-between"
style="border-bottom: 1px solid #875A7B; padding: 15px; display: flex; justify-content: space-between; align-items: center;">
<img src="assets/misc/cybrosys-logo.png" width="42" height="42"
style="width: 42px; height: 42px;"/>
<div>
<div
style="color: #7C7BAD; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Community
</div>
<div style="color: #875A7B; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Enterprise
</div>
<div
style="color: #017E84; font-size: 14px; font-family: 'Montserrat', sans-serif; font-weight: bold; background-color: white; display: inline-block; padding: 3px 10px; border-radius: 50px;"
class="mr-2">
<i class="fa fa-check mr-1"></i>Odoo.sh
</div>
</div>
</div>
<!-- END OF TITLE BAR -->
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-12">
<!-- APP HERO -->
<h1 style="color: #FFFFFF; font-weight: bolder; font-size: 50px; text-align: center; margin-top: 50px;">
Purchase Report Format Editor</h1>
<p style="color:#FFFFFF; padding: 8px 15px; text-align: center; font-size: 24px;">
Configure The Purchase Order Report Templates.</p>
<!-- END OF APP HERO -->
<img src="assets/screenshots/hero.gif" class="img-responsive"
style="width: 70%; margin-left: 15%; margin-right: auto;"/>
</div>
</div>
</div>
</div>
<!--Navigation-->
<div class="container"
style="margin-top: 70px; padding: 0rem 1.5rem 4rem !important ">
<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 Purchase Format Editor App, users can easily configure
purchase bill styles according to their specific requirements.
The application provides four template options: Default,
Normal, Modern, and Old Standard, and allows for the
customization and hiding of fields to tailor bill to
individual preferences.</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 Fields</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;">
Hide Option For The Purchase Order Fields</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;">
Settings Menu</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
From the Settings Menu, user can select Configure Document Layout
</p>
<img src="assets/screenshots/conf.png"
class="img-responsive img-thumbnail border" width="100%"
height="auto"/>
</div>
<div class="col-lg-12 my-2 mt-2" style="margin-top: 30px;">
<h4 class="mt-2"
style="font-family: 'Roboto', sans-serif !important; font-weight: 600 !important; color: #282F33 !important; font-size: 1.3rem !important;">
Document Layout Configuration</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
From Document Layout Configuration, user can select
and configure the Purchase Document
Layout</p>
<img src="assets/screenshots/1.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;">
Purchase Order Document Layout Configuration</h4>
<p
style="font-family: 'Roboto', sans-serif !important; font-weight: 400 !important; color: #282F33 !important; font-size: 1rem !important;">
User can configure the Text Positions & Text Colors
layout</p>
<img src="assets/screenshots/2.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;">
Normal Template</h4>
<img src="assets/screenshots/3.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;">
Modern Standard Template</h4>
<img src="assets/screenshots/4.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;">
Old Standard Template</h4>
<img src="assets/screenshots/5.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;">
Default Template</h4>
<img src="assets/screenshots/6.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/16.0/vendor_portal_odoo/"
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/vendor_portal_odoo.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/16.0/employee_purchase_requisition/"
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/employee_purchase_requisition.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/16.0/product_brand_purchase/"
target="_blank">
<div style="border-radius:10px">
<img class="img img-responsive center-block"
style="border-top-left-radius:10px; border-top-right-radius:10px"
src="./assets/modules/product_brand_purchase.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/16.0/product_multi_vendor_update/"
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/product_multi_vendor_update.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/16.0/purchase_product_history/"
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/purchase_product_history.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/16.0/merge_rfq/"
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/merge_rfq.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 &amp; 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 -->
<!-- SUPPORT -->
<div class="d-flex align-items-center"
style="border-bottom: 2px solid #714B67; padding: 15px 0px;">
<div class="d-flex justify-content-center align-items-center mr-2"
style="background-color: #F5F5F5; border-radius: 0px; width: 40px; height: 40px;">
<img src="assets/misc/customer-support.png"/>
</div>
<h2 class="mt-2"
style="font-family: 'Montserrat', sans-serif; font-size: 24px; font-weight: bold;">
Support
</h2>
</div>
<div class="container mt-5">
<div class="row">
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4"
style="background-color: #714B67; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/support.png" height="48"
width="48"
style="width: 42px; height: 42px;"/>
</div>
<div>
<h4>Need Help?</h4>
<p style="line-height: 100%;">Got questions or need
help?
Get in touch.</p>
<a href="mailto:odoo@cybrosys.com">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
odoo@cybrosys.com</p>
</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-6">
<div style="background-color: #F6F8F9; padding: 30px; display: flex; align-items: center;">
<div class="mr-4"
style="background-color: #2AC44D; display: inline-block; height: 70px; width: 70px; display: flex; align-items: center; justify-content: center;">
<img src="assets/misc/whatsapp.png" height="52"
width="52"
style="width: 52px; height: 52px;"/>
</div>
<div>
<h4>WhatsApp</h4>
<p style="line-height: 100%;">Say hi to us on
WhatsApp!</p>
<a href="https://api.whatsapp.com/send?phone=918606827707">
<p style="font-weight: 400; font-size: 28px; line-height: 80%; color: #714B67;">
+91 86068
27707</p>
</a>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 my-5 d-flex justify-content-center align-items-center">
<img src="assets/misc/logo.png" width="144" height="31"
style="width:144px; height: 31px; margin-top: 40px;"/>
</div>
</div>
</div>
<!-- END OF FOOTER -->
</div>

26
purchase_format_editor/views/base_document_layout_views.xml

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--Configuration View of Base Document Layout. Here two new field are
added to let the users select their desired template. And also replaces
the existing preview download button-->
<record id="view_base_document_layout" model="ir.ui.view">
<field name="name">
base.document.layout.view.form.inherit.purchase.format.editor
</field>
<field name="model">base.document.layout</field>
<field name="inherit_id" ref="web.view_base_document_layout"/>
<field name="arch" type="xml">
<field name="paperformat_id"
position="after">
<field name="base_layout_purchase"/>
<field name="document_layout_purchase_id"/>
</field>
<xpath expr="//button[hasclass('oe_link')]"
position="replace">
<button name="print_pdf" type="object"
string="Download PDF Preview" class="oe_link"
icon="fa-arrow-right"/>
</xpath>
</field>
</record>
</odoo>

60
purchase_format_editor/views/doc_layout_purchase_views.xml

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--This is the configuration layout view for the 'doc.layout.purchase' model.
It defines how records of this model will be displayed and edited in the Odoo user interface.-->
<record id="doc_layout_purchase_view_form" model="ir.ui.view">
<field name="name">doc.layout.purchase.view.form</field>
<field name="model">doc.layout.purchase</field>
<field name="arch" type="xml">
<form string="Customize Document">
<sheet>
<div class="oe_title">
<h1>
<field name="name"/>
</h1>
</div>
<group>
<group>
<field name="text_color" widget="color"/>
<field name="heading_text_color"
widget="color"/>
<field name="customer_text_color"
widget="color"/>
<field name="company_text_color"
widget="color"/>
</group>
<group>
<field name="base_color" widget="color"/>
<field name="customer_position"/>
<field name="company_position"/>
<field name="shipping_address"/>
<field name="shipping_address_position"
attrs="{'invisible':[('shipping_address','=',False)]}"/>
<field name="logo_position"/>
</group>
</group>
<notebook colspan="4">
<page string="Invoice Details" name="invoice_info">
<group>
<group string="View Fields">
<field name="purchase_rep"/>
<field name="description"/>
<field name="tax_value"/>
<field name="code"/>
<field name="reference"/>
<field name="source"/>
</group>
<group string="Customer Details"
name="customer_info">
<field name="address"/>
<field name="city"/>
<field name="country"/>
</group>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
</odoo>

212
purchase_format_editor/views/purchase_order_default_templates.xml

@ -0,0 +1,212 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- This template is used to generate a default preview for a purchase
report. It includes an external layout and an HTML preview container-->
<template id="report_preview_default_purchase">
<t t-call="web.html_container">
<div class="header row mt32 mb32">
<div class="page-header col-12">
<div t-attf-style="float: {{style.logo_position}}">
<img t-if="company.logo"
t-attf-src="data:image/png;base64,{{ company.logo }}"
style="max-height: 80px;"/>
</div>
<div t-attf-style="float: {{style.company_position}}; font:14px lucida-console,sans-serif; color:#{style.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 class="pt-5">
<div class="address row">
<div name="address" class="col-md-5 ml-auto w-100">
<address>
<address class="mb-0" itemscope="itemscope"
itemtype="http://schema.org/Organization" t-attf-style="float: {{company.document_layout_purchase_id.customer_position}};">
<div>
<span itemprop="name">Deco Addict
</span>
</div>
<div itemprop="address"
itemscope="itemscope"
itemtype="http://schema.org/PostalAddress">
<div class="d-flex align-items-baseline">
<span class="w-100 o_force_ltr"
itemprop="streetAddress">
77 Santa Barbara
Rd<br/>Pleasant Hill CA
94523<br/>United States
</span>
</div>
</div>
</address>
</address>
</div>
</div>
</div>
<div class="page">
<h2>
<span>Purchase Order#</span>
<span>P0007</span>
</h2>
<div id="informations" class="row mt32 mb32">
<div class="col-auto mw-100 mb-2"
name="invoice_date">
<strong>Order Date:</strong>
<p class="m-0">07/08/2020</p>
</div>
<div class="col-auto mw-100 mb-2" name="due_date">
<strong>Order Deadline:</strong>
<p class="m-0">08/07/2020</p>
</div>
</div>
<table class="table table-sm o_main_table"
name="invoice_line_table">
<thead>
<tr>
<th name="th_description" class="text-left">
<span>Product</span>
</th>
<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"
class="text-right d-none d-md-table-cell">
<span>Unit Price</span>
</th>
<th name="th_taxes"
class="text-left d-none d-md-table-cell">
<span>Taxes</span>
</th>
<th name="th_subtotal" class="text-right">
<span>Amount</span>
</th>
</tr>
</thead>
<tbody class="invoice_tbody">
<tr>
<td name="account_invoice_line_pro">
Three-Seat Sofa
</td>
<td name="account_invoice_line_name">
<span>[FURN_8999] Three-Seat Sofa
<br/>
Three Seater Sofa with Lounger in
Steel Grey Colour
</span>
</td>
<td class="text-right">
<span>5.000</span>
</td>
<td class="text-right d-none d-md-table-cell">
<span class="text-nowrap">1,500.00
</span>
</td>
<td class="text-left d-none d-md-table-cell">
<span id="line_tax_ids">15.00%</span>
</td>
<td class="text-right o_price_total">
<span class="text-nowrap">$
<span class="oe_currency_value">
7,500.00
</span>
</span>
</td>
</tr>
<tr>
<td name="account_invoice_line_name">
<span>Four Person Desk
</span>
</td>
<td name="account_invoice_line_name_des">
<span>[FURN_8220] Four Person Desk
<br/>
Four person modern office
workstation
</span>
</td>
<td class="text-right">
<span>5.000</span>
</td>
<td class="text-right d-none d-md-table-cell">
<span class="text-nowrap">23,500.00
</span>
</td>
<td class="text-left d-none d-md-table-cell">
<span id="line_tax_ids">15.00%</span>
</td>
<td class="text-right o_price_total">
<span class="text-nowrap">$
<span class="oe_currency_value">
117,500.00
</span>
</span>
</td>
</tr>
</tbody>
</table>
<div class="clearfix">
<div id="total" class="row">
<div class="col-sm-7 col-md-6 ml-auto">
<table class="table table-sm"
style="page-break-inside: avoid;">
<tbody>
<tr class="border-black o_subtotal"
style="">
<td>
<strong>Subtotal</strong>
</td>
<td class="text-right">
<span>$
<span class="oe_currency_value">
125,000.00
</span>
</span>
</td>
</tr>
<tr style="">
<td>
<span class="text-nowrap">
Tax 15%
</span>
</td>
<td class="text-right o_price_total">
<span class="text-nowrap">$
18,750.00
</span>
</td>
</tr>
<tr class="border-black o_total">
<td>
<strong>Total</strong>
</td>
<td class="text-right">
<span class="text-nowrap">$
<span class="oe_currency_value">
143,750.00
</span>
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</t>
</template>
</odoo>

246
purchase_format_editor/views/purchase_order_modern_templates.xml

@ -0,0 +1,246 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--This template is used to generate a modern preview for a purchase report.
It includes an external layout and an HTML preview container. -->
<template id="report_preview_modern_purchase">
<t t-call="web.html_container">
<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="float: {{company.document_layout_purchase_id.logo_position}}">
<img t-if="company.logo"
t-attf-src="data:image/png;base64,{{ company.logo }}"
style="max-height: 80px;"/>
</div>
<div t-attf-style="float: {{company.document_layout_purchase_id.company_position}}; font:14px lucida-console,sans-serif; color:#{company.document_layout_purchase_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 class="pt-5">
<div class="address row">
<div name="address" class="col-md-5 ml-auto">
<address>
<address class="mb-0" itemscope="itemscope"
itemtype="http://schema.org/Organization">
</address>
</address>
</div>
</div>
</div>
<div class="page">
<div t-attf-style=" background-color:#{company.document_layout_purchase_id.base_color};padding:2% ;color:#{company.document_layout_purchase_id.heading_text_color};">
<h2>
<div t-attf-style="color:##FFFFFF">
Purchase Order# P0007
</div>
</h2>
<div id="informations"
class="row mt32 mb32">
<div class="col-auto mw-100 mb-2"
name="invoice_date"
t-attf-style="color:##FFFFFF;">
<p>Order Date:
</p>
<p class="m-0">07/08/2020
</p>
</div>
<div class="col-auto mw-100 mb-2"
name="due_date"
t-attf-style="color:##FFFFFF;">
<p>Order Deadline:</p>
<p class="m-0">08/07/2020
</p>
</div>
<div class="col-auto mw-100 mb-2"
name="purchase"
t-attf-style="color:##FFFFFF;">
<p>Purchase Representative
</p>
<p class="m-0">Mitchell
Admin
</p>
</div>
</div>
</div>
</div>
<div class="pt-5">
<div class="address row" >
<div name="address" class="col-md-5 ml-auto w-100">
<div itemprop="address"
itemscope="itemscope"
itemtype="http://schema.org/PostalAddress" style="width: 100%;">
<div class="d-flex align-items-baseline" t-attf-style="float: {{company.document_layout_purchase_id.customer_position}};">
<span class="o_force_ltr"
itemprop="streetAddress" >
Deco Addict
<br/>
77 Santa Barbara
Rd<br/>Pleasant Hill CA
94523<br/>United States
<br/>
</span>
</div>
</div>
</div>
</div>
</div>
<div class="page">
<br/>
<br/>
<table class="table table-sm o_main_table"
name="invoice_line_table">
<thead>
<tr t-attf-style=" background-color:#{company.document_layout_purchase_id.base_color};padding:2% ;color:#{company.document_layout_purchase_id.heading_text_color};">
<th name="th_description" class="text-left">
<span>Product</span>
</th>
<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"
class="text-right d-none d-md-table-cell">
<span>Unit Price</span>
</th>
<th name="th_taxes"
class="text-left d-none d-md-table-cell">
<span>Taxes</span>
</th>
<th name="th_subtotal" class="text-right">
<span>Amount</span>
</th>
</tr>
</thead>
<tbody class="invoice_tbody">
<tr>
<td name="account_invoice_line_pro">
Three-Seat Sofa
</td>
<td name="account_invoice_line_name">
<span>[FURN_8999] Three-Seat Sofa
<br/>
Three Seater Sofa with Lounger in
Steel Grey Colour
</span>
</td>
<td class="text-right">
<span>5.000</span>
</td>
<td class="text-right d-none d-md-table-cell">
<span class="text-nowrap">1,500.00
</span>
</td>
<td class="text-left d-none d-md-table-cell">
<span id="line_tax_ids">15.00%</span>
</td>
<td class="text-right o_price_total">
<span class="text-nowrap">$
<span class="oe_currency_value">
7,500.00
</span>
</span>
</td>
</tr>
<tr>
<td name="account_invoice_line_name">
<span>Four Person Desk
</span>
</td>
<td name="account_invoice_line_name_des">
<span>[FURN_8220] Four Person Desk
<br/>
Four person modern office
workstation
</span>
</td>
<td class="text-right">
<span>5.000</span>
</td>
<td class="text-right d-none d-md-table-cell">
<span class="text-nowrap">23,500.00
</span>
</td>
<td class="text-left d-none d-md-table-cell">
<span id="line_tax_ids">15.00%</span>
</td>
<td class="text-right o_price_total">
<span class="text-nowrap">$
<span class="oe_currency_value">
117,500.00
</span>
</span>
</td>
</tr>
</tbody>
</table>
<div class="clearfix">
<div id="total" class="row">
<div class="col-sm-7 col-md-6 ml-auto">
<table class="table table-sm"
style="page-break-inside: avoid;">
<tbody>
<tr class="border-black o_subtotal"
style="">
<td>
<strong>Subtotal</strong>
</td>
<td class="text-right">
<span>$
<span class="oe_currency_value">
125,000.00
</span>
</span>
</td>
</tr>
<tr style="">
<td>
<span class="text-nowrap">
Tax 15%
</span>
</td>
<td class="text-right o_price_total">
<span class="text-nowrap">$
18,750.00
</span>
</td>
</tr>
<tr class="border-black o_total">
<td>
<strong>Total</strong>
</td>
<td class="text-right">
<span class="text-nowrap">$
<span class="oe_currency_value">
143,750.00
</span>
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</t>
</template>
</odoo>

231
purchase_format_editor/views/purchase_order_normal_templates.xml

@ -0,0 +1,231 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!--This template is used to generate a normal preview for a purchase report.
It includes an external layout and an HTML preview container-->
<template id="report_preview_normal_purchase">
<t t-call="web.html_container">
<div class="header row mt32 mb32">
<div class="page-header col-12">
<div t-attf-style="float: {{company.document_layout_purchase_id.logo_position}}">
<img t-if="company.logo"
t-attf-src="data:image/png;base64,{{ company.logo }}"
style="max-height: 80px;"/>
</div>
<div t-attf-style="float: {{company.document_layout_purchase_id.company_position}}; font:14px lucida-console,sans-serif; color:#{company.document_layout_purchase_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 class="pt-5">
<div class="pull-right">
<div name="address" class="col-md-5 ml-auto">
<address>
<address class="mb-0" itemscope="itemscope"
itemtype="http://schema.org/Organization">
</address>
</address>
</div>
</div>
</div>
<table class="table table-borderless"
style="padding-top:20px;width:100%">
<tr>
<th t-attf-style=" background-color:#{company.document_layout_purchase_id.base_color};color:#{company.document_layout_purchase_id.heading_text_color};">
Customer Address
</th>
<th t-attf-style=" background-color:#{company.document_layout_purchase_id.base_color};color:#{company.document_layout_purchase_id.heading_text_color};">
Order Date
</th>
<th t-attf-style=" background-color:#{company.document_layout_purchase_id.base_color};color:#{company.document_layout_purchase_id.heading_text_color};">
Order Deadline
</th>
<th t-attf-style=" background-color:#{company.document_layout_purchase_id.base_color};color:#{company.document_layout_purchase_id.heading_text_color};">
Purchase Representative
</th>
</tr>
<tr>
<td>
Gemini Furniture
<br/>
317 Fairchild Dr
<br/>
Fairfield
<br/>
United States
<br/>
</td>
<td>
<font>
<p class="m-0">07/08/2020</p>
</font>
</td>
<td>
<font>
<p class="m-0">08/08/2020</p>
</font>
</td>
<td>
<font>
<p class="m-0">Mitchell admin</p>
</font>
</td>
</tr>
</table>
<div class="page" style="text-align: center">
<h2>
<span>Purchase Order#</span>
<span>P00007</span>
</h2>
</div>
<div style="padding-top:20px;width:100%">
<div style="padding-top:20px;"/>
<table class="table table">
<thead>
<tr>
<th t-attf-style=" background-color:#{company.document_layout_purchase_id.base_color};color:#{company.document_layout_purchase_id.heading_text_color};">
Product
</th>
<th t-attf-style=" background-color:#{company.document_layout_purchase_id.base_color};color:#{company.document_layout_purchase_id.heading_text_color};">
Description
</th>
<th t-attf-style=" background-color:#{company.document_layout_purchase_id.base_color};color:#{company.document_layout_purchase_id.heading_text_color};">
Quantity
</th>
<th t-attf-style=" background-color:#{company.document_layout_purchase_id.base_color};color:#{company.document_layout_purchase_id.heading_text_color};">
Unit Price
</th>
<th t-attf-style=" background-color:#{company.document_layout_purchase_id.base_color};color:#{company.document_layout_purchase_id.heading_text_color};">
Taxes
</th>
<th t-attf-style=" background-color:#{company.document_layout_purchase_id.base_color};color:#{company.document_layout_purchase_id.heading_text_color};">
Price
</th>
</tr>
</thead>
<tbody class="invoice_tbody">
<tr>
<td name="account_invoice_line_pro">
Three-Seat Sofa
</td>
<td name="account_invoice_line_name">
<span>[FURN_8999] Three-Seat Sofa
<br/>
Three Seater Sofa with Lounger in
Steel Grey Colour
</span>
</td>
<td class="text-right">
<span>5.000</span>
</td>
<td class="text-right d-none d-md-table-cell">
<span class="text-nowrap">1,500.00
</span>
</td>
<td class="text-left d-none d-md-table-cell">
<span id="line_tax_ids">15.00%</span>
</td>
<td class="text-right o_price_total">
<span class="text-nowrap">$
<span class="oe_currency_value">
7,500.00
</span>
</span>
</td>
</tr>
<tr>
<td name="account_invoice_line_name">
<span>Four Person Desk
</span>
</td>
<td name="account_invoice_line_name_des">
<span>[FURN_8220] Four Person Desk
<br/>
Four person modern office
workstation
</span>
</td>
<td class="text-right">
<span>5.000</span>
</td>
<td class="text-right d-none d-md-table-cell">
<span class="text-nowrap">23,500.00
</span>
</td>
<td class="text-left d-none d-md-table-cell">
<span id="line_tax_ids">15.00%</span>
</td>
<td class="text-right o_price_total">
<span class="text-nowrap">$
<span class="oe_currency_value">
117,500.00
</span>
</span>
</td>
</tr>
</tbody>
</table>
</div>
<div>
<div class="clearfix">
<div id="total" class="row">
<div class="col-sm-7 col-md-6 ml-auto">
<table class="table table-sm"
style="page-break-inside: avoid;">
<tbody>
<tr class="border-black o_subtotal"
style="">
<td>
<strong>Subtotal</strong>
</td>
<td class="text-right">
<span>$
<span class="oe_currency_value">
125,000.00
</span>
</span>
</td>
</tr>
<tr style="">
<td>
<span class="text-nowrap">
Tax 15%
</span>
</td>
<td class="text-right o_price_total">
<span class="text-nowrap">$
18,750.00
</span>
</td>
</tr>
<tr class="border-black o_total">
<td>
<strong>Total</strong>
</td>
<td class="text-right">
<span class="text-nowrap">$
<span class="oe_currency_value">
143,750.00
</span>
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</t>
</template>
</odoo>

251
purchase_format_editor/views/purchase_order_old_templates.xml

@ -0,0 +1,251 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--This template is used to generate an old-style preview for a purchase report.
It includes an external layout and an HTML preview container.-->
<template id="report_preview_old_purchase">
<t t-call="web.html_container">
<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="float: {{company.document_layout_purchase_id.logo_position}}">
<img t-if="company.logo"
t-attf-src="data:image/png;base64,{{ company.logo }}"
style="max-height: 80px;"/>
</div>
<div t-attf-style="float: {{company.document_layout_purchase_id.company_position}}; font:14px lucida-console,sans-serif; color:#{company.document_layout_purchase_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 class="pt-5">
<div class="address row">
<div name="address" class="col-md-5 ml-auto">
<address>
<address class="mb-0" itemscope="itemscope"
itemtype="http://schema.org/Organization">
</address>
</address>
</div>
</div>
</div>
<div class="pt-5 d-flex" style="flex-direction: column;">
<div class="address row mt32 mb32" t-attf-class="pull-right">
<div class="col-12" style="padding-top:20px;">
<div itemprop="address"
itemscope="itemscope"
itemtype="http://schema.org/PostalAddress" >
<div class="d-flex align-items-baseline" t-attf-style="float: {{company.document_layout_purchase_id.customer_position}};">
<span class="w-100 o_force_ltr"
itemprop="streetAddress">
Deco Addict
<br/>
77 Santa Barbara
Rd<br/>Pleasant Hill CA
94523<br/>United States
<br/>
</span>
</div>
</div>
</div>
</div>
<div t-attf-class="pull-right"
t-attf-style="font:15px lucida-console,sans-serif !important;background-color:#{company.document_layout_purchase_id.base_color};color:#{company.document_layout_purchase_id.heading_text_color};padding:2%">
<h2>
<div t-attf-style="color:##FFFFFF">
Purchase Order# P00007
</div>
</h2>
<div id="informations"
class="row mt32 mb32">
<div class="col-auto mw-100 mb-2"
name="due_date"
t-attf-style="color:##FFFFFF;">
<p>Order Date:
</p>
<p class="m-0">07/08/2020
</p>
<p>Order Deadline:</p>
<p class="m-0">08/07/2020
</p>
<p>Purchase Representative
</p>
<p class="m-0">Mitchell
Admin
</p>
</div>
</div>
</div>
<br/>
<br/>
<br/>
<br/>
<br/>
<div class="page" t-attf-style="padding-top:25px;">
<table class="table table-sm o_main_table"
name="invoice_line_table">
<thead>
<tr t-attf-style=" background-color:#{company.document_layout_purchase_id.base_color};padding:2% ;color:#{company.document_layout_purchase_id.heading_text_color};">
<th name="th_description"
class="text-left">
<span>Product</span>
</th>
<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"
class="text-right d-none d-md-table-cell">
<span>Unit Price</span>
</th>
<th name="th_taxes"
class="text-left d-none d-md-table-cell">
<span>Taxes</span>
</th>
<th name="th_subtotal"
class="text-right">
<span>Amount</span>
</th>
</tr>
</thead>
<tbody class="invoice_tbody">
<tr>
<td name="account_invoice_line_pro">
Three-Seat Sofa
</td>
<td name="account_invoice_line_name">
<span>[FURN_8999] Three-Seat Sofa
<br/>
Three Seater Sofa with Lounger
in
Steel Grey Colour
</span>
</td>
<td class="text-right">
<span>5.000</span>
</td>
<td class="text-right d-none d-md-table-cell">
<span class="text-nowrap">1,500.00
</span>
</td>
<td class="text-left d-none d-md-table-cell">
<span id="line_tax_ids">15.00%
</span>
</td>
<td class="text-right o_price_total">
<span class="text-nowrap">$
<span class="oe_currency_value">
7,500.00
</span>
</span>
</td>
</tr>
<tr>
<td name="account_invoice_line_name">
<span>Four Person Desk
</span>
</td>
<td name="account_invoice_line_des">
<span>[FURN_8220] Four Person Desk
<br/>
Four person modern office
workstation
</span>
</td>
<td class="text-right">
<span>5.000</span>
</td>
<td class="text-right d-none d-md-table-cell">
<span class="text-nowrap">23,500.00
</span>
</td>
<td class="text-left d-none d-md-table-cell">
<span id="line_tax_ids">15.00%
</span>
</td>
<td class="text-right o_price_total">
<span class="text-nowrap">$
<span class="oe_currency_value">
117,500.00
</span>
</span>
</td>
</tr>
</tbody>
</table>
<div class="clearfix">
<div id="total" class="row">
<div class="col-sm-7 col-md-6 ml-auto">
<table class="table table-sm"
style="page-break-inside: avoid;">
<tbody>
<tr class="border-black o_subtotal"
style="">
<td>
<strong>Subtotal
</strong>
</td>
<td class="text-right">
<span>$
<span class="oe_currency_value">
125,000.00
</span>
</span>
</td>
</tr>
<tr>
<td>
<span class="text-nowrap">
Tax 15%
</span>
</td>
<td class="text-right o_price_total">
<span class="text-nowrap">
$
18,750.00
</span>
</td>
</tr>
<tr class="border-black o_total"
t-attf-style=" background-color:#{company.document_layout_purchase_id.base_color};padding:2% ;color:#{company.document_layout_purchase_id.heading_text_color};">
<td>
<strong>Total</strong>
</td>
<td class="text-right">
<span class="text-nowrap">
$
<span class="oe_currency_value">
143,750.00
</span>
</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</t>
</template>
</odoo>
Loading…
Cancel
Save