From 6cce1e2c9b8662338fac9c3f1b8f4090eff88f1e Mon Sep 17 00:00:00 2001 From: ppyczko Date: Mon, 30 Jun 2025 12:40:35 +0200 Subject: [PATCH 1/3] [18.0][ADD] product_category_tag: New module product_category_tag --- product_category_tag/README.rst | 97 ++++ product_category_tag/__init__.py | 4 + product_category_tag/__manifest__.py | 20 + product_category_tag/i18n/es.po | 90 ++++ .../i18n/product_category_tag.pot | 88 ++++ product_category_tag/models/__init__.py | 5 + .../models/product_category.py | 16 + .../models/product_category_tag.py | 22 + product_category_tag/pyproject.toml | 3 + product_category_tag/readme/CONTRIBUTORS.md | 2 + product_category_tag/readme/DESCRIPTION.md | 1 + product_category_tag/readme/USAGE.md | 3 + .../security/ir.model.access.csv | 2 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 441 ++++++++++++++++++ .../views/product_category_tag_views.xml | 58 +++ .../views/product_category_views.xml | 58 +++ 17 files changed, 910 insertions(+) create mode 100644 product_category_tag/README.rst create mode 100644 product_category_tag/__init__.py create mode 100644 product_category_tag/__manifest__.py create mode 100644 product_category_tag/i18n/es.po create mode 100644 product_category_tag/i18n/product_category_tag.pot create mode 100644 product_category_tag/models/__init__.py create mode 100644 product_category_tag/models/product_category.py create mode 100644 product_category_tag/models/product_category_tag.py create mode 100644 product_category_tag/pyproject.toml create mode 100644 product_category_tag/readme/CONTRIBUTORS.md create mode 100644 product_category_tag/readme/DESCRIPTION.md create mode 100644 product_category_tag/readme/USAGE.md create mode 100644 product_category_tag/security/ir.model.access.csv create mode 100644 product_category_tag/static/description/icon.png create mode 100644 product_category_tag/static/description/index.html create mode 100644 product_category_tag/views/product_category_tag_views.xml create mode 100644 product_category_tag/views/product_category_views.xml diff --git a/product_category_tag/README.rst b/product_category_tag/README.rst new file mode 100644 index 00000000000..2faebd4bfed --- /dev/null +++ b/product_category_tag/README.rst @@ -0,0 +1,97 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +==================== +Product Category Tag +==================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:92a41650b8c9a8edf39f61cedb5a9f33c3bf628cb24b58b85c7e99ec6d1eaac7 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--attribute-lightgray.png?logo=github + :target: https://github.com/OCA/product-attribute/tree/18.0/product_category_tag + :alt: OCA/product-attribute +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/product-attribute-18-0/product-attribute-18-0-product_category_tag + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/product-attribute&target_branch=18.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows you to tag product categories with custom tags. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +- Navigate to Inventoy > Configuration > Product Categories. +- Open the product category you want to tag. +- In the "Tags" tab, you can add or remove tags for that category. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* APSL-Nagarro + +Contributors +------------ + +`APSL-Nagarro `__: + +- Patryk Pyczko + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-ppyczko| image:: https://github.com/ppyczko.png?size=40px + :target: https://github.com/ppyczko + :alt: ppyczko + +Current `maintainer `__: + +|maintainer-ppyczko| + +This module is part of the `OCA/product-attribute `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_category_tag/__init__.py b/product_category_tag/__init__.py new file mode 100644 index 00000000000..0b8460dfec6 --- /dev/null +++ b/product_category_tag/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2025 Patryk Pyczko (APSL-Nagarro) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models diff --git a/product_category_tag/__manifest__.py b/product_category_tag/__manifest__.py new file mode 100644 index 00000000000..8f706412761 --- /dev/null +++ b/product_category_tag/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2025 Patryk Pyczko (APSL-Nagarro) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "Product Category Tag", + "version": "18.0.1.0.0", + "summary": "Add tags to product categories", + "website": "https://github.com/OCA/product-attribute", + "author": "APSL-Nagarro, Odoo Community Association (OCA)", + "maintainers": ["ppyczko"], + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": ["product", "account", "stock"], + "data": [ + "security/ir.model.access.csv", + "views/product_category_tag_views.xml", + "views/product_category_views.xml", + ], +} diff --git a/product_category_tag/i18n/es.po b/product_category_tag/i18n/es.po new file mode 100644 index 00000000000..345a21c1e4e --- /dev/null +++ b/product_category_tag/i18n/es.po @@ -0,0 +1,90 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_category_tag +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-06-30 11:01+0000\n" +"PO-Revision-Date: 2025-06-30 11:01+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: product_category_tag +#: model:ir.actions.act_window,name:product_category_tag.action_product_category_tag +#: model:ir.ui.menu,name:product_category_tag.menu_product_category_tag_root +#: model_terms:ir.ui.view,arch_db:product_category_tag.product_category_form_view +msgid "Category Tags" +msgstr "Etiquetas de categoría" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__color +msgid "Color" +msgstr "Color" + +#. module: product_category_tag +#: model_terms:ir.actions.act_window,help:product_category_tag.action_product_category_tag +msgid "Create new tags for your product categories." +msgstr "Crea nuevas etiquetas para tus categorías de producto." + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__id +msgid "ID" +msgstr "ID" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__name +msgid "Name" +msgstr "Nombre" + +#. module: product_category_tag +#: model:ir.model,name:product_category_tag.model_product_category +msgid "Product Category" +msgstr "Categoría de producto" + +#. module: product_category_tag +#: model:ir.model,name:product_category_tag.model_product_category_tag +msgid "Product Category Tag" +msgstr "Etiqueta de categoría de producto" + +#. module: product_category_tag +#: model:ir.model.constraint,message:product_category_tag.constraint_product_category_tag_category_tag_name_uniq +msgid "Tag name already exists!" +msgstr "¡El nombre de la etiqueta ya existe!" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category__tag_ids +#: model_terms:ir.ui.view,arch_db:product_category_tag.product_category_search_view +#: model_terms:ir.ui.view,arch_db:product_category_tag.view_product_category_tag_form +msgid "Tags" +msgstr "Etiquetas" diff --git a/product_category_tag/i18n/product_category_tag.pot b/product_category_tag/i18n/product_category_tag.pot new file mode 100644 index 00000000000..f522020c19d --- /dev/null +++ b/product_category_tag/i18n/product_category_tag.pot @@ -0,0 +1,88 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_category_tag +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: product_category_tag +#: model:ir.actions.act_window,name:product_category_tag.action_product_category_tag +#: model:ir.ui.menu,name:product_category_tag.menu_product_category_tag_root +#: model_terms:ir.ui.view,arch_db:product_category_tag.product_category_form_view +msgid "Category Tags" +msgstr "" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__color +msgid "Color" +msgstr "" + +#. module: product_category_tag +#: model_terms:ir.actions.act_window,help:product_category_tag.action_product_category_tag +msgid "Create new tags for your product categories." +msgstr "" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__create_uid +msgid "Created by" +msgstr "" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__create_date +msgid "Created on" +msgstr "" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__display_name +msgid "Display Name" +msgstr "" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__id +msgid "ID" +msgstr "" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__write_date +msgid "Last Updated on" +msgstr "" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__name +msgid "Name" +msgstr "" + +#. module: product_category_tag +#: model:ir.model,name:product_category_tag.model_product_category +msgid "Product Category" +msgstr "" + +#. module: product_category_tag +#: model:ir.model,name:product_category_tag.model_product_category_tag +msgid "Product Category Tag" +msgstr "" + +#. module: product_category_tag +#: model:ir.model.constraint,message:product_category_tag.constraint_product_category_tag_category_tag_name_uniq +msgid "Tag name already exists!" +msgstr "" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category__tag_ids +#: model_terms:ir.ui.view,arch_db:product_category_tag.product_category_search_view +#: model_terms:ir.ui.view,arch_db:product_category_tag.view_product_category_tag_form +msgid "Tags" +msgstr "" diff --git a/product_category_tag/models/__init__.py b/product_category_tag/models/__init__.py new file mode 100644 index 00000000000..6f6366bb5fb --- /dev/null +++ b/product_category_tag/models/__init__.py @@ -0,0 +1,5 @@ +# Copyright 2025 Patryk Pyczko (APSL-Nagarro) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import product_category_tag +from . import product_category diff --git a/product_category_tag/models/product_category.py b/product_category_tag/models/product_category.py new file mode 100644 index 00000000000..5cddd254f08 --- /dev/null +++ b/product_category_tag/models/product_category.py @@ -0,0 +1,16 @@ +# Copyright 2025 Patryk Pyczko (APSL-Nagarro) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ProductCategory(models.Model): + _inherit = "product.category" + + tag_ids = fields.Many2many( + comodel_name="product.category.tag", + relation="product_category_tag_rel", + column1="category_id", + column2="tag_id", + string="Tags", + ) diff --git a/product_category_tag/models/product_category_tag.py b/product_category_tag/models/product_category_tag.py new file mode 100644 index 00000000000..8a187a13317 --- /dev/null +++ b/product_category_tag/models/product_category_tag.py @@ -0,0 +1,22 @@ +# Copyright 2025 Patryk Pyczko (APSL-Nagarro) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from random import randint + +from odoo import fields, models + + +class ProductCategoryTag(models.Model): + _name = "product.category.tag" + _description = "Product Category Tag" + + name = fields.Char(required=True, translate=True) + + def _get_default_color(self): + return randint(1, 11) + + color = fields.Integer(default=lambda self: self._get_default_color()) + + _sql_constraints = [ + ("category_tag_name_uniq", "unique (name)", "Tag name already exists!"), + ] diff --git a/product_category_tag/pyproject.toml b/product_category_tag/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/product_category_tag/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/product_category_tag/readme/CONTRIBUTORS.md b/product_category_tag/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..082d126e6ce --- /dev/null +++ b/product_category_tag/readme/CONTRIBUTORS.md @@ -0,0 +1,2 @@ + [APSL-Nagarro](https://www.apsl.tech): + - Patryk Pyczko \<\> diff --git a/product_category_tag/readme/DESCRIPTION.md b/product_category_tag/readme/DESCRIPTION.md new file mode 100644 index 00000000000..96cea8b7f6b --- /dev/null +++ b/product_category_tag/readme/DESCRIPTION.md @@ -0,0 +1 @@ +This module allows you to tag product categories with custom tags. diff --git a/product_category_tag/readme/USAGE.md b/product_category_tag/readme/USAGE.md new file mode 100644 index 00000000000..48576484567 --- /dev/null +++ b/product_category_tag/readme/USAGE.md @@ -0,0 +1,3 @@ +- Navigate to Inventoy > Configuration > Product Categories. +- Open the product category you want to tag. +- In the "Tags" tab, you can add or remove tags for that category. diff --git a/product_category_tag/security/ir.model.access.csv b/product_category_tag/security/ir.model.access.csv new file mode 100644 index 00000000000..f001898ceb1 --- /dev/null +++ b/product_category_tag/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_product_category_tag,access_product_category_tag,model_product_category_tag,base.group_user,1,1,1,1 diff --git a/product_category_tag/static/description/icon.png b/product_category_tag/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/product_category_tag/static/description/index.html b/product_category_tag/static/description/index.html new file mode 100644 index 00000000000..dbea45fd993 --- /dev/null +++ b/product_category_tag/static/description/index.html @@ -0,0 +1,441 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + +
+

Product Category Tag

+ +

Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

+

This module allows you to tag product categories with custom tags.

+

Table of contents

+ +
+

Usage

+
    +
  • Navigate to Inventoy > Configuration > Product Categories.
  • +
  • Open the product category you want to tag.
  • +
  • In the “Tags” tab, you can add or remove tags for that category.
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • APSL-Nagarro
  • +
+
+
+

Contributors

+

APSL-Nagarro:

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

Current maintainer:

+

ppyczko

+

This module is part of the OCA/product-attribute project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+
+ + diff --git a/product_category_tag/views/product_category_tag_views.xml b/product_category_tag/views/product_category_tag_views.xml new file mode 100644 index 00000000000..99d87f8af08 --- /dev/null +++ b/product_category_tag/views/product_category_tag_views.xml @@ -0,0 +1,58 @@ + + + + + product.category.tag.list + product.category.tag + + + + + + + + + + product.category.tag.form + product.category.tag + +
+ +
+
+
+

+ +

+
+ + + + + +
+
+
+
+ + + Category Tags + product.category.tag + list,form + +

+ Create new tags for your product categories. +

+
+
+ + +
diff --git a/product_category_tag/views/product_category_views.xml b/product_category_tag/views/product_category_views.xml new file mode 100644 index 00000000000..4cf3d45beed --- /dev/null +++ b/product_category_tag/views/product_category_views.xml @@ -0,0 +1,58 @@ + + + + + product.category.list.inherit.tags + product.category + + + + + + + + + + product.category.form.inherit.tags + product.category + + + + + + + + + + + + product.category.search.inherit.tags + product.category + + + + + + + + + From 7a70d4c353a3bc7cbb141a557810439f1acbe410 Mon Sep 17 00:00:00 2001 From: mymage Date: Wed, 23 Jul 2025 09:51:04 +0000 Subject: [PATCH 2/3] Added translation using Weblate (Italian) --- product_category_tag/i18n/it.po | 91 +++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 product_category_tag/i18n/it.po diff --git a/product_category_tag/i18n/it.po b/product_category_tag/i18n/it.po new file mode 100644 index 00000000000..8d0ca04e547 --- /dev/null +++ b/product_category_tag/i18n/it.po @@ -0,0 +1,91 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_category_tag +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-07-23 14:25+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.10.4\n" + +#. module: product_category_tag +#: model:ir.actions.act_window,name:product_category_tag.action_product_category_tag +#: model:ir.ui.menu,name:product_category_tag.menu_product_category_tag_root +#: model_terms:ir.ui.view,arch_db:product_category_tag.product_category_form_view +msgid "Category Tags" +msgstr "Etichette categoria" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__color +msgid "Color" +msgstr "Colore" + +#. module: product_category_tag +#: model_terms:ir.actions.act_window,help:product_category_tag.action_product_category_tag +msgid "Create new tags for your product categories." +msgstr "Crea nuove etichette per le categorie prodotto." + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__id +msgid "ID" +msgstr "ID" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category_tag__name +msgid "Name" +msgstr "Nome" + +#. module: product_category_tag +#: model:ir.model,name:product_category_tag.model_product_category +msgid "Product Category" +msgstr "Categoria prodotto" + +#. module: product_category_tag +#: model:ir.model,name:product_category_tag.model_product_category_tag +msgid "Product Category Tag" +msgstr "Etichetta categoria prodotto" + +#. module: product_category_tag +#: model:ir.model.constraint,message:product_category_tag.constraint_product_category_tag_category_tag_name_uniq +msgid "Tag name already exists!" +msgstr "Il nome dell'etichetta esiste già!" + +#. module: product_category_tag +#: model:ir.model.fields,field_description:product_category_tag.field_product_category__tag_ids +#: model_terms:ir.ui.view,arch_db:product_category_tag.product_category_search_view +#: model_terms:ir.ui.view,arch_db:product_category_tag.view_product_category_tag_form +msgid "Tags" +msgstr "Etichette" From 3b4f51e3ca2c3414c8fc0956ef3835b2d89857d6 Mon Sep 17 00:00:00 2001 From: Ruchir Shukla Date: Tue, 30 Sep 2025 21:42:34 +0530 Subject: [PATCH 3/3] [MIG] product_category_tag: Migration to 19.0 --- product_category_tag/README.rst | 10 +++++----- product_category_tag/__manifest__.py | 2 +- product_category_tag/models/product_category_tag.py | 7 ++++--- product_category_tag/static/description/index.html | 6 +++--- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/product_category_tag/README.rst b/product_category_tag/README.rst index 2faebd4bfed..c3a9e2c84f7 100644 --- a/product_category_tag/README.rst +++ b/product_category_tag/README.rst @@ -21,13 +21,13 @@ Product Category Tag :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--attribute-lightgray.png?logo=github - :target: https://github.com/OCA/product-attribute/tree/18.0/product_category_tag + :target: https://github.com/OCA/product-attribute/tree/19.0/product_category_tag :alt: OCA/product-attribute .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/product-attribute-18-0/product-attribute-18-0-product_category_tag + :target: https://translation.odoo-community.org/projects/product-attribute-19-0/product-attribute-19-0-product_category_tag :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/product-attribute&target_branch=18.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/product-attribute&target_branch=19.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -52,7 +52,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -92,6 +92,6 @@ Current `maintainer `__: |maintainer-ppyczko| -This module is part of the `OCA/product-attribute `_ project on GitHub. +This module is part of the `OCA/product-attribute `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/product_category_tag/__manifest__.py b/product_category_tag/__manifest__.py index 8f706412761..486e8a0218a 100644 --- a/product_category_tag/__manifest__.py +++ b/product_category_tag/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Product Category Tag", - "version": "18.0.1.0.0", + "version": "19.0.1.0.0", "summary": "Add tags to product categories", "website": "https://github.com/OCA/product-attribute", "author": "APSL-Nagarro, Odoo Community Association (OCA)", diff --git a/product_category_tag/models/product_category_tag.py b/product_category_tag/models/product_category_tag.py index 8a187a13317..c2131f384e2 100644 --- a/product_category_tag/models/product_category_tag.py +++ b/product_category_tag/models/product_category_tag.py @@ -17,6 +17,7 @@ def _get_default_color(self): color = fields.Integer(default=lambda self: self._get_default_color()) - _sql_constraints = [ - ("category_tag_name_uniq", "unique (name)", "Tag name already exists!"), - ] + _category_tag_name_uniq = models.Constraint( + "unique (name)", + "Tag name already exists!", + ) diff --git a/product_category_tag/static/description/index.html b/product_category_tag/static/description/index.html index dbea45fd993..d6f50155ac9 100644 --- a/product_category_tag/static/description/index.html +++ b/product_category_tag/static/description/index.html @@ -374,7 +374,7 @@

Product Category Tag

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:92a41650b8c9a8edf39f61cedb5a9f33c3bf628cb24b58b85c7e99ec6d1eaac7 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/product-attribute Translate me on Weblate Try me on Runboat

This module allows you to tag product categories with custom tags.

Table of contents

@@ -402,7 +402,7 @@

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -431,7 +431,7 @@

Maintainers

promote its widespread use.

Current maintainer:

ppyczko

-

This module is part of the OCA/product-attribute project on GitHub.

+

This module is part of the OCA/product-attribute project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.