Merge PR #299 into 18.0

Signed-off-by alexis-via
This commit is contained in:
OCA-git-bot
2025-02-11 09:49:05 +00:00
3 changed files with 43 additions and 15 deletions

View File

@@ -1,7 +1,3 @@
[checklog-odoo] [checklog-odoo]
ignore= ignore=
<<<<<<< before updating
WARNING.* 0 failed, 0 error\(s\).*
=======
WARNING.* 0 failed, 0 error\(s\).* WARNING.* 0 failed, 0 error\(s\).*
>>>>>>> after updating

View File

@@ -9,27 +9,56 @@ from odoo.exceptions import ValidationError
class ProductTemplate(models.Model): class ProductTemplate(models.Model):
_inherit = "product.template" _inherit = "product.template"
intrastat_type = fields.Selection(
[
("product", "Product"),
("service", "Service"),
],
compute="_compute_intrastat_type",
store=True,
precompute=True,
help="Type of product used for the intrastat declarations.",
)
is_accessory_cost = fields.Boolean( is_accessory_cost = fields.Boolean(
compute="_compute_is_accessory_cost",
store=True,
precompute=True,
readonly=False,
help="Activate this option for shipping costs, packaging " help="Activate this option for shipping costs, packaging "
"costs and all services related to the sale of products. " "costs and all services related to the sale of products. "
"This option is used for Intrastat reports.", "This option is used for Intrastat reports.",
) )
@api.constrains("type", "is_accessory_cost") @api.depends("type", "combo_ids.combo_item_ids.product_id.type")
def _compute_intrastat_type(self):
for this in self:
intrastat_type = "service"
if this.type == "consu":
intrastat_type = "product"
elif this.type == "combo":
for combo in this.combo_ids:
for item in combo.combo_item_ids:
if item.product_id.type == "consu":
intrastat_type = "product"
break
this.intrastat_type = intrastat_type
@api.depends("intrastat_type")
def _compute_is_accessory_cost(self):
for this in self:
if this.intrastat_type != "service":
this.is_accessory_cost = False
@api.constrains("intrastat_type", "is_accessory_cost")
def _check_accessory_cost(self): def _check_accessory_cost(self):
for this in self: for this in self:
if this.is_accessory_cost and this.type != "service": if this.is_accessory_cost and this.intrastat_type != "service":
raise ValidationError( raise ValidationError(
_( _(
"The option 'Is accessory cost?' should only be " "The option 'Is accessory cost?' can only be "
"activated on 'Service' products. You have activated " "activated on 'Service' products. You have activated "
"this option for the product '%(product_name)s' which is " "this option for the product '%(product_name)s' which is "
"configured with type '%(product_type)s'." "not a service product.",
product_name=this.display_name,
) )
% {
"product_name": this.display_name,
"product_type": this._fields["type"].convert_to_export(
this.type, this
),
}
) )

View File

@@ -10,10 +10,13 @@
<field name="model">product.template</field> <field name="model">product.template</field>
<field name="inherit_id" ref="account.product_template_form_view" /> <field name="inherit_id" ref="account.product_template_form_view" />
<field name="arch" type="xml"> <field name="arch" type="xml">
<group name="group_general" position="inside">
<field name="intrastat_type" invisible="1" />
</group>
<group name="accounting" position="inside"> <group name="accounting" position="inside">
<group string="Intrastat" name="intrastat"> <group string="Intrastat" name="intrastat">
<!-- If you need this field, inherit this view in a <!-- If you need this field, inherit this view in a
localisation module to set invisible="type != 'service'" --> localisation module to set invisible="intrastat_type != 'service'" -->
<field name="is_accessory_cost" invisible="1" /> <field name="is_accessory_cost" invisible="1" />
</group> </group>
</group> </group>