[MIG] intrastat_product_type from v12 to v14

This commit is contained in:
Alexis de Lattre
2023-08-31 11:00:02 +02:00
parent 54bc3d8af8
commit 0331cc8eda
5 changed files with 21 additions and 50 deletions

View File

@@ -1,4 +1 @@
# -*- coding: utf-8 -*-
from . import intrastat_product_type from . import intrastat_product_type
from .post_install import set_intrastat_type_on_products

View File

@@ -4,7 +4,7 @@
{ {
'name': 'Intrastat Product Type', 'name': 'Intrastat Product Type',
'version': '12.0.1.0.0', 'version': '14.0.1.0.0',
'category': 'Accounting', 'category': 'Accounting',
'license': 'AGPL-3', 'license': 'AGPL-3',
'summary': 'Adds a special field Intrastat Type on Products', 'summary': 'Adds a special field Intrastat Type on Products',
@@ -19,9 +19,8 @@ This module adds a field *Intrastat Type* on the Product Form with 2 possible op
This module has been written by Alexis de Lattre from Akretion <alexis.delattre@akretion.com>. This module has been written by Alexis de Lattre from Akretion <alexis.delattre@akretion.com>.
""", """,
'author': 'Akretion', 'author': 'Akretion',
'website': 'http://www.akretion.com', 'website': 'https://github.com/akretion/odoo-usability',
'depends': ['intrastat_product', 'l10n_fr_intrastat_service'], 'depends': ['intrastat_product', 'l10n_fr_intrastat_service'],
'data': ['product_view.xml'], 'data': ['product_view.xml'],
'post_init_hook': 'set_intrastat_type_on_products', 'installable': True,
'installable': False,
} }

View File

@@ -1,5 +1,4 @@
# -*- coding: utf-8 -*- # Copyright 2016-2023 Akretion (http://www.akretion.com)
# Copyright 2016-2019 Akretion (http://www.akretion.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
# @author Alexis de Lattre <alexis.delattre@akretion.com> # @author Alexis de Lattre <alexis.delattre@akretion.com>
@@ -14,50 +13,36 @@ class ProductTemplate(models.Model):
intrastat_type = fields.Selection([ intrastat_type = fields.Selection([
('product', 'Product'), ('product', 'Product'),
('service', 'Service'), ('service', 'Service'),
], string='Intrastat Type', default='product', required=True, ],
compute='_compute_intrastat_type', readonly=False, store=True,
required=True, string='Intrastat Type',
help="Type of product used for the intrastat declarations. " help="Type of product used for the intrastat declarations. "
"For example, you can configure a product with " "For example, you can configure a product with "
"'Product Type' = 'Consumable' and 'Intrastat Type' = 'Service'.") "'Product Type' = 'Consumable' and 'Intrastat Type' = 'Service'.")
@api.multi
@api.constrains('type', 'intrastat_type') @api.constrains('type', 'intrastat_type')
def check_intrastat_type(self): def check_intrastat_type(self):
for pt in self: for pt in self:
if pt.intrastat_type == 'product' and pt.type == 'service': if pt.intrastat_type == 'product' and pt.type == 'service':
raise ValidationError(_( raise ValidationError(_(
"On the product %s, you cannot set Product Type to " "On the product '%s', you cannot set Product Type to "
"'Service' and Intrastat Type to 'Product'.") % pt.name) "'Service' and Intrastat Type to 'Product'.")
% pt.display_name)
if pt.intrastat_type == 'service' and pt.type == 'product': if pt.intrastat_type == 'service' and pt.type == 'product':
raise ValidationError(_( raise ValidationError(_(
"On the product %s, you cannot set Intrastat Type to " "On the product '%s', you cannot set Intrastat Type to "
"'Service' and Product Type to 'Stockable product' " "'Service' and Product Type to 'Stockable product' "
"(but you can set Product Type to 'Consumable' or " "(but you can set Product Type to 'Consumable' or "
"'Service').") % pt.name) "'Service').") % pt.display_name)
@api.onchange('type') @api.depends('type')
def intrastat_type_onchange(self): def _compute_intrastat_type(self):
if self.type in ('product', 'consu'): for pt in self:
self.intrastat_type = 'product' if pt.type in ('product', 'consu'):
elif self.type == 'service': intrastat_type = 'product'
self.intrastat_type = 'service' else:
intrastat_type = 'service'
@api.model pt.intrastat_type = intrastat_type
def create(self, vals):
if vals.get('type'):
if not vals.get('intrastat_type'):
if vals['type'] in ('product', 'consu'):
vals['intrastat_type'] = 'product'
elif vals['type'] == 'service':
vals['intrastat_type'] = 'service'
elif (
vals.get('intrastat_type') == 'product' and
vals['type'] == 'service'):
# usefull because intrastat_type = 'product' by default and
# wizards in other modules that don't depend on this module
# (e.g. sale_rental) may create a product with only
# {'type': 'service'} and no 'intrastat_type'
vals['intrastat_type'] = 'service'
return super(ProductTemplate, self).create(vals)
class L10nFrIntrastatServiceDeclaration(models.Model): class L10nFrIntrastatServiceDeclaration(models.Model):

View File

@@ -1,10 +0,0 @@
# -*- coding: utf-8 -*-
# Copyright 2016-2019 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
def set_intrastat_type_on_products(cr, registry):
cr.execute(
"UPDATE product_template SET intrastat_type='service' "
"WHERE type='service'")
return

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- <!--
Copyright 2016-2019 Akretion (http://www.akretion.com/) Copyright 2016-2023 Akretion France (http://www.akretion.com/)
@author Alexis de Lattre <alexis.delattre@akretion.com> @author Alexis de Lattre <alexis.delattre@akretion.com>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
--> -->