Initial commit: OCA Technical packages (595 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:03 +02:00
commit 2cc02aac6e
24950 changed files with 2318079 additions and 0 deletions

View file

@ -0,0 +1,44 @@
# IoT Output
Odoo addon: iot_output_oca
## Installation
```bash
pip install odoo-bringout-oca-iot-iot_output_oca
```
## Dependencies
This addon depends on:
- iot_oca
## Manifest Information
- **Name**: IoT Output
- **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_output_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

View file

@ -0,0 +1,32 @@
# 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_output_oca Module - iot_output_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.

View file

@ -0,0 +1,3 @@
# Configuration
Refer to Odoo settings for iot_output_oca. Configure related models, access rights, and options as needed.

View file

@ -0,0 +1,3 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -0,0 +1,5 @@
# Dependencies
This addon depends on:
- [iot_oca](../../odoo-bringout-oca-iot-iot_oca)

View file

@ -0,0 +1,4 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon iot_output_oca or install in UI.

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-iot-iot_output_oca"
# or
uv pip install odoo-bringout-oca-iot-iot_output_oca"
```

View file

@ -0,0 +1,15 @@
# Models
Detected core models and extensions in iot_output_oca.
```mermaid
classDiagram
class iot_device_output
class iot_device_output_action
class iot_communication_system
class iot_device
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -0,0 +1,6 @@
# Overview
Packaged Odoo addon: iot_output_oca. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon iot_output_oca
- License: LGPL-3

View file

@ -0,0 +1,3 @@
# Reports
This module does not define custom reports.

View file

@ -0,0 +1,34 @@
# Security
Access control and security definitions in iot_output_oca.
## Access Control Lists (ACLs)
Model access permissions defined in:
- **[ir.model.access.csv](../iot_output_oca/security/ir.model.access.csv)**
- 3 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_output_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

View file

@ -0,0 +1,5 @@
# 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.

View file

@ -0,0 +1,7 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon iot_output_oca
```

View file

@ -0,0 +1,3 @@
# Wizards
This module does not include UI wizards.

View file

@ -0,0 +1,77 @@
==========
IoT Output
==========
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:525a6a26eabf8da4d894e3db1d1226bf3a8c73d3217e1e2e15791274598c2405
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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_output_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_output_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 to allow different outputs from the same
device
**Table of contents**
.. contents::
:local:
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/iot/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 <https://github.com/OCA/iot/issues/new?body=module:%20iot_output_oca%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Creu Blanca
Contributors
~~~~~~~~~~~~
* Enric Tobella <etobella@creublanca.es>
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 <https://github.com/OCA/iot/tree/16.0/iot_output_oca>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import models

View file

@ -0,0 +1,20 @@
# Copyright (C) 2018 Creu Blanca
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
"name": "IoT Output",
"version": "16.0.1.0.1",
"category": "IoT",
"author": "Creu Blanca, " "Odoo Community Association (OCA)",
"license": "AGPL-3",
"installable": True,
"application": True,
"summary": "IoT allow multiple outputs",
"website": "https://github.com/OCA/iot",
"depends": ["iot_oca"],
"data": [
"security/ir.model.access.csv",
"views/iot_device_output_views.xml",
"views/iot_device_views.xml",
],
}

View file

@ -0,0 +1,196 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * iot_output_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_output_oca
#: model_terms:ir.ui.view,arch_db:iot_output_oca.iot_device_kanban
msgid ""
"<i class=\"fa fa-terminal\"/>\n"
" Outputs"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__action_ids
msgid "Action"
msgstr "Akcija"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__action_count
msgid "Action Count"
msgstr "Broj akcija"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_communication_system__applies_to
msgid "Applies To"
msgstr "Primjenjuje se na"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device__communication_system_id
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__communication_system_id
msgid "Communication System"
msgstr "Komunikacijski sistem"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__communication_system_action_id
msgid "Communication System Action"
msgstr "Komunikacijska sistemska akcija"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__create_uid
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__create_uid
msgid "Created by"
msgstr "Kreirao"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__create_date
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__create_date
msgid "Created on"
msgstr "Kreirano"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__device_id
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_communication_system__applies_to__device
msgid "Device"
msgstr "Uređaj"
#. module: iot_output_oca
#. odoo-python
#: code:addons/iot_output_oca/models/iot_device_output_action.py:0
#, python-format
msgid "Device and action must be of the same system"
msgstr "Uređaj i akcija moraju biti istog sistema"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__display_name
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__display_name
msgid "Display Name"
msgstr "Prikazani naziv"
#. module: iot_output_oca
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_device_output_action__status__failed
msgid "Failed"
msgstr "Neuspješan"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__id
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__id
msgid "ID"
msgstr "ID"
#. module: iot_output_oca
#: model:ir.model,name:iot_output_oca.model_iot_device_output_action
msgid "IoT Action"
msgstr "IoT akcija"
#. module: iot_output_oca
#: model:ir.model,name:iot_output_oca.model_iot_communication_system
msgid "IoT Communication System"
msgstr "IoT komunikacijski sistem"
#. module: iot_output_oca
#: model:ir.model,name:iot_output_oca.model_iot_device
#: model:ir.model,name:iot_output_oca.model_iot_device_output
msgid "IoT Device"
msgstr "IoT uređaj"
#. module: iot_output_oca
#: model:ir.actions.act_window,name:iot_output_oca.iot_device_output_action
msgid "IoT Outputs"
msgstr "IoT izlazi"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__ip
msgid "Ip"
msgstr "IP"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output____last_update
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action____last_update
msgid "Last Modified on"
msgstr "Zadnje mijenjano"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__write_uid
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__write_uid
msgid "Last Updated by"
msgstr "Zadnji ažurirao"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__write_date
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__write_date
msgid "Last Updated on"
msgstr "Zadnje ažurirano"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__model
msgid "Model"
msgstr "Model"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__name
msgid "Name"
msgstr "Naziv:"
#. module: iot_output_oca
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_device_output_action__status__ok
msgid "Ok"
msgstr "Uredu"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__date_ok
msgid "Ok date"
msgstr "Datum u redu"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_communication_system__output_ids
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device__output_ids
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__output_id
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_communication_system__applies_to__output
msgid "Output"
msgstr "Izlaz"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device__output_count
msgid "Output Count"
msgstr "Broj izlaza"
#. module: iot_output_oca
#: model_terms:ir.ui.view,arch_db:iot_output_oca.iot_device_form
msgid "Outputs"
msgstr "Izlazi"
#. module: iot_output_oca
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_device_output_action__status__pending
msgid "Pending"
msgstr "Na čekanju"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__result
msgid "Result"
msgstr "Rezultat"
#. module: iot_output_oca
#: model_terms:ir.ui.view,arch_db:iot_output_oca.iot_device_output_action_tree
msgid "Run"
msgstr "Pokrenut"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__state
msgid "State"
msgstr "Status"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__status
msgid "Status"
msgstr "Status"

View file

@ -0,0 +1,201 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * iot_output_oca
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-09-03 13:40+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\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_output_oca
#: model_terms:ir.ui.view,arch_db:iot_output_oca.iot_device_kanban
msgid ""
"<i class=\"fa fa-terminal\"/>\n"
" Outputs"
msgstr ""
"<i class=\"fa fa-terminal\"/>\n"
" Salidas"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__action_ids
msgid "Action"
msgstr "Acción"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__action_count
msgid "Action Count"
msgstr "Conteo de acciones"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_communication_system__applies_to
msgid "Applies To"
msgstr "Aplicar a"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device__communication_system_id
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__communication_system_id
msgid "Communication System"
msgstr "Sistema de comunicación"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__communication_system_action_id
msgid "Communication System Action"
msgstr "Acción del sistema de comunicación"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__create_uid
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__create_date
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__create_date
msgid "Created on"
msgstr "Creado el"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__device_id
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_communication_system__applies_to__device
msgid "Device"
msgstr "Dispositivo"
#. module: iot_output_oca
#. odoo-python
#: code:addons/iot_output_oca/models/iot_device_output_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_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__display_name
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__display_name
msgid "Display Name"
msgstr "Mostrar Nombre"
#. module: iot_output_oca
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_device_output_action__status__failed
msgid "Failed"
msgstr "Fallido"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__id
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__id
msgid "ID"
msgstr "ID (identificación)"
#. module: iot_output_oca
#: model:ir.model,name:iot_output_oca.model_iot_device_output_action
msgid "IoT Action"
msgstr "Acción IoT"
#. module: iot_output_oca
#: model:ir.model,name:iot_output_oca.model_iot_communication_system
msgid "IoT Communication System"
msgstr "Sistema de comunicación de IoT"
#. module: iot_output_oca
#: model:ir.model,name:iot_output_oca.model_iot_device
#: model:ir.model,name:iot_output_oca.model_iot_device_output
msgid "IoT Device"
msgstr "Dispositivo IoT"
#. module: iot_output_oca
#: model:ir.actions.act_window,name:iot_output_oca.iot_device_output_action
msgid "IoT Outputs"
msgstr "Salidas IoT"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__ip
msgid "Ip"
msgstr "Ip"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output____last_update
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action____last_update
msgid "Last Modified on"
msgstr "Última Modificación el"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__write_uid
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__write_uid
msgid "Last Updated by"
msgstr "Última actualización por"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__write_date
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__write_date
msgid "Last Updated on"
msgstr "Última Actualización el"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__model
msgid "Model"
msgstr "Modelo"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__name
msgid "Name"
msgstr "Nombre"
#. module: iot_output_oca
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_device_output_action__status__ok
msgid "Ok"
msgstr "Aceptar"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__date_ok
msgid "Ok date"
msgstr "Fecha de aceptación"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_communication_system__output_ids
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device__output_ids
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__output_id
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_communication_system__applies_to__output
msgid "Output"
msgstr "Salida"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device__output_count
msgid "Output Count"
msgstr "Conteo de salida"
#. module: iot_output_oca
#: model_terms:ir.ui.view,arch_db:iot_output_oca.iot_device_form
msgid "Outputs"
msgstr "Salidas"
#. module: iot_output_oca
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_device_output_action__status__pending
msgid "Pending"
msgstr "Pendiente"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__result
msgid "Result"
msgstr "Resultado"
#. module: iot_output_oca
#: model_terms:ir.ui.view,arch_db:iot_output_oca.iot_device_output_action_tree
msgid "Run"
msgstr "Ejecutar"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__state
msgid "State"
msgstr "Estado"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__status
msgid "Status"
msgstr "Situación"

View file

@ -0,0 +1,201 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * iot_output_oca
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-10-09 08:13+0000\n"
"Last-Translator: Mostafa Barmshory <mostafa.barmshory@gmail.com>\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_output_oca
#: model_terms:ir.ui.view,arch_db:iot_output_oca.iot_device_kanban
msgid ""
"<i class=\"fa fa-terminal\"/>\n"
" Outputs"
msgstr ""
"<i class=\"fa fa-terminal\"/>\n"
" خروجی‌ها"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__action_ids
msgid "Action"
msgstr "فعالیت"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__action_count
msgid "Action Count"
msgstr "تعداد فعالیت"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_communication_system__applies_to
msgid "Applies To"
msgstr "اعمال شده به"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device__communication_system_id
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__communication_system_id
msgid "Communication System"
msgstr "سیستم ارتباطی"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__communication_system_action_id
msgid "Communication System Action"
msgstr "فعالیت سیستم ارتباطی"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__create_uid
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__create_uid
msgid "Created by"
msgstr "ایجاد شده توسط"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__create_date
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__create_date
msgid "Created on"
msgstr "ایجاد شد در"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__device_id
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_communication_system__applies_to__device
msgid "Device"
msgstr "دستگاه"
#. module: iot_output_oca
#. odoo-python
#: code:addons/iot_output_oca/models/iot_device_output_action.py:0
#, python-format
msgid "Device and action must be of the same system"
msgstr "دستگاه و فعالیت باید از یک سیستم مشابه باشد"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__display_name
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__display_name
msgid "Display Name"
msgstr "نام نمایشی"
#. module: iot_output_oca
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_device_output_action__status__failed
msgid "Failed"
msgstr "ناموفق"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__id
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__id
msgid "ID"
msgstr "شناسه"
#. module: iot_output_oca
#: model:ir.model,name:iot_output_oca.model_iot_device_output_action
msgid "IoT Action"
msgstr "فعالیت اینترنت اشیا"
#. module: iot_output_oca
#: model:ir.model,name:iot_output_oca.model_iot_communication_system
msgid "IoT Communication System"
msgstr "سیستم ارتباطی اینترنت اشیا"
#. module: iot_output_oca
#: model:ir.model,name:iot_output_oca.model_iot_device
#: model:ir.model,name:iot_output_oca.model_iot_device_output
msgid "IoT Device"
msgstr "دستگاه اینترنت اشیا"
#. module: iot_output_oca
#: model:ir.actions.act_window,name:iot_output_oca.iot_device_output_action
msgid "IoT Outputs"
msgstr "خروجی اینترنت اشیا"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__ip
msgid "Ip"
msgstr "آدرس"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output____last_update
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action____last_update
msgid "Last Modified on"
msgstr "آخرین نگارش در"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__write_uid
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__write_uid
msgid "Last Updated by"
msgstr "آخرین به روز رسانی با"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__write_date
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__write_date
msgid "Last Updated on"
msgstr "آخرین به روز رسانی در"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__model
msgid "Model"
msgstr "مدل"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__name
msgid "Name"
msgstr "نام"
#. module: iot_output_oca
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_device_output_action__status__ok
msgid "Ok"
msgstr "تایید"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__date_ok
msgid "Ok date"
msgstr "تاریخ تایید"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_communication_system__output_ids
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device__output_ids
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__output_id
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_communication_system__applies_to__output
msgid "Output"
msgstr "خروجی"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device__output_count
msgid "Output Count"
msgstr "تعداد خروجی"
#. module: iot_output_oca
#: model_terms:ir.ui.view,arch_db:iot_output_oca.iot_device_form
msgid "Outputs"
msgstr "خروجی‌ها"
#. module: iot_output_oca
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_device_output_action__status__pending
msgid "Pending"
msgstr "معلق"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__result
msgid "Result"
msgstr "نتیجه"
#. module: iot_output_oca
#: model_terms:ir.ui.view,arch_db:iot_output_oca.iot_device_output_action_tree
msgid "Run"
msgstr "اجرا"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__state
msgid "State"
msgstr "حالت"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__status
msgid "Status"
msgstr "حالت‌ها"

View file

@ -0,0 +1,189 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * iot_output
#
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_output
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output__action_ids
msgid "Action"
msgstr ""
#. module: iot_output
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output__action_count
msgid "Action Count"
msgstr ""
#. module: iot_output
#: model:ir.model.fields,field_description:iot_output.field_iot_system__applies_to
msgid "Applies To"
msgstr ""
#. module: iot_output
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output__create_uid
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output_action__create_uid
msgid "Created by"
msgstr ""
#. module: iot_output
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output__create_date
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output_action__create_date
msgid "Created on"
msgstr ""
#. module: iot_output
#: selection:iot.system,applies_to:0
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output__device_id
msgid "Device"
msgstr ""
#. module: iot_output
#: code:addons/iot_output/models/iot_device_output_action.py:32
#, python-format
msgid "Device and action must be of the same system"
msgstr ""
#. module: iot_output
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output__display_name
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output_action__display_name
msgid "Display Name"
msgstr ""
#. module: iot_output
#: selection:iot.device.output.action,status:0
msgid "Failed"
msgstr ""
#. module: iot_output
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output__id
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output_action__id
msgid "ID"
msgstr ""
#. module: iot_output
#: model:ir.model,name:iot_output.model_iot_device_output_action
msgid "IoT Action"
msgstr ""
#. module: iot_output
#: model:ir.model,name:iot_output.model_iot_device
#: model:ir.model,name:iot_output.model_iot_device_output
msgid "IoT Device"
msgstr ""
#. module: iot_output
#: model:ir.actions.act_window,name:iot_output.iot_device_output_action
msgid "IoT Outputs"
msgstr ""
#. module: iot_output
#: model:ir.model,name:iot_output.model_iot_system
msgid "IoT System"
msgstr ""
#. module: iot_output
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output__ip
msgid "Ip"
msgstr ""
#. module: iot_output
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output____last_update
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output_action____last_update
msgid "Last Modified on"
msgstr ""
#. module: iot_output
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output__write_uid
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output_action__write_uid
msgid "Last Updated by"
msgstr ""
#. module: iot_output
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output__write_date
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output_action__write_date
msgid "Last Updated on"
msgstr ""
#. module: iot_output
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output__model
msgid "Model"
msgstr ""
#. module: iot_output
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output__name
msgid "Name"
msgstr ""
#. module: iot_output
#: selection:iot.device.output.action,status:0
msgid "Ok"
msgstr ""
#. module: iot_output
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output_action__date_ok
msgid "Ok date"
msgstr ""
#. module: iot_output
#: selection:iot.system,applies_to:0
#: model:ir.model.fields,field_description:iot_output.field_iot_device__output_ids
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output_action__output_id
#: model:ir.model.fields,field_description:iot_output.field_iot_system__output_ids
msgid "Output"
msgstr ""
#. module: iot_output
#: model:ir.model.fields,field_description:iot_output.field_iot_device__output_count
msgid "Output Count"
msgstr ""
#. module: iot_output
#: model_terms:ir.ui.view,arch_db:iot_output.iot_device_form
msgid "Outputs"
msgstr ""
#. module: iot_output
#: selection:iot.device.output.action,status:0
msgid "Pending"
msgstr ""
#. module: iot_output
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output_action__result
msgid "Result"
msgstr ""
#. module: iot_output
#: model_terms:ir.ui.view,arch_db:iot_output.iot_device_output_action_tree
msgid "Run"
msgstr ""
#. module: iot_output
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output__state
msgid "State"
msgstr ""
#. module: iot_output
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output_action__status
msgid "Status"
msgstr ""
#. module: iot_output
#: model:ir.model.fields,field_description:iot_output.field_iot_device__system_id
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output__system_id
msgid "System"
msgstr ""
#. module: iot_output
#: model:ir.model.fields,field_description:iot_output.field_iot_device_output_action__system_action_id
msgid "System Action"
msgstr ""

View file

@ -0,0 +1,196 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * iot_output_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_output_oca
#: model_terms:ir.ui.view,arch_db:iot_output_oca.iot_device_kanban
msgid ""
"<i class=\"fa fa-terminal\"/>\n"
" Outputs"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__action_ids
msgid "Action"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__action_count
msgid "Action Count"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_communication_system__applies_to
msgid "Applies To"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device__communication_system_id
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__communication_system_id
msgid "Communication System"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__communication_system_action_id
msgid "Communication System Action"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__create_uid
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__create_uid
msgid "Created by"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__create_date
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__create_date
msgid "Created on"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__device_id
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_communication_system__applies_to__device
msgid "Device"
msgstr ""
#. module: iot_output_oca
#. odoo-python
#: code:addons/iot_output_oca/models/iot_device_output_action.py:0
#, python-format
msgid "Device and action must be of the same system"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__display_name
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__display_name
msgid "Display Name"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_device_output_action__status__failed
msgid "Failed"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__id
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__id
msgid "ID"
msgstr ""
#. module: iot_output_oca
#: model:ir.model,name:iot_output_oca.model_iot_device_output_action
msgid "IoT Action"
msgstr ""
#. module: iot_output_oca
#: model:ir.model,name:iot_output_oca.model_iot_communication_system
msgid "IoT Communication System"
msgstr ""
#. module: iot_output_oca
#: model:ir.model,name:iot_output_oca.model_iot_device
#: model:ir.model,name:iot_output_oca.model_iot_device_output
msgid "IoT Device"
msgstr ""
#. module: iot_output_oca
#: model:ir.actions.act_window,name:iot_output_oca.iot_device_output_action
msgid "IoT Outputs"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__ip
msgid "Ip"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output____last_update
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action____last_update
msgid "Last Modified on"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__write_uid
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__write_uid
msgid "Last Updated by"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__write_date
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__write_date
msgid "Last Updated on"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__model
msgid "Model"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__name
msgid "Name"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_device_output_action__status__ok
msgid "Ok"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__date_ok
msgid "Ok date"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_communication_system__output_ids
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device__output_ids
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__output_id
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_communication_system__applies_to__output
msgid "Output"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device__output_count
msgid "Output Count"
msgstr ""
#. module: iot_output_oca
#: model_terms:ir.ui.view,arch_db:iot_output_oca.iot_device_form
msgid "Outputs"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_device_output_action__status__pending
msgid "Pending"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__result
msgid "Result"
msgstr ""
#. module: iot_output_oca
#: model_terms:ir.ui.view,arch_db:iot_output_oca.iot_device_output_action_tree
msgid "Run"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__state
msgid "State"
msgstr ""
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__status
msgid "Status"
msgstr ""

View file

@ -0,0 +1,201 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * iot_output_oca
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-05-22 15:09+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\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_output_oca
#: model_terms:ir.ui.view,arch_db:iot_output_oca.iot_device_kanban
msgid ""
"<i class=\"fa fa-terminal\"/>\n"
" Outputs"
msgstr ""
"<i class=\"fa fa-terminal\"/>\n"
" Output"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__action_ids
msgid "Action"
msgstr "Azione"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__action_count
msgid "Action Count"
msgstr "Conteggio azione"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_communication_system__applies_to
msgid "Applies To"
msgstr "Si applica a"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device__communication_system_id
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__communication_system_id
msgid "Communication System"
msgstr "Sistema di comunicazione"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__communication_system_action_id
msgid "Communication System Action"
msgstr "Azione sistema di comunicazione"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__create_uid
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__create_uid
msgid "Created by"
msgstr "Creato da"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__create_date
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__create_date
msgid "Created on"
msgstr "Creato il"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__device_id
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_communication_system__applies_to__device
msgid "Device"
msgstr "Dispositivo"
#. module: iot_output_oca
#. odoo-python
#: code:addons/iot_output_oca/models/iot_device_output_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_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__display_name
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: iot_output_oca
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_device_output_action__status__failed
msgid "Failed"
msgstr "Fallito"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__id
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__id
msgid "ID"
msgstr "ID"
#. module: iot_output_oca
#: model:ir.model,name:iot_output_oca.model_iot_device_output_action
msgid "IoT Action"
msgstr "Azione IoT"
#. module: iot_output_oca
#: model:ir.model,name:iot_output_oca.model_iot_communication_system
msgid "IoT Communication System"
msgstr "Sistema di comunicazione IoT"
#. module: iot_output_oca
#: model:ir.model,name:iot_output_oca.model_iot_device
#: model:ir.model,name:iot_output_oca.model_iot_device_output
msgid "IoT Device"
msgstr "Dispositivo IoT"
#. module: iot_output_oca
#: model:ir.actions.act_window,name:iot_output_oca.iot_device_output_action
msgid "IoT Outputs"
msgstr "Output IoT"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__ip
msgid "Ip"
msgstr "IP"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output____last_update
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__write_uid
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__write_uid
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__write_date
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__write_date
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__model
msgid "Model"
msgstr "Modello"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__name
msgid "Name"
msgstr "Nome"
#. module: iot_output_oca
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_device_output_action__status__ok
msgid "Ok"
msgstr "Ok"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__date_ok
msgid "Ok date"
msgstr "Data ok"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_communication_system__output_ids
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device__output_ids
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__output_id
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_communication_system__applies_to__output
msgid "Output"
msgstr "Output"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device__output_count
msgid "Output Count"
msgstr "Conteggio output"
#. module: iot_output_oca
#: model_terms:ir.ui.view,arch_db:iot_output_oca.iot_device_form
msgid "Outputs"
msgstr "Output"
#. module: iot_output_oca
#: model:ir.model.fields.selection,name:iot_output_oca.selection__iot_device_output_action__status__pending
msgid "Pending"
msgstr "In attesa"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__result
msgid "Result"
msgstr "Risultato"
#. module: iot_output_oca
#: model_terms:ir.ui.view,arch_db:iot_output_oca.iot_device_output_action_tree
msgid "Run"
msgstr "Esegui"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output__state
msgid "State"
msgstr "Stato"
#. module: iot_output_oca
#: model:ir.model.fields,field_description:iot_output_oca.field_iot_device_output_action__status
msgid "Status"
msgstr "Stato"

View file

@ -0,0 +1,15 @@
# Copyright 2021 Creu Blanca
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openupgradelib import openupgrade
_column_renames = {
"iot_device_output": [("system_id", "communication_system_id")],
"iot_device_output_action": [
("system_action_id", "communication_system_action_id")
],
}
@openupgrade.migrate()
def migrate(env, version):
openupgrade.rename_columns(env.cr, _column_renames)

View file

@ -0,0 +1,4 @@
from . import iot_device
from . import iot_device_output_action
from . import iot_device_output
from . import iot_communication_system

View file

@ -0,0 +1,14 @@
# 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):
_inherit = "iot.communication.system"
output_ids = fields.One2many(
"iot.device.output", inverse_name="communication_system_id"
)
applies_to = fields.Selection(
[("device", "Device"), ("output", "Output")], default="device", required=True
)

View file

@ -0,0 +1,30 @@
# 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):
_inherit = "iot.device"
output_ids = fields.One2many("iot.device.output", inverse_name="device_id")
output_count = fields.Integer(compute="_compute_output_count")
communication_system_id = fields.Many2one(required=False)
@api.depends("output_ids")
def _compute_output_count(self):
for record in self:
record.output_count = len(record.output_ids)
def action_show_output(self):
self.ensure_one()
action = self.env.ref("iot_output_oca.iot_device_output_action")
result = action.read()[0]
result["context"] = {
"default_device_id": self.id,
}
result["domain"] = "[('device_id', '=', " + str(self.id) + ")]"
if len(self.output_ids) == 1:
result["views"] = [(False, "form")]
result["res_id"] = self.output_ids.id
return result

View file

@ -0,0 +1,43 @@
# 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.output"
_description = "IoT Device"
name = fields.Char(required=True)
device_id = fields.Many2one(
"iot.device", required=True, readonly=True, auto_join=True
)
communication_system_id = fields.Many2one("iot.communication.system", required=True)
action_ids = fields.One2many("iot.device.output.action", inverse_name="output_id")
state = fields.Selection([], readonly=True)
model = fields.Char()
ip = fields.Char()
action_count = fields.Integer(compute="_compute_action_count")
@api.depends("action_ids")
def _compute_action_count(self):
for record in self:
record.action_count = len(record.action_ids)
def _system_action_vals(self, system_action):
return {
"output_id": self.id,
"communication_system_action_id": system_action.id,
}
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:
if not self.device_id.active:
continue
action = self.env["iot.device.output.action"].create(
rec._system_action_vals(system_action)
)
action.run()
self.device_id.last_contact_date = fields.Datetime.now()

View file

@ -0,0 +1,46 @@
# 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 IoTDeviceOutputAction(models.Model):
_name = "iot.device.output.action"
_description = "IoT Action"
_order = "date_ok desc"
output_id = fields.Many2one("iot.device.output", 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("output_id", "communication_system_action_id")
def _check_system(self):
if self.filtered(
lambda r: r.output_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)

View file

@ -0,0 +1 @@
* Enric Tobella <etobella@creublanca.es>

View file

@ -0,0 +1,2 @@
This addon is a base module used to allow different outputs from the same
device

View file

@ -0,0 +1,4 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_iot_device_output_action,access_iot_device_output_action,model_iot_device_output_action,iot_oca.group_iot_user,1,1,1,0
access_iot_device_output,access_iot_device_output,model_iot_device_output,iot_oca.group_iot_user,1,0,0,0
manage_iot_device_output,access_iot_device_output,model_iot_device_output,iot_oca.group_iot_manager,1,1,1,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_iot_device_output_action access_iot_device_output_action model_iot_device_output_action iot_oca.group_iot_user 1 1 1 0
3 access_iot_device_output access_iot_device_output model_iot_device_output iot_oca.group_iot_user 1 0 0 0
4 manage_iot_device_output access_iot_device_output model_iot_device_output iot_oca.group_iot_manager 1 1 1 0

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View file

@ -0,0 +1,424 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>IoT Output</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="iot-output">
<h1 class="title">IoT Output</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:525a6a26eabf8da4d894e3db1d1226bf3a8c73d3217e1e2e15791274598c2405
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/iot/tree/16.0/iot_output_oca"><img alt="OCA/iot" src="https://img.shields.io/badge/github-OCA%2Fiot-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/iot-16-0/iot-16-0-iot_output_oca"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/iot&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This addon is a base module used to allow different outputs from the same
device</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-1">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-2">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-3">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-4">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-5">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-1">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/iot/issues">GitHub Issues</a>.
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
<a class="reference external" href="https://github.com/OCA/iot/issues/new?body=module:%20iot_output_oca%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-2">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-3">Authors</a></h2>
<ul class="simple">
<li>Creu Blanca</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-4">Contributors</a></h2>
<ul class="simple">
<li>Enric Tobella &lt;<a class="reference external" href="mailto:etobella&#64;creublanca.es">etobella&#64;creublanca.es</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-5">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>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.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/iot/tree/16.0/iot_output_oca">OCA/iot</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1 @@
from . import test_iot

View file

@ -0,0 +1,73 @@
# 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"})
self.assertEqual(self.device.output_count, 0)
self.output = self.env["iot.device.output"].create(
{
"communication_system_id": self.system.id,
"device_id": self.device.id,
"name": "Output",
}
)
def test_views(self):
self.assertEqual(self.device.output_count, 1)
res = self.device.action_show_output()
self.assertEqual(self.output, self.env[res["res_model"]].browse(res["res_id"]))
def test_action(self):
self.assertEqual(self.output.action_count, 0)
with mute_logger("odoo.addons.iot_oca.models.iot_communication_system_action"):
self.output.with_context(
iot_communication_system_action_id=self.action.id
).device_run_action()
self.assertEqual(self.output.action_count, 1)
self.assertEqual(self.output.action_ids.status, "failed")
def test_action_archived_device(self):
self.assertEqual(self.output.action_count, 0)
self.device.active = False
with mute_logger("odoo.addons.iot_oca.models.iot_communication_system_action"):
self.output.with_context(
iot_communication_system_action_id=self.action.id
).device_run_action()
self.assertEqual(self.output.action_count, 0)
def test_correct_action(self):
self.assertEqual(self.output.action_count, 0)
with patch(
"odoo.addons.iot_oca.models.iot_communication_system_action."
"IoTSystemAction._run",
return_value=("ok", ""),
):
self.output.with_context(
iot_communication_system_action_id=self.action.id
).device_run_action()
self.assertEqual(self.output.action_count, 1)
self.assertEqual(self.output.action_ids.status, "ok")
def test_constrains(self):
with self.assertRaises(ValidationError):
self.output.with_context(
iot_communication_system_action_id=self.action_2.id
).device_run_action()

View file

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="iot_device_output_tree" model="ir.ui.view">
<field name="name">iot.device.output.tree</field>
<field name="model">iot.device.output</field>
<field name="arch" type="xml">
<tree delete="0">
<field name="name" />
<field name="communication_system_id" />
</tree>
</field>
</record>
<record id="iot_device_output_form" model="ir.ui.view">
<field name="name">iot.device.output.form</field>
<field name="model">iot.device.output</field>
<field name="arch" type="xml">
<form>
<header />
<sheet>
<div class="oe_button_box" name="button_box" />
<div class="oe_title">
<h1>
<field name="name" />
</h1>
</div>
<group>
<group>
<field
name="communication_system_id"
domain="[('applies_to', '=', 'output')]"
/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record model="ir.actions.act_window" id="iot_device_output_action">
<field name="name">IoT Outputs</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">iot.device.output</field>
<field name="view_mode">tree,form</field>
</record>
<record id="iot_device_output_action_tree" model="ir.ui.view">
<field name="name">iot.device.output.action.tree</field>
<field name="model">iot.device.output.action</field>
<field name="arch" type="xml">
<tree create="0" delete="0">
<field name="status" />
<field name="result" />
<field name="date_ok" />
<button
name="run"
type="object"
string="Run"
attrs="{'invisible': [('status', '=', 'ok')]}"
/>
</tree>
</field>
</record>
</odoo>

View file

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="iot_device_form" model="ir.ui.view">
<field name="name">iot.device.form</field>
<field name="model">iot.device</field>
<field name="inherit_id" ref="iot_oca.iot_device_form" />
<field name="arch" type="xml">
<xpath expr="//div[@name='button_box']" position="inside">
<button
name="action_show_output"
type="object"
class="oe_stat_button"
icon="fa-terminal"
>
<field string="Outputs" name="output_count" widget="statinfo" />
</button>
</xpath>
<field name="communication_system_id" position="attributes">
<attribute name="domain">[('applies_to', '=', 'device')]</attribute>
</field>
<page id="actions" position="attributes">
<attribute
name="attrs"
>{'invisible': [('communication_system_id', '=', False)]}</attribute>
</page>
</field>
</record>
<record id="iot_device_kanban" model="ir.ui.view">
<field name="name">iot.device.kanban</field>
<field name="model">iot.device</field>
<field name="inherit_id" ref="iot_oca.iot_device_kanban" />
<field name="arch" type="xml">
<xpath expr="//div[@role='menu']/*[1]" position="before">
<a
type="object"
name="action_show_output"
role="menuitem"
class="dropdown-item"
>
<i class="fa fa-terminal" />
Outputs
</a>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,42 @@
[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",
]