1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/account_intrastat/models/product.py
2024-12-10 09:04:09 +07:00

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