From c43574f2e05777df18944b8508b91aa035f4ac67 Mon Sep 17 00:00:00 2001 From: Victor Champonnois Date: Tue, 1 Nov 2022 12:19:34 +0100 Subject: [PATCH 01/10] [REF] split beesdoo_product into: - product_ingredients. - product_hazard. - sale_product_deposit. - product_expiration. - product_sale_limit_date. - product_scale_label. - product_barcode_generator. - beesdoo_product_label - product_label_print_request --- product_barcode_generator/__init__.py | 5 ++ product_barcode_generator/__manifest__.py | 29 ++++++++++ .../data/barcode_rule.xml | 13 +++++ .../data/product_sequence.xml | 14 +++++ product_barcode_generator/models/__init__.py | 1 + .../models/product_template.py | 41 ++++++++++++++ .../readme/CONTRIBUTORS.rst | 3 + .../readme/DESCRIPTION.rst | 1 + product_barcode_generator/readme/ROADMAP.rst | 1 + product_barcode_generator/rename_beesdoo.py | 55 +++++++++++++++++++ .../views/product_template_view.xml | 22 ++++++++ .../odoo/addons/product_barcode_generator | 1 + setup/product_barcode_generator/setup.py | 6 ++ 13 files changed, 192 insertions(+) create mode 100644 product_barcode_generator/__init__.py create mode 100644 product_barcode_generator/__manifest__.py create mode 100644 product_barcode_generator/data/barcode_rule.xml create mode 100644 product_barcode_generator/data/product_sequence.xml create mode 100644 product_barcode_generator/models/__init__.py create mode 100644 product_barcode_generator/models/product_template.py create mode 100644 product_barcode_generator/readme/CONTRIBUTORS.rst create mode 100644 product_barcode_generator/readme/DESCRIPTION.rst create mode 100644 product_barcode_generator/readme/ROADMAP.rst create mode 100644 product_barcode_generator/rename_beesdoo.py create mode 100644 product_barcode_generator/views/product_template_view.xml create mode 120000 setup/product_barcode_generator/odoo/addons/product_barcode_generator create mode 100644 setup/product_barcode_generator/setup.py diff --git a/product_barcode_generator/__init__.py b/product_barcode_generator/__init__.py new file mode 100644 index 000000000..1f7b27c28 --- /dev/null +++ b/product_barcode_generator/__init__.py @@ -0,0 +1,5 @@ +# SPDX-FileCopyrightText: 2022 Coop IT Easy SC +# +# SPDX-License-Identifier: AGPL-3.0-or-later +from . import models +from .rename_beesdoo import rename_beesdoo diff --git a/product_barcode_generator/__manifest__.py b/product_barcode_generator/__manifest__.py new file mode 100644 index 000000000..eaea61873 --- /dev/null +++ b/product_barcode_generator/__manifest__.py @@ -0,0 +1,29 @@ +# SPDX-FileCopyrightText: 2022 Coop IT Easy SC +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +{ + "name": "Product Barcode Generator", + "summary": """ + Product Barcode Generator""", + "version": "12.0.1.0.0", + "category": "Product", + "website": "https://github.com/beescoop/Obeesdoo", + "author": "Coop IT Easy SC", + "maintainers": ["victor-champonnois"], + "license": "AGPL-3", + "application": False, + "depends": [ + "product", + "pos_price_to_weight", + ], + "excludes": [], + "data": [ + "views/product_template_view.xml", + "data/product_sequence.xml", + "data/barcode_rule.xml", + ], + "demo": [], + "qweb": [], + "pre_init_hook": "rename_beesdoo", +} diff --git a/product_barcode_generator/data/barcode_rule.xml b/product_barcode_generator/data/barcode_rule.xml new file mode 100644 index 000000000..9fa4112c2 --- /dev/null +++ b/product_barcode_generator/data/barcode_rule.xml @@ -0,0 +1,13 @@ + + + + + Product Barcode + 1 + product + 043 + 45 + ean13 + + + diff --git a/product_barcode_generator/data/product_sequence.xml b/product_barcode_generator/data/product_sequence.xml new file mode 100644 index 000000000..03cdaa561 --- /dev/null +++ b/product_barcode_generator/data/product_sequence.xml @@ -0,0 +1,14 @@ + + + + + Internal reference + product.internal.code + + 5 + + 1 + + + + diff --git a/product_barcode_generator/models/__init__.py b/product_barcode_generator/models/__init__.py new file mode 100644 index 000000000..e8fa8f6bf --- /dev/null +++ b/product_barcode_generator/models/__init__.py @@ -0,0 +1 @@ +from . import product_template diff --git a/product_barcode_generator/models/product_template.py b/product_barcode_generator/models/product_template.py new file mode 100644 index 000000000..70d839ca5 --- /dev/null +++ b/product_barcode_generator/models/product_template.py @@ -0,0 +1,41 @@ +# Copyright 2020 Coop IT Easy SCRL fs +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +import logging +import uuid + +from odoo import api, models + +_logger = logging.getLogger(__name__) + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + @api.multi + def generate_barcode(self): + self.ensure_one() + if self.to_weight: + seq_internal_code = self.env.ref( + "product_barcode_generator.seq_ean_product_internal_ref" + ) + bc = "" + if not self.default_code: + rule = self.env.ref("pos_price_to_weight.rule_price_to_weight") + default_code = seq_internal_code.next_by_id() + while self.search_count([("default_code", "=", default_code)]) > 1: + default_code = seq_internal_code.next_by_id() + self.default_code = default_code + ean = "02" + self.default_code[0:5] + "000000" + bc = ean[0:12] + str(self.env["barcode.nomenclature"].ean_checksum(ean)) + else: + rule = self.env.ref("product_barcode_generator.product_barcode_rule") + size = 13 - len(rule.pattern) + ean = rule.pattern + str(uuid.uuid4().fields[-1])[:size] + bc = ean[0:12] + str(self.env["barcode.nomenclature"].ean_checksum(ean)) + # Make sure there is no other active member with the same barcode + while self.search_count([("barcode", "=", bc)]) > 1: + ean = rule.pattern + str(uuid.uuid4().fields[-1])[:size] + bc = ean[0:12] + str(self.env["barcode.nomenclature"].ean_checksum(ean)) + _logger.info("barcode :", bc) + self.barcode = bc diff --git a/product_barcode_generator/readme/CONTRIBUTORS.rst b/product_barcode_generator/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..146abeb90 --- /dev/null +++ b/product_barcode_generator/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `Coop IT Easy SC `_: + + * Victor Champonnois diff --git a/product_barcode_generator/readme/DESCRIPTION.rst b/product_barcode_generator/readme/DESCRIPTION.rst new file mode 100644 index 000000000..706725808 --- /dev/null +++ b/product_barcode_generator/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Product Barcode Generator diff --git a/product_barcode_generator/readme/ROADMAP.rst b/product_barcode_generator/readme/ROADMAP.rst new file mode 100644 index 000000000..8ae70d876 --- /dev/null +++ b/product_barcode_generator/readme/ROADMAP.rst @@ -0,0 +1 @@ +migrate to https://github.com/OCA/stock-logistics-barcode diff --git a/product_barcode_generator/rename_beesdoo.py b/product_barcode_generator/rename_beesdoo.py new file mode 100644 index 000000000..df03a53e5 --- /dev/null +++ b/product_barcode_generator/rename_beesdoo.py @@ -0,0 +1,55 @@ +# Copyright 2022 Coop IT Easy SC +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +"""This module was previously beesdoo_shift before it was moved to the OCA. +beesdoo_shift is presently an empty module that depends on this module. When +this module is installed, it should convert all data from the beesdoo_shift +module to be useable by this module. +""" + +import logging + +_logger = logging.getLogger(__name__) + +MODELS_TO_RENAME = {} + +XMLIDS_TO_RENAME = [ + ( + "beesdoo_product.seq_ean_product_internal_ref", + "product_barcode_generator.seq_ean_product_internal_ref", + ), +] +OLD_MODULE_NAME = "beesdoo_product" +NEW_MODULE_NAME = "beesdoo_product_label" + + +def model_to_table(name): + return name.replace(".", "_") + + +def rename_beesdoo(cr): + cr.execute( + "SELECT id FROM ir_module_module " + "WHERE name=%s and state IN ('installed', 'to upgrade')", + (OLD_MODULE_NAME,), + ) + if not cr.fetchone(): + return + + from openupgradelib import openupgrade + + for origin, new in MODELS_TO_RENAME.items(): + table_origin = model_to_table(origin) + table_new = model_to_table(new) + if openupgrade.table_exists(cr, table_origin) and not openupgrade.table_exists( + cr, table_new + ): + _logger.info("renaming table {} to {}".format(table_origin, table_new)) + openupgrade.rename_tables(cr, [(table_origin, table_new)]) + + _logger.info("renaming model {} to {}".format(origin, new)) + openupgrade.rename_models(cr, [(origin, new)]) + + _logger.info("renaming xmlids") + openupgrade.rename_xmlids(cr, XMLIDS_TO_RENAME) + # openupgrade.delete_records_safely_by_xml_id(env, xml_ids, diff --git a/product_barcode_generator/views/product_template_view.xml b/product_barcode_generator/views/product_template_view.xml new file mode 100644 index 000000000..fd6abb548 --- /dev/null +++ b/product_barcode_generator/views/product_template_view.xml @@ -0,0 +1,22 @@ + + + + product_view_form + product.template + + + +