From 2c49daec40451fe4f5b551aaf5ae981ea588179b Mon Sep 17 00:00:00 2001 From: nobuQuartile Date: Thu, 16 Jul 2026 06:19:30 +0000 Subject: [PATCH 1/5] [ADD] product_engineering_info: Engineering tab and Product Group Code Introduce a module to consolidate spreadsheet-managed engineering data on products: an Engineering tab (Product Group Code, Successor P/N, BOM Link, Technical Notes, Compatible P/N), an Active Flag on the General Information tab, and a Product Group Code classification model. Includes ja.po. task-7003 --- product_engineering_info/README.rst | 87 ++++ product_engineering_info/__init__.py | 1 + product_engineering_info/__manifest__.py | 20 + product_engineering_info/i18n/ja.po | 260 +++++++++++ product_engineering_info/models/__init__.py | 2 + .../models/product_group_code.py | 17 + .../models/product_template.py | 62 +++ .../readme/CONTRIBUTORS.md | 2 + .../readme/DESCRIPTION.md | 15 + .../security/ir.model.access.csv | 2 + .../static/description/index.html | 439 ++++++++++++++++++ .../views/product_group_code_views.xml | 57 +++ .../views/product_template_views.xml | 62 +++ .../odoo/addons/product_engineering_info | 1 + setup/product_engineering_info/setup.py | 6 + 15 files changed, 1033 insertions(+) create mode 100644 product_engineering_info/README.rst create mode 100644 product_engineering_info/__init__.py create mode 100644 product_engineering_info/__manifest__.py create mode 100644 product_engineering_info/i18n/ja.po create mode 100644 product_engineering_info/models/__init__.py create mode 100644 product_engineering_info/models/product_group_code.py create mode 100644 product_engineering_info/models/product_template.py create mode 100644 product_engineering_info/readme/CONTRIBUTORS.md create mode 100644 product_engineering_info/readme/DESCRIPTION.md create mode 100644 product_engineering_info/security/ir.model.access.csv create mode 100644 product_engineering_info/static/description/index.html create mode 100644 product_engineering_info/views/product_group_code_views.xml create mode 100644 product_engineering_info/views/product_template_views.xml create mode 120000 setup/product_engineering_info/odoo/addons/product_engineering_info create mode 100644 setup/product_engineering_info/setup.py diff --git a/product_engineering_info/README.rst b/product_engineering_info/README.rst new file mode 100644 index 0000000..e34b624 --- /dev/null +++ b/product_engineering_info/README.rst @@ -0,0 +1,87 @@ +======================== +Product Engineering Info +======================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:c15cc5c9ae574b8a2763a5f6ddbf2bb1583bc00339db7b0d97b7669624653b45 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/licence-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-qrtl%2Fthc--custom-lightgray.png?logo=github + :target: https://github.com/qrtl/thc-custom/tree/16.0/product_engineering_info + :alt: qrtl/thc-custom + +|badge1| |badge2| |badge3| + +This module extends products with engineering-oriented information: + +- An **Engineering** tab on the product form gathering the following + fields: + + - **Active Flag**: whether the part is still to be ordered (an + engineering view; distinct from Odoo's archive flag). + - **Product Group Code**: a design classification (e.g. sheet metal, + circuit board), managed under *Inventory > Configuration > + Products*. + - **Successor P/N**: the part that supersedes this one. + - **BOM Link**: a link to the engineering BOM file (separate from Odoo + BoMs). + - **Technical Notes**: free-form notes for engineers. + - **Compatible P/N**: parts usable as substitutes when out of stock. + +The tab is also a convenient place for administrators to add further +engineering fields through Studio. + +**Table of contents** + +.. contents:: + :local: + +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 +------- + +* Quartile + +Contributors +------------ + +- `Quartile `__: + + - Toshikimi Shigenobu + +Maintainers +----------- + +.. |maintainer-nobuQuartile| image:: https://github.com/nobuQuartile.png?size=40px + :target: https://github.com/nobuQuartile + :alt: nobuQuartile + +Current maintainer: + +|maintainer-nobuQuartile| + +This module is part of the `qrtl/thc-custom `_ project on GitHub. + +You are welcome to contribute. diff --git a/product_engineering_info/__init__.py b/product_engineering_info/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/product_engineering_info/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/product_engineering_info/__manifest__.py b/product_engineering_info/__manifest__.py new file mode 100644 index 0000000..45baf53 --- /dev/null +++ b/product_engineering_info/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2026 Quartile (https://www.quartile.co) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Product Engineering Info", + "version": "16.0.1.0.0", + "category": "Inventory", + "license": "AGPL-3", + "author": "Quartile", + "website": "https://www.quartile.co", + "maintainers": ["nobuQuartile"], + "summary": "Add an Engineering tab with engineering fields and a " + "Product Group Code classification to products.", + "depends": ["stock"], + "data": [ + "security/ir.model.access.csv", + "views/product_group_code_views.xml", + "views/product_template_views.xml", + ], + "installable": True, +} diff --git a/product_engineering_info/i18n/ja.po b/product_engineering_info/i18n/ja.po new file mode 100644 index 0000000..e1757ff --- /dev/null +++ b/product_engineering_info/i18n/ja.po @@ -0,0 +1,260 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_engineering_info +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-24 01:35+0000\n" +"PO-Revision-Date: 2026-07-24 01:35+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_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_group_code__active +msgid "Active" +msgstr "有効" + +#. module: product_engineering_info +#: model:ir.model.fields,help:product_engineering_info.field_product_product__manufacturer_id +#: model:ir.model.fields,help:product_engineering_info.field_product_template__manufacturer_id +msgid "Actual manufacturer of the part (may differ from the vendor)." +msgstr "部品の実際の製造者(仕入先と異なる場合があります)。" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_product__allow_purchase +#: model:ir.model.fields,field_description:product_engineering_info.field_product_template__allow_purchase +msgid "Allow Purchase" +msgstr "購買許可" + +#. module: product_engineering_info +#: model_terms:ir.ui.view,arch_db:product_engineering_info.product_group_code_view_form +#: model_terms:ir.ui.view,arch_db:product_engineering_info.product_group_code_view_search +msgid "Archived" +msgstr "アーカイブ済" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_product__bom_approval_date +#: model:ir.model.fields,field_description:product_engineering_info.field_product_template__bom_approval_date +msgid "BOM Approval Date" +msgstr "BOM承認日時" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_product__bom_approver +#: model:ir.model.fields,field_description:product_engineering_info.field_product_template__bom_approver +msgid "BOM Approver" +msgstr "BOM承認者" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_product__bom_author +#: model:ir.model.fields,field_description:product_engineering_info.field_product_template__bom_author +msgid "BOM Author" +msgstr "BOM作成者" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_product__bom_link_released +#: model:ir.model.fields,field_description:product_engineering_info.field_product_template__bom_link_released +msgid "BOM Link (Released)" +msgstr "BOMリンク(リリース済み)" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_product__bom_link +#: model:ir.model.fields,field_description:product_engineering_info.field_product_template__bom_link +msgid "BOM Link (Working)" +msgstr "BOMリンク(作業中)" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_product__bom_revision +#: model:ir.model.fields,field_description:product_engineering_info.field_product_template__bom_revision +msgid "BOM Revision" +msgstr "BOMリビジョン" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_product__bom_status +#: model:ir.model.fields,field_description:product_engineering_info.field_product_template__bom_status +msgid "BOM Status" +msgstr "BOMステータス" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_product__compatible_product_ids +#: model:ir.model.fields,field_description:product_engineering_info.field_product_template__compatible_product_ids +msgid "Compatible P/N" +msgstr "互換 P/N" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_group_code__create_uid +msgid "Created by" +msgstr "作成者" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_group_code__create_date +msgid "Created on" +msgstr "作成日" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_group_code__display_name +msgid "Display Name" +msgstr "表示名" + +#. module: product_engineering_info +#: model_terms:ir.ui.view,arch_db:product_engineering_info.product_template_view_form +msgid "E-BOM" +msgstr "E-BOM" + +#. module: product_engineering_info +#: model_terms:ir.ui.view,arch_db:product_engineering_info.product_template_view_form +msgid "Engineering" +msgstr "エンジニアリング" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_product__engineering_folder_link +#: model:ir.model.fields,field_description:product_engineering_info.field_product_template__engineering_folder_link +msgid "Engineering Folder Link" +msgstr "エンジニアリングフォルダリンク" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_group_code__id +msgid "ID" +msgstr "ID" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_group_code____last_update +msgid "Last Modified on" +msgstr "最終更新日" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_group_code__write_uid +msgid "Last Updated by" +msgstr "最終更新者" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_group_code__write_date +msgid "Last Updated on" +msgstr "最終更新日" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_product__legacy_description_cad +#: model:ir.model.fields,field_description:product_engineering_info.field_product_template__legacy_description_cad +msgid "Legacy Description (CAD)" +msgstr "旧説明(CAD)" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_product__legacy_number_cad +#: model:ir.model.fields,field_description:product_engineering_info.field_product_template__legacy_number_cad +msgid "Legacy Number (CAD)" +msgstr "旧番号(CAD)" + +#. module: product_engineering_info +#: model:ir.model.fields,help:product_engineering_info.field_product_product__bom_link_released +#: model:ir.model.fields,help:product_engineering_info.field_product_template__bom_link_released +msgid "Link to the BOM of the latest released revision." +msgstr "リリース済みの最新リビジョンのBOMへのリンク。" + +#. module: product_engineering_info +#: model:ir.model.fields,help:product_engineering_info.field_product_product__engineering_folder_link +#: model:ir.model.fields,help:product_engineering_info.field_product_template__engineering_folder_link +msgid "Link to the Google Drive folder holding the engineering information." +msgstr "エンジニアリング情報が格納されているGoogleドライブのフォルダへのリンク。" + +#. module: product_engineering_info +#: model:ir.model.fields,help:product_engineering_info.field_product_product__bom_link +#: model:ir.model.fields,help:product_engineering_info.field_product_template__bom_link +msgid "Link to the working (editable) E-BOM." +msgstr "編集可能な作業中E-BOMへのリンク。" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_product__manufacturer_id +#: model:ir.model.fields,field_description:product_engineering_info.field_product_template__manufacturer_id +#: model_terms:ir.ui.view,arch_db:product_engineering_info.product_template_view_form +msgid "Manufacturer" +msgstr "製造者" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_product__manufacturer_pcode +#: model:ir.model.fields,field_description:product_engineering_info.field_product_template__manufacturer_pcode +msgid "Manufacturer Product Code" +msgstr "製造者製品コード" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_product__manufacturer_pname +#: model:ir.model.fields,field_description:product_engineering_info.field_product_template__manufacturer_pname +msgid "Manufacturer Product Name" +msgstr "製造者製品名" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_group_code__name +msgid "Name" +msgstr "名称" + +#. module: product_engineering_info +#: model:ir.model.fields,help:product_engineering_info.field_product_product__successor_product_id +#: model:ir.model.fields,help:product_engineering_info.field_product_template__successor_product_id +msgid "Part that supersedes this one." +msgstr "この部品を置き換える後継部品。" + +#. module: product_engineering_info +#: model:ir.model.fields,help:product_engineering_info.field_product_product__compatible_product_ids +#: model:ir.model.fields,help:product_engineering_info.field_product_template__compatible_product_ids +msgid "Parts that may be used as substitutes when out of stock." +msgstr "在庫切れ時に代替として使用できる部品。" + +#. module: product_engineering_info +#: model:ir.model.fields,help:product_engineering_info.field_product_product__registered_by +#: model:ir.model.fields,help:product_engineering_info.field_product_template__registered_by +msgid "Person who first registered the part number." +msgstr "部品番号を最初に登録した担当者。" + +#. module: product_engineering_info +#: model:ir.model,name:product_engineering_info.model_product_template +msgid "Product" +msgstr "プロダクト" + +#. module: product_engineering_info +#: model:ir.model,name:product_engineering_info.model_product_group_code +#: model:ir.model.fields,field_description:product_engineering_info.field_product_product__group_code_id +#: model:ir.model.fields,field_description:product_engineering_info.field_product_template__group_code_id +msgid "Product Group Code" +msgstr "プロダクトグループコード" + +#. module: product_engineering_info +#: model:ir.actions.act_window,name:product_engineering_info.product_group_code_action +#: model:ir.ui.menu,name:product_engineering_info.product_group_code_menu +msgid "Product Group Codes" +msgstr "プロダクトグループコード" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_product__registered_by +#: model:ir.model.fields,field_description:product_engineering_info.field_product_template__registered_by +msgid "Registered By" +msgstr "登録者" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_product__successor_product_id +#: model:ir.model.fields,field_description:product_engineering_info.field_product_template__successor_product_id +msgid "Successor P/N" +msgstr "後継 P/N" + +#. module: product_engineering_info +#: model:ir.model.fields,field_description:product_engineering_info.field_product_product__technical_notes +#: model:ir.model.fields,field_description:product_engineering_info.field_product_template__technical_notes +#: model_terms:ir.ui.view,arch_db:product_engineering_info.product_template_view_form +msgid "Technical Notes" +msgstr "技術メモ" + +#. module: product_engineering_info +#: model:ir.model.constraint,message:product_engineering_info.constraint_product_group_code_name_uniq +msgid "The Product Group Code must be unique." +msgstr "プロダクトグループコードは一意である必要があります。" + +#. module: product_engineering_info +#: model:ir.model.fields,help:product_engineering_info.field_product_product__allow_purchase +#: model:ir.model.fields,help:product_engineering_info.field_product_template__allow_purchase +msgid "" +"Whether the part may still be purchased. Unlike archiving, the product stays" +" active in Odoo (e.g. because stock still exists)." +msgstr "この部品を引き続き購買してよいか。アーカイブとは異なり、プロダクトはOdoo上で有効なまま(在庫が残っている場合など)。" diff --git a/product_engineering_info/models/__init__.py b/product_engineering_info/models/__init__.py new file mode 100644 index 0000000..53f2805 --- /dev/null +++ b/product_engineering_info/models/__init__.py @@ -0,0 +1,2 @@ +from . import product_group_code +from . import product_template diff --git a/product_engineering_info/models/product_group_code.py b/product_engineering_info/models/product_group_code.py new file mode 100644 index 0000000..432a069 --- /dev/null +++ b/product_engineering_info/models/product_group_code.py @@ -0,0 +1,17 @@ +# Copyright 2026 Quartile (https://www.quartile.co) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ProductGroupCode(models.Model): + _name = "product.group.code" + _description = "Product Group Code" + _order = "name" + + name = fields.Char(required=True) + active = fields.Boolean(default=True) + + _sql_constraints = [ + ("name_uniq", "unique(name)", "The Product Group Code must be unique."), + ] diff --git a/product_engineering_info/models/product_template.py b/product_engineering_info/models/product_template.py new file mode 100644 index 0000000..1fd1795 --- /dev/null +++ b/product_engineering_info/models/product_template.py @@ -0,0 +1,62 @@ +# Copyright 2026 Quartile (https://www.quartile.co) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + # General Information tab + allow_purchase = fields.Boolean( + default=True, + help="Whether the part may still be purchased. Unlike archiving, the " + "product stays active in Odoo (e.g. because stock still exists).", + ) + successor_product_id = fields.Many2one( + "product.template", + string="Successor P/N", + help="Part that supersedes this one.", + ) + + # Purchase tab + manufacturer_id = fields.Many2one( + "res.partner", + help="Actual manufacturer of the part (may differ from the vendor).", + ) + manufacturer_pname = fields.Char(string="Manufacturer Product Name") + manufacturer_pcode = fields.Char(string="Manufacturer Product Code") + + # Engineering tab + registered_by = fields.Char(help="Person who first registered the part number.") + group_code_id = fields.Many2one( + "product.group.code", + string="Product Group Code", + ) + engineering_folder_link = fields.Char( + help="Link to the Google Drive folder holding the engineering information.", + ) + bom_link = fields.Char( + string="BOM Link (Working)", + help="Link to the working (editable) E-BOM.", + ) + bom_revision = fields.Char(string="BOM Revision") + bom_author = fields.Char(string="BOM Author") + bom_status = fields.Char(string="BOM Status") + bom_approver = fields.Char(string="BOM Approver") + bom_approval_date = fields.Char(string="BOM Approval Date") + bom_link_released = fields.Char( + string="BOM Link (Released)", + help="Link to the BOM of the latest released revision.", + ) + technical_notes = fields.Text() + compatible_product_ids = fields.Many2many( + "product.template", + relation="product_template_compatible_rel", + column1="product_tmpl_id", + column2="compatible_product_tmpl_id", + string="Compatible P/N", + help="Parts that may be used as substitutes when out of stock.", + ) + legacy_number_cad = fields.Char(string="Legacy Number (CAD)") + legacy_description_cad = fields.Char(string="Legacy Description (CAD)") diff --git a/product_engineering_info/readme/CONTRIBUTORS.md b/product_engineering_info/readme/CONTRIBUTORS.md new file mode 100644 index 0000000..04192ea --- /dev/null +++ b/product_engineering_info/readme/CONTRIBUTORS.md @@ -0,0 +1,2 @@ +- [Quartile](https://www.quartile.co): + - Toshikimi Shigenobu diff --git a/product_engineering_info/readme/DESCRIPTION.md b/product_engineering_info/readme/DESCRIPTION.md new file mode 100644 index 0000000..a6b369d --- /dev/null +++ b/product_engineering_info/readme/DESCRIPTION.md @@ -0,0 +1,15 @@ +This module extends products with engineering-oriented information: + +- An **Engineering** tab on the product form gathering the following fields: + - **Active Flag**: whether the part is still to be ordered (an + engineering view; distinct from Odoo's archive flag). + - **Product Group Code**: a design classification (e.g. sheet metal, + circuit board), managed under *Inventory > Configuration > Products*. + - **Successor P/N**: the part that supersedes this one. + - **BOM Link**: a link to the engineering BOM file (separate from Odoo + BoMs). + - **Technical Notes**: free-form notes for engineers. + - **Compatible P/N**: parts usable as substitutes when out of stock. + +The tab is also a convenient place for administrators to add further +engineering fields through Studio. diff --git a/product_engineering_info/security/ir.model.access.csv b/product_engineering_info/security/ir.model.access.csv new file mode 100644 index 0000000..3e1cdf8 --- /dev/null +++ b/product_engineering_info/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_group_code_user,product.group.code user,model_product_group_code,base.group_user,1,1,1,1 diff --git a/product_engineering_info/static/description/index.html b/product_engineering_info/static/description/index.html new file mode 100644 index 0000000..19e4b1b --- /dev/null +++ b/product_engineering_info/static/description/index.html @@ -0,0 +1,439 @@ + + + + + +Product Engineering Info + + + +
+

Product Engineering Info

+ + +

Beta License: AGPL-3 qrtl/thc-custom

+

This module extends products with engineering-oriented information:

+
    +
  • An Engineering tab on the product form gathering the following +fields:
      +
    • Active Flag: whether the part is still to be ordered (an +engineering view; distinct from Odoo’s archive flag).
    • +
    • Product Group Code: a design classification (e.g. sheet metal, +circuit board), managed under Inventory > Configuration > +Products.
    • +
    • Successor P/N: the part that supersedes this one.
    • +
    • BOM Link: a link to the engineering BOM file (separate from Odoo +BoMs).
    • +
    • Technical Notes: free-form notes for engineers.
    • +
    • Compatible P/N: parts usable as substitutes when out of stock.
    • +
    +
  • +
+

The tab is also a convenient place for administrators to add further +engineering fields through Studio.

+

Table of contents

+ +
+

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

+
    +
  • Quartile
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

Current maintainer:

+

nobuQuartile

+

This module is part of the qrtl/thc-custom project on GitHub.

+

You are welcome to contribute.

+
+
+
+ + diff --git a/product_engineering_info/views/product_group_code_views.xml b/product_engineering_info/views/product_group_code_views.xml new file mode 100644 index 0000000..886f3a6 --- /dev/null +++ b/product_engineering_info/views/product_group_code_views.xml @@ -0,0 +1,57 @@ + + + + product.group.code.tree + product.group.code + + + + + + + + product.group.code.form + product.group.code + +
+ + + + + + + +
+
+
+ + product.group.code.search + product.group.code + + + + + + + + + Product Group Codes + product.group.code + tree,form + + +
diff --git a/product_engineering_info/views/product_template_views.xml b/product_engineering_info/views/product_template_views.xml new file mode 100644 index 0000000..bcc3e01 --- /dev/null +++ b/product_engineering_info/views/product_template_views.xml @@ -0,0 +1,62 @@ + + + + product.template.form.engineering + product.template + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/setup/product_engineering_info/odoo/addons/product_engineering_info b/setup/product_engineering_info/odoo/addons/product_engineering_info new file mode 120000 index 0000000..a757a19 --- /dev/null +++ b/setup/product_engineering_info/odoo/addons/product_engineering_info @@ -0,0 +1 @@ +../../../../product_engineering_info \ No newline at end of file diff --git a/setup/product_engineering_info/setup.py b/setup/product_engineering_info/setup.py new file mode 100644 index 0000000..28c57bb --- /dev/null +++ b/setup/product_engineering_info/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) From 56774562c2f86318eb4cd67aa3c67d1012fcdcad Mon Sep 17 00:00:00 2001 From: nobuQuartile Date: Mon, 27 Jul 2026 02:46:54 +0000 Subject: [PATCH 2/5] fixup! [ADD] product_engineering_info: Engineering tab and Product Group Code --- product_engineering_info/README.rst | 4 ++-- .../models/product_template.py | 3 --- .../readme/DESCRIPTION.md | 2 +- .../static/description/index.html | 4 ++-- .../views/product_group_code_views.xml | 23 ++----------------- 5 files changed, 7 insertions(+), 29 deletions(-) diff --git a/product_engineering_info/README.rst b/product_engineering_info/README.rst index e34b624..fc69b88 100644 --- a/product_engineering_info/README.rst +++ b/product_engineering_info/README.rst @@ -7,7 +7,7 @@ Product Engineering Info !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:c15cc5c9ae574b8a2763a5f6ddbf2bb1583bc00339db7b0d97b7669624653b45 + !! source digest: sha256:7856680fc45f7dbb6a34707940de8c41836aa27ee2ca68c76242a73ec97f167a !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -27,7 +27,7 @@ This module extends products with engineering-oriented information: - An **Engineering** tab on the product form gathering the following fields: - - **Active Flag**: whether the part is still to be ordered (an + - **Allow Purchase**: whether the part is still to be ordered (an engineering view; distinct from Odoo's archive flag). - **Product Group Code**: a design classification (e.g. sheet metal, circuit board), managed under *Inventory > Configuration > diff --git a/product_engineering_info/models/product_template.py b/product_engineering_info/models/product_template.py index 1fd1795..6363419 100644 --- a/product_engineering_info/models/product_template.py +++ b/product_engineering_info/models/product_template.py @@ -7,7 +7,6 @@ class ProductTemplate(models.Model): _inherit = "product.template" - # General Information tab allow_purchase = fields.Boolean( default=True, help="Whether the part may still be purchased. Unlike archiving, the " @@ -19,7 +18,6 @@ class ProductTemplate(models.Model): help="Part that supersedes this one.", ) - # Purchase tab manufacturer_id = fields.Many2one( "res.partner", help="Actual manufacturer of the part (may differ from the vendor).", @@ -27,7 +25,6 @@ class ProductTemplate(models.Model): manufacturer_pname = fields.Char(string="Manufacturer Product Name") manufacturer_pcode = fields.Char(string="Manufacturer Product Code") - # Engineering tab registered_by = fields.Char(help="Person who first registered the part number.") group_code_id = fields.Many2one( "product.group.code", diff --git a/product_engineering_info/readme/DESCRIPTION.md b/product_engineering_info/readme/DESCRIPTION.md index a6b369d..9367d27 100644 --- a/product_engineering_info/readme/DESCRIPTION.md +++ b/product_engineering_info/readme/DESCRIPTION.md @@ -1,7 +1,7 @@ This module extends products with engineering-oriented information: - An **Engineering** tab on the product form gathering the following fields: - - **Active Flag**: whether the part is still to be ordered (an + - **Allow Purchase**: whether the part is still to be ordered (an engineering view; distinct from Odoo's archive flag). - **Product Group Code**: a design classification (e.g. sheet metal, circuit board), managed under *Inventory > Configuration > Products*. diff --git a/product_engineering_info/static/description/index.html b/product_engineering_info/static/description/index.html index 19e4b1b..f8eda9a 100644 --- a/product_engineering_info/static/description/index.html +++ b/product_engineering_info/static/description/index.html @@ -367,14 +367,14 @@

Product Engineering Info

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:c15cc5c9ae574b8a2763a5f6ddbf2bb1583bc00339db7b0d97b7669624653b45 +!! source digest: sha256:7856680fc45f7dbb6a34707940de8c41836aa27ee2ca68c76242a73ec97f167a !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 qrtl/thc-custom

This module extends products with engineering-oriented information:

  • An Engineering tab on the product form gathering the following fields:
      -
    • Active Flag: whether the part is still to be ordered (an +
    • Allow Purchase: whether the part is still to be ordered (an engineering view; distinct from Odoo’s archive flag).
    • Product Group Code: a design classification (e.g. sheet metal, circuit board), managed under Inventory > Configuration > diff --git a/product_engineering_info/views/product_group_code_views.xml b/product_engineering_info/views/product_group_code_views.xml index 886f3a6..37c3f3d 100644 --- a/product_engineering_info/views/product_group_code_views.xml +++ b/product_engineering_info/views/product_group_code_views.xml @@ -6,29 +6,10 @@ + - - product.group.code.form - product.group.code - -
      - - - - - - - -
      -
      -
      product.group.code.search product.group.code @@ -46,7 +27,7 @@ Product Group Codes product.group.code - tree,form + tree Date: Mon, 27 Jul 2026 04:53:57 +0000 Subject: [PATCH 3/5] fix up --- .../models/product_template.py | 1 - .../views/product_template_views.xml | 14 ++++++-------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/product_engineering_info/models/product_template.py b/product_engineering_info/models/product_template.py index 6363419..d549d3c 100644 --- a/product_engineering_info/models/product_template.py +++ b/product_engineering_info/models/product_template.py @@ -17,7 +17,6 @@ class ProductTemplate(models.Model): string="Successor P/N", help="Part that supersedes this one.", ) - manufacturer_id = fields.Many2one( "res.partner", help="Actual manufacturer of the part (may differ from the vendor).", diff --git a/product_engineering_info/views/product_template_views.xml b/product_engineering_info/views/product_template_views.xml index bcc3e01..5578104 100644 --- a/product_engineering_info/views/product_template_views.xml +++ b/product_engineering_info/views/product_template_views.xml @@ -23,11 +23,16 @@ - + + @@ -45,13 +50,6 @@ - - - From 7ba44aeaea287bd5d88cf82550189c41fcfbe8a3 Mon Sep 17 00:00:00 2001 From: nobuQuartile Date: Mon, 27 Jul 2026 09:58:52 +0000 Subject: [PATCH 4/5] fixup! [ADD] product_engineering_info: Engineering tab and Product Group Code --- product_engineering_info/README.rst | 28 ++++---- .../models/product_template.py | 1 - .../readme/DESCRIPTION.md | 25 ++++--- .../security/ir.model.access.csv | 3 +- .../static/description/index.html | 68 ++++++++----------- .../views/product_template_views.xml | 5 +- 6 files changed, 60 insertions(+), 70 deletions(-) diff --git a/product_engineering_info/README.rst b/product_engineering_info/README.rst index fc69b88..bc726bf 100644 --- a/product_engineering_info/README.rst +++ b/product_engineering_info/README.rst @@ -7,7 +7,7 @@ Product Engineering Info !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:7856680fc45f7dbb6a34707940de8c41836aa27ee2ca68c76242a73ec97f167a + !! source digest: sha256:1648d92f1e307a3b4a94eac3666351a23ce007560015bcd48aaf6838c800ada0 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -22,24 +22,20 @@ Product Engineering Info |badge1| |badge2| |badge3| -This module extends products with engineering-oriented information: +This module extends products with engineering-oriented information. -- An **Engineering** tab on the product form gathering the following - fields: +It adds an **Engineering** tab on the product form where engineers can +keep design data such as a product group code, compatible parts, E-BOM +references and technical notes. A few closely related fields are also +surfaced on the standard tabs (for example the successor part number on +*General Information* and manufacturer details on *Purchase*). - - **Allow Purchase**: whether the part is still to be ordered (an - engineering view; distinct from Odoo's archive flag). - - **Product Group Code**: a design classification (e.g. sheet metal, - circuit board), managed under *Inventory > Configuration > - Products*. - - **Successor P/N**: the part that supersedes this one. - - **BOM Link**: a link to the engineering BOM file (separate from Odoo - BoMs). - - **Technical Notes**: free-form notes for engineers. - - **Compatible P/N**: parts usable as substitutes when out of stock. +Product group codes are a simple design classification (e.g. sheet +metal, circuit board), managed under *Inventory > Configuration > +Products*. -The tab is also a convenient place for administrators to add further -engineering fields through Studio. +The Engineering tab is also a convenient place for administrators to add +further engineering fields through Studio. **Table of contents** diff --git a/product_engineering_info/models/product_template.py b/product_engineering_info/models/product_template.py index d549d3c..5e4dd73 100644 --- a/product_engineering_info/models/product_template.py +++ b/product_engineering_info/models/product_template.py @@ -23,7 +23,6 @@ class ProductTemplate(models.Model): ) manufacturer_pname = fields.Char(string="Manufacturer Product Name") manufacturer_pcode = fields.Char(string="Manufacturer Product Code") - registered_by = fields.Char(help="Person who first registered the part number.") group_code_id = fields.Many2one( "product.group.code", diff --git a/product_engineering_info/readme/DESCRIPTION.md b/product_engineering_info/readme/DESCRIPTION.md index 9367d27..80bd22f 100644 --- a/product_engineering_info/readme/DESCRIPTION.md +++ b/product_engineering_info/readme/DESCRIPTION.md @@ -1,15 +1,14 @@ -This module extends products with engineering-oriented information: +This module extends products with engineering-oriented information. -- An **Engineering** tab on the product form gathering the following fields: - - **Allow Purchase**: whether the part is still to be ordered (an - engineering view; distinct from Odoo's archive flag). - - **Product Group Code**: a design classification (e.g. sheet metal, - circuit board), managed under *Inventory > Configuration > Products*. - - **Successor P/N**: the part that supersedes this one. - - **BOM Link**: a link to the engineering BOM file (separate from Odoo - BoMs). - - **Technical Notes**: free-form notes for engineers. - - **Compatible P/N**: parts usable as substitutes when out of stock. +It adds an **Engineering** tab on the product form where engineers can +keep design data such as a product group code, compatible parts, E-BOM +references and technical notes. A few closely related fields are also +surfaced on the standard tabs (for example the successor part number on +*General Information* and manufacturer details on *Purchase*). -The tab is also a convenient place for administrators to add further -engineering fields through Studio. +Product group codes are a simple design classification (e.g. sheet +metal, circuit board), managed under *Inventory > Configuration > +Products*. + +The Engineering tab is also a convenient place for administrators to add +further engineering fields through Studio. diff --git a/product_engineering_info/security/ir.model.access.csv b/product_engineering_info/security/ir.model.access.csv index 3e1cdf8..a34b2d8 100644 --- a/product_engineering_info/security/ir.model.access.csv +++ b/product_engineering_info/security/ir.model.access.csv @@ -1,2 +1,3 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_product_group_code_user,product.group.code user,model_product_group_code,base.group_user,1,1,1,1 +access_product_group_code_user,product.group.code user,model_product_group_code,base.group_user,1,0,0,0 +access_product_group_code_manager,product.group.code manager,model_product_group_code,stock.group_stock_manager,1,1,1,1 diff --git a/product_engineering_info/static/description/index.html b/product_engineering_info/static/description/index.html index f8eda9a..65b9b31 100644 --- a/product_engineering_info/static/description/index.html +++ b/product_engineering_info/static/description/index.html @@ -1,20 +1,20 @@ + - + Product Engineering Info