forked from Mapan/odoo17e
78 lines
3.7 KiB
Python
78 lines
3.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import api, fields, models
|
|
from odoo.addons.account_intrastat.models.account_intrastat_code import SUPPLEMENTARY_UNITS
|
|
|
|
|
|
class ProductTemplate(models.Model):
|
|
_inherit = 'product.template'
|
|
|
|
intrastat_code_id = fields.Many2one(
|
|
'account.intrastat.code',
|
|
compute='_compute_intrastat_values',
|
|
inverse='_inverse_intrastat_code_id',
|
|
string='Commodity Code',
|
|
readonly=False,
|
|
)
|
|
intrastat_supplementary_unit = fields.Selection(selection=SUPPLEMENTARY_UNITS, compute='_compute_intrastat_values')
|
|
intrastat_supplementary_unit_amount = fields.Float(
|
|
compute='_compute_intrastat_values',
|
|
inverse='_inverse_intrastat_supplementary_unit_amount',
|
|
help='The number of supplementary units per product quantity.',
|
|
readonly=False,
|
|
)
|
|
intrastat_origin_country_id = fields.Many2one(
|
|
'res.country',
|
|
compute='_compute_intrastat_values',
|
|
inverse='_inverse_intrastat_origin_country_id',
|
|
string='Country of Origin',
|
|
readonly=False,
|
|
)
|
|
|
|
@api.depends('product_variant_ids')
|
|
def _compute_intrastat_values(self):
|
|
for product_template in self:
|
|
variant = product_template.product_variant_ids[:1]
|
|
product_template.intrastat_code_id = variant.intrastat_code_id
|
|
product_template.intrastat_supplementary_unit = variant.intrastat_code_id.supplementary_unit
|
|
product_template.intrastat_supplementary_unit_amount = variant.intrastat_supplementary_unit_amount
|
|
product_template.intrastat_origin_country_id = variant.intrastat_origin_country_id
|
|
|
|
def _inverse_intrastat_code_id(self):
|
|
for product_template in self:
|
|
product_template.product_variant_ids.intrastat_code_id = product_template.intrastat_code_id
|
|
|
|
def _inverse_intrastat_supplementary_unit_amount(self):
|
|
for product_template in self:
|
|
product_template.product_variant_ids.intrastat_supplementary_unit_amount = product_template.intrastat_supplementary_unit_amount
|
|
|
|
def _inverse_intrastat_origin_country_id(self):
|
|
for product_template in self:
|
|
product_template.product_variant_ids.intrastat_origin_country_id = product_template.intrastat_origin_country_id
|
|
|
|
def _get_related_fields_variant_template(self):
|
|
fields = super()._get_related_fields_variant_template()
|
|
fields += ['intrastat_code_id', 'intrastat_origin_country_id', 'intrastat_supplementary_unit', 'intrastat_supplementary_unit_amount']
|
|
return fields
|
|
|
|
class ProductProduct(models.Model):
|
|
_inherit = 'product.product'
|
|
|
|
intrastat_code_id = fields.Many2one(comodel_name='account.intrastat.code', string='Commodity code', domain="[('type', '=', 'commodity')]")
|
|
# The supplementary unit of the current commodity code
|
|
intrastat_supplementary_unit = fields.Selection(related='intrastat_code_id.supplementary_unit')
|
|
# The ratio of product to the number of supplementary units
|
|
intrastat_supplementary_unit_amount = fields.Float(
|
|
string='Supplementary Units',
|
|
help='The number of supplementary units per product quantity.',
|
|
)
|
|
intrastat_origin_country_id = fields.Many2one('res.country', string='Country of Origin')
|
|
|
|
@api.depends('intrastat_supplementary_unit')
|
|
def _compute_intrastat_supplementary_unit_amount(self):
|
|
""" In the case when the product has no supplementary unit (i.e. we are using weight) the supplementary unit amount is set to 0 """
|
|
for product in self:
|
|
if not product.intrastat_supplementary_unit:
|
|
product.intrastat_supplementary_unit_amount = 0
|