diff --git a/product_classification/README.rst b/product_classification/README.rst new file mode 100644 index 0000000..1cbebde --- /dev/null +++ b/product_classification/README.rst @@ -0,0 +1,115 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +====================== +Product Classification +====================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:e8ded931b142bf8f53598f2f9c4b26667a87b7caf8e3d10196d1220ebea7e063 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-qrtl%2FOCJ Custom-lightgray.png?logo=github + :target: https://github.com/qrtl/OCJ Custom/tree/19.0/product_classification + :alt: qrtl/OCJ Custom + +|badge1| |badge2| |badge3| + +This module adds classification master data to products so equipment and +consumables can be categorized consistently. + +Each product can be flagged as **equipment** or **consumable** (*Product +Kind*) and linked to a **Manufacturer** (メーカー), then given a +classification: + +- **Equipment Classification** (機器分類), with an **Equipment + Sub-Classification** (機器分類サブ) for auxiliary devices. +- **Consumable Classification** for consumable products. + +Products can also be given a **Middle Category** (中分類) and a **Minor +Category** (小分類). + +Each axis is backed by a dedicated, user-maintainable model holding a +name and an optional code (a numeric code is preferred for integration +with external systems). Several fields feed the **Navi in Flow** +(ナビフロー) integration, which exchanges product/equipment master data +with the CIAS system. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +The module ships the classification models and configuration UI with +only a small set of sample equipment classifications, so the taxonomy +can be tailored to each deployment (for example through a +company-specific data module or the external integration). + +To maintain the available classifications: + +1. Go to *Inventory > Configuration > Products* and open *Equipment + Classifications*, *Equipment Sub-Classifications*, *Consumable + Classifications*, *Middle Categories*, *Minor Categories* or + *Manufacturers*. +2. Create the entries with a name and, preferably, a numeric code. + +Usage +===== + +To classify a product: + +1. Open a product and go to the *Classification* tab. +2. Set the **Product Kind** (equipment or consumable), the + **Manufacturer** and the relevant classification. The equipment or + consumable classification fields appear according to the selected + kind. + +Products can be searched and filtered by manufacturer and classification +from the product list view. + +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 + +Maintainers +----------- + +.. |maintainer-yostashiro| image:: https://github.com/yostashiro.png?size=40px + :target: https://github.com/yostashiro + :alt: yostashiro + +Current maintainer: + +|maintainer-yostashiro| + +This module is part of the `qrtl/OCJ Custom `_ project on GitHub. + +You are welcome to contribute. diff --git a/product_classification/__init__.py b/product_classification/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/product_classification/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/product_classification/__manifest__.py b/product_classification/__manifest__.py new file mode 100644 index 0000000..7771696 --- /dev/null +++ b/product_classification/__manifest__.py @@ -0,0 +1,28 @@ +# Copyright 2026 Quartile (https://www.quartile.co) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). +{ + "name": "Product Classification", + "version": "19.0.1.0.0", + "category": "Inventory/Inventory", + "website": "https://www.quartile.co", + "author": "Quartile", + "maintainers": ["yostashiro"], + "license": "LGPL-3", + "summary": "Classify products (equipment / consumable) with manufacturer " + "and classification master data", + "installable": True, + "depends": ["stock"], + "data": [ + "security/ir.model.access.csv", + "data/product_equipment_classification_data.xml", + "data/product_middle_category_data.xml", + "data/product_minor_category_data.xml", + "views/product_equipment_classification_views.xml", + "views/product_equipment_classification_sub_views.xml", + "views/product_consumable_classification_views.xml", + "views/product_middle_category_views.xml", + "views/product_minor_category_views.xml", + "views/product_manufacturer_views.xml", + "views/product_template_views.xml", + ], +} diff --git a/product_classification/data/product_equipment_classification_data.xml b/product_classification/data/product_equipment_classification_data.xml new file mode 100644 index 0000000..bb286e3 --- /dev/null +++ b/product_classification/data/product_equipment_classification_data.xml @@ -0,0 +1,123 @@ + + + + HOT / Concentrator + 1 + 10 + + + HOT / Liquid Oxygen + 2 + 20 + + + HOT / Cylinder + 3 + 30 + + + MV / In-hospital & Home + 5 + 40 + + + CPAP + 7 + 50 + + + ASV + 10 + 51 + + + HIT + 8 + 60 + + + Pulse Oximeter + 21 + 70 + + + PCA Pump + 22 + 80 + + + Ultrasonic Bone Healing Device + 23 + 90 + + + Cough Assist Device + 24 + 100 + + + High-Flow Therapy + 25 + 110 + + + Other Medical Equipment + 9 + 120 + + + Other (Auxiliary Device) + 90 + 130 + + + Portable Oxygen + 20 + 140 + + diff --git a/product_classification/data/product_middle_category_data.xml b/product_classification/data/product_middle_category_data.xml new file mode 100644 index 0000000..b97f26f --- /dev/null +++ b/product_classification/data/product_middle_category_data.xml @@ -0,0 +1,42 @@ + + + + Own Use + + + + Teijin Use + + + + Non-Teijin + + + + HOT + + + + CPAP + + + + ASV + + + + NIP + + + + HFT + + + + IMV + + + + Medical Gas + + diff --git a/product_classification/data/product_minor_category_data.xml b/product_classification/data/product_minor_category_data.xml new file mode 100644 index 0000000..f18c478 --- /dev/null +++ b/product_classification/data/product_minor_category_data.xml @@ -0,0 +1,47 @@ + + + + Travel Support + + + + Examination + + + + Patient Care Outsourcing + + + + Disposal Cost + + + + Mask / Cushion / Headgear + + + + Tube + + + + HumidAir / Filter + + + + Cannula / Cylinder Accessories + + + + Liquid Oxygen / Cylinder + + diff --git a/product_classification/i18n/ja.po b/product_classification/i18n/ja.po new file mode 100644 index 0000000..8c795e9 --- /dev/null +++ b/product_classification/i18n/ja.po @@ -0,0 +1,523 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * product_classification +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 19.0+e\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-29 09:38+0000\n" +"PO-Revision-Date: 2026-07-29 09:38+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_classification +#: model:product.equipment.classification,name:product_classification.product_equipment_classification_asv +#: model:product.middle.category,name:product_classification.product_middle_category_asv +msgid "ASV" +msgstr "ASV" + +#. module: product_classification +#: model:ir.model.fields.selection,name:product_classification.selection__product_template__product_kind__accessory +#: model_terms:ir.ui.view,arch_db:product_classification.product_template_view_search +msgid "Accessory" +msgstr "付属品" + +#. module: product_classification +#: model:ir.model.fields,field_description:product_classification.field_product_consumable_classification__active +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification__active +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification_sub__active +#: model:ir.model.fields,field_description:product_classification.field_product_manufacturer__active +#: model:ir.model.fields,field_description:product_classification.field_product_middle_category__active +#: model:ir.model.fields,field_description:product_classification.field_product_minor_category__active +msgid "Active" +msgstr "有効" + +#. module: product_classification +#: model_terms:ir.ui.view,arch_db:product_classification.product_consumable_classification_view_form +#: model_terms:ir.ui.view,arch_db:product_classification.product_consumable_classification_view_search +#: model_terms:ir.ui.view,arch_db:product_classification.product_equipment_classification_sub_view_form +#: model_terms:ir.ui.view,arch_db:product_classification.product_equipment_classification_sub_view_search +#: model_terms:ir.ui.view,arch_db:product_classification.product_equipment_classification_view_form +#: model_terms:ir.ui.view,arch_db:product_classification.product_equipment_classification_view_search +#: model_terms:ir.ui.view,arch_db:product_classification.product_manufacturer_view_form +#: model_terms:ir.ui.view,arch_db:product_classification.product_manufacturer_view_search +msgid "Archived" +msgstr "アーカイブ済" + +#. module: product_classification +#: model:product.equipment.classification,name:product_classification.product_equipment_classification_cpap +#: model:product.middle.category,name:product_classification.product_middle_category_cpap +msgid "CPAP" +msgstr "CPAP" + +#. module: product_classification +#: model:product.minor.category,name:product_classification.product_minor_category_cannula_cylinder_accessories +msgid "Cannula / Cylinder Accessories" +msgstr "カニューラ・ボンベ付属品" + +#. module: product_classification +#: model_terms:ir.ui.view,arch_db:product_classification.product_template_view_form +msgid "Classification" +msgstr "分類" + +#. module: product_classification +#: model:ir.model.fields,help:product_classification.field_product_product__consumable_classification_id +#: model:ir.model.fields,help:product_classification.field_product_template__consumable_classification_id +msgid "Classification of a consumable product." +msgstr "消耗品の分類。" + +#. module: product_classification +#: model:ir.model.fields,field_description:product_classification.field_product_consumable_classification__code +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification__code +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification_sub__code +#: model:ir.model.fields,field_description:product_classification.field_product_manufacturer__code +#: model:ir.model.fields,field_description:product_classification.field_product_middle_category__code +#: model:ir.model.fields,field_description:product_classification.field_product_minor_category__code +msgid "Code" +msgstr "コード" + +#. module: product_classification +#: model:ir.model.fields.selection,name:product_classification.selection__product_template__product_kind__consumable +#: model_terms:ir.ui.view,arch_db:product_classification.product_template_view_search +msgid "Consumable" +msgstr "消耗品" + +#. module: product_classification +#: model:ir.model.fields,field_description:product_classification.field_product_product__consumable_classification_id +#: model:ir.model.fields,field_description:product_classification.field_product_template__consumable_classification_id +#: model_terms:ir.ui.view,arch_db:product_classification.product_template_view_search +msgid "Consumable Classification" +msgstr "消耗品分類" + +#. module: product_classification +#: model:ir.actions.act_window,name:product_classification.product_consumable_classification_action +#: model:ir.ui.menu,name:product_classification.product_consumable_classification_menu +msgid "Consumable Classifications" +msgstr "消耗品分類" + +#. module: product_classification +#: model:product.equipment.classification,name:product_classification.product_equipment_classification_cough_assist +msgid "Cough Assist Device" +msgstr "排痰補助装置" + +#. module: product_classification +#: model:ir.model.fields,field_description:product_classification.field_product_consumable_classification__create_uid +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification__create_uid +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification_sub__create_uid +#: model:ir.model.fields,field_description:product_classification.field_product_manufacturer__create_uid +#: model:ir.model.fields,field_description:product_classification.field_product_middle_category__create_uid +#: model:ir.model.fields,field_description:product_classification.field_product_minor_category__create_uid +msgid "Created by" +msgstr "作成者" + +#. module: product_classification +#: model:ir.model.fields,field_description:product_classification.field_product_consumable_classification__create_date +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification__create_date +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification_sub__create_date +#: model:ir.model.fields,field_description:product_classification.field_product_manufacturer__create_date +#: model:ir.model.fields,field_description:product_classification.field_product_middle_category__create_date +#: model:ir.model.fields,field_description:product_classification.field_product_minor_category__create_date +msgid "Created on" +msgstr "作成日" + +#. module: product_classification +#: model:ir.model.fields,field_description:product_classification.field_product_consumable_classification__display_name +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification__display_name +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification_sub__display_name +#: model:ir.model.fields,field_description:product_classification.field_product_manufacturer__display_name +#: model:ir.model.fields,field_description:product_classification.field_product_middle_category__display_name +#: model:ir.model.fields,field_description:product_classification.field_product_minor_category__display_name +#: model:ir.model.fields,field_description:product_classification.field_product_template__display_name +msgid "Display Name" +msgstr "表示名" + +#. module: product_classification +#: model:product.minor.category,name:product_classification.product_minor_category_disposal_cost +msgid "Disposal Cost" +msgstr "廃棄費用" + +#. module: product_classification +#: model:ir.model.fields.selection,name:product_classification.selection__product_template__product_kind__equipment +#: model_terms:ir.ui.view,arch_db:product_classification.product_template_view_search +msgid "Equipment" +msgstr "機器" + +#. module: product_classification +#: model:ir.model.fields,field_description:product_classification.field_product_product__equipment_classification_id +#: model:ir.model.fields,field_description:product_classification.field_product_template__equipment_classification_id +#: model_terms:ir.ui.view,arch_db:product_classification.product_template_view_search +msgid "Equipment Classification" +msgstr "機器分類" + +#. module: product_classification +#: model:ir.actions.act_window,name:product_classification.product_equipment_classification_action +#: model:ir.ui.menu,name:product_classification.product_equipment_classification_menu +msgid "Equipment Classifications" +msgstr "機器分類" + +#. module: product_classification +#: model:ir.model.fields,field_description:product_classification.field_product_product__equipment_classification_sub_id +#: model:ir.model.fields,field_description:product_classification.field_product_template__equipment_classification_sub_id +#: model_terms:ir.ui.view,arch_db:product_classification.product_template_view_search +msgid "Equipment Sub-Classification" +msgstr "機器分類サブ" + +#. module: product_classification +#: model:ir.actions.act_window,name:product_classification.product_equipment_classification_sub_action +#: model:ir.ui.menu,name:product_classification.product_equipment_classification_sub_menu +msgid "Equipment Sub-Classifications" +msgstr "機器分類サブ" + +#. module: product_classification +#: model:product.minor.category,name:product_classification.product_minor_category_examination +msgid "Examination" +msgstr "検査系" + +#. module: product_classification +#: model:ir.model.fields,help:product_classification.field_product_consumable_classification__code +#: model:ir.model.fields,help:product_classification.field_product_equipment_classification__code +#: model:ir.model.fields,help:product_classification.field_product_equipment_classification_sub__code +#: model:ir.model.fields,help:product_classification.field_product_manufacturer__code +#: model:ir.model.fields,help:product_classification.field_product_middle_category__code +#: model:ir.model.fields,help:product_classification.field_product_minor_category__code +msgid "External code used for integration. A numeric code is preferred." +msgstr "連携に使用する外部コード。数値コードが推奨されます。" + +#. module: product_classification +#: model:product.middle.category,name:product_classification.product_middle_category_hft +msgid "HFT" +msgstr "HFT" + +#. module: product_classification +#: model:product.equipment.classification,name:product_classification.product_equipment_classification_hit +msgid "HIT" +msgstr "HIT" + +#. module: product_classification +#: model:product.middle.category,name:product_classification.product_middle_category_hot +msgid "HOT" +msgstr "HOT" + +#. module: product_classification +#: model:product.equipment.classification,name:product_classification.product_equipment_classification_hot_concentrator +msgid "HOT / Concentrator" +msgstr "HOT/濃縮器" + +#. module: product_classification +#: model:product.equipment.classification,name:product_classification.product_equipment_classification_hot_cylinder +msgid "HOT / Cylinder" +msgstr "HOT/ボンベ" + +#. module: product_classification +#: model:product.equipment.classification,name:product_classification.product_equipment_classification_hot_liquid_oxygen +msgid "HOT / Liquid Oxygen" +msgstr "HOT/液体酸素" + +#. module: product_classification +#: model:product.equipment.classification,name:product_classification.product_equipment_classification_high_flow_therapy +msgid "High-Flow Therapy" +msgstr "ハイフローセラピー" + +#. module: product_classification +#: model:product.minor.category,name:product_classification.product_minor_category_humidair_filter +msgid "HumidAir / Filter" +msgstr "HumidAir・フィルタ" + +#. module: product_classification +#: model:ir.model.fields,field_description:product_classification.field_product_consumable_classification__id +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification__id +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification_sub__id +#: model:ir.model.fields,field_description:product_classification.field_product_manufacturer__id +#: model:ir.model.fields,field_description:product_classification.field_product_middle_category__id +#: model:ir.model.fields,field_description:product_classification.field_product_minor_category__id +#: model:ir.model.fields,field_description:product_classification.field_product_template__id +msgid "ID" +msgstr "ID" + +#. module: product_classification +#: model:product.middle.category,name:product_classification.product_middle_category_imv +msgid "IMV" +msgstr "IMV" + +#. module: product_classification +#: model:ir.model.fields,field_description:product_classification.field_product_consumable_classification__write_uid +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification__write_uid +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification_sub__write_uid +#: model:ir.model.fields,field_description:product_classification.field_product_manufacturer__write_uid +#: model:ir.model.fields,field_description:product_classification.field_product_middle_category__write_uid +#: model:ir.model.fields,field_description:product_classification.field_product_minor_category__write_uid +msgid "Last Updated by" +msgstr "最終更新者" + +#. module: product_classification +#: model:ir.model.fields,field_description:product_classification.field_product_consumable_classification__write_date +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification__write_date +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification_sub__write_date +#: model:ir.model.fields,field_description:product_classification.field_product_manufacturer__write_date +#: model:ir.model.fields,field_description:product_classification.field_product_middle_category__write_date +#: model:ir.model.fields,field_description:product_classification.field_product_minor_category__write_date +msgid "Last Updated on" +msgstr "最終更新日" + +#. module: product_classification +#: model:product.minor.category,name:product_classification.product_minor_category_liquid_oxygen_cylinder +msgid "Liquid Oxygen / Cylinder" +msgstr "液化酸素・ボンベ" + +#. module: product_classification +#: model:product.equipment.classification,name:product_classification.product_equipment_classification_mv +msgid "MV / In-hospital & Home" +msgstr "MV/院内・在宅" + +#. module: product_classification +#: model:ir.model.fields,field_description:product_classification.field_product_product__manufacturer_id +#: model:ir.model.fields,field_description:product_classification.field_product_template__manufacturer_id +#: model_terms:ir.ui.view,arch_db:product_classification.product_template_view_search +msgid "Manufacturer" +msgstr "メーカー" + +#. module: product_classification +#: model:ir.model.fields,help:product_classification.field_product_product__manufacturer_id +#: model:ir.model.fields,help:product_classification.field_product_template__manufacturer_id +msgid "Manufacturer of the product. Used in the Navi in Flow integration." +msgstr "プロダクトのメーカー。ナビフロー連携で使用されます。" + +#. module: product_classification +#: model:ir.actions.act_window,name:product_classification.product_manufacturer_action +#: model:ir.ui.menu,name:product_classification.product_manufacturer_menu +msgid "Manufacturers" +msgstr "メーカー" + +#. module: product_classification +#: model:product.minor.category,name:product_classification.product_minor_category_mask_cushion_headgear +msgid "Mask / Cushion / Headgear" +msgstr "マスク・クッション・ヘッドギア" + +#. module: product_classification +#: model:product.middle.category,name:product_classification.product_middle_category_medical_gas +msgid "Medical Gas" +msgstr "メドガス" + +#. module: product_classification +#: model:ir.actions.act_window,name:product_classification.product_middle_category_action +#: model:ir.ui.menu,name:product_classification.product_middle_category_menu +msgid "Middle Categories" +msgstr "中分類" + +#. module: product_classification +#: model:ir.model.fields,field_description:product_classification.field_product_product__middle_category_id +#: model:ir.model.fields,field_description:product_classification.field_product_template__middle_category_id +#: model_terms:ir.ui.view,arch_db:product_classification.product_template_view_search +msgid "Middle Category" +msgstr "中分類" + +#. module: product_classification +#: model:ir.model.fields,help:product_classification.field_product_product__middle_category_id +#: model:ir.model.fields,help:product_classification.field_product_template__middle_category_id +msgid "Middle-level product category." +msgstr "プロダクトの中分類。" + +#. module: product_classification +#: model:ir.actions.act_window,name:product_classification.product_minor_category_action +#: model:ir.ui.menu,name:product_classification.product_minor_category_menu +msgid "Minor Categories" +msgstr "小分類" + +#. module: product_classification +#: model:ir.model.fields,field_description:product_classification.field_product_product__minor_category_id +#: model:ir.model.fields,field_description:product_classification.field_product_template__minor_category_id +#: model_terms:ir.ui.view,arch_db:product_classification.product_template_view_search +msgid "Minor Category" +msgstr "小分類" + +#. module: product_classification +#: model:ir.model.fields,help:product_classification.field_product_product__minor_category_id +#: model:ir.model.fields,help:product_classification.field_product_template__minor_category_id +msgid "Minor-level product category." +msgstr "プロダクトの小分類。" + +#. module: product_classification +#: model:product.middle.category,name:product_classification.product_middle_category_nip +msgid "NIP" +msgstr "NIP" + +#. module: product_classification +#: model:ir.model.fields,field_description:product_classification.field_product_consumable_classification__name +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification__name +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification_sub__name +#: model:ir.model.fields,field_description:product_classification.field_product_manufacturer__name +#: model:ir.model.fields,field_description:product_classification.field_product_middle_category__name +#: model:ir.model.fields,field_description:product_classification.field_product_minor_category__name +msgid "Name" +msgstr "名称" + +#. module: product_classification +#: model:product.middle.category,name:product_classification.product_middle_category_non_teijin +msgid "Non-Teijin" +msgstr "帝人以外" + +#. module: product_classification +#: model:product.equipment.classification,name:product_classification.product_equipment_classification_other_aux +msgid "Other (Auxiliary Device)" +msgstr "その他(副装置)" + +#. module: product_classification +#: model:product.equipment.classification,name:product_classification.product_equipment_classification_other_medical +msgid "Other Medical Equipment" +msgstr "その他医療機器" + +#. module: product_classification +#: model:product.middle.category,name:product_classification.product_middle_category_own_use +msgid "Own Use" +msgstr "自社用" + +#. module: product_classification +#: model:product.equipment.classification,name:product_classification.product_equipment_classification_pca_pump +msgid "PCA Pump" +msgstr "PCAポンプ" + +#. module: product_classification +#: model:product.minor.category,name:product_classification.product_minor_category_patient_care +msgid "Patient Care Outsourcing" +msgstr "患者ケア業務委託" + +#. module: product_classification +#: model:product.equipment.classification,name:product_classification.product_equipment_classification_portable_oxygen +msgid "Portable Oxygen" +msgstr "携帯酸素" + +#. module: product_classification +#: model:ir.model.fields,help:product_classification.field_product_product__equipment_classification_id +#: model:ir.model.fields,help:product_classification.field_product_template__equipment_classification_id +msgid "" +"Primary classification of an equipment or accessory product. Used in the " +"Navi in Flow integration." +msgstr "機器または付属品プロダクトの主分類。ナビフロー連携で使用されます。" + +#. module: product_classification +#: model:ir.model,name:product_classification.model_product_template +msgid "Product" +msgstr "プロダクト" + +#. module: product_classification +#: model:ir.model,name:product_classification.model_product_consumable_classification +msgid "Product Consumable Classification" +msgstr "消耗品分類" + +#. module: product_classification +#: model:ir.model,name:product_classification.model_product_equipment_classification +msgid "Product Equipment Classification" +msgstr "機器分類" + +#. module: product_classification +#: model:ir.model,name:product_classification.model_product_equipment_classification_sub +msgid "Product Equipment Sub-Classification" +msgstr "機器分類サブ" + +#. module: product_classification +#: model:ir.model.fields,field_description:product_classification.field_product_product__product_kind +#: model:ir.model.fields,field_description:product_classification.field_product_template__product_kind +#: model_terms:ir.ui.view,arch_db:product_classification.product_template_view_search +msgid "Product Kind" +msgstr "プロダクト種別" + +#. module: product_classification +#: model:ir.model,name:product_classification.model_product_manufacturer +msgid "Product Manufacturer" +msgstr "メーカー" + +#. module: product_classification +#: model:ir.model,name:product_classification.model_product_middle_category +msgid "Product Middle Category" +msgstr "中分類" + +#. module: product_classification +#: model:ir.model,name:product_classification.model_product_minor_category +msgid "Product Minor Category" +msgstr "小分類" + +#. module: product_classification +#: model:product.equipment.classification,name:product_classification.product_equipment_classification_pulse_oximeter +msgid "Pulse Oximeter" +msgstr "パルスオキシメータ" + +#. module: product_classification +#: model:ir.model.fields,field_description:product_classification.field_product_consumable_classification__sequence +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification__sequence +#: model:ir.model.fields,field_description:product_classification.field_product_equipment_classification_sub__sequence +#: model:ir.model.fields,field_description:product_classification.field_product_manufacturer__sequence +#: model:ir.model.fields,field_description:product_classification.field_product_middle_category__sequence +#: model:ir.model.fields,field_description:product_classification.field_product_minor_category__sequence +msgid "Sequence" +msgstr "シーケンス" + +#. module: product_classification +#: model:ir.model.fields,help:product_classification.field_product_product__equipment_classification_sub_id +#: model:ir.model.fields,help:product_classification.field_product_template__equipment_classification_sub_id +msgid "" +"Sub-classification for auxiliary equipment or accessories. Used in the Navi " +"in Flow integration." +msgstr "補助機器または付属品のサブ分類。ナビフロー連携で使用されます。" + +#. module: product_classification +#: model:product.middle.category,name:product_classification.product_middle_category_teijin_use +msgid "Teijin Use" +msgstr "帝人用" + +#. module: product_classification +#: model:ir.model.constraint,message:product_classification.constraint_product_consumable_classification_code_uniq +msgid "The code of a consumable classification must be unique." +msgstr "消耗品分類のコードは一意である必要があります。" + +#. module: product_classification +#: model:ir.model.constraint,message:product_classification.constraint_product_manufacturer_code_uniq +msgid "The code of a manufacturer must be unique." +msgstr "メーカーのコードは一意である必要があります。" + +#. module: product_classification +#: model:ir.model.constraint,message:product_classification.constraint_product_middle_category_code_uniq +msgid "The code of a middle category must be unique." +msgstr "中分類のコードは一意である必要があります。" + +#. module: product_classification +#: model:ir.model.constraint,message:product_classification.constraint_product_minor_category_code_uniq +msgid "The code of a minor category must be unique." +msgstr "小分類のコードは一意である必要があります。" + +#. module: product_classification +#: model:ir.model.constraint,message:product_classification.constraint_product_equipment_classification_code_uniq +msgid "The code of an equipment classification must be unique." +msgstr "機器分類のコードは一意である必要があります。" + +#. module: product_classification +#: model:ir.model.constraint,message:product_classification.constraint_product_equipment_classification_sub_code_uniq +msgid "The code of an equipment sub-classification must be unique." +msgstr "機器分類サブのコードは一意である必要があります。" + +#. module: product_classification +#: model:product.minor.category,name:product_classification.product_minor_category_travel_support +msgid "Travel Support" +msgstr "旅行対応" + +#. module: product_classification +#: model:product.minor.category,name:product_classification.product_minor_category_tube +msgid "Tube" +msgstr "チューブ" + +#. module: product_classification +#: model:product.equipment.classification,name:product_classification.product_equipment_classification_ultrasonic_bone_healing +msgid "Ultrasonic Bone Healing Device" +msgstr "超音波骨折治療器" + +#. module: product_classification +#: model:ir.model.fields,help:product_classification.field_product_product__product_kind +#: model:ir.model.fields,help:product_classification.field_product_template__product_kind +msgid "" +"Whether the product is an equipment, an accessory or a consumable. Used in " +"the Navi in Flow integration." +msgstr "プロダクトが機器・付属品・消耗品のいずれか。ナビフロー連携で使用されます。" diff --git a/product_classification/models/__init__.py b/product_classification/models/__init__.py new file mode 100644 index 0000000..83983b8 --- /dev/null +++ b/product_classification/models/__init__.py @@ -0,0 +1,7 @@ +from . import product_equipment_classification +from . import product_equipment_classification_sub +from . import product_consumable_classification +from . import product_middle_category +from . import product_minor_category +from . import product_manufacturer +from . import product_template diff --git a/product_classification/models/product_consumable_classification.py b/product_classification/models/product_consumable_classification.py new file mode 100644 index 0000000..414a4bb --- /dev/null +++ b/product_classification/models/product_consumable_classification.py @@ -0,0 +1,22 @@ +# Copyright 2026 Quartile (https://www.quartile.co) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). + +from odoo import fields, models + + +class ProductConsumableClassification(models.Model): + _name = "product.consumable.classification" + _description = "Product Consumable Classification" + _order = "sequence, code, id" + + name = fields.Char(required=True, translate=True) + code = fields.Char( + help="External code used for integration. A numeric code is preferred." + ) + sequence = fields.Integer(default=10) + active = fields.Boolean(default=True) + + _code_uniq = models.Constraint( + "unique(code)", + "The code of a consumable classification must be unique.", + ) diff --git a/product_classification/models/product_equipment_classification.py b/product_classification/models/product_equipment_classification.py new file mode 100644 index 0000000..9657215 --- /dev/null +++ b/product_classification/models/product_equipment_classification.py @@ -0,0 +1,22 @@ +# Copyright 2026 Quartile (https://www.quartile.co) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). + +from odoo import fields, models + + +class ProductEquipmentClassification(models.Model): + _name = "product.equipment.classification" + _description = "Product Equipment Classification" + _order = "sequence, code, id" + + name = fields.Char(required=True, translate=True) + code = fields.Char( + help="External code used for integration. A numeric code is preferred." + ) + sequence = fields.Integer(default=10) + active = fields.Boolean(default=True) + + _code_uniq = models.Constraint( + "unique(code)", + "The code of an equipment classification must be unique.", + ) diff --git a/product_classification/models/product_equipment_classification_sub.py b/product_classification/models/product_equipment_classification_sub.py new file mode 100644 index 0000000..c580d22 --- /dev/null +++ b/product_classification/models/product_equipment_classification_sub.py @@ -0,0 +1,22 @@ +# Copyright 2026 Quartile (https://www.quartile.co) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). + +from odoo import fields, models + + +class ProductEquipmentClassificationSub(models.Model): + _name = "product.equipment.classification.sub" + _description = "Product Equipment Sub-Classification" + _order = "sequence, code, id" + + name = fields.Char(required=True, translate=True) + code = fields.Char( + help="External code used for integration. A numeric code is preferred." + ) + sequence = fields.Integer(default=10) + active = fields.Boolean(default=True) + + _code_uniq = models.Constraint( + "unique(code)", + "The code of an equipment sub-classification must be unique.", + ) diff --git a/product_classification/models/product_manufacturer.py b/product_classification/models/product_manufacturer.py new file mode 100644 index 0000000..54f73ff --- /dev/null +++ b/product_classification/models/product_manufacturer.py @@ -0,0 +1,22 @@ +# Copyright 2026 Quartile (https://www.quartile.co) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). + +from odoo import fields, models + + +class ProductManufacturer(models.Model): + _name = "product.manufacturer" + _description = "Product Manufacturer" + _order = "sequence, code, id" + + name = fields.Char(required=True, translate=True) + code = fields.Char( + help="External code used for integration. A numeric code is preferred." + ) + sequence = fields.Integer(default=10) + active = fields.Boolean(default=True) + + _code_uniq = models.Constraint( + "unique(code)", + "The code of a manufacturer must be unique.", + ) diff --git a/product_classification/models/product_middle_category.py b/product_classification/models/product_middle_category.py new file mode 100644 index 0000000..cf78d98 --- /dev/null +++ b/product_classification/models/product_middle_category.py @@ -0,0 +1,22 @@ +# Copyright 2026 Quartile (https://www.quartile.co) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). + +from odoo import fields, models + + +class ProductMiddleCategory(models.Model): + _name = "product.middle.category" + _description = "Product Middle Category" + _order = "sequence, code, id" + + name = fields.Char(required=True, translate=True) + code = fields.Char( + help="External code used for integration. A numeric code is preferred." + ) + sequence = fields.Integer(default=10) + active = fields.Boolean(default=True) + + _code_uniq = models.Constraint( + "unique(code)", + "The code of a middle category must be unique.", + ) diff --git a/product_classification/models/product_minor_category.py b/product_classification/models/product_minor_category.py new file mode 100644 index 0000000..0805599 --- /dev/null +++ b/product_classification/models/product_minor_category.py @@ -0,0 +1,22 @@ +# Copyright 2026 Quartile (https://www.quartile.co) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). + +from odoo import fields, models + + +class ProductMinorCategory(models.Model): + _name = "product.minor.category" + _description = "Product Minor Category" + _order = "sequence, code, id" + + name = fields.Char(required=True, translate=True) + code = fields.Char( + help="External code used for integration. A numeric code is preferred." + ) + sequence = fields.Integer(default=10) + active = fields.Boolean(default=True) + + _code_uniq = models.Constraint( + "unique(code)", + "The code of a minor category must be unique.", + ) diff --git a/product_classification/models/product_template.py b/product_classification/models/product_template.py new file mode 100644 index 0000000..9fd26a9 --- /dev/null +++ b/product_classification/models/product_template.py @@ -0,0 +1,50 @@ +# Copyright 2026 Quartile (https://www.quartile.co) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). + +from odoo import fields, models + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + product_kind = fields.Selection( + selection=[ + ("equipment", "Equipment"), + ("accessory", "Accessory"), + ("consumable", "Consumable"), + ], + help="Whether the product is an equipment, an accessory or a " + "consumable. Used in the Navi in Flow integration.", + ) + manufacturer_id = fields.Many2one( + comodel_name="product.manufacturer", + string="Manufacturer", + help="Manufacturer of the product. Used in the Navi in Flow integration.", + ) + equipment_classification_id = fields.Many2one( + comodel_name="product.equipment.classification", + string="Equipment Classification", + help="Primary classification of an equipment or accessory product. " + "Used in the Navi in Flow integration.", + ) + equipment_classification_sub_id = fields.Many2one( + comodel_name="product.equipment.classification.sub", + string="Equipment Sub-Classification", + help="Sub-classification for auxiliary equipment or accessories. " + "Used in the Navi in Flow integration.", + ) + consumable_classification_id = fields.Many2one( + comodel_name="product.consumable.classification", + string="Consumable Classification", + help="Classification of a consumable product.", + ) + middle_category_id = fields.Many2one( + comodel_name="product.middle.category", + string="Middle Category", + help="Middle-level product category.", + ) + minor_category_id = fields.Many2one( + comodel_name="product.minor.category", + string="Minor Category", + help="Minor-level product category.", + ) diff --git a/product_classification/pyproject.toml b/product_classification/pyproject.toml new file mode 100644 index 0000000..4231d0c --- /dev/null +++ b/product_classification/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/product_classification/readme/CONFIGURE.md b/product_classification/readme/CONFIGURE.md new file mode 100644 index 0000000..d633bde --- /dev/null +++ b/product_classification/readme/CONFIGURE.md @@ -0,0 +1,12 @@ +The module ships the classification models and configuration UI with only a +small set of sample equipment classifications, so the taxonomy can be tailored +to each deployment (for example through a company-specific data module or the +external integration). + +To maintain the available classifications: + +1. Go to *Inventory > Configuration > Products* and open *Equipment + Classifications*, *Equipment Sub-Classifications*, *Consumable + Classifications*, *Middle Categories*, *Minor Categories* or + *Manufacturers*. +2. Create the entries with a name and, preferably, a numeric code. diff --git a/product_classification/readme/DESCRIPTION.md b/product_classification/readme/DESCRIPTION.md new file mode 100644 index 0000000..b40748e --- /dev/null +++ b/product_classification/readme/DESCRIPTION.md @@ -0,0 +1,17 @@ +This module adds classification master data to products so equipment and +consumables can be categorized consistently. + +Each product can be flagged as **equipment** or **consumable** (*Product Kind*) +and linked to a **Manufacturer** (メーカー), then given a classification: + +- **Equipment Classification** (機器分類), with an **Equipment + Sub-Classification** (機器分類サブ) for auxiliary devices. +- **Consumable Classification** for consumable products. + +Products can also be given a **Middle Category** (中分類) and a **Minor +Category** (小分類). + +Each axis is backed by a dedicated, user-maintainable model holding a name and +an optional code (a numeric code is preferred for integration with external +systems). Several fields feed the **Navi in Flow** (ナビフロー) integration, +which exchanges product/equipment master data with the CIAS system. diff --git a/product_classification/readme/USAGE.md b/product_classification/readme/USAGE.md new file mode 100644 index 0000000..915be79 --- /dev/null +++ b/product_classification/readme/USAGE.md @@ -0,0 +1,9 @@ +To classify a product: + +1. Open a product and go to the *Classification* tab. +2. Set the **Product Kind** (equipment or consumable), the **Manufacturer** and + the relevant classification. The equipment or consumable classification + fields appear according to the selected kind. + +Products can be searched and filtered by manufacturer and classification from +the product list view. diff --git a/product_classification/security/ir.model.access.csv b/product_classification/security/ir.model.access.csv new file mode 100644 index 0000000..426fc92 --- /dev/null +++ b/product_classification/security/ir.model.access.csv @@ -0,0 +1,13 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_product_equipment_classification_user,product.equipment.classification user,model_product_equipment_classification,base.group_user,1,0,0,0 +access_product_equipment_classification_admin,product.equipment.classification admin,model_product_equipment_classification,base.group_system,1,1,1,1 +access_product_equipment_classification_sub_user,product.equipment.classification.sub user,model_product_equipment_classification_sub,base.group_user,1,0,0,0 +access_product_equipment_classification_sub_admin,product.equipment.classification.sub admin,model_product_equipment_classification_sub,base.group_system,1,1,1,1 +access_product_consumable_classification_user,product.consumable.classification user,model_product_consumable_classification,base.group_user,1,0,0,0 +access_product_consumable_classification_admin,product.consumable.classification admin,model_product_consumable_classification,base.group_system,1,1,1,1 +access_product_middle_category_user,product.middle.category user,model_product_middle_category,base.group_user,1,0,0,0 +access_product_middle_category_admin,product.middle.category admin,model_product_middle_category,base.group_system,1,1,1,1 +access_product_minor_category_user,product.minor.category user,model_product_minor_category,base.group_user,1,0,0,0 +access_product_minor_category_admin,product.minor.category admin,model_product_minor_category,base.group_system,1,1,1,1 +access_product_manufacturer_user,product.manufacturer user,model_product_manufacturer,base.group_user,1,0,0,0 +access_product_manufacturer_admin,product.manufacturer admin,model_product_manufacturer,base.group_system,1,1,1,1 diff --git a/product_classification/static/description/icon.png b/product_classification/static/description/icon.png new file mode 100644 index 0000000..5fbca9d Binary files /dev/null and b/product_classification/static/description/icon.png differ diff --git a/product_classification/static/description/index.html b/product_classification/static/description/index.html new file mode 100644 index 0000000..d2c2c3f --- /dev/null +++ b/product_classification/static/description/index.html @@ -0,0 +1,463 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + +
+

Product Classification

+ +

Beta License: LGPL-3 qrtl/OCJ Custom

+

This module adds classification master data to products so equipment and +consumables can be categorized consistently.

+

Each product can be flagged as equipment or consumable (Product +Kind) and linked to a Manufacturer (メーカー), then given a +classification:

+
    +
  • Equipment Classification (機器分類), with an Equipment +Sub-Classification (機器分類サブ) for auxiliary devices.
  • +
  • Consumable Classification for consumable products.
  • +
+

Products can also be given a Middle Category (中分類) and a Minor +Category (小分類).

+

Each axis is backed by a dedicated, user-maintainable model holding a +name and an optional code (a numeric code is preferred for integration +with external systems). Several fields feed the Navi in Flow +(ナビフロー) integration, which exchanges product/equipment master data +with the CIAS system.

+

Table of contents

+ +
+

Configuration

+

The module ships the classification models and configuration UI with +only a small set of sample equipment classifications, so the taxonomy +can be tailored to each deployment (for example through a +company-specific data module or the external integration).

+

To maintain the available classifications:

+
    +
  1. Go to Inventory > Configuration > Products and open Equipment +Classifications, Equipment Sub-Classifications, Consumable +Classifications, Middle Categories, Minor Categories or +Manufacturers.
  2. +
  3. Create the entries with a name and, preferably, a numeric code.
  4. +
+
+
+

Usage

+

To classify a product:

+
    +
  1. Open a product and go to the Classification tab.
  2. +
  3. Set the Product Kind (equipment or consumable), the +Manufacturer and the relevant classification. The equipment or +consumable classification fields appear according to the selected +kind.
  4. +
+

Products can be searched and filtered by manufacturer and classification +from the product list view.

+
+
+

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
  • +
+
+
+

Maintainers

+

Current maintainer:

+

yostashiro

+

This module is part of the qrtl/OCJ Custom project on GitHub.

+

You are welcome to contribute.

+
+
+
+
+ + diff --git a/product_classification/tests/__init__.py b/product_classification/tests/__init__.py new file mode 100644 index 0000000..aac08e9 --- /dev/null +++ b/product_classification/tests/__init__.py @@ -0,0 +1 @@ +from . import test_product_classification diff --git a/product_classification/tests/test_product_classification.py b/product_classification/tests/test_product_classification.py new file mode 100644 index 0000000..0a9bce1 --- /dev/null +++ b/product_classification/tests/test_product_classification.py @@ -0,0 +1,92 @@ +# Copyright 2026 Quartile (https://www.quartile.co) +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). + +from psycopg2 import IntegrityError + +from odoo.tests.common import TransactionCase +from odoo.tools import mute_logger + + +class TestProductClassification(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.classification = cls.env["product.equipment.classification"].create( + {"name": "Ventilator", "code": "100"} + ) + cls.classification_sub = cls.env["product.equipment.classification.sub"].create( + {"name": "Humidifier", "code": "200"} + ) + cls.consumable_classification = cls.env[ + "product.consumable.classification" + ].create({"name": "Mask", "code": "400"}) + cls.manufacturer = cls.env["product.manufacturer"].create( + {"name": "Acme Medical", "code": "300"} + ) + cls.product = cls.env["product.template"].create({"name": "Test Device"}) + + def test_assign_equipment_classifications(self): + self.product.write( + { + "product_kind": "equipment", + "manufacturer_id": self.manufacturer.id, + "equipment_classification_id": self.classification.id, + "equipment_classification_sub_id": self.classification_sub.id, + } + ) + self.assertEqual(self.product.product_kind, "equipment") + self.assertEqual(self.product.manufacturer_id, self.manufacturer) + self.assertEqual(self.product.equipment_classification_id, self.classification) + self.assertEqual( + self.product.equipment_classification_sub_id, self.classification_sub + ) + + def test_assign_accessory_classification(self): + self.product.write( + { + "product_kind": "accessory", + "equipment_classification_id": self.classification.id, + } + ) + self.assertEqual(self.product.product_kind, "accessory") + self.assertEqual(self.product.equipment_classification_id, self.classification) + + def test_assign_consumable_classification(self): + self.product.write( + { + "product_kind": "consumable", + "consumable_classification_id": self.consumable_classification.id, + } + ) + self.assertEqual(self.product.product_kind, "consumable") + self.assertEqual( + self.product.consumable_classification_id, self.consumable_classification + ) + + @mute_logger("odoo.sql_db") + def test_classification_code_unique(self): + with self.assertRaises(IntegrityError): + self.env["product.equipment.classification"].create( + {"name": "Duplicate", "code": "100"} + ) + + @mute_logger("odoo.sql_db") + def test_classification_sub_code_unique(self): + with self.assertRaises(IntegrityError): + self.env["product.equipment.classification.sub"].create( + {"name": "Duplicate", "code": "200"} + ) + + @mute_logger("odoo.sql_db") + def test_consumable_classification_code_unique(self): + with self.assertRaises(IntegrityError): + self.env["product.consumable.classification"].create( + {"name": "Duplicate", "code": "400"} + ) + + @mute_logger("odoo.sql_db") + def test_manufacturer_code_unique(self): + with self.assertRaises(IntegrityError): + self.env["product.manufacturer"].create( + {"name": "Duplicate", "code": "300"} + ) diff --git a/product_classification/views/product_consumable_classification_views.xml b/product_classification/views/product_consumable_classification_views.xml new file mode 100644 index 0000000..1acf6ed --- /dev/null +++ b/product_classification/views/product_consumable_classification_views.xml @@ -0,0 +1,69 @@ + + + + product.consumable.classification.list + product.consumable.classification + + + + + + + + + + + product.consumable.classification.form + product.consumable.classification + +
+ + + + + + + + + + + +
+
+
+ + + product.consumable.classification.search + product.consumable.classification + + + + + + + + + + + + Consumable Classifications + product.consumable.classification + list,form + + + +
diff --git a/product_classification/views/product_equipment_classification_sub_views.xml b/product_classification/views/product_equipment_classification_sub_views.xml new file mode 100644 index 0000000..be81b42 --- /dev/null +++ b/product_classification/views/product_equipment_classification_sub_views.xml @@ -0,0 +1,72 @@ + + + + product.equipment.classification.sub.list + product.equipment.classification.sub + + + + + + + + + + + product.equipment.classification.sub.form + product.equipment.classification.sub + +
+ + + + + + + + + + + +
+
+
+ + + product.equipment.classification.sub.search + product.equipment.classification.sub + + + + + + + + + + + + Equipment Sub-Classifications + product.equipment.classification.sub + list,form + + + +
diff --git a/product_classification/views/product_equipment_classification_views.xml b/product_classification/views/product_equipment_classification_views.xml new file mode 100644 index 0000000..3fc9a39 --- /dev/null +++ b/product_classification/views/product_equipment_classification_views.xml @@ -0,0 +1,69 @@ + + + + product.equipment.classification.list + product.equipment.classification + + + + + + + + + + + product.equipment.classification.form + product.equipment.classification + +
+ + + + + + + + + + + +
+
+
+ + + product.equipment.classification.search + product.equipment.classification + + + + + + + + + + + + Equipment Classifications + product.equipment.classification + list,form + + + +
diff --git a/product_classification/views/product_manufacturer_views.xml b/product_classification/views/product_manufacturer_views.xml new file mode 100644 index 0000000..9c490d0 --- /dev/null +++ b/product_classification/views/product_manufacturer_views.xml @@ -0,0 +1,69 @@ + + + + product.manufacturer.list + product.manufacturer + + + + + + + + + + + product.manufacturer.form + product.manufacturer + +
+ + + + + + + + + + + +
+
+
+ + + product.manufacturer.search + product.manufacturer + + + + + + + + + + + + Manufacturers + product.manufacturer + list,form + + + +
diff --git a/product_classification/views/product_middle_category_views.xml b/product_classification/views/product_middle_category_views.xml new file mode 100644 index 0000000..f097c8a --- /dev/null +++ b/product_classification/views/product_middle_category_views.xml @@ -0,0 +1,27 @@ + + + + product.middle.category.list + product.middle.category + + + + + + + + + + + Middle Categories + product.middle.category + list + + + + diff --git a/product_classification/views/product_minor_category_views.xml b/product_classification/views/product_minor_category_views.xml new file mode 100644 index 0000000..de9c97e --- /dev/null +++ b/product_classification/views/product_minor_category_views.xml @@ -0,0 +1,27 @@ + + + + product.minor.category.list + product.minor.category + + + + + + + + + + + Minor Categories + product.minor.category + list + + + + diff --git a/product_classification/views/product_template_views.xml b/product_classification/views/product_template_views.xml new file mode 100644 index 0000000..66895c2 --- /dev/null +++ b/product_classification/views/product_template_views.xml @@ -0,0 +1,117 @@ + + + + product.template.form.classification + product.template + + + + + + + + + + + + + + + + + + + + + + + + product.template.search.classification + product.template + + + + + + + + + + + + + + + + + + + + + + + + + +