Currently, the DIN5008 layout is a bit off and some aspects can be improved: 1. some fields are useless/unused (namely country, phone number and duplicated VAT number) 2. the size of the header and footer is too big, leading to out-of-frame text depending on the amount of information to be displayed 3. footer and company details fields (from the document layout) are not used, reducing user's customization This commit addresses both these issues by: 1. removing useless fields 2. resizing the company information text de be more concise 3. replacing 'hard coded' company details/footer by their respective editable fields, and improving their default values to match DIN5008 requirements task id=2821303 closes odoo/odoo#100723 Signed-off-by: William André (wan) <wan@odoo.com>
52 lines
2.6 KiB
Python
52 lines
2.6 KiB
Python
from markupsafe import Markup
|
|
import re
|
|
|
|
from odoo import api, models, fields, _
|
|
from odoo.tools import format_date
|
|
|
|
|
|
class BaseDocumentLayout(models.TransientModel):
|
|
_inherit = 'base.document.layout'
|
|
|
|
@api.model
|
|
def _default_report_footer(self):
|
|
# OVERRIDE web/models/base_document_layout
|
|
if self.env.company.external_report_layout_id == self.env.ref('l10n_din5008.external_layout_din5008'):
|
|
company = self.env.company
|
|
# Company VAT should not be present in this footer, as it is displayed elsewhere in the DIN5008 layout
|
|
footer_fields = [field for field in [company.phone, company.email, company.website] if isinstance(field, str) and len(field) > 0]
|
|
return Markup('<br>').join(footer_fields)
|
|
return super()._default_report_footer()
|
|
|
|
@api.model
|
|
def _default_company_details(self):
|
|
# OVERRIDE web/models/base_document_layout
|
|
default_company_details = super()._default_company_details()
|
|
if self.env.company.external_report_layout_id == self.env.ref('l10n_din5008.external_layout_din5008'):
|
|
# In order to respect the strict formatting of DIN5008, we need to remove empty lines from the address
|
|
return re.sub(r'(( )*<br>( )*\n)+', r'<br>\n', default_company_details)
|
|
return default_company_details
|
|
|
|
report_footer = fields.Html(default=_default_report_footer)
|
|
company_details = fields.Html(default=_default_company_details)
|
|
street = fields.Char(related='company_id.street', readonly=True)
|
|
street2 = fields.Char(related='company_id.street2', readonly=True)
|
|
zip = fields.Char(related='company_id.zip', readonly=True)
|
|
city = fields.Char(related='company_id.city', readonly=True)
|
|
company_registry = fields.Char(related='company_id.company_registry', readonly=True)
|
|
bank_ids = fields.One2many(related='company_id.partner_id.bank_ids', readonly=True)
|
|
account_fiscal_country_id = fields.Many2one(related='company_id.account_fiscal_country_id', readonly=True)
|
|
l10n_din5008_template_data = fields.Binary(compute='_compute_l10n_din5008_template_data')
|
|
l10n_din5008_document_title = fields.Char(compute='_compute_l10n_din5008_document_title')
|
|
|
|
def _compute_l10n_din5008_template_data(self):
|
|
self.l10n_din5008_template_data = [
|
|
(_("Invoice No."), 'INV/2021/12345'),
|
|
(_("Invoice Date"), format_date(self.env, fields.Date.today())),
|
|
(_("Due Date"), format_date(self.env, fields.Date.add(fields.Date.today(), days=7))),
|
|
(_("Reference"), 'SO/2021/45678'),
|
|
]
|
|
|
|
def _compute_l10n_din5008_document_title(self):
|
|
self.l10n_din5008_document_title = _('Invoice')
|