diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/README.md b/odoo-bringout-oca-iot-iot_amqp_oca/README.md deleted file mode 100644 index 62b86696..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# IoT AMQP - -Odoo addon: iot_amqp_oca - -## Installation - -```bash -pip install odoo-bringout-oca-iot-iot_amqp_oca -``` - -## Dependencies - -This addon depends on: -- iot_output_oca - -## Manifest Information - -- **Name**: IoT AMQP -- **Version**: 16.0.1.0.0 -- **Category**: IoT -- **License**: AGPL-3 -- **Installable**: True - -## Source - -Based on [OCA/iot](https://github.com/OCA/iot) branch 16.0, addon `iot_amqp_oca`. - -## License - -This package maintains the original AGPL-3 license from the upstream Odoo project. - -## Documentation - -- Overview: doc/OVERVIEW.md -- Architecture: doc/ARCHITECTURE.md -- Models: doc/MODELS.md -- Controllers: doc/CONTROLLERS.md -- Wizards: doc/WIZARDS.md -- Install: doc/INSTALL.md -- Usage: doc/USAGE.md -- Configuration: doc/CONFIGURATION.md -- Dependencies: doc/DEPENDENCIES.md -- Troubleshooting: doc/TROUBLESHOOTING.md -- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/doc/ARCHITECTURE.md b/odoo-bringout-oca-iot-iot_amqp_oca/doc/ARCHITECTURE.md deleted file mode 100644 index 61b3c8cf..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/doc/ARCHITECTURE.md +++ /dev/null @@ -1,32 +0,0 @@ -# Architecture - -```mermaid -flowchart TD - U[Users] -->|HTTP| V[Views and QWeb Templates] - V --> C[Controllers] - V --> W[Wizards – Transient Models] - C --> M[Models and ORM] - W --> M - M --> R[Reports] - DX[Data XML] --> M - S[Security – ACLs and Groups] -. enforces .-> M - - subgraph Iot_amqp_oca Module - iot_amqp_oca - direction LR - M:::layer - W:::layer - C:::layer - V:::layer - R:::layer - S:::layer - DX:::layer - end - - classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px -``` - -Notes -- Views include tree/form/kanban templates and report templates. -- Controllers provide website/portal routes when present. -- Wizards are UI flows implemented with `models.TransientModel`. -- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/doc/CONFIGURATION.md b/odoo-bringout-oca-iot-iot_amqp_oca/doc/CONFIGURATION.md deleted file mode 100644 index 95e2b6cb..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/doc/CONFIGURATION.md +++ /dev/null @@ -1,3 +0,0 @@ -# Configuration - -Refer to Odoo settings for iot_amqp_oca. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/doc/CONTROLLERS.md b/odoo-bringout-oca-iot-iot_amqp_oca/doc/CONTROLLERS.md deleted file mode 100644 index f628e770..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/doc/CONTROLLERS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Controllers - -This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/doc/DEPENDENCIES.md b/odoo-bringout-oca-iot-iot_amqp_oca/doc/DEPENDENCIES.md deleted file mode 100644 index 5db18dd3..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/doc/DEPENDENCIES.md +++ /dev/null @@ -1,5 +0,0 @@ -# Dependencies - -This addon depends on: - -- [iot_output_oca](https://github.com/bringout/oca-technical) diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/doc/FAQ.md b/odoo-bringout-oca-iot-iot_amqp_oca/doc/FAQ.md deleted file mode 100644 index 64e08dc6..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/doc/FAQ.md +++ /dev/null @@ -1,4 +0,0 @@ -# FAQ - -- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged). -- Q: How to enable? A: Start server with --addon iot_amqp_oca or install in UI. diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/doc/INSTALL.md b/odoo-bringout-oca-iot-iot_amqp_oca/doc/INSTALL.md deleted file mode 100644 index 96cafac9..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/doc/INSTALL.md +++ /dev/null @@ -1,7 +0,0 @@ -# Install - -```bash -pip install odoo-bringout-oca-iot-iot_amqp_oca" -# or -uv pip install odoo-bringout-oca-iot-iot_amqp_oca" -``` diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/doc/MODELS.md b/odoo-bringout-oca-iot-iot_amqp_oca/doc/MODELS.md deleted file mode 100644 index adf67e04..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/doc/MODELS.md +++ /dev/null @@ -1,15 +0,0 @@ -# Models - -Detected core models and extensions in iot_amqp_oca. - -```mermaid -classDiagram - class iot_amqp_host - class iot_communication_system_action - class iot_device_output - class iot_device_output_action -``` - -Notes -- Classes show model technical names; fields omitted for brevity. -- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/doc/OVERVIEW.md b/odoo-bringout-oca-iot-iot_amqp_oca/doc/OVERVIEW.md deleted file mode 100644 index 06b505f6..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/doc/OVERVIEW.md +++ /dev/null @@ -1,6 +0,0 @@ -# Overview - -Packaged Odoo addon: iot_amqp_oca. Provides features documented in upstream Odoo 16 under this addon. - -- Source: OCA/OCB 16.0, addon iot_amqp_oca -- License: LGPL-3 diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/doc/REPORTS.md b/odoo-bringout-oca-iot-iot_amqp_oca/doc/REPORTS.md deleted file mode 100644 index e0ea35fb..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/doc/REPORTS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Reports - -This module does not define custom reports. diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/doc/SECURITY.md b/odoo-bringout-oca-iot-iot_amqp_oca/doc/SECURITY.md deleted file mode 100644 index 866376c6..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/doc/SECURITY.md +++ /dev/null @@ -1,34 +0,0 @@ -# Security - -Access control and security definitions in iot_amqp_oca. - -## Access Control Lists (ACLs) - -Model access permissions defined in: -- **[ir.model.access.csv](../iot_amqp_oca/security/ir.model.access.csv)** - - 2 model access rules - -## Record Rules - -Row-level security rules defined in: - -```mermaid -graph TB - subgraph "Security Layers" - A[Users] --> B[Groups] - B --> C[Access Control Lists] - C --> D[Models] - B --> E[Record Rules] - E --> F[Individual Records] - end -``` - -Security files overview: -- **[ir.model.access.csv](../iot_amqp_oca/security/ir.model.access.csv)** - - Model access permissions (CRUD rights) - -Notes -- Access Control Lists define which groups can access which models -- Record Rules provide row-level security (filter records by user/group) -- Security groups organize users and define permission sets -- All security is enforced at the ORM level by Odoo diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-iot-iot_amqp_oca/doc/TROUBLESHOOTING.md deleted file mode 100644 index 56853cb7..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/doc/TROUBLESHOOTING.md +++ /dev/null @@ -1,5 +0,0 @@ -# Troubleshooting - -- Ensure Python and Odoo environment matches repo guidance. -- Check database connectivity and logs if startup fails. -- Validate that dependent addons listed in DEPENDENCIES.md are installed. diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/doc/USAGE.md b/odoo-bringout-oca-iot-iot_amqp_oca/doc/USAGE.md deleted file mode 100644 index 8c486682..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/doc/USAGE.md +++ /dev/null @@ -1,7 +0,0 @@ -# Usage - -Start Odoo including this addon (from repo root): - -```bash -python3 scripts/nix_odoo_web_server.py --db-name mydb --addon iot_amqp_oca -``` diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/doc/WIZARDS.md b/odoo-bringout-oca-iot-iot_amqp_oca/doc/WIZARDS.md deleted file mode 100644 index 48e790dc..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/doc/WIZARDS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Wizards - -This module does not include UI wizards. diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/README.rst b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/README.rst deleted file mode 100644 index 2c8dced5..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/README.rst +++ /dev/null @@ -1,80 +0,0 @@ -======== -IoT AMQP -======== - -.. - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! This file is generated by oca-gen-addon-readme !! - !! changes will be overwritten. !! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:906fa0b02813f40ecaaf8f4b48261919b2f1ee30a29ac68ad2f4ea6d0165a24d - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -.. |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-OCA%2Fiot-lightgray.png?logo=github - :target: https://github.com/OCA/iot/tree/16.0/iot_amqp_oca - :alt: OCA/iot -.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/iot-16-0/iot-16-0-iot_amqp_oca - :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/iot&target_branch=16.0 - :alt: Try me on Runboat - -|badge1| |badge2| |badge3| |badge4| |badge5| - -This addon defines AMQP as an integration option with a device. - -With AMQP, we will send and AMQP message to a broker that will send it to the -device. -Then, the device will do the expected action. - -**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 -~~~~~~~ - -* Creu Blanca - -Contributors -~~~~~~~~~~~~ - -* Enric Tobella - -Maintainers -~~~~~~~~~~~ - -This module is maintained by the OCA. - -.. image:: https://odoo-community.org/logo.png - :alt: Odoo Community Association - :target: https://odoo-community.org - -OCA, or the Odoo Community Association, is a nonprofit organization whose -mission is to support the collaborative development of Odoo features and -promote its widespread use. - -This module is part of the `OCA/iot `_ project on GitHub. - -You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/__init__.py b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/__init__.py deleted file mode 100644 index 0650744f..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import models diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/__manifest__.py b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/__manifest__.py deleted file mode 100644 index 4ea8cd87..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/__manifest__.py +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (C) 2018 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -{ - "name": "IoT AMQP", - "version": "16.0.1.0.0", - "category": "IoT", - "author": "Creu Blanca, Odoo Community Association (OCA)", - "license": "AGPL-3", - "installable": True, - "summary": "Integrate Iot Outputs with AMQP", - "depends": ["iot_output_oca"], - "external_dependencies": {"python": ["pika"]}, - "website": "https://github.com/OCA/iot", - "data": [ - "security/ir.model.access.csv", - "views/iot_amqp_host.xml", - "data/system_data.xml", - "views/iot_device_output_views.xml", - ], -} diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/data/system_data.xml b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/data/system_data.xml deleted file mode 100644 index 1071c322..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/data/system_data.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - AMQP - output - - - - amqp - - diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/i18n/bs.po b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/i18n/bs.po deleted file mode 100644 index 2bb7620d..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/i18n/bs.po +++ /dev/null @@ -1,140 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_amqp -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: iot_amqp -#: model:ir.ui.menu,name:iot_amqp.iot_amqp_host_menu -msgid "AMQP Hosts" -msgstr "AMQP hostovi" - -#. module: iot_amqp -#: model_terms:ir.ui.view,arch_db:iot_amqp.iot_device_output_form -msgid "AMQP configuration" -msgstr "AMQP konfiguracija" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host__active -msgid "Active" -msgstr "Aktivan" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_device_output__amqp_exchange -msgid "Amqp Exchange" -msgstr "Amqp exchange" - -#. module: iot_amqp -#: model:ir.actions.act_window,name:iot_amqp.iot_amqp_host_act_window -#: model:ir.model,name:iot_amqp.model_iot_amqp_host -#: model:ir.model.fields,field_description:iot_amqp.field_iot_device_output__amqp_host_id -msgid "Amqp Host" -msgstr "Amqp host" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_device_output__amqp_payload -msgid "Amqp Payload" -msgstr "Amqp payload" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_device_output__amqp_routing_key -msgid "Amqp Routing Key" -msgstr "Amqp routing ključ" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host__connection -msgid "Connection" -msgstr "Konekcija" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host__create_uid -msgid "Created by" -msgstr "Kreirao" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host__create_date -msgid "Created on" -msgstr "Kreirano" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host__display_name -msgid "Display Name" -msgstr "Prikazani naziv" - -#. module: iot_amqp -#: code:addons/iot_amqp/models/iot_device_output.py:23 -#, python-format -msgid "Exchange is required" -msgstr "Exchange je potreban" - -#. module: iot_amqp -#: code:addons/iot_amqp/models/iot_device_output.py:31 -#, python-format -msgid "Host is required" -msgstr "Host je potreban" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host__id -msgid "ID" -msgstr "ID" - -#. module: iot_amqp -#: model:ir.model,name:iot_amqp.model_iot_device_output_action -msgid "IoT Action" -msgstr "IoT akcija" - -#. module: iot_amqp -#: model:ir.model,name:iot_amqp.model_iot_device_output -msgid "IoT Device" -msgstr "IoT uređaj" - -#. module: iot_amqp -#: model:ir.model,name:iot_amqp.model_iot_system_action -msgid "IoT System.action" -msgstr "IoT sistem.akcija" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host____last_update -msgid "Last Modified on" -msgstr "Zadnje mijenjano" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host__write_uid -msgid "Last Updated by" -msgstr "Zadnji ažurirao" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host__write_date -msgid "Last Updated on" -msgstr "Zadnje ažurirano" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host__name -msgid "Name" -msgstr "Naziv:" - -#. module: iot_amqp -#: code:addons/iot_amqp/models/iot_device_output.py:27 -#, python-format -msgid "Routing Key is required" -msgstr "Routing ključ je potreban" - -#. module: iot_amqp -#: model_terms:ir.ui.view,arch_db:iot_amqp.iot_device_output_form -msgid "Run" -msgstr "Pokrenut" - -#. module: iot_amqp -#: model_terms:ir.ui.view,arch_db:iot_amqp.iot_amqp_host_form_view -msgid "amqp://USER:PASS@HOST" -msgstr "amqp://KORISNIK:LOZINKA@HOST" - diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/i18n/iot_amqp.pot b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/i18n/iot_amqp.pot deleted file mode 100644 index 17746527..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/i18n/iot_amqp.pot +++ /dev/null @@ -1,140 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_amqp -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: iot_amqp -#: model:ir.ui.menu,name:iot_amqp.iot_amqp_host_menu -msgid "AMQP Hosts" -msgstr "" - -#. module: iot_amqp -#: model_terms:ir.ui.view,arch_db:iot_amqp.iot_device_output_form -msgid "AMQP configuration" -msgstr "" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host__active -msgid "Active" -msgstr "" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_device_output__amqp_exchange -msgid "Amqp Exchange" -msgstr "" - -#. module: iot_amqp -#: model:ir.actions.act_window,name:iot_amqp.iot_amqp_host_act_window -#: model:ir.model,name:iot_amqp.model_iot_amqp_host -#: model:ir.model.fields,field_description:iot_amqp.field_iot_device_output__amqp_host_id -msgid "Amqp Host" -msgstr "" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_device_output__amqp_payload -msgid "Amqp Payload" -msgstr "" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_device_output__amqp_routing_key -msgid "Amqp Routing Key" -msgstr "" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host__connection -msgid "Connection" -msgstr "" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host__create_uid -msgid "Created by" -msgstr "" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host__create_date -msgid "Created on" -msgstr "" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host__display_name -msgid "Display Name" -msgstr "" - -#. module: iot_amqp -#: code:addons/iot_amqp/models/iot_device_output.py:23 -#, python-format -msgid "Exchange is required" -msgstr "" - -#. module: iot_amqp -#: code:addons/iot_amqp/models/iot_device_output.py:31 -#, python-format -msgid "Host is required" -msgstr "" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host__id -msgid "ID" -msgstr "" - -#. module: iot_amqp -#: model:ir.model,name:iot_amqp.model_iot_device_output_action -msgid "IoT Action" -msgstr "" - -#. module: iot_amqp -#: model:ir.model,name:iot_amqp.model_iot_device_output -msgid "IoT Device" -msgstr "" - -#. module: iot_amqp -#: model:ir.model,name:iot_amqp.model_iot_system_action -msgid "IoT System.action" -msgstr "" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host____last_update -msgid "Last Modified on" -msgstr "" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host__write_uid -msgid "Last Updated by" -msgstr "" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host__write_date -msgid "Last Updated on" -msgstr "" - -#. module: iot_amqp -#: model:ir.model.fields,field_description:iot_amqp.field_iot_amqp_host__name -msgid "Name" -msgstr "" - -#. module: iot_amqp -#: code:addons/iot_amqp/models/iot_device_output.py:27 -#, python-format -msgid "Routing Key is required" -msgstr "" - -#. module: iot_amqp -#: model_terms:ir.ui.view,arch_db:iot_amqp.iot_device_output_form -msgid "Run" -msgstr "" - -#. module: iot_amqp -#: model_terms:ir.ui.view,arch_db:iot_amqp.iot_amqp_host_form_view -msgid "amqp://USER:PASS@HOST" -msgstr "" - diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/i18n/iot_amqp_oca.pot b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/i18n/iot_amqp_oca.pot deleted file mode 100644 index c181b97c..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/i18n/iot_amqp_oca.pot +++ /dev/null @@ -1,142 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_amqp_oca -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: iot_amqp_oca -#: model:ir.ui.menu,name:iot_amqp_oca.iot_amqp_host_menu -msgid "AMQP Hosts" -msgstr "" - -#. module: iot_amqp_oca -#: model_terms:ir.ui.view,arch_db:iot_amqp_oca.iot_device_output_form -msgid "AMQP configuration" -msgstr "" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host__active -msgid "Active" -msgstr "" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_device_output__amqp_exchange -msgid "Amqp Exchange" -msgstr "" - -#. module: iot_amqp_oca -#: model:ir.actions.act_window,name:iot_amqp_oca.iot_amqp_host_act_window -#: model:ir.model,name:iot_amqp_oca.model_iot_amqp_host -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_device_output__amqp_host_id -msgid "Amqp Host" -msgstr "" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_device_output__amqp_payload -msgid "Amqp Payload" -msgstr "" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_device_output__amqp_routing_key -msgid "Amqp Routing Key" -msgstr "" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host__connection -msgid "Connection" -msgstr "" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host__create_uid -msgid "Created by" -msgstr "" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host__create_date -msgid "Created on" -msgstr "" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host__display_name -msgid "Display Name" -msgstr "" - -#. module: iot_amqp_oca -#. odoo-python -#: code:addons/iot_amqp_oca/models/iot_device_output.py:0 -#, python-format -msgid "Exchange is required" -msgstr "" - -#. module: iot_amqp_oca -#. odoo-python -#: code:addons/iot_amqp_oca/models/iot_device_output.py:0 -#, python-format -msgid "Host is required" -msgstr "" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host__id -msgid "ID" -msgstr "" - -#. module: iot_amqp_oca -#: model:ir.model,name:iot_amqp_oca.model_iot_device_output_action -msgid "IoT Action" -msgstr "" - -#. module: iot_amqp_oca -#: model:ir.model,name:iot_amqp_oca.model_iot_communication_system_action -msgid "IoT Communication System action" -msgstr "" - -#. module: iot_amqp_oca -#: model:ir.model,name:iot_amqp_oca.model_iot_device_output -msgid "IoT Device" -msgstr "" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host____last_update -msgid "Last Modified on" -msgstr "" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host__write_uid -msgid "Last Updated by" -msgstr "" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host__write_date -msgid "Last Updated on" -msgstr "" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host__name -msgid "Name" -msgstr "" - -#. module: iot_amqp_oca -#. odoo-python -#: code:addons/iot_amqp_oca/models/iot_device_output.py:0 -#, python-format -msgid "Routing Key is required" -msgstr "" - -#. module: iot_amqp_oca -#: model_terms:ir.ui.view,arch_db:iot_amqp_oca.iot_device_output_form -msgid "Run" -msgstr "" - -#. module: iot_amqp_oca -#: model_terms:ir.ui.view,arch_db:iot_amqp_oca.iot_amqp_host_form_view -msgid "amqp://USER:PASS@HOST" -msgstr "" diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/i18n/it.po b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/i18n/it.po deleted file mode 100644 index 261e2658..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/i18n/it.po +++ /dev/null @@ -1,145 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_amqp_oca -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-07-12 12:09+0000\n" -"Last-Translator: Francesco Foresti \n" -"Language-Team: none\n" -"Language: it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.17\n" - -#. module: iot_amqp_oca -#: model:ir.ui.menu,name:iot_amqp_oca.iot_amqp_host_menu -msgid "AMQP Hosts" -msgstr "Host AMQP" - -#. module: iot_amqp_oca -#: model_terms:ir.ui.view,arch_db:iot_amqp_oca.iot_device_output_form -msgid "AMQP configuration" -msgstr "Configurazione AMQP" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host__active -msgid "Active" -msgstr "Attivo" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_device_output__amqp_exchange -msgid "Amqp Exchange" -msgstr "Comunicazione AMQP" - -#. module: iot_amqp_oca -#: model:ir.actions.act_window,name:iot_amqp_oca.iot_amqp_host_act_window -#: model:ir.model,name:iot_amqp_oca.model_iot_amqp_host -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_device_output__amqp_host_id -msgid "Amqp Host" -msgstr "Host AMQP" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_device_output__amqp_payload -msgid "Amqp Payload" -msgstr "Contenuto AMQP" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_device_output__amqp_routing_key -msgid "Amqp Routing Key" -msgstr "Chiave instradamento AMQP" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host__connection -msgid "Connection" -msgstr "Connessione" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host__create_uid -msgid "Created by" -msgstr "Creato da" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host__create_date -msgid "Created on" -msgstr "Creato il" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host__display_name -msgid "Display Name" -msgstr "Nome visualizzato" - -#. module: iot_amqp_oca -#. odoo-python -#: code:addons/iot_amqp_oca/models/iot_device_output.py:0 -#, python-format -msgid "Exchange is required" -msgstr "Richiesta comunicazione" - -#. module: iot_amqp_oca -#. odoo-python -#: code:addons/iot_amqp_oca/models/iot_device_output.py:0 -#, python-format -msgid "Host is required" -msgstr "Richiesto host" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host__id -msgid "ID" -msgstr "ID" - -#. module: iot_amqp_oca -#: model:ir.model,name:iot_amqp_oca.model_iot_device_output_action -msgid "IoT Action" -msgstr "Azione IoT" - -#. module: iot_amqp_oca -#: model:ir.model,name:iot_amqp_oca.model_iot_communication_system_action -msgid "IoT Communication System action" -msgstr "Azione sisterma comunicazione IoT" - -#. module: iot_amqp_oca -#: model:ir.model,name:iot_amqp_oca.model_iot_device_output -msgid "IoT Device" -msgstr "Dispositivo IoT" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host____last_update -msgid "Last Modified on" -msgstr "Ultima modifica il" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host__write_uid -msgid "Last Updated by" -msgstr "Ultimo aggiornamento di" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host__write_date -msgid "Last Updated on" -msgstr "Ultimo aggiornamento il" - -#. module: iot_amqp_oca -#: model:ir.model.fields,field_description:iot_amqp_oca.field_iot_amqp_host__name -msgid "Name" -msgstr "Nome" - -#. module: iot_amqp_oca -#. odoo-python -#: code:addons/iot_amqp_oca/models/iot_device_output.py:0 -#, python-format -msgid "Routing Key is required" -msgstr "Richiesta chiave instradamento" - -#. module: iot_amqp_oca -#: model_terms:ir.ui.view,arch_db:iot_amqp_oca.iot_device_output_form -msgid "Run" -msgstr "Esegui" - -#. module: iot_amqp_oca -#: model_terms:ir.ui.view,arch_db:iot_amqp_oca.iot_amqp_host_form_view -msgid "amqp://USER:PASS@HOST" -msgstr "amqp://USER:PASS@HOST" diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/models/__init__.py b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/models/__init__.py deleted file mode 100644 index f9e86bee..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/models/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from . import iot_amqp_host -from . import iot_device_output -from . import iot_communication_system_action -from . import iot_device_output_action diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/models/iot_amqp_host.py b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/models/iot_amqp_host.py deleted file mode 100644 index eaa617d3..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/models/iot_amqp_host.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright 2020 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import fields, models - - -class IotAmqpHost(models.Model): - _name = "iot.amqp.host" - _description = "Amqp Host" - - name = fields.Char(required=True) - connection = fields.Char() - active = fields.Boolean(default=True) diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/models/iot_communication_system_action.py b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/models/iot_communication_system_action.py deleted file mode 100644 index d888ed39..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/models/iot_communication_system_action.py +++ /dev/null @@ -1,10 +0,0 @@ -from odoo import models - - -class IoTCommunicationSystemAction(models.Model): - _inherit = "iot.communication.system.action" - - def _run(self, device_action): - if self != self.env.ref("iot_amqp_oca.amqp_action"): - return super()._run(device_action) - device_action._run_amqp() diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/models/iot_device_output.py b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/models/iot_device_output.py deleted file mode 100644 index 4409b916..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/models/iot_device_output.py +++ /dev/null @@ -1,27 +0,0 @@ -from odoo import _, api, fields, models -from odoo.exceptions import ValidationError - - -class IotDeviceOutput(models.Model): - _inherit = "iot.device.output" - - amqp_exchange = fields.Char() - amqp_routing_key = fields.Char() - amqp_payload = fields.Char() - amqp_host_id = fields.Many2one( - "iot.amqp.host", - ) - - @api.constrains( - "amqp_exchange", "amqp_routing_key", "amqp_host_id", "communication_system_id" - ) - def _check_amqp(self): - amqp_system = self.env.ref("iot_amqp_oca.amqp_system") - for rec in self: - if rec.communication_system_id == amqp_system: - if not rec.amqp_exchange: - raise ValidationError(_("Exchange is required")) - if not rec.amqp_routing_key: - raise ValidationError(_("Routing Key is required")) - if not rec.amqp_host_id: - raise ValidationError(_("Host is required")) diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/models/iot_device_output_action.py b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/models/iot_device_output_action.py deleted file mode 100644 index dbf05830..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/models/iot_device_output_action.py +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright 2020 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -import logging - -from odoo import models - -_logger = logging.getLogger(__name__) -try: - from pika import BlockingConnection, URLParameters, spec -except (ImportError, IOError) as err: - _logger.debug(err) - - -class IotDeviceOutputAction(models.Model): - _inherit = "iot.device.output.action" - - def _run_amqp(self): - url = self.output_id.amqp_host_id.connection - connection = BlockingConnection(URLParameters(url)) - channel = connection.channel() - result = channel.basic_publish(**self._generate_amqp_data()) - _logger.debug(result) - connection.close() - - def _generate_amqp_data(self): - return { - "exchange": self.output_id.amqp_exchange, - "routing_key": self.output_id.amqp_routing_key, - "body": self.output_id.amqp_payload, - "properties": spec.BasicProperties(), - "mandatory": False, - } diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/readme/CONTRIBUTORS.rst deleted file mode 100644 index 93ec993e..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1 +0,0 @@ -* Enric Tobella diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/readme/DESCRIPTION.rst b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/readme/DESCRIPTION.rst deleted file mode 100644 index f291b3f1..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/readme/DESCRIPTION.rst +++ /dev/null @@ -1,5 +0,0 @@ -This addon defines AMQP as an integration option with a device. - -With AMQP, we will send and AMQP message to a broker that will send it to the -device. -Then, the device will do the expected action. diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/security/ir.model.access.csv b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/security/ir.model.access.csv deleted file mode 100644 index e5d8a4aa..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/security/ir.model.access.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_iot_amqp_host,access_iot_amqp_host,model_iot_amqp_host,iot_oca.group_iot_user,1,0,0,0 -manage_iot_amqp_host,manage_iot_amqp_host,model_iot_amqp_host,iot_oca.group_iot_manager,1,1,1,0 diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/static/description/icon.png b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/static/description/icon.png deleted file mode 100644 index da43f6f0..00000000 Binary files a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/static/description/icon.png and /dev/null differ diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/static/description/index.html b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/static/description/index.html deleted file mode 100644 index 0878bcc5..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/static/description/index.html +++ /dev/null @@ -1,426 +0,0 @@ - - - - - -IoT AMQP - - - -
-

IoT AMQP

- - -

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

-

This addon defines AMQP as an integration option with a device.

-

With AMQP, we will send and AMQP message to a broker that will send it to the -device. -Then, the device will do the expected action.

-

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

-
    -
  • Creu Blanca
  • -
-
-
-

Contributors

- -
-
-

Maintainers

-

This module is maintained by the OCA.

- -Odoo Community Association - -

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

-

This module is part of the OCA/iot project on GitHub.

-

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

-
-
-
- - diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/tests/__init__.py b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/tests/__init__.py deleted file mode 100644 index 75c86abd..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/tests/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from . import test_amqp -from odoo.addons.iot_output_oca.tests import test_iot - -# We want to test original tests in order to ensure that all works as expected diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/tests/test_amqp.py b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/tests/test_amqp.py deleted file mode 100644 index 0288247f..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/tests/test_amqp.py +++ /dev/null @@ -1,84 +0,0 @@ -# Copyright 2020 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from unittest.mock import patch - -from odoo.exceptions import ValidationError -from odoo.tests.common import TransactionCase - - -class TestChannel: - def __init__(self, test, output, *args, **kwargs): - self.test = test - self.output = output - self.kwargs = kwargs - self.args = args - - def basic_publish( - self, exchange, routing_key, body, properties=None, mandatory=False - ): - self.test.assertEqual(exchange, self.output.amqp_exchange) - self.test.assertEqual(routing_key, self.output.amqp_routing_key) - self.test.assertEqual(body, self.output.amqp_payload) - - -class TestBlockingConnection: - def __init__(self, test, output, *args, **kwargs): - self.test = test - self.output = output - self.kwargs = kwargs - self.args = args - - def connect(self, hostname, port, username, password): - return - - def channel(self): - return TestChannel(self.test, self.output, *self.args, **self.kwargs) - - def close(self): - pass - - -class TestAmqp(TransactionCase): - def setUp(self): - super().setUp() - self.host = self.env["iot.amqp.host"].create( - {"name": "Host", "connection": "amqp://demo_connection"} - ) - self.device = self.env["iot.device"].create({"name": "Device"}) - self.system = self.env.ref("iot_amqp_oca.amqp_system") - self.action = self.env.ref("iot_amqp_oca.amqp_action") - self.output = self.env["iot.device.output"].create( - { - "communication_system_id": self.system.id, - "device_id": self.device.id, - "name": "Output", - "amqp_exchange": "EXCHANGE", - "amqp_routing_key": "ROUTING_KEY", - "amqp_host_id": self.host.id, - "amqp_payload": "PAYLOAD", - } - ) - - def test_constrain_01(self): - with self.assertRaises(ValidationError): - self.output.amqp_exchange = False - - def test_constrain_02(self): - with self.assertRaises(ValidationError): - self.output.amqp_routing_key = False - - def test_constrain_03(self): - with self.assertRaises(ValidationError): - self.output.amqp_host_id = False - - def test_amqp(self): - with patch( - "odoo.addons.iot_amqp_oca.models." - "iot_device_output_action.BlockingConnection" - ) as mock: - mock.return_value = TestBlockingConnection(self, self.output) - self.output.with_context( - iot_communication_system_action_id=self.action.id - ).device_run_action() - mock.assert_called() diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/views/iot_amqp_host.xml b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/views/iot_amqp_host.xml deleted file mode 100644 index 562f6510..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/views/iot_amqp_host.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - iot.amqp.host.form (in iot_amqp) - iot.amqp.host - -
-
- - - - - - -
- - - - - iot.amqp.host.search (in iot_amqp) - iot.amqp.host - - - - - - - - iot.amqp.host.tree (in iot_amqp) - iot.amqp.host - - - - - - - - Amqp Host - iot.amqp.host - tree,form - [] - {} - - - diff --git a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/views/iot_device_output_views.xml b/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/views/iot_device_output_views.xml deleted file mode 100644 index 11d5dcf5..00000000 --- a/odoo-bringout-oca-iot-iot_amqp_oca/iot_amqp_oca/views/iot_device_output_views.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - iot.device.output.form - iot.device.output - - - - - - - - - - - - - - - - - iot.device.kanban - iot.device - - - - - - Inputs - - - - - diff --git a/odoo-bringout-oca-iot-iot_input_oca/pyproject.toml b/odoo-bringout-oca-iot-iot_input_oca/pyproject.toml deleted file mode 100644 index 0a0056df..00000000 --- a/odoo-bringout-oca-iot-iot_input_oca/pyproject.toml +++ /dev/null @@ -1,42 +0,0 @@ -[project] -name = "odoo-bringout-oca-iot-iot_input_oca" -version = "16.0.0" -description = "IoT Input - IoT Input module" -authors = [ - { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } -] -dependencies = [ - "odoo-bringout-oca-iot-iot_oca>=16.0.0", - "requests>=2.25.1" -] -readme = "README.md" -requires-python = ">= 3.11" -classifiers = [ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Developers", - "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Topic :: Office/Business", -] - -[project.urls] -homepage = "https://github.com/bringout/0" -repository = "https://github.com/bringout/0" - -[build-system] -requires = ["hatchling"] -build-backend = "hatchling.build" - -[tool.hatch.metadata] -allow-direct-references = true - -[tool.hatch.build.targets.wheel] -packages = ["iot_input_oca"] - -[tool.rye] -managed = true -dev-dependencies = [ - "pytest>=8.4.1", -] diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/README.md b/odoo-bringout-oca-iot-iot_key_employee_rfid/README.md deleted file mode 100644 index e1412e75..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# IoT Key Employee RFID - -Odoo addon: iot_key_employee_rfid - -## Installation - -```bash -pip install odoo-bringout-oca-iot-iot_key_employee_rfid -``` - -## Dependencies - -This addon depends on: -- hr_attendance_rfid -- iot_rule - -## Manifest Information - -- **Name**: IoT Key Employee RFID -- **Version**: 16.0.1.0.0 -- **Category**: N/A -- **License**: AGPL-3 -- **Installable**: False - -## Source - -Based on [OCA/iot](https://github.com/OCA/iot) branch 16.0, addon `iot_key_employee_rfid`. - -## License - -This package maintains the original AGPL-3 license from the upstream Odoo project. - -## Documentation - -- Overview: doc/OVERVIEW.md -- Architecture: doc/ARCHITECTURE.md -- Models: doc/MODELS.md -- Controllers: doc/CONTROLLERS.md -- Wizards: doc/WIZARDS.md -- Install: doc/INSTALL.md -- Usage: doc/USAGE.md -- Configuration: doc/CONFIGURATION.md -- Dependencies: doc/DEPENDENCIES.md -- Troubleshooting: doc/TROUBLESHOOTING.md -- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/ARCHITECTURE.md b/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/ARCHITECTURE.md deleted file mode 100644 index 3e9f9b45..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/ARCHITECTURE.md +++ /dev/null @@ -1,32 +0,0 @@ -# Architecture - -```mermaid -flowchart TD - U[Users] -->|HTTP| V[Views and QWeb Templates] - V --> C[Controllers] - V --> W[Wizards – Transient Models] - C --> M[Models and ORM] - W --> M - M --> R[Reports] - DX[Data XML] --> M - S[Security – ACLs and Groups] -. enforces .-> M - - subgraph Iot_key_employee_rfid Module - iot_key_employee_rfid - direction LR - M:::layer - W:::layer - C:::layer - V:::layer - R:::layer - S:::layer - DX:::layer - end - - classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px -``` - -Notes -- Views include tree/form/kanban templates and report templates. -- Controllers provide website/portal routes when present. -- Wizards are UI flows implemented with `models.TransientModel`. -- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/CONFIGURATION.md b/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/CONFIGURATION.md deleted file mode 100644 index 62469574..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/CONFIGURATION.md +++ /dev/null @@ -1,3 +0,0 @@ -# Configuration - -Refer to Odoo settings for iot_key_employee_rfid. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/CONTROLLERS.md b/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/CONTROLLERS.md deleted file mode 100644 index f628e770..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/CONTROLLERS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Controllers - -This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/DEPENDENCIES.md b/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/DEPENDENCIES.md deleted file mode 100644 index f0a11f14..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/DEPENDENCIES.md +++ /dev/null @@ -1,6 +0,0 @@ -# Dependencies - -This addon depends on: - -- [hr_attendance_rfid](https://github.com/bringout/oca-technical) -- [iot_rule](https://github.com/bringout/oca-technical) diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/FAQ.md b/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/FAQ.md deleted file mode 100644 index 92cb9130..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/FAQ.md +++ /dev/null @@ -1,4 +0,0 @@ -# FAQ - -- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged). -- Q: How to enable? A: Start server with --addon iot_key_employee_rfid or install in UI. diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/INSTALL.md b/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/INSTALL.md deleted file mode 100644 index ff56190b..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/INSTALL.md +++ /dev/null @@ -1,7 +0,0 @@ -# Install - -```bash -pip install odoo-bringout-oca-iot-iot_key_employee_rfid" -# or -uv pip install odoo-bringout-oca-iot-iot_key_employee_rfid" -``` diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/MODELS.md b/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/MODELS.md deleted file mode 100644 index 04d5b87a..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/MODELS.md +++ /dev/null @@ -1,13 +0,0 @@ -# Models - -Detected core models and extensions in iot_key_employee_rfid. - -```mermaid -classDiagram - class hr_employee - class iot_key -``` - -Notes -- Classes show model technical names; fields omitted for brevity. -- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/OVERVIEW.md b/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/OVERVIEW.md deleted file mode 100644 index 8e8e0706..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/OVERVIEW.md +++ /dev/null @@ -1,6 +0,0 @@ -# Overview - -Packaged Odoo addon: iot_key_employee_rfid. Provides features documented in upstream Odoo 16 under this addon. - -- Source: OCA/OCB 16.0, addon iot_key_employee_rfid -- License: LGPL-3 diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/REPORTS.md b/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/REPORTS.md deleted file mode 100644 index e0ea35fb..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/REPORTS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Reports - -This module does not define custom reports. diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/SECURITY.md b/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/SECURITY.md deleted file mode 100644 index e07da9da..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/SECURITY.md +++ /dev/null @@ -1,8 +0,0 @@ -# Security - -This module does not define custom security rules or access controls beyond Odoo defaults. - -Default Odoo security applies: -- Base user access through standard groups -- Model access inherited from dependencies -- No custom row-level security rules diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/TROUBLESHOOTING.md deleted file mode 100644 index 56853cb7..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/TROUBLESHOOTING.md +++ /dev/null @@ -1,5 +0,0 @@ -# Troubleshooting - -- Ensure Python and Odoo environment matches repo guidance. -- Check database connectivity and logs if startup fails. -- Validate that dependent addons listed in DEPENDENCIES.md are installed. diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/USAGE.md b/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/USAGE.md deleted file mode 100644 index 5902fc03..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/USAGE.md +++ /dev/null @@ -1,7 +0,0 @@ -# Usage - -Start Odoo including this addon (from repo root): - -```bash -python3 scripts/nix_odoo_web_server.py --db-name mydb --addon iot_key_employee_rfid -``` diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/WIZARDS.md b/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/WIZARDS.md deleted file mode 100644 index 48e790dc..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/doc/WIZARDS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Wizards - -This module does not include UI wizards. diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/README.rst b/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/README.rst deleted file mode 100644 index fdd03b46..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/README.rst +++ /dev/null @@ -1,78 +0,0 @@ -===================== -IoT Key Employee RFID -===================== - -.. - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! This file is generated by oca-gen-addon-readme !! - !! changes will be overwritten. !! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:f050534fb0fe825ed9eb152a71240158b02f1d0c75d760526df54bfeccbb1c22 - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -.. |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-OCA%2Fiot-lightgray.png?logo=github - :target: https://github.com/OCA/iot/tree/16.0/iot_key_employee_rfid - :alt: OCA/iot -.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/iot-16-0/iot-16-0-iot_key_employee_rfid - :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/iot&target_branch=16.0 - :alt: Try me on Runboat - -|badge1| |badge2| |badge3| |badge4| |badge5| - -This addon allows the use of an RFID Card as an IoT Key. - -**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 -~~~~~~~ - -* CreuBlanca - -Contributors -~~~~~~~~~~~~ - -* Enric Tobella -* Luis Burrel -* Aaron Henriquez - -Maintainers -~~~~~~~~~~~ - -This module is maintained by the OCA. - -.. image:: https://odoo-community.org/logo.png - :alt: Odoo Community Association - :target: https://odoo-community.org - -OCA, or the Odoo Community Association, is a nonprofit organization whose -mission is to support the collaborative development of Odoo features and -promote its widespread use. - -This module is part of the `OCA/iot `_ project on GitHub. - -You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/__init__.py b/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/__init__.py deleted file mode 100644 index 0650744f..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import models diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/__manifest__.py b/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/__manifest__.py deleted file mode 100644 index b42b2481..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/__manifest__.py +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright 2019 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -{ - "name": "IoT Key Employee RFID", - "summary": """ - Use an Employee RFID Card as an IoT Key""", - "version": "16.0.1.0.0", - "license": "AGPL-3", - "author": "CreuBlanca,Odoo Community Association (OCA)", - "website": "https://github.com/OCA/iot", - "depends": ["hr_attendance_rfid", "iot_rule"], - "data": ["views/hr_employee.xml"], -} diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/i18n/bs.po b/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/i18n/bs.po deleted file mode 100644 index cc2ed856..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/i18n/bs.po +++ /dev/null @@ -1,66 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_key_employee_rfid -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: iot_key_employee_rfid -#. odoo-python -#: code:addons/iot_key_employee_rfid/models/hr_employee.py:0 -#, python-format -msgid "%s / RFID" -msgstr "%s / RFID" - -#. module: iot_key_employee_rfid -#: model:ir.model,name:iot_key_employee_rfid.model_hr_employee -msgid "Employee" -msgstr "Zaposleni" - -#. module: iot_key_employee_rfid -#: model_terms:ir.ui.view,arch_db:iot_key_employee_rfid.hr_employee_form_view -msgid "Generate IoT Key for this RFID Card" -msgstr "Generiraj IoT ključ za ovu RFID karticu" - -#. module: iot_key_employee_rfid -#: model:ir.model,name:iot_key_employee_rfid.model_iot_key -msgid "IoT Key" -msgstr "IoT ključ" - -#. module: iot_key_employee_rfid -#: model_terms:ir.ui.view,arch_db:iot_key_employee_rfid.hr_employee_form_view -msgid "IoT Key for the RFID Card" -msgstr "IoT ključ za RFID karticu" - -#. module: iot_key_employee_rfid -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_hr_employee__iot_key_ids -msgid "IoT Keys" -msgstr "IoT ključevi" - -#. module: iot_key_employee_rfid -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_hr_employee__rule_ids -msgid "IoT Rules" -msgstr "IoT pravila" - -#. module: iot_key_employee_rfid -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_hr_employee__iot_key_id -msgid "Iot Key" -msgstr "IoT ključ" - -#. module: iot_key_employee_rfid -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_hr_employee__iot_key_count -msgid "Iot Key Count" -msgstr "Broj IoT ključeva" - -#. module: iot_key_employee_rfid -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_hr_employee__rfid_card_code -msgid "RFID Card Code" -msgstr "Kod RFID kartice" diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/i18n/iot_key_employee_rfid.pot b/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/i18n/iot_key_employee_rfid.pot deleted file mode 100644 index f30cee44..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/i18n/iot_key_employee_rfid.pot +++ /dev/null @@ -1,66 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_key_employee_rfid -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: iot_key_employee_rfid -#. odoo-python -#: code:addons/iot_key_employee_rfid/models/hr_employee.py:0 -#, python-format -msgid "%s / RFID" -msgstr "" - -#. module: iot_key_employee_rfid -#: model:ir.model,name:iot_key_employee_rfid.model_hr_employee -msgid "Employee" -msgstr "" - -#. module: iot_key_employee_rfid -#: model_terms:ir.ui.view,arch_db:iot_key_employee_rfid.hr_employee_form_view -msgid "Generate IoT Key for this RFID Card" -msgstr "" - -#. module: iot_key_employee_rfid -#: model:ir.model,name:iot_key_employee_rfid.model_iot_key -msgid "IoT Key" -msgstr "" - -#. module: iot_key_employee_rfid -#: model_terms:ir.ui.view,arch_db:iot_key_employee_rfid.hr_employee_form_view -msgid "IoT Key for the RFID Card" -msgstr "" - -#. module: iot_key_employee_rfid -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_hr_employee__iot_key_ids -msgid "IoT Keys" -msgstr "" - -#. module: iot_key_employee_rfid -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_hr_employee__rule_ids -msgid "IoT Rules" -msgstr "" - -#. module: iot_key_employee_rfid -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_hr_employee__iot_key_id -msgid "Iot Key" -msgstr "" - -#. module: iot_key_employee_rfid -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_hr_employee__iot_key_count -msgid "Iot Key Count" -msgstr "" - -#. module: iot_key_employee_rfid -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_hr_employee__rfid_card_code -msgid "RFID Card Code" -msgstr "" diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/i18n/it.po b/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/i18n/it.po deleted file mode 100644 index 66eb8afc..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/i18n/it.po +++ /dev/null @@ -1,86 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_key_employee_rfid -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 14.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-07-04 15:10+0000\n" -"Last-Translator: mymage \n" -"Language-Team: none\n" -"Language: it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.17\n" - -#. module: iot_key_employee_rfid -#: code:addons/iot_key_employee_rfid/models/hr_employee.py:0 -#, python-format -msgid "%s / RFID" -msgstr "%s /RFID" - -#. module: iot_key_employee_rfid -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_hr_employee__display_name -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_iot_key__display_name -msgid "Display Name" -msgstr "Nome visualizzato" - -#. module: iot_key_employee_rfid -#: model:ir.model,name:iot_key_employee_rfid.model_hr_employee -msgid "Employee" -msgstr "Dipendente" - -#. module: iot_key_employee_rfid -#: model_terms:ir.ui.view,arch_db:iot_key_employee_rfid.hr_employee_form_view -msgid "Generate IoT Key for this RFID Card" -msgstr "Genera chiave IoT per questa scheda RFID" - -#. module: iot_key_employee_rfid -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_hr_employee__id -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_iot_key__id -msgid "ID" -msgstr "ID" - -#. module: iot_key_employee_rfid -#: model:ir.model,name:iot_key_employee_rfid.model_iot_key -msgid "IoT Key" -msgstr "Chiave IoT" - -#. module: iot_key_employee_rfid -#: model_terms:ir.ui.view,arch_db:iot_key_employee_rfid.hr_employee_form_view -msgid "IoT Key for the RFID Card" -msgstr "Chiave IoT per la scheda RFID" - -#. module: iot_key_employee_rfid -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_hr_employee__iot_key_ids -msgid "IoT Keys" -msgstr "Chiavi IoT" - -#. module: iot_key_employee_rfid -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_hr_employee__rule_ids -msgid "IoT Rules" -msgstr "Regole IoT" - -#. module: iot_key_employee_rfid -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_hr_employee__iot_key_id -msgid "Iot Key" -msgstr "Chiave IoT" - -#. module: iot_key_employee_rfid -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_hr_employee__iot_key_count -msgid "Iot Key Count" -msgstr "Conteggio chiave IoT" - -#. module: iot_key_employee_rfid -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_hr_employee____last_update -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_iot_key____last_update -msgid "Last Modified on" -msgstr "Ultima modifica il" - -#. module: iot_key_employee_rfid -#: model:ir.model.fields,field_description:iot_key_employee_rfid.field_hr_employee__rfid_card_code -msgid "RFID Card Code" -msgstr "Codice tesserino RFID" diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/models/__init__.py b/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/models/__init__.py deleted file mode 100644 index 536d6a0f..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/models/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from . import hr_employee -from . import iot_key diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/models/hr_employee.py b/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/models/hr_employee.py deleted file mode 100644 index 713cbc0f..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/models/hr_employee.py +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright 2019 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import _, api, fields, models - - -class HrEmployee(models.Model): - _name = "hr.employee" - _inherit = ["hr.employee", "iot.key.mixin"] - - iot_key_id = fields.Many2one( - "iot.key", compute="_compute_iot_key", search="_search_iot_key" - ) - iot_key_ids = fields.One2many(context={"active_test": False}, string="IoT Keys") - rule_ids = fields.Many2many( - "iot.rule", - related="iot_key_id.rule_ids", - readonly=False, - string="IoT Rules", - ) - rfid_card_code = fields.Char( - store=True, - compute="_compute_rfid_card_code", - inverse="_inverse_rfid_card_code", - ) - - @api.model - def _search_iot_key(self, operator, value): - if operator not in ["=", "!=", "in", "not in"]: - raise ValueError("Operator not supported for iot_key_id search") - employees = self.search([("iot_key_ids", operator, value)]) - return [("id", "in", employees.ids)] - - @api.depends("iot_key_ids.unique_virtual_key", "iot_key_ids") - def _compute_rfid_card_code(self): - for record in self: - if record.iot_key_ids: - record.rfid_card_code = record.iot_key_ids.unique_virtual_key - - def _inverse_rfid_card_code(self): - for record in self: - if record.iot_key_ids: - record.iot_key_ids.unique_virtual_key = record.rfid_card_code - - @api.depends("iot_key_ids") - def _compute_iot_key(self): - for record in self: - record.iot_key_id = record.iot_key_ids[:1] if record.iot_key_ids else False - - def _generate_iot_key_vals(self): - return { - "unique_virtual_key": self.rfid_card_code, - "name": _("%s / RFID") % self.display_name, - "key_type": "RFID", - "res_id": self.id, - "res_model": self._name, - } - - def generate_iot_key(self): - self.ensure_one() - if not self.iot_key_id and self.rfid_card_code: - self.env["iot.key"].create(self._generate_iot_key_vals()) - self.invalidate_recordset() - self._compute_rfid_card_code() - return {} diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/models/iot_key.py b/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/models/iot_key.py deleted file mode 100644 index 14cc628d..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/models/iot_key.py +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright 2020 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import api, models - - -class IotKey(models.Model): - _inherit = "iot.key" - - @api.model - def _get_unique_key_models(self): - res = super(IotKey, self)._get_unique_key_models() - res.append("hr.employee") - return res diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/readme/CONTRIBUTORS.rst deleted file mode 100644 index 21c844ef..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,3 +0,0 @@ -* Enric Tobella -* Luis Burrel -* Aaron Henriquez diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/readme/DESCRIPTION.rst b/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/readme/DESCRIPTION.rst deleted file mode 100644 index 720b8a2c..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/readme/DESCRIPTION.rst +++ /dev/null @@ -1 +0,0 @@ -This addon allows the use of an RFID Card as an IoT Key. diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/static/description/icon.png b/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/static/description/icon.png deleted file mode 100644 index 3a0328b5..00000000 Binary files a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/static/description/icon.png and /dev/null differ diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/static/description/index.html b/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/static/description/index.html deleted file mode 100644 index 77a817a9..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/static/description/index.html +++ /dev/null @@ -1,425 +0,0 @@ - - - - - -IoT Key Employee RFID - - - -
-

IoT Key Employee RFID

- - -

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

-

This addon allows the use of an RFID Card as an IoT Key.

-

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

-
    -
  • CreuBlanca
  • -
-
-
-

Contributors

- -
-
-

Maintainers

-

This module is maintained by the OCA.

- -Odoo Community Association - -

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

-

This module is part of the OCA/iot project on GitHub.

-

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

-
-
-
- - diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/tests/__init__.py b/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/tests/__init__.py deleted file mode 100644 index 97b9f872..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import test_employee_rfid diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/tests/test_employee_rfid.py b/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/tests/test_employee_rfid.py deleted file mode 100644 index 355759e3..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/tests/test_employee_rfid.py +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright 2019 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -import uuid - -from odoo.exceptions import ValidationError -from odoo.tests.common import TransactionCase - - -class TestEmployeeRfid(TransactionCase): - def setUp(self): - super(TestEmployeeRfid, self).setUp() - self.employee = self.env["hr.employee"].create({"name": "Employee"}) - - def test_generate(self): - self.employee.write({"rfid_card_code": "1235"}) - self.assertFalse(self.employee.iot_key_id) - self.employee.generate_iot_key() - self.employee.invalidate_recordset() - self.assertTrue(self.employee.iot_key_id) - self.assertEqual( - self.employee.iot_key_id.unique_virtual_key, - self.employee.rfid_card_code, - ) - - self.employee.write({"rfid_card_code": "125466"}) - self.assertEqual( - self.employee.iot_key_id.unique_virtual_key, - self.employee.rfid_card_code, - ) - - def test_unique_constrain(self): - self.employee.write({"rfid_card_code": "1235"}) - self.employee.generate_iot_key() - with self.assertRaises(ValidationError): - self.env["iot.key"].create( - { - "unique_virtual_key": uuid.uuid4(), - "res_model": self.employee._name, - "res_id": self.employee.id, - } - ) diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/views/hr_employee.xml b/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/views/hr_employee.xml deleted file mode 100644 index 451513fb..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/iot_key_employee_rfid/views/hr_employee.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - hr.employee.form (in iot_key_employee_rfid) - hr.employee - - -
-
- - - - - - -
-
diff --git a/odoo-bringout-oca-iot-iot_key_employee_rfid/pyproject.toml b/odoo-bringout-oca-iot-iot_key_employee_rfid/pyproject.toml deleted file mode 100644 index 11384390..00000000 --- a/odoo-bringout-oca-iot-iot_key_employee_rfid/pyproject.toml +++ /dev/null @@ -1,44 +0,0 @@ -[project] -name = "odoo-bringout-oca-iot-iot_key_employee_rfid" -version = "16.0.0" -description = "IoT Key Employee RFID - - Use an Employee RFID Card as an IoT Key" -authors = [ - { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } -] -dependencies = [ - "odoo-bringout-oca-iot-hr_attendance_rfid>=16.0.0", - "odoo-bringout-oca-iot-iot_rule>=16.0.0", - "requests>=2.25.1" -] -readme = "README.md" -requires-python = ">= 3.11" -classifiers = [ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Developers", - "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Topic :: Office/Business", -] - -[project.urls] -homepage = "https://github.com/bringout/0" -repository = "https://github.com/bringout/0" - -[build-system] -requires = ["hatchling"] -build-backend = "hatchling.build" - -[tool.hatch.metadata] -allow-direct-references = true - -[tool.hatch.build.targets.wheel] -packages = ["iot_key_employee_rfid"] - -[tool.rye] -managed = true -dev-dependencies = [ - "pytest>=8.4.1", -] diff --git a/odoo-bringout-oca-iot-iot_oca/README.md b/odoo-bringout-oca-iot-iot_oca/README.md deleted file mode 100644 index 7dfd9f49..00000000 --- a/odoo-bringout-oca-iot-iot_oca/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# IoT Base - -Odoo addon: iot_oca - -## Installation - -```bash -pip install odoo-bringout-oca-iot-iot_oca -``` - -## Dependencies - -This addon depends on: -- base - -## Manifest Information - -- **Name**: IoT Base -- **Version**: 16.0.1.0.1 -- **Category**: IoT -- **License**: AGPL-3 -- **Installable**: True - -## Source - -Based on [OCA/iot](https://github.com/OCA/iot) branch 16.0, addon `iot_oca`. - -## License - -This package maintains the original AGPL-3 license from the upstream Odoo project. - -## Documentation - -- Overview: doc/OVERVIEW.md -- Architecture: doc/ARCHITECTURE.md -- Models: doc/MODELS.md -- Controllers: doc/CONTROLLERS.md -- Wizards: doc/WIZARDS.md -- Install: doc/INSTALL.md -- Usage: doc/USAGE.md -- Configuration: doc/CONFIGURATION.md -- Dependencies: doc/DEPENDENCIES.md -- Troubleshooting: doc/TROUBLESHOOTING.md -- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-iot-iot_oca/doc/ARCHITECTURE.md b/odoo-bringout-oca-iot-iot_oca/doc/ARCHITECTURE.md deleted file mode 100644 index 4c062e45..00000000 --- a/odoo-bringout-oca-iot-iot_oca/doc/ARCHITECTURE.md +++ /dev/null @@ -1,32 +0,0 @@ -# Architecture - -```mermaid -flowchart TD - U[Users] -->|HTTP| V[Views and QWeb Templates] - V --> C[Controllers] - V --> W[Wizards – Transient Models] - C --> M[Models and ORM] - W --> M - M --> R[Reports] - DX[Data XML] --> M - S[Security – ACLs and Groups] -. enforces .-> M - - subgraph Iot_oca Module - iot_oca - direction LR - M:::layer - W:::layer - C:::layer - V:::layer - R:::layer - S:::layer - DX:::layer - end - - classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px -``` - -Notes -- Views include tree/form/kanban templates and report templates. -- Controllers provide website/portal routes when present. -- Wizards are UI flows implemented with `models.TransientModel`. -- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-iot-iot_oca/doc/CONFIGURATION.md b/odoo-bringout-oca-iot-iot_oca/doc/CONFIGURATION.md deleted file mode 100644 index 82bd0a44..00000000 --- a/odoo-bringout-oca-iot-iot_oca/doc/CONFIGURATION.md +++ /dev/null @@ -1,3 +0,0 @@ -# Configuration - -Refer to Odoo settings for iot_oca. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-iot-iot_oca/doc/CONTROLLERS.md b/odoo-bringout-oca-iot-iot_oca/doc/CONTROLLERS.md deleted file mode 100644 index f628e770..00000000 --- a/odoo-bringout-oca-iot-iot_oca/doc/CONTROLLERS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Controllers - -This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-iot-iot_oca/doc/DEPENDENCIES.md b/odoo-bringout-oca-iot-iot_oca/doc/DEPENDENCIES.md deleted file mode 100644 index e3a0a5cc..00000000 --- a/odoo-bringout-oca-iot-iot_oca/doc/DEPENDENCIES.md +++ /dev/null @@ -1,5 +0,0 @@ -# Dependencies - -This addon depends on: - -- base diff --git a/odoo-bringout-oca-iot-iot_oca/doc/FAQ.md b/odoo-bringout-oca-iot-iot_oca/doc/FAQ.md deleted file mode 100644 index 3bdb2ce9..00000000 --- a/odoo-bringout-oca-iot-iot_oca/doc/FAQ.md +++ /dev/null @@ -1,4 +0,0 @@ -# FAQ - -- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged). -- Q: How to enable? A: Start server with --addon iot_oca or install in UI. diff --git a/odoo-bringout-oca-iot-iot_oca/doc/INSTALL.md b/odoo-bringout-oca-iot-iot_oca/doc/INSTALL.md deleted file mode 100644 index c714fd7c..00000000 --- a/odoo-bringout-oca-iot-iot_oca/doc/INSTALL.md +++ /dev/null @@ -1,7 +0,0 @@ -# Install - -```bash -pip install odoo-bringout-oca-iot-iot_oca" -# or -uv pip install odoo-bringout-oca-iot-iot_oca" -``` diff --git a/odoo-bringout-oca-iot-iot_oca/doc/MODELS.md b/odoo-bringout-oca-iot-iot_oca/doc/MODELS.md deleted file mode 100644 index 1e1fab4f..00000000 --- a/odoo-bringout-oca-iot-iot_oca/doc/MODELS.md +++ /dev/null @@ -1,18 +0,0 @@ -# Models - -Detected core models and extensions in iot_oca. - -```mermaid -classDiagram - class iot_communication_system - class iot_communication_system_action - class iot_device - class iot_device_action - class iot_device_group - class iot_device_tag - class image_mixin -``` - -Notes -- Classes show model technical names; fields omitted for brevity. -- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-iot-iot_oca/doc/OVERVIEW.md b/odoo-bringout-oca-iot-iot_oca/doc/OVERVIEW.md deleted file mode 100644 index 18eb1a40..00000000 --- a/odoo-bringout-oca-iot-iot_oca/doc/OVERVIEW.md +++ /dev/null @@ -1,6 +0,0 @@ -# Overview - -Packaged Odoo addon: iot_oca. Provides features documented in upstream Odoo 16 under this addon. - -- Source: OCA/OCB 16.0, addon iot_oca -- License: LGPL-3 diff --git a/odoo-bringout-oca-iot-iot_oca/doc/REPORTS.md b/odoo-bringout-oca-iot-iot_oca/doc/REPORTS.md deleted file mode 100644 index e0ea35fb..00000000 --- a/odoo-bringout-oca-iot-iot_oca/doc/REPORTS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Reports - -This module does not define custom reports. diff --git a/odoo-bringout-oca-iot-iot_oca/doc/SECURITY.md b/odoo-bringout-oca-iot-iot_oca/doc/SECURITY.md deleted file mode 100644 index 24da04d4..00000000 --- a/odoo-bringout-oca-iot-iot_oca/doc/SECURITY.md +++ /dev/null @@ -1,42 +0,0 @@ -# Security - -Access control and security definitions in iot_oca. - -## Access Control Lists (ACLs) - -Model access permissions defined in: -- **[ir.model.access.csv](../iot_oca/security/ir.model.access.csv)** - - 12 model access rules - -## Record Rules - -Row-level security rules defined in: - -## Security Groups & Configuration - -Security groups and permissions defined in: -- **[iot_security.xml](../iot_oca/security/iot_security.xml)** - - 2 security groups defined - -```mermaid -graph TB - subgraph "Security Layers" - A[Users] --> B[Groups] - B --> C[Access Control Lists] - C --> D[Models] - B --> E[Record Rules] - E --> F[Individual Records] - end -``` - -Security files overview: -- **[iot_security.xml](../iot_oca/security/iot_security.xml)** - - Security groups, categories, and XML-based rules -- **[ir.model.access.csv](../iot_oca/security/ir.model.access.csv)** - - Model access permissions (CRUD rights) - -Notes -- Access Control Lists define which groups can access which models -- Record Rules provide row-level security (filter records by user/group) -- Security groups organize users and define permission sets -- All security is enforced at the ORM level by Odoo diff --git a/odoo-bringout-oca-iot-iot_oca/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-iot-iot_oca/doc/TROUBLESHOOTING.md deleted file mode 100644 index 56853cb7..00000000 --- a/odoo-bringout-oca-iot-iot_oca/doc/TROUBLESHOOTING.md +++ /dev/null @@ -1,5 +0,0 @@ -# Troubleshooting - -- Ensure Python and Odoo environment matches repo guidance. -- Check database connectivity and logs if startup fails. -- Validate that dependent addons listed in DEPENDENCIES.md are installed. diff --git a/odoo-bringout-oca-iot-iot_oca/doc/USAGE.md b/odoo-bringout-oca-iot-iot_oca/doc/USAGE.md deleted file mode 100644 index 8dcd1e74..00000000 --- a/odoo-bringout-oca-iot-iot_oca/doc/USAGE.md +++ /dev/null @@ -1,7 +0,0 @@ -# Usage - -Start Odoo including this addon (from repo root): - -```bash -python3 scripts/nix_odoo_web_server.py --db-name mydb --addon iot_oca -``` diff --git a/odoo-bringout-oca-iot-iot_oca/doc/WIZARDS.md b/odoo-bringout-oca-iot-iot_oca/doc/WIZARDS.md deleted file mode 100644 index 48e790dc..00000000 --- a/odoo-bringout-oca-iot-iot_oca/doc/WIZARDS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Wizards - -This module does not include UI wizards. diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/README.rst b/odoo-bringout-oca-iot-iot_oca/iot_oca/README.rst deleted file mode 100644 index 392f1aec..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/README.rst +++ /dev/null @@ -1,77 +0,0 @@ -======== -IoT Base -======== - -.. - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! This file is generated by oca-gen-addon-readme !! - !! changes will be overwritten. !! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:c34e428d89d764b8729d8c6829d21080bbcb86b8c3d8af66fd656894bebb1e2f - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -.. |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-OCA%2Fiot-lightgray.png?logo=github - :target: https://github.com/OCA/iot/tree/16.0/iot_oca - :alt: OCA/iot -.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/iot-16-0/iot-16-0-iot_oca - :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/iot&target_branch=16.0 - :alt: Try me on Runboat - -|badge1| |badge2| |badge3| |badge4| |badge5| - -This addon is a base module used for all iot modules. - -**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 -~~~~~~~ - -* Creu Blanca - -Contributors -~~~~~~~~~~~~ - -* Enric Tobella -* ViraWeb123 - -Maintainers -~~~~~~~~~~~ - -This module is maintained by the OCA. - -.. image:: https://odoo-community.org/logo.png - :alt: Odoo Community Association - :target: https://odoo-community.org - -OCA, or the Odoo Community Association, is a nonprofit organization whose -mission is to support the collaborative development of Odoo features and -promote its widespread use. - -This module is part of the `OCA/iot `_ project on GitHub. - -You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/__init__.py b/odoo-bringout-oca-iot-iot_oca/iot_oca/__init__.py deleted file mode 100644 index 83e553ac..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - -from . import models diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/__manifest__.py b/odoo-bringout-oca-iot-iot_oca/iot_oca/__manifest__.py deleted file mode 100644 index c90c3026..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/__manifest__.py +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright (C) 2018 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - -{ - "name": "IoT Base", - "version": "16.0.1.0.1", - "category": "IoT", - "author": "Creu Blanca, Odoo Community Association (OCA)", - "license": "AGPL-3", - "installable": True, - "application": True, - "summary": "IoT base module", - "website": "https://github.com/OCA/iot", - "depends": ["base"], - "data": [ - "security/iot_security.xml", - "security/ir.model.access.csv", - "views/iot_menu.xml", - "views/iot_device_tag.xml", - "views/iot_device_group.xml", - "views/iot_system_views.xml", - "views/iot_device_views.xml", - ], -} diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/bs.po b/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/bs.po deleted file mode 100644 index 9aa5a4b7..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/bs.po +++ /dev/null @@ -1,269 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__action_ids -msgid "Action" -msgstr "Akcija" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__action_count -msgid "Action Count" -msgstr "Broj akcija" - -#. module: iot -#: code:addons/iot/models/iot_system_action.py:20 -#, python-format -msgid "Action cannot be processed" -msgstr "Akcija se ne može obraditi" - -#. module: iot -#: model_terms:ir.ui.view,arch_db:iot.iot_device_form -#: model_terms:ir.ui.view,arch_db:iot.iot_system_form -msgid "Actions" -msgstr "Akcije" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__active -#: model_terms:ir.ui.view,arch_db:iot.iot_device_search -msgid "Active" -msgstr "Aktivan" - -#. module: iot -#: model:ir.ui.menu,name:iot.iot_config_device_menu -msgid "Config Devices" -msgstr "Konfiguriši uređaje" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__create_uid -#: model:ir.model.fields,field_description:iot.field_iot_device_action__create_uid -#: model:ir.model.fields,field_description:iot.field_iot_system__create_uid -#: model:ir.model.fields,field_description:iot.field_iot_system_action__create_uid -msgid "Created by" -msgstr "Kreirao" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__create_date -#: model:ir.model.fields,field_description:iot.field_iot_device_action__create_date -#: model:ir.model.fields,field_description:iot.field_iot_system__create_date -#: model:ir.model.fields,field_description:iot.field_iot_system_action__create_date -msgid "Created on" -msgstr "Kreirano" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device_action__device_id -#: model:ir.model.fields,field_description:iot.field_iot_system__device_ids -msgid "Device" -msgstr "Uređaj" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__device_identification -msgid "Device Identification" -msgstr "Identifikacija uređaja" - -#. module: iot -#: code:addons/iot/models/iot_device_action.py:28 -#, python-format -msgid "Device and action must be of the same system" -msgstr "Uređaj i akcija moraju biti istog sistema" - -#. module: iot -#: model:ir.ui.menu,name:iot.iot_device_menu -#: model_terms:ir.ui.view,arch_db:iot.iot_system_form -msgid "Devices" -msgstr "Uređaji" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__display_name -#: model:ir.model.fields,field_description:iot.field_iot_device_action__display_name -#: model:ir.model.fields,field_description:iot.field_iot_system__display_name -#: model:ir.model.fields,field_description:iot.field_iot_system_action__display_name -msgid "Display Name" -msgstr "Prikazani naziv" - -#. module: iot -#: selection:iot.device.action,status:0 -msgid "Failed" -msgstr "Neuspješan" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__id -#: model:ir.model.fields,field_description:iot.field_iot_device_action__id -#: model:ir.model.fields,field_description:iot.field_iot_system__id -#: model:ir.model.fields,field_description:iot.field_iot_system_action__id -msgid "ID" -msgstr "ID" - -#. module: iot -#: model_terms:ir.ui.view,arch_db:iot.iot_device_search -msgid "Inactive" -msgstr "Neaktivan" - -#. module: iot -#: model:ir.module.category,name:iot.ir_module_category_iot -#: model:ir.ui.menu,name:iot.iot_root_menu -msgid "IoT" -msgstr "IoT" - -#. module: iot -#: model:ir.model,name:iot.model_iot_device_action -msgid "IoT Action" -msgstr "IoT akcija" - -#. module: iot -#: model:ir.model,name:iot.model_iot_device -msgid "IoT Device" -msgstr "IoT uređaj" - -#. module: iot -#: model_terms:ir.ui.view,arch_db:iot.iot_device_search -msgid "IoT Device Search" -msgstr "Pretraga IoT uređaja" - -#. module: iot -#: model:ir.actions.act_window,name:iot.iot_device_action -#: model:ir.actions.act_window,name:iot.iot_device_config_action -msgid "IoT Devices" -msgstr "IoT uređaji" - -#. module: iot -#: model:ir.actions.act_window,name:iot.iot_system_action -#: model:ir.model,name:iot.model_iot_system -msgid "IoT System" -msgstr "IoT sistem" - -#. module: iot -#: model:ir.model,name:iot.model_iot_system_action -msgid "IoT System.action" -msgstr "IoT sistem.akcija" - -#. module: iot -#: model:res.groups,name:iot.group_iot_user -msgid "IoT User" -msgstr "IoT korisnik" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__ip -msgid "Ip" -msgstr "IP" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device____last_update -#: model:ir.model.fields,field_description:iot.field_iot_device_action____last_update -#: model:ir.model.fields,field_description:iot.field_iot_system____last_update -#: model:ir.model.fields,field_description:iot.field_iot_system_action____last_update -msgid "Last Modified on" -msgstr "Zadnje mijenjano" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__write_uid -#: model:ir.model.fields,field_description:iot.field_iot_device_action__write_uid -#: model:ir.model.fields,field_description:iot.field_iot_system__write_uid -#: model:ir.model.fields,field_description:iot.field_iot_system_action__write_uid -msgid "Last Updated by" -msgstr "Zadnji ažurirao" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__write_date -#: model:ir.model.fields,field_description:iot.field_iot_device_action__write_date -#: model:ir.model.fields,field_description:iot.field_iot_system__write_date -#: model:ir.model.fields,field_description:iot.field_iot_system_action__write_date -msgid "Last Updated on" -msgstr "Zadnje ažurirano" - -#. module: iot -#: model:res.groups,name:iot.group_iot_manager -msgid "Manager" -msgstr "Upravitelj" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__model -msgid "Model" -msgstr "Model" - -#. module: iot -#: model:res.groups,comment:iot.group_iot_manager -msgid "Module administrator, able to modify configuration data." -msgstr "Administrator modula, može mijenjati konfiguracijske podatke." - -#. module: iot -#: model:res.groups,comment:iot.group_iot_user -msgid "Module user." -msgstr "Korisnik modula." - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__name -#: model:ir.model.fields,field_description:iot.field_iot_system__name -#: model:ir.model.fields,field_description:iot.field_iot_system_action__name -msgid "Name" -msgstr "Naziv:" - -#. module: iot -#: selection:iot.device.action,status:0 -msgid "Ok" -msgstr "Uredu" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device_action__date_ok -msgid "Ok date" -msgstr "Datum u redu" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__passphrase -msgid "Passphrase" -msgstr "Parolska fraza" - -#. module: iot -#: selection:iot.device.action,status:0 -msgid "Pending" -msgstr "Na čekanju" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device_action__result -msgid "Result" -msgstr "Rezultat" - -#. module: iot -#: model_terms:ir.ui.view,arch_db:iot.iot_device_action_tree -msgid "Run" -msgstr "Pokrenut" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__state -msgid "State" -msgstr "Status" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device_action__status -msgid "Status" -msgstr "Status" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__system_id -#: model:ir.model.fields,field_description:iot.field_iot_system_action__system_id -msgid "System" -msgstr "Sistem" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device_action__system_action_id -#: model:ir.model.fields,field_description:iot.field_iot_system__system_action_ids -msgid "System Action" -msgstr "Sistemska akcija" - -#. module: iot -#: model:ir.ui.menu,name:iot.iot_system_menu -msgid "Systems" -msgstr "Sistemi" - diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/ca.po b/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/ca.po deleted file mode 100644 index a64f4291..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/ca.po +++ /dev/null @@ -1,426 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_oca -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2022-06-03 11:05+0000\n" -"Last-Translator: jabelchi \n" -"Language-Team: none\n" -"Language: ca\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3.2\n" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__action_ids -msgid "Action" -msgstr "Acció" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__action_count -msgid "Action Count" -msgstr "Nombre d'accions" - -#. module: iot_oca -#. odoo-python -#: code:addons/iot_oca/models/iot_communication_system_action.py:0 -#, python-format -msgid "Action cannot be processed" -msgstr "L'acció no pot processar-se" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_form -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_system_form -msgid "Actions" -msgstr "Accions" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__active -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Active" -msgstr "Actiu" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__color -msgid "Color" -msgstr "Color" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__color -msgid "Color Index" -msgstr "Index de colors" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__communication_system_id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__communication_system_id -msgid "Communication System" -msgstr "Sistema de comunicacions" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__communication_system_action_ids -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__communication_system_action_id -msgid "Communication System Action" -msgstr "Acció del sistema de comunicacions" - -#. module: iot_oca -#: model:ir.ui.menu,name:iot_oca.iot_configuration_menu -msgid "Configuration" -msgstr "Configuració" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__create_uid -msgid "Created by" -msgstr "Creat per" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__create_date -msgid "Created on" -msgstr "Creat el" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Delete" -msgstr "Elimina" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__device_ids -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__device_id -msgid "Device" -msgstr "Dispositiu" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_device_group_act_window -#: model:ir.ui.menu,name:iot_oca.iot_device_group_menu -msgid "Device Group" -msgstr "Grup de dispositius" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_device_tag_act_window -#: model:ir.model,name:iot_oca.model_iot_device_tag -#: model:ir.ui.menu,name:iot_oca.iot_device_tag_menu -msgid "Device Tag" -msgstr "Etiqueta de dispositiu" - -#. module: iot_oca -#. odoo-python -#: code:addons/iot_oca/models/iot_device_action.py:0 -#, python-format -msgid "Device and action must be of the same system" -msgstr "El dispositiu i l'acció han d'ésser del mateix sistema" - -#. module: iot_oca -#: model:ir.ui.menu,name:iot_oca.iot_device_menu -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_system_form -msgid "Devices" -msgstr "Dispositius" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__display_name -msgid "Display Name" -msgstr "Nom a mostrar" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Dropdown menu" -msgstr "Menú desplegable" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Edit..." -msgstr "Edita..." - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device_action__status__failed -msgid "Failed" -msgstr "Error" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__group_id -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Group" -msgstr "Grup" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Group By" -msgstr "Agrupa per" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__id -msgid "ID" -msgstr "ID" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__ip -msgid "IP" -msgstr "IP" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "IP:" -msgstr "IP:" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__icon -msgid "Icon" -msgstr "Icona" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_1920 -msgid "Image" -msgstr "Imatge" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_1024 -msgid "Image 1024" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_128 -msgid "Image 128" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_256 -msgid "Image 256" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_512 -msgid "Image 512" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Inactive" -msgstr "" - -#. module: iot_oca -#: model:ir.module.category,name:iot_oca.ir_module_category_iot -#: model:ir.ui.menu,name:iot_oca.iot_root_menu -msgid "IoT" -msgstr "" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_device_action -msgid "IoT Action" -msgstr "" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_communication_system -msgid "IoT Communication System" -msgstr "" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_communication_system_action -msgid "IoT Communication System action" -msgstr "" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_device -msgid "IoT Device" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "IoT Device Search" -msgstr "" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_device_action -msgid "IoT Devices" -msgstr "" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_system_action -msgid "IoT System" -msgstr "" - -#. module: iot_oca -#: model:res.groups,name:iot_oca.group_iot_user -msgid "IoT User" -msgstr "" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_device_group -msgid "Iot Group" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__last_contact_date -msgid "Last Contact Date" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag____last_update -msgid "Last Modified on" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__write_uid -msgid "Last Updated by" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__write_date -msgid "Last Updated on" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Last contact:" -msgstr "" - -#. module: iot_oca -#: model:res.groups,name:iot_oca.group_iot_manager -msgid "Manager" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__model -msgid "Model" -msgstr "" - -#. module: iot_oca -#: model:res.groups,comment:iot_oca.group_iot_manager -msgid "Module administrator, able to modify configuration data." -msgstr "" - -#. module: iot_oca -#: model:res.groups,comment:iot_oca.group_iot_user -msgid "Module user." -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__name -msgid "Name" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device_action__status__ok -msgid "Ok" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__date_ok -msgid "Ok date" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device_action__status__pending -msgid "Pending" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__result -msgid "Result" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_action_tree -msgid "Run" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__state -msgid "State" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__status -msgid "Status" -msgstr "" - -#. module: iot_oca -#: model:ir.ui.menu,name:iot_oca.iot_system_menu -msgid "Systems" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__tag_ids -msgid "Tag" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Unknown device" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-archive_fa-4x -msgid "archive" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "default_image" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-desktop_fa-4x -msgid "desktop" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-laptop_fa-4x -msgid "laptop" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-mobile_fa-6x -msgid "mobile" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-television_fa-4x -msgid "television" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-wifi_fa-4x -msgid "wifi" -msgstr "" diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/es.po b/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/es.po deleted file mode 100644 index 2fea697f..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/es.po +++ /dev/null @@ -1,441 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 11.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-09-03 13:40+0000\n" -"Last-Translator: Ivorra78 \n" -"Language-Team: none\n" -"Language: es\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.17\n" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__action_ids -msgid "Action" -msgstr "Acción" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__action_count -msgid "Action Count" -msgstr "# Acciones" - -#. module: iot_oca -#. odoo-python -#: code:addons/iot_oca/models/iot_communication_system_action.py:0 -#, python-format -msgid "Action cannot be processed" -msgstr "La acción no puede ser procesada" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_form -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_system_form -msgid "Actions" -msgstr "Acciones" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__active -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Active" -msgstr "Activo" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__color -msgid "Color" -msgstr "Color" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__color -msgid "Color Index" -msgstr "Índice de Color" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__communication_system_id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__communication_system_id -msgid "Communication System" -msgstr "Sistema de comunicación" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__communication_system_action_ids -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__communication_system_action_id -msgid "Communication System Action" -msgstr "Acción del sistema de comunicación" - -#. module: iot_oca -#: model:ir.ui.menu,name:iot_oca.iot_configuration_menu -msgid "Configuration" -msgstr "Configuración" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__create_uid -msgid "Created by" -msgstr "Creado por" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__create_date -msgid "Created on" -msgstr "Creado en" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Delete" -msgstr "Borrar" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__device_ids -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__device_id -msgid "Device" -msgstr "Dispositivo" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_device_group_act_window -#: model:ir.ui.menu,name:iot_oca.iot_device_group_menu -msgid "Device Group" -msgstr "Grupo de dispositivos" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_device_tag_act_window -#: model:ir.model,name:iot_oca.model_iot_device_tag -#: model:ir.ui.menu,name:iot_oca.iot_device_tag_menu -msgid "Device Tag" -msgstr "Etiqueta de dispositivo" - -#. module: iot_oca -#. odoo-python -#: code:addons/iot_oca/models/iot_device_action.py:0 -#, python-format -msgid "Device and action must be of the same system" -msgstr "El dispositivo y la acción deben ser del mismo sistema" - -#. module: iot_oca -#: model:ir.ui.menu,name:iot_oca.iot_device_menu -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_system_form -msgid "Devices" -msgstr "Dispositivos" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__display_name -msgid "Display Name" -msgstr "Nombre mostrado" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Dropdown menu" -msgstr "Menú Desplegable" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Edit..." -msgstr "Editar..." - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device_action__status__failed -msgid "Failed" -msgstr "Fallado" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__group_id -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Group" -msgstr "Grupo" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Group By" -msgstr "Agrupar Por" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__id -msgid "ID" -msgstr "ID" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__ip -msgid "IP" -msgstr "IP" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "IP:" -msgstr "IP:" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__icon -msgid "Icon" -msgstr "Icono" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_1920 -msgid "Image" -msgstr "Imagen" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_1024 -msgid "Image 1024" -msgstr "Imagen 1024" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_128 -msgid "Image 128" -msgstr "Imagen 128" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_256 -msgid "Image 256" -msgstr "Imagen 256" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_512 -msgid "Image 512" -msgstr "Imagen 512" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Inactive" -msgstr "Inactivo" - -#. module: iot_oca -#: model:ir.module.category,name:iot_oca.ir_module_category_iot -#: model:ir.ui.menu,name:iot_oca.iot_root_menu -msgid "IoT" -msgstr "IoT" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_device_action -msgid "IoT Action" -msgstr "Acción IoT" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_communication_system -msgid "IoT Communication System" -msgstr "Sistema de comunicación de IoT" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_communication_system_action -msgid "IoT Communication System action" -msgstr "Acción del sistema de comunicación IoT" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_device -msgid "IoT Device" -msgstr "Dispositivo IoT" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "IoT Device Search" -msgstr "Búsqueda de dispositivos IoT" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_device_action -msgid "IoT Devices" -msgstr "Dispositivos IoT" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_system_action -msgid "IoT System" -msgstr "Sistema IoT" - -#. module: iot_oca -#: model:res.groups,name:iot_oca.group_iot_user -msgid "IoT User" -msgstr "Usuario IoT" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_device_group -msgid "Iot Group" -msgstr "Grupo IoT" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__last_contact_date -msgid "Last Contact Date" -msgstr "Última fecha de contacto" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag____last_update -msgid "Last Modified on" -msgstr "Última modificación en" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__write_uid -msgid "Last Updated by" -msgstr "Última actualización por" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__write_date -msgid "Last Updated on" -msgstr "Última actualización en" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Last contact:" -msgstr "Último contacto:" - -#. module: iot_oca -#: model:res.groups,name:iot_oca.group_iot_manager -msgid "Manager" -msgstr "Responsable" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__model -msgid "Model" -msgstr "Modelo" - -#. module: iot_oca -#: model:res.groups,comment:iot_oca.group_iot_manager -msgid "Module administrator, able to modify configuration data." -msgstr "Administrador del módulo, puede modificar los datos de configuración." - -#. module: iot_oca -#: model:res.groups,comment:iot_oca.group_iot_user -msgid "Module user." -msgstr "Usuario del módulo." - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__name -msgid "Name" -msgstr "Nombre" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device_action__status__ok -msgid "Ok" -msgstr "Ok" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__date_ok -msgid "Ok date" -msgstr "Fecha de aceptación" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device_action__status__pending -msgid "Pending" -msgstr "Pendiente" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__result -msgid "Result" -msgstr "Resultado" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_action_tree -msgid "Run" -msgstr "Procesar" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__state -msgid "State" -msgstr "Estado" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__status -msgid "Status" -msgstr "Estados" - -#. module: iot_oca -#: model:ir.ui.menu,name:iot_oca.iot_system_menu -msgid "Systems" -msgstr "Sistemas" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__tag_ids -msgid "Tag" -msgstr "Etiqueta" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Unknown device" -msgstr "Dispositivo desconocido" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-archive_fa-4x -msgid "archive" -msgstr "archivo" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "default_image" -msgstr "imagen_por_defecto" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-desktop_fa-4x -msgid "desktop" -msgstr "escritorio" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-laptop_fa-4x -msgid "laptop" -msgstr "ordenador portátil" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-mobile_fa-6x -msgid "mobile" -msgstr "móvil" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-television_fa-4x -msgid "television" -msgstr "televisión" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-wifi_fa-4x -msgid "wifi" -msgstr "wifi" - -#~ msgid "IoT System.action" -#~ msgstr "Acción de Sistema IoT" - -#~ msgid "Ip" -#~ msgstr "Ip" - -#~ msgid "System" -#~ msgstr "Sistema" - -#~ msgid "System Action" -#~ msgstr "Acción del Sistema" - -#~ msgid "Config Devices" -#~ msgstr "Configurar Dispositivos" diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/fa.po b/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/fa.po deleted file mode 100644 index 65e67efd..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/fa.po +++ /dev/null @@ -1,426 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_oca -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-04-03 19:37+0000\n" -"Last-Translator: Mostafa Barmshory \n" -"Language-Team: none\n" -"Language: fa\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.17\n" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__action_ids -msgid "Action" -msgstr "فعالیت" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__action_count -msgid "Action Count" -msgstr "تعداد فعالیت" - -#. module: iot_oca -#. odoo-python -#: code:addons/iot_oca/models/iot_communication_system_action.py:0 -#, python-format -msgid "Action cannot be processed" -msgstr "فعالیت قابل پردازش نیست" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_form -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_system_form -msgid "Actions" -msgstr "فعالیت‌ها" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__active -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Active" -msgstr "فعال" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__color -msgid "Color" -msgstr "رنگ" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__color -msgid "Color Index" -msgstr "شماره رنگ" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__communication_system_id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__communication_system_id -msgid "Communication System" -msgstr "سیستم ارتباطی" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__communication_system_action_ids -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__communication_system_action_id -msgid "Communication System Action" -msgstr "فعالیت سیستم ارتباطی" - -#. module: iot_oca -#: model:ir.ui.menu,name:iot_oca.iot_configuration_menu -msgid "Configuration" -msgstr "پیکره بندی" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__create_uid -msgid "Created by" -msgstr "ایجاد شده توسط" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__create_date -msgid "Created on" -msgstr "ایجاد شد در" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Delete" -msgstr "حذف" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__device_ids -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__device_id -msgid "Device" -msgstr "دستگاه" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_device_group_act_window -#: model:ir.ui.menu,name:iot_oca.iot_device_group_menu -msgid "Device Group" -msgstr "گره دستگاه" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_device_tag_act_window -#: model:ir.model,name:iot_oca.model_iot_device_tag -#: model:ir.ui.menu,name:iot_oca.iot_device_tag_menu -msgid "Device Tag" -msgstr "برچسب دستگاه" - -#. module: iot_oca -#. odoo-python -#: code:addons/iot_oca/models/iot_device_action.py:0 -#, python-format -msgid "Device and action must be of the same system" -msgstr "دستگاه و فعالیت باید از یک سیستم مشابه باشد" - -#. module: iot_oca -#: model:ir.ui.menu,name:iot_oca.iot_device_menu -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_system_form -msgid "Devices" -msgstr "دستگاه‌ها" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__display_name -msgid "Display Name" -msgstr "نام نایشی" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Dropdown menu" -msgstr "منوی آبشاری" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Edit..." -msgstr "ویرایش.." - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device_action__status__failed -msgid "Failed" -msgstr "ناموفق" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__group_id -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Group" -msgstr "گروه" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Group By" -msgstr "گروه با" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__id -msgid "ID" -msgstr "شناسه" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__ip -msgid "IP" -msgstr "آدرس" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "IP:" -msgstr "آدرس:" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__icon -msgid "Icon" -msgstr "شکلک" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_1920 -msgid "Image" -msgstr "تصویر" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_1024 -msgid "Image 1024" -msgstr "تصویر ۱۰۲۴" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_128 -msgid "Image 128" -msgstr "تصویر ۱۲۸" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_256 -msgid "Image 256" -msgstr "تصویر ۲۵۶" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_512 -msgid "Image 512" -msgstr "تصویر ۵۱۲" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Inactive" -msgstr "غیر فعال" - -#. module: iot_oca -#: model:ir.module.category,name:iot_oca.ir_module_category_iot -#: model:ir.ui.menu,name:iot_oca.iot_root_menu -msgid "IoT" -msgstr "اینترنت اشیا" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_device_action -msgid "IoT Action" -msgstr "فعالیت اینترنت اشیا" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_communication_system -msgid "IoT Communication System" -msgstr "سیستم ارتباطی اینترنت اشیا" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_communication_system_action -msgid "IoT Communication System action" -msgstr "فعالیت سیستم ارتباطی اینترنت اشیا" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_device -msgid "IoT Device" -msgstr "دستگاه اینترنت اشیا" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "IoT Device Search" -msgstr "جستجوی دستگاه اینترنت اشیا" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_device_action -msgid "IoT Devices" -msgstr "دستگاه‌های اینترنت اشیا" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_system_action -msgid "IoT System" -msgstr "سیستم اینترنت اشیا" - -#. module: iot_oca -#: model:res.groups,name:iot_oca.group_iot_user -msgid "IoT User" -msgstr "کاربر اینترنت اشیا" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_device_group -msgid "Iot Group" -msgstr "گروه اینترنت اشیا" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__last_contact_date -msgid "Last Contact Date" -msgstr "آخرین تاریخ اتصال" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag____last_update -msgid "Last Modified on" -msgstr "آخرین نگارش در" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__write_uid -msgid "Last Updated by" -msgstr "آخرین به روز رسانی با" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__write_date -msgid "Last Updated on" -msgstr "آخرین به روز رسانی در" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Last contact:" -msgstr "آخرین اتصال:" - -#. module: iot_oca -#: model:res.groups,name:iot_oca.group_iot_manager -msgid "Manager" -msgstr "مدیر" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__model -msgid "Model" -msgstr "مدل" - -#. module: iot_oca -#: model:res.groups,comment:iot_oca.group_iot_manager -msgid "Module administrator, able to modify configuration data." -msgstr "مدیر ماژول قادر به تغییر داده‌های پیکره بندی است." - -#. module: iot_oca -#: model:res.groups,comment:iot_oca.group_iot_user -msgid "Module user." -msgstr "کاربر ماژول." - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__name -msgid "Name" -msgstr "نام" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device_action__status__ok -msgid "Ok" -msgstr "تایید" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__date_ok -msgid "Ok date" -msgstr "تاریخ تایید" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device_action__status__pending -msgid "Pending" -msgstr "معلق" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__result -msgid "Result" -msgstr "نتیجه" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_action_tree -msgid "Run" -msgstr "اجرا" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__state -msgid "State" -msgstr "حالت" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__status -msgid "Status" -msgstr "حالت‌ها" - -#. module: iot_oca -#: model:ir.ui.menu,name:iot_oca.iot_system_menu -msgid "Systems" -msgstr "سیستم‌ها" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__tag_ids -msgid "Tag" -msgstr "برچسب" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Unknown device" -msgstr "دستگاه ناشناس" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-archive_fa-4x -msgid "archive" -msgstr "بایگانی" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "default_image" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-desktop_fa-4x -msgid "desktop" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-laptop_fa-4x -msgid "laptop" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-mobile_fa-6x -msgid "mobile" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-television_fa-4x -msgid "television" -msgstr "تلویزیون" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-wifi_fa-4x -msgid "wifi" -msgstr "" diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/fa_IR.po b/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/fa_IR.po deleted file mode 100644 index b02b5e00..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/fa_IR.po +++ /dev/null @@ -1,424 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_oca -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: fa_IR\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__action_ids -msgid "Action" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__action_count -msgid "Action Count" -msgstr "" - -#. module: iot_oca -#. odoo-python -#: code:addons/iot_oca/models/iot_communication_system_action.py:0 -#, python-format -msgid "Action cannot be processed" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_form -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_system_form -msgid "Actions" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__active -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Active" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__color -msgid "Color" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__color -msgid "Color Index" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__communication_system_id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__communication_system_id -msgid "Communication System" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__communication_system_action_ids -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__communication_system_action_id -msgid "Communication System Action" -msgstr "" - -#. module: iot_oca -#: model:ir.ui.menu,name:iot_oca.iot_configuration_menu -msgid "Configuration" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__create_uid -msgid "Created by" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__create_date -msgid "Created on" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Delete" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__device_ids -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__device_id -msgid "Device" -msgstr "" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_device_group_act_window -#: model:ir.ui.menu,name:iot_oca.iot_device_group_menu -msgid "Device Group" -msgstr "" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_device_tag_act_window -#: model:ir.model,name:iot_oca.model_iot_device_tag -#: model:ir.ui.menu,name:iot_oca.iot_device_tag_menu -msgid "Device Tag" -msgstr "" - -#. module: iot_oca -#. odoo-python -#: code:addons/iot_oca/models/iot_device_action.py:0 -#, python-format -msgid "Device and action must be of the same system" -msgstr "" - -#. module: iot_oca -#: model:ir.ui.menu,name:iot_oca.iot_device_menu -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_system_form -msgid "Devices" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__display_name -msgid "Display Name" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Dropdown menu" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Edit..." -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device_action__status__failed -msgid "Failed" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__group_id -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Group" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Group By" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__id -msgid "ID" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__ip -msgid "IP" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "IP:" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__icon -msgid "Icon" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_1920 -msgid "Image" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_1024 -msgid "Image 1024" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_128 -msgid "Image 128" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_256 -msgid "Image 256" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_512 -msgid "Image 512" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Inactive" -msgstr "" - -#. module: iot_oca -#: model:ir.module.category,name:iot_oca.ir_module_category_iot -#: model:ir.ui.menu,name:iot_oca.iot_root_menu -msgid "IoT" -msgstr "" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_device_action -msgid "IoT Action" -msgstr "" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_communication_system -msgid "IoT Communication System" -msgstr "" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_communication_system_action -msgid "IoT Communication System action" -msgstr "" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_device -msgid "IoT Device" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "IoT Device Search" -msgstr "" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_device_action -msgid "IoT Devices" -msgstr "" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_system_action -msgid "IoT System" -msgstr "" - -#. module: iot_oca -#: model:res.groups,name:iot_oca.group_iot_user -msgid "IoT User" -msgstr "" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_device_group -msgid "Iot Group" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__last_contact_date -msgid "Last Contact Date" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag____last_update -msgid "Last Modified on" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__write_uid -msgid "Last Updated by" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__write_date -msgid "Last Updated on" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Last contact:" -msgstr "" - -#. module: iot_oca -#: model:res.groups,name:iot_oca.group_iot_manager -msgid "Manager" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__model -msgid "Model" -msgstr "" - -#. module: iot_oca -#: model:res.groups,comment:iot_oca.group_iot_manager -msgid "Module administrator, able to modify configuration data." -msgstr "" - -#. module: iot_oca -#: model:res.groups,comment:iot_oca.group_iot_user -msgid "Module user." -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__name -msgid "Name" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device_action__status__ok -msgid "Ok" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__date_ok -msgid "Ok date" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device_action__status__pending -msgid "Pending" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__result -msgid "Result" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_action_tree -msgid "Run" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__state -msgid "State" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__status -msgid "Status" -msgstr "" - -#. module: iot_oca -#: model:ir.ui.menu,name:iot_oca.iot_system_menu -msgid "Systems" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__tag_ids -msgid "Tag" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Unknown device" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-archive_fa-4x -msgid "archive" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "default_image" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-desktop_fa-4x -msgid "desktop" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-laptop_fa-4x -msgid "laptop" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-mobile_fa-6x -msgid "mobile" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-television_fa-4x -msgid "television" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-wifi_fa-4x -msgid "wifi" -msgstr "" diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/iot.pot b/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/iot.pot deleted file mode 100644 index adcd4efa..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/iot.pot +++ /dev/null @@ -1,269 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__action_ids -msgid "Action" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__action_count -msgid "Action Count" -msgstr "" - -#. module: iot -#: code:addons/iot/models/iot_system_action.py:20 -#, python-format -msgid "Action cannot be processed" -msgstr "" - -#. module: iot -#: model_terms:ir.ui.view,arch_db:iot.iot_device_form -#: model_terms:ir.ui.view,arch_db:iot.iot_system_form -msgid "Actions" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__active -#: model_terms:ir.ui.view,arch_db:iot.iot_device_search -msgid "Active" -msgstr "" - -#. module: iot -#: model:ir.ui.menu,name:iot.iot_config_device_menu -msgid "Config Devices" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__create_uid -#: model:ir.model.fields,field_description:iot.field_iot_device_action__create_uid -#: model:ir.model.fields,field_description:iot.field_iot_system__create_uid -#: model:ir.model.fields,field_description:iot.field_iot_system_action__create_uid -msgid "Created by" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__create_date -#: model:ir.model.fields,field_description:iot.field_iot_device_action__create_date -#: model:ir.model.fields,field_description:iot.field_iot_system__create_date -#: model:ir.model.fields,field_description:iot.field_iot_system_action__create_date -msgid "Created on" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device_action__device_id -#: model:ir.model.fields,field_description:iot.field_iot_system__device_ids -msgid "Device" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__device_identification -msgid "Device Identification" -msgstr "" - -#. module: iot -#: code:addons/iot/models/iot_device_action.py:28 -#, python-format -msgid "Device and action must be of the same system" -msgstr "" - -#. module: iot -#: model:ir.ui.menu,name:iot.iot_device_menu -#: model_terms:ir.ui.view,arch_db:iot.iot_system_form -msgid "Devices" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__display_name -#: model:ir.model.fields,field_description:iot.field_iot_device_action__display_name -#: model:ir.model.fields,field_description:iot.field_iot_system__display_name -#: model:ir.model.fields,field_description:iot.field_iot_system_action__display_name -msgid "Display Name" -msgstr "" - -#. module: iot -#: selection:iot.device.action,status:0 -msgid "Failed" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__id -#: model:ir.model.fields,field_description:iot.field_iot_device_action__id -#: model:ir.model.fields,field_description:iot.field_iot_system__id -#: model:ir.model.fields,field_description:iot.field_iot_system_action__id -msgid "ID" -msgstr "" - -#. module: iot -#: model_terms:ir.ui.view,arch_db:iot.iot_device_search -msgid "Inactive" -msgstr "" - -#. module: iot -#: model:ir.module.category,name:iot.ir_module_category_iot -#: model:ir.ui.menu,name:iot.iot_root_menu -msgid "IoT" -msgstr "" - -#. module: iot -#: model:ir.model,name:iot.model_iot_device_action -msgid "IoT Action" -msgstr "" - -#. module: iot -#: model:ir.model,name:iot.model_iot_device -msgid "IoT Device" -msgstr "" - -#. module: iot -#: model_terms:ir.ui.view,arch_db:iot.iot_device_search -msgid "IoT Device Search" -msgstr "" - -#. module: iot -#: model:ir.actions.act_window,name:iot.iot_device_action -#: model:ir.actions.act_window,name:iot.iot_device_config_action -msgid "IoT Devices" -msgstr "" - -#. module: iot -#: model:ir.actions.act_window,name:iot.iot_system_action -#: model:ir.model,name:iot.model_iot_system -msgid "IoT System" -msgstr "" - -#. module: iot -#: model:ir.model,name:iot.model_iot_system_action -msgid "IoT System.action" -msgstr "" - -#. module: iot -#: model:res.groups,name:iot.group_iot_user -msgid "IoT User" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__ip -msgid "Ip" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device____last_update -#: model:ir.model.fields,field_description:iot.field_iot_device_action____last_update -#: model:ir.model.fields,field_description:iot.field_iot_system____last_update -#: model:ir.model.fields,field_description:iot.field_iot_system_action____last_update -msgid "Last Modified on" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__write_uid -#: model:ir.model.fields,field_description:iot.field_iot_device_action__write_uid -#: model:ir.model.fields,field_description:iot.field_iot_system__write_uid -#: model:ir.model.fields,field_description:iot.field_iot_system_action__write_uid -msgid "Last Updated by" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__write_date -#: model:ir.model.fields,field_description:iot.field_iot_device_action__write_date -#: model:ir.model.fields,field_description:iot.field_iot_system__write_date -#: model:ir.model.fields,field_description:iot.field_iot_system_action__write_date -msgid "Last Updated on" -msgstr "" - -#. module: iot -#: model:res.groups,name:iot.group_iot_manager -msgid "Manager" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__model -msgid "Model" -msgstr "" - -#. module: iot -#: model:res.groups,comment:iot.group_iot_manager -msgid "Module administrator, able to modify configuration data." -msgstr "" - -#. module: iot -#: model:res.groups,comment:iot.group_iot_user -msgid "Module user." -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__name -#: model:ir.model.fields,field_description:iot.field_iot_system__name -#: model:ir.model.fields,field_description:iot.field_iot_system_action__name -msgid "Name" -msgstr "" - -#. module: iot -#: selection:iot.device.action,status:0 -msgid "Ok" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device_action__date_ok -msgid "Ok date" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__passphrase -msgid "Passphrase" -msgstr "" - -#. module: iot -#: selection:iot.device.action,status:0 -msgid "Pending" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device_action__result -msgid "Result" -msgstr "" - -#. module: iot -#: model_terms:ir.ui.view,arch_db:iot.iot_device_action_tree -msgid "Run" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__state -msgid "State" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device_action__status -msgid "Status" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device__system_id -#: model:ir.model.fields,field_description:iot.field_iot_system_action__system_id -msgid "System" -msgstr "" - -#. module: iot -#: model:ir.model.fields,field_description:iot.field_iot_device_action__system_action_id -#: model:ir.model.fields,field_description:iot.field_iot_system__system_action_ids -msgid "System Action" -msgstr "" - -#. module: iot -#: model:ir.ui.menu,name:iot.iot_system_menu -msgid "Systems" -msgstr "" - diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/iot_oca.pot b/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/iot_oca.pot deleted file mode 100644 index 4662fe9b..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/iot_oca.pot +++ /dev/null @@ -1,423 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_oca -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__action_ids -msgid "Action" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__action_count -msgid "Action Count" -msgstr "" - -#. module: iot_oca -#. odoo-python -#: code:addons/iot_oca/models/iot_communication_system_action.py:0 -#, python-format -msgid "Action cannot be processed" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_form -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_system_form -msgid "Actions" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__active -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Active" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__color -msgid "Color" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__color -msgid "Color Index" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__communication_system_id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__communication_system_id -msgid "Communication System" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__communication_system_action_ids -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__communication_system_action_id -msgid "Communication System Action" -msgstr "" - -#. module: iot_oca -#: model:ir.ui.menu,name:iot_oca.iot_configuration_menu -msgid "Configuration" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__create_uid -msgid "Created by" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__create_date -msgid "Created on" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Delete" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__device_ids -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__device_id -msgid "Device" -msgstr "" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_device_group_act_window -#: model:ir.ui.menu,name:iot_oca.iot_device_group_menu -msgid "Device Group" -msgstr "" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_device_tag_act_window -#: model:ir.model,name:iot_oca.model_iot_device_tag -#: model:ir.ui.menu,name:iot_oca.iot_device_tag_menu -msgid "Device Tag" -msgstr "" - -#. module: iot_oca -#. odoo-python -#: code:addons/iot_oca/models/iot_device_action.py:0 -#, python-format -msgid "Device and action must be of the same system" -msgstr "" - -#. module: iot_oca -#: model:ir.ui.menu,name:iot_oca.iot_device_menu -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_system_form -msgid "Devices" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__display_name -msgid "Display Name" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Dropdown menu" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Edit..." -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device_action__status__failed -msgid "Failed" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__group_id -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Group" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Group By" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__id -msgid "ID" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__ip -msgid "IP" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "IP:" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__icon -msgid "Icon" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_1920 -msgid "Image" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_1024 -msgid "Image 1024" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_128 -msgid "Image 128" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_256 -msgid "Image 256" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_512 -msgid "Image 512" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Inactive" -msgstr "" - -#. module: iot_oca -#: model:ir.module.category,name:iot_oca.ir_module_category_iot -#: model:ir.ui.menu,name:iot_oca.iot_root_menu -msgid "IoT" -msgstr "" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_device_action -msgid "IoT Action" -msgstr "" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_communication_system -msgid "IoT Communication System" -msgstr "" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_communication_system_action -msgid "IoT Communication System action" -msgstr "" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_device -msgid "IoT Device" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "IoT Device Search" -msgstr "" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_device_action -msgid "IoT Devices" -msgstr "" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_system_action -msgid "IoT System" -msgstr "" - -#. module: iot_oca -#: model:res.groups,name:iot_oca.group_iot_user -msgid "IoT User" -msgstr "" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_device_group -msgid "Iot Group" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__last_contact_date -msgid "Last Contact Date" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag____last_update -msgid "Last Modified on" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__write_uid -msgid "Last Updated by" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__write_date -msgid "Last Updated on" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Last contact:" -msgstr "" - -#. module: iot_oca -#: model:res.groups,name:iot_oca.group_iot_manager -msgid "Manager" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__model -msgid "Model" -msgstr "" - -#. module: iot_oca -#: model:res.groups,comment:iot_oca.group_iot_manager -msgid "Module administrator, able to modify configuration data." -msgstr "" - -#. module: iot_oca -#: model:res.groups,comment:iot_oca.group_iot_user -msgid "Module user." -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__name -msgid "Name" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device_action__status__ok -msgid "Ok" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__date_ok -msgid "Ok date" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device_action__status__pending -msgid "Pending" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__result -msgid "Result" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_action_tree -msgid "Run" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__state -msgid "State" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__status -msgid "Status" -msgstr "" - -#. module: iot_oca -#: model:ir.ui.menu,name:iot_oca.iot_system_menu -msgid "Systems" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__tag_ids -msgid "Tag" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Unknown device" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-archive_fa-4x -msgid "archive" -msgstr "" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "default_image" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-desktop_fa-4x -msgid "desktop" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-laptop_fa-4x -msgid "laptop" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-mobile_fa-6x -msgid "mobile" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-television_fa-4x -msgid "television" -msgstr "" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-wifi_fa-4x -msgid "wifi" -msgstr "" diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/it.po b/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/it.po deleted file mode 100644 index e10223a1..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/i18n/it.po +++ /dev/null @@ -1,428 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_oca -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2025-06-21 13:27+0000\n" -"Last-Translator: mymage \n" -"Language-Team: none\n" -"Language: it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.4\n" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__action_ids -msgid "Action" -msgstr "Azione" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__action_count -msgid "Action Count" -msgstr "Conteggio azione" - -#. module: iot_oca -#. odoo-python -#: code:addons/iot_oca/models/iot_communication_system_action.py:0 -#, python-format -msgid "Action cannot be processed" -msgstr "L'azione non può essere elaborata" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_form -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_system_form -msgid "Actions" -msgstr "Azioni" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__active -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Active" -msgstr "Attivo" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__color -msgid "Color" -msgstr "Colore" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__color -msgid "Color Index" -msgstr "Indice colore" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__communication_system_id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__communication_system_id -msgid "Communication System" -msgstr "Sistema di comunicazione" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__communication_system_action_ids -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__communication_system_action_id -msgid "Communication System Action" -msgstr "Azione sistema di comunicazione" - -#. module: iot_oca -#: model:ir.ui.menu,name:iot_oca.iot_configuration_menu -msgid "Configuration" -msgstr "Configurazione" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__create_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__create_uid -msgid "Created by" -msgstr "Creato da" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__create_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__create_date -msgid "Created on" -msgstr "Creato il" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Delete" -msgstr "Elimina" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__device_ids -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__device_id -msgid "Device" -msgstr "Dispositivo" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_device_group_act_window -#: model:ir.ui.menu,name:iot_oca.iot_device_group_menu -msgid "Device Group" -msgstr "Gruppo dispositivo" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_device_tag_act_window -#: model:ir.model,name:iot_oca.model_iot_device_tag -#: model:ir.ui.menu,name:iot_oca.iot_device_tag_menu -msgid "Device Tag" -msgstr "Etichetta dispositivo" - -#. module: iot_oca -#. odoo-python -#: code:addons/iot_oca/models/iot_device_action.py:0 -#, python-format -msgid "Device and action must be of the same system" -msgstr "Il dispositivo e l'azione devono essere dello stesso sistema" - -#. module: iot_oca -#: model:ir.ui.menu,name:iot_oca.iot_device_menu -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_system_form -msgid "Devices" -msgstr "Dispositivi" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__display_name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__display_name -msgid "Display Name" -msgstr "Nome visualizzato" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Dropdown menu" -msgstr "Menu a tendina" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Edit..." -msgstr "Edita..." - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device_action__status__failed -msgid "Failed" -msgstr "Fallito" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__group_id -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Group" -msgstr "Gruppo" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Group By" -msgstr "Raggruppa per" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__id -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__id -msgid "ID" -msgstr "ID" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__ip -msgid "IP" -msgstr "IP" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "IP:" -msgstr "IP:" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__icon -msgid "Icon" -msgstr "Icona" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_1920 -msgid "Image" -msgstr "Immagine" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_1024 -msgid "Image 1024" -msgstr "Immagine 1024" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_128 -msgid "Image 128" -msgstr "Immagine 128" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_256 -msgid "Image 256" -msgstr "Immagine 256" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__image_512 -msgid "Image 512" -msgstr "Immagine 512" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "Inactive" -msgstr "Inattivo" - -#. module: iot_oca -#: model:ir.module.category,name:iot_oca.ir_module_category_iot -#: model:ir.ui.menu,name:iot_oca.iot_root_menu -msgid "IoT" -msgstr "IoT" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_device_action -msgid "IoT Action" -msgstr "Azione IoT" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_communication_system -msgid "IoT Communication System" -msgstr "Sistema di comunicazione IoT" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_communication_system_action -msgid "IoT Communication System action" -msgstr "Azione sistema di comunicazione IoT" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_device -msgid "IoT Device" -msgstr "Dispositivo IoT" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_search -msgid "IoT Device Search" -msgstr "Ricerca dispositivo IoT" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_device_action -msgid "IoT Devices" -msgstr "Dispositivi IoT" - -#. module: iot_oca -#: model:ir.actions.act_window,name:iot_oca.iot_system_action -msgid "IoT System" -msgstr "Sistema IoT" - -#. module: iot_oca -#: model:res.groups,name:iot_oca.group_iot_user -msgid "IoT User" -msgstr "Utente IoT" - -#. module: iot_oca -#: model:ir.model,name:iot_oca.model_iot_device_group -msgid "Iot Group" -msgstr "Gruppo IoT" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__last_contact_date -msgid "Last Contact Date" -msgstr "Ultima data contatto" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group____last_update -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag____last_update -msgid "Last Modified on" -msgstr "Ultima modifica il" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__write_uid -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__write_uid -msgid "Last Updated by" -msgstr "Ultimo aggiornamento di" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__write_date -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__write_date -msgid "Last Updated on" -msgstr "Ultimo aggiornamento il" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Last contact:" -msgstr "Ultimo contatto:" - -#. module: iot_oca -#: model:res.groups,name:iot_oca.group_iot_manager -msgid "Manager" -msgstr "Supervisore" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__model -msgid "Model" -msgstr "Modello" - -#. module: iot_oca -#: model:res.groups,comment:iot_oca.group_iot_manager -msgid "Module administrator, able to modify configuration data." -msgstr "" -"Amministratore del modulo, abilitato alla modifica dei dati di " -"configurazione." - -#. module: iot_oca -#: model:res.groups,comment:iot_oca.group_iot_user -msgid "Module user." -msgstr "Utente modulo." - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_communication_system_action__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_group__name -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_tag__name -msgid "Name" -msgstr "Nome" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device_action__status__ok -msgid "Ok" -msgstr "Ok" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__date_ok -msgid "Ok date" -msgstr "Data ok" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device_action__status__pending -msgid "Pending" -msgstr "In attesa" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__result -msgid "Result" -msgstr "Risultato" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_action_tree -msgid "Run" -msgstr "Esegui" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__state -msgid "State" -msgstr "Stato" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device_action__status -msgid "Status" -msgstr "Stato" - -#. module: iot_oca -#: model:ir.ui.menu,name:iot_oca.iot_system_menu -msgid "Systems" -msgstr "Sistemi" - -#. module: iot_oca -#: model:ir.model.fields,field_description:iot_oca.field_iot_device__tag_ids -msgid "Tag" -msgstr "Etichetta" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "Unknown device" -msgstr "Dispositivo sconosciuto" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-archive_fa-4x -msgid "archive" -msgstr "archivia" - -#. module: iot_oca -#: model_terms:ir.ui.view,arch_db:iot_oca.iot_device_kanban -msgid "default_image" -msgstr "default_image" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-desktop_fa-4x -msgid "desktop" -msgstr "desktop" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-laptop_fa-4x -msgid "laptop" -msgstr "laptop" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-mobile_fa-6x -msgid "mobile" -msgstr "cellulare" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-television_fa-4x -msgid "television" -msgstr "televisione" - -#. module: iot_oca -#: model:ir.model.fields.selection,name:iot_oca.selection__iot_device__icon__fa_fa-wifi_fa-4x -msgid "wifi" -msgstr "wifi" diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/migrations/14.0.1.0.0/pre-migration.py b/odoo-bringout-oca-iot-iot_oca/iot_oca/migrations/14.0.1.0.0/pre-migration.py deleted file mode 100644 index 09075334..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/migrations/14.0.1.0.0/pre-migration.py +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright 2021 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openupgradelib import openupgrade - -_model_renames = [ - ("iot.system", "iot.communication.system"), - ("iot.system.action", "iot.communication.system.action"), -] - -_table_renames = [ - ("iot_system", "iot_communication_system"), - ("iot_system_action", "iot_communication_system_action"), -] - -_column_renames = { - "iot_communication_system_action": [("system_id", "communication_system_id")], - "iot_device": [("system_id", "communication_system_id")], - "iot_device_action": [("system_action_id", "communication_system_action_id")], -} - - -@openupgrade.migrate() -def migrate(env, version): - openupgrade.rename_models(env.cr, _model_renames) - openupgrade.rename_tables(env.cr, _table_renames) - openupgrade.rename_columns(env.cr, _column_renames) diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/models/__init__.py b/odoo-bringout-oca-iot-iot_oca/iot_oca/models/__init__.py deleted file mode 100644 index 164df931..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/models/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -from . import iot_device -from . import iot_device_action -from . import iot_communication_system -from . import iot_communication_system_action -from . import iot_device_group -from . import iot_device_tag diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/models/iot_communication_system.py b/odoo-bringout-oca-iot-iot_oca/iot_oca/models/iot_communication_system.py deleted file mode 100644 index a1e430e9..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/models/iot_communication_system.py +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright (C) 2018 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import fields, models - - -class IoTCommunicationSystem(models.Model): - _name = "iot.communication.system" - _description = "IoT Communication System" - # TODO: Rename it to iot.communication.system System is confusing - - name = fields.Char(required=True) - device_ids = fields.One2many("iot.device", inverse_name="communication_system_id") - communication_system_action_ids = fields.One2many( - "iot.communication.system.action", inverse_name="communication_system_id" - ) diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/models/iot_communication_system_action.py b/odoo-bringout-oca-iot-iot_oca/iot_oca/models/iot_communication_system_action.py deleted file mode 100644 index 0c24d056..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/models/iot_communication_system_action.py +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright (C) 2018 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -import logging -import traceback -from io import StringIO - -from odoo import _, fields, models -from odoo.exceptions import ValidationError - -_logger = logging.getLogger(__name__) - - -class IoTSystemAction(models.Model): - _name = "iot.communication.system.action" - _description = "IoT Communication System action" - - name = fields.Char(required=True) - communication_system_id = fields.Many2one("iot.communication.system", required=True) - - def _run(self, device_action): - raise ValidationError(_("Action cannot be processed")) - - def run(self, device_action): - try: - result = self._run(device_action) - return "ok", result - except Exception: - buff = StringIO() - traceback.print_exc(file=buff) - error = buff.getvalue() - _logger.warning(error) - return "failed", error diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/models/iot_device.py b/odoo-bringout-oca-iot-iot_oca/iot_oca/models/iot_device.py deleted file mode 100644 index eee04eaa..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/models/iot_device.py +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright (C) 2018 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import api, fields, models - - -class IoTDevice(models.Model): - _name = "iot.device" - _description = "IoT Device" - _inherit = "image.mixin" - - name = fields.Char(required=True) - communication_system_id = fields.Many2one("iot.communication.system", required=True) - action_ids = fields.One2many("iot.device.action", inverse_name="device_id") - active = fields.Boolean(default=True) - state = fields.Selection([], readonly=True) - model = fields.Char() - ip = fields.Char(string="IP") - action_count = fields.Integer(compute="_compute_action_count") - group_id = fields.Many2one("iot.device.group") - tag_ids = fields.Many2many("iot.device.tag") - color = fields.Integer() - last_contact_date = fields.Datetime(readonly=True) - icon = fields.Selection( - [ - ("fa fa-television fa-4x", "television"), - ("fa fa-wifi fa-4x", "wifi"), - ("fa fa-laptop fa-4x", "laptop"), - ("fa fa-desktop fa-4x", "desktop"), - ("fa fa-archive fa-4x", "archive"), - ("fa fa-mobile fa-6x", "mobile"), - ] - ) - - @api.depends("action_ids") - def _compute_action_count(self): - for record in self: - record.action_count = len(record.action_ids) - - def device_run_action(self): - system_action = self.env["iot.communication.system.action"].browse( - self.env.context.get("iot_communication_system_action_id") - ) - for rec in self: - action = self.env["iot.device.action"].create( - { - "device_id": rec.id, - "communication_system_action_id": system_action.id, - } - ) - action.run() diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/models/iot_device_action.py b/odoo-bringout-oca-iot-iot_oca/iot_oca/models/iot_device_action.py deleted file mode 100644 index 32512cf0..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/models/iot_device_action.py +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright (C) 2018 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import _, api, fields, models -from odoo.exceptions import ValidationError - - -class IoTDeviceAction(models.Model): - _name = "iot.device.action" - _description = "IoT Action" - _order = "date_ok desc" - - device_id = fields.Many2one("iot.device", required=True, readonly=True) - communication_system_action_id = fields.Many2one( - "iot.communication.system.action", required=True - ) - status = fields.Selection( - [("ok", "Ok"), ("pending", "Pending"), ("failed", "Failed")], - required=True, - default="pending", - ) - result = fields.Text() - date_ok = fields.Datetime(readonly=True, string="Ok date") - - @api.constrains("device_id", "communication_system_action_id") - def _check_system(self): - if self.filtered( - lambda r: r.device_id.communication_system_id - != r.communication_system_action_id.communication_system_id - ): - raise ValidationError(_("Device and action must be of the same system")) - - def run_extra_actions(self, status, result): - return - - def run(self): - self.ensure_one() - if self.status != "ok": - status, result = self.communication_system_action_id.run(self) - self.write( - { - "status": status, - "result": result, - "date_ok": fields.Datetime.now() if status == "ok" else False, - } - ) - self.run_extra_actions(status, result) diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/models/iot_device_group.py b/odoo-bringout-oca-iot-iot_oca/iot_oca/models/iot_device_group.py deleted file mode 100644 index 5c4db11d..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/models/iot_device_group.py +++ /dev/null @@ -1,11 +0,0 @@ -# Copyright 2021 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import fields, models - - -class IotDeviceGroup(models.Model): - _name = "iot.device.group" - _description = "Iot Group" - - name = fields.Char(required=True) diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/models/iot_device_tag.py b/odoo-bringout-oca-iot-iot_oca/iot_oca/models/iot_device_tag.py deleted file mode 100644 index f1f6c007..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/models/iot_device_tag.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright 2021 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import fields, models - - -class IotDeviceTag(models.Model): - - _name = "iot.device.tag" - _description = "Device Tag" - - name = fields.Char(required=True) - color = fields.Integer(string="Color Index") diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-iot-iot_oca/iot_oca/readme/CONTRIBUTORS.rst deleted file mode 100644 index 2c3751e9..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,2 +0,0 @@ -* Enric Tobella -* ViraWeb123 diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/readme/DESCRIPTION.rst b/odoo-bringout-oca-iot-iot_oca/iot_oca/readme/DESCRIPTION.rst deleted file mode 100644 index 18b7de1f..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/readme/DESCRIPTION.rst +++ /dev/null @@ -1 +0,0 @@ -This addon is a base module used for all iot modules. diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/security/iot_security.xml b/odoo-bringout-oca-iot-iot_oca/iot_oca/security/iot_security.xml deleted file mode 100644 index 1f5fd500..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/security/iot_security.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - IoT - - - IoT User - Module user. - - - - Manager - Module administrator, able to modify configuration data. - - - - - diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/security/ir.model.access.csv b/odoo-bringout-oca-iot-iot_oca/iot_oca/security/ir.model.access.csv deleted file mode 100644 index 384d6577..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/security/ir.model.access.csv +++ /dev/null @@ -1,13 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_iot_device,access_iot_device,model_iot_device,group_iot_user,1,1,0,0 -manage_iot_device,access_iot_device,model_iot_device,group_iot_manager,1,1,1,0 -access_iot_device_action,access_iot_device_action,model_iot_device_action,group_iot_user,1,1,1,0 -manage_iot_device_action,access_iot_device_action,model_iot_device_action,group_iot_manager,1,1,1,0 -access_iot_system,access_iot_system,model_iot_communication_system,group_iot_user,1,0,0,0 -manage_iot_system,access_iot_system,model_iot_communication_system,group_iot_manager,1,1,1,0 -access_iot_system_action,access_iot_system_action,model_iot_communication_system_action,group_iot_user,1,0,0,0 -manage_iot_system_action,access_iot_system_action,model_iot_communication_system_action,group_iot_manager,1,1,1,0 -access_iot_device_group,access_iot_device_group,model_iot_device_group,group_iot_user,1,0,0,0 -manage_iot_device_group,manage_iot_device_group,model_iot_device_group,group_iot_manager,1,1,1,0 -access_iot_device_tag,access_iot_device_tag,model_iot_device_tag,group_iot_user,1,0,0,0 -manage_iot_device_tag,manage_iot_device_tag,model_iot_device_tag,group_iot_manager,1,1,1,0 diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/static/description/icon.png b/odoo-bringout-oca-iot-iot_oca/iot_oca/static/description/icon.png deleted file mode 100644 index 325deacb..00000000 Binary files a/odoo-bringout-oca-iot-iot_oca/iot_oca/static/description/icon.png and /dev/null differ diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/static/description/icon.svg b/odoo-bringout-oca-iot-iot_oca/iot_oca/static/description/icon.svg deleted file mode 100644 index 66bc24ae..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/static/description/icon.svg +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - image/svg+xml - - icon - - - - - - - - - - - - - - - icon - - - - - - - - - diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/static/description/index.html b/odoo-bringout-oca-iot-iot_oca/iot_oca/static/description/index.html deleted file mode 100644 index 9e4e3142..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/static/description/index.html +++ /dev/null @@ -1,424 +0,0 @@ - - - - - -IoT Base - - - -
-

IoT Base

- - -

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

-

This addon is a base module used for all iot modules.

-

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

-
    -
  • Creu Blanca
  • -
-
-
-

Contributors

- -
-
-

Maintainers

-

This module is maintained by the OCA.

- -Odoo Community Association - -

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

-

This module is part of the OCA/iot project on GitHub.

-

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

-
-
-
- - diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/tests/__init__.py b/odoo-bringout-oca-iot-iot_oca/iot_oca/tests/__init__.py deleted file mode 100644 index c1763e19..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import test_iot diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/tests/test_iot.py b/odoo-bringout-oca-iot-iot_oca/iot_oca/tests/test_iot.py deleted file mode 100644 index 4a1908a4..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/tests/test_iot.py +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright (C) 2018 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - -from unittest.mock import patch - -from odoo.exceptions import ValidationError -from odoo.tests.common import TransactionCase -from odoo.tools import mute_logger - - -class TestIoT(TransactionCase): - def setUp(self): - super().setUp() - self.system = self.env["iot.communication.system"].create({"name": "Testing"}) - self.system_2 = self.env["iot.communication.system"].create( - {"name": "Testing 02"} - ) - self.action = self.env["iot.communication.system.action"].create( - {"name": "test", "communication_system_id": self.system.id} - ) - self.action_2 = self.env["iot.communication.system.action"].create( - {"name": "test 02", "communication_system_id": self.system_2.id} - ) - self.device = self.env["iot.device"].create( - {"name": "Device", "communication_system_id": self.system.id} - ) - - def test_action(self): - self.assertEqual(self.device.action_count, 0) - with mute_logger("odoo.addons.iot_oca.models.iot_communication_system_action"): - self.device.with_context( - iot_communication_system_action_id=self.action.id - ).device_run_action() - self.assertEqual(self.device.action_count, 1) - self.assertEqual(self.device.action_ids.status, "failed") - - def test_correct_action(self): - self.assertEqual(self.device.action_count, 0) - with patch( - "odoo.addons.iot_oca.models.iot_communication_system_action." - "IoTSystemAction._run", - return_value=("ok", ""), - ): - self.device.with_context( - iot_communication_system_action_id=self.action.id - ).device_run_action() - self.assertEqual(self.device.action_count, 1) - self.assertEqual(self.device.action_ids.status, "ok") - - def test_constrains(self): - with self.assertRaises(ValidationError): - self.device.with_context( - iot_communication_system_action_id=self.action_2.id - ).device_run_action() diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/views/iot_device_group.xml b/odoo-bringout-oca-iot-iot_oca/iot_oca/views/iot_device_group.xml deleted file mode 100644 index 3bfddebc..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/views/iot_device_group.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - iot.device.group.form (in iot_oca) - iot.device.group - -
-
- - - - - - - - - - iot.device.group.search (in iot_oca) - iot.device.group - - - - - - - - iot.device.group.tree (in iot_oca) - iot.device.group - - - - - - - - Device Group - - iot.device.group - tree,form - [] - {} - - - Device Group - - - - - diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/views/iot_device_tag.xml b/odoo-bringout-oca-iot-iot_oca/iot_oca/views/iot_device_tag.xml deleted file mode 100644 index 15880586..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/views/iot_device_tag.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - iot.device.tag.form (in iot_oca) - iot.device.tag - -
-
- - - - - - - - - - - - - iot.device.tag.search (in iot_oca) - iot.device.tag - - - - - - - - iot.device.tag.tree (in iot_oca) - iot.device.tag - - - - - - - - - Device Tag - - iot.device.tag - tree,form - [] - {} - - - Device Tag - - - - - diff --git a/odoo-bringout-oca-iot-iot_oca/iot_oca/views/iot_device_views.xml b/odoo-bringout-oca-iot-iot_oca/iot_oca/views/iot_device_views.xml deleted file mode 100644 index 13b4ab01..00000000 --- a/odoo-bringout-oca-iot-iot_oca/iot_oca/views/iot_device_views.xml +++ /dev/null @@ -1,249 +0,0 @@ - - - - iot.device.tree - iot.device - - - - - - - - - - - - - iot.device.form - iot.device - -
-
- - -
- - -
-

- -

-
- - - - - - - - - - - - - - - - - - - - - - -
- - - iot.device.action.tree - iot.device.action - - - - - - - - - [('applies_to', '=', 'device')] - - - {'invisible': [('communication_system_id', '=', False)]} - - - - - - iot.device.kanban - iot.device - - - - - - Outputs - - - - - diff --git a/odoo-bringout-oca-iot-iot_output_oca/pyproject.toml b/odoo-bringout-oca-iot-iot_output_oca/pyproject.toml deleted file mode 100644 index af5228e0..00000000 --- a/odoo-bringout-oca-iot-iot_output_oca/pyproject.toml +++ /dev/null @@ -1,42 +0,0 @@ -[project] -name = "odoo-bringout-oca-iot-iot_output_oca" -version = "16.0.0" -description = "IoT Output - IoT allow multiple outputs" -authors = [ - { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } -] -dependencies = [ - "odoo-bringout-oca-iot-iot_oca>=16.0.0", - "requests>=2.25.1" -] -readme = "README.md" -requires-python = ">= 3.11" -classifiers = [ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Developers", - "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Topic :: Office/Business", -] - -[project.urls] -homepage = "https://github.com/bringout/0" -repository = "https://github.com/bringout/0" - -[build-system] -requires = ["hatchling"] -build-backend = "hatchling.build" - -[tool.hatch.metadata] -allow-direct-references = true - -[tool.hatch.build.targets.wheel] -packages = ["iot_output_oca"] - -[tool.rye] -managed = true -dev-dependencies = [ - "pytest>=8.4.1", -] diff --git a/odoo-bringout-oca-iot-iot_rule/README.md b/odoo-bringout-oca-iot-iot_rule/README.md deleted file mode 100644 index 66eeba83..00000000 --- a/odoo-bringout-oca-iot-iot_rule/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# IoT Rule - -Odoo addon: iot_rule - -## Installation - -```bash -pip install odoo-bringout-oca-iot-iot_rule -``` - -## Dependencies - -This addon depends on: -- iot_input_oca - -## Manifest Information - -- **Name**: IoT Rule -- **Version**: 16.0.1.0.0 -- **Category**: N/A -- **License**: AGPL-3 -- **Installable**: False - -## Source - -Based on [OCA/iot](https://github.com/OCA/iot) branch 16.0, addon `iot_rule`. - -## License - -This package maintains the original AGPL-3 license from the upstream Odoo project. - -## Documentation - -- Overview: doc/OVERVIEW.md -- Architecture: doc/ARCHITECTURE.md -- Models: doc/MODELS.md -- Controllers: doc/CONTROLLERS.md -- Wizards: doc/WIZARDS.md -- Install: doc/INSTALL.md -- Usage: doc/USAGE.md -- Configuration: doc/CONFIGURATION.md -- Dependencies: doc/DEPENDENCIES.md -- Troubleshooting: doc/TROUBLESHOOTING.md -- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-iot-iot_rule/doc/ARCHITECTURE.md b/odoo-bringout-oca-iot-iot_rule/doc/ARCHITECTURE.md deleted file mode 100644 index 282c40b7..00000000 --- a/odoo-bringout-oca-iot-iot_rule/doc/ARCHITECTURE.md +++ /dev/null @@ -1,32 +0,0 @@ -# Architecture - -```mermaid -flowchart TD - U[Users] -->|HTTP| V[Views and QWeb Templates] - V --> C[Controllers] - V --> W[Wizards – Transient Models] - C --> M[Models and ORM] - W --> M - M --> R[Reports] - DX[Data XML] --> M - S[Security – ACLs and Groups] -. enforces .-> M - - subgraph Iot_rule Module - iot_rule - direction LR - M:::layer - W:::layer - C:::layer - V:::layer - R:::layer - S:::layer - DX:::layer - end - - classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px -``` - -Notes -- Views include tree/form/kanban templates and report templates. -- Controllers provide website/portal routes when present. -- Wizards are UI flows implemented with `models.TransientModel`. -- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-iot-iot_rule/doc/CONFIGURATION.md b/odoo-bringout-oca-iot-iot_rule/doc/CONFIGURATION.md deleted file mode 100644 index 5d9da175..00000000 --- a/odoo-bringout-oca-iot-iot_rule/doc/CONFIGURATION.md +++ /dev/null @@ -1,3 +0,0 @@ -# Configuration - -Refer to Odoo settings for iot_rule. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-iot-iot_rule/doc/CONTROLLERS.md b/odoo-bringout-oca-iot-iot_rule/doc/CONTROLLERS.md deleted file mode 100644 index f628e770..00000000 --- a/odoo-bringout-oca-iot-iot_rule/doc/CONTROLLERS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Controllers - -This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-iot-iot_rule/doc/DEPENDENCIES.md b/odoo-bringout-oca-iot-iot_rule/doc/DEPENDENCIES.md deleted file mode 100644 index b0a19800..00000000 --- a/odoo-bringout-oca-iot-iot_rule/doc/DEPENDENCIES.md +++ /dev/null @@ -1,5 +0,0 @@ -# Dependencies - -This addon depends on: - -- [iot_input_oca](https://github.com/bringout/oca-technical) diff --git a/odoo-bringout-oca-iot-iot_rule/doc/FAQ.md b/odoo-bringout-oca-iot-iot_rule/doc/FAQ.md deleted file mode 100644 index d78654d4..00000000 --- a/odoo-bringout-oca-iot-iot_rule/doc/FAQ.md +++ /dev/null @@ -1,4 +0,0 @@ -# FAQ - -- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged). -- Q: How to enable? A: Start server with --addon iot_rule or install in UI. diff --git a/odoo-bringout-oca-iot-iot_rule/doc/INSTALL.md b/odoo-bringout-oca-iot-iot_rule/doc/INSTALL.md deleted file mode 100644 index 7565aa53..00000000 --- a/odoo-bringout-oca-iot-iot_rule/doc/INSTALL.md +++ /dev/null @@ -1,7 +0,0 @@ -# Install - -```bash -pip install odoo-bringout-oca-iot-iot_rule" -# or -uv pip install odoo-bringout-oca-iot-iot_rule" -``` diff --git a/odoo-bringout-oca-iot-iot_rule/doc/MODELS.md b/odoo-bringout-oca-iot-iot_rule/doc/MODELS.md deleted file mode 100644 index 0e1b7947..00000000 --- a/odoo-bringout-oca-iot-iot_rule/doc/MODELS.md +++ /dev/null @@ -1,19 +0,0 @@ -# Models - -Detected core models and extensions in iot_rule. - -```mermaid -classDiagram - class iot_key - class iot_key_action - class iot_key_mixin - class iot_lock - class iot_rule - class res_partner - class iot_device - class iot_device_input -``` - -Notes -- Classes show model technical names; fields omitted for brevity. -- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-iot-iot_rule/doc/OVERVIEW.md b/odoo-bringout-oca-iot-iot_rule/doc/OVERVIEW.md deleted file mode 100644 index e9f8a449..00000000 --- a/odoo-bringout-oca-iot-iot_rule/doc/OVERVIEW.md +++ /dev/null @@ -1,6 +0,0 @@ -# Overview - -Packaged Odoo addon: iot_rule. Provides features documented in upstream Odoo 16 under this addon. - -- Source: OCA/OCB 16.0, addon iot_rule -- License: LGPL-3 diff --git a/odoo-bringout-oca-iot-iot_rule/doc/REPORTS.md b/odoo-bringout-oca-iot-iot_rule/doc/REPORTS.md deleted file mode 100644 index e0ea35fb..00000000 --- a/odoo-bringout-oca-iot-iot_rule/doc/REPORTS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Reports - -This module does not define custom reports. diff --git a/odoo-bringout-oca-iot-iot_rule/doc/SECURITY.md b/odoo-bringout-oca-iot-iot_rule/doc/SECURITY.md deleted file mode 100644 index d4a3e063..00000000 --- a/odoo-bringout-oca-iot-iot_rule/doc/SECURITY.md +++ /dev/null @@ -1,34 +0,0 @@ -# Security - -Access control and security definitions in iot_rule. - -## Access Control Lists (ACLs) - -Model access permissions defined in: -- **[ir.model.access.csv](../iot_rule/security/ir.model.access.csv)** - - 8 model access rules - -## Record Rules - -Row-level security rules defined in: - -```mermaid -graph TB - subgraph "Security Layers" - A[Users] --> B[Groups] - B --> C[Access Control Lists] - C --> D[Models] - B --> E[Record Rules] - E --> F[Individual Records] - end -``` - -Security files overview: -- **[ir.model.access.csv](../iot_rule/security/ir.model.access.csv)** - - Model access permissions (CRUD rights) - -Notes -- Access Control Lists define which groups can access which models -- Record Rules provide row-level security (filter records by user/group) -- Security groups organize users and define permission sets -- All security is enforced at the ORM level by Odoo diff --git a/odoo-bringout-oca-iot-iot_rule/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-iot-iot_rule/doc/TROUBLESHOOTING.md deleted file mode 100644 index 56853cb7..00000000 --- a/odoo-bringout-oca-iot-iot_rule/doc/TROUBLESHOOTING.md +++ /dev/null @@ -1,5 +0,0 @@ -# Troubleshooting - -- Ensure Python and Odoo environment matches repo guidance. -- Check database connectivity and logs if startup fails. -- Validate that dependent addons listed in DEPENDENCIES.md are installed. diff --git a/odoo-bringout-oca-iot-iot_rule/doc/USAGE.md b/odoo-bringout-oca-iot-iot_rule/doc/USAGE.md deleted file mode 100644 index dd06d32f..00000000 --- a/odoo-bringout-oca-iot-iot_rule/doc/USAGE.md +++ /dev/null @@ -1,7 +0,0 @@ -# Usage - -Start Odoo including this addon (from repo root): - -```bash -python3 scripts/nix_odoo_web_server.py --db-name mydb --addon iot_rule -``` diff --git a/odoo-bringout-oca-iot-iot_rule/doc/WIZARDS.md b/odoo-bringout-oca-iot-iot_rule/doc/WIZARDS.md deleted file mode 100644 index 48e790dc..00000000 --- a/odoo-bringout-oca-iot-iot_rule/doc/WIZARDS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Wizards - -This module does not include UI wizards. diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/README.rst b/odoo-bringout-oca-iot-iot_rule/iot_rule/README.rst deleted file mode 100644 index 4572f4eb..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/README.rst +++ /dev/null @@ -1,86 +0,0 @@ -======== -IoT Rule -======== - -.. - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! This file is generated by oca-gen-addon-readme !! - !! changes will be overwritten. !! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:8776ccfdb4eda7e7911d811faef3f33474c34c474237b9afd180e4fe5ca1b233 - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -.. |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-OCA%2Fiot-lightgray.png?logo=github - :target: https://github.com/OCA/iot/tree/16.0/iot_rule - :alt: OCA/iot -.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/iot-16-0/iot-16-0-iot_rule - :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/iot&target_branch=16.0 - :alt: Try me on Runboat - -|badge1| |badge2| |badge3| |badge4| |badge5| - -This addon allows to define IoT Rules. - -A Rule specifies which Inputs that can be controlled by a certain Key. -The Key is owned by an Agent (Employee, Partner or anonymous). -The Input is a request from an IoT Device that executes a certain function in Odoo. -This function will check if the Key (= the Agent) is allowed by any Rule to "control" the Device. -If Odoo answers positively the Agent will be allowed the to execute some Function on the Device -(for example open a door or switch on a relay). - -**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 -~~~~~~~ - -* CreuBlanca -* ForgeFlow - -Contributors -~~~~~~~~~~~~ - -* Enric Tobella -* Luis Burrel -* Aaron Henriquez - -Maintainers -~~~~~~~~~~~ - -This module is maintained by the OCA. - -.. image:: https://odoo-community.org/logo.png - :alt: Odoo Community Association - :target: https://odoo-community.org - -OCA, or the Odoo Community Association, is a nonprofit organization whose -mission is to support the collaborative development of Odoo features and -promote its widespread use. - -This module is part of the `OCA/iot `_ project on GitHub. - -You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/__init__.py b/odoo-bringout-oca-iot-iot_rule/iot_rule/__init__.py deleted file mode 100644 index aee8895e..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from . import models -from . import wizards diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/__manifest__.py b/odoo-bringout-oca-iot-iot_rule/iot_rule/__manifest__.py deleted file mode 100644 index 9dd78a72..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/__manifest__.py +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright 2019 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -{ - "name": "IoT Rule", - "summary": """ - Define IoT Rules (Keys that control Inputs)""", - "version": "16.0.1.0.0", - "license": "AGPL-3", - "author": "CreuBlanca,ForgeFlow,Odoo Community Association (OCA)", - "website": "https://github.com/OCA/iot", - "depends": ["iot_input_oca"], - "data": [ - "wizards/iot_key_wizard.xml", - "security/ir.model.access.csv", - "views/iot_rule.xml", - "views/iot_key.xml", - "views/iot_key_action.xml", - "views/iot_lock.xml", - "views/res_partner.xml", - "views/iot_device_input.xml", - ], - "demo": [ - "demo/iot_rule_demo.xml", - "demo/iot_lock_demo.xml", - "demo/iot_key_demo.xml", - ], -} diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/demo/iot_key_demo.xml b/odoo-bringout-oca-iot-iot_rule/iot_rule/demo/iot_key_demo.xml deleted file mode 100644 index 400a0260..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/demo/iot_key_demo.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - Room 101 - - - - Room 102 - - - - Admin - - - - Demo - - - diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/demo/iot_lock_demo.xml b/odoo-bringout-oca-iot-iot_rule/iot_rule/demo/iot_lock_demo.xml deleted file mode 100644 index 1b921916..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/demo/iot_lock_demo.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - Room 101 - - - - Room 102 - - - - Gym - - - - Spa - - - - Janitor - - - diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/demo/iot_rule_demo.xml b/odoo-bringout-oca-iot-iot_rule/iot_rule/demo/iot_rule_demo.xml deleted file mode 100644 index f6e629d5..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/demo/iot_rule_demo.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - Employees - - - Premium Locks - - - - Standard Locks - - - - Room 101 - - - - Room 102 - - - diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/i18n/bs.po b/odoo-bringout-oca-iot-iot_rule/iot_rule/i18n/bs.po deleted file mode 100644 index f7f84b4c..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/i18n/bs.po +++ /dev/null @@ -1,355 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_rule -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: iot_rule -#. odoo-python -#: code:addons/iot_rule/models/iot_rule.py:0 -#, python-format -msgid "A recurssion was found" -msgstr "Pronađena je rekurzija" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__action_ids -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__action_ids -msgid "Action" -msgstr "Akcija" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__active -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__active -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__active -msgid "Active" -msgstr "Aktivan" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_form_view -msgid "Authorized Lock Groups" -msgstr "Ovlašćene grupe brave" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_wizard_form_view -msgid "Cancel" -msgstr "Otkaži" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_res_partner -msgid "Contact" -msgstr "Kontakt" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_wizard_form_view -msgid "Create" -msgstr "Kreiraj" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_key_wizard -msgid "Create a Key" -msgstr "Kreiraj ključ" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__create_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__create_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__create_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__create_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__create_uid -msgid "Created by" -msgstr "Kreirao" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__create_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__create_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__create_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__create_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__create_date -msgid "Created on" -msgstr "Kreirano" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__description -msgid "Description" -msgstr "Opis" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_device_input -msgid "Device input" -msgstr "Ulaz uređaja" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__display_name -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__display_name -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__display_name -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__display_name -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__display_name -msgid "Display Name" -msgstr "Prikazani naziv" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__expiration_date -msgid "Expiration Date" -msgstr "Datum isteka" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_search_view -msgid "Expired" -msgstr "Istekao" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_search_view -msgid "Expired Keys" -msgstr "Istekli ključevi" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_device_input_form_view -msgid "Generate IoT Lock for this Input" -msgstr "Generiraj IoT bravu za ovaj unos" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__id -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__id -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__id -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__id -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__id -msgid "ID" -msgstr "ID" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_device -msgid "IoT Device" -msgstr "IoT uređaj" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_key -msgid "IoT Key" -msgstr "IoT ključ" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_key_action -msgid "IoT Key - Actions Log" -msgstr "IoT ključ - Dnevnik radnji" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_key_wizard_act_window -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_wizard_form_view -msgid "IoT Key Wizard" -msgstr "Čarobnjak IoT ključa" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_lock -msgid "IoT Lock" -msgstr "IoT brava" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_device_input_form_view -msgid "IoT Lock associated" -msgstr "IoT brava povezana" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_rule -msgid "IoT Rule (Relation Key-Lock)" -msgstr "IoT pravilo (veza ključ-brava)" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_mixin__iot_key_ids -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__iot_key_id -#: model:ir.model.fields,field_description:iot_rule.field_res_partner__iot_key_ids -#: model:ir.model.fields,field_description:iot_rule.field_res_users__iot_key_ids -msgid "Iot Key" -msgstr "IoT ključ" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_mixin__iot_key_count -#: model:ir.model.fields,field_description:iot_rule.field_res_partner__iot_key_count -#: model:ir.model.fields,field_description:iot_rule.field_res_users__iot_key_count -msgid "Iot Key Count" -msgstr "Broj IoT ključa" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__key_id -msgid "Key" -msgstr "Ključ" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__key_type -msgid "Key Type" -msgstr "Tip ključa" - -#. module: iot_rule -#: model:ir.model.constraint,message:iot_rule.constraint_iot_key_unique_virtual_key_uniq -msgid "Key must be unique" -msgstr "Ključ mora biti jedinstven" - -#. module: iot_rule -#. odoo-python -#: code:addons/iot_rule/wizards/iot_key_wizard.py:0 -#: code:addons/iot_rule/wizards/iot_key_wizard.py:0 -#, python-format -msgid "Key of %s" -msgstr "Ključ od %s" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__key_name -msgid "Key's Name" -msgstr "Naziv ključa" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.res_partner_form_view -msgid "Keys" -msgstr "Ključevi" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_key_act_window -#: model:ir.ui.menu,name:iot_rule.iot_key_menu -msgid "Keys (Persons)" -msgstr "Ključevi (osobe)" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key____last_update -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action____last_update -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard____last_update -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock____last_update -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule____last_update -msgid "Last Modified on" -msgstr "Zadnje mijenjano" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__write_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__write_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__write_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__write_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__write_uid -msgid "Last Updated by" -msgstr "Zadnji ažurirao" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__write_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__write_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__write_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__write_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__write_date -msgid "Last Updated on" -msgstr "Zadnje ažurirano" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_device_input__lock_id -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__lock_id -msgid "Lock" -msgstr "Zaključaj" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__lock_ids -msgid "Locks" -msgstr "Brave" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_lock_act_window -#: model:ir.ui.menu,name:iot_rule.iot_lock_menu -msgid "Locks (Devices)" -msgstr "Brave (uređaji)" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_lock_form_view -msgid "Member of these Groups of Locks" -msgstr "Član ovih grupa brava" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_key_mixin -msgid "Mixin for relation between record and Iot Keys" -msgstr "Mixin za vezu između zapisa i IoT ključeva" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__name -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__name -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__name -msgid "Name" -msgstr "Naziv:" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_search_view -msgid "Not Expired" -msgstr "Neisteklo" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_search_view -msgid "Not expired Keys" -msgstr "Neistekli ključevi" - -#. module: iot_rule -#. odoo-python -#: code:addons/iot_rule/models/iot_key.py:0 -#, python-format -msgid "Only one key can be assigned to this model" -msgstr "Samo jedan ključ se može dodijeliti ovom modelu" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__parent_ids -msgid "Parent" -msgstr "Nasljeđeni" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__res_id -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__res_id -msgid "Res" -msgstr "Res" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__res_model -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__res_model -msgid "Res Model" -msgstr "Res model" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__result -msgid "Result" -msgstr "Rezultat" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__rule_ids -msgid "Rule" -msgstr "Pravilo" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_rule_act_window -#: model:ir.actions.act_window,name:iot_rule.iot_rule_action -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__rule_ids -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__rule_ids -#: model:ir.ui.menu,name:iot_rule.iot_define_rules_menu -#: model:ir.ui.menu,name:iot_rule.iot_rule_menu -msgid "Rules" -msgstr "Pravila" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__timestamp -msgid "Time" -msgstr "Vrijeme" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__unique_virtual_key -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__unique_virtual_key -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__unique_virtual_key -msgid "Unique Virtual Key" -msgstr "Jedinstveni virtualni ključ" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_wizard_form_view -msgid "Update" -msgstr "Ažuriraj" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_key_action_act_window -#: model:ir.ui.menu,name:iot_rule.iot_key_action_menu -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_form_view -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_lock_form_view -msgid "Usage Log" -msgstr "Dnevnik korištenja" diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/i18n/es.po b/odoo-bringout-oca-iot-iot_rule/iot_rule/i18n/es.po deleted file mode 100644 index 816fb203..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/i18n/es.po +++ /dev/null @@ -1,355 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_rule -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-11-15 17:38+0000\n" -"Last-Translator: Ivorra78 \n" -"Language-Team: none\n" -"Language: es\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.17\n" - -#. module: iot_rule -#: code:addons/iot_rule/models/iot_rule.py:0 -#, python-format -msgid "A recurssion was found" -msgstr "Se ha encontrado una recursión" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__action_ids -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__action_ids -msgid "Action" -msgstr "Acción" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__active -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__active -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__active -msgid "Active" -msgstr "Activo" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_form_view -msgid "Authorized Lock Groups" -msgstr "Grupos de Cierre Autorizados" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_wizard_form_view -msgid "Cancel" -msgstr "Cancelar" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_res_partner -msgid "Contact" -msgstr "Contacto" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_wizard_form_view -msgid "Create" -msgstr "Crear" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_key_wizard -msgid "Create a Key" -msgstr "Crear una clave" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__create_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__create_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__create_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__create_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__create_uid -msgid "Created by" -msgstr "Creado por" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__create_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__create_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__create_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__create_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__create_date -msgid "Created on" -msgstr "Creado el" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__description -msgid "Description" -msgstr "Descripción" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_device_input -msgid "Device input" -msgstr "Entrada del dispositivo" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__display_name -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__display_name -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__display_name -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__display_name -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__display_name -msgid "Display Name" -msgstr "Mostrar Nombre" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__expiration_date -msgid "Expiration Date" -msgstr "Fecha de Vencimiento" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_search_view -msgid "Expired" -msgstr "Expirado" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_search_view -msgid "Expired Keys" -msgstr "Claves Expiradas" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_device_input_form_view -msgid "Generate IoT Lock for this Input" -msgstr "Generar bloqueo IoT para esta entrada" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__id -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__id -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__id -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__id -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__id -msgid "ID" -msgstr "ID (identificación)" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_device -msgid "IoT Device" -msgstr "Dispositivo IoT" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_key -msgid "IoT Key" -msgstr "Llave IoT" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_key_action -msgid "IoT Key - Actions Log" -msgstr "Clave IoT - Registro de Acciones" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_key_wizard_act_window -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_wizard_form_view -msgid "IoT Key Wizard" -msgstr "Asistente para claves IoT" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_lock -msgid "IoT Lock" -msgstr "Cerradura IoT" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_device_input_form_view -msgid "IoT Lock associated" -msgstr "Bloqueo IoT asociado" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_rule -msgid "IoT Rule (Relation Key-Lock)" -msgstr "Regla IoT (bloqueo de clave de relación)" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_mixin__iot_key_ids -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__iot_key_id -#: model:ir.model.fields,field_description:iot_rule.field_res_partner__iot_key_ids -#: model:ir.model.fields,field_description:iot_rule.field_res_users__iot_key_ids -msgid "Iot Key" -msgstr "Clave Iot" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_mixin__iot_key_count -#: model:ir.model.fields,field_description:iot_rule.field_res_partner__iot_key_count -#: model:ir.model.fields,field_description:iot_rule.field_res_users__iot_key_count -msgid "Iot Key Count" -msgstr "Recuento de claves Iot" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__key_id -msgid "Key" -msgstr "Clave" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__key_type -msgid "Key Type" -msgstr "Tipo de llave" - -#. module: iot_rule -#: model:ir.model.constraint,message:iot_rule.constraint_iot_key_unique_virtual_key_uniq -msgid "Key must be unique" -msgstr "La clave debe ser única" - -#. module: iot_rule -#: code:addons/iot_rule/wizards/iot_key_wizard.py:0 -#: code:addons/iot_rule/wizards/iot_key_wizard.py:0 -#, python-format -msgid "Key of %s" -msgstr "Clave de %s" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__key_name -msgid "Key's Name" -msgstr "Nombre de la clave" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.res_partner_form_view -msgid "Keys" -msgstr "Llaves" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_key_act_window -#: model:ir.ui.menu,name:iot_rule.iot_key_menu -msgid "Keys (Persons)" -msgstr "Llaves (Personas)" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key____last_update -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action____last_update -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard____last_update -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock____last_update -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule____last_update -msgid "Last Modified on" -msgstr "Última Modificación el" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__write_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__write_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__write_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__write_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__write_uid -msgid "Last Updated by" -msgstr "Última actualización por" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__write_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__write_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__write_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__write_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__write_date -msgid "Last Updated on" -msgstr "Última Actualización el" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_device_input__lock_id -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__lock_id -msgid "Lock" -msgstr "Bloquear" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__lock_ids -msgid "Locks" -msgstr "Bloqueos" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_lock_act_window -#: model:ir.ui.menu,name:iot_rule.iot_lock_menu -msgid "Locks (Devices)" -msgstr "Cerraduras (dispositivos)" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_lock_form_view -msgid "Member of these Groups of Locks" -msgstr "Miembro de Estos Grupos de Bloqueos" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_key_mixin -msgid "Mixin for relation between record and Iot Keys" -msgstr "Mezcla para la relación entre registros y claves Iot" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__name -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__name -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__name -msgid "Name" -msgstr "Nombre" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_search_view -msgid "Not Expired" -msgstr "No Expirado" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_search_view -msgid "Not expired Keys" -msgstr "Claves no expiradas" - -#. module: iot_rule -#: code:addons/iot_rule/models/iot_key.py:0 -#, python-format -msgid "Only one key can be assigned to this model" -msgstr "Sólo se puede asignar una tecla a este modelo" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__parent_ids -msgid "Parent" -msgstr "Parental" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__res_id -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__res_id -msgid "Res" -msgstr "Rec" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__res_model -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__res_model -msgid "Res Model" -msgstr "Modelo Rec" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__result -msgid "Result" -msgstr "Resultado" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__rule_ids -msgid "Rule" -msgstr "Regla" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_rule_act_window -#: model:ir.actions.act_window,name:iot_rule.iot_rule_action -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__rule_ids -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__rule_ids -#: model:ir.ui.menu,name:iot_rule.iot_define_rules_menu -#: model:ir.ui.menu,name:iot_rule.iot_rule_menu -msgid "Rules" -msgstr "Reglas" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__timestamp -msgid "Time" -msgstr "Tiempo" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__unique_virtual_key -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__unique_virtual_key -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__unique_virtual_key -msgid "Unique Virtual Key" -msgstr "Clave Virtual Única" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_wizard_form_view -msgid "Update" -msgstr "Actualización" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_key_action_act_window -#: model:ir.ui.menu,name:iot_rule.iot_key_action_menu -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_form_view -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_lock_form_view -msgid "Usage Log" -msgstr "Registro de Utilización" diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/i18n/iot_rule.pot b/odoo-bringout-oca-iot-iot_rule/iot_rule/i18n/iot_rule.pot deleted file mode 100644 index 9d3affbb..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/i18n/iot_rule.pot +++ /dev/null @@ -1,355 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_rule -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: iot_rule -#. odoo-python -#: code:addons/iot_rule/models/iot_rule.py:0 -#, python-format -msgid "A recurssion was found" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__action_ids -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__action_ids -msgid "Action" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__active -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__active -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__active -msgid "Active" -msgstr "" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_form_view -msgid "Authorized Lock Groups" -msgstr "" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_wizard_form_view -msgid "Cancel" -msgstr "" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_res_partner -msgid "Contact" -msgstr "" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_wizard_form_view -msgid "Create" -msgstr "" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_key_wizard -msgid "Create a Key" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__create_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__create_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__create_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__create_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__create_uid -msgid "Created by" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__create_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__create_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__create_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__create_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__create_date -msgid "Created on" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__description -msgid "Description" -msgstr "" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_device_input -msgid "Device input" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__display_name -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__display_name -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__display_name -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__display_name -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__display_name -msgid "Display Name" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__expiration_date -msgid "Expiration Date" -msgstr "" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_search_view -msgid "Expired" -msgstr "" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_search_view -msgid "Expired Keys" -msgstr "" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_device_input_form_view -msgid "Generate IoT Lock for this Input" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__id -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__id -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__id -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__id -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__id -msgid "ID" -msgstr "" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_device -msgid "IoT Device" -msgstr "" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_key -msgid "IoT Key" -msgstr "" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_key_action -msgid "IoT Key - Actions Log" -msgstr "" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_key_wizard_act_window -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_wizard_form_view -msgid "IoT Key Wizard" -msgstr "" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_lock -msgid "IoT Lock" -msgstr "" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_device_input_form_view -msgid "IoT Lock associated" -msgstr "" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_rule -msgid "IoT Rule (Relation Key-Lock)" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_mixin__iot_key_ids -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__iot_key_id -#: model:ir.model.fields,field_description:iot_rule.field_res_partner__iot_key_ids -#: model:ir.model.fields,field_description:iot_rule.field_res_users__iot_key_ids -msgid "Iot Key" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_mixin__iot_key_count -#: model:ir.model.fields,field_description:iot_rule.field_res_partner__iot_key_count -#: model:ir.model.fields,field_description:iot_rule.field_res_users__iot_key_count -msgid "Iot Key Count" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__key_id -msgid "Key" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__key_type -msgid "Key Type" -msgstr "" - -#. module: iot_rule -#: model:ir.model.constraint,message:iot_rule.constraint_iot_key_unique_virtual_key_uniq -msgid "Key must be unique" -msgstr "" - -#. module: iot_rule -#. odoo-python -#: code:addons/iot_rule/wizards/iot_key_wizard.py:0 -#: code:addons/iot_rule/wizards/iot_key_wizard.py:0 -#, python-format -msgid "Key of %s" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__key_name -msgid "Key's Name" -msgstr "" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.res_partner_form_view -msgid "Keys" -msgstr "" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_key_act_window -#: model:ir.ui.menu,name:iot_rule.iot_key_menu -msgid "Keys (Persons)" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key____last_update -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action____last_update -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard____last_update -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock____last_update -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule____last_update -msgid "Last Modified on" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__write_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__write_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__write_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__write_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__write_uid -msgid "Last Updated by" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__write_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__write_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__write_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__write_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__write_date -msgid "Last Updated on" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_device_input__lock_id -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__lock_id -msgid "Lock" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__lock_ids -msgid "Locks" -msgstr "" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_lock_act_window -#: model:ir.ui.menu,name:iot_rule.iot_lock_menu -msgid "Locks (Devices)" -msgstr "" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_lock_form_view -msgid "Member of these Groups of Locks" -msgstr "" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_key_mixin -msgid "Mixin for relation between record and Iot Keys" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__name -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__name -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__name -msgid "Name" -msgstr "" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_search_view -msgid "Not Expired" -msgstr "" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_search_view -msgid "Not expired Keys" -msgstr "" - -#. module: iot_rule -#. odoo-python -#: code:addons/iot_rule/models/iot_key.py:0 -#, python-format -msgid "Only one key can be assigned to this model" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__parent_ids -msgid "Parent" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__res_id -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__res_id -msgid "Res" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__res_model -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__res_model -msgid "Res Model" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__result -msgid "Result" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__rule_ids -msgid "Rule" -msgstr "" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_rule_act_window -#: model:ir.actions.act_window,name:iot_rule.iot_rule_action -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__rule_ids -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__rule_ids -#: model:ir.ui.menu,name:iot_rule.iot_define_rules_menu -#: model:ir.ui.menu,name:iot_rule.iot_rule_menu -msgid "Rules" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__timestamp -msgid "Time" -msgstr "" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__unique_virtual_key -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__unique_virtual_key -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__unique_virtual_key -msgid "Unique Virtual Key" -msgstr "" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_wizard_form_view -msgid "Update" -msgstr "" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_key_action_act_window -#: model:ir.ui.menu,name:iot_rule.iot_key_action_menu -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_form_view -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_lock_form_view -msgid "Usage Log" -msgstr "" diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/i18n/it.po b/odoo-bringout-oca-iot-iot_rule/iot_rule/i18n/it.po deleted file mode 100644 index 1e8523cb..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/i18n/it.po +++ /dev/null @@ -1,354 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_rule -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-07-12 12:13+0000\n" -"Last-Translator: Francesco Foresti \n" -"Language-Team: none\n" -"Language: it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.17\n" - -#. module: iot_rule -#: code:addons/iot_rule/models/iot_rule.py:0 -#, python-format -msgid "A recurssion was found" -msgstr "Trovata una ricorsione" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__action_ids -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__action_ids -msgid "Action" -msgstr "Azione" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__active -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__active -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__active -msgid "Active" -msgstr "Attivo" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_form_view -msgid "Authorized Lock Groups" -msgstr "Gruppi blocco autorizzati" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_wizard_form_view -msgid "Cancel" -msgstr "Annulla" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_res_partner -msgid "Contact" -msgstr "Contatto" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_wizard_form_view -msgid "Create" -msgstr "Crea" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_key_wizard -msgid "Create a Key" -msgstr "Crea una chiave" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__create_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__create_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__create_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__create_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__create_uid -msgid "Created by" -msgstr "Creato da" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__create_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__create_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__create_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__create_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__create_date -msgid "Created on" -msgstr "Creato il" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__description -msgid "Description" -msgstr "Descrizione" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_device_input -msgid "Device input" -msgstr "Input dispositivo" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__display_name -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__display_name -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__display_name -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__display_name -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__display_name -msgid "Display Name" -msgstr "Nome visualizzato" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__expiration_date -msgid "Expiration Date" -msgstr "Data di scadenza" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_search_view -msgid "Expired" -msgstr "Scaduta" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_search_view -msgid "Expired Keys" -msgstr "Chiavi scadute" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_device_input_form_view -msgid "Generate IoT Lock for this Input" -msgstr "Genera blocco IoT per questo input" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__id -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__id -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__id -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__id -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__id -msgid "ID" -msgstr "ID" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_device -msgid "IoT Device" -msgstr "Dispositivo IoT" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_key -msgid "IoT Key" -msgstr "Chiave IoT" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_key_action -msgid "IoT Key - Actions Log" -msgstr "Chiave IoT - log azioni" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_key_wizard_act_window -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_wizard_form_view -msgid "IoT Key Wizard" -msgstr "Procedura guidata chiave ioT" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_lock -msgid "IoT Lock" -msgstr "Blocco IoT" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_device_input_form_view -msgid "IoT Lock associated" -msgstr "Blocco IoT associato" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_rule -msgid "IoT Rule (Relation Key-Lock)" -msgstr "Regola IoT (relazione chiave-blocco)" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_mixin__iot_key_ids -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__iot_key_id -#: model:ir.model.fields,field_description:iot_rule.field_res_partner__iot_key_ids -#: model:ir.model.fields,field_description:iot_rule.field_res_users__iot_key_ids -msgid "Iot Key" -msgstr "Chiave IoT" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_mixin__iot_key_count -#: model:ir.model.fields,field_description:iot_rule.field_res_partner__iot_key_count -#: model:ir.model.fields,field_description:iot_rule.field_res_users__iot_key_count -msgid "Iot Key Count" -msgstr "Conteggio chiave IoT" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__key_id -msgid "Key" -msgstr "Chiave" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__key_type -msgid "Key Type" -msgstr "Tipo chiave" - -#. module: iot_rule -#: model:ir.model.constraint,message:iot_rule.constraint_iot_key_unique_virtual_key_uniq -msgid "Key must be unique" -msgstr "La chiave deve essere univoca" - -#. module: iot_rule -#: code:addons/iot_rule/wizards/iot_key_wizard.py:0 -#, python-format -msgid "Key of %s" -msgstr "Chiave di %s" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__key_name -msgid "Key's Name" -msgstr "Nome chiave" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.res_partner_form_view -msgid "Keys" -msgstr "Chiavi" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_key_act_window -#: model:ir.ui.menu,name:iot_rule.iot_key_menu -msgid "Keys (Persons)" -msgstr "Chiave (persona)" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key____last_update -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action____last_update -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard____last_update -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock____last_update -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule____last_update -msgid "Last Modified on" -msgstr "Ultima modifica il" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__write_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__write_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__write_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__write_uid -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__write_uid -msgid "Last Updated by" -msgstr "Ultimo aggiornamento di" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__write_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__write_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__write_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__write_date -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__write_date -msgid "Last Updated on" -msgstr "Ultimo aggiornamento il" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_device_input__lock_id -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__lock_id -msgid "Lock" -msgstr "Blocco" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__lock_ids -msgid "Locks" -msgstr "Blocchi" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_lock_act_window -#: model:ir.ui.menu,name:iot_rule.iot_lock_menu -msgid "Locks (Devices)" -msgstr "Blocchi (dispositivi)" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_lock_form_view -msgid "Member of these Groups of Locks" -msgstr "Componenti di questi gruppi di blocchi" - -#. module: iot_rule -#: model:ir.model,name:iot_rule.model_iot_key_mixin -msgid "Mixin for relation between record and Iot Keys" -msgstr "Mixin per la relazione tra record e chiavi lotto" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__name -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__name -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__name -msgid "Name" -msgstr "Nome" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_search_view -msgid "Not Expired" -msgstr "Non scaduto" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_search_view -msgid "Not expired Keys" -msgstr "Chiavi non scadute" - -#. module: iot_rule -#: code:addons/iot_rule/models/iot_key.py:0 -#, python-format -msgid "Only one key can be assigned to this model" -msgstr "Solo una chiave può essere associata a questo modello" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_rule__parent_ids -msgid "Parent" -msgstr "Padre" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__res_id -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__res_id -msgid "Res" -msgstr "Res" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__res_model -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__res_model -msgid "Res Model" -msgstr "Modello res" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__result -msgid "Result" -msgstr "Risultato" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__rule_ids -msgid "Rule" -msgstr "Regola" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_rule_act_window -#: model:ir.actions.act_window,name:iot_rule.iot_rule_action -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__rule_ids -#: model:ir.model.fields,field_description:iot_rule.field_iot_lock__rule_ids -#: model:ir.ui.menu,name:iot_rule.iot_define_rules_menu -#: model:ir.ui.menu,name:iot_rule.iot_rule_menu -msgid "Rules" -msgstr "Regole" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__timestamp -msgid "Time" -msgstr "Orario" - -#. module: iot_rule -#: model:ir.model.fields,field_description:iot_rule.field_iot_key__unique_virtual_key -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_action__unique_virtual_key -#: model:ir.model.fields,field_description:iot_rule.field_iot_key_wizard__unique_virtual_key -msgid "Unique Virtual Key" -msgstr "Chiave virtuale univoca" - -#. module: iot_rule -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_wizard_form_view -msgid "Update" -msgstr "Aggiorna" - -#. module: iot_rule -#: model:ir.actions.act_window,name:iot_rule.iot_key_action_act_window -#: model:ir.ui.menu,name:iot_rule.iot_key_action_menu -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_key_form_view -#: model_terms:ir.ui.view,arch_db:iot_rule.iot_lock_form_view -msgid "Usage Log" -msgstr "Log utilizzo" diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/models/__init__.py b/odoo-bringout-oca-iot-iot_rule/iot_rule/models/__init__.py deleted file mode 100644 index 41c53ba5..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/models/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -from . import iot_lock -from . import iot_key -from . import iot_rule -from . import iot_key_action -from . import res_partner -from . import iot_device_input -from . import iot_device diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/models/iot_device.py b/odoo-bringout-oca-iot-iot_rule/iot_rule/models/iot_device.py deleted file mode 100644 index 0499650d..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/models/iot_device.py +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright 2019 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import models - - -class IotDevice(models.Model): - _inherit = "iot.device" - - def get_iot_keys(self, serial_of_input, type_of_key): - iot_input = self.env["iot.device.input"].search( - [("serial", "=", serial_of_input)], limit=1 - ) - if iot_input: - if iot_input.lock_id: - domain = [] - if type_of_key != "ALL": - domain.append(("key_type", "=", type_of_key)) - return {"keys": iot_input.lock_id.get_virtual_keys(domain)} - return {"error": "no input found"} - - def write(self, vals): - if vals.get("name", False): - for device in self: - for device_input in device.input_ids: - if device_input.lock_id: - input_name = device_input.name - device_input.lock_id.write( - {"name": vals.get("name") + " / " + input_name} - ) - return super().write(vals) diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/models/iot_device_input.py b/odoo-bringout-oca-iot-iot_rule/iot_rule/models/iot_device_input.py deleted file mode 100644 index 32423337..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/models/iot_device_input.py +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright 2019 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import fields, models - - -class IotDeviceInput(models.Model): - _inherit = "iot.device.input" - - lock_id = fields.Many2one("iot.lock") - - def call_lock(self, value): - result = self.lock_id.check_access_unique_virtual_key(value) - return {"access_granted": result} - - def get_iot_keys(self, domain=None): - if domain is None: - domain = [] - return {"keys": self.lock_id.get_virtual_keys(domain)} - - def generate_iot_lock(self): - self.ensure_one() - if not self.lock_id: - device_name = self.device_id.name - lock = self.env["iot.lock"].create( - {"name": device_name + " / " + self.name} - ) - self.lock_id = lock.id - return {} diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/models/iot_key.py b/odoo-bringout-oca-iot-iot_rule/iot_rule/models/iot_key.py deleted file mode 100644 index be5d7c60..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/models/iot_key.py +++ /dev/null @@ -1,122 +0,0 @@ -# Copyright 2019 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -import uuid -from datetime import datetime - -from odoo import _, api, fields, models -from odoo.exceptions import ValidationError - - -class IotKey(models.Model): - _name = "iot.key" - _description = "IoT Key" - _rec_name = "unique_virtual_key" - - name = fields.Char() - key_type = fields.Char() - unique_virtual_key = fields.Char( - readonly=True, - default="/", - required=True, - ) - expiration_date = fields.Datetime() - rule_ids = fields.Many2many("iot.rule", string="Rules") - action_ids = fields.One2many("iot.key.action", inverse_name="key_id") - active = fields.Boolean(default=True) - res_id = fields.Integer(index=True) - res_model = fields.Char(index=True) - - _sql_constraints = [ - ( - "unique_virtual_key_uniq", - "UNIQUE(unique_virtual_key)", - "Key must be unique", - ), - ] - - def _get_unique_virtual_key(self, vals): - """Hook that can be used to define the key according to needs""" - return uuid.uuid4() - - @api.model_create_multi - def create(self, mvals): - for vals in mvals: - if vals.get("unique_virtual_key", "/") == "/": - vals["unique_virtual_key"] = self._get_unique_virtual_key(vals) - return super().create(mvals) - - def view_actions(self): - self.ensure_one() - action = self.env.ref("iot_rule.iot_key_action_act_window").read()[0] - action["domain"] = [("key_id", "=", self.id)] - return action - - def get_iot_rule_values(self): - result = [] - for key in self: - result.append(key._get_iot_rule_values()) - return result - - def _get_iot_rule_values(self): - if self.expiration_date: - expiration_timestamp = int(datetime.timestamp(self.expiration_date)) - else: - expiration_timestamp = False - return { - "key_type": self.key_type, - "expiration_date": expiration_timestamp, - "unique_virtual_key": self.unique_virtual_key, - "id": self.id, - } - - def _get_unique_key_models(self): - return [] - - @api.constrains("res_model", "res_id") - def _constrain_key_model(self): - unique_models = self._get_unique_key_models() - for record in self: - if record.res_model not in unique_models: - continue - if self.with_context(active_test=False).search( - [ - ("id", "!=", record.id), - ("res_id", "=", record.res_id), - ("res_model", "=", record.res_model), - ], - limit=1, - ): - raise ValidationError(_("Only one key can be assigned to this model")) - - -class IotKeyMixin(models.AbstractModel): - _name = "iot.key.mixin" - _description = "Mixin for relation between record and Iot Keys" - - iot_key_ids = fields.One2many( - "iot.key", - inverse_name="res_id", - domain=lambda r: [("res_model", "=", r._name)], - ) - iot_key_count = fields.Integer(compute="_compute_iot_key_count") - - @api.depends("iot_key_ids") - def _compute_iot_key_count(self): - for record in self: - record.iot_key_count = len(record.iot_key_ids) - - def action_view_iot_key(self): - self.ensure_one() - action = self.env["ir.actions.act_window"]._for_xml_id( - "iot_rule.iot_key_act_window" - ) - action["domain"] = [ - ("res_id", "=", self.id), - ("res_model", "=", self._name), - ] - action["context"] = { - "default_res_id": self.id, - "default_res_model": self._name, - } - return action diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/models/iot_key_action.py b/odoo-bringout-oca-iot-iot_rule/iot_rule/models/iot_key_action.py deleted file mode 100644 index 85b655eb..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/models/iot_key_action.py +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright 2019 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import fields, models - - -class IotKeyAction(models.Model): - - _name = "iot.key.action" - _description = "IoT Key - Actions Log" - _order = "timestamp DESC" - - key_id = fields.Many2one("iot.key") - key_name = fields.Char(related="key_id.name", string="Key's Name") - unique_virtual_key = fields.Char() - lock_id = fields.Many2one("iot.lock", required=True) - result = fields.Char(required=True, default="undefined") - timestamp = fields.Datetime( - string="Time", default=fields.Datetime.now, required=True - ) diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/models/iot_lock.py b/odoo-bringout-oca-iot-iot_rule/iot_rule/models/iot_lock.py deleted file mode 100644 index dbdd6486..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/models/iot_lock.py +++ /dev/null @@ -1,66 +0,0 @@ -# Copyright 2019 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import fields, models - - -class IotLock(models.Model): - - _name = "iot.lock" - _description = "IoT Lock" - - name = fields.Char(required=True) - description = fields.Text() - rule_ids = fields.Many2many("iot.rule", string="Rules") - action_ids = fields.One2many("iot.key.action", inverse_name="lock_id") - active = fields.Boolean(default=True, required=True) - - def check_access_unique_virtual_key(self, unique_virtual_key): - self.ensure_one() - key = self.env["iot.key"].search( - [("unique_virtual_key", "=", unique_virtual_key)], limit=1 - ) - if not key: - self._missing_key(unique_virtual_key) - return False - return self.check_access(key) - - def _missing_key(self, unique_virtual_key): - return self.env["iot.key.action"].create( - self._missing_key_action_vals(unique_virtual_key) - ) - - def _missing_key_action_vals(self, unique_virtual_key): - return { - "lock_id": self.id, - "unique_virtual_key": unique_virtual_key, - "result": "refused", - } - - def check_access(self, key): - result = self.rule_ids._check_access(key) - self.create_action(key, result) - return result - - def create_action(self, key, result): - return self.env["iot.key.action"].create(self._create_action_vals(key, result)) - - def _create_action_vals(self, key, result): - return { - "lock_id": self.id, - "key_id": key.id, - "result": "accepted" if result else "refused", - } - - def view_actions(self): - self.ensure_one() - action = self.env.ref("iot_rule.iot_key_action_act_window").read()[0] - action["domain"] = [("lock_id", "=", self.id)] - return action - - def get_virtual_keys(self, domain=None): - self.ensure_one() - if domain is None: - domain = [] - keys = self.rule_ids._get_virtual_keys(domain) - return keys.get_iot_rule_values() diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/models/iot_rule.py b/odoo-bringout-oca-iot-iot_rule/iot_rule/models/iot_rule.py deleted file mode 100644 index fff92b83..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/models/iot_rule.py +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright 2019 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import _, api, fields, models -from odoo.exceptions import ValidationError - - -class IotRule(models.Model): - - _name = "iot.rule" - _description = "IoT Rule (Relation Key-Lock)" - - name = fields.Char() - active = fields.Boolean(default=True, required=True) - lock_ids = fields.Many2many("iot.lock", string="Locks") - parent_ids = fields.Many2many( - "iot.rule", - relation="iot_rule_implied_rel", - column1="rule_id", - column2="implied_rule_id", - ) - - def _check_access(self, key): - if key.expiration_date and key.expiration_date < fields.Datetime.now(): - return False - return self._check_access_recursion(key) - - def _check_access_recursion(self, key, limit=0): - if not self: - return False - if limit > 50: - return False - if self & key.rule_ids: - return True - return self.mapped("parent_ids")._check_access_recursion(key, limit + 1) - - @api.constrains("parent_ids") - def _check_recursion_parent_ids(self): - if not self._check_m2m_recursion("parent_ids"): - raise ValidationError(_("A recurssion was found")) - - def _get_virtual_keys(self, domain, limit=0): - if not self or limit > 50: - return self.env["iot.key"] - return self.mapped("parent_ids")._get_virtual_keys( - domain, limit + 1 - ) | self.env["iot.key"].search( - domain - + [ - ("rule_ids", "in", self.ids), - "|", - ("expiration_date", "=", False), - ("expiration_date", ">=", fields.Datetime.now()), - ] - ) diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/models/res_partner.py b/odoo-bringout-oca-iot-iot_rule/iot_rule/models/res_partner.py deleted file mode 100644 index 944c1d7e..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/models/res_partner.py +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright 2020 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import models - - -class ResPartner(models.Model): - _name = "res.partner" - _inherit = ["res.partner", "iot.key.mixin"] diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-iot-iot_rule/iot_rule/readme/CONTRIBUTORS.rst deleted file mode 100644 index 21c844ef..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,3 +0,0 @@ -* Enric Tobella -* Luis Burrel -* Aaron Henriquez diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/readme/DESCRIPTION.rst b/odoo-bringout-oca-iot-iot_rule/iot_rule/readme/DESCRIPTION.rst deleted file mode 100644 index 06cde527..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/readme/DESCRIPTION.rst +++ /dev/null @@ -1,8 +0,0 @@ -This addon allows to define IoT Rules. - -A Rule specifies which Inputs that can be controlled by a certain Key. -The Key is owned by an Agent (Employee, Partner or anonymous). -The Input is a request from an IoT Device that executes a certain function in Odoo. -This function will check if the Key (= the Agent) is allowed by any Rule to "control" the Device. -If Odoo answers positively the Agent will be allowed the to execute some Function on the Device -(for example open a door or switch on a relay). diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/security/ir.model.access.csv b/odoo-bringout-oca-iot-iot_rule/iot_rule/security/ir.model.access.csv deleted file mode 100644 index 040020ca..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/security/ir.model.access.csv +++ /dev/null @@ -1,9 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_iot_key,access Key,model_iot_key,iot_oca.group_iot_user,1,0,0,0 -access_iot_lock,access Lock,model_iot_lock,iot_oca.group_iot_user,1,0,0,0 -access_iot_rule,access Group,model_iot_rule,iot_oca.group_iot_user,1,0,0,0 -access_iot_key_action,access Key Action,model_iot_key_action,iot_oca.group_iot_user,1,1,1,0 -manage_iot_key,Manage Key,model_iot_key,iot_oca.group_iot_user,1,1,1,0 -manage_iot_lock,Manage Lock,model_iot_lock,iot_oca.group_iot_manager,1,1,1,0 -manage_iot_rule,Manage Group,model_iot_rule,iot_oca.group_iot_manager,1,1,1,0 -access_iot_key_wizard,access_iot_key_wizard,model_iot_key_wizard,iot_oca.group_iot_user,1,1,1,0 diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/static/description/icon.png b/odoo-bringout-oca-iot-iot_rule/iot_rule/static/description/icon.png deleted file mode 100644 index ed3004e5..00000000 Binary files a/odoo-bringout-oca-iot-iot_rule/iot_rule/static/description/icon.png and /dev/null differ diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/static/description/icon.svg b/odoo-bringout-oca-iot-iot_rule/iot_rule/static/description/icon.svg deleted file mode 100644 index 41b0eb8a..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/static/description/icon.svg +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - image/svg+xml - - icon - - - - - - - - - - - - - - - icon - - - - - - - - - diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/static/description/index.html b/odoo-bringout-oca-iot-iot_rule/iot_rule/static/description/index.html deleted file mode 100644 index 58ad210a..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/static/description/index.html +++ /dev/null @@ -1,432 +0,0 @@ - - - - - -IoT Rule - - - -
-

IoT Rule

- - -

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

-

This addon allows to define IoT Rules.

-

A Rule specifies which Inputs that can be controlled by a certain Key. -The Key is owned by an Agent (Employee, Partner or anonymous). -The Input is a request from an IoT Device that executes a certain function in Odoo. -This function will check if the Key (= the Agent) is allowed by any Rule to “control” the Device. -If Odoo answers positively the Agent will be allowed the to execute some Function on the Device -(for example open a door or switch on a relay).

-

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

-
    -
  • CreuBlanca
  • -
  • ForgeFlow
  • -
-
-
-

Contributors

- -
-
-

Maintainers

-

This module is maintained by the OCA.

- -Odoo Community Association - -

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

-

This module is part of the OCA/iot project on GitHub.

-

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

-
-
-
- - diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/tests/__init__.py b/odoo-bringout-oca-iot-iot_rule/iot_rule/tests/__init__.py deleted file mode 100644 index fcb64dab..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import test_iot_rule diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/tests/test_iot_rule.py b/odoo-bringout-oca-iot-iot_rule/iot_rule/tests/test_iot_rule.py deleted file mode 100644 index ea4909fe..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/tests/test_iot_rule.py +++ /dev/null @@ -1,299 +0,0 @@ -# Copyright 2019 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from datetime import timedelta -from unittest.mock import patch - -from odoo.exceptions import ValidationError -from odoo.fields import Datetime -from odoo.tests.common import TransactionCase - -from ..models.iot_key import IotKey - - -class TestIotRule(TransactionCase): - @classmethod - def setUpClass(cls): - super().setUpClass() - - cls.rule_1 = cls.env["iot.rule"].create({"name": "rule 1"}) - cls.rule_2 = cls.env["iot.rule"].create({"name": "rule 2"}) - cls.lock_1 = cls.env["iot.lock"].create( - {"name": "Lock 1", "rule_ids": [(4, cls.rule_1.id)]} - ) - cls.type_of_key_1 = "RFID" - cls.key_1 = cls.env["iot.key"].create( - { - "name": "Key 1", - "rule_ids": [(4, cls.rule_1.id)], - "key_type": cls.type_of_key_1, - } - ) - cls.type_of_key_2 = "UUID" - cls.key_2 = cls.env["iot.key"].create( - { - "name": "Key 2", - "rule_ids": [(4, cls.rule_2.id)], - "key_type": cls.type_of_key_2, - } - ) - cls.partner = cls.env["res.partner"].create({"name": "Demo partner"}) - cls.system = cls.env["iot.communication.system"].create({"name": "Testing"}) - cls.device_1 = cls.env["iot.device"].create( - {"name": "device 1", "communication_system_id": cls.system.id} - ) - cls.serial_of_input_1 = "serial 1" - cls.passphrase_of_input_1 = "password 1" - cls.name_of_input_1 = "name 1" - cls.device_input_1 = cls.env["iot.device.input"].create( - { - "name": cls.name_of_input_1, - "device_id": cls.device_1.id, - "active": True, - "serial": cls.serial_of_input_1, - "passphrase": cls.passphrase_of_input_1, - "call_model_id": cls.env.ref("iot_input_oca.model_iot_device_input").id, - "call_function": "test_input_device", - "lock_id": cls.lock_1.id, - } - ) - cls.device_2 = cls.env["iot.device"].create( - {"name": "device 2", "communication_system_id": cls.system.id} - ) - cls.serial_of_input_2 = "serial 2" - cls.passphrase_of_input_2 = "password 2" - cls.name_of_input_2 = "name 2" - cls.device_input_2 = cls.env["iot.device.input"].create( - { - "name": cls.name_of_input_2, - "device_id": cls.device_2.id, - "active": True, - "serial": cls.serial_of_input_2, - "passphrase": cls.passphrase_of_input_2, - "call_model_id": cls.env.ref("iot_input_oca.model_iot_device_input").id, - "call_function": "test_input_device", - } - ) - cls.serial_of_input_without_device = "foo orphan" - - def test_allowed_access(self): - self.assertTrue( - self.lock_1.check_access_unique_virtual_key(self.key_1.unique_virtual_key) - ) - - def test_not_allowed_access(self): - self.assertFalse( - self.lock_1.check_access_unique_virtual_key(self.key_2.unique_virtual_key) - ) - - def test_non_existing_key(self): - self.assertFalse(self.lock_1.action_ids) - self.assertFalse( - self.lock_1.check_access_unique_virtual_key( - self.key_1.unique_virtual_key + self.key_2.unique_virtual_key - ) - ) - self.assertTrue(self.lock_1.action_ids) - self.assertFalse(self.lock_1.action_ids.key_id) - - def test_not_unique_key_model(self): - self.key_1.write({"res_model": self.partner._name, "res_id": self.partner.id}) - - def test_unique_key_models(self): - with patch.object(IotKey, "_get_unique_key_models") as mocked: - mocked.return_value = [self.partner._name] - self.key_1.write( - {"res_model": self.partner._name, "res_id": self.partner.id} - ) - with self.assertRaises(ValidationError): - self.key_2.write( - {"res_model": self.partner._name, "res_id": self.partner.id} - ) - - def test_inheritance(self): - self.rule_1.parent_ids = [(4, self.rule_2.id)] - self.assertTrue( - self.lock_1.check_access_unique_virtual_key(self.key_2.unique_virtual_key) - ) - - def test_inheritance_loop(self): - rule = self.env["iot.rule"].create({"name": "rule 1 0"}) - self.rule_1.parent_ids = [(4, rule.id)] - for i in range(0, 50): - key = self.env["iot.key"].create( - {"name": "Key 2", "rule_ids": [(4, rule.id)]} - ) - self.assertTrue( - self.lock_1.check_access_unique_virtual_key(key.unique_virtual_key) - ) - new_rule = self.env["iot.rule"].create({"name": "rule 1 %s" % i}) - rule.parent_ids = [(4, new_rule.id)] - rule = new_rule - key = self.env["iot.key"].create({"name": "Key 2", "rule_ids": [(4, rule.id)]}) - self.assertFalse( - self.lock_1.check_access_unique_virtual_key(key.unique_virtual_key) - ) - - def test_recursion(self): - self.rule_1.parent_ids = [(4, self.rule_2.id)] - with self.assertRaises(ValidationError): - self.rule_2.parent_ids = [(4, self.rule_1.id)] - - def test_actions(self): - self.assertFalse(self.key_1.action_ids) - self.assertFalse(self.lock_1.action_ids) - self.lock_1.check_access_unique_virtual_key(self.key_1.unique_virtual_key) - self.assertTrue(self.key_1.action_ids) - self.assertTrue(self.lock_1.action_ids) - self.assertFalse(self.key_2.action_ids) - self.lock_1.check_access_unique_virtual_key(self.key_2.unique_virtual_key) - self.assertTrue(self.key_2.action_ids) - action = self.lock_1.view_actions() - self.assertEqual( - self.lock_1.action_ids, - self.env[action["res_model"]].search(action["domain"]), - ) - action = self.key_1.view_actions() - self.assertEqual( - self.env[action["res_model"]].search(action["domain"]), - self.key_1.action_ids, - ) - - def test_expiration(self): - self.assertTrue( - self.lock_1.check_access_unique_virtual_key(self.key_1.unique_virtual_key) - ) - now = Datetime.from_string(Datetime.now()) - self.key_1.expiration_date = Datetime.to_string(now + timedelta(hours=1)) - self.assertTrue( - self.lock_1.check_access_unique_virtual_key(self.key_1.unique_virtual_key) - ) - self.key_1.expiration_date = Datetime.to_string(now + timedelta(hours=-1)) - self.assertFalse( - self.lock_1.check_access_unique_virtual_key(self.key_1.unique_virtual_key) - ) - - def test_lock_find_keys(self): - result = self.lock_1.get_virtual_keys() - self.assertEqual(len(result), 1) - self.assertEqual(result[0]["id"], self.key_1.id) - key = self.env["iot.key"].create( - {"name": "Key 1", "rule_ids": [(4, self.rule_1.id)]} - ) - result = self.lock_1.get_virtual_keys() - self.assertEqual(len(result), 2) - ids = [r["id"] for r in result] - self.assertIn(self.key_1.id, ids) - self.assertIn(key.id, ids) - now = Datetime.from_string(Datetime.now()) - key.expiration_date = Datetime.to_string(now + timedelta(hours=-1)) - result = self.lock_1.get_virtual_keys() - self.assertEqual(len(result), 1) - self.assertEqual(result[0]["id"], self.key_1.id) - key.expiration_date = Datetime.to_string(now + timedelta(hours=1)) - result = self.lock_1.get_virtual_keys() - self.assertEqual(len(result), 2) - ids = [r["id"] for r in result] - self.assertIn(self.key_1.id, ids) - self.assertIn(key.id, ids) - - def test_wizard(self): - self.assertEqual(0, self.partner.iot_key_count) - wizard_key = self.env["iot.key.wizard"].create( - { - "res_id": self.partner.id, - "res_model": self.partner._name, - "unique_virtual_key": "Testing Key", - "rule_ids": [(4, self.rule_1.id)], - } - ) - wizard_key.create_key() - key = wizard_key.iot_key_id - self.assertEqual(key.unique_virtual_key, "Testing Key") - self.assertEqual(key.rule_ids, self.rule_1) - self.partner.invalidate_model() - self.assertEqual(1, self.partner.iot_key_count) - action = self.partner.action_view_iot_key() - self.assertEqual(key, self.env[action["res_model"]].search(action["domain"])) - original_key = key - wizard_key = self.env["iot.key.wizard"].create( - { - "res_id": self.partner.id, - "res_model": self.partner._name, - "iot_key_id": key.id, - "unique_virtual_key": "Testing Key 2", - "rule_ids": [(4, self.rule_1.id)], - } - ) - wizard_key.update_key() - key.invalidate_model() - self.assertEqual(key.unique_virtual_key, "Testing Key 2") - wizard_key = self.env["iot.key.wizard"].create( - { - "res_id": self.partner.id, - "res_model": self.partner._name, - "iot_key_id": key.id, - "unique_virtual_key": "Testing Key", - "rule_ids": [(4, self.rule_1.id)], - } - ) - wizard_key.create_key() - key.invalidate_model() - self.assertEqual(key.unique_virtual_key, "Testing Key") - self.assertEqual(key, original_key) - - def test_get_iot_keys_from_device_serial_and_type_of_key(self): - result = self.env["iot.device"].get_iot_keys( - self.serial_of_input_2, self.type_of_key_1 - ) - self.assertTrue(result.get("error", False)) - result = self.env["iot.device"].get_iot_keys( - self.serial_of_input_without_device, self.type_of_key_1 - ) - self.assertTrue(result.get("error", False)) - result = self.env["iot.device"].get_iot_keys( - self.serial_of_input_1, self.type_of_key_1 - ) - self.assertEqual(len(result["keys"]), 1) - self.assertEqual(result["keys"][0].get("key_type"), self.type_of_key_1) - result = self.env["iot.device"].get_iot_keys( - self.serial_of_input_1, self.type_of_key_2 - ) - self.assertEqual(len(result["keys"]), 0) - result = self.env["iot.device"].get_iot_keys(self.serial_of_input_1, "ALL") - self.assertEqual(len(result["keys"]), 1) - self.rule_1.write({"parent_ids": [(4, self.rule_2.id)]}) - result = self.env["iot.device"].get_iot_keys(self.serial_of_input_1, "ALL") - self.assertEqual(len(result["keys"]), 2) - - def test_get_iot_keys_from_device_input(self): - result = self.device_input_1.get_iot_keys() - self.assertEqual(len(result["keys"]), 1) - self.assertEqual(result["keys"][0].get("id"), self.key_1.id) - - def test_call_lock_of_a_device_input(self): - self.assertTrue( - self.device_input_1.call_lock(self.key_1.unique_virtual_key).get( - "access_granted" - ) - ) - - def test_generate_iot_lock_for_device_input(self): - self.device_2.write({"name": "Changing name"}) - self.assertFalse(self.device_input_2.lock_id) - self.device_input_2.generate_iot_lock() - lock = self.env["iot.lock"].search( - [("id", "=", self.device_input_2.lock_id.id)], limit=1 - ) - self.assertEqual( - lock.name, self.device_2.name + " / " + self.device_input_2.name - ) - self.device_input_2.generate_iot_lock() - self.assertEqual(lock, self.device_input_2.lock_id) - - def test_change_name_of_lock_if_device_name_changes(self): - self.device_1_new_name = "some funky cool new name" - self.device_1.write({"name": self.device_1_new_name}) - self.assertEqual( - self.lock_1.name, self.device_1_new_name + " / " + self.device_input_1.name - ) diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/views/iot_device_input.xml b/odoo-bringout-oca-iot-iot_rule/iot_rule/views/iot_device_input.xml deleted file mode 100644 index 7db68f56..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/views/iot_device_input.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - iot.device.input.form (in iot_rule) - iot.device.input - - - -
-
-

- -

-
- - - - - - - - - - - - - -
- - - - - iot.key.search (in iot_rule) - iot.key - - - - - - - - - - - - iot.key.tree (in iot_rule) - iot.key - - - - - - - - - - - Keys (Persons) - iot.key - tree,form - [] - {} - - - Keys (Persons) - - - - - diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/views/iot_key_action.xml b/odoo-bringout-oca-iot-iot_rule/iot_rule/views/iot_key_action.xml deleted file mode 100644 index 6c01fce4..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/views/iot_key_action.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - iot.key.action.form (in iot_rule) - iot.key.action - -
-
- - - - - - - - - - - - - - iot.key.action.search (in iot_rule) - iot.key.action - - - - - - - - - - - - iot.key.action.tree (in iot_rule) - iot.key.action - - - - - - - - - - - - Usage Log - iot.key.action - tree,form - [] - {} - - - Usage Log - - - - - diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/views/iot_lock.xml b/odoo-bringout-oca-iot-iot_rule/iot_rule/views/iot_lock.xml deleted file mode 100644 index 0a52c508..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/views/iot_lock.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - - - iot.lock.form (in iot_rule) - iot.lock - -
-
- - - -
-
- - - - - - - -
- - - - - iot.lock.search (in iot_rule) - iot.lock - - - - - - - - - iot.lock.tree (in iot_rule) - iot.lock - - - - - - - - - Locks (Devices) - iot.lock - tree,form - [] - {} - - - Locks (Devices) - - - - - diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/views/iot_rule.xml b/odoo-bringout-oca-iot-iot_rule/iot_rule/views/iot_rule.xml deleted file mode 100644 index ae2226dd..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/views/iot_rule.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - iot.rule.form (in iot_rule) - iot.rule - -
-
- - - -
- - - - - - - - - - - iot.rule.search (in iot_rule) - iot.rule - - - - - - - - iot.rule.tree (in iot_rule) - iot.rule - - - - - - - - Rules - iot.rule - tree,form - [] - {} - - - Rules - ir.actions.act_window - iot.rule - tree,form - - - - diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/views/res_partner.xml b/odoo-bringout-oca-iot-iot_rule/iot_rule/views/res_partner.xml deleted file mode 100644 index 7097f63a..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/views/res_partner.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - res.partner.form (in iot_rule) - res.partner - - -
- -
-
-
-
diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/wizards/__init__.py b/odoo-bringout-oca-iot-iot_rule/iot_rule/wizards/__init__.py deleted file mode 100644 index bec1785e..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/wizards/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import iot_key_wizard diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/wizards/iot_key_wizard.py b/odoo-bringout-oca-iot-iot_rule/iot_rule/wizards/iot_key_wizard.py deleted file mode 100644 index 9f9c9eac..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/wizards/iot_key_wizard.py +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright 2021 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import _, fields, models - - -class OddoorKeyWizard(models.TransientModel): - - _name = "iot.key.wizard" - _description = "Create a Key" - - res_id = fields.Integer(required=True) - res_model = fields.Char(required=True) - iot_key_id = fields.Many2one( - "iot.key", - ) - unique_virtual_key = fields.Char(required=True) - rule_ids = fields.Many2many("iot.rule") - - def _create_iot_key_vals(self): - record = self.env[self.res_model].browse(self.res_id) - return { - "res_id": self.res_id, - "res_model": self.res_model, - "name": _("Key of %s") % record.display_name, - "unique_virtual_key": self.unique_virtual_key, - "rule_ids": [(6, 0, self.rule_ids.ids)], - } - - def create_key(self): - self.ensure_one() - if not self.iot_key_id: - self.iot_key_id = self.env["iot.key"].create(self._create_iot_key_vals()) - return self.update_key(False) - return self.update_key() - - def _update_key_vals(self): - record = self.env[self.res_model].browse(self.res_id) - return { - "unique_virtual_key": self.unique_virtual_key, - "name": _("Key of %s") % record.display_name, - "rule_ids": [(6, 0, self.rule_ids.ids)], - } - - def update_key(self, update=True): - if update: - self.iot_key_id.write(self._update_key_vals()) - return {} diff --git a/odoo-bringout-oca-iot-iot_rule/iot_rule/wizards/iot_key_wizard.xml b/odoo-bringout-oca-iot-iot_rule/iot_rule/wizards/iot_key_wizard.xml deleted file mode 100644 index 90747cce..00000000 --- a/odoo-bringout-oca-iot-iot_rule/iot_rule/wizards/iot_key_wizard.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - iot.key.wizard.form (in iot_rule) - iot.key.wizard - -
- - - - - - - -
-
- -
-
- - IoT Key Wizard - iot.key.wizard - form - {} - new - -
diff --git a/odoo-bringout-oca-iot-iot_rule/pyproject.toml b/odoo-bringout-oca-iot-iot_rule/pyproject.toml deleted file mode 100644 index 4fa6e2de..00000000 --- a/odoo-bringout-oca-iot-iot_rule/pyproject.toml +++ /dev/null @@ -1,43 +0,0 @@ -[project] -name = "odoo-bringout-oca-iot-iot_rule" -version = "16.0.0" -description = "IoT Rule - - Define IoT Rules (Keys that control Inputs)" -authors = [ - { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } -] -dependencies = [ - "odoo-bringout-oca-iot-iot_input_oca>=16.0.0", - "requests>=2.25.1" -] -readme = "README.md" -requires-python = ">= 3.11" -classifiers = [ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Developers", - "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Topic :: Office/Business", -] - -[project.urls] -homepage = "https://github.com/bringout/0" -repository = "https://github.com/bringout/0" - -[build-system] -requires = ["hatchling"] -build-backend = "hatchling.build" - -[tool.hatch.metadata] -allow-direct-references = true - -[tool.hatch.build.targets.wheel] -packages = ["iot_rule"] - -[tool.rye] -managed = true -dev-dependencies = [ - "pytest>=8.4.1", -] diff --git a/odoo-bringout-oca-iot-iot_template_oca/README.md b/odoo-bringout-oca-iot-iot_template_oca/README.md deleted file mode 100644 index 5a08a4e5..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# IoT Templates - -Odoo addon: iot_template_oca - -## Installation - -```bash -pip install odoo-bringout-oca-iot-iot_template_oca -``` - -## Dependencies - -This addon depends on: -- iot_input_oca -- iot_output_oca - -## Manifest Information - -- **Name**: IoT Templates -- **Version**: 16.0.1.0.1 -- **Category**: IoT -- **License**: AGPL-3 -- **Installable**: True - -## Source - -Based on [OCA/iot](https://github.com/OCA/iot) branch 16.0, addon `iot_template_oca`. - -## License - -This package maintains the original AGPL-3 license from the upstream Odoo project. - -## Documentation - -- Overview: doc/OVERVIEW.md -- Architecture: doc/ARCHITECTURE.md -- Models: doc/MODELS.md -- Controllers: doc/CONTROLLERS.md -- Wizards: doc/WIZARDS.md -- Install: doc/INSTALL.md -- Usage: doc/USAGE.md -- Configuration: doc/CONFIGURATION.md -- Dependencies: doc/DEPENDENCIES.md -- Troubleshooting: doc/TROUBLESHOOTING.md -- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-iot-iot_template_oca/doc/ARCHITECTURE.md b/odoo-bringout-oca-iot-iot_template_oca/doc/ARCHITECTURE.md deleted file mode 100644 index 3a4a9f14..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/doc/ARCHITECTURE.md +++ /dev/null @@ -1,32 +0,0 @@ -# Architecture - -```mermaid -flowchart TD - U[Users] -->|HTTP| V[Views and QWeb Templates] - V --> C[Controllers] - V --> W[Wizards – Transient Models] - C --> M[Models and ORM] - W --> M - M --> R[Reports] - DX[Data XML] --> M - S[Security – ACLs and Groups] -. enforces .-> M - - subgraph Iot_template_oca Module - iot_template_oca - direction LR - M:::layer - W:::layer - C:::layer - V:::layer - R:::layer - S:::layer - DX:::layer - end - - classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px -``` - -Notes -- Views include tree/form/kanban templates and report templates. -- Controllers provide website/portal routes when present. -- Wizards are UI flows implemented with `models.TransientModel`. -- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-iot-iot_template_oca/doc/CONFIGURATION.md b/odoo-bringout-oca-iot-iot_template_oca/doc/CONFIGURATION.md deleted file mode 100644 index 96079e28..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/doc/CONFIGURATION.md +++ /dev/null @@ -1,3 +0,0 @@ -# Configuration - -Refer to Odoo settings for iot_template_oca. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-iot-iot_template_oca/doc/CONTROLLERS.md b/odoo-bringout-oca-iot-iot_template_oca/doc/CONTROLLERS.md deleted file mode 100644 index f628e770..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/doc/CONTROLLERS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Controllers - -This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-iot-iot_template_oca/doc/DEPENDENCIES.md b/odoo-bringout-oca-iot-iot_template_oca/doc/DEPENDENCIES.md deleted file mode 100644 index 42c642ed..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/doc/DEPENDENCIES.md +++ /dev/null @@ -1,6 +0,0 @@ -# Dependencies - -This addon depends on: - -- [iot_input_oca](https://github.com/bringout/oca-technical) -- [iot_output_oca](https://github.com/bringout/oca-technical) diff --git a/odoo-bringout-oca-iot-iot_template_oca/doc/FAQ.md b/odoo-bringout-oca-iot-iot_template_oca/doc/FAQ.md deleted file mode 100644 index af28344e..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/doc/FAQ.md +++ /dev/null @@ -1,4 +0,0 @@ -# FAQ - -- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged). -- Q: How to enable? A: Start server with --addon iot_template_oca or install in UI. diff --git a/odoo-bringout-oca-iot-iot_template_oca/doc/INSTALL.md b/odoo-bringout-oca-iot-iot_template_oca/doc/INSTALL.md deleted file mode 100644 index c5ee2631..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/doc/INSTALL.md +++ /dev/null @@ -1,7 +0,0 @@ -# Install - -```bash -pip install odoo-bringout-oca-iot-iot_template_oca" -# or -uv pip install odoo-bringout-oca-iot-iot_template_oca" -``` diff --git a/odoo-bringout-oca-iot-iot_template_oca/doc/MODELS.md b/odoo-bringout-oca-iot-iot_template_oca/doc/MODELS.md deleted file mode 100644 index 56011dac..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/doc/MODELS.md +++ /dev/null @@ -1,19 +0,0 @@ -# Models - -Detected core models and extensions in iot_template_oca. - -```mermaid -classDiagram - class iot_template - class iot_template_input - class iot_template_key - class iot_template_output - class image_mixin - class iot_device - class iot_device_input - class iot_device_output -``` - -Notes -- Classes show model technical names; fields omitted for brevity. -- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-iot-iot_template_oca/doc/OVERVIEW.md b/odoo-bringout-oca-iot-iot_template_oca/doc/OVERVIEW.md deleted file mode 100644 index 548b7739..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/doc/OVERVIEW.md +++ /dev/null @@ -1,6 +0,0 @@ -# Overview - -Packaged Odoo addon: iot_template_oca. Provides features documented in upstream Odoo 16 under this addon. - -- Source: OCA/OCB 16.0, addon iot_template_oca -- License: LGPL-3 diff --git a/odoo-bringout-oca-iot-iot_template_oca/doc/REPORTS.md b/odoo-bringout-oca-iot-iot_template_oca/doc/REPORTS.md deleted file mode 100644 index e0ea35fb..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/doc/REPORTS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Reports - -This module does not define custom reports. diff --git a/odoo-bringout-oca-iot-iot_template_oca/doc/SECURITY.md b/odoo-bringout-oca-iot-iot_template_oca/doc/SECURITY.md deleted file mode 100644 index c5c6cd17..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/doc/SECURITY.md +++ /dev/null @@ -1,34 +0,0 @@ -# Security - -Access control and security definitions in iot_template_oca. - -## Access Control Lists (ACLs) - -Model access permissions defined in: -- **[ir.model.access.csv](../iot_template_oca/security/ir.model.access.csv)** - - 9 model access rules - -## Record Rules - -Row-level security rules defined in: - -```mermaid -graph TB - subgraph "Security Layers" - A[Users] --> B[Groups] - B --> C[Access Control Lists] - C --> D[Models] - B --> E[Record Rules] - E --> F[Individual Records] - end -``` - -Security files overview: -- **[ir.model.access.csv](../iot_template_oca/security/ir.model.access.csv)** - - Model access permissions (CRUD rights) - -Notes -- Access Control Lists define which groups can access which models -- Record Rules provide row-level security (filter records by user/group) -- Security groups organize users and define permission sets -- All security is enforced at the ORM level by Odoo diff --git a/odoo-bringout-oca-iot-iot_template_oca/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-iot-iot_template_oca/doc/TROUBLESHOOTING.md deleted file mode 100644 index 56853cb7..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/doc/TROUBLESHOOTING.md +++ /dev/null @@ -1,5 +0,0 @@ -# Troubleshooting - -- Ensure Python and Odoo environment matches repo guidance. -- Check database connectivity and logs if startup fails. -- Validate that dependent addons listed in DEPENDENCIES.md are installed. diff --git a/odoo-bringout-oca-iot-iot_template_oca/doc/USAGE.md b/odoo-bringout-oca-iot-iot_template_oca/doc/USAGE.md deleted file mode 100644 index 0d2f9863..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/doc/USAGE.md +++ /dev/null @@ -1,7 +0,0 @@ -# Usage - -Start Odoo including this addon (from repo root): - -```bash -python3 scripts/nix_odoo_web_server.py --db-name mydb --addon iot_template_oca -``` diff --git a/odoo-bringout-oca-iot-iot_template_oca/doc/WIZARDS.md b/odoo-bringout-oca-iot-iot_template_oca/doc/WIZARDS.md deleted file mode 100644 index 48e790dc..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/doc/WIZARDS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Wizards - -This module does not include UI wizards. diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/README.rst b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/README.rst deleted file mode 100644 index 2036243c..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/README.rst +++ /dev/null @@ -1,92 +0,0 @@ -============= -IoT Templates -============= - -.. - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! This file is generated by oca-gen-addon-readme !! - !! changes will be overwritten. !! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:fc16a291813bfa9f574daf5a7d8f44ebc8ea2b4b22ea7446a45928e6094c0cf2 - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -.. |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-OCA%2Fiot-lightgray.png?logo=github - :target: https://github.com/OCA/iot/tree/16.0/iot_template_oca - :alt: OCA/iot -.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/iot-16-0/iot-16-0-iot_template_oca - :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/iot&target_branch=16.0 - :alt: Try me on Runboat - -|badge1| |badge2| |badge3| |badge4| |badge5| - -Create a system of templates for IoT devices. - -When we are using a template we can configure a device -with a simple URL configuration. -The device will contact odoo and send the template name. -Odoo will create the device and respond with all the -expected data. - -**Table of contents** - -.. contents:: - :local: - -Usage -===== - -1. Create a template with a module or in `Iot > Templates` -2. Access `Iot > Config Device` -3. Confirm that you want to configurate a new device -4. Copy the URL -5. Access the device and send it the configuration url -6. The device will contact odoo and automatically configure itself. - -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 -~~~~~~~ - -* Creu Blanca - -Contributors -~~~~~~~~~~~~ - -* Enric Tobella - -Maintainers -~~~~~~~~~~~ - -This module is maintained by the OCA. - -.. image:: https://odoo-community.org/logo.png - :alt: Odoo Community Association - :target: https://odoo-community.org - -OCA, or the Odoo Community Association, is a nonprofit organization whose -mission is to support the collaborative development of Odoo features and -promote its widespread use. - -This module is part of the `OCA/iot `_ project on GitHub. - -You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/__init__.py b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/__init__.py deleted file mode 100644 index fa0ba4bf..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from . import controller -from . import models -from . import wizards diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/__manifest__.py b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/__manifest__.py deleted file mode 100644 index 966a5012..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/__manifest__.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (C) 2018 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -{ - "name": "IoT Templates", - "version": "16.0.1.0.1", - "category": "IoT", - "author": "Creu Blanca, Odoo Community Association (OCA)", - "license": "AGPL-3", - "installable": True, - "summary": "IoT module for managing templates", - "depends": ["iot_input_oca", "iot_output_oca"], - "website": "https://github.com/OCA/iot", - "data": [ - "security/ir.model.access.csv", - "wizards/iot_device_configure.xml", - "views/iot_template_views.xml", - ], - "demo": ["demo/iot_template.xml"], -} diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/controller/__init__.py b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/controller/__init__.py deleted file mode 100644 index 96960bb9..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/controller/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import iot_controller diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/controller/iot_controller.py b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/controller/iot_controller.py deleted file mode 100644 index c7791e1c..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/controller/iot_controller.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2020 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -import json - -from odoo import http - - -class CallIot(http.Controller): - @http.route( - ["/iot//configure"], - type="http", - auth="none", - methods=["POST"], - csrf=False, - ) - def configure_iot(self, serial, template, **kwargs): - request = http.request - if not request.env: - return json.dumps(False) - return json.dumps( - request.env["iot.device.configure"] - .sudo() - .configure(serial, template, **kwargs) - ) diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/demo/iot_template.xml b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/demo/iot_template.xml deleted file mode 100644 index b92ca8c5..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/demo/iot_template.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - demo_template - - - - serial - - - - demo_input - - test_input_device - {} - - diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/i18n/bs.po b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/i18n/bs.po deleted file mode 100644 index 3be96568..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/i18n/bs.po +++ /dev/null @@ -1,289 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_template_oca -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: iot_template_oca -#: model:ir.ui.menu,name:iot_template_oca.iot_device_configuration_menu -msgid "Add a new Device" -msgstr "Dodaj novi uređaj" - -#. module: iot_template_oca -#: model:ir.actions.server,name:iot_template_oca.configure_action -msgid "Apply Template" -msgstr "Primijeni predložak" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Apply template" -msgstr "Primijeni template" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__call_function -msgid "Call Function" -msgstr "Pozovi funkciju" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__call_model_id -msgid "Call Model" -msgstr "Pozovi model" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Close" -msgstr "Zatvori" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__communication_system_id -msgid "Communication System" -msgstr "Komunikacijski sistem" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Configuration URL" -msgstr "URL za konfiguraciju" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_device_configure -msgid "Configure a IoT device" -msgstr "Konfigurišite IoT uređaj" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__create_uid -msgid "Created by" -msgstr "Kreirao" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__create_date -msgid "Created on" -msgstr "Kreirano" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_device_input -msgid "Device input" -msgstr "Ulaz uređaja" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__display_name -msgid "Display Name" -msgstr "Prikazani naziv" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__group_id -msgid "Group" -msgstr "Grupa" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__id -msgid "ID" -msgstr "ID" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__icon -msgid "Icon" -msgstr "Ikona" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_1920 -msgid "Image" -msgstr "Slika" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_1024 -msgid "Image 1024" -msgstr "Slika 1024" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_128 -msgid "Image 128" -msgstr "Slika 128" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_256 -msgid "Image 256" -msgstr "Slika 256" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_512 -msgid "Image 512" -msgstr "Slika 512" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__input_ids -msgid "Input" -msgstr "Ulaz" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.iot_template_form -msgid "Inputs" -msgstr "Ulazi" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_device -#: model:ir.model,name:iot_template_oca.model_iot_device_output -msgid "IoT Device" -msgstr "IoT uređaj" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template_input -msgid "IoT Input for Template" -msgstr "IoT ulaz za predložak" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template_key -msgid "IoT Keys for configuration" -msgstr "IoT ključevi za konfiguraciju" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template -msgid "IoT Template for Device" -msgstr "IoT predložak za uređaj" - -#. module: iot_template_oca -#: model:ir.actions.act_window,name:iot_template_oca.iot_template_action -msgid "IoT Templates" -msgstr "IoT predlošci" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__key_ids -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__key -msgid "Key" -msgstr "Ključ" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.iot_template_form -msgid "Keys" -msgstr "Ključevi" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output____last_update -msgid "Last Modified on" -msgstr "Zadnje mijenjano" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__write_uid -msgid "Last Updated by" -msgstr "Zadnji ažurirao" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__write_date -msgid "Last Updated on" -msgstr "Zadnje ažurirano" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__name -msgid "Name" -msgstr "Naziv:" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__output_ids -msgid "Output" -msgstr "Izlaz" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template_output -msgid "Output templates for IoT" -msgstr "Izlazni predlošci za IoT" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.iot_template_form -msgid "Outputs" -msgstr "Izlazi" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__params -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__params -msgid "Params" -msgstr "Parametri" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__parent_id -msgid "Parent" -msgstr "Nasljeđeni" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__parent_path -msgid "Parent Path" -msgstr "Putanja nadređenih" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__serial -msgid "Serial" -msgstr "Serijski broj" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__tag_ids -msgid "Tag" -msgstr "Oznaka" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__template_id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__template_id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__template_id -msgid "Template" -msgstr "Prijedlog" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_input__template_input_id -msgid "Template Input" -msgstr "Ulaz predloška" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_output__template_output_id -msgid "Template Output" -msgstr "Izlaz predloška" - -#. module: iot_template_oca -#: model:ir.ui.menu,name:iot_template_oca.iot_template_menu -msgid "Templates" -msgstr "Predlošci" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__url -msgid "Url" -msgstr "Url" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Use this URL on your device configuration" -msgstr "Koristi ovaj URL u konfiguraciji vašeg uređaja" diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/i18n/es.po b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/i18n/es.po deleted file mode 100644 index 0861cf0e..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/i18n/es.po +++ /dev/null @@ -1,292 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_template_oca -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-11-15 17:38+0000\n" -"Last-Translator: Ivorra78 \n" -"Language-Team: none\n" -"Language: es\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.17\n" - -#. module: iot_template_oca -#: model:ir.ui.menu,name:iot_template_oca.iot_device_configuration_menu -msgid "Add a new Device" -msgstr "Añadir un nuevo Dispositivo" - -#. module: iot_template_oca -#: model:ir.actions.server,name:iot_template_oca.configure_action -msgid "Apply Template" -msgstr "Aplicar Plantilla" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Apply template" -msgstr "Aplicar plantilla" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__call_function -msgid "Call Function" -msgstr "Función de Llamada" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__call_model_id -msgid "Call Model" -msgstr "Modelo de Llamada" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Close" -msgstr "Cerrar" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__communication_system_id -msgid "Communication System" -msgstr "Sistema de Comunicación" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Configuration URL" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_device_configure -msgid "Configure a IoT device" -msgstr "Configurar un dispositivo IoT" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__create_uid -msgid "Created by" -msgstr "Creado por" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__create_date -msgid "Created on" -msgstr "Creado el" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_device_input -msgid "Device input" -msgstr "Entrada del dispositivo" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__display_name -msgid "Display Name" -msgstr "Mostrar Nombre" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__group_id -msgid "Group" -msgstr "Grupo" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__id -msgid "ID" -msgstr "ID (identificación)" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__icon -msgid "Icon" -msgstr "Icono" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_1920 -msgid "Image" -msgstr "Imagen" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_1024 -msgid "Image 1024" -msgstr "Imagen 1024" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_128 -msgid "Image 128" -msgstr "Imagen 128" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_256 -msgid "Image 256" -msgstr "Imagen 256" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_512 -msgid "Image 512" -msgstr "Imagen 512" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__input_ids -msgid "Input" -msgstr "Entrada" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.iot_template_form -msgid "Inputs" -msgstr "Entradas" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_device -#: model:ir.model,name:iot_template_oca.model_iot_device_output -msgid "IoT Device" -msgstr "Dispositivo IoT" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template_input -msgid "IoT Input for Template" -msgstr "Entrada IoT para Plantilla" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template_key -msgid "IoT Keys for configuration" -msgstr "Claves IoT para la configuración" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template -msgid "IoT Template for Device" -msgstr "Plantilla IoT para Dispositivos" - -#. module: iot_template_oca -#: model:ir.actions.act_window,name:iot_template_oca.iot_template_action -msgid "IoT Templates" -msgstr "Plantillas IoT" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__key_ids -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__key -msgid "Key" -msgstr "Clave" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.iot_template_form -msgid "Keys" -msgstr "Llaves" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output____last_update -msgid "Last Modified on" -msgstr "Última Modificación el" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__write_uid -msgid "Last Updated by" -msgstr "Última Actualización por" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__write_date -msgid "Last Updated on" -msgstr "Última Actualización el" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__name -msgid "Name" -msgstr "Nombre" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__output_ids -msgid "Output" -msgstr "Salida" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template_output -msgid "Output templates for IoT" -msgstr "Plantillas de salida para IoT" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.iot_template_form -msgid "Outputs" -msgstr "Salidas" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__params -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__params -msgid "Params" -msgstr "Parámetros" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__parent_id -msgid "Parent" -msgstr "Parental" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__parent_path -msgid "Parent Path" -msgstr "Ruta Parental" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__serial -msgid "Serial" -msgstr "Serie" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__tag_ids -msgid "Tag" -msgstr "Etiqueta" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__template_id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__template_id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__template_id -msgid "Template" -msgstr "Plantilla" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_input__template_input_id -msgid "Template Input" -msgstr "Entrada de Plantilla" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_output__template_output_id -msgid "Template Output" -msgstr "Salida de Plantilla" - -#. module: iot_template_oca -#: model:ir.ui.menu,name:iot_template_oca.iot_template_menu -msgid "Templates" -msgstr "Plantillas" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__url -msgid "Url" -msgstr "Url" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Use this URL on your device configuration" -msgstr "Utilice esta URL en la configuración de su dispositivo" diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/i18n/fa.po b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/i18n/fa.po deleted file mode 100644 index 01385634..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/i18n/fa.po +++ /dev/null @@ -1,290 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_template_oca -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: fa\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" - -#. module: iot_template_oca -#: model:ir.ui.menu,name:iot_template_oca.iot_device_configuration_menu -msgid "Add a new Device" -msgstr "" - -#. module: iot_template_oca -#: model:ir.actions.server,name:iot_template_oca.configure_action -msgid "Apply Template" -msgstr "" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Apply template" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__call_function -msgid "Call Function" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__call_model_id -msgid "Call Model" -msgstr "" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Close" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__communication_system_id -msgid "Communication System" -msgstr "" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Configuration URL" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_device_configure -msgid "Configure a IoT device" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__create_uid -msgid "Created by" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__create_date -msgid "Created on" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_device_input -msgid "Device input" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__display_name -msgid "Display Name" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__group_id -msgid "Group" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__id -msgid "ID" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__icon -msgid "Icon" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_1920 -msgid "Image" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_1024 -msgid "Image 1024" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_128 -msgid "Image 128" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_256 -msgid "Image 256" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_512 -msgid "Image 512" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__input_ids -msgid "Input" -msgstr "" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.iot_template_form -msgid "Inputs" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_device -#: model:ir.model,name:iot_template_oca.model_iot_device_output -msgid "IoT Device" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template_input -msgid "IoT Input for Template" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template_key -msgid "IoT Keys for configuration" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template -msgid "IoT Template for Device" -msgstr "" - -#. module: iot_template_oca -#: model:ir.actions.act_window,name:iot_template_oca.iot_template_action -msgid "IoT Templates" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__key_ids -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__key -msgid "Key" -msgstr "" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.iot_template_form -msgid "Keys" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output____last_update -msgid "Last Modified on" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__write_uid -msgid "Last Updated by" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__write_date -msgid "Last Updated on" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__name -msgid "Name" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__output_ids -msgid "Output" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template_output -msgid "Output templates for IoT" -msgstr "" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.iot_template_form -msgid "Outputs" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__params -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__params -msgid "Params" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__parent_id -msgid "Parent" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__parent_path -msgid "Parent Path" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__serial -msgid "Serial" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__tag_ids -msgid "Tag" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__template_id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__template_id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__template_id -msgid "Template" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_input__template_input_id -msgid "Template Input" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_output__template_output_id -msgid "Template Output" -msgstr "" - -#. module: iot_template_oca -#: model:ir.ui.menu,name:iot_template_oca.iot_template_menu -msgid "Templates" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__url -msgid "Url" -msgstr "" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Use this URL on your device configuration" -msgstr "" diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/i18n/iot_template_oca.pot b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/i18n/iot_template_oca.pot deleted file mode 100644 index 4a854573..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/i18n/iot_template_oca.pot +++ /dev/null @@ -1,289 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_template_oca -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: iot_template_oca -#: model:ir.ui.menu,name:iot_template_oca.iot_device_configuration_menu -msgid "Add a new Device" -msgstr "" - -#. module: iot_template_oca -#: model:ir.actions.server,name:iot_template_oca.configure_action -msgid "Apply Template" -msgstr "" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Apply template" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__call_function -msgid "Call Function" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__call_model_id -msgid "Call Model" -msgstr "" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Close" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__communication_system_id -msgid "Communication System" -msgstr "" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Configuration URL" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_device_configure -msgid "Configure a IoT device" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__create_uid -msgid "Created by" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__create_date -msgid "Created on" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_device_input -msgid "Device input" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__display_name -msgid "Display Name" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__group_id -msgid "Group" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__id -msgid "ID" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__icon -msgid "Icon" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_1920 -msgid "Image" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_1024 -msgid "Image 1024" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_128 -msgid "Image 128" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_256 -msgid "Image 256" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_512 -msgid "Image 512" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__input_ids -msgid "Input" -msgstr "" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.iot_template_form -msgid "Inputs" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_device -#: model:ir.model,name:iot_template_oca.model_iot_device_output -msgid "IoT Device" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template_input -msgid "IoT Input for Template" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template_key -msgid "IoT Keys for configuration" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template -msgid "IoT Template for Device" -msgstr "" - -#. module: iot_template_oca -#: model:ir.actions.act_window,name:iot_template_oca.iot_template_action -msgid "IoT Templates" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__key_ids -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__key -msgid "Key" -msgstr "" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.iot_template_form -msgid "Keys" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output____last_update -msgid "Last Modified on" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__write_uid -msgid "Last Updated by" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__write_date -msgid "Last Updated on" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__name -msgid "Name" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__output_ids -msgid "Output" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template_output -msgid "Output templates for IoT" -msgstr "" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.iot_template_form -msgid "Outputs" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__params -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__params -msgid "Params" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__parent_id -msgid "Parent" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__parent_path -msgid "Parent Path" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__serial -msgid "Serial" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__tag_ids -msgid "Tag" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__template_id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__template_id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__template_id -msgid "Template" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_input__template_input_id -msgid "Template Input" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_output__template_output_id -msgid "Template Output" -msgstr "" - -#. module: iot_template_oca -#: model:ir.ui.menu,name:iot_template_oca.iot_template_menu -msgid "Templates" -msgstr "" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__url -msgid "Url" -msgstr "" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Use this URL on your device configuration" -msgstr "" diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/i18n/it.po b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/i18n/it.po deleted file mode 100644 index 5f11c573..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/i18n/it.po +++ /dev/null @@ -1,292 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * iot_template_oca -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-05-02 16:37+0000\n" -"Last-Translator: mymage \n" -"Language-Team: none\n" -"Language: it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.17\n" - -#. module: iot_template_oca -#: model:ir.ui.menu,name:iot_template_oca.iot_device_configuration_menu -msgid "Add a new Device" -msgstr "Aggiungi nuovo dispositivo" - -#. module: iot_template_oca -#: model:ir.actions.server,name:iot_template_oca.configure_action -msgid "Apply Template" -msgstr "Applica modello" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Apply template" -msgstr "Applica modello" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__call_function -msgid "Call Function" -msgstr "Richiama funzione" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__call_model_id -msgid "Call Model" -msgstr "Richiama modello" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Close" -msgstr "Chiudi" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__communication_system_id -msgid "Communication System" -msgstr "Sistema di comunicazione" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Configuration URL" -msgstr "URL configurazione" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_device_configure -msgid "Configure a IoT device" -msgstr "Configura un dispositivo IoT" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__create_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__create_uid -msgid "Created by" -msgstr "Creato da" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__create_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__create_date -msgid "Created on" -msgstr "Creato il" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_device_input -msgid "Device input" -msgstr "Input dispositivo" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__display_name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__display_name -msgid "Display Name" -msgstr "Nome visualizzato" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__group_id -msgid "Group" -msgstr "Gruppo" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__id -msgid "ID" -msgstr "ID" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__icon -msgid "Icon" -msgstr "Icona" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_1920 -msgid "Image" -msgstr "Immagine" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_1024 -msgid "Image 1024" -msgstr "Immagine 1024" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_128 -msgid "Image 128" -msgstr "Immagine 128" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_256 -msgid "Image 256" -msgstr "Immagine 256" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__image_512 -msgid "Image 512" -msgstr "Immagine 512" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__input_ids -msgid "Input" -msgstr "Input" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.iot_template_form -msgid "Inputs" -msgstr "Input" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_device -#: model:ir.model,name:iot_template_oca.model_iot_device_output -msgid "IoT Device" -msgstr "Dispositivo IoT" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template_input -msgid "IoT Input for Template" -msgstr "Input IoT per modello" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template_key -msgid "IoT Keys for configuration" -msgstr "Chiavi IoT per configurazione" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template -msgid "IoT Template for Device" -msgstr "Modello IoT per dispositivo" - -#. module: iot_template_oca -#: model:ir.actions.act_window,name:iot_template_oca.iot_template_action -msgid "IoT Templates" -msgstr "Modelli IoT" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__key_ids -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__key -msgid "Key" -msgstr "Chiave" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.iot_template_form -msgid "Keys" -msgstr "Chiavi" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key____last_update -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output____last_update -msgid "Last Modified on" -msgstr "Ultima modifica il" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__write_uid -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__write_uid -msgid "Last Updated by" -msgstr "Ultimo aggiornamento di" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__write_date -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__write_date -msgid "Last Updated on" -msgstr "Ultimo aggiornamento il" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__name -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__name -msgid "Name" -msgstr "Nome" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__output_ids -msgid "Output" -msgstr "Output" - -#. module: iot_template_oca -#: model:ir.model,name:iot_template_oca.model_iot_template_output -msgid "Output templates for IoT" -msgstr "Modello output per IoT" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.iot_template_form -msgid "Outputs" -msgstr "Output" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__params -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__params -msgid "Params" -msgstr "Parametri" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__parent_id -msgid "Parent" -msgstr "Padre" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__parent_path -msgid "Parent Path" -msgstr "Percorso padre" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__serial -msgid "Serial" -msgstr "Seriale" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template__tag_ids -msgid "Tag" -msgstr "Etichetta" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_input__template_id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_key__template_id -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_template_output__template_id -msgid "Template" -msgstr "Modello" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_input__template_input_id -msgid "Template Input" -msgstr "Modello input" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_output__template_output_id -msgid "Template Output" -msgstr "Modello output" - -#. module: iot_template_oca -#: model:ir.ui.menu,name:iot_template_oca.iot_template_menu -msgid "Templates" -msgstr "Modelli" - -#. module: iot_template_oca -#: model:ir.model.fields,field_description:iot_template_oca.field_iot_device_configure__url -msgid "Url" -msgstr "URL" - -#. module: iot_template_oca -#: model_terms:ir.ui.view,arch_db:iot_template_oca.configure_form -msgid "Use this URL on your device configuration" -msgstr "Utilizzare questo URLnella configurazione del dispositivo" diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/models/__init__.py b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/models/__init__.py deleted file mode 100644 index 947d0d6d..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/models/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from . import iot_device -from . import iot_device_input -from . import iot_device_output -from . import iot_template diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/models/iot_device.py b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/models/iot_device.py deleted file mode 100644 index 98b7241b..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/models/iot_device.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright 2020 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import models - - -class IotDevice(models.Model): - _inherit = "iot.device" - - def get_iot_configuration(self): - self.ensure_one() - return { - "host": self.env["ir.config_parameter"].sudo().get_param("web.base.url"), - "name": self.name, - "outputs": { - output.name: output.get_configuration() for output in self.output_ids - }, - "inputs": { - iot_input.name: iot_input.get_configuration() - for iot_input in self.input_ids - }, - } diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/models/iot_device_input.py b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/models/iot_device_input.py deleted file mode 100644 index 012ad828..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/models/iot_device_input.py +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright 2020 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models - - -class IotDeviceInput(models.Model): - _inherit = "iot.device.input" - - template_input_id = fields.Many2one( - "iot.template.input", - readonly=True, - ) - - def get_configuration(self): - return { - "serial": self.serial, - "passphrase": self.passphrase, - } diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/models/iot_device_output.py b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/models/iot_device_output.py deleted file mode 100644 index ca24d6c6..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/models/iot_device_output.py +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright 2020 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import fields, models - - -class IotDeviceOutput(models.Model): - _inherit = "iot.device.output" - - template_output_id = fields.Many2one( - "iot.template.output", - readonly=True, - ) - - def get_configuration(self): - return {} diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/models/iot_template.py b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/models/iot_template.py deleted file mode 100644 index 93b5c265..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/models/iot_template.py +++ /dev/null @@ -1,137 +0,0 @@ -# Copyright 2020 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from uuid import uuid4 - -from jinja2.sandbox import SandboxedEnvironment - -from odoo import fields, models -from odoo.tools.safe_eval import safe_eval - -mako_template_env = SandboxedEnvironment( - block_start_string="<%", - block_end_string="%>", - variable_start_string="${", - variable_end_string="}", - comment_start_string="<%doc>", - comment_end_string="", - line_statement_prefix="%", - line_comment_prefix="##", - trim_blocks=True, # do not output newline after blocks - autoescape=True, # XML/HTML automatic escaping -) - - -class IotTemplate(models.Model): - _name = "iot.template" - _inherit = "image.mixin" - _description = "IoT Template for Device" - _parent_name = "parent_id" - _parent_store = True - _parent_order = "name" - - parent_path = fields.Char(index=True, unaccent=False) - name = fields.Char(required=True) - input_ids = fields.One2many( - "iot.template.input", - inverse_name="template_id", - ) - output_ids = fields.One2many( - "iot.template.output", - inverse_name="template_id", - ) - key_ids = fields.One2many("iot.template.key", inverse_name="template_id") - parent_id = fields.Many2one("iot.template", ondelete="restrict") - tag_ids = fields.Many2many("iot.device.tag") - group_id = fields.Many2one("iot.device.group") - icon = fields.Selection( - selection=lambda r: r.env["iot.device"]._fields["icon"].selection - ) - - def _get_keys(self, serial): - if self.parent_id: - keys = self.parent_id._get_keys(serial) - else: - keys = {"serial": serial} - keys.update({key.key: key._generate_value() for key in self.key_ids}) - return keys - - def apply_template(self, device, keys): - self.ensure_one() - new_vals = {} - if self.group_id and not device.group_id: - new_vals["group_id"] = self.group_id.id - if self.tag_ids: - new_vals["tag_ids"] = [(4, tag_id) for tag_id in self.tag_ids.ids] - if self.image_1920 and not device.image_1920: - new_vals["image_1920"] = self.image_1920 - if self.icon and not device.icon: - new_vals["icon"] = self.icon - if new_vals: - device.write(new_vals) - for element in self.input_ids: - element._apply_template(device, keys) - for element in self.output_ids: - element._apply_template(device, keys) - if self.parent_id: - self.parent_id.apply_template(device, keys) - - -class IotTemplateInput(models.Model): - _name = "iot.template.input" - _description = "IoT Input for Template" - - template_id = fields.Many2one("iot.template", required=True) - name = fields.Char(required=True) - params = fields.Text() - call_model_id = fields.Many2one("ir.model") - call_function = fields.Char(required=True) - - def _apply_template(self, device, keys): - real_vals = { - "device_id": device.id, - "name": self.name, - "call_function": self.call_function, - "call_model_id": self.call_model_id.id, - "template_input_id": self.id, - "serial": uuid4(), - "passphrase": uuid4(), - } - vals = safe_eval(self.params) - for key in vals: - vals[key] = mako_template_env.from_string(vals[key]).render(keys) - real_vals.update(vals) - return self.env["iot.device.input"].create(real_vals) - - -class IotTemplateOutput(models.Model): - _name = "iot.template.output" - _description = "Output templates for IoT" - - template_id = fields.Many2one("iot.template", required=True) - name = fields.Char(required=True) - communication_system_id = fields.Many2one("iot.communication.system", required=True) - params = fields.Text() - - def _apply_template(self, device, keys): - real_vals = { - "device_id": device.id, - "name": self.name, - "communication_system_id": self.communication_system_id.id, - "template_output_id": self.id, - } - vals = safe_eval(self.params or "{}") - for key in vals: - vals[key] = mako_template_env.from_string(vals[key]).render(keys) - real_vals.update(vals) - return self.env["iot.device.output"].create(real_vals) - - -class IotTemplateKey(models.Model): - _name = "iot.template.key" - _description = "IoT Keys for configuration" - - template_id = fields.Many2one("iot.template", required=True) - key = fields.Char(required=True) - - def _generate_value(self): - return uuid4() diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/readme/CONTRIBUTORS.rst deleted file mode 100644 index 93ec993e..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1 +0,0 @@ -* Enric Tobella diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/readme/DESCRIPTION.rst b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/readme/DESCRIPTION.rst deleted file mode 100644 index 6f0e14e8..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/readme/DESCRIPTION.rst +++ /dev/null @@ -1,7 +0,0 @@ -Create a system of templates for IoT devices. - -When we are using a template we can configure a device -with a simple URL configuration. -The device will contact odoo and send the template name. -Odoo will create the device and respond with all the -expected data. diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/readme/USAGE.rst b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/readme/USAGE.rst deleted file mode 100644 index 26a3e425..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/readme/USAGE.rst +++ /dev/null @@ -1,6 +0,0 @@ -1. Create a template with a module or in `Iot > Templates` -2. Access `Iot > Config Device` -3. Confirm that you want to configurate a new device -4. Copy the URL -5. Access the device and send it the configuration url -6. The device will contact odoo and automatically configure itself. diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/security/ir.model.access.csv b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/security/ir.model.access.csv deleted file mode 100644 index 0405b81b..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/security/ir.model.access.csv +++ /dev/null @@ -1,10 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_iot_template,access_iot_template,model_iot_template,iot_oca.group_iot_user,1,0,0,0 -manage_iot_template,access_iot_template,model_iot_template,iot_oca.group_iot_manager,1,1,1,1 -access_iot_template_input,access_iot_template_input,model_iot_template_input,iot_oca.group_iot_user,1,0,0,0 -manage_iot_template_input,access_iot_template_input,model_iot_template_input,iot_oca.group_iot_manager,1,1,1,1 -access_iot_template_output,access_iot_template_output,model_iot_template_output,iot_oca.group_iot_user,1,0,0,0 -manage_iot_template_output,access_iot_template_output,model_iot_template_output,iot_oca.group_iot_manager,1,1,1,1 -access_iot_template_key,access_iot_template_key,model_iot_template_key,iot_oca.group_iot_user,1,0,0,0 -manage_iot_template_key,access_iot_template_key,model_iot_template_key,iot_oca.group_iot_manager,1,1,1,1 -access_iot_device_configure,access_iot_device_configure,model_iot_device_configure,iot_oca.group_iot_manager,1,1,1,1 diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/static/description/icon.png b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/static/description/icon.png deleted file mode 100644 index da43f6f0..00000000 Binary files a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/static/description/icon.png and /dev/null differ diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/static/description/index.html b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/static/description/index.html deleted file mode 100644 index e273f02e..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/static/description/index.html +++ /dev/null @@ -1,440 +0,0 @@ - - - - - -IoT Templates - - - -
-

IoT Templates

- - -

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

-

Create a system of templates for IoT devices.

-

When we are using a template we can configure a device -with a simple URL configuration. -The device will contact odoo and send the template name. -Odoo will create the device and respond with all the -expected data.

-

Table of contents

- -
-

Usage

-
    -
  1. Create a template with a module or in Iot > Templates
  2. -
  3. Access Iot > Config Device
  4. -
  5. Confirm that you want to configurate a new device
  6. -
  7. Copy the URL
  8. -
  9. Access the device and send it the configuration url
  10. -
  11. The device will contact odoo and automatically configure itself.
  12. -
-
-
-

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

-
    -
  • Creu Blanca
  • -
-
-
-

Contributors

- -
-
-

Maintainers

-

This module is maintained by the OCA.

- -Odoo Community Association - -

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

-

This module is part of the OCA/iot project on GitHub.

-

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

-
-
-
- - diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/tests/__init__.py b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/tests/__init__.py deleted file mode 100644 index c6ac672f..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import test_iot_template diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/tests/test_iot_template.py b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/tests/test_iot_template.py deleted file mode 100644 index b213f03a..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/tests/test_iot_template.py +++ /dev/null @@ -1,141 +0,0 @@ -# Copyright 2020 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo.exceptions import UserError -from odoo.tests.common import HttpCase - - -class TestIotTemplate(HttpCase): - def setUp(self): - super(TestIotTemplate, self).setUp() - self.system = self.env["iot.communication.system"].create({"name": "Testing"}) - self.system_2 = self.env["iot.communication.system"].create( - {"name": "Testing 2"} - ) - self.parent_template = self.env["iot.template"].create( - { - "name": "Parent template", - "key_ids": [(0, 0, {"key": "passphrase"})], - "input_ids": [ - ( - 0, - 0, - { - "name": "INPUT 1", - "call_model_id": False, - "call_function": "iot_ras_default_action", - "params": "{'serial': '${serial}', " - "'passphrase': '${passphrase}'}", - }, - ) - ], - "output_ids": [ - ( - 0, - 0, - {"name": "OUTPUT 1", "communication_system_id": self.system.id}, - ) - ], - } - ) - self.template = self.env["iot.template"].create( - { - "name": "template", - "parent_id": self.parent_template.id, - "key_ids": [(0, 0, {"key": "serial2"})], - "input_ids": [ - ( - 0, - 0, - { - "name": "INPUT 2", - "call_model_id": False, - "call_function": "iot_ras_default_action", - "params": "{'serial': '${serial2}', " - "'passphrase': '${passphrase}'}", - }, - ) - ], - "output_ids": [ - ( - 0, - 0, - { - "name": "OUTPUT 2", - "communication_system_id": self.system_2.id, - "params": "{'ip': '1234'}", - }, - ) - ], - } - ) - - def _get_wizard(self): - wizard = self.env["iot.device.configure"].create({}) - self.assertTrue(wizard.serial) - self.assertTrue(wizard.url) - return wizard - - def test_generation(self): - wizard = self._get_wizard() - device_config = self.url_open( - wizard.url, data={"template": self.template.name} - ).json() - device = self.env["iot.device"].search([("name", "=", device_config["name"])]) - self.assertTrue(device) - self.assertEqual(1, len(device)) - self.assertEqual(2, len(device.output_ids)) - self.assertEqual(2, len(device.input_ids)) - input1 = device.input_ids.filtered( - lambda r: r.template_input_id == self.parent_template.input_ids - ) - self.assertTrue(input1) - input2 = device.input_ids.filtered( - lambda r: r.template_input_id == self.template.input_ids - ) - self.assertTrue(input2) - self.assertNotEqual(input1, input2) - self.assertGreater(len(input1.passphrase), 0) - self.assertGreater(len(input2.passphrase), 0) - self.assertEqual(input1.passphrase, input2.passphrase) - self.assertGreater(len(input1.serial), 0) - self.assertGreater(len(input2.serial), 0) - self.assertNotEqual(input1.serial, input2.serial) - output1 = device.output_ids.filtered( - lambda r: r.template_output_id == self.parent_template.output_ids - ) - self.assertTrue(output1) - output2 = device.output_ids.filtered( - lambda r: r.template_output_id == self.template.output_ids - ) - self.assertTrue(output2) - self.assertNotEqual(output1, output2) - self.assertEqual(output1.communication_system_id, self.system) - self.assertFalse(output1.ip) - self.assertEqual(output2.communication_system_id, self.system_2) - self.assertEqual(output2.ip, "1234") - - def test_missing_configuration(self): - wizard = self._get_wizard() - url = wizard.url.replace(wizard.serial, wizard.serial + wizard.serial) - device_config = self.url_open(url, data={"template": self.template.name}).json() - self.assertFalse(device_config) - - def test_no_double_configuration(self): - """ - We expect that it is not allowed to do the same call twice, - the first it must work properly. - No result should be returned on the second one - """ - wizard = self._get_wizard() - url = wizard.url - device_config = self.url_open(url, data={"template": self.template.name}).json() - self.assertTrue(device_config) - device = self.env["iot.device"].search([("name", "=", device_config["name"])]) - self.assertTrue(device) - device_config = self.url_open(url, data={"template": self.template.name}).json() - self.assertFalse(device_config) - - def test_constrain_hierarchy(self): - with self.assertRaises(UserError): - self.parent_template.parent_id = self.template diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/views/iot_template_views.xml b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/views/iot_template_views.xml deleted file mode 100644 index a53e3d5e..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/views/iot_template_views.xml +++ /dev/null @@ -1,109 +0,0 @@ - - - - iot.template.form - iot.template - -
-
- -
- -
-

- -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - -
-
-
- - - - - - -
- - - - - - - -
-
-
-
- - -
- - - iot.template.form - iot.template - - - - - - - - IoT Templates - ir.actions.act_window - iot.template - tree,form - - - diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/wizards/__init__.py b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/wizards/__init__.py deleted file mode 100644 index e77c356e..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/wizards/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import iot_device_configure diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/wizards/iot_device_configure.py b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/wizards/iot_device_configure.py deleted file mode 100644 index c0844176..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/wizards/iot_device_configure.py +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright 2020 Creu Blanca -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from uuid import uuid4 - -from odoo import api, fields, models - - -class IotDeviceConfigure(models.TransientModel): - _name = "iot.device.configure" - _description = "Configure a IoT device" - - serial = fields.Char(readonly=True, required=True, default=lambda r: uuid4()) - url = fields.Char(compute="_compute_url") - - @api.depends("serial") - def _compute_url(self): - for record in self: - record.url = ( - self.env["ir.config_parameter"].sudo().get_param("web.base.url") - + "/iot/" - + record.serial - + "/configure" - ) - - @api.model - def configure(self, serial, template_id, ip=False, **kwargs): - config = self.search([("serial", "=", serial)]) - if not config: - return {} - config.unlink() - device = self.env["iot.device"].create({"name": serial, "ip": ip}) - template = self.env["iot.template"].search([("name", "=", template_id)]) - if template: - template.apply_template(device, template._get_keys(serial)) - return device.get_iot_configuration() diff --git a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/wizards/iot_device_configure.xml b/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/wizards/iot_device_configure.xml deleted file mode 100644 index cfff1d72..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/iot_template_oca/wizards/iot_device_configure.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - iot.device.configure - iot.device.configure - form - -
-
- Use this URL on your device configuration -
- - - -
-
-
-
-
- - Apply Template - - code - action = model.create({}).get_formview_action() -action["target"] = "new" - - -
diff --git a/odoo-bringout-oca-iot-iot_template_oca/pyproject.toml b/odoo-bringout-oca-iot-iot_template_oca/pyproject.toml deleted file mode 100644 index d5d9aa08..00000000 --- a/odoo-bringout-oca-iot-iot_template_oca/pyproject.toml +++ /dev/null @@ -1,43 +0,0 @@ -[project] -name = "odoo-bringout-oca-iot-iot_template_oca" -version = "16.0.0" -description = "IoT Templates - IoT module for managing templates" -authors = [ - { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } -] -dependencies = [ - "odoo-bringout-oca-iot-iot_input_oca>=16.0.0", - "odoo-bringout-oca-iot-iot_output_oca>=16.0.0", - "requests>=2.25.1" -] -readme = "README.md" -requires-python = ">= 3.11" -classifiers = [ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Developers", - "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Topic :: Office/Business", -] - -[project.urls] -homepage = "https://github.com/bringout/0" -repository = "https://github.com/bringout/0" - -[build-system] -requires = ["hatchling"] -build-backend = "hatchling.build" - -[tool.hatch.metadata] -allow-direct-references = true - -[tool.hatch.build.targets.wheel] -packages = ["iot_template_oca"] - -[tool.rye] -managed = true -dev-dependencies = [ - "pytest>=8.4.1", -] diff --git a/odoo-bringout-oca-product-configurator-product_configurator/README.md b/odoo-bringout-oca-product-configurator-product_configurator/README.md deleted file mode 100644 index af7624c7..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# Product Configurator - -Odoo addon: product_configurator - -## Installation - -```bash -pip install odoo-bringout-oca-product-configurator-product_configurator -``` - -## Dependencies - -This addon depends on: -- account - -## Manifest Information - -- **Name**: Product Configurator -- **Version**: 16.0.1.1.2 -- **Category**: Generic Modules/Base -- **License**: AGPL-3 -- **Installable**: True - -## Source - -Based on [OCA/product-configurator](https://github.com/OCA/product-configurator) branch 16.0, addon `product_configurator`. - -## License - -This package maintains the original AGPL-3 license from the upstream Odoo project. - -## Documentation - -- Overview: doc/OVERVIEW.md -- Architecture: doc/ARCHITECTURE.md -- Models: doc/MODELS.md -- Controllers: doc/CONTROLLERS.md -- Wizards: doc/WIZARDS.md -- Reports: doc/REPORTS.md -- Security: doc/SECURITY.md -- Install: doc/INSTALL.md -- Usage: doc/USAGE.md -- Configuration: doc/CONFIGURATION.md -- Dependencies: doc/DEPENDENCIES.md -- Troubleshooting: doc/TROUBLESHOOTING.md -- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-product-configurator-product_configurator/doc/ARCHITECTURE.md b/odoo-bringout-oca-product-configurator-product_configurator/doc/ARCHITECTURE.md deleted file mode 100644 index 93ad54d3..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/doc/ARCHITECTURE.md +++ /dev/null @@ -1,32 +0,0 @@ -# Architecture - -```mermaid -flowchart TD - U[Users] -->|HTTP| V[Views and QWeb Templates] - V --> C[Controllers] - V --> W[Wizards – Transient Models] - C --> M[Models and ORM] - W --> M - M --> R[Reports] - DX[Data XML] --> M - S[Security – ACLs and Groups] -. enforces .-> M - - subgraph Product_configurator Module - product_configurator - direction LR - M:::layer - W:::layer - C:::layer - V:::layer - R:::layer - S:::layer - DX:::layer - end - - classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px -``` - -Notes -- Views include tree/form/kanban templates and report templates. -- Controllers provide website/portal routes when present. -- Wizards are UI flows implemented with `models.TransientModel`. -- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-product-configurator-product_configurator/doc/CONFIGURATION.md b/odoo-bringout-oca-product-configurator-product_configurator/doc/CONFIGURATION.md deleted file mode 100644 index 98d0b74e..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/doc/CONFIGURATION.md +++ /dev/null @@ -1,3 +0,0 @@ -# Configuration - -Refer to Odoo settings for product_configurator. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-product-configurator-product_configurator/doc/CONTROLLERS.md b/odoo-bringout-oca-product-configurator-product_configurator/doc/CONTROLLERS.md deleted file mode 100644 index f628e770..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/doc/CONTROLLERS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Controllers - -This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-product-configurator-product_configurator/doc/DEPENDENCIES.md b/odoo-bringout-oca-product-configurator-product_configurator/doc/DEPENDENCIES.md deleted file mode 100644 index fd92e275..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/doc/DEPENDENCIES.md +++ /dev/null @@ -1,5 +0,0 @@ -# Dependencies - -This addon depends on: - -- [account](https://github.com/bringout/oca-ocb-accounting/tree/b11fb50e2ed11eec1e305a0df730b49554c01199/odoo-bringout-oca-ocb-account) diff --git a/odoo-bringout-oca-product-configurator-product_configurator/doc/FAQ.md b/odoo-bringout-oca-product-configurator-product_configurator/doc/FAQ.md deleted file mode 100644 index 7fedf787..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/doc/FAQ.md +++ /dev/null @@ -1,4 +0,0 @@ -# FAQ - -- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged). -- Q: How to enable? A: Start server with --addon product_configurator or install in UI. diff --git a/odoo-bringout-oca-product-configurator-product_configurator/doc/INSTALL.md b/odoo-bringout-oca-product-configurator-product_configurator/doc/INSTALL.md deleted file mode 100644 index 88045fec..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/doc/INSTALL.md +++ /dev/null @@ -1,7 +0,0 @@ -# Install - -```bash -pip install odoo-bringout-oca-product-configurator-product_configurator" -# or -uv pip install odoo-bringout-oca-product-configurator-product_configurator" -``` diff --git a/odoo-bringout-oca-product-configurator-product_configurator/doc/MODELS.md b/odoo-bringout-oca-product-configurator-product_configurator/doc/MODELS.md deleted file mode 100644 index 7bad9256..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/doc/MODELS.md +++ /dev/null @@ -1,27 +0,0 @@ -# Models - -Detected core models and extensions in product_configurator. - -```mermaid -classDiagram - class product_attribute_value_line - class product_config_domain - class product_config_domain_line - class product_config_image - class product_config_line - class product_config_session - class product_config_session_custom_value - class product_config_step - class product_config_step_line - class ir_ui_view - class product_attribute - class product_attribute_value - class product_product - class product_template - class product_template_attribute_line - class product_template_attribute_value -``` - -Notes -- Classes show model technical names; fields omitted for brevity. -- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-product-configurator-product_configurator/doc/OVERVIEW.md b/odoo-bringout-oca-product-configurator-product_configurator/doc/OVERVIEW.md deleted file mode 100644 index ab89298a..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/doc/OVERVIEW.md +++ /dev/null @@ -1,6 +0,0 @@ -# Overview - -Packaged Odoo addon: product_configurator. Provides features documented in upstream Odoo 16 under this addon. - -- Source: OCA/OCB 16.0, addon product_configurator -- License: LGPL-3 diff --git a/odoo-bringout-oca-product-configurator-product_configurator/doc/REPORTS.md b/odoo-bringout-oca-product-configurator-product_configurator/doc/REPORTS.md deleted file mode 100644 index e0ea35fb..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/doc/REPORTS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Reports - -This module does not define custom reports. diff --git a/odoo-bringout-oca-product-configurator-product_configurator/doc/SECURITY.md b/odoo-bringout-oca-product-configurator-product_configurator/doc/SECURITY.md deleted file mode 100644 index 9b546259..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/doc/SECURITY.md +++ /dev/null @@ -1,42 +0,0 @@ -# Security - -Access control and security definitions in product_configurator. - -## Access Control Lists (ACLs) - -Model access permissions defined in: -- **[ir.model.access.csv](../product_configurator/security/ir.model.access.csv)** - - 39 model access rules - -## Record Rules - -Row-level security rules defined in: - -## Security Groups & Configuration - -Security groups and permissions defined in: -- **[configurator_security.xml](../product_configurator/security/configurator_security.xml)** - - 3 security groups defined - -```mermaid -graph TB - subgraph "Security Layers" - A[Users] --> B[Groups] - B --> C[Access Control Lists] - C --> D[Models] - B --> E[Record Rules] - E --> F[Individual Records] - end -``` - -Security files overview: -- **[configurator_security.xml](../product_configurator/security/configurator_security.xml)** - - Security groups, categories, and XML-based rules -- **[ir.model.access.csv](../product_configurator/security/ir.model.access.csv)** - - Model access permissions (CRUD rights) - -Notes -- Access Control Lists define which groups can access which models -- Record Rules provide row-level security (filter records by user/group) -- Security groups organize users and define permission sets -- All security is enforced at the ORM level by Odoo diff --git a/odoo-bringout-oca-product-configurator-product_configurator/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-product-configurator-product_configurator/doc/TROUBLESHOOTING.md deleted file mode 100644 index 56853cb7..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/doc/TROUBLESHOOTING.md +++ /dev/null @@ -1,5 +0,0 @@ -# Troubleshooting - -- Ensure Python and Odoo environment matches repo guidance. -- Check database connectivity and logs if startup fails. -- Validate that dependent addons listed in DEPENDENCIES.md are installed. diff --git a/odoo-bringout-oca-product-configurator-product_configurator/doc/USAGE.md b/odoo-bringout-oca-product-configurator-product_configurator/doc/USAGE.md deleted file mode 100644 index 3e46a91c..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/doc/USAGE.md +++ /dev/null @@ -1,7 +0,0 @@ -# Usage - -Start Odoo including this addon (from repo root): - -```bash -python3 scripts/nix_odoo_web_server.py --db-name mydb --addon product_configurator -``` diff --git a/odoo-bringout-oca-product-configurator-product_configurator/doc/WIZARDS.md b/odoo-bringout-oca-product-configurator-product_configurator/doc/WIZARDS.md deleted file mode 100644 index d22c223c..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/doc/WIZARDS.md +++ /dev/null @@ -1,9 +0,0 @@ -# Wizards - -Transient models exposed as UI wizards in product_configurator. - -```mermaid -classDiagram - class class - class ProductConfigurator -``` diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/README.md b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/README.md deleted file mode 100644 index affc7d90..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/README.md +++ /dev/null @@ -1,25 +0,0 @@ -#Odoo Product Configurator - -This module is Dynamic configuration wizard for Odoo back-end and the foundation for -external configuration interfaces such 'website_product_configurator'. - -By itself this module does not configure custom products but offers the basis for -generating, validating, updating configurable products using configuration interfaces. - -# Features - -- Inhibition of automatically created variants. -- Extension of attribute lines to offer required, custom and multiple selection. -- Configuration / Compatibility rules between attributes. -- Separation of attributes in different steps. -- Images for intermediate and final configurations. -- Managing active configuration sessions for external configurators -- Set of helper methods required for any Odoo configuration module. - -# Usage - -This module is Dynamic configuration wizard for Odoo back-end and the foundation for -external configuration interfaces such 'website_product_configurator'. - -By itself this module does not configure custom products but offers the basis for -generating, validating, updating configurable products using configuration interfaces. diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/README.rst b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/README.rst deleted file mode 100644 index 862ca639..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/README.rst +++ /dev/null @@ -1,87 +0,0 @@ -==================== -Product Configurator -==================== - -.. - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! This file is generated by oca-gen-addon-readme !! - !! changes will be overwritten. !! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:8356a8a41405ccb39726303feeac66d1ee3e8e998a285871fe0d6c01769a1273 - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -.. |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-OCA%2Fproduct--configurator-lightgray.png?logo=github - :target: https://github.com/OCA/product-configurator/tree/16.0/product_configurator - :alt: OCA/product-configurator -.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/product-configurator-16-0/product-configurator-16-0-product_configurator - :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/product-configurator&target_branch=16.0 - :alt: Try me on Runboat - -|badge1| |badge2| |badge3| |badge4| |badge5| - -This module has all the mechanics to support product configuration. It serves as a base -dependency for configuration interfaces. - -**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 -~~~~~~~ - -* Pledra - -Contributors -~~~~~~~~~~~~ - -* `Aion Tech `_: - - * Simone Rubino - -Maintainers -~~~~~~~~~~~ - -This module is maintained by the OCA. - -.. image:: https://odoo-community.org/logo.png - :alt: Odoo Community Association - :target: https://odoo-community.org - -OCA, or the Odoo Community Association, is a nonprofit organization whose -mission is to support the collaborative development of Odoo features and -promote its widespread use. - -.. |maintainer-PCatinean| image:: https://github.com/PCatinean.png?size=40px - :target: https://github.com/PCatinean - :alt: PCatinean - -Current `maintainer `__: - -|maintainer-PCatinean| - -This module is part of the `OCA/product-configurator `_ project on GitHub. - -You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/__init__.py b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/__init__.py deleted file mode 100644 index ad2c86ac..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from . import models -from . import wizard - -from .init_hook import post_init_hook diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/__manifest__.py b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/__manifest__.py deleted file mode 100644 index d0bf74e5..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/__manifest__.py +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "Product Configurator", - "version": "16.0.1.1.2", - "category": "Generic Modules/Base", - "summary": "Base for product configuration interface modules", - "author": "Pledra, Odoo Community Association (OCA)", - "license": "AGPL-3", - "website": "https://github.com/OCA/product-configurator", - "external_dependencies": { - "python": [ - "mako", - ] - }, - "depends": ["account"], - "data": [ - "security/configurator_security.xml", - "security/ir.model.access.csv", - "views/res_config_settings_view.xml", - "data/menu_configurable_product.xml", - "data/product_attribute.xml", - "data/ir_sequence_data.xml", - "data/ir_config_parameter_data.xml", - "views/product_view.xml", - "views/product_attribute_view.xml", - "views/product_config_view.xml", - "wizard/product_configurator_view.xml", - ], - "assets": { - "web.assets_backend": [ - "/product_configurator/static/src/scss/form_widget.scss", - "/product_configurator/static/src/js/form_controller.esm.js", - "/product_configurator/static/src/js/form_widgets.js", - "/product_configurator/static/src/js/boolean_button_widget.esm.js", - "/product_configurator/static/src/js/boolean_button_widget.xml", - "/product_configurator/static/src/js/relational_fields.js", - ] - }, - "demo": [ - "demo/product_template.xml", - "demo/product_attribute.xml", - "demo/product_config_domain.xml", - "demo/product_config_lines.xml", - "demo/product_config_step.xml", - "demo/config_image_ids.xml", - ], - "images": ["static/description/cover.png"], - "post_init_hook": "post_init_hook", - "qweb": ["static/xml/create_button.xml"], - "development_status": "Beta", - "maintainers": ["PCatinean"], - "installable": True, - "application": True, - "auto_install": False, -} diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/data/ir_config_parameter_data.xml b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/data/ir_config_parameter_data.xml deleted file mode 100644 index f6862117..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/data/ir_config_parameter_data.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - product_configurator.manager_product_configuration_settings - True - - diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/data/ir_sequence_data.xml b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/data/ir_sequence_data.xml deleted file mode 100644 index 805d5c68..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/data/ir_sequence_data.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - Configuration Session - product.config.session - CS - 4 - - diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/data/menu_configurable_product.xml b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/data/menu_configurable_product.xml deleted file mode 100644 index 63e21736..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/data/menu_configurable_product.xml +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - Configurable Templates - ir.actions.act_window - product.template - kanban,tree,form - - {'default_config_ok': True, 'custom_create_variant': True, 'search_default_filter_config_ok': 1} - - - - - - Configured Variants - ir.actions.act_window - product.product - kanban,form,tree - - - {'default_config_ok': True, 'custom_create_variant': True, 'search_default_filter_config_ok': 1} - - - - - - Settings - ir.actions.act_window - res.config.settings - form - inline - - {'module' : 'product_configurator'} - - - - - - Configuration Steps - ir.actions.act_window - product.config.step - tree,form - - - - - - Configuration Restrictions - ir.actions.act_window - product.config.domain - tree,form - - - - - - Configuration Sessions - ir.actions.act_window - product.config.session - tree,form - - - - - diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/data/product_attribute.xml b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/data/product_attribute.xml deleted file mode 100644 index 5b7df2a4..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/data/product_attribute.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - Custom - - - - - Custom - - - - - diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/demo/config_image_ids.xml b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/demo/config_image_ids.xml deleted file mode 100644 index 47d6d2f0..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/demo/config_image_ids.xml +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - Coupé Red - - - - - - - Coupé Silver - - - - - - - Coupé Black - - - - - - - Coupé Red Rims 384 - - - - - - - Coupé Red Rims 387 - - - - - - - Coupé Silver Rims 384 - - - - - - - Coupé Silver Rims 387 - - - - - - - Coupé Black Rims 384 - - - - - - - Coupé Black Rims 387 - - - - - - diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/demo/product_attribute.xml b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/demo/product_attribute.xml deleted file mode 100644 index ded2454e..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/demo/product_attribute.xml +++ /dev/null @@ -1,408 +0,0 @@ - - - - - - - Fuel - - - - Gasoline - - - - - Diesel - - - - - - - Engine - - - - - - 218i - - - - - - 220i - - - - - - 228i - - - - - - M235i - - - - - - M235i xDrive - - - - - - - - 218d - - - - - - 220d - - - - - - 220d xDrive - - - - - - 225d - - - - - - - - Lines - - - - Sport Line - - - - - - Model Sport Line - - - - - - Luxury Line - - - - - - Model Luxury Line - - - - - - Model M Sport - - - - - - Model Advantage - - - - - - - - Paint Color - - - - Red - - - - - Silver - - - - - - Black - - - - - - - Rims - - - - V-spoke 16" - - - - - V-spoke 18" - - - - - Double-spoke 18" - - - - - - - Tapistry - - - - Black - - - - - Oyster/Black - - - - - Coral Red/Black - - - - - - - Transmission - - - - Automatic (Steptronic) - - - - - - Automatic Sport (Steptronic) - - - - - - - - Options - - - - Armrest - - - - - - Smoker Package - - - - - - Sunroof - - - - - - Tow hook - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/demo/product_config_domain.xml b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/demo/product_config_domain.xml deleted file mode 100644 index e57d75f2..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/demo/product_config_domain.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - Gasoline - - - - - - in - and - - - - - - - Diesel - - - - - - in - and - - - - - - - - 218i Engine - - - - - - in - and - - - - - - - - Luxury Lines - - - - - - in - and - - - - diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/demo/product_config_lines.xml b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/demo/product_config_lines.xml deleted file mode 100644 index 616bb722..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/demo/product_config_lines.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/demo/product_config_step.xml b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/demo/product_config_step.xml deleted file mode 100644 index 797b7ebd..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/demo/product_config_step.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - Engine - - - - Body - - - - Lines - - - - Interior - - - - Extras - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/demo/product_template.xml b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/demo/product_template.xml deleted file mode 100644 index e9728421..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/demo/product_template.xml +++ /dev/null @@ -1,270 +0,0 @@ - - - - - - - - BMW - - - - - - 2 Series - - consu - - - - - - - - - Sport Line - consu - - - - - - Luxury Line - consu - - - - - - Model Sport Line - consu - - - - - - Model Luxury Line - consu - - - - - - Model M Sport - consu - - - - - - Model Advantage - consu - - - - - - Automatic Transmission Steptronic - consu - - - - - - Sport Automatic Transmission Steptronic - consu - - - - - - Sunroof - consu - - - - - - Armrest - consu - - - - - - Towhook - consu - - - - - - Smoker Package - consu - - - - - - 218i Coupé - consu - - - - - - 220i Coupé - consu - - - - - - 228i Coupé - consu - - - - - - M235i Coupé - consu - - - - - - M235i xDrive Coupe - consu - - - - - - 218d Coupé - consu - - - - - - 220d Coupé - consu - - - - - - 220d xDrive Coupé - consu - - - - - - 225d Coupé - consu - - - - - - Silver Paint - consu - - - - - diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/i18n/bs.po b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/i18n/bs.po deleted file mode 100644 index 74faba46..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/i18n/bs.po +++ /dev/null @@ -1,1450 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * product_configurator -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"\n" -"Attribute/s: %s" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"\n" -"Restriction: %s" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"\n" -"Value/s: %s\n" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.bmw_2_series -msgid "2 Series" -msgstr "2 Series" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_218d -msgid "218d" -msgstr "218d" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_218d_coupe_product_template -msgid "218d Coupé" -msgstr "218d Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_218i -msgid "218i" -msgstr "218i" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_218i_coupe_product_template -msgid "218i Coupé" -msgstr "218i Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_220d -msgid "220d" -msgstr "220d" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_220d_coupe_product_template -msgid "220d Coupé" -msgstr "220d Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_220d_xdrive -msgid "220d xDrive" -msgstr "220d xDrive" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_220d_xdrive_coupe_product_template -msgid "220d xDrive Coupé" -msgstr "220d xDrive Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_220i -msgid "220i" -msgstr "220i" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_220i_coupe_product_template -msgid "220i Coupé" -msgstr "220i Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_225d -msgid "225d" -msgstr "225d" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_225d_coupe_product_template -msgid "225d Coupé" -msgstr "225d Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_228i -msgid "228i" -msgstr "228i" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_228i_coupe_product_template -msgid "228i Coupé" -msgstr "228i Coupé" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_kanban_view_inherited -msgid "" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__active -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value__active -msgid "Active" -msgstr "Aktivan" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"All attribute values used in attribute value lines must be defined in the " -"attribute lines of the template" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__val_custom -msgid "Allow custom value for this attribute?" -msgstr "Allow custom value for this attribute?" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_template_attribute_line__custom -msgid "Allow custom values for this attribute?" -msgstr "Allow custom values for this attribute?" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__multi -#: model:ir.model.fields,help:product_configurator.field_product_template_attribute_line__multi -msgid "Allow selection of multiple values for this attribute?" -msgstr "Allow selection of multiple values for this attribute?" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__attr_line_val_ids -msgid "Allowed Attribute Values" -msgstr "Allowed Attribute Values" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "An error occurred while parsing value for attribute %s" -msgstr "An error occurred while parsing value for attribute %s" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "" -"Are you sure? This will remove your current configuration for this template!" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_armrest -#: model:product.template,name:product_configurator.product_2_series_armrest_product_template -msgid "Armrest" -msgstr "Armrest" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__binary -msgid "Attachment" -msgstr "Prilog" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__attachment_ids -msgid "Attachments" -msgstr "Prilozi" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__attribute_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__attribute_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__attribute_id -msgid "Attribute" -msgstr "Atribut" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_line_ids -msgid "Attribute Dependencies" -msgstr "Attribute Dependencies" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__attribute_line_id -msgid "Attribute Line" -msgstr "Stavka atributa" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__attribute_line_val_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__attribute_line_val_ids -msgid "Attribute Line Val" -msgstr "Attribute Line Val" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__attribute_line_ids -msgid "Attribute Lines" -msgstr "Attribute Lines" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_attribute_value -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__value_id -msgid "Attribute Value" -msgstr "Ime atributa" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__attribute_value_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__attribute_value_line_ids -msgid "Attribute Value Lines" -msgstr "Attribute Value Lines" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.variants_action -#: model:ir.ui.menu,name:product_configurator.menu_variants_action_configuration -msgid "Attribute Values" -msgstr "Vrijednosti značajki" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_value__weight_extra -msgid "Attribute Weight Extra" -msgstr "Attribute Weight Extra" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute_value__image -msgid "Attribute value image (Display on website for radio buttons)" -msgstr "Attribute value image (Display on website for radio buttons)" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.action_attributes_view -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__attribute_line_ids -#: model:ir.ui.menu,name:product_configurator.menu_attribute_action_configuration -msgid "Attributes" -msgstr "Atributi" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_steptronic -msgid "Automatic (Steptronic)" -msgstr "Automatic (Steptronic)" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_steptronic_sport -msgid "Automatic Sport (Steptronic)" -msgstr "Automatic Sport (Steptronic)" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_2_series_transmission_steptronic_product_template -msgid "Automatic Transmission Steptronic" -msgstr "Automatic Transmission Steptronic" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "Back" -msgstr "Natrag" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_black -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tapistry_black -msgid "Black" -msgstr "Crna" - -#. module: product_configurator -#: model:product.config.step,name:product_configurator.config_step_body -msgid "Body" -msgstr "Tijelo poruke" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute_value__active -msgid "" -"By unchecking the active field you can disable a attribute value without " -"deleting it" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__active -msgid "" -"By unchecking the active field you can disable a attribute without deleting " -"it" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_ok -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_ok -msgid "Can be Configured" -msgstr "Can be Configured" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "Cannot have a configuration step defined twice." -msgstr "Cannot have a configuration step defined twice." - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/wizard/product_configurator.py:0 -#, python-format -msgid "" -"Changing the product template while having an active configuration will " -"erase reset/clear all values" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__char -msgid "Char" -msgstr "Znak" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__color -msgid "Color" -msgstr "Boja" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__condition -msgid "Condition" -msgstr "Uslov" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configurable" -msgstr "Configurable" - -#. module: product_configurator -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_product_main -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_search_view -msgid "Configurable Products" -msgstr "Configurable Proizvods" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Configurable Products cannot have duplicates (identical attribute values)" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_tmpl_id -msgid "Configurable Template" -msgstr "Configurable Template" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_configurable_template_action -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_template_action -msgid "Configurable Templates" -msgstr "Configurable Templates" - -#. module: product_configurator -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_variants_action -msgid "Configurable Variants" -msgstr "Configurable Variants" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__value_ids -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_settings -msgid "Configuration" -msgstr "Konfiguracija" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_image_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_image_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configuration Images" -msgstr "Configuration Images" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_step_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_step_line_ids -msgid "Configuration Lines" -msgstr "Configuration Lines" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_name -msgid "Configuration Name" -msgstr "Configuration Name" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_config_domain_action -#: model:ir.ui.menu,name:product_configurator.menu_product_config_domain_action -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view_template -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configuration Restrictions" -msgstr "Configuration Restrictions" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_session_id -msgid "Configuration Session" -msgstr "Configuration Session" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__name -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__name -msgid "Configuration Session Number" -msgstr "Configuration Session Number" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_config_session -#: model:ir.ui.menu,name:product_configurator.menu_product_config_session -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_session_form_view -msgid "Configuration Sessions" -msgstr "Configuration Sessions" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__config_step_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__config_step_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_step_name -#: model_terms:ir.ui.view,arch_db:product_configurator.config_step_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.config_step_tree_view -msgid "Configuration Step" -msgstr "Configuration Step" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__config_step -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_step -msgid "Configuration Step ID" -msgstr "Configuration Step ID" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_config_steps_action -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_step_ids -#: model:ir.ui.menu,name:product_configurator.menu_product_config_steps_action -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configuration Steps" -msgstr "Configuration Steps" - -#. module: product_configurator -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configurator" -msgstr "Configurator" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configure Product" -msgstr "Configure Proizvod" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_configurable_variant_action -msgid "Configured Variants" -msgstr "Configured Variants" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tapistry_coral_red_black -msgid "Coral Red/Black" -msgstr "Coral Red/Black" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_3 -msgid "Coupé Black" -msgstr "Coupé Black" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_9 -msgid "Coupé Black Rims 384" -msgstr "Coupé Black Rims 384" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_10 -msgid "Coupé Black Rims 387" -msgstr "Coupé Black Rims 387" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_1 -msgid "Coupé Red" -msgstr "Coupé Red" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_5 -msgid "Coupé Red Rims 384" -msgstr "Coupé Red Rims 384" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_6 -msgid "Coupé Red Rims 387" -msgstr "Coupé Red Rims 387" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_2 -msgid "Coupé Silver" -msgstr "Coupé Silver" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_7 -msgid "Coupé Silver Rims 384" -msgstr "Coupé Silver Rims 384" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_8 -msgid "Coupé Silver Rims 387" -msgstr "Coupé Silver Rims 387" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__create_uid -msgid "Created by" -msgstr "Kreirao" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__create_date -msgid "Created on" -msgstr "Kreirano" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__currency_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__currency_id -msgid "Currency" -msgstr "Valuta" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__custom -#: model:product.attribute,name:product_configurator.custom_attribute -#: model:product.attribute.value,name:product_configurator.custom_attribute_value -msgid "Custom" -msgstr "Prilagođeno" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__val_custom -msgid "Custom Value" -msgstr "Prilagođena vrijednost" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__custom_value_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__custom_value_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_session_form_view -msgid "Custom Values" -msgstr "Podesive vrijednosti" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_config_session_custom_value__value -msgid "Custom value held as string" -msgstr "Custom value held as string" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__date -msgid "Date" -msgstr "Datum" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__datetime -msgid "DateTime" -msgstr "DatumVrijeme" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__default_val -msgid "Default Val" -msgstr "Default Val" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"Default values for each attribute line must exist in the attribute values " -"(%(attr_name)s: %(default_val)s)" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "Default values provided generate an invalid configuration" -msgstr "Default values provided generate an invalid configuration" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__description -msgid "Description" -msgstr "Opis" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__required -msgid "" -"Determines the required value of this attribute though it can be change on " -"the template level" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_diesel -msgid "Diesel" -msgstr "Dizel" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__display_name -msgid "Display Name" -msgstr "Prikazani naziv" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_domain_line -msgid "Domain Line for Config Restrictions" -msgstr "Domain Line for Config Restrictions" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_domain -msgid "Domain for Config Restrictions" -msgstr "Domain for Config Restrictions" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_config_session__state__done -msgid "Done" -msgstr "Gotovo" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_rims_384 -msgid "Double-spoke 18\"" -msgstr "Double-spoke 18\"" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_config_session__state__draft -msgid "Draft" -msgstr "U pripremi" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_engine -#: model:product.config.step,name:product_configurator.config_step_engine -msgid "Engine" -msgstr "Motor" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "Error while calculating mako product name: %s" -msgstr "Error while calculating mako proizvod name: %s" - -#. module: product_configurator -#: model:product.config.step,name:product_configurator.config_step_extras -msgid "Extras" -msgstr "Extras" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__custom_type -msgid "Field Type" -msgstr "Tip polja" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "Finished configuration session must have a product_id linked" -msgstr "Finished configuration session must have a proizvod_id linked" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__float -msgid "Float" -msgstr "Decimalni" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Following Attribute/Value from restriction are not present in template " -"attributes/values. Please make sure you are adding right restriction" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_config_line__attr_line_val_ids -msgid "" -"For normal attributes the values configured for the product can be selected.\n" -"For custom attributes the 'Custom' value can also be selected." -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_fuel -msgid "Fuel" -msgstr "Gorivo" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_gasoline -msgid "Gasoline" -msgstr "Benzin" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_product__mako_tmpl_name -#: model:ir.model.fields,help:product_configurator.field_product_template__mako_tmpl_name -msgid "Generate Name based on Mako Template" -msgstr "Generate Name based on Mako Template" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__id -msgid "ID" -msgstr "ID" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__image -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value__image -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_1920 -msgid "Image" -msgstr "Slika" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_1024 -msgid "Image 1024" -msgstr "Slika 1024" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_128 -msgid "Image 128" -msgstr "Slika 128" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_256 -msgid "Image 256" -msgstr "Slika 256" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_512 -msgid "Image 512" -msgstr "Slika 512" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__implied_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view_template -msgid "Inherited" -msgstr "Nasljeđeno" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__integer -msgid "Integer" -msgstr "Cijeli broj" - -#. module: product_configurator -#: model:product.config.step,name:product_configurator.config_step_interior -msgid "Interior" -msgstr "Interior" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_preset_ok -msgid "Is Preset" -msgstr "Is Preset" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_template_attribute_line__required -msgid "Is this attribute required?" -msgstr "Is this attribute required?" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator____last_update -msgid "Last Modified on" -msgstr "Zadnje mijenjano" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__write_uid -msgid "Last Updated by" -msgstr "Zadnji ažurirao" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__write_date -msgid "Last Updated on" -msgstr "Zadnje ažurirano" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_model_line -#: model:product.config.step,name:product_configurator.config_step_lines -msgid "Lines" -msgstr "Stavke" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_luxury_line -#: model:product.template,name:product_configurator.product_bmw_luxury_line_product_template -msgid "Luxury Line" -msgstr "Luxury Line" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_m235i -msgid "M235i" -msgstr "M235i" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_m235i_coupe_product_template -msgid "M235i Coupé" -msgstr "M235i Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_m235i_xdrive -msgid "M235i xDrive" -msgstr "M235i xDrive" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_m2351_xdrive_coupe_product_template -msgid "M235i xDrive Coupe" -msgstr "M235i xDrive Coupe" - -#. module: product_configurator -#: model:res.groups,name:product_configurator.group_product_configurator_manager -msgid "Manager" -msgstr "Upravitelj" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__weight_dummy -#: model:ir.model.fields,field_description:product_configurator.field_product_template__weight_dummy -msgid "Manual Weight" -msgstr "Manual Weight" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_template__weight_dummy -msgid "Manual setting of product template weight" -msgstr "Manual setting of proizvod template weight" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__max_val -msgid "Max Value" -msgstr "Max Value" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__max_val -msgid "Maximum value allowed" -msgstr "Maximum value allowed" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Maximum value must be greater than Minimum value" -msgstr "Maximum value must be greater than Minimum value" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__min_val -msgid "Min Value" -msgstr "Min Value" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__min_val -msgid "Minimum value allowed" -msgstr "Minimum value allowed" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_advantage -#: model:product.template,name:product_configurator.product_bmw_model_advantage_product_template -msgid "Model Advantage" -msgstr "Model Advantage" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_luxury_line -#: model:product.template,name:product_configurator.product_bmw_model_luxury_line_product_template -msgid "Model Luxury Line" -msgstr "Model Luxury Line" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_m_sport -#: model:product.template,name:product_configurator.product_bmw_model_m_sport_product_template -msgid "Model M Sport" -msgstr "Model M Sport" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_sport_line -#: model:product.template,name:product_configurator.product_bmw_model_sport_line_product_template -msgid "Model Sport Line" -msgstr "Model Sport Line" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__multi -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__multi -msgid "Multi" -msgstr "Multi" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__name -msgid "Name" -msgstr "Naziv:" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "Next" -msgstr "Sljedeći" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"On the product %(product)s you cannot associate the value %(value)s with the" -" attribute %(attr)s because they do not match." -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__operator -msgid "Operators" -msgstr "Operatori" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_options -msgid "Options" -msgstr "Opcije" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tapistry_oyster_black -msgid "Oyster/Black" -msgstr "Oyster/Black" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_color -msgid "Paint Color" -msgstr "Paint Color" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__product_preset_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_preset_id -msgid "Preset" -msgstr "Preset" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__price -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__price -msgid "Price" -msgstr "Cijena" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_template -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value__product_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__product_id -msgid "Product" -msgstr "Artikal" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_attribute -msgid "Product Attribute" -msgstr "Atribut artikla" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_attribute_value_line -msgid "Product Attribute Value Line" -msgstr "Proizvod Attribute Value Line" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_value_form_view -msgid "Product Attribute Values" -msgstr "Vrijednosti atributa artikla" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_image -msgid "Product Config Image" -msgstr "Proizvod Config Image" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_line -msgid "Product Config Restrictions" -msgstr "Proizvod Config Restrictions" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_session -msgid "Product Config Session" -msgstr "Proizvod Config Session" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_session_custom_value -msgid "Product Config Session Custom Value" -msgstr "Proizvod Config Session Custom Value" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_step_line -msgid "Product Config Step Lines" -msgstr "Proizvod Config Step Lines" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_step -msgid "Product Config Steps" -msgstr "Proizvod Config Steps" - -#. module: product_configurator -#: model:ir.module.category,name:product_configurator.product_config_category -#: model_terms:ir.ui.view,arch_db:product_configurator.configurator_settings_view_form -msgid "Product Configurator" -msgstr "Konfigurator artikala" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_img -msgid "Product Img" -msgstr "Proizvod Img" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__product_tmpl_id -msgid "Product Template" -msgstr "Predložak artikla" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_template_attribute_line -msgid "Product Template Attribute Line" -msgstr "Predloška artikla stavka atributa" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_template_attribute_value -msgid "Product Template Attribute Value" -msgstr "Vrijednost atributa predloška proizvoda" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/wizard/product_configurator.py:0 -#, python-format -msgid "Product Template does not have any attribute lines defined" -msgstr "Proizvod Template does not have any attribute lines defined" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__product_value_ids -msgid "Product Value" -msgstr "Proizvod Value" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_product -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_id -msgid "Product Variant" -msgstr "Varijanta proizvoda" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_configurator -msgid "Product configuration Wizard" -msgstr "Proizvod configuration Wizard" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_form_view_custom_vals_inherit -msgid "Reconfigure Product" -msgstr "Reconfigure Proizvod" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_red -msgid "Red" -msgstr "Crveno" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__required -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__required -msgid "Required" -msgstr "Zahtijevano" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "Reset" -msgstr "Poništi" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__domain_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__domain_id -msgid "Restrictions" -msgstr "Restrictions" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Restrictions added make the current default values generate an invalid configuration. \n" -"%s" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_rims -msgid "Rims" -msgstr "Rims" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__domain_id -msgid "Rule" -msgstr "Pravilo" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view_template -msgid "Rules" -msgstr "Pravila" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__search_ok -msgid "Searchable" -msgstr "Searchable" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Selected custom field type '%s' is not searchable" -msgstr "Selected custom field type '%s' is not searchable" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Selected custom value '%(name)s' must be at least %(min_val)s" -msgstr "Selected custom value '%(name)s' must be at least %(min_val)s" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"Selected custom value '%(name)s' must be between %(min_val)s and %(max_val)s" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Selected custom value '%(name)s' must be lower than %(max_value)s" -msgstr "Selected custom value '%(name)s' must be lower than %(max_value)s" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__sequence -msgid "Sequence" -msgstr "Sekvenca" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__cfg_session_id -msgid "Session" -msgstr "Sesija" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_configurator__product_id -msgid "Set only when re-configuring a existing variant" -msgstr "Set only when re-configuring a existing variant" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_config_domain_line__sequence -msgid "Set the order of operations for evaluation domain lines" -msgstr "Set the order of operations for evaluation domain lines" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.action_product_configurator_configuration -#: model:ir.ui.menu,name:product_configurator.menu_action_product_configurator_configuration -msgid "Settings" -msgstr "Postavke" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_silver -msgid "Silver" -msgstr "Srebrni" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_paint_silver_product_template -msgid "Silver Paint" -msgstr "Silver Paint" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_smoker_package -#: model:product.template,name:product_configurator.product_2_series_smoker_package_product_template -msgid "Smoker Package" -msgstr "Smoker Package" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Sorry, you are not allowed to create/change this kind of document. For more " -"information please contact your manager." -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_2_series_transmission_steptronic_sport_product_template -msgid "Sport Automatic Transmission Steptronic" -msgstr "Sport Automatic Transmission Steptronic" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_sport_line -#: model:product.template,name:product_configurator.product_bmw_sport_line_product_template -msgid "Sport Line" -msgstr "Sport Line" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_search_view -msgid "Standard Products" -msgstr "Standard Proizvods" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__state -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__state -msgid "State" -msgstr "Status" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_sunroof -#: model:product.template,name:product_configurator.product_2_series_sunroof_product_template -msgid "Sunroof" -msgstr "Sunroof" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_tapistry -msgid "Tapistry" -msgstr "Tapistry" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__template_attribute_value_ids -msgid "Template Attribute Values" -msgstr "Template Attribute Values" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__template_attribute_ids -msgid "Template Attributes" -msgstr "Template Attributes" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__text -msgid "Textarea" -msgstr "Textarea" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"The attribute %(attr)s must have at least one value for the product " -"%(product)s." -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute_value_line__attribute_id -msgid "" -"The attribute cannot be changed once the value is used on at least one " -"product." -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__custom_type -msgid "The type of the custom field generated in the frontend" -msgstr "The type of the custom field generated in the frontend" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/wizard/product_configurator.py:0 -#, python-format -msgid "There was a problem rendering the view (dynamic_form not found)" -msgstr "There was a problem rendering the view (dynamic_form not found)" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "" -"To reset/change the Preset Please close and start the configuration again" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tow_hook -msgid "Tow hook" -msgstr "Tow hook" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_2_series_towhook_product_template -msgid "Towhook" -msgstr "Towhook" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__trans_implied_ids -msgid "Transitively inherits" -msgstr "Prelazno nasljeđuje" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_transmission -msgid "Transmission" -msgstr "Prenos" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__uom_id -msgid "Unit of Measure" -msgstr "Jedinica mjere" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__user_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__user_id -#: model:res.groups,name:product_configurator.group_product_configurator -msgid "User" -msgstr "Korisnik" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_rims_378 -msgid "V-spoke 16\"" -msgstr "V-spoke 16\"" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_rims_387 -msgid "V-spoke 18\"" -msgstr "V-spoke 18\"" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__value_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__value -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__value_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_value_form_view -msgid "Value" -msgstr "Vrijednost" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__value_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__value_ids -msgid "Values" -msgstr "Vrijednosti" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__value_ids -msgid "Values Configuration" -msgstr "Values Configuration" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "Values entered for line '%s' generate a incompatible configuration" -msgstr "Values entered for line '%s' generate a incompatible configuration" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "" -"Values must belong to the attribute of the corresponding attribute_line set " -"on the configuration line" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"Values provided to the attribute value line are incompatible with the " -"current rules" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Variant Name" -msgstr "Variant Name" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__mako_tmpl_name -#: model:ir.model.fields,field_description:product_configurator.field_product_template__mako_tmpl_name -msgid "Variant name" -msgstr "Variant name" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_ir_ui_view -msgid "View" -msgstr "Pregled" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__weight -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__weight -#: model:ir.model.fields,field_description:product_configurator.field_product_product__weight -#: model:ir.model.fields,field_description:product_configurator.field_product_template__weight -msgid "Weight" -msgstr "Težina" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__weight_extra -msgid "Weight Extra" -msgstr "Weight Extra" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__search_ok -msgid "" -"When checking for variants with the same configuration, do we include this " -"field in the search?" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "You cannot have a duplicate configuration for the same value" -msgstr "You cannot have a duplicate configuration for the same value" diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/i18n/es.po b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/i18n/es.po deleted file mode 100644 index ef5d4eec..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/i18n/es.po +++ /dev/null @@ -1,1451 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * product_configurator -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" -"Language: es\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"\n" -"Attribute/s: %s" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"\n" -"Restriction: %s" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"\n" -"Value/s: %s\n" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.bmw_2_series -msgid "2 Series" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_218d -msgid "218d" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_218d_coupe_product_template -msgid "218d Coupé" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_218i -msgid "218i" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_218i_coupe_product_template -msgid "218i Coupé" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_220d -msgid "220d" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_220d_coupe_product_template -msgid "220d Coupé" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_220d_xdrive -msgid "220d xDrive" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_220d_xdrive_coupe_product_template -msgid "220d xDrive Coupé" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_220i -msgid "220i" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_220i_coupe_product_template -msgid "220i Coupé" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_225d -msgid "225d" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_225d_coupe_product_template -msgid "225d Coupé" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_228i -msgid "228i" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_228i_coupe_product_template -msgid "228i Coupé" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_kanban_view_inherited -msgid "" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__active -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value__active -msgid "Active" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"All attribute values used in attribute value lines must be defined in the " -"attribute lines of the template" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__val_custom -msgid "Allow custom value for this attribute?" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_template_attribute_line__custom -msgid "Allow custom values for this attribute?" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__multi -#: model:ir.model.fields,help:product_configurator.field_product_template_attribute_line__multi -msgid "Allow selection of multiple values for this attribute?" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__attr_line_val_ids -msgid "Allowed Attribute Values" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "An error occurred while parsing value for attribute %s" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "" -"Are you sure? This will remove your current configuration for this template!" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_armrest -#: model:product.template,name:product_configurator.product_2_series_armrest_product_template -msgid "Armrest" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__binary -msgid "Attachment" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__attachment_ids -msgid "Attachments" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__attribute_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__attribute_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__attribute_id -msgid "Attribute" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_line_ids -msgid "Attribute Dependencies" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__attribute_line_id -msgid "Attribute Line" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__attribute_line_val_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__attribute_line_val_ids -msgid "Attribute Line Val" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__attribute_line_ids -msgid "Attribute Lines" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_attribute_value -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__value_id -msgid "Attribute Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__attribute_value_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__attribute_value_line_ids -msgid "Attribute Value Lines" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.variants_action -#: model:ir.ui.menu,name:product_configurator.menu_variants_action_configuration -msgid "Attribute Values" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_value__weight_extra -msgid "Attribute Weight Extra" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute_value__image -msgid "Attribute value image (Display on website for radio buttons)" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.action_attributes_view -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__attribute_line_ids -#: model:ir.ui.menu,name:product_configurator.menu_attribute_action_configuration -msgid "Attributes" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_steptronic -msgid "Automatic (Steptronic)" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_steptronic_sport -msgid "Automatic Sport (Steptronic)" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_2_series_transmission_steptronic_product_template -msgid "Automatic Transmission Steptronic" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "Back" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_black -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tapistry_black -msgid "Black" -msgstr "" - -#. module: product_configurator -#: model:product.config.step,name:product_configurator.config_step_body -msgid "Body" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute_value__active -msgid "" -"By unchecking the active field you can disable a attribute value without " -"deleting it" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__active -msgid "" -"By unchecking the active field you can disable a attribute without deleting " -"it" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_ok -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_ok -msgid "Can be Configured" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "Cannot have a configuration step defined twice." -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/wizard/product_configurator.py:0 -#, python-format -msgid "" -"Changing the product template while having an active configuration will " -"erase reset/clear all values" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__char -msgid "Char" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__color -msgid "Color" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__condition -msgid "Condition" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configurable" -msgstr "" - -#. module: product_configurator -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_product_main -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_search_view -msgid "Configurable Products" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Configurable Products cannot have duplicates (identical attribute values)" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_tmpl_id -msgid "Configurable Template" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_configurable_template_action -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_template_action -msgid "Configurable Templates" -msgstr "" - -#. module: product_configurator -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_variants_action -msgid "Configurable Variants" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__value_ids -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_settings -msgid "Configuration" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_image_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_image_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configuration Images" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_step_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_step_line_ids -msgid "Configuration Lines" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_name -msgid "Configuration Name" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_config_domain_action -#: model:ir.ui.menu,name:product_configurator.menu_product_config_domain_action -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view_template -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configuration Restrictions" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_session_id -msgid "Configuration Session" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__name -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__name -msgid "Configuration Session Number" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_config_session -#: model:ir.ui.menu,name:product_configurator.menu_product_config_session -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_session_form_view -msgid "Configuration Sessions" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__config_step_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__config_step_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_step_name -#: model_terms:ir.ui.view,arch_db:product_configurator.config_step_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.config_step_tree_view -msgid "Configuration Step" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__config_step -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_step -msgid "Configuration Step ID" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_config_steps_action -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_step_ids -#: model:ir.ui.menu,name:product_configurator.menu_product_config_steps_action -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configuration Steps" -msgstr "" - -#. module: product_configurator -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configurator" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configure Product" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_configurable_variant_action -msgid "Configured Variants" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tapistry_coral_red_black -msgid "Coral Red/Black" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_3 -msgid "Coupé Black" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_9 -msgid "Coupé Black Rims 384" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_10 -msgid "Coupé Black Rims 387" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_1 -msgid "Coupé Red" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_5 -msgid "Coupé Red Rims 384" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_6 -msgid "Coupé Red Rims 387" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_2 -msgid "Coupé Silver" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_7 -msgid "Coupé Silver Rims 384" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_8 -msgid "Coupé Silver Rims 387" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__create_uid -msgid "Created by" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__create_date -msgid "Created on" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__currency_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__currency_id -msgid "Currency" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__custom -#: model:product.attribute,name:product_configurator.custom_attribute -#: model:product.attribute.value,name:product_configurator.custom_attribute_value -msgid "Custom" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__val_custom -msgid "Custom Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__custom_value_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__custom_value_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_session_form_view -msgid "Custom Values" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_config_session_custom_value__value -msgid "Custom value held as string" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__date -msgid "Date" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__datetime -msgid "DateTime" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__default_val -msgid "Default Val" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"Default values for each attribute line must exist in the attribute values " -"(%(attr_name)s: %(default_val)s)" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "Default values provided generate an invalid configuration" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__description -msgid "Description" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__required -msgid "" -"Determines the required value of this attribute though it can be change on " -"the template level" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_diesel -msgid "Diesel" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__display_name -msgid "Display Name" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_domain_line -msgid "Domain Line for Config Restrictions" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_domain -msgid "Domain for Config Restrictions" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_config_session__state__done -msgid "Done" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_rims_384 -msgid "Double-spoke 18\"" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_config_session__state__draft -msgid "Draft" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_engine -#: model:product.config.step,name:product_configurator.config_step_engine -msgid "Engine" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "Error while calculating mako product name: %s" -msgstr "" - -#. module: product_configurator -#: model:product.config.step,name:product_configurator.config_step_extras -msgid "Extras" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__custom_type -msgid "Field Type" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "Finished configuration session must have a product_id linked" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__float -msgid "Float" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Following Attribute/Value from restriction are not present in template " -"attributes/values. Please make sure you are adding right restriction" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_config_line__attr_line_val_ids -msgid "" -"For normal attributes the values configured for the product can be selected.\n" -"For custom attributes the 'Custom' value can also be selected." -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_fuel -msgid "Fuel" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_gasoline -msgid "Gasoline" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_product__mako_tmpl_name -#: model:ir.model.fields,help:product_configurator.field_product_template__mako_tmpl_name -msgid "Generate Name based on Mako Template" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__id -msgid "ID" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__image -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value__image -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_1920 -msgid "Image" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_1024 -msgid "Image 1024" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_128 -msgid "Image 128" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_256 -msgid "Image 256" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_512 -msgid "Image 512" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__implied_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view_template -msgid "Inherited" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__integer -msgid "Integer" -msgstr "" - -#. module: product_configurator -#: model:product.config.step,name:product_configurator.config_step_interior -msgid "Interior" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_preset_ok -msgid "Is Preset" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_template_attribute_line__required -msgid "Is this attribute required?" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator____last_update -msgid "Last Modified on" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__write_uid -msgid "Last Updated by" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__write_date -msgid "Last Updated on" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_model_line -#: model:product.config.step,name:product_configurator.config_step_lines -msgid "Lines" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_luxury_line -#: model:product.template,name:product_configurator.product_bmw_luxury_line_product_template -msgid "Luxury Line" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_m235i -msgid "M235i" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_m235i_coupe_product_template -msgid "M235i Coupé" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_m235i_xdrive -msgid "M235i xDrive" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_m2351_xdrive_coupe_product_template -msgid "M235i xDrive Coupe" -msgstr "" - -#. module: product_configurator -#: model:res.groups,name:product_configurator.group_product_configurator_manager -msgid "Manager" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__weight_dummy -#: model:ir.model.fields,field_description:product_configurator.field_product_template__weight_dummy -msgid "Manual Weight" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_template__weight_dummy -msgid "Manual setting of product template weight" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__max_val -msgid "Max Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__max_val -msgid "Maximum value allowed" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Maximum value must be greater than Minimum value" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__min_val -msgid "Min Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__min_val -msgid "Minimum value allowed" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_advantage -#: model:product.template,name:product_configurator.product_bmw_model_advantage_product_template -msgid "Model Advantage" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_luxury_line -#: model:product.template,name:product_configurator.product_bmw_model_luxury_line_product_template -msgid "Model Luxury Line" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_m_sport -#: model:product.template,name:product_configurator.product_bmw_model_m_sport_product_template -msgid "Model M Sport" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_sport_line -#: model:product.template,name:product_configurator.product_bmw_model_sport_line_product_template -msgid "Model Sport Line" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__multi -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__multi -msgid "Multi" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__name -msgid "Name" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "Next" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"On the product %(product)s you cannot associate the value %(value)s with the" -" attribute %(attr)s because they do not match." -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__operator -msgid "Operators" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_options -msgid "Options" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tapistry_oyster_black -msgid "Oyster/Black" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_color -msgid "Paint Color" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__product_preset_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_preset_id -msgid "Preset" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__price -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__price -msgid "Price" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_template -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value__product_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__product_id -msgid "Product" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_attribute -msgid "Product Attribute" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_attribute_value_line -msgid "Product Attribute Value Line" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_value_form_view -msgid "Product Attribute Values" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_image -msgid "Product Config Image" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_line -msgid "Product Config Restrictions" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_session -msgid "Product Config Session" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_session_custom_value -msgid "Product Config Session Custom Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_step_line -msgid "Product Config Step Lines" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_step -msgid "Product Config Steps" -msgstr "" - -#. module: product_configurator -#: model:ir.module.category,name:product_configurator.product_config_category -#: model_terms:ir.ui.view,arch_db:product_configurator.configurator_settings_view_form -msgid "Product Configurator" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_img -msgid "Product Img" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__product_tmpl_id -msgid "Product Template" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_template_attribute_line -msgid "Product Template Attribute Line" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_template_attribute_value -msgid "Product Template Attribute Value" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/wizard/product_configurator.py:0 -#, python-format -msgid "Product Template does not have any attribute lines defined" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__product_value_ids -msgid "Product Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_product -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_id -msgid "Product Variant" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_configurator -msgid "Product configuration Wizard" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_form_view_custom_vals_inherit -msgid "Reconfigure Product" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_red -msgid "Red" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__required -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__required -msgid "Required" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "Reset" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__domain_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__domain_id -msgid "Restrictions" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Restrictions added make the current default values generate an invalid configuration. \n" -"%s" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_rims -msgid "Rims" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__domain_id -msgid "Rule" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view_template -msgid "Rules" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__search_ok -msgid "Searchable" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Selected custom field type '%s' is not searchable" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Selected custom value '%(name)s' must be at least %(min_val)s" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"Selected custom value '%(name)s' must be between %(min_val)s and %(max_val)s" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Selected custom value '%(name)s' must be lower than %(max_value)s" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__sequence -msgid "Sequence" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__cfg_session_id -msgid "Session" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_configurator__product_id -msgid "Set only when re-configuring a existing variant" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_config_domain_line__sequence -msgid "Set the order of operations for evaluation domain lines" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.action_product_configurator_configuration -#: model:ir.ui.menu,name:product_configurator.menu_action_product_configurator_configuration -msgid "Settings" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_silver -msgid "Silver" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_paint_silver_product_template -msgid "Silver Paint" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_smoker_package -#: model:product.template,name:product_configurator.product_2_series_smoker_package_product_template -msgid "Smoker Package" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Sorry, you are not allowed to create/change this kind of document. For more " -"information please contact your manager." -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_2_series_transmission_steptronic_sport_product_template -msgid "Sport Automatic Transmission Steptronic" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_sport_line -#: model:product.template,name:product_configurator.product_bmw_sport_line_product_template -msgid "Sport Line" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_search_view -msgid "Standard Products" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__state -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__state -msgid "State" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_sunroof -#: model:product.template,name:product_configurator.product_2_series_sunroof_product_template -msgid "Sunroof" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_tapistry -msgid "Tapistry" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__template_attribute_value_ids -msgid "Template Attribute Values" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__template_attribute_ids -msgid "Template Attributes" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__text -msgid "Textarea" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"The attribute %(attr)s must have at least one value for the product " -"%(product)s." -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute_value_line__attribute_id -msgid "" -"The attribute cannot be changed once the value is used on at least one " -"product." -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__custom_type -msgid "The type of the custom field generated in the frontend" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/wizard/product_configurator.py:0 -#, python-format -msgid "There was a problem rendering the view (dynamic_form not found)" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "" -"To reset/change the Preset Please close and start the configuration again" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tow_hook -msgid "Tow hook" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_2_series_towhook_product_template -msgid "Towhook" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__trans_implied_ids -msgid "Transitively inherits" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_transmission -msgid "Transmission" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__uom_id -msgid "Unit of Measure" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__user_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__user_id -#: model:res.groups,name:product_configurator.group_product_configurator -msgid "User" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_rims_378 -msgid "V-spoke 16\"" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_rims_387 -msgid "V-spoke 18\"" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__value_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__value -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__value_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_value_form_view -msgid "Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__value_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__value_ids -msgid "Values" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__value_ids -msgid "Values Configuration" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "Values entered for line '%s' generate a incompatible configuration" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "" -"Values must belong to the attribute of the corresponding attribute_line set " -"on the configuration line" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"Values provided to the attribute value line are incompatible with the " -"current rules" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Variant Name" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__mako_tmpl_name -#: model:ir.model.fields,field_description:product_configurator.field_product_template__mako_tmpl_name -msgid "Variant name" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_ir_ui_view -msgid "View" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__weight -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__weight -#: model:ir.model.fields,field_description:product_configurator.field_product_product__weight -#: model:ir.model.fields,field_description:product_configurator.field_product_template__weight -msgid "Weight" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__weight_extra -msgid "Weight Extra" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__search_ok -msgid "" -"When checking for variants with the same configuration, do we include this " -"field in the search?" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "You cannot have a duplicate configuration for the same value" -msgstr "" diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/i18n/it.po b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/i18n/it.po deleted file mode 100644 index 6292f6e2..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/i18n/it.po +++ /dev/null @@ -1,1565 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * product_configurator -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2025-06-21 13:27+0000\n" -"Last-Translator: mymage \n" -"Language-Team: none\n" -"Language: it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.4\n" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"\n" -"Attribute/s: %s" -msgstr "" -"\n" -"Attributo/i: %s" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"\n" -"Restriction: %s" -msgstr "" -"\n" -"Limitazione: %s" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"\n" -"Value/s: %s\n" -msgstr "" -"\n" -"Valore/i: %s\n" - -#. module: product_configurator -#: model:product.template,name:product_configurator.bmw_2_series -msgid "2 Series" -msgstr "2 serie" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_218d -msgid "218d" -msgstr "218d" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_218d_coupe_product_template -msgid "218d Coupé" -msgstr "218d Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_218i -msgid "218i" -msgstr "218i" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_218i_coupe_product_template -msgid "218i Coupé" -msgstr "218i Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_220d -msgid "220d" -msgstr "220d" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_220d_coupe_product_template -msgid "220d Coupé" -msgstr "220d Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_220d_xdrive -msgid "220d xDrive" -msgstr "220d xDrive" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_220d_xdrive_coupe_product_template -msgid "220d xDrive Coupé" -msgstr "220d xDrive Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_220i -msgid "220i" -msgstr "220i" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_220i_coupe_product_template -msgid "220i Coupé" -msgstr "220i Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_225d -msgid "225d" -msgstr "225d" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_225d_coupe_product_template -msgid "225d Coupé" -msgstr "225d Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_228i -msgid "228i" -msgstr "228i" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_228i_coupe_product_template -msgid "228i Coupé" -msgstr "228i Coupé" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_kanban_view_inherited -msgid "" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__active -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value__active -msgid "Active" -msgstr "Attivo" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"All attribute values used in attribute value lines must be defined in the " -"attribute lines of the template" -msgstr "" -"Tutti i valori attributo utilizzati nelle righe valore attributo nelle righe " -"attributo del modello" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__val_custom -msgid "Allow custom value for this attribute?" -msgstr "Consentire valore personalizzato per questo attributo?" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_template_attribute_line__custom -msgid "Allow custom values for this attribute?" -msgstr "Consentire valori personalizzati per questo attributo?" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__multi -#: model:ir.model.fields,help:product_configurator.field_product_template_attribute_line__multi -msgid "Allow selection of multiple values for this attribute?" -msgstr "Consentire selezione di valori multipli per questo attributo?" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__attr_line_val_ids -msgid "Allowed Attribute Values" -msgstr "Valori attributo consentiti" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "An error occurred while parsing value for attribute %s" -msgstr "Si è verificato un errore nell'analisi del valore per l'attributo %s" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "" -"Are you sure? This will remove your current configuration for this template!" -msgstr "" -"Si è sicuri? Questo rimuoverà la configurazione attuale per questo modello!" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_armrest -#: model:product.template,name:product_configurator.product_2_series_armrest_product_template -msgid "Armrest" -msgstr "Bracciolo" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__binary -msgid "Attachment" -msgstr "Allegato" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__attachment_ids -msgid "Attachments" -msgstr "Allegati" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__attribute_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__attribute_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__attribute_id -msgid "Attribute" -msgstr "Attributo" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_line_ids -msgid "Attribute Dependencies" -msgstr "Dipendenze attributo" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__attribute_line_id -msgid "Attribute Line" -msgstr "Riga attributo" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__attribute_line_val_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__attribute_line_val_ids -msgid "Attribute Line Val" -msgstr "Valore riga attributo" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__attribute_line_ids -msgid "Attribute Lines" -msgstr "Righe attributo" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_attribute_value -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__value_id -msgid "Attribute Value" -msgstr "Valore attributo" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__attribute_value_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__attribute_value_line_ids -msgid "Attribute Value Lines" -msgstr "Righe valore attributo" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.variants_action -#: model:ir.ui.menu,name:product_configurator.menu_variants_action_configuration -msgid "Attribute Values" -msgstr "Valori attributo" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_value__weight_extra -msgid "Attribute Weight Extra" -msgstr "Extra peso attributo" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute_value__image -msgid "Attribute value image (Display on website for radio buttons)" -msgstr "" -"Immagine valore attributo (visualizzata nel sito web per selettore di tipo " -"radio)" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.action_attributes_view -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__attribute_line_ids -#: model:ir.ui.menu,name:product_configurator.menu_attribute_action_configuration -msgid "Attributes" -msgstr "Attributi" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_steptronic -msgid "Automatic (Steptronic)" -msgstr "Automatico (Steptronic)" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_steptronic_sport -msgid "Automatic Sport (Steptronic)" -msgstr "Automatico sport (Steptronic)" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_2_series_transmission_steptronic_product_template -msgid "Automatic Transmission Steptronic" -msgstr "Trasmissione automatica Steptronic" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "Back" -msgstr "Indietro" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_black -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tapistry_black -msgid "Black" -msgstr "Nero" - -#. module: product_configurator -#: model:product.config.step,name:product_configurator.config_step_body -msgid "Body" -msgstr "Corpo" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute_value__active -msgid "" -"By unchecking the active field you can disable a attribute value without " -"deleting it" -msgstr "" -"Deselezionando il campo attivo si può disabilitare il valore di un attributo " -"senza cancellarlo" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__active -msgid "" -"By unchecking the active field you can disable a attribute without deleting " -"it" -msgstr "" -"Deselezionando il campo attivo si può disabilitare un attributo senza " -"cancellarlo" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_ok -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_ok -msgid "Can be Configured" -msgstr "Può essere configurato" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "Cannot have a configuration step defined twice." -msgstr "Non si può avere un passo di configurazione definito due volte." - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/wizard/product_configurator.py:0 -#, python-format -msgid "" -"Changing the product template while having an active configuration will " -"erase reset/clear all values" -msgstr "" -"Modificare un modello prodotto con una configurazione attiva cancellerà il " -"ripristino/pulizia di tutti i valori" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__char -msgid "Char" -msgstr "Char" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__color -msgid "Color" -msgstr "Colore" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__condition -msgid "Condition" -msgstr "Condizione" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configurable" -msgstr "Configurabile" - -#. module: product_configurator -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_product_main -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_search_view -msgid "Configurable Products" -msgstr "Prodotti configurabili" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Configurable Products cannot have duplicates (identical attribute values)" -msgstr "" -"I prodotti configurabili non possono avere duplicati (valori attributi " -"identici)" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_tmpl_id -msgid "Configurable Template" -msgstr "Modello configurabile" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_configurable_template_action -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_template_action -msgid "Configurable Templates" -msgstr "Modelli configurabili" - -#. module: product_configurator -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_variants_action -msgid "Configurable Variants" -msgstr "Varianti configurabili" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__value_ids -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_settings -msgid "Configuration" -msgstr "Configurazione" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_image_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_image_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configuration Images" -msgstr "Immagini configurazione" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_step_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_step_line_ids -msgid "Configuration Lines" -msgstr "Righe configurazione" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_name -msgid "Configuration Name" -msgstr "Nome configurazione" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_config_domain_action -#: model:ir.ui.menu,name:product_configurator.menu_product_config_domain_action -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view_template -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configuration Restrictions" -msgstr "Restrizioni configurazione" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_session_id -msgid "Configuration Session" -msgstr "Sessione configurazione" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__name -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__name -msgid "Configuration Session Number" -msgstr "Numero sessione configurazione" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_config_session -#: model:ir.ui.menu,name:product_configurator.menu_product_config_session -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_session_form_view -msgid "Configuration Sessions" -msgstr "Sessioni configurazione" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__config_step_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__config_step_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_step_name -#: model_terms:ir.ui.view,arch_db:product_configurator.config_step_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.config_step_tree_view -msgid "Configuration Step" -msgstr "Passo configurazione" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__config_step -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_step -msgid "Configuration Step ID" -msgstr "ID passo configurazione" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_config_steps_action -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_step_ids -#: model:ir.ui.menu,name:product_configurator.menu_product_config_steps_action -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configuration Steps" -msgstr "Passi configurazione" - -#. module: product_configurator -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configurator" -msgstr "Configuratore" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configure Product" -msgstr "Configurazione prodotto" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_configurable_variant_action -msgid "Configured Variants" -msgstr "Varianti configurate" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tapistry_coral_red_black -msgid "Coral Red/Black" -msgstr "Corallo rosso/bianco" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_3 -msgid "Coupé Black" -msgstr "Coupé Black" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_9 -msgid "Coupé Black Rims 384" -msgstr "Coupé Black Rims 384" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_10 -msgid "Coupé Black Rims 387" -msgstr "Coupé Black Rims 387" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_1 -msgid "Coupé Red" -msgstr "Coupé Red" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_5 -msgid "Coupé Red Rims 384" -msgstr "Coupé Red Rims 384" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_6 -msgid "Coupé Red Rims 387" -msgstr "Coupé Red Rims 387" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_2 -msgid "Coupé Silver" -msgstr "Coupé Silver" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_7 -msgid "Coupé Silver Rims 384" -msgstr "Coupé Silver Rims 384" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_8 -msgid "Coupé Silver Rims 387" -msgstr "Coupé Silver Rims 387" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__create_uid -msgid "Created by" -msgstr "Creato da" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__create_date -msgid "Created on" -msgstr "Creato il" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__currency_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__currency_id -msgid "Currency" -msgstr "Valuta" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__custom -#: model:product.attribute,name:product_configurator.custom_attribute -#: model:product.attribute.value,name:product_configurator.custom_attribute_value -msgid "Custom" -msgstr "Personalizzato" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__val_custom -msgid "Custom Value" -msgstr "Valore personalizzato" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__custom_value_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__custom_value_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_session_form_view -msgid "Custom Values" -msgstr "Valori personalizzati" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_config_session_custom_value__value -msgid "Custom value held as string" -msgstr "Valore personalizzato gestito come stringa" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__date -msgid "Date" -msgstr "Data" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__datetime -msgid "DateTime" -msgstr "Datetime" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__default_val -msgid "Default Val" -msgstr "Valore predefinito" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"Default values for each attribute line must exist in the attribute values " -"(%(attr_name)s: %(default_val)s)" -msgstr "" -"I valori predefiniti per ogni riga attributo devono esistere nei valori " -"attributo (%(attr_name)s: %(default_val)s)" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "Default values provided generate an invalid configuration" -msgstr "I valori predefiniti forniti generano una configurazione non valida" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__description -msgid "Description" -msgstr "Descrizione" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__required -msgid "" -"Determines the required value of this attribute though it can be change on " -"the template level" -msgstr "" -"Determina il valore richiesto di questo attributo che può essere modificato " -"a livello modello" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_diesel -msgid "Diesel" -msgstr "Diesel" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__display_name -msgid "Display Name" -msgstr "Nome visualizzato" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_domain_line -msgid "Domain Line for Config Restrictions" -msgstr "Riga dominio per restrizioni configurazione" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_domain -msgid "Domain for Config Restrictions" -msgstr "Dominio per restrizioni configurazione" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_config_session__state__done -msgid "Done" -msgstr "Eseguita" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_rims_384 -msgid "Double-spoke 18\"" -msgstr "Double-spoke 18\"" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_config_session__state__draft -msgid "Draft" -msgstr "Bozza" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_engine -#: model:product.config.step,name:product_configurator.config_step_engine -msgid "Engine" -msgstr "Motore" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "Error while calculating mako product name: %s" -msgstr "Errore nel calcolo del nome modello Mako: %s" - -#. module: product_configurator -#: model:product.config.step,name:product_configurator.config_step_extras -msgid "Extras" -msgstr "Aggiuntivi" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__custom_type -msgid "Field Type" -msgstr "Tipo campo" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "Finished configuration session must have a product_id linked" -msgstr "" -"Una sessione configurazione completata deve avere un product_id collegato" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__float -msgid "Float" -msgstr "Float" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Following Attribute/Value from restriction are not present in template " -"attributes/values. Please make sure you are adding right restriction" -msgstr "" -"Il seguente attributo/valore della restrizione non è presente negli " -"attributi/valori del modello. Verificare di aggiungere le restrizioni " -"corrette" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_config_line__attr_line_val_ids -msgid "" -"For normal attributes the values configured for the product can be " -"selected.\n" -"For custom attributes the 'Custom' value can also be selected." -msgstr "" -"Per gli attributi normali possono essere selezionati i valori configurati.\n" -"Per i valori personalizzati deve essere selezionato il valore " -"'Personalizzato'." - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_fuel -msgid "Fuel" -msgstr "Carburante" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_gasoline -msgid "Gasoline" -msgstr "Benzina" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_product__mako_tmpl_name -#: model:ir.model.fields,help:product_configurator.field_product_template__mako_tmpl_name -msgid "Generate Name based on Mako Template" -msgstr "Nome generato in mase al modello Mako" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__id -msgid "ID" -msgstr "ID" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__image -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value__image -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_1920 -msgid "Image" -msgstr "Immagine" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_1024 -msgid "Image 1024" -msgstr "Immagine 1024" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_128 -msgid "Image 128" -msgstr "Immagine 128" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_256 -msgid "Image 256" -msgstr "Immagine 256" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_512 -msgid "Image 512" -msgstr "Immagine 512" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__implied_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view_template -msgid "Inherited" -msgstr "Ereditato" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__integer -msgid "Integer" -msgstr "Integer" - -#. module: product_configurator -#: model:product.config.step,name:product_configurator.config_step_interior -msgid "Interior" -msgstr "Interno" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_preset_ok -msgid "Is Preset" -msgstr "È preimpostato" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_template_attribute_line__required -msgid "Is this attribute required?" -msgstr "Questo attributo è richiesto?" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator____last_update -msgid "Last Modified on" -msgstr "Ultima modifica il" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__write_uid -msgid "Last Updated by" -msgstr "Ultimo aggiornamento di" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__write_date -msgid "Last Updated on" -msgstr "Ultimo aggiornamento il" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_model_line -#: model:product.config.step,name:product_configurator.config_step_lines -msgid "Lines" -msgstr "Righe" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_luxury_line -#: model:product.template,name:product_configurator.product_bmw_luxury_line_product_template -msgid "Luxury Line" -msgstr "Luxury Line" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_m235i -msgid "M235i" -msgstr "M235i" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_m235i_coupe_product_template -msgid "M235i Coupé" -msgstr "M235i Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_m235i_xdrive -msgid "M235i xDrive" -msgstr "M235i xDrive" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_m2351_xdrive_coupe_product_template -msgid "M235i xDrive Coupe" -msgstr "M235i xDrive Coupe" - -#. module: product_configurator -#: model:res.groups,name:product_configurator.group_product_configurator_manager -msgid "Manager" -msgstr "Supervisore" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__weight_dummy -#: model:ir.model.fields,field_description:product_configurator.field_product_template__weight_dummy -msgid "Manual Weight" -msgstr "Peso manuale" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_template__weight_dummy -msgid "Manual setting of product template weight" -msgstr "Impostazione manuale del peso modello prodotto" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__max_val -msgid "Max Value" -msgstr "Valore massimo" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__max_val -msgid "Maximum value allowed" -msgstr "Massimo valore consentito" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Maximum value must be greater than Minimum value" -msgstr "Il valore massimo deve essere superiore al valore minimo" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__min_val -msgid "Min Value" -msgstr "Valore minimo" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__min_val -msgid "Minimum value allowed" -msgstr "Minimo valore consentito" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_advantage -#: model:product.template,name:product_configurator.product_bmw_model_advantage_product_template -msgid "Model Advantage" -msgstr "Model Advantage" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_luxury_line -#: model:product.template,name:product_configurator.product_bmw_model_luxury_line_product_template -msgid "Model Luxury Line" -msgstr "Model Luxury Line" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_m_sport -#: model:product.template,name:product_configurator.product_bmw_model_m_sport_product_template -msgid "Model M Sport" -msgstr "Model M Sport" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_sport_line -#: model:product.template,name:product_configurator.product_bmw_model_sport_line_product_template -msgid "Model Sport Line" -msgstr "Model Sport Line" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__multi -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__multi -msgid "Multi" -msgstr "Multi" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__name -msgid "Name" -msgstr "Nome" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "Next" -msgstr "Successiva" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"On the product %(product)s you cannot associate the value %(value)s with the " -"attribute %(attr)s because they do not match." -msgstr "" -"Nel prodotto %(product)s non si può associare il valore %(value)s per " -"l'attributo %(attr)s perché non corrispondono." - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__operator -msgid "Operators" -msgstr "Operatori" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_options -msgid "Options" -msgstr "Opzioni" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tapistry_oyster_black -msgid "Oyster/Black" -msgstr "Oyster/Black" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_color -msgid "Paint Color" -msgstr "Colore vernice" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__product_preset_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_preset_id -msgid "Preset" -msgstr "Preimpostato" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__price -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__price -msgid "Price" -msgstr "Prezzo" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_template -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value__product_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__product_id -msgid "Product" -msgstr "Prodotto" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_attribute -msgid "Product Attribute" -msgstr "Attributo prodotto" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_attribute_value_line -msgid "Product Attribute Value Line" -msgstr "Riga valore attributo prodotto" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_value_form_view -msgid "Product Attribute Values" -msgstr "Valori attributo prodotto" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_image -msgid "Product Config Image" -msgstr "Immagine configurazione prodotto" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_line -msgid "Product Config Restrictions" -msgstr "Restrizioni configurazione prodotto" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_session -msgid "Product Config Session" -msgstr "Sessione configurazione prodotto" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_session_custom_value -msgid "Product Config Session Custom Value" -msgstr "Valore predefinito sessione configurazione prodotto" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_step_line -msgid "Product Config Step Lines" -msgstr "Righe passo configurazione prodotto" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_step -msgid "Product Config Steps" -msgstr "Passi configurazione prodotto" - -#. module: product_configurator -#: model:ir.module.category,name:product_configurator.product_config_category -#: model_terms:ir.ui.view,arch_db:product_configurator.configurator_settings_view_form -msgid "Product Configurator" -msgstr "Configuratore prodotto" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_img -msgid "Product Img" -msgstr "Immagine prodotto" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__product_tmpl_id -msgid "Product Template" -msgstr "Modello prodotto" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_template_attribute_line -msgid "Product Template Attribute Line" -msgstr "Riga attributo modello prodotto" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_template_attribute_value -msgid "Product Template Attribute Value" -msgstr "Valore attributo modello prodotto" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/wizard/product_configurator.py:0 -#, python-format -msgid "Product Template does not have any attribute lines defined" -msgstr "Il modello prodotto non ha nessuna riga attributo definita" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__product_value_ids -msgid "Product Value" -msgstr "Valore prodotto" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_product -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_id -msgid "Product Variant" -msgstr "Variante prodotto" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_configurator -msgid "Product configuration Wizard" -msgstr "Procedura guidata configurazione prodotto" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_form_view_custom_vals_inherit -msgid "Reconfigure Product" -msgstr "Riconfigura prodotto" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_red -msgid "Red" -msgstr "Rossa" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__required -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__required -msgid "Required" -msgstr "Richiesto" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "Reset" -msgstr "Resetta" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__domain_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__domain_id -msgid "Restrictions" -msgstr "Restrizioni" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Restrictions added make the current default values generate an invalid " -"configuration. \n" -"%s" -msgstr "" -"Le restrizioni aggiunte rendono i valori attuali predefiniti una " -"configurazione non valida. \n" -"%s" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_rims -msgid "Rims" -msgstr "Cerchioni" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__domain_id -msgid "Rule" -msgstr "Regola" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view_template -msgid "Rules" -msgstr "Regole" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__search_ok -msgid "Searchable" -msgstr "Ricercabile" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Selected custom field type '%s' is not searchable" -msgstr "Il tipo campo personalizzato selezionato '%s' non è ricercabile" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Selected custom value '%(name)s' must be at least %(min_val)s" -msgstr "" -"Il valore personalizzato selezionato '%(name)s' deve essere almeno " -"%(min_val)s" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"Selected custom value '%(name)s' must be between %(min_val)s and %(max_val)s" -msgstr "" -"Il calore personalizzato selezionato '%(name)s' deve essere tra %(min_val)s " -"e %(max_val)s" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Selected custom value '%(name)s' must be lower than %(max_value)s" -msgstr "" -"Il valore personalizzato selezionato '%(name)s' deve essere inferiore a " -"%(max_value)s" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__sequence -msgid "Sequence" -msgstr "Sequenza" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__cfg_session_id -msgid "Session" -msgstr "Sessione" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_configurator__product_id -msgid "Set only when re-configuring a existing variant" -msgstr "Impostare solo quando si riconfigura una variante esistente" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_config_domain_line__sequence -msgid "Set the order of operations for evaluation domain lines" -msgstr "" -"Imposta l'ordine delle operazioni per la valutazione delle righe dominio" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.action_product_configurator_configuration -#: model:ir.ui.menu,name:product_configurator.menu_action_product_configurator_configuration -msgid "Settings" -msgstr "Impostazioni" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_silver -msgid "Silver" -msgstr "Argento" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_paint_silver_product_template -msgid "Silver Paint" -msgstr "Vernice argento" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_smoker_package -#: model:product.template,name:product_configurator.product_2_series_smoker_package_product_template -msgid "Smoker Package" -msgstr "Pacchetto fumatore" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Sorry, you are not allowed to create/change this kind of document. For more " -"information please contact your manager." -msgstr "" -"Spiacenti, non si è autorizzati a creare/modificare questo tipo di " -"documento. Per ulteriori informazioni contattare il responsabile." - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_2_series_transmission_steptronic_sport_product_template -msgid "Sport Automatic Transmission Steptronic" -msgstr "Sport Automatic Transmission Steptronic" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_sport_line -#: model:product.template,name:product_configurator.product_bmw_sport_line_product_template -msgid "Sport Line" -msgstr "Sport Line" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_search_view -msgid "Standard Products" -msgstr "Prodotti standard" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__state -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__state -msgid "State" -msgstr "Stato" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_sunroof -#: model:product.template,name:product_configurator.product_2_series_sunroof_product_template -msgid "Sunroof" -msgstr "Tettuccio apribile" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_tapistry -msgid "Tapistry" -msgstr "Tappezzeria" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__template_attribute_value_ids -msgid "Template Attribute Values" -msgstr "Valori atributo modello" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__template_attribute_ids -msgid "Template Attributes" -msgstr "Attributi modello" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__text -msgid "Textarea" -msgstr "Textarea" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"The attribute %(attr)s must have at least one value for the product " -"%(product)s." -msgstr "" -"L'attributo %(attr)s deve avere almeno un valore per il prodotto %(product)s." - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute_value_line__attribute_id -msgid "" -"The attribute cannot be changed once the value is used on at least one " -"product." -msgstr "" -"L'attributo non può essere modificato una volta che è utilizzato almeno in " -"un prodotto." - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__custom_type -msgid "The type of the custom field generated in the frontend" -msgstr "Tipo del campo personalizzato generato nel frontend" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/wizard/product_configurator.py:0 -#, python-format -msgid "There was a problem rendering the view (dynamic_form not found)" -msgstr "" -"Si è verificato un problema nella visualizzazione della vista (dynamic_form " -"non trovato)" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "" -"To reset/change the Preset Please close and start the configuration again" -msgstr "" -"Per resettare/modificare i valori preimpostati, chiudere e riaprire la " -"configurazione" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tow_hook -msgid "Tow hook" -msgstr "Gancio di traino" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_2_series_towhook_product_template -msgid "Towhook" -msgstr "Gancio di traino" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__trans_implied_ids -msgid "Transitively inherits" -msgstr "Eredita transitivamente" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_transmission -msgid "Transmission" -msgstr "Trasmissione" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__uom_id -msgid "Unit of Measure" -msgstr "Unità di misura" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__user_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__user_id -#: model:res.groups,name:product_configurator.group_product_configurator -msgid "User" -msgstr "Utente" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_rims_378 -msgid "V-spoke 16\"" -msgstr "V-spoke 16\"" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_rims_387 -msgid "V-spoke 18\"" -msgstr "V-spoke 18\"" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__value_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__value -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__value_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_value_form_view -msgid "Value" -msgstr "Valore" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__value_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__value_ids -msgid "Values" -msgstr "Valori" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__value_ids -msgid "Values Configuration" -msgstr "Configurazione valori" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "Values entered for line '%s' generate a incompatible configuration" -msgstr "" -"I valori inseriti per la riga '%s' generano una configurazione non " -"compatibile" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "" -"Values must belong to the attribute of the corresponding attribute_line set " -"on the configuration line" -msgstr "" -"I valori devono appartenere all'attributo del corrispondente attribute_line " -"nella riga di configurazione" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"Values provided to the attribute value line are incompatible with the " -"current rules" -msgstr "" -"I valori forniti alla riga valore attributo sono incompatibili con le regole " -"attuali" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Variant Name" -msgstr "Nome variante" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__mako_tmpl_name -#: model:ir.model.fields,field_description:product_configurator.field_product_template__mako_tmpl_name -msgid "Variant name" -msgstr "Nome variante" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_ir_ui_view -msgid "View" -msgstr "Vista" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__weight -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__weight -#: model:ir.model.fields,field_description:product_configurator.field_product_product__weight -#: model:ir.model.fields,field_description:product_configurator.field_product_template__weight -msgid "Weight" -msgstr "Peso" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__weight_extra -msgid "Weight Extra" -msgstr "Peso aggiuntivo" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__search_ok -msgid "" -"When checking for variants with the same configuration, do we include this " -"field in the search?" -msgstr "" -"Quando si cercano varianti con la stessa confiugrazione, si include anche " -"questo campo nella ricerca?" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "You cannot have a duplicate configuration for the same value" -msgstr "Non si può avere una configurazione duplicata per lo stesso valore" - -#, python-format -#~ msgid "" -#~ "Attribute custom type is binary, attachments are the only accepted values " -#~ "with this custom field type" -#~ msgstr "" -#~ "Il tipo attributo personalizzato è binario, sono consentiti solo allegati " -#~ "con questo tipo di campo personalizzato" - -#, python-format -#~ msgid "" -#~ "Attribute custom type must be 'binary' for saving attachments to custom " -#~ "value" -#~ msgstr "" -#~ "Il tipo attributo personalizzato deve essere 'binary' per salvare " -#~ "allegati nel valore personalizzato" - -#, python-format -#~ msgid "" -#~ "Cannot conduct search on an empty config session without product_tmpl_id " -#~ "kwarg" -#~ msgstr "" -#~ "Non si può eseguire una ricerca in una sessione con configurazione vuota " -#~ "senza kwarg product_tmpl_id" - -#, python-format -#~ msgid "Configuration cannot have the same value inserted twice" -#~ msgstr "La configurazione non può avere lo stesso valore inserito due volte" - -#, python-format -#~ msgid "Invalid Configuration" -#~ msgstr "Configurazione non valida" - -#, python-format -#~ msgid "New" -#~ msgstr "Nuova" - -#, python-format -#~ msgid "Product created via configuration wizard" -#~ msgstr "Prodotto creato attraverso la procedura guidata configurazione" - -#, python-format -#~ msgid "Required attribute '%s' is empty" -#~ msgstr "L'attributo richiesto '%s' è vuoto" - -#, python-format -#~ msgid "" -#~ "You must select at least one attribute in order to configure a product" -#~ msgstr "Bisogna selezionare almeno un attributo per confiugrare un prodotto" - -#~ msgid "Attribute Line Values" -#~ msgstr "Valori riga attributo" diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/i18n/product_configurator.pot b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/i18n/product_configurator.pot deleted file mode 100644 index 9d19e07c..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/i18n/product_configurator.pot +++ /dev/null @@ -1,1450 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * product_configurator -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"\n" -"Attribute/s: %s" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"\n" -"Restriction: %s" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"\n" -"Value/s: %s\n" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.bmw_2_series -msgid "2 Series" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_218d -msgid "218d" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_218d_coupe_product_template -msgid "218d Coupé" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_218i -msgid "218i" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_218i_coupe_product_template -msgid "218i Coupé" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_220d -msgid "220d" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_220d_coupe_product_template -msgid "220d Coupé" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_220d_xdrive -msgid "220d xDrive" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_220d_xdrive_coupe_product_template -msgid "220d xDrive Coupé" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_220i -msgid "220i" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_220i_coupe_product_template -msgid "220i Coupé" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_225d -msgid "225d" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_225d_coupe_product_template -msgid "225d Coupé" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_228i -msgid "228i" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_228i_coupe_product_template -msgid "228i Coupé" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_kanban_view_inherited -msgid "" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__active -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value__active -msgid "Active" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"All attribute values used in attribute value lines must be defined in the " -"attribute lines of the template" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__val_custom -msgid "Allow custom value for this attribute?" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_template_attribute_line__custom -msgid "Allow custom values for this attribute?" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__multi -#: model:ir.model.fields,help:product_configurator.field_product_template_attribute_line__multi -msgid "Allow selection of multiple values for this attribute?" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__attr_line_val_ids -msgid "Allowed Attribute Values" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "An error occurred while parsing value for attribute %s" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "" -"Are you sure? This will remove your current configuration for this template!" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_armrest -#: model:product.template,name:product_configurator.product_2_series_armrest_product_template -msgid "Armrest" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__binary -msgid "Attachment" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__attachment_ids -msgid "Attachments" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__attribute_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__attribute_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__attribute_id -msgid "Attribute" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_line_ids -msgid "Attribute Dependencies" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__attribute_line_id -msgid "Attribute Line" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__attribute_line_val_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__attribute_line_val_ids -msgid "Attribute Line Val" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__attribute_line_ids -msgid "Attribute Lines" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_attribute_value -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__value_id -msgid "Attribute Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__attribute_value_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__attribute_value_line_ids -msgid "Attribute Value Lines" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.variants_action -#: model:ir.ui.menu,name:product_configurator.menu_variants_action_configuration -msgid "Attribute Values" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_value__weight_extra -msgid "Attribute Weight Extra" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute_value__image -msgid "Attribute value image (Display on website for radio buttons)" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.action_attributes_view -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__attribute_line_ids -#: model:ir.ui.menu,name:product_configurator.menu_attribute_action_configuration -msgid "Attributes" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_steptronic -msgid "Automatic (Steptronic)" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_steptronic_sport -msgid "Automatic Sport (Steptronic)" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_2_series_transmission_steptronic_product_template -msgid "Automatic Transmission Steptronic" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "Back" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_black -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tapistry_black -msgid "Black" -msgstr "" - -#. module: product_configurator -#: model:product.config.step,name:product_configurator.config_step_body -msgid "Body" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute_value__active -msgid "" -"By unchecking the active field you can disable a attribute value without " -"deleting it" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__active -msgid "" -"By unchecking the active field you can disable a attribute without deleting " -"it" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_ok -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_ok -msgid "Can be Configured" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "Cannot have a configuration step defined twice." -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/wizard/product_configurator.py:0 -#, python-format -msgid "" -"Changing the product template while having an active configuration will " -"erase reset/clear all values" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__char -msgid "Char" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__color -msgid "Color" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__condition -msgid "Condition" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configurable" -msgstr "" - -#. module: product_configurator -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_product_main -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_search_view -msgid "Configurable Products" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Configurable Products cannot have duplicates (identical attribute values)" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_tmpl_id -msgid "Configurable Template" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_configurable_template_action -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_template_action -msgid "Configurable Templates" -msgstr "" - -#. module: product_configurator -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_variants_action -msgid "Configurable Variants" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__value_ids -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_settings -msgid "Configuration" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_image_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_image_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configuration Images" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_step_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_step_line_ids -msgid "Configuration Lines" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_name -msgid "Configuration Name" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_config_domain_action -#: model:ir.ui.menu,name:product_configurator.menu_product_config_domain_action -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view_template -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configuration Restrictions" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_session_id -msgid "Configuration Session" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__name -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__name -msgid "Configuration Session Number" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_config_session -#: model:ir.ui.menu,name:product_configurator.menu_product_config_session -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_session_form_view -msgid "Configuration Sessions" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__config_step_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__config_step_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_step_name -#: model_terms:ir.ui.view,arch_db:product_configurator.config_step_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.config_step_tree_view -msgid "Configuration Step" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__config_step -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_step -msgid "Configuration Step ID" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_config_steps_action -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_step_ids -#: model:ir.ui.menu,name:product_configurator.menu_product_config_steps_action -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configuration Steps" -msgstr "" - -#. module: product_configurator -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configurator" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configure Product" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_configurable_variant_action -msgid "Configured Variants" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tapistry_coral_red_black -msgid "Coral Red/Black" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_3 -msgid "Coupé Black" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_9 -msgid "Coupé Black Rims 384" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_10 -msgid "Coupé Black Rims 387" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_1 -msgid "Coupé Red" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_5 -msgid "Coupé Red Rims 384" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_6 -msgid "Coupé Red Rims 387" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_2 -msgid "Coupé Silver" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_7 -msgid "Coupé Silver Rims 384" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_8 -msgid "Coupé Silver Rims 387" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__create_uid -msgid "Created by" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__create_date -msgid "Created on" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__currency_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__currency_id -msgid "Currency" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__custom -#: model:product.attribute,name:product_configurator.custom_attribute -#: model:product.attribute.value,name:product_configurator.custom_attribute_value -msgid "Custom" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__val_custom -msgid "Custom Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__custom_value_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__custom_value_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_session_form_view -msgid "Custom Values" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_config_session_custom_value__value -msgid "Custom value held as string" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__date -msgid "Date" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__datetime -msgid "DateTime" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__default_val -msgid "Default Val" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"Default values for each attribute line must exist in the attribute values " -"(%(attr_name)s: %(default_val)s)" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "Default values provided generate an invalid configuration" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__description -msgid "Description" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__required -msgid "" -"Determines the required value of this attribute though it can be change on " -"the template level" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_diesel -msgid "Diesel" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__display_name -msgid "Display Name" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_domain_line -msgid "Domain Line for Config Restrictions" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_domain -msgid "Domain for Config Restrictions" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_config_session__state__done -msgid "Done" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_rims_384 -msgid "Double-spoke 18\"" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_config_session__state__draft -msgid "Draft" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_engine -#: model:product.config.step,name:product_configurator.config_step_engine -msgid "Engine" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "Error while calculating mako product name: %s" -msgstr "" - -#. module: product_configurator -#: model:product.config.step,name:product_configurator.config_step_extras -msgid "Extras" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__custom_type -msgid "Field Type" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "Finished configuration session must have a product_id linked" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__float -msgid "Float" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Following Attribute/Value from restriction are not present in template " -"attributes/values. Please make sure you are adding right restriction" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_config_line__attr_line_val_ids -msgid "" -"For normal attributes the values configured for the product can be selected.\n" -"For custom attributes the 'Custom' value can also be selected." -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_fuel -msgid "Fuel" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_gasoline -msgid "Gasoline" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_product__mako_tmpl_name -#: model:ir.model.fields,help:product_configurator.field_product_template__mako_tmpl_name -msgid "Generate Name based on Mako Template" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__id -msgid "ID" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__image -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value__image -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_1920 -msgid "Image" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_1024 -msgid "Image 1024" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_128 -msgid "Image 128" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_256 -msgid "Image 256" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_512 -msgid "Image 512" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__implied_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view_template -msgid "Inherited" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__integer -msgid "Integer" -msgstr "" - -#. module: product_configurator -#: model:product.config.step,name:product_configurator.config_step_interior -msgid "Interior" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_preset_ok -msgid "Is Preset" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_template_attribute_line__required -msgid "Is this attribute required?" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator____last_update -msgid "Last Modified on" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__write_uid -msgid "Last Updated by" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__write_date -msgid "Last Updated on" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_model_line -#: model:product.config.step,name:product_configurator.config_step_lines -msgid "Lines" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_luxury_line -#: model:product.template,name:product_configurator.product_bmw_luxury_line_product_template -msgid "Luxury Line" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_m235i -msgid "M235i" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_m235i_coupe_product_template -msgid "M235i Coupé" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_m235i_xdrive -msgid "M235i xDrive" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_m2351_xdrive_coupe_product_template -msgid "M235i xDrive Coupe" -msgstr "" - -#. module: product_configurator -#: model:res.groups,name:product_configurator.group_product_configurator_manager -msgid "Manager" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__weight_dummy -#: model:ir.model.fields,field_description:product_configurator.field_product_template__weight_dummy -msgid "Manual Weight" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_template__weight_dummy -msgid "Manual setting of product template weight" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__max_val -msgid "Max Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__max_val -msgid "Maximum value allowed" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Maximum value must be greater than Minimum value" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__min_val -msgid "Min Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__min_val -msgid "Minimum value allowed" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_advantage -#: model:product.template,name:product_configurator.product_bmw_model_advantage_product_template -msgid "Model Advantage" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_luxury_line -#: model:product.template,name:product_configurator.product_bmw_model_luxury_line_product_template -msgid "Model Luxury Line" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_m_sport -#: model:product.template,name:product_configurator.product_bmw_model_m_sport_product_template -msgid "Model M Sport" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_sport_line -#: model:product.template,name:product_configurator.product_bmw_model_sport_line_product_template -msgid "Model Sport Line" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__multi -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__multi -msgid "Multi" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__name -msgid "Name" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "Next" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"On the product %(product)s you cannot associate the value %(value)s with the" -" attribute %(attr)s because they do not match." -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__operator -msgid "Operators" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_options -msgid "Options" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tapistry_oyster_black -msgid "Oyster/Black" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_color -msgid "Paint Color" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__product_preset_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_preset_id -msgid "Preset" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__price -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__price -msgid "Price" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_template -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value__product_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__product_id -msgid "Product" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_attribute -msgid "Product Attribute" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_attribute_value_line -msgid "Product Attribute Value Line" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_value_form_view -msgid "Product Attribute Values" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_image -msgid "Product Config Image" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_line -msgid "Product Config Restrictions" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_session -msgid "Product Config Session" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_session_custom_value -msgid "Product Config Session Custom Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_step_line -msgid "Product Config Step Lines" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_step -msgid "Product Config Steps" -msgstr "" - -#. module: product_configurator -#: model:ir.module.category,name:product_configurator.product_config_category -#: model_terms:ir.ui.view,arch_db:product_configurator.configurator_settings_view_form -msgid "Product Configurator" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_img -msgid "Product Img" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__product_tmpl_id -msgid "Product Template" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_template_attribute_line -msgid "Product Template Attribute Line" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_template_attribute_value -msgid "Product Template Attribute Value" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/wizard/product_configurator.py:0 -#, python-format -msgid "Product Template does not have any attribute lines defined" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__product_value_ids -msgid "Product Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_product -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_id -msgid "Product Variant" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_configurator -msgid "Product configuration Wizard" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_form_view_custom_vals_inherit -msgid "Reconfigure Product" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_red -msgid "Red" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__required -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__required -msgid "Required" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "Reset" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__domain_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__domain_id -msgid "Restrictions" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Restrictions added make the current default values generate an invalid configuration. \n" -"%s" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_rims -msgid "Rims" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__domain_id -msgid "Rule" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view_template -msgid "Rules" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__search_ok -msgid "Searchable" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Selected custom field type '%s' is not searchable" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Selected custom value '%(name)s' must be at least %(min_val)s" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"Selected custom value '%(name)s' must be between %(min_val)s and %(max_val)s" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Selected custom value '%(name)s' must be lower than %(max_value)s" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__sequence -msgid "Sequence" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__cfg_session_id -msgid "Session" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_configurator__product_id -msgid "Set only when re-configuring a existing variant" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_config_domain_line__sequence -msgid "Set the order of operations for evaluation domain lines" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.action_product_configurator_configuration -#: model:ir.ui.menu,name:product_configurator.menu_action_product_configurator_configuration -msgid "Settings" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_silver -msgid "Silver" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_paint_silver_product_template -msgid "Silver Paint" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_smoker_package -#: model:product.template,name:product_configurator.product_2_series_smoker_package_product_template -msgid "Smoker Package" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Sorry, you are not allowed to create/change this kind of document. For more " -"information please contact your manager." -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_2_series_transmission_steptronic_sport_product_template -msgid "Sport Automatic Transmission Steptronic" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_sport_line -#: model:product.template,name:product_configurator.product_bmw_sport_line_product_template -msgid "Sport Line" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_search_view -msgid "Standard Products" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__state -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__state -msgid "State" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_sunroof -#: model:product.template,name:product_configurator.product_2_series_sunroof_product_template -msgid "Sunroof" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_tapistry -msgid "Tapistry" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__template_attribute_value_ids -msgid "Template Attribute Values" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__template_attribute_ids -msgid "Template Attributes" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__text -msgid "Textarea" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"The attribute %(attr)s must have at least one value for the product " -"%(product)s." -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute_value_line__attribute_id -msgid "" -"The attribute cannot be changed once the value is used on at least one " -"product." -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__custom_type -msgid "The type of the custom field generated in the frontend" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/wizard/product_configurator.py:0 -#, python-format -msgid "There was a problem rendering the view (dynamic_form not found)" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "" -"To reset/change the Preset Please close and start the configuration again" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tow_hook -msgid "Tow hook" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_2_series_towhook_product_template -msgid "Towhook" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__trans_implied_ids -msgid "Transitively inherits" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_transmission -msgid "Transmission" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__uom_id -msgid "Unit of Measure" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__user_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__user_id -#: model:res.groups,name:product_configurator.group_product_configurator -msgid "User" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_rims_378 -msgid "V-spoke 16\"" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_rims_387 -msgid "V-spoke 18\"" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__value_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__value -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__value_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_value_form_view -msgid "Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__value_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__value_ids -msgid "Values" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__value_ids -msgid "Values Configuration" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "Values entered for line '%s' generate a incompatible configuration" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "" -"Values must belong to the attribute of the corresponding attribute_line set " -"on the configuration line" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"Values provided to the attribute value line are incompatible with the " -"current rules" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Variant Name" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__mako_tmpl_name -#: model:ir.model.fields,field_description:product_configurator.field_product_template__mako_tmpl_name -msgid "Variant name" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_ir_ui_view -msgid "View" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__weight -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__weight -#: model:ir.model.fields,field_description:product_configurator.field_product_product__weight -#: model:ir.model.fields,field_description:product_configurator.field_product_template__weight -msgid "Weight" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__weight_extra -msgid "Weight Extra" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__search_ok -msgid "" -"When checking for variants with the same configuration, do we include this " -"field in the search?" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "You cannot have a duplicate configuration for the same value" -msgstr "" diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/i18n/pt.po b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/i18n/pt.po deleted file mode 100644 index c4572b8f..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/i18n/pt.po +++ /dev/null @@ -1,1552 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * product_configurator -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-09-15 18:02+0000\n" -"Last-Translator: Peter Romão \n" -"Language-Team: none\n" -"Language: pt\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.6.2\n" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"\n" -"Attribute/s: %s" -msgstr "" -"\n" -"Atributo(s): %s" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"\n" -"Restriction: %s" -msgstr "" -"\n" -"Restrição: %s" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"\n" -"Value/s: %s\n" -msgstr "" -"\n" -"Valor(es): %s\n" - -#. module: product_configurator -#: model:product.template,name:product_configurator.bmw_2_series -msgid "2 Series" -msgstr "2 Series" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_218d -msgid "218d" -msgstr "218d" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_218d_coupe_product_template -msgid "218d Coupé" -msgstr "218d Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_218i -msgid "218i" -msgstr "218i" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_218i_coupe_product_template -msgid "218i Coupé" -msgstr "218i Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_220d -msgid "220d" -msgstr "220d" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_220d_coupe_product_template -msgid "220d Coupé" -msgstr "220d Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_220d_xdrive -msgid "220d xDrive" -msgstr "220d xDrive" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_220d_xdrive_coupe_product_template -msgid "220d xDrive Coupé" -msgstr "220d xDrive Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_220i -msgid "220i" -msgstr "220i" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_220i_coupe_product_template -msgid "220i Coupé" -msgstr "220i Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_225d -msgid "225d" -msgstr "225d" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_225d_coupe_product_template -msgid "225d Coupé" -msgstr "225d Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_228i -msgid "228i" -msgstr "228i" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_228i_coupe_product_template -msgid "228i Coupé" -msgstr "228i Coupé" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_kanban_view_inherited -msgid "" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__active -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value__active -msgid "Active" -msgstr "Activo" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"All attribute values used in attribute value lines must be defined in the " -"attribute lines of the template" -msgstr "" -"Todos os valores de atributo usados nas linhas de valor de atributo devem " -"ser definidos nas linhas de atributo do modelo" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__val_custom -msgid "Allow custom value for this attribute?" -msgstr "Permitir valor personalizado para este atributo?" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_template_attribute_line__custom -msgid "Allow custom values for this attribute?" -msgstr "Permitir valores personalizados para este atributo?" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__multi -#: model:ir.model.fields,help:product_configurator.field_product_template_attribute_line__multi -msgid "Allow selection of multiple values for this attribute?" -msgstr "Permitir a seleção de vários valores para este atributo?" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__attr_line_val_ids -msgid "Allowed Attribute Values" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "An error occurred while parsing value for attribute %s" -msgstr "Ocorreu um erro ao analisar o valor do atributo %s" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "" -"Are you sure? This will remove your current configuration for this template!" -msgstr "" -"Tem a certeza? Isto irá remover a sua configuração atual para este modelo!" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_armrest -#: model:product.template,name:product_configurator.product_2_series_armrest_product_template -msgid "Armrest" -msgstr "Descanso de Braço" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__binary -msgid "Attachment" -msgstr "Anexo" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__attachment_ids -msgid "Attachments" -msgstr "Anexos" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__attribute_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__attribute_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__attribute_id -msgid "Attribute" -msgstr "Atributo" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_line_ids -msgid "Attribute Dependencies" -msgstr "Dependências de Atributo" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__attribute_line_id -msgid "Attribute Line" -msgstr "Linha de Atributo" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__attribute_line_val_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__attribute_line_val_ids -msgid "Attribute Line Val" -msgstr "Valor da Linha de Atributo" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__attribute_line_ids -msgid "Attribute Lines" -msgstr "Linhas de Atributo" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_attribute_value -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__value_id -msgid "Attribute Value" -msgstr "Valor do atributo" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__attribute_value_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__attribute_value_line_ids -msgid "Attribute Value Lines" -msgstr "Linhas de Valor de Atributo" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.variants_action -#: model:ir.ui.menu,name:product_configurator.menu_variants_action_configuration -msgid "Attribute Values" -msgstr "Valores de Atributo" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_value__weight_extra -msgid "Attribute Weight Extra" -msgstr "Atributo Peso Extra" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute_value__image -msgid "Attribute value image (Display on website for radio buttons)" -msgstr "Imagem do valor do atributo (Exibir no website para botões de opção)" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.action_attributes_view -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__attribute_line_ids -#: model:ir.ui.menu,name:product_configurator.menu_attribute_action_configuration -msgid "Attributes" -msgstr "Atributos" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_steptronic -msgid "Automatic (Steptronic)" -msgstr "Automatic (Steptronic)" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_steptronic_sport -msgid "Automatic Sport (Steptronic)" -msgstr "Automatic Sport (Steptronic)" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_2_series_transmission_steptronic_product_template -msgid "Automatic Transmission Steptronic" -msgstr "Transmissão Automática Steptronic" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "Back" -msgstr "Anterior" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_black -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tapistry_black -msgid "Black" -msgstr "Preto" - -#. module: product_configurator -#: model:product.config.step,name:product_configurator.config_step_body -msgid "Body" -msgstr "Corpo" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute_value__active -msgid "" -"By unchecking the active field you can disable a attribute value without " -"deleting it" -msgstr "" -"Ao desmarcar o campo ativo, pode desativar um valor de atributo sem o " -"eliminar" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__active -msgid "" -"By unchecking the active field you can disable a attribute without deleting " -"it" -msgstr "Ao desmarcar o campo ativo, pode desativar um atributo sem o eliminar" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_ok -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_ok -msgid "Can be Configured" -msgstr "Pode ser Configurado" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "Cannot have a configuration step defined twice." -msgstr "Não pode ter uma etapa de configuração definida duas vezes." - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/wizard/product_configurator.py:0 -#, python-format -msgid "" -"Changing the product template while having an active configuration will " -"erase reset/clear all values" -msgstr "" -"Alterar o modelo do artigo enquanto tiver uma configuração ativa apagará " -"redefinirá/limpará todos os valores" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__char -msgid "Char" -msgstr "Char" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__color -msgid "Color" -msgstr "Cor" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__condition -msgid "Condition" -msgstr "Condição" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configurable" -msgstr "Configurável" - -#. module: product_configurator -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_product_main -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_search_view -msgid "Configurable Products" -msgstr "Artigos Configuráveis" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Configurable Products cannot have duplicates (identical attribute values)" -msgstr "" -"Artigos configuráveis não podem ter duplicados (valores de atributo " -"idênticos)" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_tmpl_id -msgid "Configurable Template" -msgstr "Modelo Configurável" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_configurable_template_action -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_template_action -msgid "Configurable Templates" -msgstr "Modelos Configuráveis" - -#. module: product_configurator -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_variants_action -msgid "Configurable Variants" -msgstr "Variantes Configuráveis" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__value_ids -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_settings -msgid "Configuration" -msgstr "Configuração" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_image_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_image_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configuration Images" -msgstr "Imagens de Configuração" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_step_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_step_line_ids -msgid "Configuration Lines" -msgstr "Linhas de Configuração" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_name -msgid "Configuration Name" -msgstr "Nome da Configuração" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_config_domain_action -#: model:ir.ui.menu,name:product_configurator.menu_product_config_domain_action -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view_template -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configuration Restrictions" -msgstr "Restrições de Configuração" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_session_id -msgid "Configuration Session" -msgstr "Sessão de Configuração" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__name -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__name -msgid "Configuration Session Number" -msgstr "Número da Sessão de Configuração" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_config_session -#: model:ir.ui.menu,name:product_configurator.menu_product_config_session -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_session_form_view -msgid "Configuration Sessions" -msgstr "Sessões de Configuração" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__config_step_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__config_step_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_step_name -#: model_terms:ir.ui.view,arch_db:product_configurator.config_step_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.config_step_tree_view -msgid "Configuration Step" -msgstr "Etapa de Configuração" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__config_step -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_step -msgid "Configuration Step ID" -msgstr "ID da Etapa de Configuração" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_config_steps_action -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_step_ids -#: model:ir.ui.menu,name:product_configurator.menu_product_config_steps_action -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configuration Steps" -msgstr "Etapas de Configuração" - -#. module: product_configurator -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configurator" -msgstr "Configurador" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configure Product" -msgstr "Configurar Artigo" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_configurable_variant_action -msgid "Configured Variants" -msgstr "Variantes Configuradas" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tapistry_coral_red_black -msgid "Coral Red/Black" -msgstr "Vermelho Coral/Preto" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_3 -msgid "Coupé Black" -msgstr "Coupé Black" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_9 -msgid "Coupé Black Rims 384" -msgstr "Coupé Black Rims 384" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_10 -msgid "Coupé Black Rims 387" -msgstr "Coupé Black Rims 387" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_1 -msgid "Coupé Red" -msgstr "Coupé Red" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_5 -msgid "Coupé Red Rims 384" -msgstr "Coupé Red Rims 384" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_6 -msgid "Coupé Red Rims 387" -msgstr "Coupé Red Rims 387" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_2 -msgid "Coupé Silver" -msgstr "Coupé Silver" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_7 -msgid "Coupé Silver Rims 384" -msgstr "Coupé Silver Rims 384" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_8 -msgid "Coupé Silver Rims 387" -msgstr "Coupé Silver Rims 387" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__create_uid -msgid "Created by" -msgstr "Criado por" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__create_date -msgid "Created on" -msgstr "Criado em" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__currency_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__currency_id -msgid "Currency" -msgstr "Moeda" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__custom -#: model:product.attribute,name:product_configurator.custom_attribute -#: model:product.attribute.value,name:product_configurator.custom_attribute_value -msgid "Custom" -msgstr "Personalizado" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__val_custom -msgid "Custom Value" -msgstr "Valor Personalizado" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__custom_value_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__custom_value_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_session_form_view -msgid "Custom Values" -msgstr "Valores Personalizados" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_config_session_custom_value__value -msgid "Custom value held as string" -msgstr "Valor personalizado mantido como string" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__date -msgid "Date" -msgstr "Data" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__datetime -msgid "DateTime" -msgstr "Data/Hora" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__default_val -msgid "Default Val" -msgstr "Val. Predef." - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"Default values for each attribute line must exist in the attribute values " -"(%(attr_name)s: %(default_val)s)" -msgstr "" -"Os valores predefinidos para cada linha de atributo devem existir nos " -"valores de atributo (%(attr_name)s: %(default_val)s)" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "Default values provided generate an invalid configuration" -msgstr "Os valores predefinidos fornecidos geram uma configuração inválida" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__description -msgid "Description" -msgstr "Descrição" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__required -msgid "" -"Determines the required value of this attribute though it can be change on " -"the template level" -msgstr "" -"Determina o valor necessário deste atributo, embora possa ser alterado no " -"nível do modelo" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_diesel -msgid "Diesel" -msgstr "Diesel" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__display_name -msgid "Display Name" -msgstr "Nome Apresentado" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_domain_line -msgid "Domain Line for Config Restrictions" -msgstr "Linha de Domínio para Restrições de Configuração" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_domain -msgid "Domain for Config Restrictions" -msgstr "Domínio para Restrições de Configuração" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_config_session__state__done -msgid "Done" -msgstr "Concluído" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_rims_384 -msgid "Double-spoke 18\"" -msgstr "Jante Spoke Duplo 18\"" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_config_session__state__draft -msgid "Draft" -msgstr "Rascunho" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_engine -#: model:product.config.step,name:product_configurator.config_step_engine -msgid "Engine" -msgstr "Motor" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "Error while calculating mako product name: %s" -msgstr "Erro ao calcular o nome do artigo mako: %s" - -#. module: product_configurator -#: model:product.config.step,name:product_configurator.config_step_extras -msgid "Extras" -msgstr "Extras" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__custom_type -msgid "Field Type" -msgstr "Tipo de Campo" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "Finished configuration session must have a product_id linked" -msgstr "A sessão de configuração concluída deve ter um product_id vinculado" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__float -msgid "Float" -msgstr "N.º Vírgula Flutuante" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Following Attribute/Value from restriction are not present in template " -"attributes/values. Please make sure you are adding right restriction" -msgstr "" -"Atributo/valor a seguir da restrição não está presentes nos atributos/" -"valores do modelo. Certifique-se que está a adicionar a restrição correta" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_config_line__attr_line_val_ids -msgid "" -"For normal attributes the values configured for the product can be " -"selected.\n" -"For custom attributes the 'Custom' value can also be selected." -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_fuel -msgid "Fuel" -msgstr "Combustível" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_gasoline -msgid "Gasoline" -msgstr "Gasolina" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_product__mako_tmpl_name -#: model:ir.model.fields,help:product_configurator.field_product_template__mako_tmpl_name -msgid "Generate Name based on Mako Template" -msgstr "Gerar Nome com base no Modelo Mako" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__id -msgid "ID" -msgstr "ID" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__image -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value__image -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_1920 -msgid "Image" -msgstr "Imagem" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_1024 -msgid "Image 1024" -msgstr "Imagem 1024" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_128 -msgid "Image 128" -msgstr "Imagem 128" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_256 -msgid "Image 256" -msgstr "Imagem 256" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_512 -msgid "Image 512" -msgstr "Imagem 512" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__implied_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view_template -msgid "Inherited" -msgstr "Herdado" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__integer -msgid "Integer" -msgstr "Inteiro" - -#. module: product_configurator -#: model:product.config.step,name:product_configurator.config_step_interior -msgid "Interior" -msgstr "Interior" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_preset_ok -msgid "Is Preset" -msgstr "É Predefinido" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_template_attribute_line__required -msgid "Is this attribute required?" -msgstr "Este atributo é obrigatório?" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator____last_update -msgid "Last Modified on" -msgstr "Última Modificação em" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__write_uid -msgid "Last Updated by" -msgstr "Última Atualização por" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__write_date -msgid "Last Updated on" -msgstr "Última Atualização em" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_model_line -#: model:product.config.step,name:product_configurator.config_step_lines -msgid "Lines" -msgstr "Linhas" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_luxury_line -#: model:product.template,name:product_configurator.product_bmw_luxury_line_product_template -msgid "Luxury Line" -msgstr "Linha Luxury" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_m235i -msgid "M235i" -msgstr "M235i" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_m235i_coupe_product_template -msgid "M235i Coupé" -msgstr "M235i Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_m235i_xdrive -msgid "M235i xDrive" -msgstr "M235i xDrive" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_m2351_xdrive_coupe_product_template -msgid "M235i xDrive Coupe" -msgstr "M235i xDrive Coupe" - -#. module: product_configurator -#: model:res.groups,name:product_configurator.group_product_configurator_manager -msgid "Manager" -msgstr "Chefe" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__weight_dummy -#: model:ir.model.fields,field_description:product_configurator.field_product_template__weight_dummy -msgid "Manual Weight" -msgstr "Peso Manual" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_template__weight_dummy -msgid "Manual setting of product template weight" -msgstr "Configuração manual do peso do modelo de artigo" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__max_val -msgid "Max Value" -msgstr "Valor Máx." - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__max_val -msgid "Maximum value allowed" -msgstr "Valor máximo permitido" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Maximum value must be greater than Minimum value" -msgstr "O valor máximo deve ser maior que o valor mínimo" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__min_val -msgid "Min Value" -msgstr "Valor Min." - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__min_val -msgid "Minimum value allowed" -msgstr "Valor mínimo permitido" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_advantage -#: model:product.template,name:product_configurator.product_bmw_model_advantage_product_template -msgid "Model Advantage" -msgstr "Modelo Advantage" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_luxury_line -#: model:product.template,name:product_configurator.product_bmw_model_luxury_line_product_template -msgid "Model Luxury Line" -msgstr "Modelo Linha Luxo" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_m_sport -#: model:product.template,name:product_configurator.product_bmw_model_m_sport_product_template -msgid "Model M Sport" -msgstr "Modelo M Sport" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_sport_line -#: model:product.template,name:product_configurator.product_bmw_model_sport_line_product_template -msgid "Model Sport Line" -msgstr "Modelo Sport Line" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__multi -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__multi -msgid "Multi" -msgstr "Múltiplos" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__name -msgid "Name" -msgstr "Nome" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "Next" -msgstr "Seguinte" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"On the product %(product)s you cannot associate the value %(value)s with the " -"attribute %(attr)s because they do not match." -msgstr "" -"No artigo %(product)s, não pode associar o valor %(value)s ao atributo " -"%(attr)s porque eles não correspondem." - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__operator -msgid "Operators" -msgstr "Operadores" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_options -msgid "Options" -msgstr "Opções" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tapistry_oyster_black -msgid "Oyster/Black" -msgstr "Pérola/Preto" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_color -msgid "Paint Color" -msgstr "Cor da Pintura" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__product_preset_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_preset_id -msgid "Preset" -msgstr "Predefinição" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__price -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__price -msgid "Price" -msgstr "Preço" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_template -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value__product_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__product_id -msgid "Product" -msgstr "Artigo" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_attribute -msgid "Product Attribute" -msgstr "Atributo do Artigo" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_attribute_value_line -msgid "Product Attribute Value Line" -msgstr "Linha de Valor do Atributo do Artigo" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_value_form_view -msgid "Product Attribute Values" -msgstr "Atributo e Valores do Artigo" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_image -msgid "Product Config Image" -msgstr "Imagem da Configuração do Artigo" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_line -msgid "Product Config Restrictions" -msgstr "Restrições de Configuração do Artigo" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_session -msgid "Product Config Session" -msgstr "Sessão de Config. do Artigo" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_session_custom_value -msgid "Product Config Session Custom Value" -msgstr "Valor Personalizado da Sessão de Configuração do Artigo" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_step_line -msgid "Product Config Step Lines" -msgstr "Linhas da Etapa de Configuração do Artigo" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_step -msgid "Product Config Steps" -msgstr "Etapas de Configuração do Artigo" - -#. module: product_configurator -#: model:ir.module.category,name:product_configurator.product_config_category -#: model_terms:ir.ui.view,arch_db:product_configurator.configurator_settings_view_form -msgid "Product Configurator" -msgstr "Configurador de Artigos" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_img -msgid "Product Img" -msgstr "Imagem do Produto" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__product_tmpl_id -msgid "Product Template" -msgstr "Modelo de Artigo" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_template_attribute_line -msgid "Product Template Attribute Line" -msgstr "Linha de Atributo do Modelo de Artigo" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_template_attribute_value -msgid "Product Template Attribute Value" -msgstr "Valor do Atributo do Modelo de Artigo" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/wizard/product_configurator.py:0 -#, python-format -msgid "Product Template does not have any attribute lines defined" -msgstr "O Modelo de Artigo não tem nenhuma linha de atributo definida" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__product_value_ids -msgid "Product Value" -msgstr "Valor do produto" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_product -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_id -msgid "Product Variant" -msgstr "Variante de Artigo" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_configurator -msgid "Product configuration Wizard" -msgstr "Assistente de configuração de artigo" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_form_view_custom_vals_inherit -msgid "Reconfigure Product" -msgstr "Reconfigurar Artigo" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_red -msgid "Red" -msgstr "Vermelho" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__required -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__required -msgid "Required" -msgstr "Obrigatório" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "Reset" -msgstr "Reiniciar" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__domain_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__domain_id -msgid "Restrictions" -msgstr "Restrições" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Restrictions added make the current default values generate an invalid " -"configuration. \n" -"%s" -msgstr "" -"As restrições adicionadas fazem com que os valores padrão atuais gerem uma " -"configuração inválida. \n" -"%s" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_rims -msgid "Rims" -msgstr "Jantes" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__domain_id -msgid "Rule" -msgstr "Regra" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view_template -msgid "Rules" -msgstr "Regras" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__search_ok -msgid "Searchable" -msgstr "Pesquisável" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Selected custom field type '%s' is not searchable" -msgstr "O tipo de campo personalizado selecionado '%s' não é pesquisável" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Selected custom value '%(name)s' must be at least %(min_val)s" -msgstr "" -"O valor personalizado selecionado '%(name)s' deve ser pelo menos %(min_val)s" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"Selected custom value '%(name)s' must be between %(min_val)s and %(max_val)s" -msgstr "" -"O valor personalizado selecionado '%(name)s' deve estar entre %(min_val)s e " -"%(max_val)s" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Selected custom value '%(name)s' must be lower than %(max_value)s" -msgstr "" -"O valor personalizado selecionado '%(name)s' deve ser menor que %(max_value)s" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__sequence -msgid "Sequence" -msgstr "Sequência" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__cfg_session_id -msgid "Session" -msgstr "Sessão" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_configurator__product_id -msgid "Set only when re-configuring a existing variant" -msgstr "Definir apenas ao reconfigurar uma variante existente" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_config_domain_line__sequence -msgid "Set the order of operations for evaluation domain lines" -msgstr "Definir a ordem das operações para as linhas de domínios de avaliação" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.action_product_configurator_configuration -#: model:ir.ui.menu,name:product_configurator.menu_action_product_configurator_configuration -msgid "Settings" -msgstr "Configurações" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_silver -msgid "Silver" -msgstr "Prata" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_paint_silver_product_template -msgid "Silver Paint" -msgstr "Pintura Metalizada" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_smoker_package -#: model:product.template,name:product_configurator.product_2_series_smoker_package_product_template -msgid "Smoker Package" -msgstr "Pacote Fumadores" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Sorry, you are not allowed to create/change this kind of document. For more " -"information please contact your manager." -msgstr "" -"Desculpe, não tem permissão para criar/alterar este tipo de documento. Para " -"obter mais informações, entre em contato com seu gestor." - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_2_series_transmission_steptronic_sport_product_template -msgid "Sport Automatic Transmission Steptronic" -msgstr "Transmissão Automática Sport Steptronic" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_sport_line -#: model:product.template,name:product_configurator.product_bmw_sport_line_product_template -msgid "Sport Line" -msgstr "Linha Sport" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_search_view -msgid "Standard Products" -msgstr "Artigos Padrão" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__state -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__state -msgid "State" -msgstr "Estado" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_sunroof -#: model:product.template,name:product_configurator.product_2_series_sunroof_product_template -msgid "Sunroof" -msgstr "Teto Panorâmico" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_tapistry -msgid "Tapistry" -msgstr "Estofos" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__template_attribute_value_ids -msgid "Template Attribute Values" -msgstr "Valores de Atributo de Modelo" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__template_attribute_ids -msgid "Template Attributes" -msgstr "Atributos do modelo" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__text -msgid "Textarea" -msgstr "Área de Texto" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"The attribute %(attr)s must have at least one value for the product " -"%(product)s." -msgstr "" -"O atributo %(attr)s deve ter pelo menos um valor para o artigo %(product)s." - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute_value_line__attribute_id -msgid "" -"The attribute cannot be changed once the value is used on at least one " -"product." -msgstr "" -"O atributo não pode ser alterado depois do valor ter sido utilizado em pelo " -"menos um artigo." - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__custom_type -msgid "The type of the custom field generated in the frontend" -msgstr "O tipo do campo personalizado gerado no front-end" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/wizard/product_configurator.py:0 -#, python-format -msgid "There was a problem rendering the view (dynamic_form not found)" -msgstr "" -"Ocorreu um problema ao renderizar a visualização (dynamic_form não " -"encontrado)" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "" -"To reset/change the Preset Please close and start the configuration again" -msgstr "" -"Para redefinir/alterar a Predefinição Por Favor Feche e inicie a " -"configuração novamente" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tow_hook -msgid "Tow hook" -msgstr "Bola de Atrelado" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_2_series_towhook_product_template -msgid "Towhook" -msgstr "Bola de atrelado" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__trans_implied_ids -msgid "Transitively inherits" -msgstr "Herda transitivamente" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_transmission -msgid "Transmission" -msgstr "Transmissão" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__uom_id -msgid "Unit of Measure" -msgstr "Unidade de Medida" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__user_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__user_id -#: model:res.groups,name:product_configurator.group_product_configurator -msgid "User" -msgstr "Utilizador" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_rims_378 -msgid "V-spoke 16\"" -msgstr "Jante V-spoke 16\"" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_rims_387 -msgid "V-spoke 18\"" -msgstr "Jante V-spoke 18\"" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__value_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__value -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__value_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_value_form_view -msgid "Value" -msgstr "Valor" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__value_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__value_ids -msgid "Values" -msgstr "Valores" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__value_ids -msgid "Values Configuration" -msgstr "Configuração de Valores" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "Values entered for line '%s' generate a incompatible configuration" -msgstr "" -"Os valores inseridos para a linha '%s' geram uma configuração incompatível" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "" -"Values must belong to the attribute of the corresponding attribute_line set " -"on the configuration line" -msgstr "" -"Os valores devem pertencer ao atributo da linha de atributo correspondente " -"definido na linha de configuração" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"Values provided to the attribute value line are incompatible with the " -"current rules" -msgstr "" -"Os valores fornecidos para a linha de valor do atributo são incompatíveis " -"com as regras atuais" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Variant Name" -msgstr "Nome da Variante" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__mako_tmpl_name -#: model:ir.model.fields,field_description:product_configurator.field_product_template__mako_tmpl_name -msgid "Variant name" -msgstr "Nome da variante" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_ir_ui_view -msgid "View" -msgstr "Ver" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__weight -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__weight -#: model:ir.model.fields,field_description:product_configurator.field_product_product__weight -#: model:ir.model.fields,field_description:product_configurator.field_product_template__weight -msgid "Weight" -msgstr "Peso" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__weight_extra -msgid "Weight Extra" -msgstr "Peso Extra" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__search_ok -msgid "" -"When checking for variants with the same configuration, do we include this " -"field in the search?" -msgstr "" -"Ao verificar variantes com a mesma configuração, incluímos este campo na " -"pesquisa?" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "You cannot have a duplicate configuration for the same value" -msgstr "Não pode ter uma configuração duplicada para o mesmo valor" - -#, python-format -#~ msgid "" -#~ "Attribute custom type is binary, attachments are the only accepted values " -#~ "with this custom field type" -#~ msgstr "" -#~ "O tipo personalizado de atributo é binário, os anexos são os únicos " -#~ "valores aceites com este tipo de campo personalizado" - -#, python-format -#~ msgid "" -#~ "Attribute custom type must be 'binary' for saving attachments to custom " -#~ "value" -#~ msgstr "" -#~ "O tipo personalizado de atributo deve ser \"binário\" para salvar anexos " -#~ "no valor personalizado" - -#, python-format -#~ msgid "" -#~ "Cannot conduct search on an empty config session without product_tmpl_id " -#~ "kwarg" -#~ msgstr "" -#~ "Não é possível realizar um pesquisa numa sessão de configuração vazia sem " -#~ "kwarg product_tmpl_id" - -#, python-format -#~ msgid "Configuration cannot have the same value inserted twice" -#~ msgstr "A configuração não pode ter o mesmo valor inserido duas vezes" - -#, python-format -#~ msgid "Invalid Configuration" -#~ msgstr "Configuração Inválida" - -#, python-format -#~ msgid "New" -#~ msgstr "Novo" - -#, python-format -#~ msgid "Product created via configuration wizard" -#~ msgstr "Artigo criado por meio do assistente de configuração" - -#, python-format -#~ msgid "Required attribute '%s' is empty" -#~ msgstr "O atributo obrigatório '%s' está vazio" - -#, python-format -#~ msgid "" -#~ "You must select at least one attribute in order to configure a product" -#~ msgstr "Deve selecionar pelo menos um atributo para configurar um artigo" - -#~ msgid "Attribute Line Values" -#~ msgstr "Valores de Linha de Atributo" diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/i18n/tr.po b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/i18n/tr.po deleted file mode 100644 index 6679a960..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/i18n/tr.po +++ /dev/null @@ -1,1459 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * product_configurator -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2025-03-21 21:06+0000\n" -"Last-Translator: İsmail Çağan Yılmaz \n" -"Language-Team: none\n" -"Language: tr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.10.2\n" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"\n" -"Attribute/s: %s" -msgstr "" -"\n" -"Nitelik/ler: %s" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"\n" -"Restriction: %s" -msgstr "" -"\n" -"Kısıtlama: %s" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"\n" -"Value/s: %s\n" -msgstr "" -"\n" -"Değer/ler: %s\n" - -#. module: product_configurator -#: model:product.template,name:product_configurator.bmw_2_series -msgid "2 Series" -msgstr "2 Serisi" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_218d -msgid "218d" -msgstr "218d" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_218d_coupe_product_template -msgid "218d Coupé" -msgstr "218d Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_218i -msgid "218i" -msgstr "218i" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_218i_coupe_product_template -msgid "218i Coupé" -msgstr "218i Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_220d -msgid "220d" -msgstr "220d" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_220d_coupe_product_template -msgid "220d Coupé" -msgstr "220d Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_220d_xdrive -msgid "220d xDrive" -msgstr "220d xDrive" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_220d_xdrive_coupe_product_template -msgid "220d xDrive Coupé" -msgstr "220d xDrive Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_220i -msgid "220i" -msgstr "220i" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_220i_coupe_product_template -msgid "220i Coupé" -msgstr "220i Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_225d -msgid "225d" -msgstr "225d" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_225d_coupe_product_template -msgid "225d Coupé" -msgstr "225d Coupé" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_228i -msgid "228i" -msgstr "228i" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_228i_coupe_product_template -msgid "228i Coupé" -msgstr "228i Coupé" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_kanban_view_inherited -msgid "" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__active -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value__active -msgid "Active" -msgstr "Aktif" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"All attribute values used in attribute value lines must be defined in the " -"attribute lines of the template" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__val_custom -msgid "Allow custom value for this attribute?" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_template_attribute_line__custom -msgid "Allow custom values for this attribute?" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__multi -#: model:ir.model.fields,help:product_configurator.field_product_template_attribute_line__multi -msgid "Allow selection of multiple values for this attribute?" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__attr_line_val_ids -msgid "Allowed Attribute Values" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "An error occurred while parsing value for attribute %s" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "" -"Are you sure? This will remove your current configuration for this template!" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_armrest -#: model:product.template,name:product_configurator.product_2_series_armrest_product_template -msgid "Armrest" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__binary -msgid "Attachment" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__attachment_ids -msgid "Attachments" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__attribute_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__attribute_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__attribute_id -msgid "Attribute" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_line_ids -msgid "Attribute Dependencies" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__attribute_line_id -msgid "Attribute Line" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__attribute_line_val_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__attribute_line_val_ids -msgid "Attribute Line Val" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__attribute_line_ids -msgid "Attribute Lines" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_attribute_value -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__value_id -msgid "Attribute Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__attribute_value_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__attribute_value_line_ids -msgid "Attribute Value Lines" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.variants_action -#: model:ir.ui.menu,name:product_configurator.menu_variants_action_configuration -msgid "Attribute Values" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_value__weight_extra -msgid "Attribute Weight Extra" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute_value__image -msgid "Attribute value image (Display on website for radio buttons)" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.action_attributes_view -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__attribute_line_ids -#: model:ir.ui.menu,name:product_configurator.menu_attribute_action_configuration -msgid "Attributes" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_steptronic -msgid "Automatic (Steptronic)" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_steptronic_sport -msgid "Automatic Sport (Steptronic)" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_2_series_transmission_steptronic_product_template -msgid "Automatic Transmission Steptronic" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "Back" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_black -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tapistry_black -msgid "Black" -msgstr "" - -#. module: product_configurator -#: model:product.config.step,name:product_configurator.config_step_body -msgid "Body" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute_value__active -msgid "" -"By unchecking the active field you can disable a attribute value without " -"deleting it" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__active -msgid "" -"By unchecking the active field you can disable a attribute without deleting " -"it" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_ok -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_ok -msgid "Can be Configured" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "Cannot have a configuration step defined twice." -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/wizard/product_configurator.py:0 -#, python-format -msgid "" -"Changing the product template while having an active configuration will " -"erase reset/clear all values" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__char -msgid "Char" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__color -msgid "Color" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__condition -msgid "Condition" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configurable" -msgstr "" - -#. module: product_configurator -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_product_main -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_search_view -msgid "Configurable Products" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Configurable Products cannot have duplicates (identical attribute values)" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_tmpl_id -msgid "Configurable Template" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_configurable_template_action -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_template_action -msgid "Configurable Templates" -msgstr "" - -#. module: product_configurator -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_variants_action -msgid "Configurable Variants" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__value_ids -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable_settings -msgid "Configuration" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_image_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_image_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configuration Images" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_step_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_template__config_step_line_ids -msgid "Configuration Lines" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_name -msgid "Configuration Name" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_config_domain_action -#: model:ir.ui.menu,name:product_configurator.menu_product_config_domain_action -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view_template -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configuration Restrictions" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_session_id -msgid "Configuration Session" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__name -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__name -msgid "Configuration Session Number" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_config_session -#: model:ir.ui.menu,name:product_configurator.menu_product_config_session -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_session_form_view -msgid "Configuration Sessions" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__config_step_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__config_step_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_step_name -#: model_terms:ir.ui.view,arch_db:product_configurator.config_step_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.config_step_tree_view -msgid "Configuration Step" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__config_step -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_step -msgid "Configuration Step ID" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_config_steps_action -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__config_step_ids -#: model:ir.ui.menu,name:product_configurator.menu_product_config_steps_action -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configuration Steps" -msgstr "" - -#. module: product_configurator -#: model:ir.ui.menu,name:product_configurator.menu_product_configurable -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configurator" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Configure Product" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.product_configurable_variant_action -msgid "Configured Variants" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tapistry_coral_red_black -msgid "Coral Red/Black" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_3 -msgid "Coupé Black" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_9 -msgid "Coupé Black Rims 384" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_10 -msgid "Coupé Black Rims 387" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_1 -msgid "Coupé Red" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_5 -msgid "Coupé Red Rims 384" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_6 -msgid "Coupé Red Rims 387" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_2 -msgid "Coupé Silver" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_7 -msgid "Coupé Silver Rims 384" -msgstr "" - -#. module: product_configurator -#: model:product.config.image,name:product_configurator.config_image_8 -msgid "Coupé Silver Rims 387" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__create_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__create_uid -msgid "Created by" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__create_date -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__create_date -msgid "Created on" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__currency_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__currency_id -msgid "Currency" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__custom -#: model:product.attribute,name:product_configurator.custom_attribute -#: model:product.attribute.value,name:product_configurator.custom_attribute_value -msgid "Custom" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__val_custom -msgid "Custom Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__custom_value_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__custom_value_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_session_form_view -msgid "Custom Values" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_config_session_custom_value__value -msgid "Custom value held as string" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__date -msgid "Date" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__datetime -msgid "DateTime" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__default_val -msgid "Default Val" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"Default values for each attribute line must exist in the attribute values " -"(%(attr_name)s: %(default_val)s)" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "Default values provided generate an invalid configuration" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__description -msgid "Description" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__required -msgid "" -"Determines the required value of this attribute though it can be change on " -"the template level" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_diesel -msgid "Diesel" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__display_name -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__display_name -msgid "Display Name" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_domain_line -msgid "Domain Line for Config Restrictions" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_domain -msgid "Domain for Config Restrictions" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_config_session__state__done -msgid "Done" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_rims_384 -msgid "Double-spoke 18\"" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_config_session__state__draft -msgid "Draft" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_engine -#: model:product.config.step,name:product_configurator.config_step_engine -msgid "Engine" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "Error while calculating mako product name: %s" -msgstr "" - -#. module: product_configurator -#: model:product.config.step,name:product_configurator.config_step_extras -msgid "Extras" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__custom_type -msgid "Field Type" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "Finished configuration session must have a product_id linked" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__float -msgid "Float" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Following Attribute/Value from restriction are not present in template " -"attributes/values. Please make sure you are adding right restriction" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_config_line__attr_line_val_ids -msgid "" -"For normal attributes the values configured for the product can be selected.\n" -"For custom attributes the 'Custom' value can also be selected." -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_fuel -msgid "Fuel" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_gasoline -msgid "Gasoline" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_product__mako_tmpl_name -#: model:ir.model.fields,help:product_configurator.field_product_template__mako_tmpl_name -msgid "Generate Name based on Mako Template" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__id -msgid "ID" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__image -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value__image -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_1920 -msgid "Image" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_1024 -msgid "Image 1024" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_128 -msgid "Image 128" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_256 -msgid "Image 256" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__image_512 -msgid "Image 512" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__implied_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view_template -msgid "Inherited" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__integer -msgid "Integer" -msgstr "" - -#. module: product_configurator -#: model:product.config.step,name:product_configurator.config_step_interior -msgid "Interior" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__config_preset_ok -msgid "Is Preset" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_template_attribute_line__required -msgid "Is this attribute required?" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line____last_update -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator____last_update -msgid "Last Modified on" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__write_uid -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__write_uid -msgid "Last Updated by" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__write_date -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__write_date -msgid "Last Updated on" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_model_line -#: model:product.config.step,name:product_configurator.config_step_lines -msgid "Lines" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_luxury_line -#: model:product.template,name:product_configurator.product_bmw_luxury_line_product_template -msgid "Luxury Line" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_m235i -msgid "M235i" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_m235i_coupe_product_template -msgid "M235i Coupé" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_m235i_xdrive -msgid "M235i xDrive" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_engine_m2351_xdrive_coupe_product_template -msgid "M235i xDrive Coupe" -msgstr "" - -#. module: product_configurator -#: model:res.groups,name:product_configurator.group_product_configurator_manager -msgid "Manager" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__weight_dummy -#: model:ir.model.fields,field_description:product_configurator.field_product_template__weight_dummy -msgid "Manual Weight" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_template__weight_dummy -msgid "Manual setting of product template weight" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__max_val -msgid "Max Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__max_val -msgid "Maximum value allowed" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Maximum value must be greater than Minimum value" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__min_val -msgid "Min Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__min_val -msgid "Minimum value allowed" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_advantage -#: model:product.template,name:product_configurator.product_bmw_model_advantage_product_template -msgid "Model Advantage" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_luxury_line -#: model:product.template,name:product_configurator.product_bmw_model_luxury_line_product_template -msgid "Model Luxury Line" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_m_sport -#: model:product.template,name:product_configurator.product_bmw_model_m_sport_product_template -msgid "Model M Sport" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_model_sport_line -#: model:product.template,name:product_configurator.product_bmw_model_sport_line_product_template -msgid "Model Sport Line" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__multi -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__multi -msgid "Multi" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step__name -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__name -msgid "Name" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "Next" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"On the product %(product)s you cannot associate the value %(value)s with the" -" attribute %(attr)s because they do not match." -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__operator -msgid "Operators" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_options -msgid "Options" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tapistry_oyster_black -msgid "Oyster/Black" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_color -msgid "Paint Color" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__product_preset_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_preset_id -msgid "Preset" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__price -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__price -msgid "Price" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_template -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value__product_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__product_id -msgid "Product" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_attribute -msgid "Product Attribute" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_attribute_value_line -msgid "Product Attribute Value Line" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_value_form_view -msgid "Product Attribute Values" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_image -msgid "Product Config Image" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_line -msgid "Product Config Restrictions" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_session -msgid "Product Config Session" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_session_custom_value -msgid "Product Config Session Custom Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_step_line -msgid "Product Config Step Lines" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_config_step -msgid "Product Config Steps" -msgstr "" - -#. module: product_configurator -#: model:ir.module.category,name:product_configurator.product_config_category -#: model_terms:ir.ui.view,arch_db:product_configurator.configurator_settings_view_form -msgid "Product Configurator" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_img -msgid "Product Img" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__product_tmpl_id -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__product_tmpl_id -msgid "Product Template" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_template_attribute_line -msgid "Product Template Attribute Line" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_template_attribute_value -msgid "Product Template Attribute Value" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/wizard/product_configurator.py:0 -#, python-format -msgid "Product Template does not have any attribute lines defined" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__product_value_ids -msgid "Product Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_product -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__product_id -msgid "Product Variant" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_product_configurator -msgid "Product configuration Wizard" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_form_view_custom_vals_inherit -msgid "Reconfigure Product" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_red -msgid "Red" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__required -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__required -msgid "Required" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "Reset" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__domain_line_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__domain_id -msgid "Restrictions" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Restrictions added make the current default values generate an invalid configuration. \n" -"%s" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_rims -msgid "Rims" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__domain_id -msgid "Rule" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view -#: model_terms:ir.ui.view,arch_db:product_configurator.product_config_domain_form_view_template -msgid "Rules" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__search_ok -msgid "Searchable" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Selected custom field type '%s' is not searchable" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Selected custom value '%(name)s' must be at least %(min_val)s" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"Selected custom value '%(name)s' must be between %(min_val)s and %(max_val)s" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "Selected custom value '%(name)s' must be lower than %(max_value)s" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_image__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_config_step_line__sequence -#: model:ir.model.fields,field_description:product_configurator.field_product_template_attribute_line__sequence -msgid "Sequence" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__cfg_session_id -msgid "Session" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_configurator__product_id -msgid "Set only when re-configuring a existing variant" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_config_domain_line__sequence -msgid "Set the order of operations for evaluation domain lines" -msgstr "" - -#. module: product_configurator -#: model:ir.actions.act_window,name:product_configurator.action_product_configurator_configuration -#: model:ir.ui.menu,name:product_configurator.menu_action_product_configurator_configuration -msgid "Settings" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_silver -msgid "Silver" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_paint_silver_product_template -msgid "Silver Paint" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_smoker_package -#: model:product.template,name:product_configurator.product_2_series_smoker_package_product_template -msgid "Smoker Package" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "" -"Sorry, you are not allowed to create/change this kind of document. For more " -"information please contact your manager." -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_2_series_transmission_steptronic_sport_product_template -msgid "Sport Automatic Transmission Steptronic" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_sport_line -#: model:product.template,name:product_configurator.product_bmw_sport_line_product_template -msgid "Sport Line" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_search_view -msgid "Standard Products" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__state -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__state -msgid "State" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_sunroof -#: model:product.template,name:product_configurator.product_2_series_sunroof_product_template -msgid "Sunroof" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_tapistry -msgid "Tapistry" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__template_attribute_value_ids -msgid "Template Attribute Values" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__template_attribute_ids -msgid "Template Attributes" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields.selection,name:product_configurator.selection__product_attribute__custom_type__text -msgid "Textarea" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"The attribute %(attr)s must have at least one value for the product " -"%(product)s." -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute_value_line__attribute_id -msgid "" -"The attribute cannot be changed once the value is used on at least one " -"product." -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__custom_type -msgid "The type of the custom field generated in the frontend" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/wizard/product_configurator.py:0 -#, python-format -msgid "There was a problem rendering the view (dynamic_form not found)" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_configurator_form -msgid "" -"To reset/change the Preset Please close and start the configuration again" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_tow_hook -msgid "Tow hook" -msgstr "" - -#. module: product_configurator -#: model:product.template,name:product_configurator.product_2_series_towhook_product_template -msgid "Towhook" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain__trans_implied_ids -msgid "Transitively inherits" -msgstr "" - -#. module: product_configurator -#: model:product.attribute,name:product_configurator.product_attribute_transmission -msgid "Transmission" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute__uom_id -msgid "Unit of Measure" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__user_id -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__user_id -#: model:res.groups,name:product_configurator.group_product_configurator -msgid "User" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_rims_378 -msgid "V-spoke 16\"" -msgstr "" - -#. module: product_configurator -#: model:product.attribute.value,name:product_configurator.product_attribute_value_rims_387 -msgid "V-spoke 18\"" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__value_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session_custom_value__value -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__value_ids -#: model_terms:ir.ui.view,arch_db:product_configurator.product_attribute_value_form_view -msgid "Value" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_domain_line__value_ids -#: model:ir.model.fields,field_description:product_configurator.field_product_config_line__value_ids -msgid "Values" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_attribute_value_line__value_ids -msgid "Values Configuration" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "Values entered for line '%s' generate a incompatible configuration" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_config.py:0 -#, python-format -msgid "" -"Values must belong to the attribute of the corresponding attribute_line set " -"on the configuration line" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product_attribute.py:0 -#, python-format -msgid "" -"Values provided to the attribute value line are incompatible with the " -"current rules" -msgstr "" - -#. module: product_configurator -#: model_terms:ir.ui.view,arch_db:product_configurator.product_template_only_form_view_inherited -msgid "Variant Name" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__mako_tmpl_name -#: model:ir.model.fields,field_description:product_configurator.field_product_template__mako_tmpl_name -msgid "Variant name" -msgstr "" - -#. module: product_configurator -#: model:ir.model,name:product_configurator.model_ir_ui_view -msgid "View" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_config_session__weight -#: model:ir.model.fields,field_description:product_configurator.field_product_configurator__weight -#: model:ir.model.fields,field_description:product_configurator.field_product_product__weight -#: model:ir.model.fields,field_description:product_configurator.field_product_template__weight -msgid "Weight" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,field_description:product_configurator.field_product_product__weight_extra -msgid "Weight Extra" -msgstr "" - -#. module: product_configurator -#: model:ir.model.fields,help:product_configurator.field_product_attribute__search_ok -msgid "" -"When checking for variants with the same configuration, do we include this " -"field in the search?" -msgstr "" - -#. module: product_configurator -#. odoo-python -#: code:addons/product_configurator/models/product.py:0 -#, python-format -msgid "You cannot have a duplicate configuration for the same value" -msgstr "" diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/init_hook.py b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/init_hook.py deleted file mode 100644 index 5e18812a..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/init_hook.py +++ /dev/null @@ -1,10 +0,0 @@ -import logging - -logger = logging.getLogger(__name__) - - -def post_init_hook(cr, registry): - """Transfer existing weight values to weight_dummy after installation - since now the weight field is computed - """ - cr.execute("UPDATE product_product SET weight_dummy = weight") diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/models/__init__.py b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/models/__init__.py deleted file mode 100644 index e2129a2d..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/models/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from . import product_config -from . import product_attribute -from . import product -from . import ir_ui_view diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/models/ir_ui_view.py b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/models/ir_ui_view.py deleted file mode 100644 index 7ad1ae1c..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/models/ir_ui_view.py +++ /dev/null @@ -1,11 +0,0 @@ -from odoo import models - - -class View(models.Model): - _inherit = "ir.ui.view" - - def _validate_tag_button(self, node, name_manager, node_info): - special = node.get("special") - if special and special == "no_save": - return - return super()._validate_tag_button(node, name_manager, node_info) diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/models/product.py b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/models/product.py deleted file mode 100644 index 9e604eb7..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/models/product.py +++ /dev/null @@ -1,578 +0,0 @@ -import logging -from io import StringIO - -from mako.runtime import Context -from mako.template import Template - -from odoo import _, api, fields, models -from odoo.exceptions import ValidationError - -_logger = logging.getLogger(__name__) - - -class ProductTemplate(models.Model): - _inherit = "product.template" - - @api.depends("product_variant_ids.product_tmpl_id") - def _compute_product_variant_count(self): - """For configurable products return the number of variants configured or - 1 as many views and methods trigger only when a template has at least - one variant attached. Since we create them from the template we should - have access to them always""" - result = super()._compute_product_variant_count() - for product_tmpl in self: - config_ok = product_tmpl.config_ok - variant_count = product_tmpl.product_variant_count - if config_ok and not variant_count: - product_tmpl.product_variant_count = 1 - return result - - @api.depends("attribute_line_ids.value_ids") - def _compute_template_attr_vals(self): - """Compute all attribute values added in attribute line on - product template""" - for product_tmpl in self: - if product_tmpl.config_ok: - value_ids = product_tmpl.attribute_line_ids.mapped("value_ids") - product_tmpl.attribute_line_val_ids = value_ids - else: - product_tmpl.attribute_line_val_ids = False - - @api.constrains("attribute_line_ids", "attribute_value_line_ids") - def check_attr_value_ids(self): - """Check attribute lines don't have some attribute value that - is not present in attribute lines of that product template""" - for product_tmpl in self: - if not product_tmpl.env.context.get("check_constraint", True): - continue - attr_val_lines = product_tmpl.attribute_value_line_ids - attr_val_ids = attr_val_lines.mapped("value_ids") - if not attr_val_ids <= product_tmpl.attribute_line_val_ids: - raise ValidationError( - _( - "All attribute values used in attribute value lines " - "must be defined in the attribute lines of the " - "template" - ) - ) - - @api.constrains("attribute_value_line_ids") - def _validate_unique_config(self): - """Check for duplicate configurations for the same - attribute value in image lines""" - for template in self: - attr_val_line_vals = template.attribute_value_line_ids.read( - ["value_id", "value_ids"], load=False - ) - attr_val_line_vals = [ - (line["value_id"], tuple(line["value_ids"])) - for line in attr_val_line_vals - ] - if len(set(attr_val_line_vals)) != len(attr_val_line_vals): - raise ValidationError( - _("You cannot have a duplicate configuration for the same value") - ) - - config_ok = fields.Boolean(string="Can be Configured") - - config_line_ids = fields.One2many( - comodel_name="product.config.line", - inverse_name="product_tmpl_id", - string="Attribute Dependencies", - copy=False, - ) - - config_image_ids = fields.One2many( - comodel_name="product.config.image", - inverse_name="product_tmpl_id", - string="Configuration Images", - copy=True, - ) - - attribute_value_line_ids = fields.One2many( - comodel_name="product.attribute.value.line", - inverse_name="product_tmpl_id", - string="Attribute Value Lines", - copy=True, - ) - - attribute_line_val_ids = fields.Many2many( - comodel_name="product.attribute.value", - compute="_compute_template_attr_vals", - store=False, - ) - - config_step_line_ids = fields.One2many( - comodel_name="product.config.step.line", - inverse_name="product_tmpl_id", - string="Configuration Lines", - copy=False, - ) - - mako_tmpl_name = fields.Text( - string="Variant name", - help="Generate Name based on Mako Template", - copy=True, - ) - - # We are calculating weight of variants based on weight of - # product-template so that no need of compute and inverse on this - weight = fields.Float( - compute="_compute_weight", - inverse="_set_weight", # pylint: disable=C8110 - search="_search_weight", - store=False, - ) - weight_dummy = fields.Float( - string="Manual Weight", - digits="Stock Weight", - help="Manual setting of product template weight", - ) - - def _compute_weight(self): - config_products = self.filtered(lambda template: template.config_ok) - for product in config_products: - product.weight = product.weight_dummy - standard_products = self - config_products - return super(ProductTemplate, standard_products)._compute_weight() - - def _set_weight(self): - for product_tmpl in self: - product_tmpl.weight_dummy = product_tmpl.weight - if not product_tmpl.config_ok: - super(ProductTemplate, product_tmpl)._set_weight() - return - - def _search_weight(self, operator, value): - return [("weight_dummy", operator, value)] - - def _check_default_values(self): - default_val_ids = ( - self.attribute_line_ids.filtered(lambda line: line.default_val) - .mapped("default_val") - .ids - ) - - cfg_session_obj = self.env["product.config.session"] - try: - cfg_session_obj.validate_configuration( - value_ids=default_val_ids, product_tmpl_id=self.id, final=False - ) - except ValidationError as exc: - raise ValidationError(exc.args[0]) from exc - except Exception as exc: - raise ValidationError( - _("Default values provided generate an invalid configuration") - ) from exc - - @api.constrains("config_line_ids", "attribute_line_ids") - def _check_default_value_domains(self): - for template in self: - try: - template._check_default_values() - except ValidationError as exc: - raise ValidationError( - _( - "Restrictions added make the current default values " - "generate an invalid configuration.\ - \n%s" - ) - % (exc.name) - ) from exc - - def toggle_config(self): - for record in self: - record.config_ok = not record.config_ok - - def _create_variant_ids(self): - """Prevent configurable products from creating variants as these serve - only as a template for the product configurator""" - templates = self.filtered(lambda t: not t.config_ok) - if not templates: - return None - return super(ProductTemplate, templates)._create_variant_ids() - - def unlink(self): - """- Prevent the removal of configurable product templates - from variants - - Patch for check access rights of user(configurable products)""" - configurable_templates = self.filtered(lambda template: template.config_ok) - if configurable_templates: - configurable_templates[:1].check_config_user_access() - for config_template in configurable_templates: - variant_unlink = config_template.env.context.get( - "unlink_from_variant", False - ) - if variant_unlink: - self -= config_template - res = super().unlink() - return res - - def copy(self, default=None): - """Copy restrictions, config Steps and attribute lines - ith product template""" - if not default: - default = {} - self = self.with_context(check_constraint=False) - res = super().copy(default=default) - - # Attribute lines - attribute_line_dict = {} - for line in res.attribute_line_ids: - attribute_line_dict.update({line.attribute_id.id: line.id}) - - # Restrictions - for line in self.config_line_ids: - old_restriction = line.domain_id - new_restriction = old_restriction.copy() - config_line_default = { - "product_tmpl_id": res.id, - "domain_id": new_restriction.id, - } - new_attribute_line_id = attribute_line_dict.get( - line.attribute_line_id.attribute_id.id, False - ) - if not new_attribute_line_id: - continue - config_line_default.update({"attribute_line_id": new_attribute_line_id}) - line.copy(config_line_default) - - # Config steps - config_step_line_default = {"product_tmpl_id": res.id} - for line in self.config_step_line_ids: - new_attribute_line_ids = [ - attribute_line_dict.get(old_attr_line.attribute_id.id) - for old_attr_line in line.attribute_line_ids - if old_attr_line.attribute_id.id in attribute_line_dict - ] - if new_attribute_line_ids: - config_step_line_default.update( - {"attribute_line_ids": [(6, 0, new_attribute_line_ids)]} - ) - line.copy(config_step_line_default) - return res - - def configure_product(self): - """launches a product configurator wizard with a linked - template in order to configure new product.""" - return self.with_context(product_tmpl_id_readonly=True).create_config_wizard( - click_next=False - ) - - def create_config_wizard( - self, - model_name="product.configurator", - extra_vals=None, - click_next=True, - ): - """create product configuration wizard - - return action to launch wizard - - click on next step based on value of click_next""" - wizard_obj = self.env[model_name] - wizard_vals = {"product_tmpl_id": self.id} - if extra_vals: - wizard_vals.update(extra_vals) - wizard = wizard_obj.create(wizard_vals) - if click_next: - action = wizard.action_next_step() - else: - wizard_obj = wizard_obj.with_context( - wizard_model=model_name, - allow_preset_selection=True, - ) - action = wizard_obj.get_wizard_action(wizard=wizard) - return action - - @api.model - def _check_config_group_rights(self): - """Return True/False from system parameter - - Signals access rights needs to check or not - :Params: return : boolean""" - ICPSudo = self.env["ir.config_parameter"].sudo() - manager_product_configuration_settings = ICPSudo.get_param( - "product_configurator.manager_product_configuration_settings" - ) - return manager_product_configuration_settings - - @api.model - def check_config_user_access(self): - """Check user have access to perform action(create/write/delete) - on configurable products""" - if not self._check_config_group_rights(): - return True - config_manager = self.env.user.has_group( - "product_configurator.group_product_configurator_manager" - ) - user_root = self.env.ref("base.user_root") - user_admin = self.env.ref("base.user_admin") - if ( - config_manager - or self.env.user.id in [user_root.id, user_admin.id] - or self.env.su - ): - return True - raise ValidationError( - _( - "Sorry, you are not allowed to create/change this kind of " - "document. For more information please contact your manager." - ) - ) - - @api.model_create_multi - def create(self, vals_list): - """Patch for check access rights of user(configurable products)""" - for vals in vals_list: - config_ok = vals.get("config_ok", False) - if config_ok: - self.check_config_user_access() - return super().create(vals_list) - - def write(self, vals): - """Patch for check access rights of user(configurable products)""" - change_config_ok = "config_ok" in vals - configurable_templates = self.filtered(lambda template: template.config_ok) - if change_config_ok or configurable_templates: - self[:1].check_config_user_access() - - return super().write(vals) - - @api.constrains("config_line_ids") - def _check_config_line_domain(self): - attribute_line_ids = self.attribute_line_ids - tmpl_value_ids = attribute_line_ids._configurator_value_ids() - tmpl_attribute_ids = attribute_line_ids.mapped("attribute_id") - error_message = False - for domain_id in self.config_line_ids.mapped("domain_id"): - domain_attr_ids = domain_id.domain_line_ids.mapped("attribute_id") - domain_value_ids = domain_id.domain_line_ids.mapped("value_ids") - invalid_value_ids = domain_value_ids - tmpl_value_ids - invalid_attribute_ids = domain_attr_ids - tmpl_attribute_ids - if not invalid_attribute_ids and not invalid_value_ids: - continue - if not error_message: - error_message = _( - "Following Attribute/Value from restriction " - "are not present in template attributes/values. " - "Please make sure you are adding right restriction" - ) - error_message += _("\nRestriction: %s", domain_id.name) - error_message += ( - invalid_attribute_ids - and _( - "\nAttribute/s: %s", ", ".join(invalid_attribute_ids.mapped("name")) - ) - or "" - ) - error_message += ( - invalid_value_ids - and _("\nValue/s: %s\n", ", ".join(invalid_value_ids.mapped("name"))) - or "" - ) - if error_message: - raise ValidationError(error_message) - - -class ProductProduct(models.Model): - _inherit = "product.product" - _rec_name = "config_name" - - @api.constrains("product_template_attribute_value_ids") - def _check_duplicate_product(self): - """Check for prducts with same attribute values/custom values""" - for product in self: - if not product.config_ok: - continue - - # At the moment, I don't have enough confidence with my - # understanding of binary attributes, so will leave these - # as not matching... - # In theory, they should just work, if they are set to "non search" - # in custom field def! - # TODO: Check the logic with binary attributes - config_session_obj = product.env["product.config.session"] - ptav_ids = product.product_template_attribute_value_ids.mapped( - "product_attribute_value_id" - ) - duplicates = config_session_obj.search_variant( - product_tmpl_id=product.product_tmpl_id, - value_ids=ptav_ids.ids, - ).filtered(lambda p, product=product: p.id != product.id) - - if duplicates: - raise ValidationError( - _( - "Configurable Products cannot have duplicates " - "(identical attribute values)" - ) - ) - - def _get_config_name(self): - """Name for configured products - :param: return : String""" - self.ensure_one() - return self.name - - def _get_mako_context(self, buf): - """Return context needed for computing product name based - on mako-tamplate define on it's product template""" - self.ensure_one() - ptav_ids = self.product_template_attribute_value_ids.mapped( - "product_attribute_value_id" - ) - return Context( - buf, - product=self, - attribute_values=ptav_ids, - steps=self.product_tmpl_id.config_step_line_ids, - template=self.product_tmpl_id, - ) - - def _get_mako_tmpl_name(self): - """Compute and return product name based on mako-tamplate - define on it's product template""" - self.ensure_one() - if self.mako_tmpl_name: - try: - mytemplate = Template(self.mako_tmpl_name or "") - buf = StringIO() - ctx = self._get_mako_context(buf) - mytemplate.render_context(ctx) - return buf.getvalue() - except Exception: - _logger.error( - _("Error while calculating mako product name: %s") - % self.display_name - ) - return self.display_name - - @api.depends("product_template_attribute_value_ids.weight_extra") - def _compute_product_weight_extra(self): - for product in self: - product.weight_extra = sum( - product.mapped("product_template_attribute_value_ids.weight_extra") - ) - - def _compute_product_weight(self): - for product in self: - if product.config_ok: - tmpl_weight = product.product_tmpl_id.weight - product.weight = tmpl_weight + product.weight_extra - else: - product.weight = product.weight_dummy - - def _search_product_weight(self, operator, value): - return [("weight_dummy", operator, value)] - - def _inverse_product_weight(self): - """Store weight in dummy field""" - self.weight_dummy = self.weight - - config_name = fields.Char( - string="Configuration Name", compute="_compute_config_name" - ) - weight_extra = fields.Float(compute="_compute_product_weight_extra") - weight_dummy = fields.Float(string="Manual Weight", digits="Stock Weight") - weight = fields.Float( - compute="_compute_product_weight", - inverse="_inverse_product_weight", - search="_search_product_weight", - store=False, - ) - - # product preset - config_preset_ok = fields.Boolean(string="Is Preset") - - def _compute_config_name(self): - """Compute the name of the configurable products and use template - name for others""" - for product in self: - if product.config_ok: - product.config_name = product._get_config_name() - else: - product.config_name = product.name - - def reconfigure_product(self): - """launches a product configurator wizard with a linked - template and variant in order to re-configure an existing product. - It is essentially a shortcut to pre-fill configuration - data of a variant""" - self.ensure_one() - - extra_vals = {"product_id": self.id} - return self.product_tmpl_id.create_config_wizard(extra_vals=extra_vals) - - @api.model - def check_config_user_access(self, mode): - """Check user have access to perform action(create/write/delete) - on configurable products""" - if not self.env["product.template"]._check_config_group_rights(): - return True - config_manager = self.env.user.has_group( - "product_configurator.group_product_configurator_manager" - ) - config_user = self.env.user.has_group( - "product_configurator.group_product_configurator" - ) - user_root = self.env.ref("base.user_root") - user_admin = self.env.ref("base.user_admin") - if ( - config_manager - or (config_user and mode not in ["delete"]) - or self.env.user.id in [user_root.id, user_admin.id] - ): - return True - raise ValidationError( - _( - "Sorry, you are not allowed to create/change this kind of " - "document. For more information please contact your manager." - ) - ) - - def unlink(self): - """- Signal unlink from product variant through context so - removal can be stopped for configurable templates - - check access rights of user(configurable products)""" - config_product = any(p.config_ok for p in self) - if config_product: - self.env["product.product"].check_config_user_access(mode="delete") - ctx = dict(self.env.context, unlink_from_variant=True) - self.env.context = ctx - return super().unlink() - - @api.model_create_multi - def create(self, vals_list): - """Patch for check access rights of user(configurable products)""" - for vals in vals_list: - config_ok = vals.get("config_ok", False) - if config_ok: - self.check_config_user_access(mode="create") - return super().create(vals_list) - - def write(self, vals): - """Patch for check access rights of user(configurable products)""" - change_config_ok = "config_ok" in vals - configurable_products = self.filtered(lambda product: product.config_ok) - if change_config_ok or configurable_products: - self[:1].check_config_user_access(mode="write") - - return super().write(vals) - - def _compute_product_price_extra(self): - standard_products = self.filtered(lambda product: not product.config_ok) - config_products = self - standard_products - if standard_products: - result = super( - ProductProduct, standard_products - )._compute_product_price_extra() - else: - result = None - for product in config_products: - attribute_value_obj = self.env["product.attribute.value"] - value_ids = ( - product.product_template_attribute_value_ids.product_attribute_value_id - ) - extra_prices = attribute_value_obj.get_attribute_value_extra_prices( - product_tmpl_id=product.product_tmpl_id.id, pt_attr_value_ids=value_ids - ) - product.price_extra = sum(extra_prices.values()) - return result diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/models/product_attribute.py b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/models/product_attribute.py deleted file mode 100644 index c1491849..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/models/product_attribute.py +++ /dev/null @@ -1,454 +0,0 @@ -from ast import literal_eval - -from odoo import _, api, fields, models -from odoo.exceptions import ValidationError - - -class ProductAttribute(models.Model): - _inherit = "product.attribute" - _order = "sequence" - - def copy(self, default=None): - """Add ' (Copy)' in name to prevent attribute - having same name while copying""" - if not default: - default = {} - new_attrs = self.env["product.attribute"] - for attr in self: - default.update({"name": attr.name + " (copy)"}) - new_attrs += super(ProductAttribute, attr).copy(default) - return new_attrs - - @api.model - def _get_nosearch_fields(self): - """Return a list of custom field types that do not support searching""" - return ["binary"] - - @api.onchange("custom_type") - def onchange_custom_type(self): - if self.custom_type in self._get_nosearch_fields(): - self.search_ok = False - if self.custom_type not in ("integer", "float"): - self.min_val = False - self.max_val = False - - @api.onchange("val_custom") - def onchange_val_custom_field(self): - if not self.val_custom: - self.custom_type = False - - CUSTOM_TYPES = [ - ("char", "Char"), - ("integer", "Integer"), - ("float", "Float"), - ("text", "Textarea"), - ("color", "Color"), - ("binary", "Attachment"), - ("date", "Date"), - ("datetime", "DateTime"), - ] - - active = fields.Boolean( - default=True, - help="By unchecking the active field you can " - "disable a attribute without deleting it", - ) - min_val = fields.Integer(string="Min Value", help="Minimum value allowed") - max_val = fields.Integer(string="Max Value", help="Maximum value allowed") - - # TODO: Exclude self from result-set of dependency - val_custom = fields.Boolean( - string="Custom Value", help="Allow custom value for this attribute?" - ) - custom_type = fields.Selection( - selection=CUSTOM_TYPES, - string="Field Type", - help="The type of the custom field generated in the frontend", - ) - description = fields.Text(translate=True) - search_ok = fields.Boolean( - string="Searchable", - help="When checking for variants with " - "the same configuration, do we " - "include this field in the search?", - ) - required = fields.Boolean( - default=True, - help="Determines the required value of this " - "attribute though it can be change on " - "the template level", - ) - multi = fields.Boolean( - help="Allow selection of multiple values for this attribute?", - ) - uom_id = fields.Many2one(comodel_name="uom.uom", string="Unit of Measure") - image = fields.Binary() - - # TODO prevent the same attribute from being defined twice on the - # attribute lines - - @api.constrains("custom_type", "search_ok") - def check_searchable_field(self): - for attribute in self: - nosearch_fields = attribute._get_nosearch_fields() - if attribute.custom_type in nosearch_fields and attribute.search_ok: - raise ValidationError( - _( - "Selected custom field type '%s' is not searchable", - attribute.custom_type, - ) - ) - - def validate_custom_val(self, val): - """Pass in a desired custom value and ensure it is valid. - Probably should check type, etc., but let's assume fine for the moment. - """ - self.ensure_one() - if self.custom_type in ("integer", "float"): - minv = self.min_val - maxv = self.max_val - val = literal_eval(str(val)) - if minv and maxv and (val < minv or val > maxv): - raise ValidationError( - _( - "Selected custom value '%(name)s' must be " - "between %(min_val)s and %(max_val)s", - **{ - "name": self.name, - "min_val": self.min_val, - "max_val": self.max_val, - }, - ) - ) - elif minv and val < minv: - raise ValidationError( - _( - "Selected custom value '%(name)s' must be at least %(min_val)s", - **{"name": self.name, "min_val": self.min_val}, - ) - ) - elif maxv and val > maxv: - raise ValidationError( - _( - "Selected custom value '%(name)s' " - "must be lower than %(max_value)s", - **{"name": self.name, "max_value": self.max_val + 1}, - ) - ) - - @api.constrains("min_val", "max_val") - def _check_constraint_min_max_value(self): - """Prevent to add Maximun value less than minimum value""" - for attribute in self: - if attribute.custom_type not in ("integer", "float"): - continue - minv = attribute.min_val - maxv = attribute.max_val - if maxv and minv and maxv < minv: - raise ValidationError( - _("Maximum value must be greater than Minimum value") - ) - - def _configurator_value_ids(self): - """Values accepted for attributes in `self`.""" - values = self.value_ids - if any(self.mapped("val_custom")): - values += self.env["product.config.session"].get_custom_value_id() - return values - - -class ProductAttributeLine(models.Model): - _inherit = "product.template.attribute.line" - _order = "product_tmpl_id, sequence, id" - # TODO: Order by dependencies first and then sequence so dependent fields - # do not come before master field - - @api.onchange("attribute_id") - def onchange_attribute(self): - """Set default value of required/multi/cutom from attribute""" - self.value_ids = False - self.required = self.attribute_id.required - self.multi = self.attribute_id.multi - self.custom = self.attribute_id.val_custom - # TODO: Remove all dependencies pointed towards the attribute being - # changed - - @api.onchange("value_ids") - def onchange_values(self): - if self.default_val and self.default_val not in self.value_ids: - self.default_val = None - - custom = fields.Boolean(help="Allow custom values for this attribute?") - required = fields.Boolean(help="Is this attribute required?") - multi = fields.Boolean( - help="Allow selection of multiple values for this attribute?", - ) - default_val = fields.Many2one(comodel_name="product.attribute.value") - - sequence = fields.Integer(default=10) - - @api.constrains("value_ids", "default_val") - def _check_default_values(self): - """default value should not be outside of the - values selected in attribute line""" - for line in self.filtered(lambda line: line.default_val): - if line.default_val not in line.value_ids: - raise ValidationError( - _( - "Default values for each attribute line must exist in " - "the attribute values (%(attr_name)s: %(default_val)s)", - **{ - "attr_name": line.attribute_id.name, - "default_val": line.default_val.name, - }, - ) - ) - - @api.constrains("active", "value_ids", "attribute_id") - def _check_valid_values(self): - """Overwrite to save attribute line without - values when custom is true""" - for ptal in self: - # Customization - if ptal.active and not ptal.value_ids and not ptal.custom: - # Old code - # if ptal.active and not ptal.value_ids: - # Customization End - raise ValidationError( - _( - "The attribute %(attr)s must have at least one value for " - "the product %(product)s.", - **{ - "attr": ptal.attribute_id.display_name, - "product": ptal.product_tmpl_id.display_name, - }, - ) - ) - for pav in ptal.value_ids: - if pav.attribute_id != ptal.attribute_id: - raise ValidationError( - _( - "On the product %(product)s you cannot associate the " - "value %(value)s with the attribute %(attr)s because they " - "do not match.", - **{ - "product": ptal.product_tmpl_id.display_name, - "value": pav.display_name, - "attr": ptal.attribute_id.display_name, - }, - ) - ) - return True - - def _configurator_value_ids(self): - """Values accepted for template attribute lines in `self`.""" - values = self.value_ids - if any(self.mapped("custom")): - values += self.env["product.config.session"].get_custom_value_id() - return values - - -class ProductAttributeValue(models.Model): - _inherit = "product.attribute.value" - - def copy(self, default=None): - """Add ' (Copy)' in name to prevent attribute - having same name while copying""" - if not default: - default = {} - default.update({"name": self.name + " (copy)"}) - product = super().copy(default) - return product - - active = fields.Boolean( - default=True, - help="By unchecking the active field you can " - "disable a attribute value without deleting it", - ) - product_id = fields.Many2one(comodel_name="product.product") - image = fields.Binary( - attachment=True, - help="Attribute value image (Display on website for radio buttons)", - ) - - @api.model - def get_attribute_value_extra_prices( - self, product_tmpl_id, pt_attr_value_ids, pricelist=None - ): - extra_prices = {} - if not pricelist: - pricelist = self.env.user.partner_id.property_product_pricelist - - related_product_av_ids = self.env["product.attribute.value"].search( - [("id", "in", pt_attr_value_ids.ids), ("product_id", "!=", False)] - ) - extra_prices = { - av.id: av.product_id.with_context( - pricelist=pricelist.id - )._get_contextual_price() - for av in related_product_av_ids - } - remaining_av_ids = pt_attr_value_ids - related_product_av_ids - pe_lines = self.env["product.template.attribute.value"].search( - [ - ("product_attribute_value_id", "in", remaining_av_ids.ids), - ("product_tmpl_id", "=", product_tmpl_id), - ] - ) - for line in pe_lines: - attr_val_id = line.product_attribute_value_id - if attr_val_id.id not in extra_prices: - extra_prices[attr_val_id.id] = 0 - extra_prices[attr_val_id.id] += line.price_extra - return extra_prices - - def name_get(self): - res = super().name_get() - if not self.env.context.get("show_price_extra"): - return res - product_template_id = self.env.context.get("active_id", False) - - price_precision = self.env["decimal.precision"].precision_get("Product Price") - extra_prices = self.get_attribute_value_extra_prices( - product_tmpl_id=product_template_id, pt_attr_value_ids=self - ) - - res_prices = [] - for val in res: - price_extra = extra_prices.get(val[0]) - if price_extra: - val = ( - val[0], - "{} ( +{} )".format( - val[1], - ("{0:,.%sf}" % (price_precision)).format(price_extra), - ), - ) - res_prices.append(val) - return res_prices - - @api.model - def name_search(self, name="", args=None, operator="ilike", limit=100): - """Use name_search as a domain restriction for the frontend to show - only values set on the product template taking all the configuration - restrictions into account. - - TODO: This only works when activating the selection not when typing - """ - product_tmpl_id = self.env.context.get("_cfg_product_tmpl_id") - if product_tmpl_id: - # TODO: Avoiding browse here could be a good performance enhancer - product_tmpl = self.env["product.template"].browse(product_tmpl_id) - tmpl_vals = product_tmpl.attribute_line_ids.mapped("value_ids") - attr_restrict_ids = [] - preset_val_ids = [] - new_args = [] - for arg in args: - # Restrict values only to value_ids set on product_template - if arg[0] == "id" and arg[1] == "not in": - preset_val_ids = arg[2] - # TODO: Check if all values are available for configuration - else: - new_args.append(arg) - val_ids = set(tmpl_vals.ids) - if preset_val_ids: - val_ids -= set(arg[2]) - val_ids = self.env["product.config.session"].values_available( - val_ids, preset_val_ids, product_tmpl_id=product_tmpl_id - ) - new_args.append(("id", "in", val_ids)) - mono_tmpl_lines = product_tmpl.attribute_line_ids.filtered( - lambda line: not line.multi - ) - for line in mono_tmpl_lines: - line_val_ids = set(line.mapped("value_ids").ids) - if line_val_ids & set(preset_val_ids): - attr_restrict_ids.append(line.attribute_id.id) - if attr_restrict_ids: - new_args.append(("attribute_id", "not in", attr_restrict_ids)) - args = new_args - res = super().name_search(name=name, args=args, operator=operator, limit=limit) - return res - - # TODO: Prevent unlinking custom options by overriding unlink - - # _sql_constraints = [ - # ('unique_custom', 'unique(id,allow_custom_value)', - # 'Only one custom value per dimension type is allowed') - # ] - - -class ProductAttributePrice(models.Model): - _inherit = "product.template.attribute.value" - # Leverage product.template.attribute.value to compute the extra weight - # each attribute adds - - weight_extra = fields.Float(string="Attribute Weight Extra", digits="Stock Weight") - - -class ProductAttributeValueLine(models.Model): - _name = "product.attribute.value.line" - _description = "Product Attribute Value Line" - _order = "sequence" - - sequence = fields.Integer(default=10) - product_tmpl_id = fields.Many2one( - comodel_name="product.template", - string="Product Template", - ondelete="cascade", - required=True, - ) - value_id = fields.Many2one( - comodel_name="product.attribute.value", - required=True, - string="Attribute Value", - ) - attribute_id = fields.Many2one( - comodel_name="product.attribute", related="value_id.attribute_id" - ) - value_ids = fields.Many2many( - comodel_name="product.attribute.value", - relation="product_attribute_value_product_attribute_value_line_rel", - column1="product_attribute_value_line_id", - column2="product_attribute_value_id", - string="Values Configuration", - ) - product_value_ids = fields.Many2many( - comodel_name="product.attribute.value", - relation="product_attr_values_attr_values_rel", - column1="product_val_id", - column2="attr_val_id", - compute="_compute_get_value_id", - store=True, - ) - - @api.depends( - "product_tmpl_id", - "product_tmpl_id.attribute_line_ids", - "product_tmpl_id.attribute_line_ids.value_ids", - ) - def _compute_get_value_id(self): - for attr_val_line in self: - template = attr_val_line.product_tmpl_id - value_list = template.attribute_line_ids.mapped("value_ids") - attr_val_line.product_value_ids = [(6, 0, value_list.ids)] - - @api.constrains("value_ids") - def _validate_configuration(self): - """Ensure that the passed configuration in value_ids is a valid""" - cfg_session_obj = self.env["product.config.session"] - for attr_val_line in self: - value_ids = attr_val_line.value_ids.ids - value_ids.append(attr_val_line.value_id.id) - valid = cfg_session_obj.validate_configuration( - value_ids=value_ids, - product_tmpl_id=attr_val_line.product_tmpl_id.id, - final=False, - ) - if not valid: - raise ValidationError( - _( - "Values provided to the attribute value line are " - "incompatible with the current rules" - ) - ) diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/models/product_config.py b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/models/product_config.py deleted file mode 100644 index 02565a48..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/models/product_config.py +++ /dev/null @@ -1,1692 +0,0 @@ -import logging -from ast import literal_eval - -from odoo import _, api, fields, models -from odoo.exceptions import UserError, ValidationError -from odoo.tools.misc import flatten, formatLang - -_logger = logging.getLogger(__name__) - - -class ProductConfigDomain(models.Model): - _name = "product.config.domain" - _description = "Domain for Config Restrictions" - - @api.depends("implied_ids") - def _get_trans_implied(self): - """Computes the transitive closure of relation implied_ids""" - - def linearize(domains): - trans_domains = domains - for domain in domains: - implied_domains = domain.implied_ids - domain - if implied_domains: - trans_domains |= linearize(implied_domains) - return trans_domains - - for domain in self: - domain.trans_implied_ids = linearize(domain) - - def compute_domain(self): - """Returns a list of domains defined on a - product.config.domain_line_ids and all implied_ids""" - # TODO: Enable the usage of OR operators between implied_ids - # TODO: Add implied_ids sequence field to enforce order of operations - # TODO: Prevent circular dependencies - computed_domain = [] - for domain in self: - lines = domain.trans_implied_ids.mapped("domain_line_ids").sorted() - if not lines: - continue - for line in lines[:-1]: - if line.operator == "or": - computed_domain.append("|") - computed_domain.append( - (line.attribute_id.id, line.condition, line.value_ids.ids) - ) - # ensure 2 operands follow the last operator - computed_domain.append( - ( - lines[-1].attribute_id.id, - lines[-1].condition, - lines[-1].value_ids.ids, - ) - ) - return computed_domain - - name = fields.Char(required=True) - domain_line_ids = fields.One2many( - comodel_name="product.config.domain.line", - inverse_name="domain_id", - string="Restrictions", - required=True, - copy=True, - ) - implied_ids = fields.Many2many( - comodel_name="product.config.domain", - relation="product_config_domain_implied_rel", - string="Inherited", - column1="domain_id", - column2="parent_id", - ) - trans_implied_ids = fields.Many2many( - comodel_name="product.config.domain", - compute=_get_trans_implied, - column1="domain_id", - column2="parent_id", - string="Transitively inherits", - ) - - -class ProductConfigDomainLine(models.Model): - _name = "product.config.domain.line" - _order = "sequence" - _description = "Domain Line for Config Restrictions" - - def _get_domain_conditions(self): - operators = [("in", "In"), ("not in", "Not In")] - - return operators - - def _get_domain_operators(self): - andor = [("and", "And"), ("or", "Or")] - - return andor - - @api.depends("attribute_id") - def _compute_template_attribute_value_ids(self): - for domain in self: - domain.template_attribute_value_ids = ( - domain._get_allowed_attribute_value_ids() - ) - - def _compute_attribute_id_domain(self): - if "product_attribute_ids" in self.env.context: - return [("id", "in", self.env.context["product_attribute_ids"][0][2])] - return [] - - def _get_allowed_attribute_value_ids(self): - self.ensure_one() - product_template = self.env["product.template"] - if self.env.context.get("product_tmpl_id"): - product_template = product_template.browse( - self.env.context.get("product_tmpl_id") - ) - template_lines = product_template.attribute_line_ids - attribute_values = self.attribute_id._configurator_value_ids() - return ( - product_template - and (template_lines._configurator_value_ids() & attribute_values) - or attribute_values - ) - - template_attribute_value_ids = fields.Many2many( - comodel_name="product.attribute.value", - string="Template Attribute Values", - compute="_compute_template_attribute_value_ids", - ) - attribute_id = fields.Many2one( - comodel_name="product.attribute", - string="Attribute", - required=True, - domain=lambda self: self._compute_attribute_id_domain(), - ) - domain_id = fields.Many2one( - comodel_name="product.config.domain", required=True, string="Rule" - ) - condition = fields.Selection(selection=_get_domain_conditions, required=True) - value_ids = fields.Many2many( - comodel_name="product.attribute.value", - relation="product_config_domain_line_attr_rel", - column1="line_id", - column2="attribute_id", - string="Values", - required=True, - ) - operator = fields.Selection( - selection=_get_domain_operators, - string="Operators", - default="and", - required=True, - ) - sequence = fields.Integer( - default=1, - help="Set the order of operations for evaluation domain lines", - ) - - -class ProductConfigLine(models.Model): - _name = "product.config.line" - _description = "Product Config Restrictions" - _order = "product_tmpl_id, sequence, id" - - # TODO: Prevent config lines having dependencies that are not set in other - # config lines - # TODO: Prevent circular depdencies: Length -> Color, Color -> Length - - @api.onchange("attribute_line_id") - def onchange_attribute(self): - self.value_ids = False - self.domain_id = False - - @api.depends( - "product_tmpl_id", - "attribute_line_id", - "product_tmpl_id.attribute_line_ids", - "product_tmpl_id.config_line_ids", - ) - def _compute_template_attribute_ids(self): - for config_line in self: - product_template = config_line.product_tmpl_id - attribute_line_ids = product_template.attribute_line_ids - config_line.template_attribute_ids = attribute_line_ids.mapped( - "attribute_id" - ) - - template_attribute_ids = fields.Many2many( - comodel_name="product.attribute", - string="Template Attributes", - compute="_compute_template_attribute_ids", - ) - product_tmpl_id = fields.Many2one( - comodel_name="product.template", - string="Product Template", - ondelete="cascade", - required=True, - ) - attribute_line_id = fields.Many2one( - comodel_name="product.template.attribute.line", - string="Attribute Line", - ondelete="cascade", - required=True, - ) - attr_line_val_ids = fields.Many2many( - comodel_name="product.attribute.value", - compute="_compute_attr_line_val_ids", - string="Allowed Attribute Values", - help="For normal attributes " - "the values configured for the product can be selected.\n" - "For custom attributes the 'Custom' value can also be selected.", - ) - value_ids = fields.Many2many( - comodel_name="product.attribute.value", - relation="cfg_line_attr_val_id_rel", - column1="cfg_line_id", - column2="attr_val_id", - string="Values", - ) - domain_id = fields.Many2one( - comodel_name="product.config.domain", - required=True, - string="Restrictions", - ) - sequence = fields.Integer(default=10) - - @api.constrains("value_ids") - def check_value_attributes(self): - """Values selected in config lines must be allowed.""" - for line in self: - forbidden_values = line.value_ids - line.attr_line_val_ids - if forbidden_values: - raise ValidationError( - _( - "Values must belong to the attribute of the " - "corresponding attribute_line set on the " - "configuration line" - ) - ) - - @api.depends( - "attribute_line_id.value_ids", - "attribute_line_id.attribute_id.val_custom", - ) - def _compute_attr_line_val_ids(self): - for config_line in self: - config_line.attr_line_val_ids = ( - config_line.attribute_line_id._configurator_value_ids() - ) - - -class ProductConfigImage(models.Model): - _name = "product.config.image" - _inherit = ["image.mixin"] - _description = "Product Config Image" - _order = "sequence" - - name = fields.Char(required=True, translate=True) - product_tmpl_id = fields.Many2one( - comodel_name="product.template", - string="Product", - ondelete="cascade", - required=True, - ) - sequence = fields.Integer(default=10) - value_ids = fields.Many2many( - comodel_name="product.attribute.value", string="Configuration" - ) - - @api.constrains("value_ids") - def _check_value_ids(self): - """Check combination of values is possible according to given - restrictions on linked product template""" - cfg_session_obj = self.env["product.config.session"] - for cfg_img in self: - try: - cfg_session_obj.validate_configuration( - value_ids=cfg_img.value_ids.ids, - product_tmpl_id=cfg_img.product_tmpl_id.id, - final=False, - ) - except ValidationError as exc: - raise ValidationError( - _( - "Values entered for line '%s' generate " - "a incompatible configuration", - cfg_img.name, - ) - ) from exc - - -class ProductConfigStep(models.Model): - _name = "product.config.step" - _description = "Product Config Steps" - - # TODO: Prevent values which have dependencies to be set in a - # step with higher sequence than the dependency - - name = fields.Char(required=True, translate=True) - - -class ProductConfigStepLine(models.Model): - _name = "product.config.step.line" - _description = "Product Config Step Lines" - _order = "sequence, config_step_id, id" - - name = fields.Char(related="config_step_id.name") - config_step_id = fields.Many2one( - comodel_name="product.config.step", - string="Configuration Step", - required=True, - ) - attribute_line_ids = fields.Many2many( - comodel_name="product.template.attribute.line", - relation="config_step_line_attr_id_rel", - column1="cfg_line_id", - column2="attr_id", - string="Attribute Lines", - ) - product_tmpl_id = fields.Many2one( - comodel_name="product.template", - string="Product Template", - ondelete="cascade", - required=True, - ) - sequence = fields.Integer(default=10) - - @api.constrains("config_step_id") - def _check_config_step(self): - """Prevent to add same step more than once on same product template""" - for config_step in self: - cfg_step_lines = config_step.product_tmpl_id.config_step_line_ids - cfg_steps = cfg_step_lines.filtered( - lambda line, config_step=config_step: line != config_step - ).mapped("config_step_id") - if config_step.config_step_id in cfg_steps: - raise ValidationError( - _("Cannot have a configuration step defined twice.") - ) - - -class ProductConfigSession(models.Model): - _name = "product.config.session" - _description = "Product Config Session" - - @api.depends( - "value_ids", - "product_tmpl_id.list_price", - "product_tmpl_id.attribute_line_ids", - "product_tmpl_id.attribute_line_ids.value_ids", - "product_tmpl_id.attribute_line_ids.product_template_value_ids", - "product_tmpl_id.attribute_line_ids." "product_template_value_ids.price_extra", - ) - def _compute_cfg_price(self): - for session in self: - if session.product_tmpl_id: - price = session.get_cfg_price() - else: - price = 0.00 - session.price = price - - def get_custom_value_id(self): - """Return record set of attribute value 'custom'""" - custom_ext_id = "product_configurator.custom_attribute_value" - custom_val_id = self.env.ref(custom_ext_id) - return custom_val_id - - @api.model - def _get_custom_vals_dict(self): - """Retrieve session custom values as a dictionary of the form - {attribute_id: parsed_custom_value}""" - custom_vals = {} - for val in self.custom_value_ids: - if val.attribute_id.custom_type in ["float", "integer"]: - custom_vals[val.attribute_id.id] = literal_eval(val.value) - elif val.attribute_id.custom_type == "binary": - custom_vals[val.attribute_id.id] = val.attachment_ids - else: - custom_vals[val.attribute_id.id] = val.value - return custom_vals - - def _compute_config_step_name(self): - """Get the config.step.line name using the string stored in config_step - field of the session""" - cfg_step_line_obj = self.env["product.config.step.line"] - cfg_session_step_lines = self.mapped("config_step") - cfg_step_line_ids = set() - for step in cfg_session_step_lines: - try: - cfg_step_line_ids.add(int(step)) - except ValueError: - _logger.debug("Step from session not valid") - cfg_step_lines = cfg_step_line_obj.browse(cfg_step_line_ids) - for session in self: - try: - config_step = int(session.config_step) - config_step_line = cfg_step_lines.filtered( - lambda x, config_step=config_step: x.id == config_step - ) - session.config_step_name = config_step_line.name - except Exception: - _logger.debug("Invalid session data ignored") - if not session.config_step_name: - session.config_step_name = session.config_step - - @api.model - def get_cfg_weight(self, value_ids=None, custom_vals=None): - """Computes the weight of the configured product based on the - configuration passed in via value_ids and custom_values - - :param value_ids: list of attribute value_ids - :param custom_vals: dictionary of custom attribute values - :returns: final configuration weight""" - - if value_ids is None: - value_ids = self.value_ids.ids - - if custom_vals is None: - custom_vals = {} - - product_tmpl = self.product_tmpl_id - - self = self.with_context(active_id=product_tmpl.id) - - value_ids = flatten(value_ids) - - weight_extra = 0.0 - product_attr_val_obj = self.env["product.template.attribute.value"] - product_tmpl_attr_values = product_attr_val_obj.search( - [ - ("product_tmpl_id", "in", product_tmpl.ids), - ("product_attribute_value_id", "in", value_ids), - ] - ) - for product_tmpl_attr_val in product_tmpl_attr_values: - weight_extra += product_tmpl_attr_val.weight_extra - - return product_tmpl.weight + weight_extra - - @api.depends( - "value_ids", - "product_tmpl_id", - "product_tmpl_id.attribute_line_ids", - "product_tmpl_id.attribute_line_ids.value_ids", - "product_tmpl_id.attribute_line_ids.product_template_value_ids", - "product_tmpl_id.attribute_line_ids.product_template_value_ids" ".weight_extra", - ) - def _compute_cfg_weight(self): - for cfg_session in self: - cfg_session.weight = cfg_session.get_cfg_weight() - - def _compute_currency_id(self): - main_company = self.env["res.company"]._get_main_company() - for session in self: - template = session.product_tmpl_id - session.currency_id = ( - template.company_id.sudo().currency_id.id or main_company.currency_id.id - ) - - name = fields.Char(string="Configuration Session Number", readonly=True) - config_step = fields.Char(string="Configuration Step ID") - config_step_name = fields.Char( - compute="_compute_config_step_name", string="Configuration Step" - ) - product_id = fields.Many2one( - comodel_name="product.product", - name="Configured Variant", - ondelete="cascade", - ) - product_tmpl_id = fields.Many2one( - comodel_name="product.template", - domain=[("config_ok", "=", True)], - string="Configurable Template", - required=True, - ) - value_ids = fields.Many2many( - comodel_name="product.attribute.value", - relation="product_config_session_attr_values_rel", - column1="cfg_session_id", - column2="attr_val_id", - ) - user_id = fields.Many2one(comodel_name="res.users", required=True, string="User") - custom_value_ids = fields.One2many( - comodel_name="product.config.session.custom.value", - inverse_name="cfg_session_id", - string="Custom Values", - ) - price = fields.Float( - compute="_compute_cfg_price", - store=True, - digits="Product Price", - ) - currency_id = fields.Many2one( - comodel_name="res.currency", - string="Currency", - compute="_compute_currency_id", - ) - state = fields.Selection( - required=True, - selection=[("draft", "Draft"), ("done", "Done")], - default="draft", - ) - weight = fields.Float(compute="_compute_cfg_weight", digits="Stock Weight") - # Product preset - product_preset_id = fields.Many2one( - comodel_name="product.product", - string="Preset", - domain="[('product_tmpl_id', '=', product_tmpl_id),\ - ('config_preset_ok', '=', True)]", - ) - - def action_confirm(self, product_id=None): - for session in self: - if product_id is None: - product_id = session.create_get_variant() - session.write({"state": "done", "product_id": product_id.id}) - return True - - @api.constrains("state") - def _check_product_id(self): - for session in self.filtered(lambda s: s.state == "done"): - if not session.product_id: - raise ValidationError( - _("Finished configuration session must have a " "product_id linked") - ) - - def update_session_configuration_value(self, vals, product_tmpl_id=None): - """Update value of configuration in current session - - :param: vals: Dictionary of fields(of configution wizard) and values - :param: product_tmpl_id: record set of preoduct template - :return: True/False - """ - self.ensure_one() - if not product_tmpl_id: - product_tmpl_id = self.product_tmpl_id - - product_configurator_obj = self.env["product.configurator"] - field_prefix = product_configurator_obj._prefixes.get("field_prefix") - custom_field_prefix = product_configurator_obj._prefixes.get( - "custom_field_prefix" - ) - - custom_val = self.get_custom_value_id() - - attr_val_dict = {} - custom_val_dict = {} - for attr_line in product_tmpl_id.attribute_line_ids: - attr_id = attr_line.attribute_id.id - field_name = field_prefix + str(attr_id) - custom_field_name = custom_field_prefix + str(attr_id) - - if field_name not in vals and custom_field_name not in vals: - continue - - # Add attribute values from the client except custom attribute - # If a custom value is being written, but field name is not in - # the write dictionary, then it must be a custom value! - if vals.get(field_name, custom_val.id) != custom_val.id: - if attr_line.multi and isinstance(vals[field_name], list): - if not vals[field_name]: - field_val = None - else: - field_val = vals[field_name][0][2] - elif not attr_line.multi and isinstance(vals[field_name], int): - field_val = vals[field_name] - else: - raise UserError( - _( - "An error occurred while parsing value for attribute %s", - attr_line.attribute_id.name, - ) - ) - attr_val_dict.update({attr_id: field_val}) - # Ensure there is no custom value stored if we have switched - # from custom value to selected attribute value. - if attr_line.custom: - custom_val_dict.update({attr_id: False}) - elif attr_line.custom: - val = vals.get(custom_field_name, False) - if attr_line.attribute_id.custom_type == "binary": - # TODO: Add widget that enables multiple file uploads - val = [{"name": "custom", "datas": vals[custom_field_name]}] - custom_val_dict.update({attr_id: val}) - # Ensure there is no standard value stored if we have switched - # from selected value to custom value. - attr_val_dict.update({attr_id: False}) - - self.update_config(attr_val_dict, custom_val_dict) - - def update_config(self, attr_val_dict=None, custom_val_dict=None): - """Update the session object with the given value_ids and custom values. - - Use this method instead of write in order to prevent incompatible - configurations as this removed duplicate values for the same attribute. - - :param attr_val_dict: Dictionary of the form { - int (attribute_id): attribute_value_id OR [attribute_value_ids] - } - - :custom_val_dict: Dictionary of the form { - int (attribute_id): { - 'value': 'custom val', - OR - 'attachment_ids': { - [{ - 'name': 'attachment name', - 'datas': base64_encoded_string - }] - } - } - } - - """ - if attr_val_dict is None: - attr_val_dict = {} - if custom_val_dict is None: - custom_val_dict = {} - update_vals = {} - - value_ids = self.value_ids.ids - for attr_id, vals in attr_val_dict.items(): - attr_val_ids = self.value_ids.filtered( - lambda x, attr_id=attr_id: x.attribute_id.id == int(attr_id) - ).ids - # Remove all values for this attribute and add vals from dict - value_ids = list(set(value_ids) - set(attr_val_ids)) - if not vals: - continue - if isinstance(vals, list): - value_ids += vals - elif isinstance(vals, int): - value_ids.append(vals) - - if value_ids != self.value_ids.ids: - update_vals.update({"value_ids": [(6, 0, value_ids)]}) - - # Remove all custom values included in the custom_vals dict - self.custom_value_ids.filtered( - lambda x: x.attribute_id.id in custom_val_dict.keys() - ).unlink() - - if custom_val_dict: - binary_field_ids = ( - self.env["product.attribute"] - .search( - [ - ("id", "in", list(custom_val_dict.keys())), - ("custom_type", "=", "binary"), - ] - ) - .ids - ) - else: - binary_field_ids = [] - - for attr_id, vals in custom_val_dict.items(): - if not vals: - continue - - if "custom_value_ids" not in update_vals: - update_vals["custom_value_ids"] = [] - - custom_vals = {"attribute_id": attr_id} - - if attr_id in binary_field_ids: - attachments = [ - ( - 0, - 0, - {"name": val.get("name"), "datas": val.get("datas")}, - ) - for val in vals - ] - custom_vals.update({"attachment_ids": attachments}) - else: - custom_vals.update({"value": vals}) - - update_vals["custom_value_ids"].append((0, 0, custom_vals)) - self.write(update_vals) - - def write(self, vals): - """Validate configuration when writing new values to session""" - # TODO: Issue warning when writing to value_ids or custom_val_ids - res = super().write(vals) - if not self.product_tmpl_id: - return res - value_ids = self.value_ids.ids - avail_val_ids = self.values_available(value_ids) - if set(value_ids) - set(avail_val_ids): - self.value_ids = [(6, 0, avail_val_ids)] - try: - self.validate_configuration(final=False) - except ValidationError as exc: - raise ValidationError(_(f"{exc}")) from exc - except Exception as exc: - raise ValidationError(_("Invalid Configuration")) from exc - return res - - @api.model_create_multi - def create(self, vals_list): - for vals in vals_list: - vals["name"] = self.env["ir.sequence"].next_by_code( - "product.config.session" - ) or _("New") - product_tmpl = ( - self.env["product.template"] - .browse(vals.get("product_tmpl_id")) - .exists() - ) - if product_tmpl: - default_val_ids = ( - product_tmpl.attribute_line_ids.filtered( - lambda line: line.default_val - ) - .mapped("default_val") - .ids - ) - value_ids = vals.get("value_ids") - if value_ids: - default_val_ids += value_ids[0][2] - try: - self.validate_configuration( - value_ids=default_val_ids, - final=False, - product_tmpl_id=product_tmpl.id, - ) - # TODO: Remove if cond when PR with - # raise error on github is merged - except ValidationError as exc: - raise ValidationError(_("%s") % exc.name) from exc - except Exception as exc: - raise ValidationError( - _( - "Default values provided generate an invalid " - "configuration" - ) - ) from exc - vals.update({"value_ids": [(6, 0, default_val_ids)]}) - return super().create(vals_list) - - def create_get_variant(self, value_ids=None, custom_vals=None): - """Creates a new product variant with the attributes passed - via value_ids and custom_values or retrieves an existing - one based on search result - - :param value_ids: list of product.attribute.values ids - :param custom_vals: dict {product.attribute.id: custom_value} - - :returns: new/existing product.product recordset - - """ - if self.product_tmpl_id.config_ok: - self.validate_configuration() - if value_ids is None: - value_ids = self.value_ids.ids - - if custom_vals is None: - custom_vals = self._get_custom_vals_dict() - - try: - self.validate_configuration() - except ValidationError as exc: - raise ValidationError(_("%s") % exc.name) from exc - except Exception as exc: - raise ValidationError(_("Invalid Configuration")) from exc - - duplicates = self.search_variant( - value_ids=value_ids, product_tmpl_id=self.product_tmpl_id - ) - if duplicates: - return duplicates[:1] - - vals = self.get_variant_vals(value_ids, custom_vals) - product_obj = ( - self.env["product.product"].sudo().with_context(mail_create_nolog=True) - ) - variant = product_obj.sudo().create(vals) - - variant.message_post( - body=_("Product created via configuration wizard"), - author_id=self.env.user.partner_id.id, - ) - - return variant - - def _get_option_values(self, pricelist, value_ids=None): - """Return only attribute values that have products attached with a - price set to them""" - if value_ids is None: - value_ids = self.value_ids.ids - - value_obj = self.env["product.attribute.value"].with_context( - pricelist=pricelist.id - ) - values = ( - value_obj.sudo() - .browse(value_ids) - .filtered(lambda x: x.product_id._get_contextual_price()) - ) - return values - - def get_components_prices(self, prices, pricelist, value_ids=None): - """Return prices of the components which make up the final - configured variant""" - if value_ids is None: - value_ids = self.value_ids.ids - vals = self._get_option_values(pricelist, value_ids) - for val in vals: - prices["vals"].append( - ( - val.attribute_id.name, - val.product_id.name, - val.product_id._get_contextual_price(), - ) - ) - product = val.product_id.with_context(pricelist=pricelist.id) - product_prices = product.taxes_id.sudo().compute_all( - price_unit=product._get_contextual_price(), - currency=pricelist.currency_id, - quantity=1, - product=self, - partner=self.env.user.partner_id, - ) - - total_included = product_prices["total_included"] - taxes = total_included - product_prices["total_excluded"] - prices["taxes"] += taxes - prices["total"] += total_included - return prices - - @api.model - def get_cfg_price(self, value_ids=None, custom_vals=None): - """Computes the price of the configured product based on the - configuration passed in via value_ids and custom_values - - :param value_ids: list of attribute value_ids - :param custom_vals: dictionary of custom attribute values - :returns: final configuration price""" - - if value_ids is None: - value_ids = self.value_ids.ids - - if custom_vals is None: - custom_vals = {} - - product_tmpl = self.product_tmpl_id - self = self.with_context(active_id=product_tmpl.id) - - value_ids = self.flatten_val_ids(value_ids) - - price_extra = 0.0 - attr_val_obj = self.env["product.attribute.value"] - av_ids = attr_val_obj.browse(value_ids) - extra_prices = attr_val_obj.get_attribute_value_extra_prices( - product_tmpl_id=product_tmpl.id, pt_attr_value_ids=av_ids - ) - price_extra = sum(extra_prices.values()) - return product_tmpl.list_price + price_extra - - def _get_config_image(self, value_ids=None, custom_vals=None, size=None): - """ - Retreive the image object that most closely resembles the configuration - code sent via value_ids list - - The default image object is the template (self) - :param value_ids: a list representing the ids of attribute values - (usually stored in the user's session) - :param custom_vals: dictionary of custom attribute values - :returns: path to the selected image - """ - # TODO: Also consider custom values for image change - if value_ids is None: - value_ids = self.value_ids.ids - - if custom_vals is None: - custom_vals = self._get_custom_vals_dict() - - img_obj = self.product_tmpl_id - max_matches = 0 - value_ids = self.flatten_val_ids(value_ids) - for line in self.product_tmpl_id.config_image_ids: - matches = len(set(line.value_ids.ids) & set(value_ids)) - if matches > max_matches: - img_obj = line - max_matches = matches - return img_obj - - def get_config_image(self, value_ids=None, custom_vals=None, size=None): - """ - Retreive the image object that most closely resembles the configuration - code sent via value_ids list - For more information check _get_config_image - """ - config_image_id = self._get_config_image( - value_ids=value_ids, custom_vals=custom_vals - ) - return config_image_id.image_1920 - - @api.model - def get_variant_vals(self, value_ids=None, custom_vals=None, **kwargs): - """Hook to alter the values of the product variant before creation - - :param value_ids: list of product.attribute.values ids - :param custom_vals: dict {product.attribute.id: custom_value} - - :returns: dictionary of values to pass to product.create() method - """ - self.ensure_one() - - if value_ids is None: - value_ids = self.value_ids.ids - - if custom_vals is None: - custom_vals = self._get_custom_vals_dict() - - image = self.get_config_image(value_ids) - ptav_ids = self.env["product.template.attribute.value"].search( - [ - ("product_tmpl_id", "=", self.product_tmpl_id.id), - ("product_attribute_value_id", "in", value_ids), - ] - ) - vals = { - "product_tmpl_id": self.product_tmpl_id.id, - "product_template_attribute_value_ids": [(6, 0, ptav_ids.ids)], - "taxes_id": [(6, 0, self.product_tmpl_id.taxes_id.ids)], - "image_1920": image, - } - return vals - - def get_session_search_domain(self, product_tmpl_id, state="draft", parent_id=None): - """Return domain to search session linked to given - product template and current login user""" - domain = [ - ("product_tmpl_id", "=", product_tmpl_id), - ("user_id", "=", self.env.uid), - ("state", "=", state), - ] - if parent_id: - domain.append(("parent_id", "=", parent_id)) - return domain - - def get_session_vals(self, product_tmpl_id, parent_id=None, user_id=None): - """Return the values for creating session""" - if not user_id: - user_id = self.env.user.id - vals = {"product_tmpl_id": product_tmpl_id, "user_id": user_id} - if parent_id: - vals.update(parent_id=parent_id) - return vals - - def get_next_step( - self, - state, - product_tmpl_id=False, - value_ids=False, - custom_value_ids=False, - ): - """Find and return next step if it exists. This usually - implies the next configuration step (if any) defined via the - config_step_line_ids on the product.template. - """ - - if not product_tmpl_id: - product_tmpl_id = self.product_tmpl_id - if value_ids is False: - value_ids = self.value_ids - if custom_value_ids is False: - custom_value_ids = self.custom_value_ids - if not state: - state = self.config_step - - cfg_step_lines = product_tmpl_id.config_step_line_ids - if not cfg_step_lines: - if (value_ids or custom_value_ids) and state != "select": - return False - elif not (value_ids or custom_value_ids) and state != "select": - raise UserError( - _( - "You must select at least one " - "attribute in order to configure a product" - ) - ) - else: - return "configure" - - adjacent_steps = self.get_adjacent_steps() - next_step = adjacent_steps.get("next_step") - open_step_lines = list( - map(lambda x: "%s" % (x), self.get_open_step_lines().ids) - ) - - session_config_step = self.config_step - if ( - session_config_step - and state != session_config_step - and session_config_step in open_step_lines - ): - next_step = self.config_step - else: - next_step = str(next_step.id) if next_step else None - if next_step: - pass - elif not (value_ids or custom_value_ids): - raise UserError( - _( - "You must select at least one " - "attribute in order to configure a product" - ) - ) - else: - return False - return next_step - - # TODO: Should be renamed to get_active_step_line - - @api.model - def get_active_step(self): - """Attempt to return product.config.step.line object that has the id - of the config session step stored as string""" - cfg_step_line_obj = self.env["product.config.step.line"] - - try: - cfg_step_line_id = int(self.config_step) - except ValueError: - cfg_step_line_id = None - - if cfg_step_line_id: - return cfg_step_line_obj.browse(cfg_step_line_id) - return cfg_step_line_obj - - @api.model - def get_open_step_lines(self, value_ids=None): - """ - Returns a recordset of configuration step lines open for access given - the configuration passed through value_ids - - e.g: Field A and B from configuration step 2 depend on Field C - from configuration step 1. Since fields A and B require action from - the previous step, configuration step 2 is deemed closed and redirect - is made for configuration step 1. - - :param value_ids: list of value.ids representing the - current configuration - :returns: recordset of accesible configuration steps - """ - - if value_ids is None: - value_ids = self.value_ids.ids - - open_step_lines = self.env["product.config.step.line"] - - for cfg_line in self.product_tmpl_id.config_step_line_ids: - for attr_line in cfg_line.attribute_line_ids: - available_vals = self.values_available( - attr_line.value_ids.ids, - value_ids, - product_template_attribute_line_id=attr_line.id, - ) - # TODO: Refactor when adding restriction to custom values - if available_vals or attr_line.custom: - open_step_lines |= cfg_line - break - - return open_step_lines.sorted() - - @api.model - def get_all_step_lines(self, product_tmpl_id=None): - """ - Returns a recordset of configuration step lines of product_tmpl_id - - :param product_tmpl_id: record-set of product.template - :returns: recordset of all configuration steps - """ - if not product_tmpl_id: - product_tmpl_id = self.product_tmpl_id - - open_step_lines = product_tmpl_id.config_step_line_ids - return open_step_lines.sorted() - - @api.model - def get_adjacent_steps(self, value_ids=None, active_step_line_id=None): - """Returns the previous and next steps given the configuration passed - via value_ids and the active step line passed via cfg_step_line_id.""" - - # If there is no open step return empty dictionary - - if value_ids is None: - value_ids = self.value_ids.ids - - if not active_step_line_id: - active_step_line_id = self.get_active_step().id - - config_step_lines = self.product_tmpl_id.config_step_line_ids - - if not config_step_lines: - return {} - - active_cfg_step_line = config_step_lines.filtered( - lambda line: line.id == active_step_line_id - ) - - open_step_lines = self.get_open_step_lines(value_ids) - - if not active_cfg_step_line: - return {"next_step": open_step_lines[0]} - - nr_steps = len(open_step_lines) - - adjacent_steps = {} - - for i, cfg_step in enumerate(open_step_lines): - if cfg_step == active_cfg_step_line: - adjacent_steps.update( - { - "next_step": None - if i + 1 == nr_steps - else open_step_lines[i + 1], - "previous_step": None if i == 0 else open_step_lines[i - 1], - } - ) - return adjacent_steps - - def check_and_open_incomplete_step(self, value_ids=None, custom_value_ids=None): - """Check and open incomplete step if any - :param value_ids: recordset of product.attribute.value - """ - if value_ids is None: - value_ids = self.value_ids - if custom_value_ids is None: - custom_value_ids = self.custom_value_ids - custom_attr_selected = custom_value_ids.mapped("attribute_id") - open_step_lines = self.get_open_step_lines() - step_to_open = False - for step in open_step_lines: - unset_attr_line = step.attribute_line_ids.filtered( - lambda attr_line: attr_line.required - and not any([value in value_ids for value in attr_line.value_ids]) - and not ( - attr_line.custom and attr_line.attribute_id in custom_attr_selected - ) - ) - check_val_ids = unset_attr_line.mapped("value_ids") - avail_val_ids = self.values_available( - check_val_ids.ids, - value_ids.ids, - product_tmpl_id=self.product_tmpl_id, - ) - if unset_attr_line and avail_val_ids: - step_to_open = step - break - if step_to_open: - return "%s" % (step_to_open.id) - return False - - @api.model - def get_variant_search_domain(self, product_tmpl_id, value_ids=None): - """Method called by search_variant used to search duplicates in the - database""" - - if value_ids is None: - value_ids = self.value_ids.ids - - domain = [ - ("product_tmpl_id", "=", product_tmpl_id.id), - ("config_ok", "=", True), - ] - pta_value_ids = self.env["product.template.attribute.value"].search( - [ - ("product_tmpl_id", "=", product_tmpl_id.id), - ("product_attribute_value_id", "in", value_ids), - ] - ) - for value_id in pta_value_ids: - domain.append(("product_template_attribute_value_ids", "=", value_id.id)) - return domain - - def validate_domains_against_sels(self, domains, value_ids=None, custom_vals=None): - if custom_vals is None: - custom_vals = self._get_custom_vals_dict() - - if value_ids is None: - value_ids = self.value_ids.ids - - # process domains as shown in this wikipedia pseudocode: - # https://en.wikipedia.org/wiki/Polish_notation#Order_of_operations - stack = [] - for domain in reversed(domains): - if isinstance(domain, tuple): - # evaluate operand and push to stack - if domain[1] == "in": - if not set(domain[2]) & set(value_ids): - stack.append(False) - continue - else: - if set(domain[2]) & set(value_ids): - stack.append(False) - continue - stack.append(True) - else: - # evaluate operator and previous 2 operands - # compute_domain() only inserts 'or' operators - # compute_domain() enforces 2 operands per operator - operand1 = stack.pop() - operand2 = stack.pop() - stack.append(operand1 or operand2) - - # 'and' operator is implied for remaining stack elements - avail = True - while stack: - avail &= stack.pop() - return avail - - @api.model - def values_available( - self, - check_val_ids=None, - value_ids=None, - custom_vals=None, - product_tmpl_id=None, - product_template_attribute_line_id=None, - ): - """Determines whether the attr_values from the product_template - are available for selection given the configuration ids and the - dependencies set on the product template - - :param check_val_ids: list of attribute value ids to check for - availability - :param value_ids: list of attribute value ids - :param custom_vals: custom values dict {attr_id: custom_val} - - :returns: list of available attribute values - """ - if check_val_ids is None: - check_val_ids = self.value_ids.ids - elif check_val_ids: - check_val_ids = check_val_ids.copy() - if not self.product_tmpl_id: - product_tmpl = self.env["product.template"].browse(product_tmpl_id) - else: - product_tmpl = self.product_tmpl_id - - product_tmpl.ensure_one() - - if product_template_attribute_line_id is not None: - product_template_attribute_lines = self.env[ - "product.template.attribute.line" - ].browse(product_template_attribute_line_id) - else: - product_template_attribute_lines = product_tmpl.attribute_line_ids - - if value_ids is None: - value_ids = self.value_ids.ids - elif value_ids: - value_ids = value_ids.copy() - - if custom_vals is None: - custom_vals = self._get_custom_vals_dict() - - avail_val_ids = [] - for attr_val_id in check_val_ids: - config_lines = product_tmpl.config_line_ids.filtered( - lambda line, attr_val_id=attr_val_id: attr_val_id in line.value_ids.ids - ) - if product_template_attribute_lines: - config_lines = config_lines.filtered( - lambda line: line.attribute_line_id - in product_template_attribute_lines - ) - domains = config_lines.mapped("domain_id").compute_domain() - avail = self.validate_domains_against_sels(domains, value_ids, custom_vals) - if avail: - avail_val_ids.append(attr_val_id) - elif attr_val_id in value_ids: - value_ids.remove(attr_val_id) - - return avail_val_ids - - @api.model - def get_extra_attribute_line_ids(self, product_template_id): - """Retrieve attribute lines defined on the product_template_id - which are not assigned to configuration steps""" - - extra_attribute_line_ids = ( - product_template_id.attribute_line_ids - - product_template_id.config_step_line_ids.mapped("attribute_line_ids") - ) - return extra_attribute_line_ids - - def check_attributes_configuration( - self, attribute_line_ids, custom_vals, value_ids, final=True - ): - for line in attribute_line_ids: - # Validate custom values - attr = line.attribute_id - if attr.id in custom_vals: - attr.validate_custom_val(custom_vals[attr.id]) - if final: - line_values = line._configurator_value_ids() - common_vals = set(value_ids) & set(line_values.ids) - custom_val = custom_vals.get(attr.id) - avail_val_ids = self.values_available( - check_val_ids=line_values.ids, - value_ids=value_ids, - product_tmpl_id=self.product_tmpl_id, - product_template_attribute_line_id=line.id, - ) - if ( - line.required - and avail_val_ids - and not common_vals - and not custom_val - ): - # TODO: Verify custom value type to be correct - raise ValidationError( - _("Required attribute '%s' is empty", attr.name) - ) - - @api.model - def validate_configuration( - self, - value_ids=None, - custom_vals=None, - product_tmpl_id=False, - final=True, - ): - """Verifies if the configuration values passed via value_ids and - custom_vals are valid - - :param value_ids: list of attribute value ids - :param custom_vals: custom values dict {attr_id: custom_val} - :param final: boolean marker to check required attributes. - pass false to check non-final configurations - - :returns: Error dict with reason of validation failure - or True - """ - # TODO: Raise ConfigurationError with reason - # Check if required values are missing for final configuration - if value_ids is None: - value_ids = self.value_ids.ids - - if product_tmpl_id: - product_tmpl = self.env["product.template"].browse(product_tmpl_id) - else: - product_tmpl = self.product_tmpl_id - - product_tmpl.ensure_one() - - if custom_vals is None: - custom_vals = self._get_custom_vals_dict() - open_step_lines = self.get_open_step_lines() - attribute_line_ids = open_step_lines.mapped("attribute_line_ids") - attribute_line_ids += self.get_extra_attribute_line_ids( - product_template_id=product_tmpl - ) - self.check_attributes_configuration( - attribute_line_ids, custom_vals, value_ids, final=final - ) - - # Check if all the values passed are not restricted - avail_val_ids = self.values_available( - value_ids, value_ids, product_tmpl_id=product_tmpl_id - ) - if set(value_ids) - set(avail_val_ids): - restrict_val = list(set(value_ids) - set(avail_val_ids)) - product_att_values = self.env["product.attribute.value"].browse( - restrict_val - ) - group_by_attr = {} - for val in product_att_values: - if val.attribute_id in group_by_attr: - group_by_attr[val.attribute_id] += val - else: - group_by_attr[val.attribute_id] = val - - message = _("The following values are not available:") - for attr, val in group_by_attr.items(): - message += "\n {}: {}".format(attr.name, ", ".join(val.mapped("name"))) - raise ValidationError(message) - - # Check if custom values are allowed - custom_attr_ids = ( - product_tmpl.attribute_line_ids.filtered("custom") - .mapped("attribute_id") - .ids - ) - if not set(custom_vals.keys()) <= set(custom_attr_ids): - custom_attrs_with_error = list( - set(custom_vals.keys()) - set(custom_attr_ids) - ) - custom_attrs_with_error = self.env["product.attribute"].browse( - custom_attrs_with_error - ) - error_message = _( - "The following custom values are not permitted " - "according to the product template - %s.\n\nIt is possible " - "that a change has been made to allowed custom values " - "while your configuration was in process. Please reset your " - "current session and start over or contact your administrator" - " in order to proceed." - ) - message_vals = "" - for attr_id in custom_attrs_with_error: - message_vals += f"\n {attr_id.name}: {custom_vals.get(attr_id.id)}" - raise ValidationError(error_message % (message_vals)) - - # Check if there are multiple values passed for non-multi attributes - mono_attr_lines = product_tmpl.attribute_line_ids.filtered( - lambda line: not line.multi - ) - attrs_with_error = {} - for line in mono_attr_lines: - if len(set(line.value_ids.ids) & set(value_ids)) > 1: - wrong_vals = self.env["product.attribute.value"].browse( - set(line.value_ids.ids) & set(value_ids) - ) - attrs_with_error[line.attribute_id] = wrong_vals - if attrs_with_error: - error_message = _( - "The following multi values are not permitted " - "according to the product template - %s.\n\nIt is possible " - "that a change has been made to allowed multi values " - "while your configuration was in process. Please reset your " - "current session and start over or contact your administrator" - " in order to proceed." - ) - message_vals = "" - for attr_id, vals in attrs_with_error.items(): - message_vals += "\n {}: {}".format( - attr_id.name, ", ".join(vals.mapped("name")) - ) - raise ValidationError(error_message % (message_vals)) - return True - - @api.model - def search_variant(self, value_ids=None, product_tmpl_id=None): - """Searches product.variants with given value_ids and custom values - given in the custom_vals dict - - :param value_ids: list of product.attribute.values ids - :param custom_vals: dict {product.attribute.id: custom_value} - - :returns: product.product recordset of products matching domain - """ - if value_ids is None: - value_ids = self.value_ids.ids - - custom_value_id = self.get_custom_value_id() - value_ids = list(set(value_ids) - set(custom_value_id.ids)) - - if not product_tmpl_id: - product_tmpl_id = self.product_tmpl_id - if not product_tmpl_id: - raise ValidationError( - _( - "Cannot conduct search on an empty config session " - "without product_tmpl_id kwarg" - ) - ) - - domain = self.get_variant_search_domain( - product_tmpl_id=product_tmpl_id, value_ids=value_ids - ) - products = self.env["product.product"].search(domain) - - # At this point, we might have found products with all of the passed - # in values, but it might have more attributes! These are NOT - # matches - more_attrs = products.filtered( - lambda p: len(p.product_template_attribute_value_ids) != len(value_ids) - ) - products -= more_attrs - return products - - def search_session(self, product_tmpl_id, parent_id=None): - domain = self.get_session_search_domain( - product_tmpl_id=product_tmpl_id, parent_id=parent_id - ) - session = self.search(domain, order="create_date desc", limit=1) - return session - - @api.model - def create_get_session( - self, product_tmpl_id, parent_id=None, force_create=False, user_id=None - ): - if not force_create: - session = self.search_session( - product_tmpl_id=product_tmpl_id, parent_id=parent_id - ) - if session: - return session - vals = self.get_session_vals( - product_tmpl_id=product_tmpl_id, - parent_id=parent_id, - user_id=user_id, - ) - return self.create(vals) - - # TODO: Disallow duplicates - - def flatten_val_ids(self, value_ids): - """Return a list of value_ids from a list with a mix of ids - and list of ids (multiselection) - - :param value_ids: list of value ids or mix of ids and list of ids - (e.g: [1, 2, 3, [4, 5, 6]]) - :returns: flattened list of ids ([1, 2, 3, 4, 5, 6])""" - flat_val_ids = set(flatten(value_ids)) - return list(flat_val_ids) - - def formatPrices(self, prices=None, dp="Product Price"): - if prices is None: - prices = {} - dp = None - prices["taxes"] = formatLang(self.env, prices["taxes"], monetary=True, dp=dp) - prices["total"] = formatLang(self.env, prices["total"], monetary=True, dp=dp) - prices["vals"] = [ - (v[0], v[1], formatLang(self.env, v[2], monetary=True, dp=dp)) - for v in prices["vals"] - ] - return prices - - def encode_custom_values(self, custom_vals): - """Hook to alter the values of the custom values before creating - or writing - :param custom_vals: dict {product.attribute.id: custom_value} - :returns: list of custom values compatible with write and create - """ - attr_obj = self.env["product.attribute"] - binary_attribute_ids = attr_obj.search([("custom_type", "=", "binary")]).ids - custom_lines = [] - - for key, val in custom_vals.items(): - custom_vals = {"attribute_id": key} - # TODO: Is this extra check neccesairy as we already make - # the check in validate_configuration? - attr_obj.browse(key).validate_custom_val(val) - if key in binary_attribute_ids: - custom_vals.update({"attachment_ids": [(6, 0, val.ids)]}) - else: - custom_vals.update({"value": val}) - custom_lines.append((0, 0, custom_vals)) - return custom_lines - - @api.model - def get_child_specification(self, model, parent): - """return dictiory of onchange specification by - appending parent before each key""" - model_obj = self.env[model] - specs = model_obj._onchange_spec() - new_specs = {} - for key, val in specs.items(): - new_specs[f"{parent}.{key}"] = val - return new_specs - - @api.model - def get_onchange_specifications(self, model): - """return onchange specification - - same functionality by _onchange_spec - - needed this method because odoo don't add specification for fields - one2many or many2many there is view-reference(using : tree_view_ref) - intead of view in that field""" - model_obj = self.env[model] - specs = model_obj._onchange_spec() - for name, field in model_obj._fields.items(): - if field.type not in ["one2many", "many2many"]: - continue - ch_specs = self.get_child_specification( - model=field.comodel_name, parent=name - ) - specs.update(ch_specs) - return specs - - @api.model - def get_vals_to_write(self, values, model): - """Return values in formate excepted by write/create methods - - same functionality by _convert_to_write - - needed this method because odoo don't call convert to write - for the many2many/one2many fields""" - model_obj = self.env[model] - values = model_obj._convert_to_write(values) - fields = model_obj._fields - for key, vals in values.items(): - if not isinstance(vals, list): - continue - new_lst = [] - for line in vals: - new_line = line - if line and isinstance(line[-1], dict): - new_line = line[:-1] + ( - self.get_vals_to_write( - values=line[-1], model=fields[key].comodel_name - ), - ) - new_lst.append(new_line) - values[key] = new_lst - return values - - -class ProductConfigSessionCustomValue(models.Model): - _name = "product.config.session.custom.value" - _rec_name = "attribute_id" - _description = "Product Config Session Custom Value" - - @api.depends("attribute_id", "attribute_id.uom_id") - def _compute_val_name(self): - for attr_val_custom in self: - uom = attr_val_custom.attribute_id.uom_id.name - attr_val_custom.name = "{}{}".format( - attr_val_custom.value, - (" %s" % uom) or "", - ) - - name = fields.Char(readonly=True, compute="_compute_val_name", store=True) - attribute_id = fields.Many2one( - comodel_name="product.attribute", string="Attribute", required=True - ) - cfg_session_id = fields.Many2one( - comodel_name="product.config.session", - required=True, - ondelete="cascade", - string="Session", - ) - value = fields.Char(help="Custom value held as string") - attachment_ids = fields.Many2many( - comodel_name="ir.attachment", - relation="product_config_session_custom_value_attachment_rel", - column1="cfg_sesion_custom_val_id", - column2="attachment_id", - string="Attachments", - ) - - def eval(self): - """Return custom value evaluated using the related custom field type""" - field_type = self.attribute_id.custom_type - if field_type == "binary": - vals = self.attachment_ids.mapped("datas") - if len(vals) == 1: - return vals[0] - return vals - elif field_type == "integer": - return int(self.value) - elif field_type == "float": - return float(self.value) - return self.value - - @api.constrains("cfg_session_id", "attribute_id") - def unique_attribute(self): - for custom_val in self: - values = custom_val.cfg_session_id.custom_value_ids - if ( - len( - values.filtered( - lambda x, custom_val=custom_val: x.attribute_id - == custom_val.attribute_id - ) - ) - > 1 - ): - raise ValidationError( - _("Configuration cannot have the " "same value inserted twice") - ) - - # @api.constrains('cfg_session_id.value_ids') - # def custom_only(self): - # """Verify that the attribute_id is not present in vals as well""" - # import ipdb;ipdb.set_trace() - # if self.cfg_session_id.value_ids.filtered( - # lambda x: x.attribute_id == self.attribute_id): - # raise ValidationError( - # _("Configuration cannot have a selected option and a custom " - # "value with the same attribute") - # ) - - @api.constrains("attachment_ids", "value") - def check_custom_type(self): - for custom_val in self: - custom_type = custom_val.attribute_id.custom_type - if custom_val.value and custom_type == "binary": - raise ValidationError( - _( - "Attribute custom type is binary, attachments are the " - "only accepted values with this custom field type" - ) - ) - if custom_val.attachment_ids and custom_type != "binary": - raise ValidationError( - _( - "Attribute custom type must be 'binary' for saving " - "attachments to custom value" - ) - ) diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/readme/CONTRIBUTORS.rst deleted file mode 100644 index 6afa1541..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,3 +0,0 @@ -* `Aion Tech `_: - - * Simone Rubino diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/readme/DESCRIPTION.rst b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/readme/DESCRIPTION.rst deleted file mode 100644 index a0b4c651..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/readme/DESCRIPTION.rst +++ /dev/null @@ -1,2 +0,0 @@ -This module has all the mechanics to support product configuration. It serves as a base -dependency for configuration interfaces. diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/security/configurator_security.xml b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/security/configurator_security.xml deleted file mode 100644 index 8d7f835f..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/security/configurator_security.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - Product Configurator - - - - User - - - - - - Manager - - - - - - - - - - - - - - diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/security/ir.model.access.csv b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/security/ir.model.access.csv deleted file mode 100644 index d9bfcf08..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/security/ir.model.access.csv +++ /dev/null @@ -1,40 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -product_configurator_config_line,Config Line,model_product_config_line,group_product_configurator,1,0,0,0 -product_configurator_config_image,Config Image,model_product_config_image,group_product_configurator,1,0,0,0 -product_configurator_config_step,Config Step,model_product_config_step,group_product_configurator,1,0,0,0 -product_configurator_config_step_line,Config Step Line,model_product_config_step_line,group_product_configurator,1,0,0,0 -product_configurator_config_domain,Config Domain,model_product_config_domain,group_product_configurator,1,0,0,0 -product_configurator_config_domain_line,Config Domain Line,model_product_config_domain_line,group_product_configurator,1,0,0,0 -product_configurator_custom_attribute_value,Attribute Value Line,model_product_attribute_value_line,group_product_configurator,1,0,0,0 -product_configurator_config_session,Config Session,model_product_config_session,group_product_configurator,1,1,1,1 -product_configurator_config_session_custom_value,Config Session Custom Value,model_product_config_session_custom_value,group_product_configurator,1,1,1,1 -user_config_line,User Config Line,model_product_config_line,base.group_user,1,0,0,0 -user_config_image,User Config Image,model_product_config_image,base.group_user,1,0,0,0 -user_config_step,User Config Step,model_product_config_step,base.group_user,1,0,0,0 -user_config_step_line,User Config Step Line,model_product_config_step_line,base.group_user,1,0,0,0 -user_config_domain_line,User Config Domain Line,model_product_config_domain_line,base.group_user,1,0,0,0 -user_config_domain,User Config Domain,model_product_config_domain,base.group_user,1,0,0,0 -user_custom_attribute_value,User Attribute Value Line,model_product_attribute_value_line,base.group_user,1,0,0,0 -user_config_session,User Config Session,model_product_config_session,base.group_user,1,0,0,0 -user_config_session_custom_value,User Config Session Custom Value,model_product_config_session_custom_value,base.group_user,1,0,0,0 -portal_config_image,Portal Config Image,model_product_config_image,base.group_portal,1,0,0,0 -portal_config_step,Portal Config Step,model_product_config_step,base.group_portal,1,0,0,0 -portal_config_session,Portal Config Session,model_product_config_session,base.group_portal,1,0,0,0 -portal_config_session_custom_value,Portal Config Session Custom Value,model_product_config_session_custom_value,base.group_portal,1,0,0,0 -portal_configurator_config_line,Portal Config Line,model_product_config_line,base.group_portal,1,0,0,0 -portal_configurator_config_step_line,Portal Config Step Line,model_product_config_step_line,base.group_portal,1,0,0,0 -portal_configurator_config_domain,Portal Config Domain,model_product_config_domain,base.group_portal,1,0,0,0 -portal_configurator_config_domain_line,Portal Config Domain Line,model_product_config_domain_line,base.group_portal,1,0,0,0 -product_configurator_config_line_manager,Config Line Manager,product_configurator.model_product_config_line,product_configurator.group_product_configurator_manager,1,1,1,1 -product_configurator_config_image_manager,Config Image Manager,product_configurator.model_product_config_image,product_configurator.group_product_configurator_manager,1,1,1,1 -product_configurator_config_step_manager,Config Step Manager,product_configurator.model_product_config_step,product_configurator.group_product_configurator_manager,1,1,1,1 -product_configurator_config_step_line_manager,Config Step Line Manager,product_configurator.model_product_config_step_line,product_configurator.group_product_configurator_manager,1,1,1,1 -product_configurator_config_domain_manager,Config Domain Manager,product_configurator.model_product_config_domain,product_configurator.group_product_configurator_manager,1,1,1,1 -product_configurator_config_domain_line_manager,Config Domain Line Manager,product_configurator.model_product_config_domain_line,product_configurator.group_product_configurator_manager,1,1,1,1 -product_configurator_custom_attribute_value_manager,Attribute Value Line Manager,product_configurator.model_product_attribute_value_line,product_configurator.group_product_configurator_manager,1,1,1,1 -access_product_template_product_config_user,product.template Product Config user,product.model_product_template,product_configurator.group_product_configurator,1,0,0,0 -access_product_template_product_config_manager,product.template Product Config Manager,product.model_product_template,product_configurator.group_product_configurator_manager,1,1,1,1 -access_product_product_product_config_user,product.product Product Config user,product.model_product_product,product_configurator.group_product_configurator,1,0,0,0 -access_product_product_product_config_manager,product.product Product Config Manager,product.model_product_product,product_configurator.group_product_configurator_manager,1,1,1,1 -access_product_attribute_line_product_config_manager,product.attribute line Product Config Manager,product.model_product_template_attribute_line,product_configurator.group_product_configurator_manager,1,1,1,1 -access_product_configurator_group,product_configurator,model_product_configurator,product_configurator.group_product_configurator,1,1,1,1 diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/configurable-template.png b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/configurable-template.png deleted file mode 100644 index 860c818e..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/configurable-template.png and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/cover.png b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/cover.png deleted file mode 100644 index be5e2578..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/cover.png and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/icon.png b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/icon.png deleted file mode 100644 index d5d307c6..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/icon.png and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/index.html b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/index.html deleted file mode 100644 index b30bc621..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/index.html +++ /dev/null @@ -1,75 +0,0 @@ -
-
-
-

Odoo Product Configurator

-

Generate products on-demand, easy and error-free

-
-
-
- Pledra -
-
-
-
- -
-
-

Select your template

-
-
- -
-
-
-
- -
-
-

Choose your options and get live image updates

-
-
- -
-
-
-
- -
-
-

Custom values and multiple selections supported

-
-
- -
-
-
-
- -
-
-

The wizard is generated automatically for you!

-

Just define the attributes and rules on the template and you are done

-
-
- -
-
-
-
- -
-
-

Compatible with Odoo Enterprise and Community

-

Odoo versions supported: 8 / 9 / 10

-
-
- -
-
-
-
- -
-
-
-
diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/odoo-community-interface.png b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/odoo-community-interface.png deleted file mode 100644 index e741d615..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/odoo-community-interface.png and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/odoo-enterprise-interface.png b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/odoo-enterprise-interface.png deleted file mode 100644 index 5b13b3dd..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/odoo-enterprise-interface.png and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/pledra-logo.png b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/pledra-logo.png deleted file mode 100644 index b82d4ab0..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/pledra-logo.png and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/quotation-updated.png b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/quotation-updated.png deleted file mode 100644 index 8b0f5aaf..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/quotation-updated.png and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/quotation.png b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/quotation.png deleted file mode 100644 index 8ed80138..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/quotation.png and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/wizard-color.png b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/wizard-color.png deleted file mode 100644 index 396e046b..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/wizard-color.png and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/wizard-last-step.png b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/wizard-last-step.png deleted file mode 100644 index 3d89020d..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/wizard-last-step.png and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/wizard-template.png b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/wizard-template.png deleted file mode 100644 index 948ce549..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/description/wizard-template.png and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-black-star-spoke-384.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-black-star-spoke-384.jpg deleted file mode 100644 index a20f5552..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-black-star-spoke-384.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-black-star-spoke-387.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-black-star-spoke-387.jpg deleted file mode 100644 index f7fa6043..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-black-star-spoke-387.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-black.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-black.jpg deleted file mode 100644 index 77584cb0..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-black.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-red-star-spoke-384.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-red-star-spoke-384.jpg deleted file mode 100644 index 47b2937e..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-red-star-spoke-384.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-red-star-spoke-387.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-red-star-spoke-387.jpg deleted file mode 100644 index 92d4f1ab..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-red-star-spoke-387.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-silver-star-spoke-384.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-silver-star-spoke-384.jpg deleted file mode 100644 index 5e747277..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-silver-star-spoke-384.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-silver-star-spoke-387.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-silver-star-spoke-387.jpg deleted file mode 100644 index b62f75fc..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-silver-star-spoke-387.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-silver.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-silver.jpg deleted file mode 100644 index 2c5e003a..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe-silver.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe.jpg deleted file mode 100644 index 0e4b3df7..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/2-series-coupe.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-advantage.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-advantage.jpg deleted file mode 100644 index 60a6e1c1..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-advantage.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-armrest.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-armrest.jpg deleted file mode 100644 index 97ab6c95..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-armrest.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-engine.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-engine.jpg deleted file mode 100644 index 2f1b6f6b..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-engine.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-luxury-line.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-luxury-line.jpg deleted file mode 100644 index 0fd9248e..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-luxury-line.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-m-sport.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-m-sport.jpg deleted file mode 100644 index 0cfc029d..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-m-sport.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-paint-silver.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-paint-silver.jpg deleted file mode 100644 index b49c8619..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-paint-silver.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-smoker-package.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-smoker-package.jpg deleted file mode 100644 index 8cdaf374..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-smoker-package.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-sport-line.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-sport-line.jpg deleted file mode 100644 index 7f18487a..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-sport-line.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-sunroof.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-sunroof.jpg deleted file mode 100644 index 11c5c875..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-sunroof.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-towhook.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-towhook.jpg deleted file mode 100644 index 2f4d10f8..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-towhook.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-transmission-steptronic-sport.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-transmission-steptronic-sport.jpg deleted file mode 100644 index 84e49563..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-transmission-steptronic-sport.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-transmission-steptronic.jpg b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-transmission-steptronic.jpg deleted file mode 100644 index a46a0f7f..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/img/product-transmission-steptronic.jpg and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/src/js/boolean_button_widget.esm.js b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/src/js/boolean_button_widget.esm.js deleted file mode 100644 index 0973764b..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/src/js/boolean_button_widget.esm.js +++ /dev/null @@ -1,58 +0,0 @@ -/** @odoo-module **/ -const {onMounted, onRendered, useRef, useState} = owl; -import {BooleanField} from "@web/views/fields/boolean/boolean_field"; -import {registry} from "@web/core/registry"; -import {standardFieldProps} from "@web/views/fields/standard_field_props"; - -export class BooleanButtonField extends BooleanField { - setup() { - super.setup(); - this.state1 = useState({value: 0}); - this.root = useRef("root"); - onMounted(() => { - this.updateConfigurableButton(); - }); - onRendered(() => { - this.updateConfigurableButton(); - }); - } - - onChange() { - this.state1.value++; - } - - updateConfigurableButton() { - this.text = this.props.value - ? this.props.activeString - : this.props.inactiveString; - this.hover = this.props.value - ? this.props.inactiveString - : this.props.activeString; - var val_color = this.props.value ? "text-success" : "text-danger"; - var hover_color = this.props.value ? "text-danger" : "text-success"; - var $val = $("") - .addClass("o_stat_text o_boolean_button o_not_hover " + val_color) - .text(this.text); - var $hover = $("") - .addClass("o_stat_text o_boolean_button o_hover d-none " + hover_color) - .text(this.hover); - $(this.root.el).empty(); - $(this.root.el).append($val).append($hover); - } -} - -BooleanButtonField.props = { - ...standardFieldProps, - activeString: {type: String, optional: true}, - inactiveString: {type: String, optional: true}, -}; - -BooleanButtonField.extractProps = ({attrs}) => { - return { - activeString: attrs.options.active, - inactiveString: attrs.options.inactive, - }; -}; - -BooleanButtonField.template = "product_configurator.BooleanButtonField"; -registry.category("fields").add("boolean_button", BooleanButtonField); diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/src/js/boolean_button_widget.xml b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/src/js/boolean_button_widget.xml deleted file mode 100644 index b1d6447d..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/src/js/boolean_button_widget.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - -
- -
-
- -
diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/src/js/form_controller.esm.js b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/src/js/form_controller.esm.js deleted file mode 100644 index 398fbd01..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/src/js/form_controller.esm.js +++ /dev/null @@ -1,14 +0,0 @@ -/** @odoo-module **/ - -import {FormController} from "@web/views/form/form_controller"; -import {patch} from "@web/core/utils/patch"; - -patch(FormController.prototype, "Manage special=no_save", { - async beforeExecuteActionButton(clickParams) { - if (clickParams.special === "no_save") { - delete clickParams.special; - return true; - } - return this._super(...arguments); - }, -}); diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/src/js/form_widgets.js b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/src/js/form_widgets.js deleted file mode 100644 index 6c485492..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/src/js/form_widgets.js +++ /dev/null @@ -1,71 +0,0 @@ -odoo.define("product_configurator.FieldBooleanButton", function (require) { - "use strict"; - - var FormController = require("web.FormController"); - var ListController = require("web.ListController"); - var KanbanController = require("web.KanbanController"); - - var pyUtils = require("web.py_utils"); - - FormController.include({ - /* eslint-disable no-unused-vars*/ - renderButtons: function ($node) { - var self = this; - this._super.apply(this, arguments); - if ( - self.modelName === "product.product" && - self.initialState.context.custom_create_variant - ) { - this.$buttons.find(".o_form_button_create").css("display", "none"); - } - }, - /* eslint-disable no-unused-vars*/ - - _onButtonClicked: function (event) { - var self = this; - var attrs = event.data.attrs; - if (event.data.attrs.context) { - var record_ctx = self.model.get(event.data.record.id).context; - var btn_ctx = pyUtils.eval( - "context", - record_ctx, - event.data.attrs.context - ); - self.model.localData[event.data.record.id].context = _.extend( - {}, - btn_ctx, - record_ctx - ); - } - this._super(event); - }, - }); - ListController.include({ - /* eslint-disable no-unused-vars*/ - renderButtons: function ($node) { - var self = this; - this._super.apply(this, arguments); - if ( - self.modelName === "product.product" && - self.initialState.context.custom_create_variant - ) { - this.$buttons.find(".o_list_button_add").css("display", "none"); - } - }, - /* eslint-disable no-unused-vars*/ - }); - KanbanController.include({ - /* eslint-disable no-unused-vars*/ - renderButtons: function ($node) { - var self = this; - this._super.apply(this, arguments); - if ( - self.modelName === "product.product" && - self.initialState.context.custom_create_variant - ) { - this.$buttons.find(".o-kanban-button-new").css("display", "none"); - } - }, - /* eslint-disable no-unused-vars*/ - }); -}); diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/src/js/relational_fields.js b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/src/js/relational_fields.js deleted file mode 100644 index cabb0950..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/src/js/relational_fields.js +++ /dev/null @@ -1,26 +0,0 @@ -odoo.define("product_configurator.FieldStatus", function (require) { - "use strict"; - - var fields = require("web.relational_fields"); - var FieldStatus = fields.FieldStatus; - - FieldStatus.include({ - /* Prase input as string in order to have a clickable statusbar*/ - _onClickStage: function (e) { - this._setValue(String($(e.currentTarget).data("value"))); - }, - }); - - /* Bug from odoo: in case of widget many2many_tags $input and $el do not exist - in 'this', so it returns 'undefine', but setIDForLabel(method in AbstractField) - expecting getFocusableElement always return object*/ - fields.FieldMany2One.include({ - getFocusableElement: function () { - var element = this._super.apply(this, arguments); - if (element === undefined) { - return $(); - } - return element; - }, - }); -}); diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/src/scss/form_widget.scss b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/src/scss/form_widget.scss deleted file mode 100644 index 7a9323bc..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/static/src/scss/form_widget.scss +++ /dev/null @@ -1,20 +0,0 @@ -.oe_stat_button { - &:hover { - .o_boolean_button.o_not_hover { - display: none; - } - .o_boolean_button.o_hover { - display: inline-block !important; - } - } -} - -.oe_prod_config_image { - img { - min-height: 30px; - } -} - -.pull-right { - float: right; -} diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/__init__.py b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/__init__.py deleted file mode 100644 index 9991dba4..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -from . import test_create -from . import test_configuration_rules -from . import test_product -from . import test_product_attribute -from . import test_product_config -from . import test_wizard diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/common.py b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/common.py deleted file mode 100644 index d4adb4e4..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/common.py +++ /dev/null @@ -1,116 +0,0 @@ -from odoo.addons.base.tests.common import BaseCommon - - -class ProductConfiguratorTestCases(BaseCommon): - @classmethod - def setUpClass(cls): - super().setUpClass() - cls.ProductConfWizard = cls.env["product.configurator"] - cls.config_product = cls.env.ref("product_configurator.bmw_2_series") - cls.product_category = cls.env.ref("product.product_category_5") - # attributes - cls.attr_fuel = cls.env.ref("product_configurator.product_attribute_fuel") - cls.attr_engine = cls.env.ref("product_configurator.product_attribute_engine") - cls.attr_color = cls.env.ref("product_configurator.product_attribute_color") - cls.attr_rims = cls.env.ref("product_configurator.product_attribute_rims") - cls.attr_model_line = cls.env.ref( - "product_configurator.product_attribute_model_line" - ) - cls.attr_tapistry = cls.env.ref( - "product_configurator.product_attribute_tapistry" - ) - cls.attr_transmission = cls.env.ref( - "product_configurator.product_attribute_transmission" - ) - cls.attr_options = cls.env.ref("product_configurator.product_attribute_options") - - # values - cls.value_gasoline = cls.env.ref( - "product_configurator.product_attribute_value_gasoline" - ) - cls.value_218i = cls.env.ref( - "product_configurator.product_attribute_value_218i" - ) - cls.value_220i = cls.env.ref( - "product_configurator.product_attribute_value_220i" - ) - cls.value_red = cls.env.ref("product_configurator.product_attribute_value_red") - cls.value_rims_378 = cls.env.ref( - "product_configurator.product_attribute_value_rims_378" - ) - cls.value_sport_line = cls.env.ref( - "product_configurator.product_attribute_value_sport_line" - ) - cls.value_model_sport_line = cls.env.ref( - "product_configurator.product_attribute_value_model_sport_line" - ) - cls.value_tapistry = cls.env.ref( - "product_configurator.product_attribute_value_tapistry" + "_oyster_black" - ) - cls.value_transmission = cls.env.ref( - "product_configurator.product_attribute_value_steptronic" - ) - cls.value_options_1 = cls.env.ref( - "product_configurator.product_attribute_value_smoker_package" - ) - cls.value_options_2 = cls.env.ref( - "product_configurator.product_attribute_value_sunroof" - ) - - @classmethod - def _configure_product_nxt_step(cls): - product_config_wizard = cls.ProductConfWizard.create( - { - "product_tmpl_id": cls.config_product.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{cls.attr_fuel.id}": cls.value_gasoline.id, - f"__attribute_{cls.attr_engine.id}": cls.value_218i.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{cls.attr_color.id}": cls.value_red.id, - f"__attribute_{cls.attr_rims.id}": cls.value_rims_378.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{cls.attr_model_line.id}": cls.value_sport_line.id, - } - ) - product_config_wizard.action_previous_step() - product_config_wizard.action_previous_step() - product_config_wizard.write( - { - f"__attribute_{cls.attr_engine.id}": cls.value_220i.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.action_next_step() - vals = { - f"__attribute_{cls.attr_model_line.id}": cls.value_model_sport_line.id, - } - product_config_wizard.write(vals) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{cls.attr_tapistry.id}": cls.value_tapistry.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{cls.attr_transmission.id}": cls.value_transmission.id, - f"__attribute_{cls.attr_options.id}": [ - [6, 0, [cls.value_options_2.id]] - ], - } - ) - - return product_config_wizard.action_next_step() diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/test_configuration_rules.py b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/test_configuration_rules.py deleted file mode 100644 index 7419a3fc..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/test_configuration_rules.py +++ /dev/null @@ -1,324 +0,0 @@ -# Copyright 2024 Simone Rubino - Aion Tech -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - -from odoo import SUPERUSER_ID, Command -from odoo.exceptions import ValidationError -from odoo.fields import first -from odoo.tests.common import Form, TransactionCase -from odoo.tools.safe_eval import safe_eval - - -class ConfigurationRules(TransactionCase): - @classmethod - def setUpClass(cls): - super().setUpClass() - # The product attribute view only shows configuration fields - # (such as `val_custom`) - # when called with a specific context - # that is set by this action - configuration_attributes_action = cls.env.ref( - "product_configurator.action_attributes_view" - ) - action_eval_context = configuration_attributes_action._get_eval_context() - configuration_attribute_context = safe_eval( - configuration_attributes_action.context, globals_dict=action_eval_context - ) - configuration_attribute_model = cls.env["product.attribute"].with_context( - **configuration_attribute_context - ) - - cls.generic_custom_attribute_value = cls.env.ref( - "product_configurator.custom_attribute_value" - ) - - custom_attribute_form = Form(configuration_attribute_model) - custom_attribute_form.name = "Test custom attribute" - with custom_attribute_form.value_ids.new() as value: - value.name = "Test custom value" - custom_attribute_form.val_custom = True - cls.custom_attribute = custom_attribute_form.save() - cls.custom_attribute_value = cls.custom_attribute.value_ids - - other_custom_attribute_form = Form(configuration_attribute_model) - other_custom_attribute_form.name = "Test other custom attribute" - other_custom_attribute_form.val_custom = True - with other_custom_attribute_form.value_ids.new() as value: - value.name = "Test other custom value" - cls.other_custom_attribute = other_custom_attribute_form.save() - cls.other_custom_attribute_value = cls.other_custom_attribute.value_ids - - regular_attribute_form = Form(configuration_attribute_model) - regular_attribute_form.name = "Test regular attribute" - regular_attribute_form.val_custom = False - with regular_attribute_form.value_ids.new() as value: - value.name = "Test value 1" - with regular_attribute_form.value_ids.new() as value: - value.name = "Test value 2" - cls.regular_attribute = regular_attribute_form.save() - cls.regular_attribute_value_1 = first(cls.regular_attribute.value_ids) - cls.regular_attribute_value_2 = ( - cls.regular_attribute.value_ids - cls.regular_attribute_value_1 - ) - - config_domain_form = Form(cls.env["product.config.domain"]) - config_domain_form.name = "Regular attribute has value 1" - with config_domain_form.domain_line_ids.new() as line: - line.attribute_id = cls.regular_attribute - line.condition = "in" - line.value_ids.add(cls.regular_attribute_value_1) - regular_has_value_1_domain = config_domain_form.save() - - product_template_form = Form(cls.env["product.template"]) - product_template_form.name = "Test configurable product" - with product_template_form.attribute_line_ids.new() as regular_line: - regular_line.attribute_id = cls.regular_attribute - for attribute_value in cls.regular_attribute.value_ids: - regular_line.value_ids.add(attribute_value) - with product_template_form.attribute_line_ids.new() as custom_line: - custom_line.attribute_id = cls.custom_attribute - for attribute_value in cls.custom_attribute.value_ids: - custom_line.value_ids.add(attribute_value) - with product_template_form.attribute_line_ids.new() as other_custom_line: - other_custom_line.attribute_id = cls.other_custom_attribute - for attribute_value in cls.other_custom_attribute.value_ids: - other_custom_line.value_ids.add(attribute_value) - product_template = product_template_form.save() - product_template.config_ok = True - # When the regular attribute has value 1, - # the custom attribute must have the generic custom value. - # The other custom attribute id not restricted. - with Form(product_template) as product_template_form: - with product_template_form.config_line_ids.new() as restriction: - restriction.attribute_line_id = ( - product_template.attribute_line_ids.filtered( - lambda al: al.attribute_id == cls.custom_attribute - ) - ) - restriction.value_ids.add(cls.generic_custom_attribute_value) - restriction.domain_id = regular_has_value_1_domain - - cls.product_template = product_template - - def setUp(self): - super().setUp() - - self.cfg_tmpl = self.env.ref("product_configurator.bmw_2_series") - self.cfg_session = self.env["product.config.session"].create( - {"product_tmpl_id": self.cfg_tmpl.id, "user_id": SUPERUSER_ID} - ) - - attribute_vals = self.cfg_tmpl.attribute_line_ids.mapped("value_ids") - self.attr_vals = self.cfg_tmpl.attribute_line_ids.mapped("value_ids") - - self.attr_val_ext_ids = { - v: k for k, v in attribute_vals.get_external_id().items() - } - - def get_attr_val_ids(self, ext_ids): - """Return a list of database ids using the external_ids - passed via ext_ids argument""" - - value_ids = [] - - attr_val_prefix = "product_configurator.product_attribute_value_%s" - - for ext_id in ext_ids: - if ext_id in self.attr_val_ext_ids: - value_ids.append(self.attr_val_ext_ids[ext_id]) - elif attr_val_prefix % ext_id in self.attr_val_ext_ids: - value_ids.append(self.attr_val_ext_ids[attr_val_prefix % ext_id]) - - return value_ids - - def test_valid_configuration(self): - """Test validation of a valid configuration""" - - conf = [ - "gasoline", - "228i", - "model_luxury_line", - "silver", - "rims_384", - "tapistry_black", - "steptronic", - "smoker_package", - "tow_hook", - ] - - attr_val_ids = self.get_attr_val_ids(conf) - validation = self.cfg_session.validate_configuration(attr_val_ids) - self.assertTrue(validation, "Valid configuration failed validation") - - def test_invalid_configuration(self): - conf = [ - "diesel", - "228i", - "model_luxury_line", - "silver", - "rims_384", - "tapistry_black", - "steptronic", - "smoker_package", - "tow_hook", - ] - - attr_val_ids = self.get_attr_val_ids(conf) - with self.assertRaises(ValidationError): - self.cfg_session.validate_configuration(attr_val_ids) - - def test_missing_val_configuration(self): - conf = [ - "diesel", - "228i", - "model_luxury_line", - "rims_384", - "tapistry_black", - "steptronic", - "smoker_package", - "tow_hook", - ] - - attr_val_ids = self.get_attr_val_ids(conf) - with self.assertRaises(ValidationError): - self.cfg_session.validate_configuration(attr_val_ids) - - def test_invalid_multi_configuration(self): - conf = [ - "gasoline", - "228i", - "model_luxury_line", - "silver", - "red", - "rims_384", - "tapistry_black", - "steptronic", - "smoker_package", - "tow_hook", - ] - - attr_val_ids = self.get_attr_val_ids(conf) - with self.assertRaises(ValidationError): - self.cfg_session.validate_configuration(attr_val_ids) - - def test_invalid_custom_value_configuration(self): - conf = [ - "gasoline", - "228i", - "model_luxury_line", - "rims_384", - "tapistry_black", - "steptronic", - "smoker_package", - "tow_hook", - ] - - attr_color_id = self.env.ref("product_configurator.product_attribute_color") - - custom_vals = {attr_color_id: {"value": "#fefefe"}} - - attr_val_ids = self.get_attr_val_ids(conf) - with self.assertRaises(ValidationError): - self.cfg_session.validate_configuration(attr_val_ids, custom_vals) - - def test_filled_custom_value(self): - """When custom values are restricted, - filling them correctly creates a valid configuration.""" - # Arrange - generic_custom_attribute_value = self.generic_custom_attribute_value - custom_attribute = self.custom_attribute - custom_value = 5 - other_custom_attribute = self.other_custom_attribute - other_custom_attribute_value = self.other_custom_attribute_value - regular_attribute = self.regular_attribute - regular_attribute_value_1 = self.regular_attribute_value_1 - product_template = self.product_template - - wizard_action = product_template.configure_product() - wizard = self.env[wizard_action["res_model"]].browse(wizard_action["res_id"]) - wizard.action_next_step() - fields_prefixes = wizard._prefixes - field_prefix = fields_prefixes.get("field_prefix") - custom_field_prefix = fields_prefixes.get("custom_field_prefix") - # Regular attribute has value 1 - # so the custom attribute must have the generic custom value. - # The other custom attribute can have any value. - wizard.write( - { - field_prefix + str(regular_attribute.id): regular_attribute_value_1.id, - field_prefix - + str(custom_attribute.id): generic_custom_attribute_value.id, - custom_field_prefix + str(custom_attribute.id): custom_value, - field_prefix - + str(other_custom_attribute.id): other_custom_attribute_value.id, - } - ) - # pre-condition - self.assertEqual(wizard.state, "configure") - - # Act - wizard.action_config_done() - - # Assert - config = wizard.config_session_id - self.assertEqual(config.state, "done") - - def test_fill_restricted_custom_value(self): - """When custom values are restricted, - filling them with the wrong value creates an invalid configuration.""" - # Arrange - generic_custom_attribute_value = self.generic_custom_attribute_value - custom_attribute = self.custom_attribute - custom_value = 5 - other_custom_attribute = self.other_custom_attribute - other_custom_attribute_value = self.other_custom_attribute_value - regular_attribute = self.regular_attribute - regular_attribute_value_2 = self.regular_attribute_value_2 - product_template = self.product_template - - wizard_action = product_template.configure_product() - wizard = self.env[wizard_action["res_model"]].browse(wizard_action["res_id"]) - wizard.action_next_step() - fields_prefixes = wizard._prefixes - field_prefix = fields_prefixes.get("field_prefix") - custom_field_prefix = fields_prefixes.get("custom_field_prefix") - # Regular attribute has value 2 - # so the custom attribute cannot have the generic custom value. - # The other custom attribute can have any value. - regular_attribute_field_name = field_prefix + str(regular_attribute.id) - custom_attribute_field_name = field_prefix + str(custom_attribute.id) - other_custom_attribute_field_name = field_prefix + str( - other_custom_attribute.id - ) - wizard_values = { - regular_attribute_field_name: regular_attribute_value_2.id, - custom_attribute_field_name: generic_custom_attribute_value.id, - custom_field_prefix + str(custom_attribute.id): custom_value, - other_custom_attribute_field_name: other_custom_attribute_value.id, - } - - # Act - onchange_result = wizard.onchange( - { - "value_ids": [ - Command.set([wizard_values[regular_attribute_field_name]]), - ], - **{wiz_field: False for wiz_field in wizard_values.keys()}, - }, - regular_attribute_field_name, - { - regular_attribute_field_name: "1", - }, - ) - - # Assert - domains = onchange_result["domain"] - custom_attribute_domain = domains[custom_attribute_field_name] - self.assertNotIn( - generic_custom_attribute_value, - self.env["product.attribute.value"].search(custom_attribute_domain), - ) - other_custom_attribute_domain = domains[other_custom_attribute_field_name] - self.assertIn( - generic_custom_attribute_value, - self.env["product.attribute.value"].search(other_custom_attribute_domain), - ) diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/test_create.py b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/test_create.py deleted file mode 100644 index fe6bdf1b..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/test_create.py +++ /dev/null @@ -1,184 +0,0 @@ -from odoo.addons.base.tests.common import BaseCommon - - -class ConfigurationCreate(BaseCommon): - @classmethod - def setUpClass(cls): - super().setUpClass() - cls.ProductConfWizard = cls.env["product.configurator"] - cls.config_product = cls.env.ref("product_configurator.bmw_2_series") - cls.product_category = cls.env.ref("product.product_category_5") - - # attributes - cls.attr_fuel = cls.env.ref("product_configurator.product_attribute_fuel") - cls.attr_engine = cls.env.ref("product_configurator.product_attribute_engine") - cls.attr_color = cls.env.ref("product_configurator.product_attribute_color") - cls.attr_rims = cls.env.ref("product_configurator.product_attribute_rims") - cls.attr_model_line = cls.env.ref( - "product_configurator.product_attribute_model_line" - ) - cls.attr_tapistry = cls.env.ref( - "product_configurator.product_attribute_tapistry" - ) - cls.attr_transmission = cls.env.ref( - "product_configurator.product_attribute_transmission" - ) - cls.attr_options = cls.env.ref("product_configurator.product_attribute_options") - - # values - cls.value_gasoline = cls.env.ref( - "product_configurator.product_attribute_value_gasoline" - ) - cls.value_218i = cls.env.ref( - "product_configurator.product_attribute_value_218i" - ) - cls.value_220i = cls.env.ref( - "product_configurator.product_attribute_value_220i" - ) - cls.value_red = cls.env.ref("product_configurator.product_attribute_value_red") - cls.value_rims_378 = cls.env.ref( - "product_configurator.product_attribute_value_rims_378" - ) - cls.value_sport_line = cls.env.ref( - "product_configurator.product_attribute_value_sport_line" - ) - cls.value_model_sport_line = cls.env.ref( - "product_configurator.product_attribute_value_model_sport_line" - ) - cls.value_tapistry = cls.env.ref( - "product_configurator.product_attribute_value_tapistry" + "_oyster_black" - ) - cls.value_transmission = cls.env.ref( - "product_configurator.product_attribute_value_steptronic" - ) - cls.value_options_1 = cls.env.ref( - "product_configurator.product_attribute_value_smoker_package" - ) - cls.value_options_2 = cls.env.ref( - "product_configurator.product_attribute_value_sunroof" - ) - - def test_01_create(self): - """Test configuration item does not make variations""" - - attr_test = self.env["product.attribute"].create( - { - "name": "Test", - "value_ids": [ - (0, 0, {"name": "1"}), - (0, 0, {"name": "2"}), - ], - } - ) - - test_template = self.env["product.template"].create( - { - "name": "Test Configuration", - "config_ok": True, - "type": "consu", - "categ_id": self.product_category.id, - "attribute_line_ids": [ - ( - 0, - 0, - { - "attribute_id": attr_test.id, - "value_ids": [ - (6, 0, attr_test.value_ids.ids), - ], - "required": True, - }, - ), - ], - } - ) - - self.assertEqual( - len(test_template.product_variant_ids), - 0, - "Create should not have any variants", - ) - - def test_02_previous_step_incompatible_changes(self): - """Test changes in previous steps which would makes - values in next configuration steps invalid""" - - product_config_wizard = self.ProductConfWizard.create( - { - "product_tmpl_id": self.config_product.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{self.attr_fuel.id}": self.value_gasoline.id, - f"__attribute_{self.attr_engine.id}": self.value_218i.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{self.attr_color.id}": self.value_red.id, - f"__attribute_{self.attr_rims.id}": self.value_rims_378.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{self.attr_model_line.id}": self.value_sport_line.id, - } - ) - product_config_wizard.action_previous_step() - product_config_wizard.action_previous_step() - product_config_wizard.write( - { - f"__attribute_{self.attr_engine.id}": self.value_220i.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.action_next_step() - vals = { - f"__attribute_{self.attr_model_line.id}": self.value_model_sport_line.id, - } - product_config_wizard.write(vals) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{self.attr_tapistry.id}": self.value_tapistry.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{self.attr_transmission.id}": self.value_transmission.id, - f"__attribute_{self.attr_options.id}": [ - [6, 0, [self.value_options_1.id, self.value_options_2.id]] - ], - } - ) - product_config_wizard.action_next_step() - value_ids = ( # noqa - self.value_gasoline - + self.value_220i - + self.value_red - + self.value_rims_378 - + self.value_model_sport_line - + self.value_tapistry - + self.value_transmission - + self.value_options_1 - + self.value_options_2 - ) - # FIXME: broken as - # """ - # AttributeError: 'product.product' object - # has no attribute 'attribute_value_ids'. - # Did you mean: 'attribute_line_ids'? - # """ - # new_variant = self.config_product.product_variant_ids.filtered( - # lambda variant: variant.attribute_value_ids == value_ids - # ) - # self.assertNotEqual( - # new_variant.id, - # False, - # "Variant not generated at the end of the configuration process", - # ) diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/test_product.py b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/test_product.py deleted file mode 100644 index ec4935ac..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/test_product.py +++ /dev/null @@ -1,705 +0,0 @@ -from odoo.exceptions import ValidationError - -from ..tests.common import ProductConfiguratorTestCases - -# FIXME: many tests here do not have any assertions. -# They simply run something and expect it to not raise an exception. -# This is not a good practice. Tests should have assertions. - - -class TestProduct(ProductConfiguratorTestCases): - @classmethod - def setUpClass(cls): - super().setUpClass() - cls.productTemplate = cls.env["product.template"] - cls.productAttributeLine = cls.env["product.template.attribute.line"] - cls.productConfigStepLine = cls.env["product.config.step.line"] - cls.product_category = cls.env.ref("product.product_category_5") - cls.attributelinefuel = cls.env.ref( - "product_configurator.product_attribute_line_2_series_fuel" - ) - cls.attributelineengine = cls.env.ref( - "product_configurator.product_attribute_line_2_series_engine" - ) - cls.value_diesel = cls.env.ref( - "product_configurator.product_attribute_value_diesel" - ) - cls.value_218d = cls.env.ref( - "product_configurator.product_attribute_value_218d" - ) - cls.value_220d = cls.env.ref( - "product_configurator.product_attribute_value_220d" - ) - cls.value_silver = cls.env.ref( - "product_configurator.product_attribute_value_silver" - ) - cls.config_step_engine = cls.env.ref("product_configurator.config_step_engine") - cls.config_step_body = cls.env.ref("product_configurator.config_step_body") - cls.product_tmpl_id = cls.env["product.template"].create( - { - "name": "Test Configuration", - "config_ok": True, - "type": "consu", - "categ_id": cls.product_category.id, - } - ) - # create attribute line 1 - cls.attributeLine1 = cls.productAttributeLine.create( - { - "product_tmpl_id": cls.product_tmpl_id.id, - "attribute_id": cls.attr_fuel.id, - "value_ids": [(6, 0, [cls.value_gasoline.id, cls.value_diesel.id])], - "required": True, - } - ) - # create attribute line 2 - cls.attributeLine2 = cls.productAttributeLine.create( - { - "product_tmpl_id": cls.product_tmpl_id.id, - "attribute_id": cls.attr_engine.id, - "value_ids": [ - ( - 6, - 0, - [ - cls.value_218i.id, - cls.value_220i.id, - cls.value_218d.id, - cls.value_220d.id, - ], - ) - ], - "required": True, - } - ) - # create attribute line 3 - cls.attributeLine3 = cls.productAttributeLine.create( - { - "product_tmpl_id": cls.product_tmpl_id.id, - "attribute_id": cls.attr_color.id, - "value_ids": [(6, 0, [cls.value_red.id, cls.value_silver.id])], - "required": True, - } - ) - - def _get_product_id(self): - self._configure_product_nxt_step() - return self.config_product.product_variant_ids - - def test_00__compute_template_attr_vals(self): - value_ids = self.product_tmpl_id.attribute_line_ids.mapped("value_ids") - self.product_tmpl_id._compute_template_attr_vals() - self.assertEqual( - value_ids, - self.product_tmpl_id.attribute_line_val_ids, - "Error: if value are different\ - Method: _compute_template_attr_vals() ", - ) - - def test_01_set_weight(self): - self.product_tmpl_id.weight = 120 - self.product_tmpl_id._set_weight() - self.assertEqual( - self.product_tmpl_id.weight, - self.product_tmpl_id.weight_dummy, - "Error: If set diffrent value for dummy_weight\ - Method: _set_weight()", - ) - self.product_tmpl_id.config_ok = False - set_weight = self.product_tmpl_id._set_weight() - self.assertIsNone( - set_weight, - "Error: If Value none\ - Method: _set_weight()", - ) - - def test_02_compute_weight(self): - self.product_tmpl_id.weight_dummy = 50.0 - self.product_tmpl_id._compute_weight() - self.assertEqual( - self.product_tmpl_id.weight_dummy, - self.product_tmpl_id.weight, - "Error: If set diffrent value for weight\ - Method: _compute_weight()", - ) - - def test_03_toggle_config(self): - configFalse = self.product_tmpl_id.toggle_config() - self.assertFalse( - configFalse, - "Error: If Boolean False\ - Method: toggle_config()", - ) - self.product_tmpl_id.toggle_config() - varient_value = self.product_tmpl_id._create_variant_ids() - self.assertIsNone( - varient_value, - "Error: If its return none\ - Method: create_variant_ids()", - ) - - def test_04_unlink(self): - product_config_wizard = self.ProductConfWizard.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{self.attr_fuel.id}": self.value_gasoline.id, - f"__attribute_{self.attr_engine.id}": self.value_218i.id, - f"__attribute_{self.attr_color.id}": self.value_red.id, - } - ) - product_config_wizard.action_next_step() - config_session_id = self.env["product.config.session"].search( - [("product_tmpl_id", "=", self.product_tmpl_id.id)] - ) - config_session_id.unlink() - varientId = self.product_tmpl_id.product_variant_ids - boolValue = varientId.unlink() - self.assertTrue( - boolValue, - "Error: if record are not unlink\ - Method: unlink()", - ) - - def test_05_check_default_values(self): - self.attributelinefuel.default_val = (self.value_gasoline.id,) - self.attributelineengine.default_val = self.value_218d.id - with self.assertRaises(ValidationError): - self.config_product._check_default_values() - - def test_06_configure_product(self): - # configure product - self.product_tmpl_id.configure_product() - self.ProductConfWizard.action_next_step() - product_config_wizard = self.ProductConfWizard.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{self.attr_fuel.id}": self.value_gasoline.id, - f"__attribute_{self.attr_engine.id}": self.value_218i.id, - f"__attribute_{self.attr_color.id}": self.value_red.id, - } - ) - wizard_action = product_config_wizard.action_next_step() - varient_id = wizard_action.get("res_id") - self.assertEqual( - varient_id, - self.product_tmpl_id.product_variant_ids.id, - "Error: If get diffrent varient Id\ - Method: action_next_step()", - ) - product_config_wizard.action_previous_step() - self.assertEqual( - product_config_wizard.state, - "select", - "Error: If get diffrent State\ - Method: action_previous_step()", - ) - # create config_step_line 1 - self.configStepLine1 = self.productConfigStepLine.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - "config_step_id": self.config_step_engine.id, - "attribute_line_ids": [ - (6, 0, [self.attributeLine1.id, self.attributeLine2.id]) - ], - } - ) - # create config_step_line 2 - self.configStepLine2 = self.productConfigStepLine.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - "config_step_id": self.config_step_body.id, - "attribute_line_ids": [(6, 0, [self.attributeLine3.id])], - } - ) - self.product_tmpl_id.write( - { - "config_step_line_ids": [ - (6, 0, [self.configStepLine1.id, self.configStepLine2.id]) - ], - } - ) - - # configure product - self.product_tmpl_id.configure_product() - product_config_wizard = self.ProductConfWizard.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{self.attr_fuel.id}": self.value_gasoline.id, - f"__attribute_{self.attr_engine.id}": self.value_218i.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{self.attr_color.id}": self.value_red.id, - } - ) - product_config_wizard.action_previous_step() - self.assertEqual( - product_config_wizard.state, - str(self.configStepLine1.id), - "Error: If diffrent previous state and config state\ - Method: action_previous_step()", - ) - product_config_wizard.action_next_step() - self.assertEqual( - product_config_wizard.config_session_id.config_step, - product_config_wizard.state, - "Error: If diffrent state and config_step\ - Method: action_previous_step()", - ) - product_config_wizard.action_next_step() - - def test_07_get_mako_tmpl_name(self): - # check for product_product - product_product = self._get_product_id() - mako_tmpl_vals = product_product._get_mako_tmpl_name() - self.assertEqual( - mako_tmpl_vals, - product_product.display_name, - "Error: If get display_name are different\ - Method: _get_mako_tmpl_name()", - ) - self.config_product.write({"mako_tmpl_name": "Test Configuration Product"}) - mako_tmpl_vals = product_product._get_mako_tmpl_name() - self.assertEqual( - self.config_product.mako_tmpl_name, - mako_tmpl_vals, - "Error: If Mako Template are not exists or different\ - Method: _get_mako_tmpl_name()", - ) - - def test_08_compute_product_weight(self): - product_product = self._get_product_id() - self.config_product.weight = 10 - product_product.weight_extra = 20 - product_product._compute_product_weight() - self.assertEqual( - product_product.weight, - 30, - "Error: If value are not get 30\ - Method: _compute_product_weight()", - ) - product_product.config_ok = False - product_product.weight_dummy = 50 - product_product._compute_product_weight() - self.assertEqual( - product_product.weight, - 50, - "Error: If value are not get 50\ - Method: _compute_product_weight()", - ) - - def test_09_compute_config_name(self): - product_product = self._get_product_id() - product_product.config_ok = False - product_product._compute_config_name() - self.assertEqual( - product_product.config_name, - "2 Series", - "Error: If different product config_name\ - Method: _compute_config_name()", - ) - product_product.config_ok = True - product_product._compute_config_name() - self.assertEqual( - product_product.config_name, - "2 Series", - "Error: If different product config_name\ - Method: _compute_config_name()", - ) - - def test_10_reconfigure_product(self): - self.product_tmpl_id.configure_product() - product_config_wizard = self.ProductConfWizard.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{self.attr_fuel.id}": self.value_gasoline.id, - f"__attribute_{self.attr_engine.id}": self.value_218i.id, - f"__attribute_{self.attr_color.id}": self.value_red.id, - } - ) - product_config_wizard.action_next_step() - # reconfigure product - product_product = self.product_tmpl_id.product_variant_ids - product_product.reconfigure_product() - product_config_wizard = self.ProductConfWizard.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{self.attr_fuel.id}": self.value_gasoline.id, - f"__attribute_{self.attr_engine.id}": self.value_218d.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{self.attr_color.id}": self.value_silver.id, - } - ) - product_config_wizard.action_next_step() - value_ids = self.value_gasoline + self.value_218d + self.value_silver - # val_ids = self.value_gasoline + self.value_218i + self.value_red - # pta_val_ids = self.env["product.template.attribute.value"].search( - # [ - # ("product_tmpl_id", "=", self.product_tmpl_id.id), - # ("product_attribute_value_id", "in", value_ids.ids), - # ] - # ) - new_variant = self.product_tmpl_id.product_variant_ids.filtered( - lambda variant: variant.product_template_attribute_value_ids == value_ids - ) - self.assertFalse( - new_variant.id, - "Error: if variant id not exists\ - Method: reconfigure_product()", - ) - - def test_11_compute_product_weight_extra(self): - product_id = self.env.ref("product.product_delivery_01") - product_template_attr_value_ids = self.env.ref( - "product.product_4_attribute_1_value_2" - ) - product_template_attr_value_ids.write( - { - "weight_extra": 50.0, - } - ) - product_id._compute_product_weight_extra() - vals = {"product_template_attribute_value_ids": product_template_attr_value_ids} - product_id.write(vals) - self.assertEqual( - product_template_attr_value_ids.weight_extra, - 50.0, - product_id.weight_extra, - ) - - # _compute_product_weight_extra - product_product = self._get_product_id() - productAttPrice = self.env["product.template.attribute.value"].search( - [ - ("product_tmpl_id", "=", self.config_product.id), - ("product_attribute_value_id", "=", self.value_gasoline.id), - ] - ) - productAttPrice.weight_extra = 45 - product_product._compute_product_weight_extra() - self.assertEqual( - productAttPrice.weight_extra, - product_product.weight_extra, - "Error: If weight_extra not equal\ - Method: _compute_product_weight_extra()", - ) - - def test_12_unlink(self): - product_product = self._get_product_id() - unlinkVals = product_product.unlink() - self.assertTrue( - unlinkVals, - "Error: If unlink record true\ - Method: unlink()", - ) - - def test_13_copy(self): - vals = self.config_product.copy() - self.assertEqual( - vals.name, - "2 Series (copy)", - "Error: If not equal\ - Method: copy()", - ) - self.assertTrue( - vals.attribute_line_ids, - "Error: If attribute_line_ids not exists\ - Method: copy()", - ) - - def test_14_validate_unique_config(self): - self.product_tmpl_id.write( - { - "attribute_value_line_ids": [ - ( - 0, - 0, - { - "product_tmpl_id": self.product_tmpl_id.id, - "value_id": self.value_gasoline.id, - "value_ids": [(6, 0, [self.value_218i.id])], - }, - ) - ] - } - ) - with self.assertRaises(ValidationError): - self.product_tmpl_id.write( - { - "attribute_value_line_ids": [ - ( - 0, - 0, - { - "product_tmpl_id": self.product_tmpl_id.id, - "value_id": self.value_gasoline.id, - "value_ids": [(6, 0, [self.value_218i.id])], - }, - ) - ] - } - ) - - def test_15_check_attr_value_ids(self): - self.product_tmpl_id.write( - { - "attribute_value_line_ids": [ - ( - 0, - 0, - { - "product_tmpl_id": self.product_tmpl_id.id, - "value_id": self.value_gasoline.id, - "value_ids": [(6, 0, [self.value_gasoline.id])], - }, - ) - ] - } - ) - self.product_tmpl_id.write( - { - "attribute_value_line_ids": [ - ( - 0, - 0, - { - "product_tmpl_id": self.product_tmpl_id.id, - "value_id": self.value_diesel.id, - "value_ids": [(6, 0, [self.value_diesel.id])], - }, - ) - ] - } - ) - self.product_tmpl_id.write( - { - "attribute_value_line_ids": [ - ( - 0, - 0, - { - "product_tmpl_id": self.product_tmpl_id.id, - "value_id": self.value_218i.id, - "value_ids": [(6, 0, [self.value_218i.id])], - }, - ) - ] - } - ) - self.product_tmpl_id.write( - { - "attribute_value_line_ids": [ - ( - 0, - 0, - { - "product_tmpl_id": self.product_tmpl_id.id, - "value_id": self.value_220i.id, - "value_ids": [(6, 0, [self.value_220i.id])], - }, - ) - ] - } - ) - self.product_tmpl_id.write( - { - "attribute_value_line_ids": [ - ( - 0, - 0, - { - "product_tmpl_id": self.product_tmpl_id.id, - "value_id": self.value_218d.id, - "value_ids": [(6, 0, [self.value_218d.id])], - }, - ) - ] - } - ) - self.product_tmpl_id.write( - { - "attribute_value_line_ids": [ - ( - 0, - 0, - { - "product_tmpl_id": self.product_tmpl_id.id, - "value_id": self.value_220d.id, - "value_ids": [(6, 0, [self.value_220d.id])], - }, - ) - ] - } - ) - self.product_tmpl_id.write( - { - "attribute_value_line_ids": [ - ( - 0, - 0, - { - "product_tmpl_id": self.product_tmpl_id.id, - "value_id": self.value_red.id, - "value_ids": [(6, 0, [self.value_red.id])], - }, - ) - ] - } - ) - self.product_tmpl_id.write( - { - "attribute_value_line_ids": [ - ( - 0, - 0, - { - "product_tmpl_id": self.product_tmpl_id.id, - "value_id": self.value_silver.id, - "value_ids": [(6, 0, [self.value_silver.id])], - }, - ) - ] - } - ) - with self.assertRaises(ValidationError): - self.product_tmpl_id.write( - { - "attribute_value_line_ids": [ - ( - 0, - 0, - { - "product_tmpl_id": self.product_tmpl_id.id, - "value_id": self.value_rims_378.id, - "value_ids": [(6, 0, [self.value_rims_378.id])], - }, - ) - ] - } - ) - - def test_16_check_duplicate_product(self): - self.product_tmpl_id.configure_product() - product_config_wizard = self.ProductConfWizard.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{self.attr_fuel.id}": self.value_gasoline.id, - f"__attribute_{self.attr_engine.id}": self.value_218i.id, - f"__attribute_{self.attr_color.id}": self.value_red.id, - } - ) - product_config_wizard.action_next_step() - val_ids = self.value_gasoline + self.value_218i + self.value_red - pta_val_ids = self.env["product.template.attribute.value"].search( - [ - ("product_tmpl_id", "=", self.product_tmpl_id.id), - ("product_attribute_value_id", "in", val_ids.ids), - ] - ) - with self.assertRaises(ValidationError): - self.env["product.product"].create( - { - "name": "Test Configuration", - "product_tmpl_id": self.product_tmpl_id.id, - "product_template_attribute_value_ids": [(6, 0, pta_val_ids.ids)], - } - ) - - def test_17_fields_view_get(self): - product_product = self._get_product_id() - product_product.with_context(default_config_ok=True).get_view() - - def test_19_compute_product_variant_count(self): - self.product_tmpl_id = self.env["product.template"].create( - { - "name": "Test Configuration", - "config_ok": True, - "type": "consu", - "categ_id": self.product_category.id, - } - ) - product_variant_count = self.product_tmpl_id.product_variant_count - self.assertEqual( - product_variant_count, - 1, - "Error: If not equal\ - Method: _compute_product_variant_count()", - ) - - def test_20_get_config_name(self): - product_product = self._get_product_id() - product_product._get_config_name() - self.assertTrue( - product_product.name, - "Error: If value False\ - Method: _get_config_name()", - ) - - def test_21_search_product_weight(self): - product_product = self._get_product_id() - operator = "and" - value = 10 - search_product_weight = product_product._search_product_weight(operator, value) - self.assertTrue( - search_product_weight, - "Error: If value False\ - Method: _search_product_weight()", - ) - - def test_22_search_weight(self): - operator = "and" - value = 10 - search_weight = self.product_tmpl_id._search_weight(operator, value) - self.assertTrue( - search_weight, - "Error: If value False\ - Method: _search_weight()", - ) - - def test_23_check_config_line_domain(self): - product_config_line = self.env.ref( - "product_configurator.product_config_line_218_lines" - ) - with self.assertRaises(ValidationError): - self.env["product.template"].create( - { - "name": "template_test", - "config_line_ids": product_config_line, - } - ) diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/test_product_attribute.py b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/test_product_attribute.py deleted file mode 100644 index 453d6e59..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/test_product_attribute.py +++ /dev/null @@ -1,192 +0,0 @@ -from odoo.exceptions import ValidationError - -from odoo.addons.base.tests.common import BaseCommon - -# FIXME: many tests here do not have any assertions. -# They simply run something and expect it to not raise an exception. -# This is not a good practice. Tests should have assertions. - - -class ProductAttributes(BaseCommon): - @classmethod - def setUpClass(cls): - super().setUpClass() - cls.productAttributeLine = cls.env["product.template.attribute.line"] - cls.ProductAttributeFuel = cls.env.ref( - "product_configurator.product_attribute_fuel" - ) - cls.ProductAttributeLineFuel = cls.env.ref( - "product_configurator.product_attribute_line_2_series_fuel" - ) - cls.ProductTemplate = cls.env.ref("product_configurator.bmw_2_series") - cls.product_category = cls.env.ref("product.product_category_5") - cls.ProductAttributePrice = cls.env["product.template.attribute.value"] - cls.attr_fuel = cls.env.ref("product_configurator.product_attribute_fuel") - cls.attr_engine = cls.env.ref("product_configurator.product_attribute_engine") - cls.value_diesel = cls.env.ref( - "product_configurator.product_attribute_value_diesel" - ) - cls.value_218i = cls.env.ref( - "product_configurator.product_attribute_value_218i" - ) - cls.value_gasoline = cls.env.ref( - "product_configurator.product_attribute_value_gasoline" - ) - cls.ProductAttributeValueFuel = cls.value_gasoline.attribute_id.id - - def test_01_onchange_custome_type(self): - self.ProductAttributeFuel.min_val = 20 - self.ProductAttributeFuel.max_val = 30 - self.ProductAttributeFuel.custom_type = "char" - self.ProductAttributeFuel.onchange_custom_type() - self.assertEqual(self.ProductAttributeFuel.min_val, 0, "Min value is not False") - self.assertEqual(self.ProductAttributeFuel.max_val, 0, "Max value is not False") - - self.ProductAttributeFuel.min_val = 20 - self.ProductAttributeFuel.max_val = 30 - self.ProductAttributeFuel.custom_type = "integer" - self.ProductAttributeFuel.onchange_custom_type() - self.assertEqual( - self.ProductAttributeFuel.min_val, - 20, - "Min value is not equal to existing min value", - ) - self.assertEqual( - self.ProductAttributeFuel.max_val, - 30, - "Max value is not equal to existing max value", - ) - - self.ProductAttributeFuel.custom_type = "float" - self.ProductAttributeFuel.onchange_custom_type() - self.assertEqual( - self.ProductAttributeFuel.min_val, - 20, - "Min value is equal to existing min value \ - when type is changed to integer to float", - ) - self.assertEqual( - self.ProductAttributeFuel.max_val, - 30, - "Max value is equal to existing max value \ - when type is changed to integer to float", - ) - self.ProductAttributeFuel.custom_type = "binary" - self.ProductAttributeFuel.onchange_custom_type() - self.assertFalse( - self.ProductAttributeFuel.search_ok, - "Error: if search true\ - Method: onchange_custom_type()", - ) - - def test_02_onchange_val_custom(self): - self.ProductAttributeFuel.val_custom = False - self.ProductAttributeFuel.custom_type = "integer" - self.ProductAttributeFuel.onchange_val_custom_field() - self.assertFalse( - self.ProductAttributeFuel.custom_type, "custom_type is not False" - ) - - def test_03_check_searchable_field(self): - self.ProductAttributeFuel.custom_type = "binary" - with self.assertRaises(ValidationError): - self.ProductAttributeFuel.search_ok = True - - def test_04_validate_custom_val(self): - self.ProductAttributeFuel.write({"max_val": 20, "min_val": 10}) - self.ProductAttributeFuel.custom_type = "integer" - with self.assertRaises(ValidationError): - self.ProductAttributeFuel.validate_custom_val(5) - - self.ProductAttributeFuel.write({"max_val": 0, "min_val": 10}) - self.ProductAttributeFuel.custom_type = "integer" - with self.assertRaises(ValidationError): - self.ProductAttributeFuel.validate_custom_val(5) - - self.ProductAttributeFuel.write({"min_val": 0, "max_val": 20}) - self.ProductAttributeFuel.custom_type = "integer" - with self.assertRaises(ValidationError): - self.ProductAttributeFuel.validate_custom_val(25) - - def test_05_check_constraint_min_max_value(self): - self.ProductAttributeFuel.custom_type = "integer" - with self.assertRaises(ValidationError): - self.ProductAttributeFuel.write({"max_val": 10, "min_val": 20}) - - # FIXME: broken on call `onchange_attribute` method as - # """ - # odoo.exceptions.ValidationError: - # The attribute Fuel must have at least one value for the product 2 Series. - # - # def test_06_onchange_attribute(self): - # self.ProductAttributeLineFuel.onchange_attribute() - # self.assertFalse( - # self.ProductAttributeLineFuel.value_ids, "value_ids is not False" - # ) - # self.assertTrue( - # self.ProductAttributeLineFuel.required, "required not exsits value" - # ) - # self.ProductAttributeLineFuel.multi = True - # self.assertTrue( - # self.ProductAttributeLineFuel.multi, "multi not exsits value" - # ) - # self.ProductAttributeLineFuel.custom = True - # self.assertTrue( - # self.ProductAttributeLineFuel.custom, "custom not exsits value" - # ) - - def test_07_check_default_values(self): - with self.assertRaises(ValidationError): - self.ProductAttributeLineFuel.default_val = self.value_218i.id - - def test_08_copy_attribute(self): - copyAttribute = self.ProductAttributeFuel.copy() - self.assertEqual( - copyAttribute.name, - "Fuel (copy)", - "Error: If not copy attribute\ - Method: copy()", - ) - - def test_09_compute_get_value_id(self): - attrvalline = self.env["product.attribute.value.line"].create( - { - "product_tmpl_id": self.ProductTemplate.id, - "value_id": self.value_gasoline.id, - } - ) - self.assertTrue( - attrvalline.product_value_ids, - "Error: If product_value_ids not exists\ - Method: _compute_get_value_id()", - ) - - def test_10_validate_configuration(self): - with self.assertRaises(ValidationError): - self.env["product.attribute.value.line"].create( - { - "product_tmpl_id": self.ProductTemplate.id, - "value_id": self.value_diesel.id, - "value_ids": [(6, 0, [self.value_218i.id])], - } - ) - - def test_11_copy(self): - default = {} - productattribute = self.value_gasoline.copy(default) - self.assertEqual( - productattribute.name, - self.value_gasoline.name + " (copy)", - "Error: If not equal productattribute name\ - Method: copy()", - ) - - def test_12_onchange_values(self): - productattributeline = self.env["product.template.attribute.line"] - productattributeline.onchange_values() - self.assertEqual( - productattributeline.default_val, - productattributeline.value_ids, - "Error: If default_val not exists\ - Method: onchange_values()", - ) diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/test_product_config.py b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/test_product_config.py deleted file mode 100644 index 8a8f2278..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/test_product_config.py +++ /dev/null @@ -1,733 +0,0 @@ -from odoo.exceptions import UserError, ValidationError - -from ..tests.common import ProductConfiguratorTestCases - -# FIXME: many tests here do not have any assertions. -# They simply run something and expect it to not raise an exception. -# This is not a good practice. Tests should have assertions. - - -class ProductConfig(ProductConfiguratorTestCases): - @classmethod - def setUpClass(cls): - super().setUpClass() - cls.productConfWizard = cls.env["product.configurator"] - cls.productTemplate = cls.env["product.template"] - cls.productAttribute = cls.env["product.attribute"] - cls.productAttributeVals = cls.env["product.attribute.value"] - cls.productAttributeLine = cls.env["product.template.attribute.line"] - cls.productConfigSession = cls.env["product.config.session"] - cls.productConfigDomain = cls.env["product.config.domain"] - cls.config_product = cls.env.ref("product_configurator.bmw_2_series") - cls.attr_engine = cls.env.ref("product_configurator.product_attribute_engine") - cls.config_step_engine = cls.env.ref("product_configurator.config_step_engine") - cls.config_product_1 = cls.env.ref( - "product_configurator.product_config_line_gasoline_engines" - ) - cls.config_product_2 = cls.env.ref( - "product_configurator.2_series_config_step_body" - ) - # domain - cls.domain_gasolin = cls.env.ref( - "product_configurator.product_config_domain_gasoline" - ) - cls.domain_engine = cls.env.ref( - "product_configurator.product_config_domain_diesel" - ) - cls.config_image_red = cls.env.ref("product_configurator.config_image_1") - # value - cls.value_gasoline = cls.env.ref( - "product_configurator.product_attribute_value_gasoline" - ) - cls.value_diesel = cls.env.ref( - "product_configurator.product_attribute_value_diesel" - ) - cls.value_red = cls.env.ref("product_configurator.product_attribute_value_red") - # config_step - cls.config_step_engine = cls.env.ref("product_configurator.config_step_engine") - cls.attribute_line = cls.env.ref( - "product_configurator.product_attribute_line_2_series_engine" - ) - cls.value_silver = cls.env.ref( - "product_configurator.product_attribute_value_silver" - ) - cls.value_rims_387 = cls.env.ref( - "product_configurator.product_attribute_value_rims_387" - ) - # attribute line - cls.attribute_line_2_series_rims = cls.env.ref( - "product_configurator.product_attribute_line_2_series_rims" - ) - cls.attribute_line_2_series_tapistry = cls.env.ref( - "product_configurator.product_attribute_line_2_series_tapistry" - ) - cls.attribute_value_tapistry_oyster_black = cls.env.ref( - "product_configurator." + "product_attribute_value_tapistry_oyster_black" - ) - cls.attribute_line_2_series_transmission = cls.env.ref( - "product_configurator.product_attribute_line_2_series_transmission" - ) - - # attribute value - cls.attribute_rims = cls.env.ref("product_configurator.product_attribute_rims") - cls.attribute_tapistry = cls.env.ref( - "product_configurator.product_attribute_tapistry" - ) - cls.attribute_transmission = cls.env.ref( - "product_configurator.product_attribute_transmission" - ) - - # session id - cls.session_id = cls.productConfigSession.create( - { - "product_tmpl_id": cls.config_product.id, - "value_ids": [ - ( - 6, - 0, - [ - cls.value_gasoline.id, - cls.value_transmission.id, - cls.value_red.id, - ], - ) - ], - "user_id": cls.env.user.id, - } - ) - # ir attachment - cls.irAttachement = cls.env["ir.attachment"].create( - { - "name": "Test attachement", - "datas": "bWlncmF0aW9uIHRlc3Q=", - } - ) - - # configure product - cls._configure_product_nxt_step() - cls.config_session = cls.productConfigSession.search( - [("product_tmpl_id", "=", cls.config_product.id)] - ) - - # create product template - cls.product_tmpl_id = cls.productTemplate.create({"name": "Coca-Cola"}) - # create attribute 1 - cls.attribute_1 = cls.productAttribute.create( - { - "name": "Color", - } - ) - # create attribute 2 - cls.attribute_2 = cls.productAttribute.create( - { - "name": "Flavour", - } - ) - - # create attribute value 1 - cls.attribute_vals_1 = cls.productAttributeVals.create( - { - "name": "Orange", - "attribute_id": cls.attribute_1.id, - } - ) - # create attribute value 2 - cls.attribute_vals_2 = cls.productAttributeVals.create( - { - "name": "Balck", - "attribute_id": cls.attribute_1.id, - } - ) - # create attribute value 3 - cls.attribute_vals_3 = cls.productAttributeVals.create( - { - "name": "Coke", - "attribute_id": cls.attribute_2.id, - } - ) - # create attribute value 4 - cls.attribute_vals_4 = cls.productAttributeVals.create( - { - "name": "Mango", - "attribute_id": cls.attribute_2.id, - } - ) - - # TODO :: Left to take review of code - def test_00_check_value_attributes(self): - with self.assertRaises(ValidationError): - self.config_product_1.write( - {"value_ids": [(6, 0, [self.value_gasoline.id])]} - ) - - def test_01_check_config_step(self): - with self.assertRaises(ValidationError): - self.config_product_2.config_step_id = 4 - - def test_02_get_trans_implied(self): - self.domain_gasolin.write({"implied_ids": [(6, 0, [self.domain_engine.id])]}) - trans_implied_ids = self.domain_gasolin.trans_implied_ids.ids - self.assertEqual( - trans_implied_ids[-1], - self.domain_engine.id, - "Error: If value not exists\ - Method: _get_trans_implied()", - ) - - def test_03_check_config_step(self): - with self.assertRaises(ValidationError): - self.env["product.config.step.line"].create( - { - "product_tmpl_id": self.config_product.id, - "config_step_id": self.config_step_engine.id, - "attribute_line_ids": [(6, 0, [self.attribute_line.id])], - } - ) - - def test_04_compute_cfg_price(self): - # check for _compute_cfg_price - price = self.config_product.list_price - price += self.value_220i.product_id.lst_price - price += self.value_model_sport_line.product_id.lst_price - price += self.value_transmission.product_id.lst_price - price += self.value_options_2.product_id.lst_price - self.assertEqual( - self.session_id.price, - price, - "Error: If different session price and list_price\ - Method: _compute_cfg_price", - ) - - def test_05_get_custom_vals_dict(self): - # check for _get_custom_vals_dict - productConfigSessionCustVals = self.env[ - "product.config.session.custom.value" - ].create( - {"cfg_session_id": self.session_id.id, "attribute_id": self.attr_fuel.id} - ) - # check for custom type Int - self.attr_fuel.custom_type = "integer" - productConfigSessionCustVals.update({"value": 154}) - checkIntval = self.session_id._get_custom_vals_dict() - attr_id = productConfigSessionCustVals.attribute_id.id - self.assertEqual( - checkIntval.get(attr_id), - 154, - "Error: If Not Integer value or False\ - Method: _get_custom_vals_dict()", - ) - # check for custom type Float - self.attr_fuel.custom_type = "float" - productConfigSessionCustVals.update({"value": 94.5}) - checkFloatval = self.session_id._get_custom_vals_dict() - attr_id = productConfigSessionCustVals.attribute_id.id - self.assertEqual( - checkFloatval.get(attr_id), - 94.5, - "Error: If Not Float value or False\ - Method: _get_custom_vals_dict()", - ) - # check for custom type Binary - self.attr_color.custom_type = "binary" - productConfigSessionCustVals1 = self.env[ - "product.config.session.custom.value" - ].create( - { - "cfg_session_id": self.session_id.id, - "attribute_id": self.attr_color.id, - "attachment_ids": [(6, 0, [self.irAttachement.id])], - } - ) - checkBinaryval = self.session_id._get_custom_vals_dict() - attr_id = productConfigSessionCustVals1.attribute_id.id - self.assertEqual( - checkBinaryval.get(attr_id), - productConfigSessionCustVals1.attachment_ids, - "Error: If Not attachement\ - Method: _get_custom_vals_dict()", - ) - - def test_06_compute_config_step_name(self): - self.config_session._compute_config_step_name() - self.assertTrue( - self.config_session.config_step_name, - "Error: If not config step name\ - Method: _compute_config_step_name()", - ) - self.config_session._compute_config_step_name() - self.assertEqual( - self.config_session.config_step_name, - "Extras", - "Error: If not equal config_step_name and config_step\ - Method: _compute_config_step_name()", - ) - session = self.productConfigSession.create( - { - "product_tmpl_id": self.config_product.id, - "value_ids": [ - (6, 0, [self.value_gasoline.id, self.value_transmission.id]) - ], - "user_id": self.env.user.id, - } - ) - session._compute_config_step_name() - self.assertFalse( - session.config_step_name, - "Error: If config_step_name not False\ - Method: _compute_config_step_name()", - ) - - def test_07_search_variant(self): - with self.assertRaises(ValidationError): - self.env["product.config.session"].search_variant() - - # check for search duplicate variant - variant_id = self.config_product.product_variant_ids - checkSearchvarient = self.config_session.search_variant() - self.assertEqual( - checkSearchvarient, - variant_id, - "Error: If Not Equal Variant or False\ - Method: search_variant()", - ) - - def test_08_check_custom_type(self): - # check for check_custom_type - with self.assertRaises(ValidationError): - self.env["product.config.session.custom.value"].create( - { - "attribute_id": self.value_silver.attribute_id.id, - "cfg_session_id": self.config_session.id, - "value": "Test", - "attachment_ids": [(6, 0, [self.irAttachement.id])], - } - ) - - self.attr_color.custom_type = "binary" - with self.assertRaises(ValidationError): - self.env["product.config.session.custom.value"].create( - { - "attribute_id": self.value_silver.attribute_id.id, - "cfg_session_id": self.config_session.id, - "value": "Test", - "attachment_ids": [(6, 0, [self.irAttachement.id])], - } - ) - - def test_09_create_get_variant(self): - # configure new product to check for search not dublicate variant - attributeLine1 = self.productAttributeLine.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - "attribute_id": self.attribute_1.id, - "value_ids": [ - (6, 0, [self.attribute_vals_1.id, self.attribute_vals_2.id]) - ], - } - ) - # create attribute line 2 - attributeLine2 = self.productAttributeLine.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - "attribute_id": self.attribute_2.id, - "value_ids": [ - (6, 0, [self.attribute_vals_3.id, self.attribute_vals_4.id]) - ], - } - ) - self.product_tmpl_id.write( - { - "attribute_line_ids": [(6, 0, [attributeLine1.id, attributeLine2.id])], - } - ) - self.product_tmpl_id.configure_product() - self.productConfWizard.action_next_step() - product_config_wizard = self.productConfWizard.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{self.attribute_1.id}": self.attribute_vals_1.id, - f"__attribute_{self.attribute_2.id}": self.attribute_vals_3.id, - } - ) - product_config_wizard.action_next_step() - config_session_1 = self.productConfigSession.search( - [("product_tmpl_id", "=", self.product_tmpl_id.id)] - ) - createVarientId = config_session_1.create_get_variant() - self.assertEqual( - createVarientId.name, - self.product_tmpl_id.name, - "Error: If Not Equal variant name\ - Method: search_variant()", - ) - # FIXME: broken when running `attributeLine1.custom = True` - # """ - # psycopg2.errors.UniqueViolation: - # duplicate key value violates unique constraint - # "product_product_combination_unique" - # DETAIL: Key (product_tmpl_id, combination_indices)=(81, 459,461) - # already exists. - # attributeLine1.custom = True - # self.env["product.config.session.custom.value"].create( - # { - # "cfg_session_id": config_session_1.id, - # "attribute_id": self.attribute_1.id, - # "value": "Coke", - # } - # ) - # config_session_1.create_get_variant() - - def test_10_check_value_ids(self): - with self.assertRaises(ValidationError): - self.config_image_red.write( - {"value_ids": [(6, 0, [self.value_gasoline.id, self.value_diesel.id])]} - ) - - def test_11_unique_attribute(self): - with self.assertRaises(ValidationError): - self.env["product.config.session.custom.value"].create( - { - "cfg_session_id": self.config_session.id, - "attribute_id": self.attr_engine.id, - "value": "1234", - } - ) - self.env["product.config.session.custom.value"].create( - { - "cfg_session_id": self.config_session.id, - "attribute_id": self.attr_engine.id, - "value": "1234", - } - ) - - # FIXME: broken at the first create as - # """ - # psycopg2.errors.NotNullViolation - # null value in column "attribute_line_id" of - # relation "product_template_attribute_value" - # violates not-null constraint - # DETAIL: Failing row contains ... - # def test_12_get_cfg_weight(self): - # self.env["product.template.attribute.value"].create( - # { - # "product_tmpl_id": self.config_product.id, - # "product_attribute_value_id": self.value_red.id, - # "weight_extra": 20.0, - # } - # ) - # self.config_product.weight = 20 - # weightVal = self.config_session.get_cfg_weight() - # self.assertEqual( - # weightVal, - # 40.0, - # "Error: If Value are not equal\ - # Method: get_cfg_weight()", - # ) - # # check for config weight - # self.assertEqual( - # self.config_session.weight, - # 40.0, - # "Error: If config weight are not equal\ - # Method: _compute_cfg_weight()", - # ) - - def test_13_update_session_configuration_value(self): - # configure new product to check for search not dublicate variant - self.custom_vals = self.productConfigSession.get_custom_value_id() - self.attributeLine1 = self.productAttributeLine.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - "attribute_id": self.attribute_1.id, - "value_ids": [ - (6, 0, [self.attribute_vals_1.id, self.attribute_vals_2.id]) - ], - "custom": True, - "required": True, - } - ) - # create attribute line 2 - self.attributeLine2 = self.productAttributeLine.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - "attribute_id": self.attribute_2.id, - "value_ids": [ - (6, 0, [self.attribute_vals_3.id, self.attribute_vals_4.id]) - ], - "custom": True, - "required": True, - } - ) - self.product_tmpl_id.write( - { - "attribute_line_ids": [ - (6, 0, [self.attributeLine1.id, self.attributeLine2.id]) - ], - } - ) - self.attribute_1.custom_type = "binary" - self.product_tmpl_id.configure_product() - self.productConfWizard.action_next_step() - product_config_wizard = self.productConfWizard.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{self.attribute_1.id}": self.custom_vals.id, - f"__custom_{self.attribute_1.id}": "Test", - } - ) - # FIXME: broken validation at `product_config.create_get_variant` - # """ - # odoo.exceptions.ValidationError: Required attribute 'Flavour' is empty - # product_config_wizard.action_next_step() - - # FIXME: broken at the first create as - # """ - # psycopg2.errors.NotNullViolation - # null value in column "attribute_line_id" of - # relation "product_template_attribute_value" - # violates not-null constraint - # DETAIL: Failing row contains ... - # def test_14_get_cfg_price(self): - # self.env["product.template.attribute.value"].create( - # { - # "product_tmpl_id": self.config_product.id, - # "product_attribute_value_id": self.value_red.id, - # "weight_extra": 20.0, - # "price_extra": 20.0, - # } - # ) - # price = self.config_product.list_price - # price += self.value_220i.product_id.lst_price - # price += self.value_model_sport_line.product_id.lst_price - # price += self.value_transmission.product_id.lst_price - # price += self.value_options_2.product_id.lst_price - # price_extra_val = self.session_id.get_cfg_price() - # self.assertEqual( - # price_extra_val, - # price + 20, - # "Error: If not equal price extra\ - # Method: get_cfg_price()", - # ) - - def test_15_get_next_step(self): - self.session_id.get_next_step(state=None) - self.session_id.get_next_step(state="draft") - with self.assertRaises(UserError): - self.productConfigSession.get_next_step( - state="draft", value_ids=False, custom_value_ids=False - ) - - def test_16_get_all_step_lines(self): - step_line_value_1 = self.productConfigSession.get_all_step_lines() - self.assertFalse( - step_line_value_1, - "Error: If return True\ - Method: get_all_step_lines()", - ) - step_line_value_2 = self.session_id.get_all_step_lines() - self.assertTrue( - step_line_value_2, - "Error: If return True\ - Method: get_all_step_lines()", - ) - - def test_17_custom_value_validate_configuration(self): - self.custom_vals = self.productConfigSession.get_custom_value_id() - self.attributeLine1 = self.productAttributeLine.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - "attribute_id": self.attribute_1.id, - "value_ids": [ - (6, 0, [self.attribute_vals_1.id, self.attribute_vals_2.id]) - ], - "custom": True, - "required": True, - } - ) - # create attribute line 2 - self.attributeLine2 = self.productAttributeLine.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - "attribute_id": self.attribute_2.id, - "value_ids": [ - (6, 0, [self.attribute_vals_3.id, self.attribute_vals_4.id]) - ], - "custom": True, - "required": True, - } - ) - self.product_tmpl_id.write( - { - "attribute_line_ids": [ - (6, 0, [self.attributeLine1.id, self.attributeLine2.id]) - ], - } - ) - self.attribute_1.custom_type = "binary" - self.product_tmpl_id.configure_product() - self.productConfWizard.action_next_step() - product_config_wizard = self.productConfWizard.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{self.attribute_1.id}": self.custom_vals.id, - f"__custom_{self.attribute_1.id}": "Test", - } - ) - self.attributeLine1.custom = False - self.attributeLine2.custom = False - with self.assertRaises(ValidationError): - self.product_tmpl_id.configure_product() - - def test_18_onchange_attribute(self): - # create domain - self.productConfigDomainId = self.env["product.config.domain"].create( - {"name": "restriction 1"} - ) - self.productConfigDomainId.compute_domain() - # create attribute value line 1 - self.env["product.config.domain.line"].create( - { - "domain_id": self.productConfigDomainId.id, - "attribute_id": self.attr_fuel.id, - "condition": "in", - "value_ids": [(6, 0, [self.value_gasoline.id])], - "operator": "and", - } - ) - self.env["product.config.domain.line"].create( - { - "domain_id": self.productConfigDomainId.id, - "attribute_id": self.attr_color.id, - "condition": "in", - "value_ids": [(6, 0, [self.value_red.id])], - "operator": "and", - } - ) - self.attributeLine1 = self.productAttributeLine.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - "attribute_id": self.attribute_1.id, - "value_ids": [ - (6, 0, [self.attribute_vals_1.id, self.attribute_vals_2.id]) - ], - "required": True, - } - ) - # create attribute line 2 - self.attributeLine2 = self.productAttributeLine.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - "attribute_id": self.attribute_2.id, - "value_ids": [ - (6, 0, [self.attribute_vals_3.id, self.attribute_vals_4.id]) - ], - "required": True, - } - ) - self.product_tmpl_id.write( - { - "attribute_line_ids": [ - (6, 0, [self.attributeLine1.id, self.attributeLine2.id]) - ], - } - ) - self.productConfigDomainId.compute_domain() - # create attribute value line 1 - config_line = self.env["product.config.line"].create( # noqa - { - "product_tmpl_id": self.product_tmpl_id.id, - "attribute_line_id": self.attributeLine1.id, - "value_ids": [ - (6, 0, [self.attribute_vals_1.id, self.attribute_vals_2.id]) - ], - "domain_id": self.productConfigDomainId.id, - } - ) - # FIXME: broken as - # """ - # psycopg2.errors.NotNullViolation: - # null value in column "domain_id" - # of relation "product_config_line" - # violates not-null constraint - # DETAIL: Failing row contains ... - # with self.assertRaises(ValidationError): - # config_line.onchange_attribute() - - # self.assertFalse( - # config_line.value_ids, - # "Error: If value_ids True\ - # Method: onchange_attribute()", - # ) - - def test_19_eval(self): - self.attr_color.custom_type = "binary" - productConfigSessionCustVals1 = self.env[ - "product.config.session.custom.value" - ].create( - { - "cfg_session_id": self.session_id.id, - "attribute_id": self.attr_color.id, - "attachment_ids": [(6, 0, [self.irAttachement.id])], - } - ) - checkBinary = productConfigSessionCustVals1.eval() - self.assertTrue( - checkBinary, - "Error: If value False\ - Method: eval()", - ) - - productConfigSessionCustVals = self.env[ - "product.config.session.custom.value" - ].create( - {"cfg_session_id": self.session_id.id, "attribute_id": self.attr_fuel.id} - ) - self.attr_fuel.custom_type = "integer" - productConfigSessionCustVals.update({"value": 154}) - checkIntval = productConfigSessionCustVals.eval() - self.assertEqual( - 154, - checkIntval, - "Error: If Value not equal\ - Method: eval()", - ) - - self.attr_fuel.custom_type = "float" - productConfigSessionCustVals.update({"value": 15.4}) - checkfloat = productConfigSessionCustVals.eval() - self.assertEqual( - 15.4, - checkfloat, - "Error: If Value not equal\ - Method: eval()", - ) - - def test_20_values_available(self): - check_available_val_ids = ( - self.value_gasoline + self.value_218i + self.value_sport_line - ).ids - product_tmpl_id = self.config_product.id - values_ids = [self.value_diesel.id] - available_value_ids = self.productConfigSession.values_available( - check_available_val_ids, values_ids, {}, product_tmpl_id - ) - self.assertNotIn( - self.value_sport_line.id, - available_value_ids, - "Error: If value exists\ - Method: values_available()", - ) diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/test_wizard.py b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/test_wizard.py deleted file mode 100644 index 1a066048..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/tests/test_wizard.py +++ /dev/null @@ -1,602 +0,0 @@ -from odoo.exceptions import UserError - -from ..tests.common import ProductConfiguratorTestCases - -# FIXME: many tests here do not have any assertions. -# They simply run something and expect it to not raise an exception. -# This is not a good practice. Tests should have assertions. - - -class ConfigurationWizard(ProductConfiguratorTestCases): - @classmethod - def setUpClass(cls): - super().setUpClass() - cls.productTemplate = cls.env["product.template"] - cls.productAttributeLine = cls.env["product.template.attribute.line"] - cls.productConfigStepLine = cls.env["product.config.step.line"] - cls.productConfigSession = cls.env["product.config.session"] - cls.product_category = cls.env.ref("product.product_category_5") - cls.attr_line_fuel = cls.env.ref( - "product_configurator.product_attribute_line_2_series_fuel" - ) - cls.attr_line_engine = cls.env.ref( - "product_configurator.product_attribute_line_2_series_engine" - ) - cls.value_diesel = cls.env.ref( - "product_configurator.product_attribute_value_diesel" - ) - cls.value_218d = cls.env.ref( - "product_configurator.product_attribute_value_218d" - ) - cls.value_220d = cls.env.ref( - "product_configurator.product_attribute_value_220d" - ) - cls.value_silver = cls.env.ref( - "product_configurator.product_attribute_value_silver" - ) - cls.config_step_engine = cls.env.ref("product_configurator.config_step_engine") - cls.config_step_body = cls.env.ref("product_configurator.config_step_body") - cls.product_tmpl_id = cls.env["product.template"].create( - { - "name": "Test Configuration", - "config_ok": True, - "type": "consu", - "categ_id": cls.product_category.id, - } - ) - cls.custom_vals = cls.productConfigSession.get_custom_value_id() - cls.cfg_tmpl = cls.env.ref("product_configurator.bmw_2_series") - - attribute_vals = cls.cfg_tmpl.attribute_line_ids.mapped("value_ids") - cls.attr_vals = attribute_vals - - cls.attr_val_ext_ids = { - v: k for k, v in attribute_vals.get_external_id().items() - } - - def _check_wizard_nxt_step(self): - self.ProductConfWizard.action_next_step() - product_config_wizard = self.ProductConfWizard.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - } - ) - # create attribute line 1 - self.attributeLine1 = self.productAttributeLine.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - "attribute_id": self.attr_fuel.id, - "value_ids": [(6, 0, [self.value_gasoline.id, self.value_diesel.id])], - "required": True, - } - ) - # create attribute line 2 - self.attributeLine2 = self.productAttributeLine.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - "attribute_id": self.attr_engine.id, - "value_ids": [(6, 0, [self.value_218i.id, self.value_220i.id])], - "required": True, - } - ) - # create attribute line 2 - self.attributeLine3 = self.productAttributeLine.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - "attribute_id": self.attr_engine.id, - "value_ids": [(6, 0, [self.value_218d.id, self.value_220d.id])], - "required": True, - } - ) - # configure product creating config step - self.configStepLine1 = self.productConfigStepLine.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - "config_step_id": self.config_step_engine.id, - "attribute_line_ids": [ - (6, 0, [self.attributeLine1.id, self.attributeLine2.id]) - ], - } - ) - # create config_step_line 2 - self.configStepLine2 = self.productConfigStepLine.create( - { - "product_tmpl_id": self.product_tmpl_id.id, - "config_step_id": self.config_step_body.id, - "attribute_line_ids": [(6, 0, [self.attributeLine3.id])], - } - ) - self.product_tmpl_id.write( - { - "config_step_line_ids": [ - (6, 0, [self.configStepLine1.id, self.configStepLine2.id]) - ], - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{self.attr_fuel.id}": self.value_gasoline.id, - f"__attribute_{self.attr_engine.id}": self.value_218i.id, - } - ) - product_config_wizard.action_next_step() - product_config_wizard.write( - { - f"__attribute_{self.attr_color.id}": self.value_red.id, - } - ) - return product_config_wizard - - def test_01_action_previous_step(self): - product_config_wizard = self._check_wizard_nxt_step() - product_config_wizard.action_previous_step() - self.assertEqual( - product_config_wizard.state, - str(self.configStepLine1.id), - "Error: If state are not equal\ - Method: action_next_step()", - ) - product_config_wizard.action_next_step() - self.assertEqual( - product_config_wizard.state, - str(self.configStepLine2.id), - "Error: If state are not equal\ - Method: action_next_step()", - ) - wizard_action = product_config_wizard.action_next_step() - variant_id2 = wizard_action.get("res_id") - self.assertTrue( - variant_id2, - "Error: If varient not exists\ - Method: action_next_step()", - ) - - def test_02_action_reset(self): - product_config_wizard = self._check_wizard_nxt_step() - action_wizard = product_config_wizard.action_reset() - product_tmpl_id = action_wizard.get("context") - self.assertTrue( - product_tmpl_id.get("default_product_tmpl_id"), - "Error: If product_tmpl_id not exists\ - Method: action_reset()", - ) - - def test_03_compute_attr_lines(self): - product_config_wizard = self._check_wizard_nxt_step() - product_config_wizard._compute_attr_lines() - self.assertTrue( - product_config_wizard.attribute_line_ids, - "Error: If atttribute_line_ids not exists\ - Method: _compute_attr_lines()", - ) - - def test_04_get_state_selection(self): - product_config_wizard = self._check_wizard_nxt_step() - config_wiz = product_config_wizard.with_context( - wizard_id=product_config_wizard.id - ).get_state_selection() - self.assertTrue( - config_wiz[1:], - "Error: If not config step selection\ - Method: get_state_selection()", - ) - - def test_05_compute_cfg_image(self): - product_config_wizard = self._check_wizard_nxt_step() - product_config_wizard._compute_cfg_image() - self.assertFalse( - product_config_wizard.product_img, - "Error: If product_img exists\ - Method: _compute_cfg_image()", - ) - - def test_06_onchange_product_tmpl(self): - product_config_wizard = self._check_wizard_nxt_step() - product_config_wizard.write( - { - "product_tmpl_id": self.config_product.id, - } - ) - with self.assertRaises(UserError): - product_config_wizard.onchange_product_tmpl() - - def test_07_get_onchange_domains(self): - product_config_wizard = self._check_wizard_nxt_step() - conf = [ - "gasoline", - "228i", - "model_luxury_line", - "silver", - "rims_384", - "tapistry_black", - "steptronic", - "smoker_package", - "tow_hook", - ] - values = [ - "gasoline", - "228i", - "model_luxury_line", - "silver", - "rims_384", - "tapistry_black", - "steptronic", - "smoker_package", - "tow_hook", - ] - product_config_wizard.get_onchange_domains(values, conf) - - def test_08_onchange_state(self): - product_config_wizard = self._check_wizard_nxt_step() - product_config_wizard._onchange_state() - - def test_09_onchange_product_preset(self): - product_config_wizard = self._check_wizard_nxt_step() - product_config_wizard._onchange_product_preset() - - def test_10_open_step(self): - wizard = self.env["product.configurator"] - step_to_open = wizard.config_session_id.check_and_open_incomplete_step() - wizard.open_step(step_to_open) - - # FIXME: broken test - # Fails at `product_config_wizard.attribute_line_ids.update(` as - # """odoo.exceptions.UserError: - # On the product Test Configuration - # you cannot transform the attribute Engine into the attribute 5.""" - # - # Also, the test is not very useful. It does not assert anything. - # - # def test_11_onchange(self): - # field_name = "" - # values = {f"__attribute_{self.attr_fuel.id}": self.value_gasoline.id} - # product_config_wizard = self._check_wizard_nxt_step() - # field_prefix = product_config_wizard._prefixes.get("field_prefix") - # field_name = f"{field_prefix}{field_name}" - # specs = product_config_wizard._onchange_spec() - # product_config_wizard.onchange(values, field_name, specs) - # - # product_config_wizard.attribute_line_ids.update( - # { - # "attribute_id": self.attr_fuel.id, - # "custom": True, - # } - # ) - # values2 = { - # f"__attribute_{self.attr_fuel.id}": self.custom_vals.id, - # f"__custom_{self.attr_fuel.id}": "Test1", - # } - # product_config_wizard.onchange(values2, field_name, specs) - - def test_12_fields_get(self): - product_config_wizard = self._check_wizard_nxt_step() - product_config_wizard.fields_get() - product_config_wizard.with_context( - wizard_id=product_config_wizard.id - ).fields_get() - - # custom value - self.attr_line_fuel.custom = True - self.attr_line_engine.custom = True - product_config_wizard_1 = self.ProductConfWizard.create( - { - "product_tmpl_id": self.config_product.id, - } - ) - product_config_wizard_1.action_next_step() - product_config_wizard_1.write( - { - f"__attribute_{self.attr_fuel.id}": self.value_gasoline.id, - f"__custom_{self.attr_fuel.id}": "Test1", - f"__attribute_{self.attr_engine.id}": self.value_218i.id, - f"__custom_{self.attr_engine.id}": "Test2", - } - ) - product_config_wizard_1.action_next_step() - product_config_wizard_1.write( - { - f"__attribute_{self.attr_color.id}": self.value_red.id, - f"__attribute_{self.attr_rims.id}": self.value_rims_378.id, - } - ) - product_config_wizard_1.action_next_step() - product_config_wizard_1.write( - { - f"__attribute_{self.attr_model_line.id}": self.value_sport_line.id, - } - ) - product_config_wizard_1.action_previous_step() - product_config_wizard_1.action_previous_step() - product_config_wizard_1.write( - { - f"__attribute_{self.attr_engine.id}": self.value_220i.id, - } - ) - product_config_wizard_1.action_next_step() - product_config_wizard_1.action_next_step() - - vals = { - f"__attribute_{self.attr_model_line.id}": self.value_model_sport_line.id, - } - product_config_wizard_1.write(vals) - product_config_wizard_1.action_next_step() - product_config_wizard_1.write( - { - f"__attribute_{self.attr_tapistry.id}": self.value_tapistry.id, - } - ) - product_config_wizard_1.action_next_step() - product_config_wizard_1.write( - { - f"__attribute_{self.attr_transmission.id}": self.value_transmission.id, - f"__attribute_{self.attr_options.id}": [ - [6, 0, [self.value_options_2.id]] - ], - } - ) - product_config_wizard_1.action_next_step() - product_config_wizard_1.with_context( - wizard_id=product_config_wizard_1.id - ).fields_get() - - def test_13_fields_view_get(self): - product_config_wizard = self._check_wizard_nxt_step() - product_config_wizard.fields_view_get() - product_config_wizard.with_context( - wizard_id=product_config_wizard.id - ).fields_view_get() - # custom value - # custom value - self.attr_line_fuel.custom = True - self.attr_line_engine.custom = True - product_config_wizard_1 = self.ProductConfWizard.create( - { - "product_tmpl_id": self.config_product.id, - } - ) - product_config_wizard_1.action_next_step() - product_config_wizard_1.write( - { - f"__attribute_{self.attr_fuel.id}": self.value_gasoline.id, - f"__custom_{self.attr_fuel.id}": "Test1", - f"__attribute_{self.attr_engine.id}": self.value_218i.id, - f"__custom_{self.attr_engine.id}": "Test2", - } - ) - product_config_wizard_1.action_next_step() - product_config_wizard_1.write( - { - f"__attribute_{self.attr_color.id}": self.value_red.id, - f"__attribute_{self.attr_rims.id}": self.value_rims_378.id, - } - ) - product_config_wizard_1.action_next_step() - product_config_wizard_1.write( - { - f"__attribute_{self.attr_model_line.id}": self.value_sport_line.id, - } - ) - product_config_wizard_1.action_previous_step() - product_config_wizard_1.action_previous_step() - product_config_wizard_1.write( - { - f"__attribute_{self.attr_engine.id}": self.value_220i.id, - } - ) - product_config_wizard_1.action_next_step() - product_config_wizard_1.action_next_step() - vals = { - f"__attribute_{self.attr_model_line.id}": self.value_model_sport_line.id, - } - product_config_wizard_1.write(vals) - product_config_wizard_1.action_next_step() - product_config_wizard_1.write( - { - f"__attribute_{self.attr_tapistry.id}": self.value_tapistry.id, - } - ) - product_config_wizard_1.action_next_step() - product_config_wizard_1.write( - { - f"__attribute_{self.attr_transmission.id}": self.value_transmission.id, - f"__attribute_{self.attr_options.id}": [ - [6, 0, [self.value_options_2.id]] - ], - } - ) - product_config_wizard_1.action_next_step() - product_config_wizard_1.with_context( - wizard_id=product_config_wizard_1.id - ).fields_view_get() - - def test_14_unlink(self): - product_config_wizard = self._check_wizard_nxt_step() - unlinkWizard = product_config_wizard.unlink() - self.assertTrue( - unlinkWizard, - "Error: If not unlink record\ - Method: unlink()", - ) - - def test_15_read(self): - product_config_wizard = self._check_wizard_nxt_step() - values = { - f"__attribute_{self.attr_fuel.id}": self.value_gasoline.id, - f"__attribute_{self.attr_engine.id}": self.value_218i.id, - f"__attribute_{self.attr_color.id}": self.value_red.id, - } - product_config_wizard.read(values) - product_tmpl = self.env["product.template"].create( - { - "name": "Test Custom", - "config_ok": True, - "type": "consu", - "categ_id": self.product_category.id, - } - ) - self.ProductConfWizard.action_next_step() - product_config_wizard_1 = self.ProductConfWizard.create( - { - "product_tmpl_id": product_tmpl.id, - } - ) - # create attribute line 1 - self.attributeLine1 = self.productAttributeLine.create( - { - "product_tmpl_id": product_tmpl.id, - "attribute_id": self.attr_fuel.id, - "value_ids": [(6, 0, [self.value_gasoline.id, self.value_diesel.id])], - "required": True, - "custom": True, - } - ) - # create attribute line 2 - self.attributeLine2 = self.productAttributeLine.create( - { - "product_tmpl_id": product_tmpl.id, - "attribute_id": self.attr_engine.id, - "value_ids": [(6, 0, [self.value_218i.id, self.value_220i.id])], - "required": True, - "custom": True, - } - ) - # create attribute line 2 - self.attributeLine3 = self.productAttributeLine.create( - { - "product_tmpl_id": product_tmpl.id, - "attribute_id": self.attr_engine.id, - "value_ids": [(6, 0, [self.value_218d.id, self.value_220d.id])], - "required": True, - } - ) - # configure product creating config step - self.configStepLine1 = self.productConfigStepLine.create( - { - "product_tmpl_id": product_tmpl.id, - "config_step_id": self.config_step_engine.id, - "attribute_line_ids": [ - (6, 0, [self.attributeLine1.id, self.attributeLine2.id]) - ], - } - ) - # create config_step_line 2 - self.configStepLine2 = self.productConfigStepLine.create( - { - "product_tmpl_id": product_tmpl.id, - "config_step_id": self.config_step_body.id, - "attribute_line_ids": [(6, 0, [self.attributeLine3.id])], - } - ) - product_tmpl.write( - { - "config_step_line_ids": [ - (6, 0, [self.configStepLine1.id, self.configStepLine2.id]) - ], - } - ) - product_config_wizard_1.action_next_step() - product_config_wizard_1.write( - { - f"__attribute_{self.attr_fuel.id}": self.custom_vals.id, - f"__custom_{self.attr_fuel.id}": "#DEFSRE", - f"__attribute_{self.attr_engine.id}": self.custom_vals.id, - f"__custom_{self.attr_engine.id}": "#FERDFGR", - } - ) - product_config_wizard_1.action_next_step() - product_config_wizard_1.write( - { - f"__attribute_{self.attr_color.id}": self.value_red.id, - } - ) - # check for custom value - custom_vals = { - f"__attribute_{self.attr_fuel.id}": self.custom_vals.id, - f"__custom_{self.attr_fuel.id}": "#DEFSRE", - f"__attribute_{self.attr_engine.id}": self.custom_vals.id, - f"__custom_{self.attr_engine.id}": "#FERDFGR", - f"__attribute_{self.attr_color.id}": self.value_red.id, - } - product_config_wizard_1.read(custom_vals) - session = self.productConfigSession.search( - [("product_tmpl_id", "=", product_tmpl.id)] - ) - session.unlink() - self.attributeLine1.custom = False - self.attributeLine1.multi = True - self.ProductConfWizard.action_next_step() - product_config_wizard_2 = self.ProductConfWizard.create( - { - "product_tmpl_id": product_tmpl.id, - } - ) - product_config_wizard_2.action_next_step() - product_config_wizard_2.write( - { - f"__attribute_{self.attr_fuel.id}": [ - (6, 0, [self.value_diesel.id, self.value_gasoline.id]) - ], - f"__attribute_{self.attr_engine.id}": self.custom_vals.id, - f"__custom_{self.attr_engine.id}": "#FERDFGR", - } - ) - product_config_wizard_2.action_next_step() - product_config_wizard_2.write( - { - f"__attribute_{self.attr_color.id}": self.value_red.id, - } - ) - # check for multi value - multi_vals = { - f"__attribute_{self.attr_fuel.id}": [ - (6, 0, [self.value_diesel.id, self.value_gasoline.id]) - ], - f"__attribute_{self.attr_engine.id}": self.custom_vals.id, - f"__custom_{self.attr_engine.id}": "#FERDFGR", - f"__attribute_{self.attr_color.id}": self.value_red.id, - } - product_config_wizard_2.read(multi_vals) - - def test_16_get_onchange_domains(self): - self.wizard = self.env["product.configurator"] - # session id - session_id = self.productConfigSession.create( - { - "product_tmpl_id": self.config_product.id, - "value_ids": [ - ( - 6, - 0, - [ - self.value_gasoline.id, - self.value_transmission.id, - self.value_red.id, - ], - ) - ], - "user_id": self.env.user.id, - } - ) - field_prefix = self.wizard._prefixes.get("field_prefix") - check_available_val_id = { - field_prefix - + "%s" % (self.value_gasoline.attribute_id.id): self.value_gasoline.id, - field_prefix + "%s" % (self.value_218i.attribute_id.id): self.value_218i.id, - field_prefix - + "%s" % (self.value_sport_line.attribute_id.id): self.value_sport_line.id, - } - values_ids = self.value_diesel.ids - product_tmpl_id = self.config_product - domains_available = self.wizard.get_onchange_domains( - check_available_val_id, values_ids, product_tmpl_id, session_id - ) - rec = domains_available[ - field_prefix + str(self.value_sport_line.attribute_id.id) - ][-1][-1] - self.assertNotIn( - self.value_sport_line.id, - rec, - "Error: If value exists\ - Method: get_onchange_domains()", - ) diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/views/product_attribute_view.xml b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/views/product_attribute_view.xml deleted file mode 100644 index 2316db3a..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/views/product_attribute_view.xml +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - - product.config.product.attribute.tree - product.attribute - - - - - - - - - - product.attribute.form.view - product.attribute - 100 - - - -
- -
-
- - - - - base.group_no_one - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - Attributes - ir.actions.act_window - product.attribute - tree,form - {'flag_config_ok': True} - - - - - - - - product.template.attribute.value.view.tree.weight.extra - product.template.attribute.value - - tree - - - - - - - - - product.template.attribute.value.view.form.weight.extra - product.template.attribute.value - - form - - - - - - - - - - - product.attribute.value.tree - product.attribute.value - - - - - - - - - - - product.config.product.attribute.value.form.view - product.attribute.value - -
- - -
-
-
-
- - - - - - - - -
-
-
-
- - - Attribute Values - ir.actions.act_window - product.attribute.value - tree,form - - - - - - - product.template.attribute.line.form - product.template.attribute.line - - - - {'flag_config_ok': context.get('default_config_ok', False)} - - - - -
diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/views/product_config_view.xml b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/views/product_config_view.xml deleted file mode 100644 index 768d6a47..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/views/product_config_view.xml +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - product.configurator.config.step.form - product.config.step - -
- - - - - - - -
-
-
- - - product.configurator.config.step.tree - product.config.step - -
- - - -
-
-
- - - - - product.configurator.domain.form - product.config.domain - -
- - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - - product.configurator.domain.form.template - product.config.domain - -
- - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - product.config.session.tree - product.config.session - - - - - - - - - - - - - - - - - - product.config.session.form - product.config.session - -
-
- -
- - -

-
- - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
diff --git a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/views/product_view.xml b/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/views/product_view.xml deleted file mode 100644 index 3d8d26c0..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/product_configurator/views/product_view.xml +++ /dev/null @@ -1,389 +0,0 @@ - - - - - product.template.common.form - product.template - 16 - - - - - - - - - - product.configurator.product.template.form - product.template - 16 - - - - -
- -
- -
-
- - - - { - 'show_attribute': False, - 'attribute_line_ids': attribute_line_ids, - } - - - - - - - - - - - - {'required': [('custom','!=',True)]} - - - - {'flag_config_ok': context.get('default_config_ok', False)} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {'invisible': [('config_ok','=',True)]} - - - - - - - product.configurator.product.template.search.view - product.template - - - - - - - - - - - - product.template.product.tree - product.template - - - - context.get('default_config_ok', 0) - - - - - - Product.template.product.kanban - product.template - - - - - - -
- - - -
-
-
-
- - - product.configurator.form.view.custom.vals - product.product - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- -
diff --git a/odoo-bringout-oca-product-configurator-product_configurator/pyproject.toml b/odoo-bringout-oca-product-configurator-product_configurator/pyproject.toml deleted file mode 100644 index b2e13b1d..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator/pyproject.toml +++ /dev/null @@ -1,42 +0,0 @@ -[project] -name = "odoo-bringout-oca-product-configurator-product_configurator" -version = "16.0.0" -description = "Product Configurator - Base for product configuration interface modules" -authors = [ - { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } -] -dependencies = [ - "odoo-bringout-oca-ocb-account>=16.0.0", - "requests>=2.25.1" -] -readme = "README.md" -requires-python = ">= 3.11" -classifiers = [ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Developers", - "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Topic :: Office/Business", -] - -[project.urls] -homepage = "https://github.com/bringout/0" -repository = "https://github.com/bringout/0" - -[build-system] -requires = ["hatchling"] -build-backend = "hatchling.build" - -[tool.hatch.metadata] -allow-direct-references = true - -[tool.hatch.build.targets.wheel] -packages = ["product_configurator"] - -[tool.rye] -managed = true -dev-dependencies = [ - "pytest>=8.4.1", -] diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/README.md b/odoo-bringout-oca-product-configurator-product_configurator_mrp/README.md deleted file mode 100644 index ea4ae3d2..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# Product Configurator Manufacturing - -Odoo addon: product_configurator_mrp - -## Installation - -```bash -pip install odoo-bringout-oca-product-configurator-product_configurator_mrp -``` - -## Dependencies - -This addon depends on: -- mrp -- product_configurator - -## Manifest Information - -- **Name**: Product Configurator Manufacturing -- **Version**: 16.0.1.0.0 -- **Category**: Manufacturing -- **License**: AGPL-3 -- **Installable**: True - -## Source - -Based on [OCA/product-configurator](https://github.com/OCA/product-configurator) branch 16.0, addon `product_configurator_mrp`. - -## License - -This package maintains the original AGPL-3 license from the upstream Odoo project. - -## Documentation - -- Overview: doc/OVERVIEW.md -- Architecture: doc/ARCHITECTURE.md -- Models: doc/MODELS.md -- Controllers: doc/CONTROLLERS.md -- Wizards: doc/WIZARDS.md -- Reports: doc/REPORTS.md -- Security: doc/SECURITY.md -- Install: doc/INSTALL.md -- Usage: doc/USAGE.md -- Configuration: doc/CONFIGURATION.md -- Dependencies: doc/DEPENDENCIES.md -- Troubleshooting: doc/TROUBLESHOOTING.md -- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/ARCHITECTURE.md b/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/ARCHITECTURE.md deleted file mode 100644 index 3b923409..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/ARCHITECTURE.md +++ /dev/null @@ -1,32 +0,0 @@ -# Architecture - -```mermaid -flowchart TD - U[Users] -->|HTTP| V[Views and QWeb Templates] - V --> C[Controllers] - V --> W[Wizards – Transient Models] - C --> M[Models and ORM] - W --> M - M --> R[Reports] - DX[Data XML] --> M - S[Security – ACLs and Groups] -. enforces .-> M - - subgraph Product_configurator_mrp Module - product_configurator_mrp - direction LR - M:::layer - W:::layer - C:::layer - V:::layer - R:::layer - S:::layer - DX:::layer - end - - classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px -``` - -Notes -- Views include tree/form/kanban templates and report templates. -- Controllers provide website/portal routes when present. -- Wizards are UI flows implemented with `models.TransientModel`. -- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/CONFIGURATION.md b/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/CONFIGURATION.md deleted file mode 100644 index 663dcd03..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/CONFIGURATION.md +++ /dev/null @@ -1,3 +0,0 @@ -# Configuration - -Refer to Odoo settings for product_configurator_mrp. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/CONTROLLERS.md b/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/CONTROLLERS.md deleted file mode 100644 index f628e770..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/CONTROLLERS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Controllers - -This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/DEPENDENCIES.md b/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/DEPENDENCIES.md deleted file mode 100644 index 6076f6dc..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/DEPENDENCIES.md +++ /dev/null @@ -1,6 +0,0 @@ -# Dependencies - -This addon depends on: - -- [mrp](https://github.com/bringout/oca-ocb-mrp/tree/9a98a954badbed600c34241c3523e8b177878602/odoo-bringout-oca-ocb-mrp) -- [product_configurator](https://github.com/bringout/oca-technical) diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/FAQ.md b/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/FAQ.md deleted file mode 100644 index c8e16dd2..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/FAQ.md +++ /dev/null @@ -1,4 +0,0 @@ -# FAQ - -- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged). -- Q: How to enable? A: Start server with --addon product_configurator_mrp or install in UI. diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/INSTALL.md b/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/INSTALL.md deleted file mode 100644 index c82c74dd..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/INSTALL.md +++ /dev/null @@ -1,7 +0,0 @@ -# Install - -```bash -pip install odoo-bringout-oca-product-configurator-product_configurator_mrp" -# or -uv pip install odoo-bringout-oca-product-configurator-product_configurator_mrp" -``` diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/MODELS.md b/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/MODELS.md deleted file mode 100644 index 98ad925a..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/MODELS.md +++ /dev/null @@ -1,17 +0,0 @@ -# Models - -Detected core models and extensions in product_configurator_mrp. - -```mermaid -classDiagram - class mrp_bom_line_configuration - class mrp_bom_line_configuration_set - class mrp_bom - class mrp_bom_line - class mrp_production - class product_config_session -``` - -Notes -- Classes show model technical names; fields omitted for brevity. -- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/OVERVIEW.md b/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/OVERVIEW.md deleted file mode 100644 index 1e8ede48..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/OVERVIEW.md +++ /dev/null @@ -1,6 +0,0 @@ -# Overview - -Packaged Odoo addon: product_configurator_mrp. Provides features documented in upstream Odoo 16 under this addon. - -- Source: OCA/OCB 16.0, addon product_configurator_mrp -- License: LGPL-3 diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/REPORTS.md b/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/REPORTS.md deleted file mode 100644 index e0ea35fb..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/REPORTS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Reports - -This module does not define custom reports. diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/SECURITY.md b/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/SECURITY.md deleted file mode 100644 index 99f9c696..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/SECURITY.md +++ /dev/null @@ -1,42 +0,0 @@ -# Security - -Access control and security definitions in product_configurator_mrp. - -## Access Control Lists (ACLs) - -Model access permissions defined in: -- **[ir.model.access.csv](../product_configurator_mrp/security/ir.model.access.csv)** - - 3 model access rules - -## Record Rules - -Row-level security rules defined in: - -## Security Groups & Configuration - -Security groups and permissions defined in: -- **[configurator_security.xml](../product_configurator_mrp/security/configurator_security.xml)** - - 1 security groups defined - -```mermaid -graph TB - subgraph "Security Layers" - A[Users] --> B[Groups] - B --> C[Access Control Lists] - C --> D[Models] - B --> E[Record Rules] - E --> F[Individual Records] - end -``` - -Security files overview: -- **[configurator_security.xml](../product_configurator_mrp/security/configurator_security.xml)** - - Security groups, categories, and XML-based rules -- **[ir.model.access.csv](../product_configurator_mrp/security/ir.model.access.csv)** - - Model access permissions (CRUD rights) - -Notes -- Access Control Lists define which groups can access which models -- Record Rules provide row-level security (filter records by user/group) -- Security groups organize users and define permission sets -- All security is enforced at the ORM level by Odoo diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/TROUBLESHOOTING.md deleted file mode 100644 index 56853cb7..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/TROUBLESHOOTING.md +++ /dev/null @@ -1,5 +0,0 @@ -# Troubleshooting - -- Ensure Python and Odoo environment matches repo guidance. -- Check database connectivity and logs if startup fails. -- Validate that dependent addons listed in DEPENDENCIES.md are installed. diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/USAGE.md b/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/USAGE.md deleted file mode 100644 index 1a004c87..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/USAGE.md +++ /dev/null @@ -1,7 +0,0 @@ -# Usage - -Start Odoo including this addon (from repo root): - -```bash -python3 scripts/nix_odoo_web_server.py --db-name mydb --addon product_configurator_mrp -``` diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/WIZARDS.md b/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/WIZARDS.md deleted file mode 100644 index 6ad36c1b..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/doc/WIZARDS.md +++ /dev/null @@ -1,8 +0,0 @@ -# Wizards - -Transient models exposed as UI wizards in product_configurator_mrp. - -```mermaid -classDiagram - class ProductConfiguratorMrp -``` diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/README.rst b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/README.rst deleted file mode 100644 index cd7b8303..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/README.rst +++ /dev/null @@ -1,86 +0,0 @@ -================================== -Product Configurator Manufacturing -================================== - -.. - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! This file is generated by oca-gen-addon-readme !! - !! changes will be overwritten. !! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:f57ae9cbefa8b335475e030e097ae2d2e530a627f774b11a501fb3231af06fe4 - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -.. |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-OCA%2Fproduct--configurator-lightgray.png?logo=github - :target: https://github.com/OCA/product-configurator/tree/16.0/product_configurator_mrp - :alt: OCA/product-configurator -.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/product-configurator-16-0/product-configurator-16-0-product_configurator_mrp - :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/product-configurator&target_branch=16.0 - :alt: Try me on Runboat - -|badge1| |badge2| |badge3| |badge4| |badge5| - -Product Configurator wizard available on Manufacturing Orders. - -**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 -~~~~~~~ - -* Pledra - -Contributors -~~~~~~~~~~~~ - -* `Aion Tech `_: - - * Simone Rubino - -Maintainers -~~~~~~~~~~~ - -This module is maintained by the OCA. - -.. image:: https://odoo-community.org/logo.png - :alt: Odoo Community Association - :target: https://odoo-community.org - -OCA, or the Odoo Community Association, is a nonprofit organization whose -mission is to support the collaborative development of Odoo features and -promote its widespread use. - -.. |maintainer-PCatinean| image:: https://github.com/PCatinean.png?size=40px - :target: https://github.com/PCatinean - :alt: PCatinean - -Current `maintainer `__: - -|maintainer-PCatinean| - -This module is part of the `OCA/product-configurator `_ project on GitHub. - -You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/__init__.py b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/__init__.py deleted file mode 100644 index 5c81ea7a..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright (C) 2021 Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from . import models -from . import wizard diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/__manifest__.py b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/__manifest__.py deleted file mode 100644 index bb3f1c2b..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/__manifest__.py +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (C) 2021 Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -{ - "name": "Product Configurator Manufacturing", - "version": "16.0.1.0.0", - "category": "Manufacturing", - "summary": "BOM Support for configurable products", - "author": "Pledra, Odoo Community Association (OCA)", - "license": "AGPL-3", - "website": "https://github.com/OCA/product-configurator", - "depends": ["mrp", "product_configurator"], - "data": [ - "data/menu_product.xml", - "views/mrp_view.xml", - "security/configurator_security.xml", - "security/ir.model.access.csv", - ], - "assets": { - "web.assets_backend": [ - "/product_configurator_mrp/static/src/js/list_controller.js", - "/product_configurator_mrp/static/src/js/kanban_controller.js", - "/product_configurator_mrp/static/src/js/form_controller.js", - "/product_configurator_mrp/static/src/scss/mrp_config.scss", - "/product_configurator_mrp/static/src/xml/mrp_production_views.xml", - ], - }, - "demo": ["demo/product_template.xml"], - "qweb": ["static/src/xml/mrp_production_views.xml"], - "installable": True, - "auto_install": False, - "development_status": "Beta", - "maintainers": ["PCatinean"], -} diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/data/menu_product.xml b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/data/menu_product.xml deleted file mode 100644 index 2df11dbf..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/data/menu_product.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - {"search_default_consumable": 1, "default_type": "product", "search_default_filter_standard_products": 1} - - - {"search_default_filter_standard_products": 1} - - - diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/demo/product_template.xml b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/demo/product_template.xml deleted file mode 100644 index f3d53415..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/demo/product_template.xml +++ /dev/null @@ -1,103 +0,0 @@ - - - - product - - - - product - - - product - - - product - - - product - - - product - - - product - - - product - - - product - - - product - - - product - - - product - - - product - - - product - - - product - - - product - - - product - - - product - - - product - - - product - - - product - - - product - - - product - - diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/i18n/bs.po b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/i18n/bs.po deleted file mode 100644 index 41b7620e..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/i18n/bs.po +++ /dev/null @@ -1,275 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * product_configurator_mrp -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__value_ids -msgid "Attribute Values" -msgstr "Vrijednosti značajki" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__attribute_line_ids -msgid "Attributes" -msgstr "Atributi" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom -msgid "Bill of Material" -msgstr "Sastavnica" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom_line -msgid "Bill of Material Line" -msgstr "Stavka sastavnice" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__bom_line_ids -msgid "BoM Lines" -msgstr "Stavke sastavnice" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_production__config_session_id -msgid "Config Session" -msgstr "Konfiguracijska sesija" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__config_set_id -msgid "Config Set" -msgstr "Config Set" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom__config_ok -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_production__config_ok -msgid "Configurable" -msgstr "Configurable" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_tmpl_id -msgid "Configurable Template" -msgstr "Konfigurabilni predložak" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__name -msgid "Configuration" -msgstr "Konfiguracija" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_session_id -msgid "Configuration Session" -msgstr "Konfiguracijska sesija" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__name -msgid "Configuration Session Number" -msgstr "Broj konfiguracijske sesije" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line__config_set_id -msgid "Configuration Set" -msgstr "Configuration Set" - -#. module: product_configurator_mrp -#: model:ir.ui.menu,name:product_configurator_mrp.product_menu_mrp_bom_line_config_set -msgid "Configuration Sets" -msgstr "Setovi konfiguracija" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_step_name -msgid "Configuration Step" -msgstr "Korak konfiguracije" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_step -msgid "Configuration Step ID" -msgstr "ID koraka konfiguracije" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_step_ids -msgid "Configuration Steps" -msgstr "Koraci konfiguracije" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__configuration_ids -msgid "Configurations" -msgstr "Konfiguracije" - -#. module: product_configurator_mrp -#. odoo-javascript -#: code:addons/product_configurator_mrp/static/src/xml/mrp_production_views.xml:0 -#: code:addons/product_configurator_mrp/static/src/xml/mrp_production_views.xml:0 -#: code:addons/product_configurator_mrp/static/src/xml/mrp_production_views.xml:0 -#, python-format -msgid "Configure" -msgstr "Konfiguriši" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__create_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__create_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__create_uid -msgid "Created by" -msgstr "Kreirao" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__create_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__create_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__create_date -msgid "Created on" -msgstr "Kreirano" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__currency_id -msgid "Currency" -msgstr "Valuta" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_production__custom_value_ids -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__custom_value_ids -#: model_terms:ir.ui.view,arch_db:product_configurator_mrp.mrp_production_form_view_config -msgid "Custom Values" -msgstr "Podesive vrijednosti" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__display_name -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__display_name -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__display_name -msgid "Display Name" -msgstr "Prikazani naziv" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__id -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__id -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__id -msgid "ID" -msgstr "ID" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration____last_update -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set____last_update -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp____last_update -msgid "Last Modified on" -msgstr "Zadnje mijenjano" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__write_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__write_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__write_uid -msgid "Last Updated by" -msgstr "Zadnji ažurirao" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__write_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__write_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__write_date -msgid "Last Updated on" -msgstr "Zadnje ažurirano" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__order_id -msgid "Manufacturing Order" -msgstr "Radni nalog proizvodnje" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom_line_configuration -msgid "Mrp Bom Line Configuration" -msgstr "Mrp Bom Line Configuration" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom_line_configuration_set -msgid "Mrp Bom Line Configuration Set" -msgstr "Mrp Bom Line Configuration Set" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_preset_id -msgid "Preset" -msgstr "Predložak" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__price -msgid "Price" -msgstr "Cijena" - -#. module: product_configurator_mrp -#: model:ir.actions.act_window,name:product_configurator_mrp.action_mrp_bom_line_config_set -#: model:ir.ui.menu,name:product_configurator_mrp.menu_mrp_bom_line_config_set -msgid "Product Attribute Sets" -msgstr "Proizvod Attribute Sets" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_product_config_session -msgid "Product Config Session" -msgstr "Proizvod Config Session" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_product_configurator_mrp -msgid "Product Configurator MRP" -msgstr "Proizvod Configurator MRP" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_img -msgid "Product Img" -msgstr "Slika proizvoda" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_id -msgid "Product Variant" -msgstr "Varijanta proizvoda" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_production -msgid "Production Order" -msgstr "Proizvodni nalog" - -#. module: product_configurator_mrp -#: model:res.groups,name:product_configurator_mrp.group_product_configurator_mrp -msgid "Products & BOMS" -msgstr "Proizvodi i sastavnice" - -#. module: product_configurator_mrp -#: model_terms:ir.ui.view,arch_db:product_configurator_mrp.mrp_production_form_view_config -msgid "Reconfigure" -msgstr "Reconfigure" - -#. module: product_configurator_mrp -#: model:ir.model.fields,help:product_configurator_mrp.field_product_configurator_mrp__product_id -msgid "Set only when re-configuring a existing variant" -msgstr "Postaviti samo prilikom rekonfiguracije postojeće varijante" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__state -msgid "State" -msgstr "Status" - -#. module: product_configurator_mrp -#. odoo-python -#: code:addons/product_configurator_mrp/wizard/product_configurator_mrp.py:0 -#, python-format -msgid "" -"There is no BOM associated with selected product. Please inform to " -"administrator/manager. [Product: %s]" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__user_id -msgid "User" -msgstr "Korisnik" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__value_ids -msgid "Value" -msgstr "Vrijednost" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__weight -msgid "Weight" -msgstr "Težina" diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/i18n/de.po b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/i18n/de.po deleted file mode 100644 index 3a74a17c..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/i18n/de.po +++ /dev/null @@ -1,279 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * product_configurator_mrp -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 9.0c\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-11-26 10:02+0000\n" -"PO-Revision-Date: 2016-11-26 10:02+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__value_ids -msgid "Attribute Values" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__attribute_line_ids -msgid "Attributes" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom -msgid "Bill of Material" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom_line -msgid "Bill of Material Line" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__bom_line_ids -msgid "BoM Lines" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_production__config_session_id -msgid "Config Session" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__config_set_id -msgid "Config Set" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom__config_ok -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_production__config_ok -msgid "Configurable" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_tmpl_id -msgid "Configurable Template" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__name -msgid "Configuration" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_session_id -msgid "Configuration Session" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__name -msgid "Configuration Session Number" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line__config_set_id -msgid "Configuration Set" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.ui.menu,name:product_configurator_mrp.product_menu_mrp_bom_line_config_set -msgid "Configuration Sets" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_step_name -msgid "Configuration Step" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_step -msgid "Configuration Step ID" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_step_ids -msgid "Configuration Steps" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__configuration_ids -msgid "Configurations" -msgstr "" - -#. module: product_configurator_mrp -#. odoo-javascript -#: code:addons/product_configurator_mrp/static/src/xml/mrp_production_views.xml:0 -#, python-format -msgid "Configure" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__create_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__create_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__create_uid -msgid "Created by" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__create_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__create_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__create_date -msgid "Created on" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__currency_id -msgid "Currency" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_production__custom_value_ids -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__custom_value_ids -#: model_terms:ir.ui.view,arch_db:product_configurator_mrp.mrp_production_form_view_config -msgid "Custom Values" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__display_name -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__display_name -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__display_name -msgid "Display Name" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__id -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__id -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__id -msgid "ID" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration____last_update -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set____last_update -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp____last_update -msgid "Last Modified on" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__write_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__write_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__write_uid -msgid "Last Updated by" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__write_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__write_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__write_date -msgid "Last Updated on" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__order_id -msgid "Manufacturing Order" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom_line_configuration -msgid "Mrp Bom Line Configuration" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom_line_configuration_set -msgid "Mrp Bom Line Configuration Set" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_preset_id -msgid "Preset" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__price -msgid "Price" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.actions.act_window,name:product_configurator_mrp.action_mrp_bom_line_config_set -#: model:ir.ui.menu,name:product_configurator_mrp.menu_mrp_bom_line_config_set -msgid "Product Attribute Sets" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_product_config_session -msgid "Product Config Session" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_product_configurator_mrp -msgid "Product Configurator MRP" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_img -msgid "Product Img" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_id -msgid "Product Variant" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_production -msgid "Production Order" -msgstr "" - -#. module: product_configurator_mrp -#: model:res.groups,name:product_configurator_mrp.group_product_configurator_mrp -msgid "Products & BOMS" -msgstr "" - -#. module: product_configurator_mrp -#: model_terms:ir.ui.view,arch_db:product_configurator_mrp.mrp_production_form_view_config -msgid "Reconfigure" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,help:product_configurator_mrp.field_product_configurator_mrp__product_id -msgid "Set only when re-configuring a existing variant" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__state -msgid "State" -msgstr "" - -#. module: product_configurator_mrp -#. odoo-python -#: code:addons/product_configurator_mrp/wizard/product_configurator_mrp.py:0 -#, python-format -msgid "" -"There is no BOM associated with selected product. Please inform to " -"administrator/manager. [Product: %s]" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__user_id -msgid "User" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__value_ids -msgid "Value" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__weight -msgid "Weight" -msgstr "" - -#~ msgid "Product Template" -#~ msgstr "Produktvorlage" diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/i18n/it.po b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/i18n/it.po deleted file mode 100644 index c6ca3c76..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/i18n/it.po +++ /dev/null @@ -1,280 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * product_configurator_mrp -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-10-26 16:06+0000\n" -"Last-Translator: mymage \n" -"Language-Team: none\n" -"Language: it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.6.2\n" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__value_ids -msgid "Attribute Values" -msgstr "Valori attributo" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__attribute_line_ids -msgid "Attributes" -msgstr "Attributi" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom -msgid "Bill of Material" -msgstr "Distinta base" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom_line -msgid "Bill of Material Line" -msgstr "Riga distinta base" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__bom_line_ids -msgid "BoM Lines" -msgstr "Righe DiBa" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_production__config_session_id -msgid "Config Session" -msgstr "Configurazione sessione" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__config_set_id -msgid "Config Set" -msgstr "Set configurazione" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom__config_ok -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_production__config_ok -msgid "Configurable" -msgstr "Configurabile" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_tmpl_id -msgid "Configurable Template" -msgstr "Modello configurabile" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__name -msgid "Configuration" -msgstr "Configurazione" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_session_id -msgid "Configuration Session" -msgstr "Sessione configurazione" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__name -msgid "Configuration Session Number" -msgstr "Numero sessione configurazione" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line__config_set_id -msgid "Configuration Set" -msgstr "Set configurazione" - -#. module: product_configurator_mrp -#: model:ir.ui.menu,name:product_configurator_mrp.product_menu_mrp_bom_line_config_set -msgid "Configuration Sets" -msgstr "Set configurazione" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_step_name -msgid "Configuration Step" -msgstr "Passo configurazione" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_step -msgid "Configuration Step ID" -msgstr "ID passo configurazione" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_step_ids -msgid "Configuration Steps" -msgstr "Passi configurazione" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__configuration_ids -msgid "Configurations" -msgstr "Configurazioni" - -#. module: product_configurator_mrp -#. odoo-javascript -#: code:addons/product_configurator_mrp/static/src/xml/mrp_production_views.xml:0 -#: code:addons/product_configurator_mrp/static/src/xml/mrp_production_views.xml:0 -#: code:addons/product_configurator_mrp/static/src/xml/mrp_production_views.xml:0 -#, python-format -msgid "Configure" -msgstr "Configura" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__create_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__create_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__create_uid -msgid "Created by" -msgstr "Creato da" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__create_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__create_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__create_date -msgid "Created on" -msgstr "Creato il" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__currency_id -msgid "Currency" -msgstr "Valuta" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_production__custom_value_ids -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__custom_value_ids -#: model_terms:ir.ui.view,arch_db:product_configurator_mrp.mrp_production_form_view_config -msgid "Custom Values" -msgstr "Valori personalizzati" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__display_name -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__display_name -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__display_name -msgid "Display Name" -msgstr "Nome visualizzato" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__id -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__id -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__id -msgid "ID" -msgstr "ID" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration____last_update -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set____last_update -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp____last_update -msgid "Last Modified on" -msgstr "Ultima modifica il" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__write_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__write_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__write_uid -msgid "Last Updated by" -msgstr "Ultimo aggiornamento di" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__write_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__write_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__write_date -msgid "Last Updated on" -msgstr "Ultimo aggiornamento il" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__order_id -msgid "Manufacturing Order" -msgstr "Ordine di produzione" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom_line_configuration -msgid "Mrp Bom Line Configuration" -msgstr "Configurazione riga DiBa MRP" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom_line_configuration_set -msgid "Mrp Bom Line Configuration Set" -msgstr "Set configurazione riga DiBa MRP" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_preset_id -msgid "Preset" -msgstr "Preimpostato" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__price -msgid "Price" -msgstr "Prezzo" - -#. module: product_configurator_mrp -#: model:ir.actions.act_window,name:product_configurator_mrp.action_mrp_bom_line_config_set -#: model:ir.ui.menu,name:product_configurator_mrp.menu_mrp_bom_line_config_set -msgid "Product Attribute Sets" -msgstr "Set attributo prodotto" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_product_config_session -msgid "Product Config Session" -msgstr "Sessione configurazione prodotto" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_product_configurator_mrp -msgid "Product Configurator MRP" -msgstr "Configuratore prodotto MRP" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_img -msgid "Product Img" -msgstr "Immagine prodotto" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_id -msgid "Product Variant" -msgstr "Variante prodotto" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_production -msgid "Production Order" -msgstr "Ordine di produzione" - -#. module: product_configurator_mrp -#: model:res.groups,name:product_configurator_mrp.group_product_configurator_mrp -msgid "Products & BOMS" -msgstr "Prodotti e DiBA" - -#. module: product_configurator_mrp -#: model_terms:ir.ui.view,arch_db:product_configurator_mrp.mrp_production_form_view_config -msgid "Reconfigure" -msgstr "Riconfigurare" - -#. module: product_configurator_mrp -#: model:ir.model.fields,help:product_configurator_mrp.field_product_configurator_mrp__product_id -msgid "Set only when re-configuring a existing variant" -msgstr "Impostare solo quando si riconfigura una variante esistente" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__state -msgid "State" -msgstr "Stato" - -#. module: product_configurator_mrp -#. odoo-python -#: code:addons/product_configurator_mrp/wizard/product_configurator_mrp.py:0 -#, python-format -msgid "" -"There is no BOM associated with selected product. Please inform to " -"administrator/manager. [Product: %s]" -msgstr "" -"Non c'è una DiBa associata con il prodotto selezionato. Informare l'" -"amministratore/responsabile. [Prodotto: %s]" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__user_id -msgid "User" -msgstr "Utente" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__value_ids -msgid "Value" -msgstr "Valore" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__weight -msgid "Weight" -msgstr "Peso" diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/i18n/product_configurator_mrp.pot b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/i18n/product_configurator_mrp.pot deleted file mode 100644 index 00db7ced..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/i18n/product_configurator_mrp.pot +++ /dev/null @@ -1,275 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * product_configurator_mrp -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__value_ids -msgid "Attribute Values" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__attribute_line_ids -msgid "Attributes" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom -msgid "Bill of Material" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom_line -msgid "Bill of Material Line" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__bom_line_ids -msgid "BoM Lines" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_production__config_session_id -msgid "Config Session" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__config_set_id -msgid "Config Set" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom__config_ok -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_production__config_ok -msgid "Configurable" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_tmpl_id -msgid "Configurable Template" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__name -msgid "Configuration" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_session_id -msgid "Configuration Session" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__name -msgid "Configuration Session Number" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line__config_set_id -msgid "Configuration Set" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.ui.menu,name:product_configurator_mrp.product_menu_mrp_bom_line_config_set -msgid "Configuration Sets" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_step_name -msgid "Configuration Step" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_step -msgid "Configuration Step ID" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_step_ids -msgid "Configuration Steps" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__configuration_ids -msgid "Configurations" -msgstr "" - -#. module: product_configurator_mrp -#. odoo-javascript -#: code:addons/product_configurator_mrp/static/src/xml/mrp_production_views.xml:0 -#: code:addons/product_configurator_mrp/static/src/xml/mrp_production_views.xml:0 -#: code:addons/product_configurator_mrp/static/src/xml/mrp_production_views.xml:0 -#, python-format -msgid "Configure" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__create_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__create_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__create_uid -msgid "Created by" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__create_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__create_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__create_date -msgid "Created on" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__currency_id -msgid "Currency" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_production__custom_value_ids -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__custom_value_ids -#: model_terms:ir.ui.view,arch_db:product_configurator_mrp.mrp_production_form_view_config -msgid "Custom Values" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__display_name -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__display_name -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__display_name -msgid "Display Name" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__id -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__id -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__id -msgid "ID" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration____last_update -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set____last_update -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp____last_update -msgid "Last Modified on" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__write_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__write_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__write_uid -msgid "Last Updated by" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__write_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__write_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__write_date -msgid "Last Updated on" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__order_id -msgid "Manufacturing Order" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom_line_configuration -msgid "Mrp Bom Line Configuration" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom_line_configuration_set -msgid "Mrp Bom Line Configuration Set" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_preset_id -msgid "Preset" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__price -msgid "Price" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.actions.act_window,name:product_configurator_mrp.action_mrp_bom_line_config_set -#: model:ir.ui.menu,name:product_configurator_mrp.menu_mrp_bom_line_config_set -msgid "Product Attribute Sets" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_product_config_session -msgid "Product Config Session" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_product_configurator_mrp -msgid "Product Configurator MRP" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_img -msgid "Product Img" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_id -msgid "Product Variant" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_production -msgid "Production Order" -msgstr "" - -#. module: product_configurator_mrp -#: model:res.groups,name:product_configurator_mrp.group_product_configurator_mrp -msgid "Products & BOMS" -msgstr "" - -#. module: product_configurator_mrp -#: model_terms:ir.ui.view,arch_db:product_configurator_mrp.mrp_production_form_view_config -msgid "Reconfigure" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,help:product_configurator_mrp.field_product_configurator_mrp__product_id -msgid "Set only when re-configuring a existing variant" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__state -msgid "State" -msgstr "" - -#. module: product_configurator_mrp -#. odoo-python -#: code:addons/product_configurator_mrp/wizard/product_configurator_mrp.py:0 -#, python-format -msgid "" -"There is no BOM associated with selected product. Please inform to " -"administrator/manager. [Product: %s]" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__user_id -msgid "User" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__value_ids -msgid "Value" -msgstr "" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__weight -msgid "Weight" -msgstr "" diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/i18n/tr.po b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/i18n/tr.po deleted file mode 100644 index d37c5ac3..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/i18n/tr.po +++ /dev/null @@ -1,280 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * product_configurator_mrp -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2025-02-25 14:06+0000\n" -"Last-Translator: İsmail Çağan Yılmaz \n" -"Language-Team: none\n" -"Language: tr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.6.2\n" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__value_ids -msgid "Attribute Values" -msgstr "Nitelik Değerleri" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__attribute_line_ids -msgid "Attributes" -msgstr "Nitelikler" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom -msgid "Bill of Material" -msgstr "Malzeme Listesi" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom_line -msgid "Bill of Material Line" -msgstr "Malzeme Listesi Satırları" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__bom_line_ids -msgid "BoM Lines" -msgstr "BoM Satırları" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_production__config_session_id -msgid "Config Session" -msgstr "Yapılandırma Oturumu" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__config_set_id -msgid "Config Set" -msgstr "Yapılandırma Seti" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom__config_ok -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_production__config_ok -msgid "Configurable" -msgstr "Yapılandırılabilir" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_tmpl_id -msgid "Configurable Template" -msgstr "Yapılandırılabilir Şablon" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__name -msgid "Configuration" -msgstr "Yapılandırma" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_session_id -msgid "Configuration Session" -msgstr "Yapılandırma Oturumu" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__name -msgid "Configuration Session Number" -msgstr "Yapılandırma Oturumu Numarası" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line__config_set_id -msgid "Configuration Set" -msgstr "Yapılandırma Seti" - -#. module: product_configurator_mrp -#: model:ir.ui.menu,name:product_configurator_mrp.product_menu_mrp_bom_line_config_set -msgid "Configuration Sets" -msgstr "Yapılandırma Setleri" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_step_name -msgid "Configuration Step" -msgstr "Yapılandırma Adımı" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_step -msgid "Configuration Step ID" -msgstr "Yapılandırma Adımı ID" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__config_step_ids -msgid "Configuration Steps" -msgstr "Yapılandırma Adımları" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__configuration_ids -msgid "Configurations" -msgstr "Yapılandırmalar" - -#. module: product_configurator_mrp -#. odoo-javascript -#: code:addons/product_configurator_mrp/static/src/xml/mrp_production_views.xml:0 -#: code:addons/product_configurator_mrp/static/src/xml/mrp_production_views.xml:0 -#: code:addons/product_configurator_mrp/static/src/xml/mrp_production_views.xml:0 -#, python-format -msgid "Configure" -msgstr "Yapılandır" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__create_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__create_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__create_uid -msgid "Created by" -msgstr "Tarafından oluşturuldu" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__create_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__create_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__create_date -msgid "Created on" -msgstr "Tarihinde oluşturuldu" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__currency_id -msgid "Currency" -msgstr "Para Birimi" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_production__custom_value_ids -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__custom_value_ids -#: model_terms:ir.ui.view,arch_db:product_configurator_mrp.mrp_production_form_view_config -msgid "Custom Values" -msgstr "Özel Değerler" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__display_name -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__display_name -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__display_name -msgid "Display Name" -msgstr "Görünür Isim" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__id -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__id -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__id -msgid "ID" -msgstr "ID" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration____last_update -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set____last_update -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp____last_update -msgid "Last Modified on" -msgstr "Son Değiştirilme tarihi" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__write_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__write_uid -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__write_uid -msgid "Last Updated by" -msgstr "Son Güncelleyen" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration__write_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_mrp_bom_line_configuration_set__write_date -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__write_date -msgid "Last Updated on" -msgstr "Son Güncelleme tarihi" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__order_id -msgid "Manufacturing Order" -msgstr "Üretim Emri" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom_line_configuration -msgid "Mrp Bom Line Configuration" -msgstr "Mrp Bom Satırı Yapılandırma" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_bom_line_configuration_set -msgid "Mrp Bom Line Configuration Set" -msgstr "Mrp Bom Satırı Yapılandırma Seti" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_preset_id -msgid "Preset" -msgstr "Ön Ayar" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__price -msgid "Price" -msgstr "Fiyat" - -#. module: product_configurator_mrp -#: model:ir.actions.act_window,name:product_configurator_mrp.action_mrp_bom_line_config_set -#: model:ir.ui.menu,name:product_configurator_mrp.menu_mrp_bom_line_config_set -msgid "Product Attribute Sets" -msgstr "Ürün Nitelik Setleri" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_product_config_session -msgid "Product Config Session" -msgstr "Ürün Yapılandırma Oturumu" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_product_configurator_mrp -msgid "Product Configurator MRP" -msgstr "Ürün Yapılandırıcı MRP" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_img -msgid "Product Img" -msgstr "Ürün Resmi" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__product_id -msgid "Product Variant" -msgstr "Ürün Varyantı" - -#. module: product_configurator_mrp -#: model:ir.model,name:product_configurator_mrp.model_mrp_production -msgid "Production Order" -msgstr "Üretim Emri" - -#. module: product_configurator_mrp -#: model:res.groups,name:product_configurator_mrp.group_product_configurator_mrp -msgid "Products & BOMS" -msgstr "Ürünler & BOM'lar" - -#. module: product_configurator_mrp -#: model_terms:ir.ui.view,arch_db:product_configurator_mrp.mrp_production_form_view_config -msgid "Reconfigure" -msgstr "Yeniden yapılandır" - -#. module: product_configurator_mrp -#: model:ir.model.fields,help:product_configurator_mrp.field_product_configurator_mrp__product_id -msgid "Set only when re-configuring a existing variant" -msgstr "Yalnızca mevcut bir varyantı yeniden yapılandırırken ayarlayın" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__state -msgid "State" -msgstr "Durum" - -#. module: product_configurator_mrp -#. odoo-python -#: code:addons/product_configurator_mrp/wizard/product_configurator_mrp.py:0 -#, python-format -msgid "" -"There is no BOM associated with selected product. Please inform to " -"administrator/manager. [Product: %s]" -msgstr "" -"Seçilen ürünle ilişkili bir ürün ağacı yok. Lütfen yöneticiye/idareciye " -"bilgi verin. [Ürün: %s]" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__user_id -msgid "User" -msgstr "Kullanıcı" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__value_ids -msgid "Value" -msgstr "Değer" - -#. module: product_configurator_mrp -#: model:ir.model.fields,field_description:product_configurator_mrp.field_product_configurator_mrp__weight -msgid "Weight" -msgstr "Ağırlık" diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/models/__init__.py b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/models/__init__.py deleted file mode 100644 index b3714dbf..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/models/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright (C) 2021 Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from . import mrp -from . import product_config diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/models/mrp.py b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/models/mrp.py deleted file mode 100644 index 760e1856..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/models/mrp.py +++ /dev/null @@ -1,100 +0,0 @@ -# Copyright (C) 2021 Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import fields, models - - -class MrpProduction(models.Model): - _inherit = "mrp.production" - - config_ok = fields.Boolean( - related="product_id.config_ok", - store=True, - string="Configurable", - readonly=True, - ) - config_session_id = fields.Many2one( - comodel_name="product.config.session", string="Config Session" - ) - custom_value_ids = fields.One2many( - comodel_name="product.config.session.custom.value", - inverse_name="cfg_session_id", - related="config_session_id.custom_value_ids", - string="Custom Values", - ) - - def action_config_start(self): - """Return action to start configuration wizard""" - configurator_obj = self.env["product.configurator.mrp"] - ctx = dict( - self.env.context, - wizard_id=None, - wizard_model="product.configurator.mrp", - allow_preset_selection=True, - ) - return configurator_obj.with_context(**ctx).get_wizard_action() - - def reconfigure_product(self): - """Creates and launches a product configurator wizard with a linked - template and variant in order to re-configure a existing product. It is - esetially a shortcut to pre-fill configuration data of a variant""" - wizard_model = "product.configurator.mrp" - extra_vals = {"order_id": self.id, "product_id": self.product_id.id} - self = self.with_context(default_order_id=self.id) - return self.product_id.product_tmpl_id.create_config_wizard( - model_name=wizard_model, extra_vals=extra_vals - ) - - -class MrpBom(models.Model): - _inherit = "mrp.bom" - - config_ok = fields.Boolean( - related="product_tmpl_id.config_ok", - store=True, - string="Configurable", - readonly=True, - ) - - -class MrpBomLine(models.Model): - _inherit = "mrp.bom.line" - - config_set_id = fields.Many2one( - comodel_name="mrp.bom.line.configuration.set", - string="Configuration Set", - ) - - -class MrpBomLineConfigurationSet(models.Model): - _name = "mrp.bom.line.configuration.set" - _description = "Mrp Bom Line Configuration Set" - - name = fields.Char(string="Configuration", required=True) - configuration_ids = fields.One2many( - comodel_name="mrp.bom.line.configuration", - inverse_name="config_set_id", - string="Configurations", - ) - bom_line_ids = fields.One2many( - comodel_name="mrp.bom.line", - inverse_name="config_set_id", - string="BoM Lines", - readonly=True, - ) - - -class MrpBomLineConfiguration(models.Model): - _name = "mrp.bom.line.configuration" - _description = "Mrp Bom Line Configuration" - - config_set_id = fields.Many2one( - comodel_name="mrp.bom.line.configuration.set", - ondelete="cascade", - required=True, - ) - value_ids = fields.Many2many( - string="Attribute Values", - comodel_name="product.attribute.value", - required=True, - ) diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/models/product_config.py b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/models/product_config.py deleted file mode 100644 index 471a9065..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/models/product_config.py +++ /dev/null @@ -1,133 +0,0 @@ -# Copyright (C) 2021 Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import models - - -class ProductConfigSession(models.Model): - _inherit = "product.config.session" - - def create_get_bom(self, variant, product_tmpl_id=None, values=None): - - # default_type is set as 'product' when the user navigates - # through menu item "Products". This conflicts - # with the type for mrp.bom when mrpBom.onchange() is executed. - ctx = self.env.context.copy() - if ctx.get("default_type"): - ctx.pop("default_type") - self.env.context = ctx - - if values is None: - values = {} - if product_tmpl_id is None or variant.product_tmpl_id != product_tmpl_id: - product_tmpl_id = variant.product_tmpl_id - - mrpBom = self.env["mrp.bom"] - mrpBomLine = self.env["mrp.bom.line"] - attr_products = variant.product_template_attribute_value_ids.mapped( - "product_attribute_value_id.product_id" - ) - attr_values = variant.product_template_attribute_value_ids.mapped( - "product_attribute_value_id" - ) - existing_bom = self.env["mrp.bom"].search( - [ - ("product_tmpl_id", "=", product_tmpl_id.id), - ("product_id", "=", variant.id), - ] - ) - if existing_bom: - return existing_bom[:1] - - parent_bom = self.env["mrp.bom"].search( - [ - ("product_tmpl_id", "=", product_tmpl_id.id), - ("product_id", "=", False), - ], - order="sequence asc", - limit=1, - ) - bom_lines = [] - if not parent_bom: - # If not Bom, then Cycle through attributes to add their - # related products to the bom lines. - for product in attr_products: - bom_line_vals = {"product_id": product.id, "product_qty": 1} - specs = self.get_onchange_specifications(model="mrp.bom.line") - updates = mrpBomLine.onchange( - bom_line_vals, ["product_id", "product_qty"], specs - ) - values = updates.get("value", {}) - values = self.get_vals_to_write(values=values, model="mrp.bom.line") - values.update(bom_line_vals) - bom_lines.append((0, 0, values)) - else: - # If parent BOM is used, then look through Config Sets - # on parent product's bom to add the products to the bom lines. - for parent_bom_line in parent_bom.bom_line_ids: - if parent_bom_line.config_set_id: - for config in parent_bom_line.config_set_id.configuration_ids: - # Add bom lines if config values are part of attr_values - if set(config.value_ids.ids).issubset(set(attr_values.ids)): - if parent_bom_line.bom_id.id == parent_bom.id: - parent_bom_line_vals = { - "product_id": parent_bom_line.product_id.id, - "product_qty": parent_bom_line.product_qty, - } - specs = self.get_onchange_specifications( - model="mrp.bom.line" - ) - updates = mrpBomLine.onchange( - parent_bom_line_vals, - ["product_id", "product_qty"], - specs, - ) - values = updates.get("value", {}) - values = self.get_vals_to_write( - values=values, model="mrp.bom.line" - ) - values.update(parent_bom_line_vals) - bom_lines.append((0, 0, values)) - else: - parent_bom_line_vals = { - "product_id": parent_bom_line.product_id.id, - "product_qty": parent_bom_line.product_qty, - } - specs = self.get_onchange_specifications(model="mrp.bom.line") - updates = mrpBomLine.onchange( - parent_bom_line_vals, ["product_id", "product_qty"], specs - ) - values2 = updates.get("value", {}) - values2 = self.get_vals_to_write( - values=values, model="mrp.bom.line" - ) - values2.update(parent_bom_line_vals) - bom_lines.append((0, 0, values2)) - if bom_lines: - bom_values = { - "product_tmpl_id": self.product_tmpl_id.id, - "product_id": variant.id, - "bom_line_ids": bom_lines, - } - specs = self.get_onchange_specifications(model="mrp.bom") - updates = mrpBom.onchange( - bom_values, - ["product_id", "product_tmpl_id", "bom_line_ids"], - specs, - ) - values = updates.get("value", {}) - values = self.get_vals_to_write(values=values, model="mrp.bom") - values.update(bom_values) - mrp_bom_id = mrpBom.create(values) - if mrp_bom_id and parent_bom: - for operation_line in parent_bom.operation_ids: - operation_line.copy(default={"bom_id": mrp_bom_id.id}) - return mrp_bom_id - return False - - def create_get_variant(self, value_ids=None, custom_vals=None): - variant = super(ProductConfigSession, self).create_get_variant( - value_ids=value_ids, custom_vals=custom_vals - ) - self.create_get_bom(variant=variant, product_tmpl_id=self.product_tmpl_id) - return variant diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/readme/CONTRIBUTORS.rst deleted file mode 100644 index 6afa1541..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,3 +0,0 @@ -* `Aion Tech `_: - - * Simone Rubino diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/readme/DESCRIPTION.rst b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/readme/DESCRIPTION.rst deleted file mode 100644 index 81abc2d5..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/readme/DESCRIPTION.rst +++ /dev/null @@ -1 +0,0 @@ -Product Configurator wizard available on Manufacturing Orders. diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/security/configurator_security.xml b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/security/configurator_security.xml deleted file mode 100644 index 7d2d3a4c..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/security/configurator_security.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - Products & BOMS - - - - - - diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/security/ir.model.access.csv b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/security/ir.model.access.csv deleted file mode 100644 index 89e00886..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/security/ir.model.access.csv +++ /dev/null @@ -1,4 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_mrp_bom_line_configuration_set,access_mrp_bom_line_configuration_set,model_mrp_bom_line_configuration_set,product_configurator.group_product_configurator_manager,1,1,1,1 -access_mrp_bom_line_configuration,access_mrp_bom_line_configuration,model_mrp_bom_line_configuration,product_configurator.group_product_configurator_manager,1,1,1,1 -access_product_configurator_mrp,product_configurator_mrp,model_product_configurator_mrp,product_configurator.group_product_configurator_manager,1,1,1,1 diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/description/icon.png b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/description/icon.png deleted file mode 100644 index d5d307c6..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/description/icon.png and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/description/index.html b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/description/index.html deleted file mode 100644 index 57cf6d84..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/description/index.html +++ /dev/null @@ -1,428 +0,0 @@ - - - - - -Product Configurator Manufacturing - - - -
-

Product Configurator Manufacturing

- - -

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

-

Product Configurator wizard available on Manufacturing Orders.

-

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

-
    -
  • Pledra
  • -
-
-
-

Contributors

- -
-
-

Maintainers

-

This module is maintained by the OCA.

- -Odoo Community Association - -

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

-

Current maintainer:

-

PCatinean

-

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

-

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

-
-
-
- - diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/src/js/form_controller.js b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/src/js/form_controller.js deleted file mode 100644 index ef8dedaa..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/src/js/form_controller.js +++ /dev/null @@ -1,60 +0,0 @@ -odoo.define("product_configurator_mrp.FormController", function (require) { - "use strict"; - - var core = require("web.core"); - var FormController = require("web.FormController"); - var FormView = require("web.FormView"); - var viewRegistry = require("web.view_registry"); - - var qweb = core.qweb; - - var ConfigFormController = FormController.extend({ - buttons_template: "ConfigFormView.buttons", - events: _.extend({}, FormController.prototype.events, { - "click .o_form_button_create_config": "_onConfigure", - }), - - renderButtons: function () { - var self = this; - var $footer = this.footerToButtons ? this.renderer.$("footer") : null; - var mustRenderFooterButtons = $footer && $footer.length; - self._super.apply(this, arguments); - if (mustRenderFooterButtons); - else if ( - this.$buttons && - self.modelName === "mrp.production" && - self.initialState.context.custom_create_variant - ) { - var button_create = this.$buttons.find(".o_form_button_create"); - button_create.after( - qweb.render("ConfigFormView.buttons", { - widget: this, - }) - ); - this.$buttons - .find(".o_form_button_create_config") - .css("display", "inline"); - } - }, - - _onConfigure: function () { - var self = this; - return this._rpc({ - model: "mrp.production", - method: "action_config_start", - args: [""], - context: this.initialState.context, - }).then(function (result) { - self.do_action(result); - }); - }, - }); - - var ConfigFormView = FormView.extend({ - config: _.extend({}, FormView.prototype.config, { - Controller: ConfigFormController, - }), - }); - - viewRegistry.add("product_configurator_mrp_form", ConfigFormView); -}); diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/src/js/kanban_controller.js b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/src/js/kanban_controller.js deleted file mode 100644 index 9c78d42d..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/src/js/kanban_controller.js +++ /dev/null @@ -1,48 +0,0 @@ -odoo.define("product_configurator_mrp.KanbanController", function (require) { - "use strict"; - - var KanbanController = require("web.KanbanController"); - var KanbanView = require("web.KanbanView"); - var viewRegistry = require("web.view_registry"); - - var ConfigKanbanController = KanbanController.extend({ - buttons_template: "ConfigKanbanView.buttons", - events: _.extend({}, KanbanController.prototype.events, { - "click .o-kanban-button-new_config": "_onConfigure", - }), - - renderButtons: function () { - var self = this; - self._super.apply(this, arguments); - if ( - this.$buttons && - self.modelName === "mrp.production" && - self.initialState.context.custom_create_variant - ) { - this.$buttons - .find(".o-kanban-button-new_config") - .css("display", "inline"); - } - }, - - _onConfigure: function () { - var self = this; - return this._rpc({ - model: "mrp.production", - method: "action_config_start", - args: [""], - context: this.initialState.context, - }).then(function (result) { - self.do_action(result); - }); - }, - }); - - var ConfigKanbanView = KanbanView.extend({ - config: _.extend({}, KanbanView.prototype.config, { - Controller: ConfigKanbanController, - }), - }); - - viewRegistry.add("product_configurator_mrp_kanban", ConfigKanbanView); -}); diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/src/js/list_controller.js b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/src/js/list_controller.js deleted file mode 100644 index 25087fcc..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/src/js/list_controller.js +++ /dev/null @@ -1,47 +0,0 @@ -odoo.define("product_configurator_mrp.ListController", function (require) { - "use strict"; - var ListController = require("web.ListController"); - var ListView = require("web.ListView"); - var viewRegistry = require("web.view_registry"); - - var ConfigListController = ListController.extend({ - buttons_template: "ConfigListView.buttons", - events: _.extend({}, ListController.prototype.events, { - "click .o_list_button_add_config": "_onConfigure", - }), - - renderButtons: function () { - var self = this; - self._super.apply(this, arguments); - if ( - this.$buttons && - self.modelName === "mrp.production" && - self.initialState.context.custom_create_variant - ) { - this.$buttons - .find(".o_list_button_add_config") - .css("display", "inline"); - } - }, - - _onConfigure: function () { - var self = this; - return this._rpc({ - model: "mrp.production", - method: "action_config_start", - args: [""], - context: this.initialState.context, - }).then(function (result) { - self.do_action(result); - }); - }, - }); - - var ConfigListView = ListView.extend({ - config: _.extend({}, ListView.prototype.config, { - Controller: ConfigListController, - }), - }); - - viewRegistry.add("product_configurator_mrp_tree", ConfigListView); -}); diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/src/scss/mrp_config.scss b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/src/scss/mrp_config.scss deleted file mode 100644 index 7bf54a56..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/src/scss/mrp_config.scss +++ /dev/null @@ -1,9 +0,0 @@ -.o_list_button_add_config { - display: none; -} -.o-kanban-button-new_config { - display: none; -} -.o_form_button_create_config { - display: none; -} diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/src/xml/mrp_production_views.xml b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/src/xml/mrp_production_views.xml deleted file mode 100644 index c917792a..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/static/src/xml/mrp_production_views.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/tests/__init__.py b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/tests/__init__.py deleted file mode 100644 index 56a90879..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/tests/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# Copyright (C) 2021 Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -# from . import test_mrp diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/tests/test_mrp.py b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/tests/test_mrp.py deleted file mode 100644 index 18688b9e..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/tests/test_mrp.py +++ /dev/null @@ -1,126 +0,0 @@ -# Copyright (C) 2021 Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from datetime import datetime - -from odoo.addons.product_configurator.tests.test_product_configurator_test_cases import ( - ProductConfiguratorTestCases, -) - - -class TestMrp(ProductConfiguratorTestCases): - def setUp(self): - super(TestMrp, self).setUp() - self.mrpBomConfigSet = self.env["mrp.bom.line.configuration.set"] - self.mrpBomConfig = self.env["mrp.bom.line.configuration"] - self.mrpBom = self.env["mrp.bom"] - self.mrpBomLine = self.env["mrp.bom.line"] - self.mrpRoutingWorkcenter = self.env["mrp.routing.workcenter"] - self.productProduct = self.env["product.product"] - self.productTemplate = self.env["product.template"] - self.mrpProduction = self.env["mrp.production"] - self.product_id = self.env.ref("product.product_product_3") - self.workcenter_id = self.env.ref("mrp.mrp_workcenter_3") - - # create bom - self.bom_id = self.mrpBom.create( - { - "product_tmpl_id": self.product_id.product_tmpl_id.id, - "product_qty": 1.00, - "type": "normal", - "ready_to_produce": "all_available", - } - ) - # create bom line - self.bom_line_id = self.mrpBomLine.create( - { - "bom_id": self.bom_id.id, - "product_id": self.product_id.id, - "product_qty": 1.00, - } - ) - # create BOM operations line - self.mrpRoutingWorkcenter.create( - { - "bom_id": self.bom_id.id, - "name": "Operation 1", - "workcenter_id": self.workcenter_id.id, - } - ) - - def test_00_skip_bom_line(self): - checkVal = self.mrpBomLine._skip_bom_line(product=self.product_id) - self.assertFalse( - checkVal, - "Error: If value exists\ - Method: _skip_bom_line()", - ) - self.bom_line_id.bom_id.config_ok = True - self.mrp_config_step = self.mrpBomConfigSet.create( - { - "name": "TestConfigSet", - } - ) - self.bom_line_id.write({"config_set_id": self.mrp_config_step.id}) - # create bom_line_config - self.mrp_bom_config = self.mrpBomConfig.create( - { - "config_set_id": self.mrp_config_step.id, - "value_ids": [ - ( - 6, - 0, - [ - self.value_gasoline.id, - self.value_218i.id, - self.value_220i.id, - self.value_red.id, - ], - ) - ], - } - ) - self.product_id.write( - {"attribute_value_ids": [(6, 0, self.mrp_bom_config.value_ids.ids)]} - ) - self.mrpProduction.create( - { - "product_id": self.product_id.id, - "product_qty": 1.00, - "product_uom_id": 1.00, - "bom_id": self.bom_id.id, - "date_planned_start": datetime.now(), - } - ) - self.mrpBomLine._skip_bom_line(product=self.product_id) - self.assertFalse( - checkVal, - "Error: If value exists\ - Method: _skip_bom_line()", - ) - - def test_01_action_config_start(self): - mrpProduction = self.mrpProduction.create( - { - "product_id": self.product_id.id, - "product_qty": 1.00, - "product_uom_id": 1.00, - "bom_id": self.bom_id.id, - "date_planned_start": datetime.now(), - } - ) - context = dict( - self.env.context, - default_order_id=mrpProduction.id, - wizard_model="product.configurator.mrp", - ) - mrpProduction.action_config_start() - self.ProductConfWizard = self.env["product.configurator.mrp"].with_context( - **context - ) - self._configure_product_nxt_step() - # self.assertEqual( - # vals['res_id'], - # mrpProduction.product_id.id, - # 'Not Equal' - # ) diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/views/mrp_view.xml b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/views/mrp_view.xml deleted file mode 100644 index 28865ebb..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/views/mrp_view.xml +++ /dev/null @@ -1,165 +0,0 @@ - - - - - product.config.mrp.form.view - mrp.production - - - - product_configurator_mrp_form - - - oe_title col-lg-10 col-md-9 col-sm-9 col-xs-12 pull-left - - -
- -
-
- - - - - - - - - - - -
-
- - - product.config.mrp.tree.view - mrp.production - - - - product_configurator_mrp_tree - - - - - - product.config.mrp.kanban.view - mrp.production - - - - product_configurator_mrp_kanban - - - - - - {"search_default_todo": True, "default_company_id": allowed_company_ids[0], "custom_create_variant": True} - - - - product.config.mrp.bom.form.view - mrp.bom - - - - - - - - - {'readonly': [('config_ok', '=', True)]} - True - - - - {'column_invisible': [('parent.type','not in', ('normal', 'phantom'))], 'readonly': [('parent.config_ok', '=', True)]} - - - - - - - - - - mrp.bom.line.configuration.set.form.view - mrp.bom.line.configuration.set - -
- - - - - - - - - - - - - - -
-
-
- - - mrp.bom.line.configuration.set.tree.view - mrp.bom.line.configuration.set - - - - - - - - - Product Attribute Sets - mrp.bom.line.configuration.set - tree,form - - - - - - -
diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/wizard/__init__.py b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/wizard/__init__.py deleted file mode 100644 index 47b38a64..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/wizard/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# Copyright (C) 2021 Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from . import product_configurator_mrp diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/wizard/product_configurator_mrp.py b/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/wizard/product_configurator_mrp.py deleted file mode 100644 index 09d586bc..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/product_configurator_mrp/wizard/product_configurator_mrp.py +++ /dev/null @@ -1,89 +0,0 @@ -# Copyright (C) 2021 Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import _, fields, models -from odoo.exceptions import ValidationError -from odoo.tools.safe_eval import safe_eval - - -class ProductConfiguratorMrp(models.TransientModel): - _name = "product.configurator.mrp" - _inherit = "product.configurator" - _description = "Product Configurator MRP" - - order_id = fields.Many2one( - comodel_name="mrp.production", string="Manufacturing Order" - ) - - def get_mrp_production_action(self): - mrp_action = self.env.ref("mrp.mrp_production_action").read() - if mrp_action: - mrp_action = mrp_action[0] - context = safe_eval( - mrp_action["context"], self.env.context.copy(), nocopy=True - ) - context.update(self.env.context) - mrp_action.update( - { - "view_mode": "form", - "context": context, - "views": [(False, "form")], - } - ) - else: - mrp_action = { - "type": "ir.actions.act_window", - "res_model": "mrp.production", - "name": "Manufacturing Order", - "view_mode": "form", - "context": self.env.context, - "views": [(False, "form")], - } - return mrp_action - - def _get_order_vals(self, product_id): - """Hook to allow custom line values to be put on the newly - created or edited lines.""" - product = self.env["product.product"].browse(product_id) - bom = self.config_session_id.create_get_bom( - variant=product, - ) - line_vals = { - "bom_id": bom.id, - "product_uom_id": product.uom_id.id, - "config_session_id": self.config_session_id.id, - } - return line_vals - - def action_config_done(self): - """Parse values and execute final code before closing the wizard""" - res = super(ProductConfiguratorMrp, self).action_config_done() - if res.get("res_model") == self._name: - return res - model_name = "mrp.production" - line_vals = self._get_order_vals(res["res_id"]) - - mrpProduction = self.env[model_name] - cfg_session = self.config_session_id - specs = cfg_session.get_onchange_specifications(model=model_name) - updates = mrpProduction.onchange(line_vals, ["bom_id"], specs) - values = updates.get("value", {}) - values = cfg_session.get_vals_to_write(values=values, model=model_name) - values.update(line_vals) - if not values.get("bom_id"): - raise ValidationError( - _( - "There is no BOM associated with selected product. " - "Please inform to administrator/manager. [Product: %s]" - % (self.env["product.product"].browse(res["res_id"]).display_name) - ) - ) - - if self.order_id: - self.order_id.write(line_vals) - mrp_order = self.order_id - else: - mrp_order = self.order_id.create(line_vals) - mrp_action = self.get_mrp_production_action() - mrp_action.update({"res_id": mrp_order.id}) - return mrp_action diff --git a/odoo-bringout-oca-product-configurator-product_configurator_mrp/pyproject.toml b/odoo-bringout-oca-product-configurator-product_configurator_mrp/pyproject.toml deleted file mode 100644 index bbadce68..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_mrp/pyproject.toml +++ /dev/null @@ -1,43 +0,0 @@ -[project] -name = "odoo-bringout-oca-product-configurator-product_configurator_mrp" -version = "16.0.0" -description = "Product Configurator Manufacturing - BOM Support for configurable products" -authors = [ - { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } -] -dependencies = [ - "odoo-bringout-oca-ocb-mrp>=16.0.0", - "odoo-bringout-oca-product-configurator-product_configurator>=16.0.0", - "requests>=2.25.1" -] -readme = "README.md" -requires-python = ">= 3.11" -classifiers = [ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Developers", - "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Topic :: Office/Business", -] - -[project.urls] -homepage = "https://github.com/bringout/0" -repository = "https://github.com/bringout/0" - -[build-system] -requires = ["hatchling"] -build-backend = "hatchling.build" - -[tool.hatch.metadata] -allow-direct-references = true - -[tool.hatch.build.targets.wheel] -packages = ["product_configurator_mrp"] - -[tool.rye] -managed = true -dev-dependencies = [ - "pytest>=8.4.1", -] diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/README.md b/odoo-bringout-oca-product-configurator-product_configurator_sale/README.md deleted file mode 100644 index 67b2e65b..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# Product Configurator Sale - -Odoo addon: product_configurator_sale - -## Installation - -```bash -pip install odoo-bringout-oca-product-configurator-product_configurator_sale -``` - -## Dependencies - -This addon depends on: -- sale_management -- product_configurator -- stock - -## Manifest Information - -- **Name**: Product Configurator Sale -- **Version**: 16.0.1.0.1 -- **Category**: Generic Modules/Sale -- **License**: AGPL-3 -- **Installable**: True - -## Source - -Based on [OCA/product-configurator](https://github.com/OCA/product-configurator) branch 16.0, addon `product_configurator_sale`. - -## License - -This package maintains the original AGPL-3 license from the upstream Odoo project. - -## Documentation - -- Overview: doc/OVERVIEW.md -- Architecture: doc/ARCHITECTURE.md -- Models: doc/MODELS.md -- Controllers: doc/CONTROLLERS.md -- Wizards: doc/WIZARDS.md -- Reports: doc/REPORTS.md -- Security: doc/SECURITY.md -- Install: doc/INSTALL.md -- Usage: doc/USAGE.md -- Configuration: doc/CONFIGURATION.md -- Dependencies: doc/DEPENDENCIES.md -- Troubleshooting: doc/TROUBLESHOOTING.md -- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/ARCHITECTURE.md b/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/ARCHITECTURE.md deleted file mode 100644 index 91a7c3a2..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/ARCHITECTURE.md +++ /dev/null @@ -1,32 +0,0 @@ -# Architecture - -```mermaid -flowchart TD - U[Users] -->|HTTP| V[Views and QWeb Templates] - V --> C[Controllers] - V --> W[Wizards – Transient Models] - C --> M[Models and ORM] - W --> M - M --> R[Reports] - DX[Data XML] --> M - S[Security – ACLs and Groups] -. enforces .-> M - - subgraph Product_configurator_sale Module - product_configurator_sale - direction LR - M:::layer - W:::layer - C:::layer - V:::layer - R:::layer - S:::layer - DX:::layer - end - - classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px -``` - -Notes -- Views include tree/form/kanban templates and report templates. -- Controllers provide website/portal routes when present. -- Wizards are UI flows implemented with `models.TransientModel`. -- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/CONFIGURATION.md b/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/CONFIGURATION.md deleted file mode 100644 index 31c475ca..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/CONFIGURATION.md +++ /dev/null @@ -1,3 +0,0 @@ -# Configuration - -Refer to Odoo settings for product_configurator_sale. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/CONTROLLERS.md b/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/CONTROLLERS.md deleted file mode 100644 index f628e770..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/CONTROLLERS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Controllers - -This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/DEPENDENCIES.md b/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/DEPENDENCIES.md deleted file mode 100644 index 862e2a8e..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/DEPENDENCIES.md +++ /dev/null @@ -1,7 +0,0 @@ -# Dependencies - -This addon depends on: - -- [sale_management](https://github.com/bringout/oca-ocb-sale/tree/681dc8d5fff638cb0862a34e48091a2098d091f8/odoo-bringout-oca-ocb-sale_management) -- [product_configurator](https://github.com/bringout/oca-technical) -- [stock](https://github.com/bringout/oca-ocb-warehouse/tree/0ee5ffef60413a71dceb350918ad3fb572ec1875/odoo-bringout-oca-ocb-stock) diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/FAQ.md b/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/FAQ.md deleted file mode 100644 index 33d34600..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/FAQ.md +++ /dev/null @@ -1,4 +0,0 @@ -# FAQ - -- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged). -- Q: How to enable? A: Start server with --addon product_configurator_sale or install in UI. diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/INSTALL.md b/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/INSTALL.md deleted file mode 100644 index a7415797..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/INSTALL.md +++ /dev/null @@ -1,7 +0,0 @@ -# Install - -```bash -pip install odoo-bringout-oca-product-configurator-product_configurator_sale" -# or -uv pip install odoo-bringout-oca-product-configurator-product_configurator_sale" -``` diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/MODELS.md b/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/MODELS.md deleted file mode 100644 index 8e74c1ae..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/MODELS.md +++ /dev/null @@ -1,13 +0,0 @@ -# Models - -Detected core models and extensions in product_configurator_sale. - -```mermaid -classDiagram - class sale_order - class sale_order_line -``` - -Notes -- Classes show model technical names; fields omitted for brevity. -- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/OVERVIEW.md b/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/OVERVIEW.md deleted file mode 100644 index 098d5999..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/OVERVIEW.md +++ /dev/null @@ -1,6 +0,0 @@ -# Overview - -Packaged Odoo addon: product_configurator_sale. Provides features documented in upstream Odoo 16 under this addon. - -- Source: OCA/OCB 16.0, addon product_configurator_sale -- License: LGPL-3 diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/REPORTS.md b/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/REPORTS.md deleted file mode 100644 index e0ea35fb..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/REPORTS.md +++ /dev/null @@ -1,3 +0,0 @@ -# Reports - -This module does not define custom reports. diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/SECURITY.md b/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/SECURITY.md deleted file mode 100644 index ae884ef3..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/SECURITY.md +++ /dev/null @@ -1,34 +0,0 @@ -# Security - -Access control and security definitions in product_configurator_sale. - -## Access Control Lists (ACLs) - -Model access permissions defined in: -- **[ir.model.access.csv](../product_configurator_sale/security/ir.model.access.csv)** - - 2 model access rules - -## Record Rules - -Row-level security rules defined in: - -```mermaid -graph TB - subgraph "Security Layers" - A[Users] --> B[Groups] - B --> C[Access Control Lists] - C --> D[Models] - B --> E[Record Rules] - E --> F[Individual Records] - end -``` - -Security files overview: -- **[ir.model.access.csv](../product_configurator_sale/security/ir.model.access.csv)** - - Model access permissions (CRUD rights) - -Notes -- Access Control Lists define which groups can access which models -- Record Rules provide row-level security (filter records by user/group) -- Security groups organize users and define permission sets -- All security is enforced at the ORM level by Odoo diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/TROUBLESHOOTING.md deleted file mode 100644 index 56853cb7..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/TROUBLESHOOTING.md +++ /dev/null @@ -1,5 +0,0 @@ -# Troubleshooting - -- Ensure Python and Odoo environment matches repo guidance. -- Check database connectivity and logs if startup fails. -- Validate that dependent addons listed in DEPENDENCIES.md are installed. diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/USAGE.md b/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/USAGE.md deleted file mode 100644 index 3c16c914..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/USAGE.md +++ /dev/null @@ -1,7 +0,0 @@ -# Usage - -Start Odoo including this addon (from repo root): - -```bash -python3 scripts/nix_odoo_web_server.py --db-name mydb --addon product_configurator_sale -``` diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/WIZARDS.md b/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/WIZARDS.md deleted file mode 100644 index 01598fe3..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/doc/WIZARDS.md +++ /dev/null @@ -1,8 +0,0 @@ -# Wizards - -Transient models exposed as UI wizards in product_configurator_sale. - -```mermaid -classDiagram - class ProductConfiguratorSale -``` diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/README.rst b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/README.rst deleted file mode 100644 index e97eea92..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/README.rst +++ /dev/null @@ -1,79 +0,0 @@ -========================= -Product Configurator Sale -========================= - -.. - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! This file is generated by oca-gen-addon-readme !! - !! changes will be overwritten. !! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:e194e4a0670b7e7f1939a95751021a36445268626885e207b0b930004a8f02ee - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -.. |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-OCA%2Fproduct--configurator-lightgray.png?logo=github - :target: https://github.com/OCA/product-configurator/tree/16.0/product_configurator_sale - :alt: OCA/product-configurator -.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/product-configurator-16-0/product-configurator-16-0-product_configurator_sale - :alt: Translate me on Weblate -.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/product-configurator&target_branch=16.0 - :alt: Try me on Runboat - -|badge1| |badge2| |badge3| |badge4| |badge5| - -Product Configurator wizard available on Sales Orders. - -**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 -~~~~~~~ - -* Pledra - -Maintainers -~~~~~~~~~~~ - -This module is maintained by the OCA. - -.. image:: https://odoo-community.org/logo.png - :alt: Odoo Community Association - :target: https://odoo-community.org - -OCA, or the Odoo Community Association, is a nonprofit organization whose -mission is to support the collaborative development of Odoo features and -promote its widespread use. - -.. |maintainer-PCatinean| image:: https://github.com/PCatinean.png?size=40px - :target: https://github.com/PCatinean - :alt: PCatinean - -Current `maintainer `__: - -|maintainer-PCatinean| - -This module is part of the `OCA/product-configurator `_ project on GitHub. - -You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/__init__.py b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/__init__.py deleted file mode 100644 index e1956e88..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# Copyright (C) 2021 Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from . import models -from . import wizard diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/__manifest__.py b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/__manifest__.py deleted file mode 100644 index 0759141d..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/__manifest__.py +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (C) 2021 Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -{ - "name": "Product Configurator Sale", - "version": "16.0.1.0.1", - "category": "Generic Modules/Sale", - "summary": "Product configuration interface modules for Sale", - "author": "Pledra, Odoo Community Association (OCA)", - "license": "AGPL-3", - "website": "https://github.com/OCA/product-configurator", - "depends": ["sale_management", "product_configurator", "stock"], - "data": [ - "security/ir.model.access.csv", - "data/menu_product.xml", - "views/sale_view.xml", - ], - "demo": ["demo/res_partner_demo.xml"], - "installable": True, - "auto_install": True, - "development_status": "Beta", - "maintainers": ["PCatinean"], -} diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/data/menu_product.xml b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/data/menu_product.xml deleted file mode 100644 index 8475ee40..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/data/menu_product.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - {"search_default_filter_to_sell":1, "search_default_filter_standard_products": 1, "sale_multi_pricelist_product_template": 1} - - - {"search_default_filter_to_sell":1, "search_default_filter_standard_products": 1} - - diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/demo/res_partner_demo.xml b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/demo/res_partner_demo.xml deleted file mode 100644 index c792282c..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/demo/res_partner_demo.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - Test Partner - company - - 31 Hong Kong street - Taipei - 106 - info@mycompany.com - +15 56856895 - www.mycompany.com - - diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/i18n/bs.po b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/i18n/bs.po deleted file mode 100644 index 0af49700..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/i18n/bs.po +++ /dev/null @@ -1,189 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * product_configurator_sale -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__attribute_line_ids -msgid "Attributes" -msgstr "Atributi" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__config_session_id -msgid "Config Session" -msgstr "Konfiguracijska sesija" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__config_ok -msgid "Configurable" -msgstr "Konfigurabilno" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_tmpl_id -msgid "Configurable Template" -msgstr "Konfigurabilni predložak" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_session_id -msgid "Configuration Session" -msgstr "Konfiguracijska sesija" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__name -msgid "Configuration Session Number" -msgstr "Broj konfiguracijske sesije" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_step_name -msgid "Configuration Step" -msgstr "Korak konfiguracije" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_step -msgid "Configuration Step ID" -msgstr "ID koraka konfiguracije" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_step_ids -msgid "Configuration Steps" -msgstr "Koraci konfiguracije" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__custom_value_ids -msgid "Configurator Custom Values" -msgstr "Prilagođene vrijednosti konfiguratora" - -#. module: product_configurator_sale -#: model_terms:ir.ui.view,arch_db:product_configurator_sale.sale_order_form_config -msgid "Configure Product" -msgstr "Konfiguriši proizvod" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__create_uid -msgid "Created by" -msgstr "Kreirao" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__create_date -msgid "Created on" -msgstr "Kreirano" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__currency_id -msgid "Currency" -msgstr "Valuta" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__custom_value_ids -msgid "Custom Values" -msgstr "Podesive vrijednosti" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__display_name -msgid "Display Name" -msgstr "Prikazani naziv" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__id -msgid "ID" -msgstr "ID" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale____last_update -msgid "Last Modified on" -msgstr "Zadnje mijenjano" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__write_uid -msgid "Last Updated by" -msgstr "Zadnji ažurirao" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__write_date -msgid "Last Updated on" -msgstr "Zadnje ažurirano" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__order_id -msgid "Order" -msgstr "Nalog" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__order_line_id -msgid "Order Line" -msgstr "Stavka narudžbe" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_preset_id -msgid "Preset" -msgstr "Predložak" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__price -msgid "Price" -msgstr "Cijena" - -#. module: product_configurator_sale -#: model:ir.model,name:product_configurator_sale.model_product_configurator_sale -msgid "Product Configurator Sale" -msgstr "Konfigurator prodaje proizvoda" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_img -msgid "Product Img" -msgstr "Slika proizvoda" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_id -msgid "Product Variant" -msgstr "Varijanta proizvoda" - -#. module: product_configurator_sale -#: model_terms:ir.ui.view,arch_db:product_configurator_sale.sale_order_form_config -msgid "Reconfigure" -msgstr "Rekonfiguriši" - -#. module: product_configurator_sale -#: model:ir.model,name:product_configurator_sale.model_sale_order -msgid "Sales Order" -msgstr "Prodajni nalog" - -#. module: product_configurator_sale -#: model:ir.model,name:product_configurator_sale.model_sale_order_line -msgid "Sales Order Line" -msgstr "Stavka prodajne narudžbe" - -#. module: product_configurator_sale -#: model:ir.model.fields,help:product_configurator_sale.field_product_configurator_sale__product_id -msgid "Set only when re-configuring a existing variant" -msgstr "Postaviti samo prilikom rekonfiguracije postojeće varijante" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__state -msgid "State" -msgstr "Status" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__user_id -msgid "User" -msgstr "Korisnik" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__value_ids -msgid "Value" -msgstr "Vrijednost" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__weight -msgid "Weight" -msgstr "Težina" diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/i18n/it.po b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/i18n/it.po deleted file mode 100644 index 9e4533f4..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/i18n/it.po +++ /dev/null @@ -1,192 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * product_configurator_sale -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-10-26 16:06+0000\n" -"Last-Translator: mymage \n" -"Language-Team: none\n" -"Language: it\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.6.2\n" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__attribute_line_ids -msgid "Attributes" -msgstr "Attributi" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__config_session_id -msgid "Config Session" -msgstr "Configurazione sessione" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__config_ok -msgid "Configurable" -msgstr "Configurabile" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_tmpl_id -msgid "Configurable Template" -msgstr "Modello configurabile" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_session_id -msgid "Configuration Session" -msgstr "Sessione configurazione" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__name -msgid "Configuration Session Number" -msgstr "Numero sessione configurazione" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_step_name -msgid "Configuration Step" -msgstr "Passo configurazione" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_step -msgid "Configuration Step ID" -msgstr "ID passo configurazione" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_step_ids -msgid "Configuration Steps" -msgstr "Passi configurazione" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__custom_value_ids -msgid "Configurator Custom Values" -msgstr "Valori personalizzati configurazione" - -#. module: product_configurator_sale -#: model_terms:ir.ui.view,arch_db:product_configurator_sale.sale_order_form_config -msgid "Configure Product" -msgstr "Configurazione prodotto" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__create_uid -msgid "Created by" -msgstr "Creato da" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__create_date -msgid "Created on" -msgstr "Creato il" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__currency_id -msgid "Currency" -msgstr "Valuta" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__custom_value_ids -msgid "Custom Values" -msgstr "Valori personalizzati" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__display_name -msgid "Display Name" -msgstr "Nome visualizzato" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__id -msgid "ID" -msgstr "ID" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale____last_update -msgid "Last Modified on" -msgstr "Ultima modifica il" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__write_uid -msgid "Last Updated by" -msgstr "Ultimo aggiornamento di" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__write_date -msgid "Last Updated on" -msgstr "Ultimo aggiornamento il" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__order_id -msgid "Order" -msgstr "Ordine" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__order_line_id -msgid "Order Line" -msgstr "Riga ordine" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_preset_id -msgid "Preset" -msgstr "Preimpostato" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__price -msgid "Price" -msgstr "Prezzo" - -#. module: product_configurator_sale -#: model:ir.model,name:product_configurator_sale.model_product_configurator_sale -msgid "Product Configurator Sale" -msgstr "Configuratore di prodotto vendita" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_img -msgid "Product Img" -msgstr "Immagine prodotto" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_id -msgid "Product Variant" -msgstr "Variante prodotto" - -#. module: product_configurator_sale -#: model_terms:ir.ui.view,arch_db:product_configurator_sale.sale_order_form_config -msgid "Reconfigure" -msgstr "Riconfigurare" - -#. module: product_configurator_sale -#: model:ir.model,name:product_configurator_sale.model_sale_order -msgid "Sales Order" -msgstr "Ordine di vendita" - -#. module: product_configurator_sale -#: model:ir.model,name:product_configurator_sale.model_sale_order_line -msgid "Sales Order Line" -msgstr "Riga ordine di vendita" - -#. module: product_configurator_sale -#: model:ir.model.fields,help:product_configurator_sale.field_product_configurator_sale__product_id -msgid "Set only when re-configuring a existing variant" -msgstr "Impostare solo quando si riconfigura una variante esistente" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__state -msgid "State" -msgstr "Stato" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__user_id -msgid "User" -msgstr "Utente" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__value_ids -msgid "Value" -msgstr "Valore" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__weight -msgid "Weight" -msgstr "Peso" diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/i18n/product_configurator_sale.pot b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/i18n/product_configurator_sale.pot deleted file mode 100644 index 0e422587..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/i18n/product_configurator_sale.pot +++ /dev/null @@ -1,189 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * product_configurator_sale -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"Last-Translator: \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__attribute_line_ids -msgid "Attributes" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__config_session_id -msgid "Config Session" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__config_ok -msgid "Configurable" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_tmpl_id -msgid "Configurable Template" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_session_id -msgid "Configuration Session" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__name -msgid "Configuration Session Number" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_step_name -msgid "Configuration Step" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_step -msgid "Configuration Step ID" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_step_ids -msgid "Configuration Steps" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__custom_value_ids -msgid "Configurator Custom Values" -msgstr "" - -#. module: product_configurator_sale -#: model_terms:ir.ui.view,arch_db:product_configurator_sale.sale_order_form_config -msgid "Configure Product" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__create_uid -msgid "Created by" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__create_date -msgid "Created on" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__currency_id -msgid "Currency" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__custom_value_ids -msgid "Custom Values" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__display_name -msgid "Display Name" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__id -msgid "ID" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale____last_update -msgid "Last Modified on" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__write_uid -msgid "Last Updated by" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__write_date -msgid "Last Updated on" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__order_id -msgid "Order" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__order_line_id -msgid "Order Line" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_preset_id -msgid "Preset" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__price -msgid "Price" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model,name:product_configurator_sale.model_product_configurator_sale -msgid "Product Configurator Sale" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_img -msgid "Product Img" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_id -msgid "Product Variant" -msgstr "" - -#. module: product_configurator_sale -#: model_terms:ir.ui.view,arch_db:product_configurator_sale.sale_order_form_config -msgid "Reconfigure" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model,name:product_configurator_sale.model_sale_order -msgid "Sales Order" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model,name:product_configurator_sale.model_sale_order_line -msgid "Sales Order Line" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,help:product_configurator_sale.field_product_configurator_sale__product_id -msgid "Set only when re-configuring a existing variant" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__state -msgid "State" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__user_id -msgid "User" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__value_ids -msgid "Value" -msgstr "" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__weight -msgid "Weight" -msgstr "" diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/i18n/pt.po b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/i18n/pt.po deleted file mode 100644 index e89cad15..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/i18n/pt.po +++ /dev/null @@ -1,192 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * product_configurator_sale -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-09-15 18:06+0000\n" -"Last-Translator: Peter Romão \n" -"Language-Team: none\n" -"Language: pt\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.6.2\n" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__attribute_line_ids -msgid "Attributes" -msgstr "Atributos" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__config_session_id -msgid "Config Session" -msgstr "Sessão de Configuração" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__config_ok -msgid "Configurable" -msgstr "Configurável" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_tmpl_id -msgid "Configurable Template" -msgstr "Modelo Configurável" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_session_id -msgid "Configuration Session" -msgstr "Sessão de Configuração" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__name -msgid "Configuration Session Number" -msgstr "Número da Sessão de Configuração" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_step_name -msgid "Configuration Step" -msgstr "Etapa de Configuração" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_step -msgid "Configuration Step ID" -msgstr "ID da Etapa de Configuração" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_step_ids -msgid "Configuration Steps" -msgstr "Etapas de Configuração" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__custom_value_ids -msgid "Configurator Custom Values" -msgstr "Valores Personalizados do Configurador" - -#. module: product_configurator_sale -#: model_terms:ir.ui.view,arch_db:product_configurator_sale.sale_order_form_config -msgid "Configure Product" -msgstr "Configurar Artigo" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__create_uid -msgid "Created by" -msgstr "Criado por" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__create_date -msgid "Created on" -msgstr "Criado em" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__currency_id -msgid "Currency" -msgstr "Moeda" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__custom_value_ids -msgid "Custom Values" -msgstr "Valores Personalizados" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__display_name -msgid "Display Name" -msgstr "Nome Apresentado" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__id -msgid "ID" -msgstr "ID" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale____last_update -msgid "Last Modified on" -msgstr "Última Modificação em" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__write_uid -msgid "Last Updated by" -msgstr "Última Atualização por" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__write_date -msgid "Last Updated on" -msgstr "Última Atualização em" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__order_id -msgid "Order" -msgstr "Ordem" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__order_line_id -msgid "Order Line" -msgstr "Linha do Pedido" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_preset_id -msgid "Preset" -msgstr "Predefinição" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__price -msgid "Price" -msgstr "Preço" - -#. module: product_configurator_sale -#: model:ir.model,name:product_configurator_sale.model_product_configurator_sale -msgid "Product Configurator Sale" -msgstr "Configurador de Vendas de Artigos" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_img -msgid "Product Img" -msgstr "Imagem do Artigo" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_id -msgid "Product Variant" -msgstr "Variante de Artigo" - -#. module: product_configurator_sale -#: model_terms:ir.ui.view,arch_db:product_configurator_sale.sale_order_form_config -msgid "Reconfigure" -msgstr "Reconfigurar" - -#. module: product_configurator_sale -#: model:ir.model,name:product_configurator_sale.model_sale_order -msgid "Sales Order" -msgstr "Ordem de Venda" - -#. module: product_configurator_sale -#: model:ir.model,name:product_configurator_sale.model_sale_order_line -msgid "Sales Order Line" -msgstr "Linha da Ordem de Venda" - -#. module: product_configurator_sale -#: model:ir.model.fields,help:product_configurator_sale.field_product_configurator_sale__product_id -msgid "Set only when re-configuring a existing variant" -msgstr "Definir apenas ao reconfigurar uma variante existente" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__state -msgid "State" -msgstr "Estado" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__user_id -msgid "User" -msgstr "Utilizador" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__value_ids -msgid "Value" -msgstr "Valor" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__weight -msgid "Weight" -msgstr "Peso" diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/i18n/tr.po b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/i18n/tr.po deleted file mode 100644 index 703c05eb..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/i18n/tr.po +++ /dev/null @@ -1,192 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * product_configurator_sale -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2025-02-24 17:06+0000\n" -"Last-Translator: İsmail Çağan Yılmaz \n" -"Language-Team: none\n" -"Language: tr\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.6.2\n" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__attribute_line_ids -msgid "Attributes" -msgstr "Nitelikler" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__config_session_id -msgid "Config Session" -msgstr "Yapılandırma Ayarları" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__config_ok -msgid "Configurable" -msgstr "Yapılandırılabilir" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_tmpl_id -msgid "Configurable Template" -msgstr "Yapılandırılabilir Şablon" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_session_id -msgid "Configuration Session" -msgstr "Yapılandırma Oturumu" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__name -msgid "Configuration Session Number" -msgstr "Yapılandırma Oturum Numarası" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_step_name -msgid "Configuration Step" -msgstr "Yapılandırma Adımı" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_step -msgid "Configuration Step ID" -msgstr "Yapılandırma Adım ID" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__config_step_ids -msgid "Configuration Steps" -msgstr "Yapılandırma Adımları" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_sale_order_line__custom_value_ids -msgid "Configurator Custom Values" -msgstr "Yapılandırıcı Özel Değerler" - -#. module: product_configurator_sale -#: model_terms:ir.ui.view,arch_db:product_configurator_sale.sale_order_form_config -msgid "Configure Product" -msgstr "Ürün Yapılandır" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__create_uid -msgid "Created by" -msgstr "Tarafından oluşturuldu" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__create_date -msgid "Created on" -msgstr "Tarihinde oluşturuldu" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__currency_id -msgid "Currency" -msgstr "Para Birimi" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__custom_value_ids -msgid "Custom Values" -msgstr "Özel Değerler" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__display_name -msgid "Display Name" -msgstr "Görünür Isim" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__id -msgid "ID" -msgstr "ID" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale____last_update -msgid "Last Modified on" -msgstr "Son Değiştirilme tarihi" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__write_uid -msgid "Last Updated by" -msgstr "Son Güncelleyen" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__write_date -msgid "Last Updated on" -msgstr "Son Güncelleme tarihi" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__order_id -msgid "Order" -msgstr "Sipariş" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__order_line_id -msgid "Order Line" -msgstr "Sipariş Satırı" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_preset_id -msgid "Preset" -msgstr "Önceden Ayarlanma" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__price -msgid "Price" -msgstr "Fiyat" - -#. module: product_configurator_sale -#: model:ir.model,name:product_configurator_sale.model_product_configurator_sale -msgid "Product Configurator Sale" -msgstr "Satış Ürün Yapılandırıcı" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_img -msgid "Product Img" -msgstr "Ürün Resmi" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__product_id -msgid "Product Variant" -msgstr "Ürün Varyantı" - -#. module: product_configurator_sale -#: model_terms:ir.ui.view,arch_db:product_configurator_sale.sale_order_form_config -msgid "Reconfigure" -msgstr "Yeniden yapılandır" - -#. module: product_configurator_sale -#: model:ir.model,name:product_configurator_sale.model_sale_order -msgid "Sales Order" -msgstr "Satış Siparişi" - -#. module: product_configurator_sale -#: model:ir.model,name:product_configurator_sale.model_sale_order_line -msgid "Sales Order Line" -msgstr "Satış Siparişi Satırları" - -#. module: product_configurator_sale -#: model:ir.model.fields,help:product_configurator_sale.field_product_configurator_sale__product_id -msgid "Set only when re-configuring a existing variant" -msgstr "Yalnızca mevcut bir varyantı yeniden yapılandırırken ayarlayın" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__state -msgid "State" -msgstr "Durumu" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__user_id -msgid "User" -msgstr "Kullanıcı" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__value_ids -msgid "Value" -msgstr "Değer" - -#. module: product_configurator_sale -#: model:ir.model.fields,field_description:product_configurator_sale.field_product_configurator_sale__weight -msgid "Weight" -msgstr "Ağırlık" diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/models/__init__.py b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/models/__init__.py deleted file mode 100644 index b2e71ae3..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/models/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# Copyright (C) 2021 Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from . import sale diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/models/sale.py b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/models/sale.py deleted file mode 100644 index 57cadb1d..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/models/sale.py +++ /dev/null @@ -1,90 +0,0 @@ -# Copyright (C) 2021 Open Source Integrators -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import api, fields, models - - -class SaleOrder(models.Model): - _inherit = "sale.order" - - def action_config_start(self): - """Return action to start configuration wizard""" - configurator_obj = self.env["product.configurator.sale"] - ctx = dict( - self.env.context, - default_order_id=self.id, - wizard_model="product.configurator.sale", - allow_preset_selection=True, - ) - return configurator_obj.with_context(**ctx).get_wizard_action() - - -class SaleOrderLine(models.Model): - _inherit = "sale.order.line" - - custom_value_ids = fields.One2many( - comodel_name="product.config.session.custom.value", - inverse_name="cfg_session_id", - related="config_session_id.custom_value_ids", - string="Configurator Custom Values", - ) - config_ok = fields.Boolean( - related="product_id.config_ok", string="Configurable", readonly=True - ) - config_session_id = fields.Many2one( - comodel_name="product.config.session", string="Config Session" - ) - - def reconfigure_product(self): - """Creates and launches a product configurator wizard with a linked - template and variant in order to re-configure a existing product. It is - esetially a shortcut to pre-fill configuration data of a variant""" - wizard_model = "product.configurator.sale" - - extra_vals = { - "order_id": self.order_id.id, - "order_line_id": self.id, - "product_id": self.product_id.id, - } - self = self.with_context( - default_order_id=self.order_id.id, - default_order_line_id=self.id, - ) - return self.product_id.product_tmpl_id.create_config_wizard( - model_name=wizard_model, extra_vals=extra_vals - ) - - @api.depends( - "config_session_id", - "tax_id", - "company_id", - ) - def _compute_price_unit(self): - result = None - for line in self: - if line.config_session_id: - account_tax_obj = self.env["account.tax"] - line.price_unit = account_tax_obj._fix_tax_included_price_company( - line.config_session_id.price, - line.product_id.taxes_id, - line.tax_id, - line.company_id, - ) - else: - result = super(SaleOrderLine, line)._compute_price_unit() - return result - - def _get_sale_order_line_multiline_description_variants(self): - name = "" - for line in self: - custom_values = line.custom_value_ids - if custom_values: - name += "\n" + "\n".join( - [f"{cv.display_name}: {cv.value}" for cv in custom_values] - ) - else: - name += super( - SaleOrderLine, - line, - )._get_sale_order_line_multiline_description_variants() - return name diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/readme/DESCRIPTION.rst b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/readme/DESCRIPTION.rst deleted file mode 100644 index e401a3b1..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/readme/DESCRIPTION.rst +++ /dev/null @@ -1 +0,0 @@ -Product Configurator wizard available on Sales Orders. diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/security/ir.model.access.csv b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/security/ir.model.access.csv deleted file mode 100644 index 443de519..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/security/ir.model.access.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_product_configurator_sale,product_configurator_sale,model_product_configurator_sale,base.group_user,1,0,0,0 -access_product_configurator_sale_manager,product_configurator_sale,model_product_configurator_sale,product_configurator.group_product_configurator_manager,1,1,1,1 diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/static/description/icon.png b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/static/description/icon.png deleted file mode 100644 index d5d307c6..00000000 Binary files a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/static/description/icon.png and /dev/null differ diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/static/description/index.html b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/static/description/index.html deleted file mode 100644 index 3b2e2a36..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/static/description/index.html +++ /dev/null @@ -1,418 +0,0 @@ - - - - - -Product Configurator Sale - - - -
-

Product Configurator Sale

- - -

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

-

Product Configurator wizard available on Sales Orders.

-

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

-
    -
  • Pledra
  • -
-
-
-

Maintainers

-

This module is maintained by the OCA.

- -Odoo Community Association - -

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

-

Current maintainer:

-

PCatinean

-

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

-

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

-
-
-
- - diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/tests/__init__.py b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/tests/__init__.py deleted file mode 100644 index be224966..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/tests/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - -# from . import test_sale -from . import test_sale_order_line diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/tests/test_sale.py b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/tests/test_sale.py deleted file mode 100644 index 92b7a992..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/tests/test_sale.py +++ /dev/null @@ -1,47 +0,0 @@ -from odoo.addons.product_configurator.tests import ( - test_product_configurator_test_cases as TC, -) - - -class SaleOrder(TC.ProductConfiguratorTestCases): - def setUp(self): - super(SaleOrder, self).setUp() - self.SaleOrderId = self.env["sale.order"] - self.productPricelist = self.env["product.pricelist"] - self.resPartner = self.env.ref("product_configurator_sale.partenr_sale_1") - self.currency_id = self.env.ref("base.USD") - self.ProductConfWizard = self.env["product.configurator.sale"] - - def test_00_reconfigure_product(self): - pricelist_id = self.productPricelist.create( - { - "name": "Test Pricelist", - "currency_id": self.currency_id.id, - } - ) - sale_order_id = self.SaleOrderId.create( - { - "partner_id": self.resPartner.id, - "partner_invoice_id": self.resPartner.id, - "partner_shipping_id": self.resPartner.id, - "pricelist_id": pricelist_id.id, - } - ) - context = dict( - default_order_id=sale_order_id.id, - wizard_model="product.configurator.sale", - ) - - self.ProductConfWizard = self.env["product.configurator.sale"].with_context( - **context - ) - sale_order_id.action_config_start() - self._configure_product_nxt_step() - sale_order_id.order_line.reconfigure_product() - product_tmpl = sale_order_id.order_line.product_id.product_tmpl_id - self.assertEqual( - product_tmpl.id, - self.config_product.id, - "Error: If product_tmpl not exsits\ - Method: action_config_start()", - ) diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/tests/test_sale_order_line.py b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/tests/test_sale_order_line.py deleted file mode 100644 index d7831a92..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/tests/test_sale_order_line.py +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright 2024 Simone Rubino - Aion Tech -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - -from odoo.fields import first -from odoo.tests import Form - -from odoo.addons.base.tests.common import BaseCommon - - -class TestSaleOrderLine(BaseCommon): - @classmethod - def setUpClass(cls): - super().setUpClass() - cls.customer = cls.env["res.partner"].create( - { - "name": "Test partner", - } - ) - cls.sale_order = cls.env["sale.order"].create( - { - "partner_id": cls.customer.id, - } - ) - - attribute_form = Form(cls.env["product.attribute"]) - attribute_form.name = "Test attribute" - with attribute_form.value_ids.new() as value: - value.name = "Test value 1" - with attribute_form.value_ids.new() as value: - value.name = "Test value 2" - cls.attribute = attribute_form.save() - - product_template_form = Form(cls.env["product.template"]) - product_template_form.name = "Test configurable template" - product_template_form.taxes_id.clear() - with product_template_form.attribute_line_ids.new() as attribute_line: - attribute_line.attribute_id = cls.attribute - for value in cls.attribute.value_ids: - attribute_line.value_ids.add(value) - product_template = product_template_form.save() - product_template.config_ok = True - cls.product_template = product_template - - def _create_wizard(self, sale_order, product_template): - """Create configuration wizard for `product_template` in `sale_order`.""" - wizard_action = sale_order.action_config_start() - wizard_model = self.env[wizard_action["res_model"]] - wizard_context = wizard_action.get("context", {}) - wizard = wizard_model.with_context(**wizard_context).create( - { - "product_tmpl_id": product_template.id, - } - ) - return wizard - - def _configure_wizard(self, wizard, template_values): - """Fill `wizard` with `template_values`.""" - # Fill in the values - fields_prefixes = wizard._prefixes - field_prefix = fields_prefixes.get("field_prefix") - for attribute, ptav in template_values.items(): - dynamic_attribute_name = field_prefix + str(attribute.id) - wizard.write( - { - dynamic_attribute_name: ptav.product_attribute_value_id.id, - } - ) - return wizard.action_config_done() - - def _configure_product(self, sale_order, product_template, template_values): - """Configure `product_template` in `sale_order` with values `template_values`.""" - wizard = self._create_wizard(sale_order, product_template) - - return self._configure_wizard(wizard, template_values) - - def test_config_session_change_price_unit(self): - """ - The unit price is the price of the configuration session. - """ - # Arrange: create a product with 2 product template attribute values - # having extra price 10 and 20 respectively - product_template = self.product_template - ptavs = product_template.attribute_line_ids.product_template_value_ids - ptav_10 = first(ptavs) - ptav_10.price_extra = 10 - ptav_20 = first(ptavs - ptav_10) - ptav_20.price_extra = 20 - attribute = ptav_10.attribute_id - sale_order = self.sale_order - self.assertEqual(ptav_10.price_extra, 10) - self.assertEqual(ptav_20.price_extra, 20) - self.assertTrue(product_template.config_ok) - self.assertFalse(sale_order.order_line) - - # Act: Create two order lines, each having a different template attribute value - self._configure_product( - sale_order, - product_template, - { - attribute: ptav_10, - }, - ) - order_line_10 = sale_order.order_line - self._configure_product( - sale_order, - product_template, - { - attribute: ptav_20, - }, - ) - order_line_20 = sale_order.order_line - order_line_10 - - # Assert: Each line has the unit price of the configuration session - config_session_10 = order_line_10.config_session_id - self.assertEqual(config_session_10.price, order_line_10.price_unit) - config_session_20 = order_line_20.config_session_id - self.assertEqual(config_session_20.price, order_line_20.price_unit) - # Changing the configuration session changes the unit price - order_line_20.config_session_id = config_session_10 - self.assertEqual(config_session_10.price, order_line_20.price_unit) diff --git a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/views/sale_view.xml b/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/views/sale_view.xml deleted file mode 100644 index 564f5abe..00000000 --- a/odoo-bringout-oca-product-configurator-product_configurator_sale/product_configurator_sale/views/sale_view.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - sale.order.form.config - sale.order - - - -