forked from Mapan/odoo17e
76 lines
3.9 KiB
Python
76 lines
3.9 KiB
Python
from odoo import models, fields, _
|
|
from odoo.tools import format_date
|
|
|
|
|
|
class SaleOrder(models.Model):
|
|
_inherit = 'sale.order'
|
|
|
|
l10n_din5008_template_data = fields.Binary(compute='_compute_l10n_din5008_template_data')
|
|
l10n_din5008_document_title = fields.Char(compute='_compute_l10n_din5008_document_title')
|
|
l10n_din5008_addresses = fields.Binary(compute='_compute_l10n_din5008_addresses', exportable=False)
|
|
|
|
def _compute_l10n_din5008_template_data(self):
|
|
for record in self:
|
|
record.l10n_din5008_template_data = data = []
|
|
if record.state in ('draft', 'sent'):
|
|
if record.name:
|
|
data.append((_("Quotation No."), record.name))
|
|
if record.date_order:
|
|
data.append((_("Quotation Date"), format_date(self.env, record.date_order)))
|
|
if record.validity_date:
|
|
data.append((_("Expiration"), format_date(self.env, record.validity_date)))
|
|
else:
|
|
if record.name:
|
|
data.append((_("Order No."), record.name))
|
|
if record.date_order:
|
|
data.append((_("Order Date"), format_date(self.env, record.date_order)))
|
|
if record.client_order_ref:
|
|
data.append((_('Customer Reference'), record.client_order_ref))
|
|
if record.user_id:
|
|
data.append((_("Salesperson"), record.user_id.name))
|
|
if 'incoterm' in record._fields and record.incoterm:
|
|
data.append((_("Incoterm"), record.incoterm.code))
|
|
|
|
def _compute_l10n_din5008_document_title(self):
|
|
for record in self:
|
|
if self._context.get('proforma'):
|
|
record.l10n_din5008_document_title = _('Pro Forma Invoice')
|
|
elif record.state in ('draft', 'sent'):
|
|
record.l10n_din5008_document_title = _('Quotation')
|
|
else:
|
|
record.l10n_din5008_document_title = _('Sales Order')
|
|
|
|
def _compute_l10n_din5008_addresses(self):
|
|
for record in self:
|
|
record.l10n_din5008_addresses = data = []
|
|
commercial_partner = record.partner_id.commercial_partner_id
|
|
delivery_partner = record.partner_shipping_id
|
|
invoice_partner = record.partner_invoice_id
|
|
|
|
different_partner_count = len((commercial_partner | delivery_partner | invoice_partner).ids)
|
|
# To avoid repetition in the address block.
|
|
if different_partner_count <= 1:
|
|
continue
|
|
|
|
if self._context.get('proforma'):
|
|
if delivery_partner and delivery_partner != commercial_partner:
|
|
data.append((_("Shipping Address:"), delivery_partner))
|
|
if invoice_partner and invoice_partner != commercial_partner:
|
|
# if the proforma invoice has an invoice address different from the company address,
|
|
# the company address will have its separate address block.
|
|
# we will not display the VAT number in the main address block, but in the beneficiary block
|
|
data.append((_("Beneficiary:"), commercial_partner, {'show_tax_id': True}))
|
|
else:
|
|
if invoice_partner != delivery_partner and delivery_partner != commercial_partner:
|
|
data.append((_("Shipping Address:"), delivery_partner))
|
|
if invoice_partner != delivery_partner and invoice_partner != commercial_partner:
|
|
data.append((_("Invoicing Address:"), invoice_partner))
|
|
if invoice_partner == delivery_partner and invoice_partner != commercial_partner:
|
|
data.append((_("Invoicing and Shipping Address:"), invoice_partner))
|
|
|
|
def check_field_access_rights(self, operation, field_names):
|
|
field_names = super().check_field_access_rights(operation, field_names)
|
|
return [field_name for field_name in field_names if field_name not in {
|
|
'l10n_din5008_addresses',
|
|
}]
|