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 @@
# Maintenance Plan
Odoo addon: maintenance_plan
## Installation
```bash
pip install odoo-bringout-oca-maintenance-maintenance_plan
```
## Dependencies
This addon depends on:
- base_maintenance
## Manifest Information
- **Name**: Maintenance Plan
- **Version**: 16.0.1.0.0
- **Category**: Maintenance
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_plan`.
## 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 Maintenance_plan Module - maintenance_plan
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 maintenance_plan. 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:
- [base_maintenance](../../odoo-bringout-oca-maintenance-base_maintenance)

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 maintenance_plan or install in UI.

View file

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

View file

@ -0,0 +1,15 @@
# Models
Detected core models and extensions in maintenance_plan.
```mermaid
classDiagram
class maintenance_kind
class maintenance_plan
class maintenance_equipment
class maintenance_request
```
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: maintenance_plan. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon maintenance_plan
- License: LGPL-3

View file

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

View file

@ -0,0 +1,41 @@
# Security
Access control and security definitions in maintenance_plan.
## Access Control Lists (ACLs)
Model access permissions defined in:
- **[ir.model.access.csv](../maintenance_plan/security/ir.model.access.csv)**
- 4 model access rules
## Record Rules
Row-level security rules defined in:
## Security Groups & Configuration
Security groups and permissions defined in:
- **[maintenance_security.xml](../maintenance_plan/security/maintenance_security.xml)**
```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](../maintenance_plan/security/ir.model.access.csv)**
- Model access permissions (CRUD rights)
- **[maintenance_security.xml](../maintenance_plan/security/maintenance_security.xml)**
- Security groups, categories, and XML-based rules
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 maintenance_plan
```

View file

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

View file

@ -0,0 +1,135 @@
================
Maintenance Plan
================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:51d1395956daf1de19f24abe40f89528841450822d90006b04a75e26f1913828
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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%2Fmaintenance-lightgray.png?logo=github
:target: https://github.com/OCA/maintenance/tree/16.0/maintenance_plan
:alt: OCA/maintenance
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/maintenance-16-0/maintenance-16-0-maintenance_plan
: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/maintenance&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module extends the functionality of Odoo Maintenance module by allowing
an equipment to have different preventive maintenance kinds.
**Table of contents**
.. contents::
:local:
Installation
============
Install the module.
Should you already use the maintenance module and have equipments with field
'Preventive Maintenance Frequency' defined, a new maintenance plan will be
automatically created on these equipments with maintenance kind 'Install'.
Moreover if a Request of type 'preventive' exists, whose stage isn't marked as
'Request done', and has a Request Date matching the equipment's
'Next Preventive Maintenance', the request will be updated with the
'Install' maintenance kind.
Make sure you don't have multiple 'preventive' requests at a stage which isn't
marked as 'Request done' and on the same 'Request date' as the equipment or
the module installation will fail with a User Error.
Usage
=====
Instead of defining a period and duration for only one preventive maintenance
per equipment, you can define multiple preventive maintenance kind for each
equipment.
Maintenance Kinds have to be defined through the configuration menu. Their name
have to be unique and can be set as active or inactive, should these not be
used anymore.
On any equipment over the maintenance tab, the maintenance plan be accessible,
allowing to add different maintenance kind with their
own frequency and duration. The next maintenance date will then be computed
automatically according to the start's date and the frequency defined, but the
maintenance request won't be created automatically as is the case in Odoo's
Maintenance module. In the plan there's also a field allowing the user to set the
maintenance horizon, insert the instructions to follow on the maintenance that
will be forwarded to the maintenance request generated from the plan.
This module uses the original Cron job of Odoo's Maintenance module to generate
maintenance requests. To do so, it takes into account the planning horizon and
generates all maintenance requests whose schedule date would fall inside that
planning horizon. Therefore, the maintenance manager can have a proper planning
of how many maintenance requests are programming for the future. Leaving planning
horizon to 0 will only create those maintenance request that are scheduled for
today.
We can also create maintenance requests from a plan using a domain for selecting the equipments.
This way, we might have a single plan that will generate all the requests.
In order to use it, we need to mark the `Generate with Domain` field.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/maintenance/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/maintenance/issues/new?body=module:%20maintenance_plan%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
~~~~~~~
* Camptocamp SA
* ForgeFlow
Contributors
~~~~~~~~~~~~
* Akim Juillerat <akim.juillerat@camptocamp.com>
* Matteo Mazzoni <matteo@appcademy.tech>
* David Alonso <david.alonso@solvos.es>
* Adrià Gil Sorribes <adria.gil@forgeflow.com>
* Jordi Ballester Alomar <jordi.ballester@forgeflow.com>
* Lois Rilo <lois.rilo@forgeflow.com>
* Enric Tobella <enric.tobella@dixmit.com>
* Alexei Rivera <arivera@archeti.com>
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/maintenance <https://github.com/OCA/maintenance/tree/16.0/maintenance_plan>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1,2 @@
from . import models
from .hooks import post_init_hook

View file

@ -0,0 +1,25 @@
# Copyright 2017 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Maintenance Plan",
"summary": "Extends preventive maintenance planning",
"version": "16.0.1.0.0",
"author": "Camptocamp SA, ForgeFlow, Odoo Community Association (OCA)",
"license": "AGPL-3",
"category": "Maintenance",
"website": "https://github.com/OCA/maintenance",
"images": [],
"depends": ["base_maintenance"],
"data": [
"security/ir.model.access.csv",
"security/maintenance_security.xml",
"views/maintenance_kind_views.xml",
"views/maintenance_plan_views.xml",
"views/maintenance_equipment_views.xml",
"views/report_maintenance_request.xml",
],
"external_dependencies": {"python": ["dateutil"]},
"demo": ["data/demo_maintenance_plan.xml"],
"post_init_hook": "post_init_hook",
"installable": True,
}

View file

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<!-- Maintenance kinds -->
<record id="maintenance_kind_monthly" model="maintenance.kind">
<field name="name">Monthly</field>
<field name="active" eval="True" />
</record>
<record id="maintenance_kind_weekly" model="maintenance.kind">
<field name="name">Weekly</field>
<field name="active" eval="True" />
</record>
<!-- Maintenance plans -->
<record id="maintenance_plan_monthly_monitor1" model="maintenance.plan">
<field name="equipment_id" ref="maintenance.equipment_monitor1" />
<field name="maintenance_kind_id" ref="maintenance_kind_monthly" />
<field name="interval">1</field>
<field name="interval_step">month</field>
<field name="duration">2</field>
<field name="maintenance_plan_horizon">2</field>
<field name="planning_step">month</field>
</record>
<record id="maintenance_plan_monthly_monitor4" model="maintenance.plan">
<field name="equipment_id" ref="maintenance.equipment_monitor4" />
<field name="maintenance_kind_id" ref="maintenance_kind_monthly" />
<field name="interval">1</field>
<field name="interval_step">month</field>
<field name="duration">2</field>
<field name="maintenance_plan_horizon">2</field>
<field name="planning_step">month</field>
</record>
<record id="maintenance_plan_monthly_monitor6" model="maintenance.plan">
<field name="equipment_id" ref="maintenance.equipment_monitor6" />
<field name="maintenance_kind_id" ref="maintenance_kind_monthly" />
<field name="interval">1</field>
<field name="interval_step">month</field>
<field name="duration">2</field>
<field name="maintenance_plan_horizon">1</field>
<field name="planning_step">month</field>
</record>
<record id="maintenance_plan_monthly_printer1" model="maintenance.plan">
<field name="equipment_id" ref="maintenance.equipment_printer1" />
<field name="maintenance_kind_id" ref="maintenance_kind_monthly" />
<field name="interval">1</field>
<field name="interval_step">month</field>
<field name="duration">4</field>
<field name="maintenance_plan_horizon">3</field>
<field name="planning_step">month</field>
</record>
<record id="maintenance_plan_weekly_printer1" model="maintenance.plan">
<field name="equipment_id" ref="maintenance.equipment_printer1" />
<field name="maintenance_kind_id" ref="maintenance_kind_weekly" />
<field name="interval">7</field>
<field name="duration">2</field>
<field name="maintenance_plan_horizon">1</field>
<field name="planning_step">month</field>
</record>
</odoo>

View file

@ -0,0 +1,52 @@
# Copyright 2017 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import logging
from odoo import SUPERUSER_ID, _, api
from odoo.exceptions import UserError
def post_init_hook(cr, registry):
logging.getLogger("odoo.addons.maintenance_plan").info(
"Migrating existing preventive maintenance"
)
env = api.Environment(cr, SUPERUSER_ID, {})
equipments = env["maintenance.equipment"].search([("period", "!=", False)])
if equipments:
maintenance_kind = env["maintenance.kind"].create(
{"name": "Install", "active": True}
)
for equipment in equipments:
request = equipment.maintenance_ids.filtered(
lambda r: r.maintenance_type == "preventive"
and not r.stage_id.done
and r.request_date == equipment.next_action_date
)
if len(request) > 1:
raise UserError(
_(
"You have multiple preventive maintenance requests on "
"equipment %(name)s next action date (%(date)s). Please leave only "
"one preventive request on the date of equipment's next "
"action to install the module.",
name=equipment.name,
date=equipment.next_action_date,
)
)
elif len(request) == 1:
request.write({"maintenance_kind_id": maintenance_kind.id})
env["maintenance.plan"].create(
{
"equipment_id": equipment.id,
"maintenance_kind_id": maintenance_kind.id,
"duration": equipment.maintenance_duration,
"interval": equipment.period,
}
)

View file

@ -0,0 +1,650 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * maintenance_plan
#
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: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.report_maintenance_request_document
msgid "<strong>Instructions:</strong>"
msgstr "<strong>Instructions:</strong>"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_needaction
msgid "Action Needed"
msgstr "Potrebna akcija"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__active
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Active"
msgstr "Aktivan"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__active
msgid "Active Kind"
msgstr "Aktivna vrsta"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_ids
msgid "Activities"
msgstr "Aktivnosti"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_exception_decoration
msgid "Activity Exception Decoration"
msgstr "Dekoracija iznimke aktivnosti"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_state
msgid "Activity State"
msgstr "Status aktivnosti"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_type_icon
msgid "Activity Type Icon"
msgstr "Ikona tipa aktivnosti"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__generate_domain
msgid "Apply on"
msgstr "Primjeni na"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Archived"
msgstr "Arhivirano"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_attachment_count
msgid "Attachment Count"
msgstr "Broj priloga"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__company_id
msgid "Company"
msgstr "Preduzeće"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__create_uid
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__create_uid
msgid "Created by"
msgstr "Kreirao"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__create_date
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__create_date
msgid "Created on"
msgstr "Kreirano"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_open_count
msgid "Current Maintenance"
msgstr "Trenutno održavanje"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__start_maintenance_date
msgid "Date from which the maintenance will we active"
msgstr "Datum od kojeg će održavanje biti aktivno"
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__day
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__day
msgid "Day(s)"
msgstr "Dan(i)"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_request_view_form
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Describe the maintenance to do..."
msgstr "Describe the maintenance to do..."
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__name
msgid "Description"
msgstr "Opis"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__display_name
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__display_name
msgid "Display Name"
msgstr "Prikazani naziv"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__skip_notify_follower_on_requests
msgid "Do not notify to follower when creating requests?"
msgstr "Ne obavještavaj pratioce prilikom kreiranja zahtjeva?"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__duration
msgid "Duration (hours)"
msgstr "Trajanje (sati)"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__equipment_id
msgid "Equipment"
msgstr "Oprema"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_follower_ids
msgid "Followers"
msgstr "Pratioci"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_partner_ids
msgid "Followers (Partners)"
msgstr "Pratioci (Partneri)"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_type_icon
msgid "Font awesome icon e.g. fa-tasks"
msgstr "Font awesome ikona npr. fa-tasks"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__interval
msgid "Frequency"
msgstr "Frekvencija"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__generate_with_domain
msgid "Generate With Domain"
msgstr "Generiši sa domenom"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Generate requests for current threshold"
msgstr "Generate requests for current threshold"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__has_message
msgid "Has Message"
msgstr "Ima poruku"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__id
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__id
msgid "ID"
msgstr "ID"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_exception_icon
msgid "Icon"
msgstr "Ikona"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_exception_icon
msgid "Icon to indicate an exception activity."
msgstr "Ikona za prikaz iznimki."
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_needaction
msgid "If checked, new messages require your attention."
msgstr "Ako je zakačeno, nove poruke će zahtjevati vašu pažnju"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_has_error
msgid "If checked, some messages have a delivery error."
msgstr "Ako je označeno neke poruke mogu imati grešku u dostavi."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "If not clicked, the scheduled action will do it for you."
msgstr "If not clicked, the scheduled action will do it for you."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Inactive"
msgstr "Neaktivan"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_request_view_form
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Instructions"
msgstr "Instructions"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__interval
msgid "Interval between each maintenance"
msgstr "Interval između svakog održavanja"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_is_follower
msgid "Is Follower"
msgstr "Pratilac"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Kind"
msgstr "Kind"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind____last_update
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan____last_update
msgid "Last Modified on"
msgstr "Zadnje mijenjano"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__write_uid
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__write_uid
msgid "Last Updated by"
msgstr "Zadnji ažurirao"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__write_date
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__write_date
msgid "Last Updated on"
msgstr "Zadnje ažurirano"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__planning_step
msgid "Let the event automatically repeat at that interval"
msgstr "Neka se događaj automatski ponavlja u ovim intervalima"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__interval_step
msgid "Let the event automatically repeat at that interval step"
msgstr "Dozvoli da se događaj automatski ponavlja u zadanom intervalu"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_main_attachment_id
msgid "Main Attachment"
msgstr "Glavna zakačka"
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid "Maintenace Equipment must belong to the equipment's company"
msgstr "Maintenace Equipment must belong to the equipment's company"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_count
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Maintenance"
msgstr "Održavanje"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__search_maintenance_plan_count
msgid "Maintenance All Plan Count"
msgstr "Ukupan broj planova održavanja"
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_equipment
msgid "Maintenance Equipment"
msgstr "Oprema za održavanje"
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_kind
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_kind_id
msgid "Maintenance Kind"
msgstr "Maintenance Kind"
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Maintenance Plan"
msgstr "Plan održavanja"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__maintenance_plan_count
msgid "Maintenance Plan Count"
msgstr "Broj planova održavanja"
#. module: maintenance_plan
#: model:ir.ui.menu,name:maintenance_plan.menu_m_plan_form
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Maintenance Plans"
msgstr "Planovi održavanja"
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_request
msgid "Maintenance Request"
msgstr "Zahtjev za održavanje"
#. module: maintenance_plan
#: model:ir.actions.act_window,name:maintenance_plan.hr_equipment_request_action_from_plan
msgid "Maintenance Requests"
msgstr "Zahtjevi za održavanje"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_team_id
msgid "Maintenance Team"
msgstr "Tim za održavanje"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__maintenance_team_required
msgid "Maintenance Team Required"
msgstr "Tim za održavanje je obavezan"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__duration
msgid "Maintenance duration in hours"
msgstr "Trajanje održavanja u satima"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_request__maintenance_kind_id
msgid "Maintenance kind"
msgstr "Vrsta održavanja"
#. module: maintenance_plan
#: model:ir.model.constraint,message:maintenance_plan.constraint_maintenance_kind_name_uniq
msgid "Maintenance kind name already exists."
msgstr "Naziv vrste održavanja već postoji."
#. module: maintenance_plan
#: model:ir.actions.act_window,name:maintenance_plan.maintenance_kind_action
#: model:ir.ui.menu,name:maintenance_plan.menu_maintenance_kind_configuration
msgid "Maintenance kinds"
msgstr "Maintenance kinds"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__maintenance_plan_ids
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_request__maintenance_plan_id
msgid "Maintenance plan"
msgstr "Plan održavanja"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__maintenance_plan_horizon
msgid ""
"Maintenance planning horizon. Only the maintenance requests inside the "
"horizon will be created."
msgstr ""
#. module: maintenance_plan
#: model:ir.actions.act_window,name:maintenance_plan.maintenance_plan_action
#: model:ir.actions.act_window,name:maintenance_plan.maintenance_plan_equipment_action
msgid "Maintenance plans"
msgstr "Maintenance plans"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_ids
msgid "Maintenance requests"
msgstr "Zahtjevi za održavanje"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_has_error
msgid "Message Delivery error"
msgstr "Greška pri isporuci poruke"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_ids
msgid "Messages"
msgstr "Poruke"
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__month
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__month
msgid "Month(s)"
msgstr "Mjesec(i)"
#. module: maintenance_plan
#: model:maintenance.kind,name:maintenance_plan.maintenance_kind_monthly
msgid "Monthly"
msgstr "Mjesečno"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__my_activity_date_deadline
msgid "My Activity Deadline"
msgstr "Rok za moju aktivnost"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__name
msgid "Name"
msgstr "Naziv:"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_date_deadline
msgid "Next Activity Deadline"
msgstr "Krajnji rok za sljedeću aktivnost"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_summary
msgid "Next Activity Summary"
msgstr "Pregled sljedeće aktivnosti"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_type_id
msgid "Next Activity Type"
msgstr "Tip sljedeće aktivnosti"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__next_maintenance_date
msgid "Next Maintenance Date"
msgstr "Datum sljedećeg održavanja"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__note
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_request__note
msgid "Note"
msgstr "Zabilješka"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__notes
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_request_view_form
msgid "Notes"
msgstr "Zabilješke"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_needaction_counter
msgid "Number of Actions"
msgstr "Broj akcija"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_has_error_counter
msgid "Number of errors"
msgstr "Broj grešaka"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_needaction_counter
msgid "Number of messages requiring action"
msgstr "Broj poruka koje zahtijevaju aktivnost"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr "Broj poruka sa greškama pri isporuci"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "P. Horizon period"
msgstr "P. Horizon period"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "P. Horizon step"
msgstr "P. Horizon step"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Planning Horizon"
msgstr "Planning Horizon"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_plan_horizon
msgid "Planning Horizon period"
msgstr "Period horizonta planiranja"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__planning_step
msgid "Planning Horizon step"
msgstr "Korak horizonta planiranja"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Plans"
msgstr "Planovi"
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/models/maintenance_equipment.py:0
#, python-format
msgid "Preventive Maintenance (%(kind)s) - %(description)s"
msgstr "Preventive Maintenance (%(kind)s) - %(description)s"
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/tests/test_maintenance_plan.py:0
#, python-format
msgid "Preventive Maintenance (%(kind)s) - %(plan)s"
msgstr "Preventive Maintenance (%(kind)s) - %(plan)s"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__interval_step
msgid "Recurrence"
msgstr "Ponavljanje"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_user_id
msgid "Responsible User"
msgstr "Odgovorni korisnik"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__search_equipment_id
msgid "Search Equipment"
msgstr "Pretraga opreme"
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/models/maintenance_equipment.py:0
#, python-format
msgid ""
"Some maintenance plan's company is incompatible with the company of this "
"equipment."
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Start Date"
msgstr "Početni datum"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__start_maintenance_date
msgid "Start Maintenance Date"
msgstr "Datum početka održavanja"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Team"
msgstr "Tim"
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid ""
"The maintenance plan %(kind)s of equipment %(eqpmnt)s has generated a "
"request which is not done yet. You should either set the request as done, "
"remove its maintenance kind or delete it first."
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_exception_decoration
msgid "Type of the exception activity on record."
msgstr "Vrsta aktivnosti iznimke na zapisu."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Under Maintenance"
msgstr "Pod održavanjem"
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/tests/test_maintenance_plan.py:0
#, python-format
msgid "Unnamed %(kind)s plan (%(eqpmnt)s)"
msgstr "Unnamed %(kind)s plan (%(eqpmnt)s)"
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid "Unnamed %(kind)s plan (%(eqpmt)s)"
msgstr "Unnamed %(kind)s plan (%(eqpmt)s)"
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/tests/test_maintenance_plan.py:0
#, python-format
msgid "Unnamed %(void)s plan (%(eqpmnt)s)"
msgstr "Unnamed %(void)s plan (%(eqpmnt)s)"
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/models/maintenance_equipment.py:0
#, python-format
msgid "Unspecified kind"
msgstr "Unspecified kind"
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid "Unsupported search operator"
msgstr "Unsupported search operator"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__website_message_ids
msgid "Website Messages"
msgstr "Poruke sa website-a"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__website_message_ids
msgid "Website communication history"
msgstr "Povijest komunikacije Web stranice"
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__week
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__week
msgid "Week(s)"
msgstr "Sedmica"
#. module: maintenance_plan
#: model:maintenance.kind,name:maintenance_plan.maintenance_kind_weekly
msgid "Weekly"
msgstr "Sedmično"
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__year
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__year
msgid "Year(s)"
msgstr "Godin(e)a"
#. module: maintenance_plan
#: model:ir.model.constraint,message:maintenance_plan.constraint_maintenance_plan_equipment_kind_uniq
msgid ""
"You cannot define multiple times the same maintenance kind on an equipment "
"maintenance plan."
msgstr ""
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/hooks.py:0
#, python-format
msgid ""
"You have multiple preventive maintenance requests on equipment %(name)s next"
" action date (%(date)s). Please leave only one preventive request on the "
"date of equipment's next action to install the module."
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "e.g. Calibration"
msgstr "e.g. Calibration"

View file

@ -0,0 +1,680 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * maintenance_plan
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-03-01 13:30+0000\n"
"PO-Revision-Date: 2024-02-03 10:34+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: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.report_maintenance_request_document
msgid "<strong>Instructions:</strong>"
msgstr "<strong>Instrucciones:</strong>"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_needaction
msgid "Action Needed"
msgstr "Acción necesaria"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__active
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Active"
msgstr "Activo"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__active
msgid "Active Kind"
msgstr "Tipo activo"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_ids
msgid "Activities"
msgstr "Actividades"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_exception_decoration
msgid "Activity Exception Decoration"
msgstr "Decoración de Actividad de Excepción"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_state
msgid "Activity State"
msgstr "Estado de actividad"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_type_icon
msgid "Activity Type Icon"
msgstr "Actividad de Tipo de Iconos"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__generate_domain
msgid "Apply on"
msgstr "Solicitar el"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Archived"
msgstr "Archivado"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_attachment_count
msgid "Attachment Count"
msgstr "Total de adjuntos"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__company_id
msgid "Company"
msgstr "Compañía"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__create_uid
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__create_date
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__create_date
msgid "Created on"
msgstr "Creado en"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_open_count
msgid "Current Maintenance"
msgstr "Mantenimiento actual"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__start_maintenance_date
msgid "Date from which the maintenance will we active"
msgstr "Fecha desde la cual el mantenimiento estará activo"
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__day
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__day
msgid "Day(s)"
msgstr "Día(s)"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_request_view_form
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Describe the maintenance to do..."
msgstr "Describa el mantenimiento a hacer..."
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__name
msgid "Description"
msgstr "Descripción"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__display_name
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__display_name
msgid "Display Name"
msgstr "Nombre a mostrar"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__skip_notify_follower_on_requests
msgid "Do not notify to follower when creating requests?"
msgstr "¿No notificar al seguidor cuando se crean las peticiones?"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__duration
msgid "Duration (hours)"
msgstr "Duración (horas)"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__equipment_id
msgid "Equipment"
msgstr "Equipo"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_follower_ids
msgid "Followers"
msgstr "Seguidores"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_partner_ids
msgid "Followers (Partners)"
msgstr "Seguidores (Socios)"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_type_icon
msgid "Font awesome icon e.g. fa-tasks"
msgstr "Icono de Font Awesome ej. fa-tasks"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__interval
msgid "Frequency"
msgstr "Frecuencia"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__generate_with_domain
msgid "Generate With Domain"
msgstr "Generar Con Dominio"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Generate requests for current threshold"
msgstr "Generar peticiones para el umbral actual"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__has_message
msgid "Has Message"
msgstr "Tiene mensaje"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__id
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__id
msgid "ID"
msgstr "ID"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_exception_icon
msgid "Icon"
msgstr "Icono"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_exception_icon
msgid "Icon to indicate an exception activity."
msgstr "Icono para indicar una actividad de excepción."
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_needaction
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_unread
msgid "If checked, new messages require your attention."
msgstr "Si está marcado hay nuevos mensajes que requieren su atención."
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_has_error
msgid "If checked, some messages have a delivery error."
msgstr "Si se encuentra marcado, algunos mensajes tienen error de envío."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "If not clicked, the scheduled action will do it for you."
msgstr "Si no se pulsa, la acción programada lo hará por usted."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Inactive"
msgstr "Inactivo"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_request_view_form
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Instructions"
msgstr "Instrucciones"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__interval
msgid "Interval between each maintenance"
msgstr "Intervalo entre cada mantenimiento"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_is_follower
msgid "Is Follower"
msgstr "Es seguidor"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Kind"
msgstr "Amablemente"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind____last_update
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan____last_update
msgid "Last Modified on"
msgstr "Última modificación en"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__write_uid
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__write_uid
msgid "Last Updated by"
msgstr "actualizado por última vez por"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__write_date
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__write_date
msgid "Last Updated on"
msgstr "Última actualización en"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__planning_step
msgid "Let the event automatically repeat at that interval"
msgstr "Permitir que el evento se repita automáticamente a cada intervalo"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__interval_step
msgid "Let the event automatically repeat at that interval step"
msgstr ""
"Permitir que el evento se repita automáticamente a cada paso del intervalo"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_main_attachment_id
msgid "Main Attachment"
msgstr "Adjunto principal"
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid "Maintenace Equipment must belong to the equipment's company"
msgstr "El equipo de mantenimiento debe pertenecer a la empresa del equipo"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_count
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Maintenance"
msgstr "Mantenimiento"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__search_maintenance_plan_count
msgid "Maintenance All Plan Count"
msgstr "Mantenimiento Recuento de todos los planes"
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_equipment
msgid "Maintenance Equipment"
msgstr "Equipo"
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_kind
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_kind_id
msgid "Maintenance Kind"
msgstr "Tipo de mantenimiento"
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Maintenance Plan"
msgstr "Plan de mantenimiento"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__maintenance_plan_count
msgid "Maintenance Plan Count"
msgstr "Número de planes de mantenimiento"
#. module: maintenance_plan
#: model:ir.ui.menu,name:maintenance_plan.menu_m_plan_form
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Maintenance Plans"
msgstr "Planes de mantenimiento"
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_request
msgid "Maintenance Request"
msgstr "Peticiones de mantenimiento"
#. module: maintenance_plan
#: model:ir.actions.act_window,name:maintenance_plan.hr_equipment_request_action_from_plan
msgid "Maintenance Requests"
msgstr "Peticiones de mantenimiento"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_team_id
msgid "Maintenance Team"
msgstr "Equipo de mantenimiento"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__maintenance_team_required
msgid "Maintenance Team Required"
msgstr "Equipo de mantenimiento exigido"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__duration
msgid "Maintenance duration in hours"
msgstr "Duración del mantenimiento en horas"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_request__maintenance_kind_id
msgid "Maintenance kind"
msgstr "Tipo de mantenimiento"
#. module: maintenance_plan
#: model:ir.model.constraint,message:maintenance_plan.constraint_maintenance_kind_name_uniq
msgid "Maintenance kind name already exists."
msgstr "Ya existe ese nombre de tipo de mantenimiento."
#. module: maintenance_plan
#: model:ir.actions.act_window,name:maintenance_plan.maintenance_kind_action
#: model:ir.ui.menu,name:maintenance_plan.menu_maintenance_kind_configuration
msgid "Maintenance kinds"
msgstr "Tipos de mantenimiento"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__maintenance_plan_ids
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_request__maintenance_plan_id
msgid "Maintenance plan"
msgstr "Plan de mantenimiento"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__maintenance_plan_horizon
msgid ""
"Maintenance planning horizon. Only the maintenance requests inside the "
"horizon will be created."
msgstr ""
"Horizonte del planning de mantenimiento. Solo se crearán las peticiones de "
"mantenimiento dentro del horizonte."
#. module: maintenance_plan
#: model:ir.actions.act_window,name:maintenance_plan.maintenance_plan_action
#: model:ir.actions.act_window,name:maintenance_plan.maintenance_plan_equipment_action
msgid "Maintenance plans"
msgstr "Planes de mantenimiento"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_ids
msgid "Maintenance requests"
msgstr "Peticiones de mantenimiento"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_has_error
msgid "Message Delivery error"
msgstr "Error de Envío de Mensaje"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_ids
msgid "Messages"
msgstr "Mensajes"
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__month
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__month
msgid "Month(s)"
msgstr "Mensual(es)"
#. module: maintenance_plan
#: model:maintenance.kind,name:maintenance_plan.maintenance_kind_monthly
msgid "Monthly"
msgstr "Mensual"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__my_activity_date_deadline
msgid "My Activity Deadline"
msgstr "Mi plazo de actividades"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__name
msgid "Name"
msgstr "Nombre"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_date_deadline
msgid "Next Activity Deadline"
msgstr "Siguiente plazo de actividad"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_summary
msgid "Next Activity Summary"
msgstr "Resumen de la siguiente actividad"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_type_id
msgid "Next Activity Type"
msgstr "Siguiente tipo de actividad"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__next_maintenance_date
msgid "Next Maintenance Date"
msgstr "Próximo mantenimiento"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__note
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_request__note
msgid "Note"
msgstr "Nota"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__notes
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_request_view_form
msgid "Notes"
msgstr "Notas"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_needaction_counter
msgid "Number of Actions"
msgstr "Número de acciones"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_has_error_counter
msgid "Number of errors"
msgstr "Numero de errores"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_needaction_counter
msgid "Number of messages which requires an action"
msgstr "Número de mensajes que requieren una acción"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr "Número de mensajes con error de envío"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_unread_counter
msgid "Number of unread messages"
msgstr "Número de mensajes no leidos"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "P. Horizon period"
msgstr "P. Periodo horizonte"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "P. Horizon step"
msgstr "P. Paso al horizonte"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Planning Horizon"
msgstr "Horizonte de planning"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_plan_horizon
msgid "Planning Horizon period"
msgstr "Perido del horizonte de planning"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__planning_step
msgid "Planning Horizon step"
msgstr "Paso del horizonte de planning"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Plans"
msgstr "Planes"
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_equipment.py:0
#, python-format
msgid "Preventive Maintenance (%(kind)s) - %(description)s"
msgstr "Mantenimiento preventivo (%(kind)s)-%(description)s"
#. module: maintenance_plan
#: code:addons/maintenance_plan/tests/test_maintenance_plan.py:0
#, python-format
msgid "Preventive Maintenance (%(kind)s) - %(plan)s"
msgstr "Mantenimiento preventivo (%(kind)s)-%(plan)s"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__interval_step
msgid "Recurrence"
msgstr "Recurrencia"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_user_id
msgid "Responsible User"
msgstr "Usuario responsable"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__search_equipment_id
msgid "Search Equipment"
msgstr "Equipo de Búsqueda"
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_equipment.py:0
#, python-format
msgid ""
"Some maintenance plan's company is incompatible with the company of this "
"equipment."
msgstr ""
"algún plan de mantenimiento de la compañía es incompatible con la compañía "
"de este equipo."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Start Date"
msgstr "Fecha de inicio"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__start_maintenance_date
msgid "Start Maintenance Date"
msgstr "Fecha de inicio del mantenimiento"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
"Estado basado en actividades\n"
"Vencida: la fecha tope ya ha pasado\n"
"Hoy: La fecha tope es hoy\n"
"Planificada: futuras actividades."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Team"
msgstr "Equipo"
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid ""
"The maintenance plan %(kind)s of equipment %(eqpmnt)s has generated a "
"request which is not done yet. You should either set the request as done, "
"remove its maintenance kind or delete it first."
msgstr ""
"El plan de mantenimiento %(kind)s del equipo %(eqpmnt)s ha generado una "
"solicitud que aún no se ha realizado. Debe establecer la solicitud como "
"realizada, eliminar su tipo de mantenimiento o eliminarla primero."
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_exception_decoration
msgid "Type of the exception activity on record."
msgstr "Tipo de actividad de excepción registrada."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Under Maintenance"
msgstr "En mantenimiento"
#. module: maintenance_plan
#: code:addons/maintenance_plan/tests/test_maintenance_plan.py:0
#, python-format
msgid "Unnamed %(kind)s plan (%(eqpmnt)s)"
msgstr "Plan %(kind)s sin nombre (%(eqpmnt)s)"
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid "Unnamed %(kind)s plan (%(eqpmt)s)"
msgstr "Plan %(kind)s sin nombre (%(eqpmt)s)"
#. module: maintenance_plan
#: code:addons/maintenance_plan/tests/test_maintenance_plan.py:0
#, python-format
msgid "Unnamed %(void)s plan (%(eqpmnt)s)"
msgstr "Plan %(void)s sin nombre (%(eqpmnt)s)"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_unread
msgid "Unread Messages"
msgstr "Mensajes sin leer"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_unread_counter
msgid "Unread Messages Counter"
msgstr "Contador de mensajes sin leer"
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_equipment.py:0
#, python-format
msgid "Unspecified kind"
msgstr "Tipo no especificado"
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid "Unsupported search operator"
msgstr "Operador de búsqueda no soportado"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__website_message_ids
msgid "Website Messages"
msgstr "Mensajes de la página web"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__website_message_ids
msgid "Website communication history"
msgstr "historial de la comunicación en la web"
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__week
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__week
msgid "Week(s)"
msgstr "Semana(s)"
#. module: maintenance_plan
#: model:maintenance.kind,name:maintenance_plan.maintenance_kind_weekly
msgid "Weekly"
msgstr "Semanal"
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__year
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__year
msgid "Year(s)"
msgstr "Año(s)"
#. module: maintenance_plan
#: model:ir.model.constraint,message:maintenance_plan.constraint_maintenance_plan_equipment_kind_uniq
msgid ""
"You cannot define multiple times the same maintenance kind on an equipment "
"maintenance plan."
msgstr ""
"No se pueden definir varias veces el mismo tipo de mantenimiento en el plan "
"de mantenimiento de un equipo."
#. module: maintenance_plan
#: code:addons/maintenance_plan/hooks.py:0
#, python-format
msgid ""
"You have multiple preventive maintenance requests on equipment %(name)s next "
"action date (%(date)s). Please leave only one preventive request on the date "
"of equipment's next action to install the module."
msgstr ""
"Tiene varias solicitudes de mantenimiento preventivo en la fecha de la "
"próxima acción del equipo %(name)s (%(date)s). Por favor, deje sólo una "
"solicitud preventiva en la fecha de la próxima acción del equipo para "
"instalar el módulo."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "e.g. Calibration"
msgstr "p.ej. Calibración"
#~ msgid "SMS Delivery error"
#~ msgstr "Error de envío SMS"

View file

@ -0,0 +1,739 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * maintenance_plan
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-12-31 16:06+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 5.6.2\n"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.report_maintenance_request_document
msgid "<strong>Instructions:</strong>"
msgstr "<strong>Istruzioni:</strong>"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_needaction
msgid "Action Needed"
msgstr "Azione richiesta"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__active
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Active"
msgstr "Attivo"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__active
msgid "Active Kind"
msgstr "Genere attivo"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_ids
msgid "Activities"
msgstr "Attività"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_exception_decoration
msgid "Activity Exception Decoration"
msgstr "Decorazione eccezione attività"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_state
msgid "Activity State"
msgstr "Stato attività"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_type_icon
msgid "Activity Type Icon"
msgstr "Icona tipo attività"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__generate_domain
msgid "Apply on"
msgstr "Applica a"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Archived"
msgstr "In archivio"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_attachment_count
msgid "Attachment Count"
msgstr "Conteggio allegati"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__company_id
msgid "Company"
msgstr "Azienda"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__create_uid
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__create_uid
msgid "Created by"
msgstr "Creato da"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__create_date
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__create_date
msgid "Created on"
msgstr "Creato il"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_open_count
msgid "Current Maintenance"
msgstr "Manutenzione corrente"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__start_maintenance_date
msgid "Date from which the maintenance will we active"
msgstr "Data dalla quale la manutenzione sarà attiva"
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__day
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__day
msgid "Day(s)"
msgstr "Giorno(i)"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_request_view_form
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Describe the maintenance to do..."
msgstr "Descrivere la manutenzione da fare..."
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__name
msgid "Description"
msgstr "Descrizione"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__display_name
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__skip_notify_follower_on_requests
msgid "Do not notify to follower when creating requests?"
msgstr "Non segnalare a chi segue quando si creano richieste?"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__duration
msgid "Duration (hours)"
msgstr "Durata (ore)"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__equipment_id
msgid "Equipment"
msgstr "Attrezzatura"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_follower_ids
msgid "Followers"
msgstr "Seguito da"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_partner_ids
msgid "Followers (Partners)"
msgstr "Seguito da (partner)"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_type_icon
msgid "Font awesome icon e.g. fa-tasks"
msgstr "Icona Font Awesome es. fa-tasks"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__interval
msgid "Frequency"
msgstr "Frequenza"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__generate_with_domain
msgid "Generate With Domain"
msgstr "Genera con dominio"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Generate requests for current threshold"
msgstr "Genera richieste per la soglia attuale"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__has_message
msgid "Has Message"
msgstr "Ha un messaggio"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__id
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__id
msgid "ID"
msgstr "ID"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_exception_icon
msgid "Icon"
msgstr "Icona"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_exception_icon
msgid "Icon to indicate an exception activity."
msgstr "Icona per indicare un'attività eccezione."
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_needaction
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_unread
msgid "If checked, new messages require your attention."
msgstr "Se selezionata, nuovi messaggi richiedono attenzione."
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_has_error
msgid "If checked, some messages have a delivery error."
msgstr "Se selezionata, alcuni messaggi hanno un errore di consegna."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "If not clicked, the scheduled action will do it for you."
msgstr "Se non viene cliccato, l'azione schedulata lo farà automaticamente."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Inactive"
msgstr "Inattivo"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_request_view_form
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Instructions"
msgstr "Istruzioni"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__interval
msgid "Interval between each maintenance"
msgstr "Intervallo tra le manutenzioni"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_is_follower
msgid "Is Follower"
msgstr "Segue"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Kind"
msgstr "Genere"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind____last_update
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__write_uid
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__write_uid
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__write_date
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__write_date
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__planning_step
msgid "Let the event automatically repeat at that interval"
msgstr "Consente la ripetizione automatica dell'evento con quell'intervallo"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__interval_step
msgid "Let the event automatically repeat at that interval step"
msgstr ""
"Consente la ripetizione automatica dell'evento con quell'incremento di "
"intervallo"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_main_attachment_id
msgid "Main Attachment"
msgstr "Allegato principale"
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid "Maintenace Equipment must belong to the equipment's company"
msgstr ""
"L'attrezzatura di manutenzione deve appartenere all'azienda dell'attrezzatura"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_count
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Maintenance"
msgstr "Manutenzione"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__search_maintenance_plan_count
msgid "Maintenance All Plan Count"
msgstr "Conteggio di tutti i piani manutenzione"
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_equipment
msgid "Maintenance Equipment"
msgstr "Attrezzatura manutenzione"
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_kind
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_kind_id
msgid "Maintenance Kind"
msgstr "Genere manutenzione"
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Maintenance Plan"
msgstr "Piano manutenzione"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__maintenance_plan_count
msgid "Maintenance Plan Count"
msgstr "Conteggio piano di manutenzione"
#. module: maintenance_plan
#: model:ir.ui.menu,name:maintenance_plan.menu_m_plan_form
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Maintenance Plans"
msgstr "Piani di manutenzione"
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_request
msgid "Maintenance Request"
msgstr "Richiesta manutenzione"
#. module: maintenance_plan
#: model:ir.actions.act_window,name:maintenance_plan.hr_equipment_request_action_from_plan
msgid "Maintenance Requests"
msgstr "Richieste di manutenzione"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_team_id
msgid "Maintenance Team"
msgstr "Squadra manutenzione"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__maintenance_team_required
msgid "Maintenance Team Required"
msgstr "Squadra di manutenzione richiesta"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__duration
msgid "Maintenance duration in hours"
msgstr "Durata manutenzione in ore"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_request__maintenance_kind_id
msgid "Maintenance kind"
msgstr "Genere manutenzione"
#. module: maintenance_plan
#: model:ir.model.constraint,message:maintenance_plan.constraint_maintenance_kind_name_uniq
msgid "Maintenance kind name already exists."
msgstr "Nome genere manutenzione già esistente."
#. module: maintenance_plan
#: model:ir.actions.act_window,name:maintenance_plan.maintenance_kind_action
#: model:ir.ui.menu,name:maintenance_plan.menu_maintenance_kind_configuration
msgid "Maintenance kinds"
msgstr "Generi manutenzione"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__maintenance_plan_ids
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_request__maintenance_plan_id
msgid "Maintenance plan"
msgstr "Piano di manutenzione"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__maintenance_plan_horizon
msgid ""
"Maintenance planning horizon. Only the maintenance requests inside the "
"horizon will be created."
msgstr ""
"Orizzonte pianificazione manutenzione. Solo le manutenzioni richieste entro "
"l'orizzonte verranno create."
#. module: maintenance_plan
#: model:ir.actions.act_window,name:maintenance_plan.maintenance_plan_action
#: model:ir.actions.act_window,name:maintenance_plan.maintenance_plan_equipment_action
msgid "Maintenance plans"
msgstr "Piani di manutenzione"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_ids
msgid "Maintenance requests"
msgstr "Richieste manutenzione"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_has_error
msgid "Message Delivery error"
msgstr "Errore di consegna messaggio"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_ids
msgid "Messages"
msgstr "Messaggi"
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__month
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__month
msgid "Month(s)"
msgstr "Mese(i)"
#. module: maintenance_plan
#: model:maintenance.kind,name:maintenance_plan.maintenance_kind_monthly
msgid "Monthly"
msgstr "Mensile"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__my_activity_date_deadline
msgid "My Activity Deadline"
msgstr "Scadenza mia attività"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__name
msgid "Name"
msgstr "Nome"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_date_deadline
msgid "Next Activity Deadline"
msgstr "Scadenza prossima attività"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_summary
msgid "Next Activity Summary"
msgstr "Riepilogo prossima attività"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_type_id
msgid "Next Activity Type"
msgstr "Tipo prossima attività"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__next_maintenance_date
msgid "Next Maintenance Date"
msgstr "Data manutenzione successiva"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__note
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_request__note
msgid "Note"
msgstr "Nota"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__notes
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_request_view_form
msgid "Notes"
msgstr "Note"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_needaction_counter
msgid "Number of Actions"
msgstr "Numero di azioni"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_has_error_counter
msgid "Number of errors"
msgstr "Numero di errori"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_needaction_counter
msgid "Number of messages which requires an action"
msgstr "Numero di messaggi che richiedono un'azione"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr "Numero di messaggi con errore di consegna"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_unread_counter
msgid "Number of unread messages"
msgstr "Numero di messaggi non letti"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "P. Horizon period"
msgstr "Periodo orizzonte piano"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "P. Horizon step"
msgstr "Passo orizzonte piano"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Planning Horizon"
msgstr "Orizzonte pianificazione"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_plan_horizon
msgid "Planning Horizon period"
msgstr "Periodo orizzonte pianificazione"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__planning_step
msgid "Planning Horizon step"
msgstr "Incremento orizzonte pianificazione"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Plans"
msgstr "Piani"
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_equipment.py:0
#, python-format
msgid "Preventive Maintenance (%(kind)s) - %(description)s"
msgstr "Manutenzione preventiva (%(kind)s) - %(description)s"
#. module: maintenance_plan
#: code:addons/maintenance_plan/tests/test_maintenance_plan.py:0
#, python-format
msgid "Preventive Maintenance (%(kind)s) - %(plan)s"
msgstr "Manutenzione preventiva (%(kind)s) - %(plan)s"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__interval_step
msgid "Recurrence"
msgstr "Ricorrenza"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_user_id
msgid "Responsible User"
msgstr "Utente responsabile"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__search_equipment_id
msgid "Search Equipment"
msgstr "Cerca attrezzatura"
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_equipment.py:0
#, python-format
msgid ""
"Some maintenance plan's company is incompatible with the company of this "
"equipment."
msgstr ""
"Alcune aziende del piano manutenzione sono incompatibili con l'azienda di "
"questa attrezzatura."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Start Date"
msgstr "Data inizio"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__start_maintenance_date
msgid "Start Maintenance Date"
msgstr "Data inizio manutenzione"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
"Stato in base alle attività\n"
"Scaduto: la data richiesta è trascorsa\n"
"Oggi: la data attività è oggi\n"
"Pianificato: attività future."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Team"
msgstr "Squadra"
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid ""
"The maintenance plan %(kind)s of equipment %(eqpmnt)s has generated a "
"request which is not done yet. You should either set the request as done, "
"remove its maintenance kind or delete it first."
msgstr ""
"Il piano di manutenzione %(kind)s dell'attrezzatura %(eqpmnt)s ha generato "
"una richiesta che non è ancora stata evasa. Bisogna prima impostarla ad "
"eseguita o eliminare il genere di manutenzione o eliminarla."
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_exception_decoration
msgid "Type of the exception activity on record."
msgstr "Tipo di attività eccezione sul record."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Under Maintenance"
msgstr "In manutenzione"
#. module: maintenance_plan
#: code:addons/maintenance_plan/tests/test_maintenance_plan.py:0
#, python-format
msgid "Unnamed %(kind)s plan (%(eqpmnt)s)"
msgstr "Piano %(kind)s anonimo (%(eqpmnt)s)"
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid "Unnamed %(kind)s plan (%(eqpmt)s)"
msgstr "Piano %(kind)s anonimo (%(eqpmt)s)"
#. module: maintenance_plan
#: code:addons/maintenance_plan/tests/test_maintenance_plan.py:0
#, python-format
msgid "Unnamed %(void)s plan (%(eqpmnt)s)"
msgstr "Piano %(void)s anonimo (%(eqpmnt)s)"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_unread
msgid "Unread Messages"
msgstr "Messaggi non letti"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_unread_counter
msgid "Unread Messages Counter"
msgstr "Numero messaggi non letti"
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_equipment.py:0
#, python-format
msgid "Unspecified kind"
msgstr "Genere non specificato"
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid "Unsupported search operator"
msgstr "Operatore di ricerca non supportato"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__website_message_ids
msgid "Website Messages"
msgstr "Messaggi sito web"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__website_message_ids
msgid "Website communication history"
msgstr "Storico comunicazioni sito web"
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__week
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__week
msgid "Week(s)"
msgstr "Settimana(e)"
#. module: maintenance_plan
#: model:maintenance.kind,name:maintenance_plan.maintenance_kind_weekly
msgid "Weekly"
msgstr "Settimanale"
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__year
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__year
msgid "Year(s)"
msgstr "Anno(i)"
#. module: maintenance_plan
#: model:ir.model.constraint,message:maintenance_plan.constraint_maintenance_plan_equipment_kind_uniq
msgid ""
"You cannot define multiple times the same maintenance kind on an equipment "
"maintenance plan."
msgstr ""
"Non si può definire più volte lo stesso genere di manutenzione in un piano "
"di manutenzione attrezzatura."
#. module: maintenance_plan
#: code:addons/maintenance_plan/hooks.py:0
#, python-format
msgid ""
"You have multiple preventive maintenance requests on equipment %(name)s next "
"action date (%(date)s). Please leave only one preventive request on the date "
"of equipment's next action to install the module."
msgstr ""
"Ci sono richieste di manutenzione preventiva multiple per l'attrezzatura "
"%(name)s alla data azione successiva (%(date)s). Lasciare solo una richiesta "
"preventiva alla successiva data azione dell'attrezzatura per installare il "
"modulo."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "e.g. Calibration"
msgstr "es. calibrazione"
#~ msgid "SMS Delivery error"
#~ msgstr "Errore consegna SMS"
#~ msgid "Internal notes..."
#~ msgstr "Note interne..."
#, python-format
#~ msgid ""
#~ "The maintenance plan %(kind)s of equipment %(plan)s has generated a "
#~ "request which is not done yet. You should either set the request as done, "
#~ "remove its maintenance kind or delete it first."
#~ msgstr ""
#~ "Il piano manutenzione %(kind)s dell'attrezzatura %(plan)s ha generato una "
#~ "richiesta che non è ancora eseguita. Bisogna prima impostare la richiesta "
#~ "a eseguita, o eliminare il suo tipo di manutenzione, o eliminarla."
#, python-format
#~ msgid "Unnamed %(kind)s plan (%(equipment)s)"
#~ msgstr "Piano %(kind)s (%(equipment)s) senza nome"
#, python-format
#~ msgid "Unnamed %(kind)s plan (%(plan)s)"
#~ msgstr "Piano (%(plan)s) %(kind)s senza nome"
#, python-format
#~ msgid "Unnamed %(nothing)s plan (%(equipment)s)"
#~ msgstr "Piano (%(equipment)s) %(nothing)s senza nome"
#~ msgid "Maintenance Kinds"
#~ msgstr "Pianificazioni manutenzione"
#~ msgid "Next maintenance date"
#~ msgstr "Data manutenzione successiva"
#~ msgid "Preventive Maintenance (%s) - %s"
#~ msgstr "Manutenzione preventiva (%s) - %s"
#~ msgid "Start maintenance date"
#~ msgstr "Data inizio manutenzione"
#~ msgid ""
#~ "The maintenance plan %s of equipment %s has generated a request which is "
#~ "not done yet. You should either set the request as done, remove its "
#~ "maintenance kind or delete it first."
#~ msgstr ""
#~ "Il piano di manutenzione %s dell'attrezzatura %s ha generato una "
#~ "richiesta che non è ancora stata eseguita. Si deve prima impostare la "
#~ "richiesta come eseguita, eliminare la sua pianificazione o cancellarla."
#~ msgid "Unnamed %s plan (%s)"
#~ msgstr "Piano %s senza nome (%s)"
#~ msgid ""
#~ "You have multiple preventive maintenance requests on equipment %s next "
#~ "action date (%s). Please leave only one preventive request on the date of "
#~ "equipment's next action to install the module."
#~ msgstr ""
#~ "Ci sono richieste di manutenzione multiple per l'attrezzatura %s alla "
#~ "data della prossima azione (%s). Per installare il modulo, lasciare solo "
#~ "una richiesta preventiva nella data della prossima azione."

View file

@ -0,0 +1,650 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * maintenance_plan
#
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: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.report_maintenance_request_document
msgid "<strong>Instructions:</strong>"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_needaction
msgid "Action Needed"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__active
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Active"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__active
msgid "Active Kind"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_ids
msgid "Activities"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_exception_decoration
msgid "Activity Exception Decoration"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_state
msgid "Activity State"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_type_icon
msgid "Activity Type Icon"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__generate_domain
msgid "Apply on"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Archived"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_attachment_count
msgid "Attachment Count"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__company_id
msgid "Company"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__create_uid
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__create_uid
msgid "Created by"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__create_date
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__create_date
msgid "Created on"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_open_count
msgid "Current Maintenance"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__start_maintenance_date
msgid "Date from which the maintenance will we active"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__day
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__day
msgid "Day(s)"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_request_view_form
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Describe the maintenance to do..."
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__name
msgid "Description"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__display_name
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__display_name
msgid "Display Name"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__skip_notify_follower_on_requests
msgid "Do not notify to follower when creating requests?"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__duration
msgid "Duration (hours)"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__equipment_id
msgid "Equipment"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_follower_ids
msgid "Followers"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_partner_ids
msgid "Followers (Partners)"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_type_icon
msgid "Font awesome icon e.g. fa-tasks"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__interval
msgid "Frequency"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__generate_with_domain
msgid "Generate With Domain"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Generate requests for current threshold"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__has_message
msgid "Has Message"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__id
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__id
msgid "ID"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_exception_icon
msgid "Icon"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_exception_icon
msgid "Icon to indicate an exception activity."
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_needaction
msgid "If checked, new messages require your attention."
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_has_error
msgid "If checked, some messages have a delivery error."
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "If not clicked, the scheduled action will do it for you."
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Inactive"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_request_view_form
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Instructions"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__interval
msgid "Interval between each maintenance"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_is_follower
msgid "Is Follower"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Kind"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind____last_update
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan____last_update
msgid "Last Modified on"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__write_uid
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__write_uid
msgid "Last Updated by"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__write_date
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__write_date
msgid "Last Updated on"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__planning_step
msgid "Let the event automatically repeat at that interval"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__interval_step
msgid "Let the event automatically repeat at that interval step"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_main_attachment_id
msgid "Main Attachment"
msgstr ""
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid "Maintenace Equipment must belong to the equipment's company"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_count
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Maintenance"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__search_maintenance_plan_count
msgid "Maintenance All Plan Count"
msgstr ""
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_equipment
msgid "Maintenance Equipment"
msgstr ""
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_kind
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_kind_id
msgid "Maintenance Kind"
msgstr ""
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Maintenance Plan"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__maintenance_plan_count
msgid "Maintenance Plan Count"
msgstr ""
#. module: maintenance_plan
#: model:ir.ui.menu,name:maintenance_plan.menu_m_plan_form
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Maintenance Plans"
msgstr ""
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_request
msgid "Maintenance Request"
msgstr ""
#. module: maintenance_plan
#: model:ir.actions.act_window,name:maintenance_plan.hr_equipment_request_action_from_plan
msgid "Maintenance Requests"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_team_id
msgid "Maintenance Team"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__maintenance_team_required
msgid "Maintenance Team Required"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__duration
msgid "Maintenance duration in hours"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_request__maintenance_kind_id
msgid "Maintenance kind"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.constraint,message:maintenance_plan.constraint_maintenance_kind_name_uniq
msgid "Maintenance kind name already exists."
msgstr ""
#. module: maintenance_plan
#: model:ir.actions.act_window,name:maintenance_plan.maintenance_kind_action
#: model:ir.ui.menu,name:maintenance_plan.menu_maintenance_kind_configuration
msgid "Maintenance kinds"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__maintenance_plan_ids
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_request__maintenance_plan_id
msgid "Maintenance plan"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__maintenance_plan_horizon
msgid ""
"Maintenance planning horizon. Only the maintenance requests inside the "
"horizon will be created."
msgstr ""
#. module: maintenance_plan
#: model:ir.actions.act_window,name:maintenance_plan.maintenance_plan_action
#: model:ir.actions.act_window,name:maintenance_plan.maintenance_plan_equipment_action
msgid "Maintenance plans"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_ids
msgid "Maintenance requests"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_has_error
msgid "Message Delivery error"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_ids
msgid "Messages"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__month
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__month
msgid "Month(s)"
msgstr ""
#. module: maintenance_plan
#: model:maintenance.kind,name:maintenance_plan.maintenance_kind_monthly
msgid "Monthly"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__my_activity_date_deadline
msgid "My Activity Deadline"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__name
msgid "Name"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_date_deadline
msgid "Next Activity Deadline"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_summary
msgid "Next Activity Summary"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_type_id
msgid "Next Activity Type"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__next_maintenance_date
msgid "Next Maintenance Date"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__note
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_request__note
msgid "Note"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__notes
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_request_view_form
msgid "Notes"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_needaction_counter
msgid "Number of Actions"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_has_error_counter
msgid "Number of errors"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_needaction_counter
msgid "Number of messages requiring action"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "P. Horizon period"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "P. Horizon step"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Planning Horizon"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_plan_horizon
msgid "Planning Horizon period"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__planning_step
msgid "Planning Horizon step"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Plans"
msgstr ""
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/models/maintenance_equipment.py:0
#, python-format
msgid "Preventive Maintenance (%(kind)s) - %(description)s"
msgstr ""
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/tests/test_maintenance_plan.py:0
#, python-format
msgid "Preventive Maintenance (%(kind)s) - %(plan)s"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__interval_step
msgid "Recurrence"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_user_id
msgid "Responsible User"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__search_equipment_id
msgid "Search Equipment"
msgstr ""
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/models/maintenance_equipment.py:0
#, python-format
msgid ""
"Some maintenance plan's company is incompatible with the company of this "
"equipment."
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Start Date"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__start_maintenance_date
msgid "Start Maintenance Date"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Team"
msgstr ""
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid ""
"The maintenance plan %(kind)s of equipment %(eqpmnt)s has generated a "
"request which is not done yet. You should either set the request as done, "
"remove its maintenance kind or delete it first."
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_exception_decoration
msgid "Type of the exception activity on record."
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Under Maintenance"
msgstr ""
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/tests/test_maintenance_plan.py:0
#, python-format
msgid "Unnamed %(kind)s plan (%(eqpmnt)s)"
msgstr ""
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid "Unnamed %(kind)s plan (%(eqpmt)s)"
msgstr ""
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/tests/test_maintenance_plan.py:0
#, python-format
msgid "Unnamed %(void)s plan (%(eqpmnt)s)"
msgstr ""
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/models/maintenance_equipment.py:0
#, python-format
msgid "Unspecified kind"
msgstr ""
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid "Unsupported search operator"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__website_message_ids
msgid "Website Messages"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__website_message_ids
msgid "Website communication history"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__week
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__week
msgid "Week(s)"
msgstr ""
#. module: maintenance_plan
#: model:maintenance.kind,name:maintenance_plan.maintenance_kind_weekly
msgid "Weekly"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__year
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__year
msgid "Year(s)"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.constraint,message:maintenance_plan.constraint_maintenance_plan_equipment_kind_uniq
msgid ""
"You cannot define multiple times the same maintenance kind on an equipment "
"maintenance plan."
msgstr ""
#. module: maintenance_plan
#. odoo-python
#: code:addons/maintenance_plan/hooks.py:0
#, python-format
msgid ""
"You have multiple preventive maintenance requests on equipment %(name)s next"
" action date (%(date)s). Please leave only one preventive request on the "
"date of equipment's next action to install the module."
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "e.g. Calibration"
msgstr ""

View file

@ -0,0 +1,699 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * maintenance_plan
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2022-12-03 13:44+0000\n"
"Last-Translator: Pedro Castro Silva <pedrocs@exo.pt>\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 4.14.1\n"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.report_maintenance_request_document
msgid "<strong>Instructions:</strong>"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_needaction
msgid "Action Needed"
msgstr "Ação Necessária"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__active
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Active"
msgstr "Ativo"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__active
msgid "Active Kind"
msgstr "Tipo Ativo"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_ids
msgid "Activities"
msgstr "Atividades"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_exception_decoration
msgid "Activity Exception Decoration"
msgstr "Decoração da Atividade Excepcção"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_state
msgid "Activity State"
msgstr "Estado da Atividade"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_type_icon
msgid "Activity Type Icon"
msgstr "Ícone de Tipo de Atividade"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__generate_domain
msgid "Apply on"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Archived"
msgstr "Arquivado"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_attachment_count
msgid "Attachment Count"
msgstr "Número de Anexos"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__company_id
msgid "Company"
msgstr "Empresa"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__create_uid
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__create_uid
msgid "Created by"
msgstr "Criado por"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__create_date
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__create_date
msgid "Created on"
msgstr "Criado em"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_open_count
msgid "Current Maintenance"
msgstr "Manutenção Atual"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__start_maintenance_date
msgid "Date from which the maintenance will we active"
msgstr "Data a partir da qual a manutenção estará ativa"
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__day
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__day
msgid "Day(s)"
msgstr "Dia(s)"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_request_view_form
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Describe the maintenance to do..."
msgstr "Descrever a manutenção a fazer..."
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__name
msgid "Description"
msgstr "Descrição"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__display_name
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__display_name
msgid "Display Name"
msgstr "Nome a Apresentar"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__skip_notify_follower_on_requests
msgid "Do not notify to follower when creating requests?"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__duration
msgid "Duration (hours)"
msgstr "Duração (horas)"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__equipment_id
msgid "Equipment"
msgstr "Equipamento"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_follower_ids
msgid "Followers"
msgstr "Seguidores"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_partner_ids
msgid "Followers (Partners)"
msgstr "Seguidores (Parceiros)"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_type_icon
msgid "Font awesome icon e.g. fa-tasks"
msgstr "Ícone font awesome, por exemplo fa-tasks"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__interval
msgid "Frequency"
msgstr "Frequência"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__generate_with_domain
msgid "Generate With Domain"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Generate requests for current threshold"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__has_message
msgid "Has Message"
msgstr "Tem mensagem"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__id
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__id
msgid "ID"
msgstr "ID"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_exception_icon
msgid "Icon"
msgstr "Ícone"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_exception_icon
msgid "Icon to indicate an exception activity."
msgstr "Ícone para indicar uma exceção na atividade."
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_needaction
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_unread
msgid "If checked, new messages require your attention."
msgstr "Se marcado, há novas mensagens que pedem a sua atenção."
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_has_error
msgid "If checked, some messages have a delivery error."
msgstr "Se estiver marcado, algumas mensagens têm um erro de entrega."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "If not clicked, the scheduled action will do it for you."
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Inactive"
msgstr "Inativo"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_request_view_form
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Instructions"
msgstr "Instruções"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__interval
msgid "Interval between each maintenance"
msgstr "Intervalo entre cada manutenção"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_is_follower
msgid "Is Follower"
msgstr "É Seguidor"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Kind"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind____last_update
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan____last_update
msgid "Last Modified on"
msgstr "Última Modificação em"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__write_uid
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__write_uid
msgid "Last Updated by"
msgstr "Última atualização por"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__write_date
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__write_date
msgid "Last Updated on"
msgstr "Última Atualização em"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__planning_step
msgid "Let the event automatically repeat at that interval"
msgstr "Deixar o evento repetir-se automaticamente naquele intervalo"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__interval_step
msgid "Let the event automatically repeat at that interval step"
msgstr "Deixe o evento se repetir automaticamente nessa etapa de intervalo"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_main_attachment_id
msgid "Main Attachment"
msgstr "Anexo Principal"
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid "Maintenace Equipment must belong to the equipment's company"
msgstr "O equipamento de manutenção deve pertencer à empresa do equipamento"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_count
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Maintenance"
msgstr "Manutenção"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__search_maintenance_plan_count
msgid "Maintenance All Plan Count"
msgstr ""
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_equipment
msgid "Maintenance Equipment"
msgstr "Equipamento de Manutenção"
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_kind
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_kind_id
msgid "Maintenance Kind"
msgstr "Tipo de Manutenção"
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Maintenance Plan"
msgstr "Plano de Manutenção"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__maintenance_plan_count
msgid "Maintenance Plan Count"
msgstr "Núm. de Planos de Manutenção"
#. module: maintenance_plan
#: model:ir.ui.menu,name:maintenance_plan.menu_m_plan_form
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Maintenance Plans"
msgstr "Planos de Manutenção"
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_request
msgid "Maintenance Request"
msgstr "Pedido de Manutenção"
#. module: maintenance_plan
#: model:ir.actions.act_window,name:maintenance_plan.hr_equipment_request_action_from_plan
msgid "Maintenance Requests"
msgstr "Pedidos de Manutenção"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_team_id
msgid "Maintenance Team"
msgstr "Equipa de Manutenção"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__maintenance_team_required
msgid "Maintenance Team Required"
msgstr "Equipa de Manutenção necessária"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__duration
msgid "Maintenance duration in hours"
msgstr "Duração da manutenção em horas"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_request__maintenance_kind_id
msgid "Maintenance kind"
msgstr "Tipo de manutenção"
#. module: maintenance_plan
#: model:ir.model.constraint,message:maintenance_plan.constraint_maintenance_kind_name_uniq
msgid "Maintenance kind name already exists."
msgstr "O nome do tipo manutenção já existe."
#. module: maintenance_plan
#: model:ir.actions.act_window,name:maintenance_plan.maintenance_kind_action
#: model:ir.ui.menu,name:maintenance_plan.menu_maintenance_kind_configuration
msgid "Maintenance kinds"
msgstr "Tipos de manutenção"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__maintenance_plan_ids
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_request__maintenance_plan_id
msgid "Maintenance plan"
msgstr "Plano de manutenção"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__maintenance_plan_horizon
msgid ""
"Maintenance planning horizon. Only the maintenance requests inside the "
"horizon will be created."
msgstr ""
"Horizonte de planeamento da manutenção. Somente as solicitações de "
"manutenção dentro do horizonte serão criadas."
#. module: maintenance_plan
#: model:ir.actions.act_window,name:maintenance_plan.maintenance_plan_action
#: model:ir.actions.act_window,name:maintenance_plan.maintenance_plan_equipment_action
msgid "Maintenance plans"
msgstr "Planos de manutenção"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_ids
msgid "Maintenance requests"
msgstr "Pedidos de manutenção"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_has_error
msgid "Message Delivery error"
msgstr "Erro de Envio de Mensagem"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_ids
msgid "Messages"
msgstr "Mensagens"
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__month
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__month
msgid "Month(s)"
msgstr "Mes(es)"
#. module: maintenance_plan
#: model:maintenance.kind,name:maintenance_plan.maintenance_kind_monthly
msgid "Monthly"
msgstr "Mensalmente"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__my_activity_date_deadline
msgid "My Activity Deadline"
msgstr "Prazo Limite da Minha Atividade"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__name
msgid "Name"
msgstr "Nome"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_date_deadline
msgid "Next Activity Deadline"
msgstr "Prazo da Próxima Atividade"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_summary
msgid "Next Activity Summary"
msgstr "Resumo da Próxima Atividade"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_type_id
msgid "Next Activity Type"
msgstr "Tipo da Próxima Atividade"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__next_maintenance_date
msgid "Next Maintenance Date"
msgstr "Data da Próxima Manutenção"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__note
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_request__note
msgid "Note"
msgstr "Nota"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__notes
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_request_view_form
msgid "Notes"
msgstr "Notas"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_needaction_counter
msgid "Number of Actions"
msgstr "Número de Ações"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_has_error_counter
msgid "Number of errors"
msgstr "Número de erros"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_needaction_counter
msgid "Number of messages which requires an action"
msgstr "Número de mensagens que requerem uma ação"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr "Número de mensagens com um erro de entrega"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_unread_counter
msgid "Number of unread messages"
msgstr "Número de mensagens não lidas"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "P. Horizon period"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "P. Horizon step"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Planning Horizon"
msgstr "Horizonte de Planeamento"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_plan_horizon
msgid "Planning Horizon period"
msgstr "Período do horizonte de planeamento"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__planning_step
msgid "Planning Horizon step"
msgstr "Etapa do Horizonte de Planeamento"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Plans"
msgstr "Planos"
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_equipment.py:0
#, python-format
msgid "Preventive Maintenance (%(kind)s) - %(description)s"
msgstr "Manutenção Preventiva (%(kind)s) - %(description)s"
#. module: maintenance_plan
#: code:addons/maintenance_plan/tests/test_maintenance_plan.py:0
#, python-format
msgid "Preventive Maintenance (%(kind)s) - %(plan)s"
msgstr "Manutenção Preventiva (%(kind)s) - %(plan)s"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__interval_step
msgid "Recurrence"
msgstr "Recorrência"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_user_id
msgid "Responsible User"
msgstr "Utilizador Responsável"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__search_equipment_id
msgid "Search Equipment"
msgstr ""
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_equipment.py:0
#, python-format
msgid ""
"Some maintenance plan's company is incompatible with the company of this "
"equipment."
msgstr ""
"A empresa de alguns planos de manutenção é incompatível com a empresa deste "
"equipamento."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Start Date"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__start_maintenance_date
msgid "Start Maintenance Date"
msgstr "Data de Início da manutenção"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
"Estado com base nas atividades\n"
"Em atraso: A data limite foi ultrapassada\n"
"Hoje: A data da atividade é a atual\n"
"Planeado: Atividades futuras."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Team"
msgstr ""
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid ""
"The maintenance plan %(kind)s of equipment %(eqpmnt)s has generated a "
"request which is not done yet. You should either set the request as done, "
"remove its maintenance kind or delete it first."
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_exception_decoration
msgid "Type of the exception activity on record."
msgstr "Tipo de atividade de exceção no registo."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Under Maintenance"
msgstr "Em Manutenção"
#. module: maintenance_plan
#: code:addons/maintenance_plan/tests/test_maintenance_plan.py:0
#, python-format
msgid "Unnamed %(kind)s plan (%(eqpmnt)s)"
msgstr ""
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid "Unnamed %(kind)s plan (%(eqpmt)s)"
msgstr ""
#. module: maintenance_plan
#: code:addons/maintenance_plan/tests/test_maintenance_plan.py:0
#, python-format
msgid "Unnamed %(void)s plan (%(eqpmnt)s)"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_unread
msgid "Unread Messages"
msgstr "Mensagens Não Lidas"
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_unread_counter
msgid "Unread Messages Counter"
msgstr "Contador de Mensagens Não Lidas"
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_equipment.py:0
#, python-format
msgid "Unspecified kind"
msgstr "Tipo indeterminado"
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid "Unsupported search operator"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__website_message_ids
msgid "Website Messages"
msgstr "Mensagens do Website"
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__website_message_ids
msgid "Website communication history"
msgstr "Histórico de Comunicação do Website"
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__week
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__week
msgid "Week(s)"
msgstr "Semana(s)"
#. module: maintenance_plan
#: model:maintenance.kind,name:maintenance_plan.maintenance_kind_weekly
msgid "Weekly"
msgstr "Semanalmente"
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__year
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__year
msgid "Year(s)"
msgstr "Ano(s)"
#. module: maintenance_plan
#: model:ir.model.constraint,message:maintenance_plan.constraint_maintenance_plan_equipment_kind_uniq
msgid ""
"You cannot define multiple times the same maintenance kind on an equipment "
"maintenance plan."
msgstr ""
"Você não pode definir várias vezes o mesmo tipo de manutenção num plano de "
"manutenção de equipamentos."
#. module: maintenance_plan
#: code:addons/maintenance_plan/hooks.py:0
#, python-format
msgid ""
"You have multiple preventive maintenance requests on equipment %(name)s next "
"action date (%(date)s). Please leave only one preventive request on the date "
"of equipment's next action to install the module."
msgstr ""
"Tem múltiplos pedidos de manutenção preventiva para o equipamento %(name)s e "
"próxima data de ação (%(date)s). Por favor, deixe apenas uma solicitação "
"preventiva na data da próxima ação do equipamento para instalar o módulo."
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "e.g. Calibration"
msgstr "p. ex., Calibração"
#~ msgid "SMS Delivery error"
#~ msgstr "Erro de entrega de SMS"
#~ msgid "Internal notes..."
#~ msgstr "Notas Internas..."
#, python-format
#~ msgid ""
#~ "The maintenance plan %(kind)s of equipment %(plan)s has generated a "
#~ "request which is not done yet. You should either set the request as done, "
#~ "remove its maintenance kind or delete it first."
#~ msgstr ""
#~ "O plano de manutenção %(kind)s do equipamento %(plan)s gerou um pedido "
#~ "que ainda não foi efetuado. Deve definir o pedido como feito, remover o "
#~ "seu tipo de manutenção ou eliminá-lo primeiro."
#, python-format
#~ msgid "Unnamed %(kind)s plan (%(equipment)s)"
#~ msgstr "Plano %(kind)s sem nome (%(equipment)s)"
#, python-format
#~ msgid "Unnamed %(kind)s plan (%(plan)s)"
#~ msgstr "Plano %(kind)s sem nome (%(plan)s)"
#, python-format
#~ msgid "Unnamed %(nothing)s plan (%(equipment)s)"
#~ msgstr "Plano %(nothing)s sem nome (%(equipment)s)"

View file

@ -0,0 +1,656 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * maintenance_plan
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.report_maintenance_request_document
msgid "<strong>Instructions:</strong>"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_needaction
msgid "Action Needed"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__active
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Active"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__active
msgid "Active Kind"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_ids
msgid "Activities"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_exception_decoration
msgid "Activity Exception Decoration"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_state
msgid "Activity State"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_type_icon
msgid "Activity Type Icon"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__generate_domain
msgid "Apply on"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Archived"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_attachment_count
msgid "Attachment Count"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__company_id
msgid "Company"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__create_uid
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__create_uid
msgid "Created by"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__create_date
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__create_date
msgid "Created on"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_open_count
msgid "Current Maintenance"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__start_maintenance_date
msgid "Date from which the maintenance will we active"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__day
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__day
msgid "Day(s)"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_request_view_form
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Describe the maintenance to do..."
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__name
msgid "Description"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__display_name
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__display_name
msgid "Display Name"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__skip_notify_follower_on_requests
msgid "Do not notify to follower when creating requests?"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__duration
msgid "Duration (hours)"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__equipment_id
msgid "Equipment"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_follower_ids
msgid "Followers"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_partner_ids
msgid "Followers (Partners)"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_type_icon
msgid "Font awesome icon e.g. fa-tasks"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__interval
msgid "Frequency"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__generate_with_domain
msgid "Generate With Domain"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Generate requests for current threshold"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__has_message
msgid "Has Message"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__id
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__id
msgid "ID"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_exception_icon
msgid "Icon"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_exception_icon
msgid "Icon to indicate an exception activity."
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_needaction
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_unread
msgid "If checked, new messages require your attention."
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_has_error
msgid "If checked, some messages have a delivery error."
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "If not clicked, the scheduled action will do it for you."
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Inactive"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_request_view_form
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Instructions"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__interval
msgid "Interval between each maintenance"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_is_follower
msgid "Is Follower"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Kind"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind____last_update
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan____last_update
msgid "Last Modified on"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__write_uid
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__write_uid
msgid "Last Updated by"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__write_date
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__write_date
msgid "Last Updated on"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__planning_step
msgid "Let the event automatically repeat at that interval"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__interval_step
msgid "Let the event automatically repeat at that interval step"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_main_attachment_id
msgid "Main Attachment"
msgstr ""
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid "Maintenace Equipment must belong to the equipment's company"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_count
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Maintenance"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__search_maintenance_plan_count
msgid "Maintenance All Plan Count"
msgstr ""
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_equipment
msgid "Maintenance Equipment"
msgstr ""
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_kind
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_kind_id
msgid "Maintenance Kind"
msgstr ""
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Maintenance Plan"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__maintenance_plan_count
msgid "Maintenance Plan Count"
msgstr ""
#. module: maintenance_plan
#: model:ir.ui.menu,name:maintenance_plan.menu_m_plan_form
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Maintenance Plans"
msgstr ""
#. module: maintenance_plan
#: model:ir.model,name:maintenance_plan.model_maintenance_request
msgid "Maintenance Request"
msgstr ""
#. module: maintenance_plan
#: model:ir.actions.act_window,name:maintenance_plan.hr_equipment_request_action_from_plan
msgid "Maintenance Requests"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_team_id
msgid "Maintenance Team"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__maintenance_team_required
msgid "Maintenance Team Required"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__duration
msgid "Maintenance duration in hours"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_request__maintenance_kind_id
msgid "Maintenance kind"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.constraint,message:maintenance_plan.constraint_maintenance_kind_name_uniq
msgid "Maintenance kind name already exists."
msgstr ""
#. module: maintenance_plan
#: model:ir.actions.act_window,name:maintenance_plan.maintenance_kind_action
#: model:ir.ui.menu,name:maintenance_plan.menu_maintenance_kind_configuration
msgid "Maintenance kinds"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__maintenance_plan_ids
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_request__maintenance_plan_id
msgid "Maintenance plan"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__maintenance_plan_horizon
msgid ""
"Maintenance planning horizon. Only the maintenance requests inside the "
"horizon will be created."
msgstr ""
#. module: maintenance_plan
#: model:ir.actions.act_window,name:maintenance_plan.maintenance_plan_action
#: model:ir.actions.act_window,name:maintenance_plan.maintenance_plan_equipment_action
msgid "Maintenance plans"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_ids
msgid "Maintenance requests"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_has_error
msgid "Message Delivery error"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_ids
msgid "Messages"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__month
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__month
msgid "Month(s)"
msgstr ""
#. module: maintenance_plan
#: model:maintenance.kind,name:maintenance_plan.maintenance_kind_monthly
msgid "Monthly"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__my_activity_date_deadline
msgid "My Activity Deadline"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_kind__name
msgid "Name"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_date_deadline
msgid "Next Activity Deadline"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_summary
msgid "Next Activity Summary"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_type_id
msgid "Next Activity Type"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__next_maintenance_date
msgid "Next Maintenance Date"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__note
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_request__note
msgid "Note"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_equipment__notes
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_request_view_form
msgid "Notes"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_needaction_counter
msgid "Number of Actions"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_has_error_counter
msgid "Number of errors"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_needaction_counter
msgid "Number of messages which requires an action"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_has_error_counter
msgid "Number of messages with delivery error"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__message_unread_counter
msgid "Number of unread messages"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "P. Horizon period"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "P. Horizon step"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "Planning Horizon"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__maintenance_plan_horizon
msgid "Planning Horizon period"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__planning_step
msgid "Planning Horizon step"
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Plans"
msgstr ""
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_equipment.py:0
#, python-format
msgid "Preventive Maintenance (%(kind)s) - %(description)s"
msgstr ""
#. module: maintenance_plan
#: code:addons/maintenance_plan/tests/test_maintenance_plan.py:0
#, python-format
msgid "Preventive Maintenance (%(kind)s) - %(plan)s"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__interval_step
msgid "Recurrence"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__activity_user_id
msgid "Responsible User"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__search_equipment_id
msgid "Search Equipment"
msgstr ""
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_equipment.py:0
#, python-format
msgid ""
"Some maintenance plan's company is incompatible with the company of this "
"equipment."
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Start Date"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__start_maintenance_date
msgid "Start Maintenance Date"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_state
msgid ""
"Status based on activities\n"
"Overdue: Due date is already passed\n"
"Today: Activity date is today\n"
"Planned: Future activities."
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.hr_equipment_view_form
msgid "Team"
msgstr ""
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid ""
"The maintenance plan %(kind)s of equipment %(eqpmnt)s has generated a "
"request which is not done yet. You should either set the request as done, "
"remove its maintenance kind or delete it first."
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__activity_exception_decoration
msgid "Type of the exception activity on record."
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_search
msgid "Under Maintenance"
msgstr ""
#. module: maintenance_plan
#: code:addons/maintenance_plan/tests/test_maintenance_plan.py:0
#, python-format
msgid "Unnamed %(kind)s plan (%(eqpmnt)s)"
msgstr ""
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid "Unnamed %(kind)s plan (%(eqpmt)s)"
msgstr ""
#. module: maintenance_plan
#: code:addons/maintenance_plan/tests/test_maintenance_plan.py:0
#, python-format
msgid "Unnamed %(void)s plan (%(eqpmnt)s)"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_unread
msgid "Unread Messages"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__message_unread_counter
msgid "Unread Messages Counter"
msgstr ""
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_equipment.py:0
#, python-format
msgid "Unspecified kind"
msgstr ""
#. module: maintenance_plan
#: code:addons/maintenance_plan/models/maintenance_plan.py:0
#, python-format
msgid "Unsupported search operator"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,field_description:maintenance_plan.field_maintenance_plan__website_message_ids
msgid "Website Messages"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields,help:maintenance_plan.field_maintenance_plan__website_message_ids
msgid "Website communication history"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__week
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__week
msgid "Week(s)"
msgstr ""
#. module: maintenance_plan
#: model:maintenance.kind,name:maintenance_plan.maintenance_kind_weekly
msgid "Weekly"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__interval_step__year
#: model:ir.model.fields.selection,name:maintenance_plan.selection__maintenance_plan__planning_step__year
msgid "Year(s)"
msgstr ""
#. module: maintenance_plan
#: model:ir.model.constraint,message:maintenance_plan.constraint_maintenance_plan_equipment_kind_uniq
msgid ""
"You cannot define multiple times the same maintenance kind on an equipment "
"maintenance plan."
msgstr ""
#. module: maintenance_plan
#: code:addons/maintenance_plan/hooks.py:0
#, python-format
msgid ""
"You have multiple preventive maintenance requests on equipment %(name)s next "
"action date (%(date)s). Please leave only one preventive request on the date "
"of equipment's next action to install the module."
msgstr ""
#. module: maintenance_plan
#: model_terms:ir.ui.view,arch_db:maintenance_plan.maintenance_plan_view_form
msgid "e.g. Calibration"
msgstr ""

View file

@ -0,0 +1,4 @@
from . import maintenance_kind
from . import maintenance_plan
from . import maintenance_equipment
from . import maintenance_request

View file

@ -0,0 +1,200 @@
# Copyright 2017 Camptocamp SA
# Copyright 2019-20 ForgeFlow S.L. (https://www.forgeflow.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
class MaintenanceEquipment(models.Model):
_inherit = "maintenance.equipment"
maintenance_plan_ids = fields.One2many(
string="Maintenance plan",
comodel_name="maintenance.plan",
inverse_name="equipment_id",
)
maintenance_plan_count = fields.Integer(
compute="_compute_maintenance_plan_count",
store=True,
)
search_maintenance_plan_count = fields.Integer(
compute="_compute_search_maintenance_plan_count",
string="Maintenance All Plan Count",
)
maintenance_team_required = fields.Boolean(compute="_compute_team_required")
notes = fields.Text()
@api.depends("maintenance_plan_ids", "maintenance_plan_ids.active")
def _compute_maintenance_plan_count(self):
for equipment in self:
equipment.maintenance_plan_count = len(
equipment.with_context(active_test=False).maintenance_plan_ids
)
@api.depends("maintenance_plan_ids")
def _compute_search_maintenance_plan_count(self):
for equipment in self:
equipment.search_maintenance_plan_count = (
self.env["maintenance.plan"]
.with_context(active_test=False)
.search_count([("search_equipment_id", "=", equipment.id)])
)
@api.depends("maintenance_plan_ids")
def _compute_team_required(self):
for equipment in self:
equipment.maintenance_team_required = (
len(
equipment.maintenance_plan_ids.filtered(
lambda r: not r.maintenance_team_id
)
)
>= 1
)
@api.constrains("company_id", "maintenance_plan_ids")
def _check_company_id(self):
for rec in self:
if rec.company_id and not all(
rec.company_id == p.company_id for p in rec.maintenance_plan_ids
):
raise ValidationError(
_(
"Some maintenance plan's company is incompatible with "
"the company of this equipment."
)
)
def _prepare_requests_from_plan(self, maintenance_plan, next_maintenance_date):
if self:
return self._prepare_request_from_plan(
maintenance_plan, next_maintenance_date
)
equipments = maintenance_plan._get_maintenance_equipments()
return [
equipment._prepare_request_from_plan(
maintenance_plan, next_maintenance_date
)
for equipment in equipments
]
def _prepare_request_from_plan(self, maintenance_plan, next_maintenance_date):
team_id = maintenance_plan.maintenance_team_id.id or self.maintenance_team_id.id
request_model = self.env["maintenance.request"]
if not team_id:
team_id = request_model._get_default_team_id()
description = self.name if self else maintenance_plan.name
kind = maintenance_plan.maintenance_kind_id.name or _("Unspecified kind")
name = _(
"Preventive Maintenance (%(kind)s) - %(description)s",
kind=kind,
description=description,
)
data = {
"name": name,
"request_date": next_maintenance_date,
"schedule_date": next_maintenance_date,
"category_id": self.category_id.id,
"equipment_id": self.id,
"maintenance_type": "preventive",
"owner_user_id": self.owner_user_id.id or self.env.user.id,
"user_id": self.technician_user_id.id,
"maintenance_team_id": team_id,
"maintenance_kind_id": maintenance_plan.maintenance_kind_id.id,
"maintenance_plan_id": maintenance_plan.id,
"duration": maintenance_plan.duration,
"note": maintenance_plan.note,
"company_id": maintenance_plan.company_id.id or self.company_id.id,
}
# This field comes from maintenance_timesheet for avoiding a glue module
if "planned_hours" in request_model._fields:
data["planned_hours"] = maintenance_plan.duration
return data
def _create_new_request(self, mtn_plan):
# Compute horizon date adding to today the planning horizon
horizon_date = fields.Date.today() + mtn_plan.get_relativedelta(
mtn_plan.maintenance_plan_horizon, mtn_plan.planning_step or "year"
)
# We check maintenance request already created and create until
# planning horizon is met
start_maintenance_date_plan = mtn_plan.start_maintenance_date
furthest_maintenance_request = self.env["maintenance.request"].search(
[
("maintenance_plan_id", "=", mtn_plan.id),
("request_date", ">=", start_maintenance_date_plan),
],
order="request_date desc",
limit=1,
)
if furthest_maintenance_request:
next_maintenance_date = (
furthest_maintenance_request.request_date
+ mtn_plan.get_relativedelta(
mtn_plan.interval, mtn_plan.interval_step or "year"
)
)
else:
next_maintenance_date = mtn_plan.next_maintenance_date
skip_notify_follower = mtn_plan.skip_notify_follower_on_requests
# Skip assigned mail + Activity mail
request_model = self.env["maintenance.request"].with_context(
mail_activity_quick_update=skip_notify_follower,
mail_auto_subscribe_no_notify=skip_notify_follower,
)
requests = request_model
# Create maintenance request until we reach planning horizon
while next_maintenance_date <= horizon_date:
if next_maintenance_date >= fields.Date.today():
vals = self._prepare_requests_from_plan(mtn_plan, next_maintenance_date)
requests |= request_model.create(vals)
next_maintenance_date = next_maintenance_date + mtn_plan.get_relativedelta(
mtn_plan.interval, mtn_plan.interval_step or "year"
)
return requests
@api.model
def _cron_generate_requests(self):
"""
Generates maintenance request on the next_maintenance_date or
today if none exists
"""
for plan in (
self.env["maintenance.plan"]
.sudo()
.search([("interval", ">", 0)])
.filtered(lambda x: True if not x.equipment_id else x.equipment_id.active)
):
equipment = plan.equipment_id
equipment._create_new_request(plan)
@api.depends(
"maintenance_plan_ids.next_maintenance_date", "maintenance_ids.request_date"
)
def _compute_next_maintenance(self):
"""Redefine the function to display next_action_date in kanban view"""
for equipment in self:
next_plan_dates = equipment.maintenance_plan_ids.mapped(
"next_maintenance_date"
)
next_unplanned_dates = (
self.env["maintenance.request"]
.search(
[
("equipment_id", "=", equipment.id),
("maintenance_kind_id", "=", None),
("request_date", ">", fields.Date.context_today(self)),
("stage_id.done", "!=", True),
("close_date", "=", False),
]
)
.mapped("request_date")
)
if len(next_plan_dates + next_unplanned_dates) <= 0:
equipment.next_action_date = None
else:
equipment.next_action_date = min(next_plan_dates + next_unplanned_dates)

View file

@ -0,0 +1,18 @@
# Copyright 2017 Camptocamp SA
# Copyright 2019 ForgeFlow S.L. (https://www.forgeflow.com).
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class MaintenanceKind(models.Model):
_name = "maintenance.kind"
_description = "Maintenance Kind"
name = fields.Char(required=True, translate=True)
active = fields.Boolean("Active Kind", required=True, default=True)
_sql_constraints = [
("name_uniq", "unique (name)", "Maintenance kind name already exists.")
]

View file

@ -0,0 +1,261 @@
# Copyright 2017 Camptocamp SA
# Copyright 2019-20 ForgeFlow S.L. (https://www.forgeflow.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from dateutil.relativedelta import relativedelta
from odoo import _, api, fields, models
from odoo.exceptions import UserError, ValidationError
from odoo.tools import safe_eval
class MaintenancePlan(models.Model):
_name = "maintenance.plan"
_description = "Maintenance Plan"
_inherit = ["mail.thread", "mail.activity.mixin"]
name = fields.Char("Description")
active = fields.Boolean(default=True)
equipment_id = fields.Many2one(
string="Equipment", comodel_name="maintenance.equipment", ondelete="cascade"
)
company_id = fields.Many2one(
comodel_name="res.company",
default=lambda self: self.env.company,
)
maintenance_kind_id = fields.Many2one(
string="Maintenance Kind", comodel_name="maintenance.kind", ondelete="restrict"
)
interval = fields.Integer(
string="Frequency", default=1, help="Interval between each maintenance"
)
interval_step = fields.Selection(
[
("day", "Day(s)"),
("week", "Week(s)"),
("month", "Month(s)"),
("year", "Year(s)"),
],
string="Recurrence",
default="year",
help="Let the event automatically repeat at that interval step",
)
duration = fields.Float(
string="Duration (hours)", help="Maintenance duration in hours"
)
start_maintenance_date = fields.Date(
default=fields.Date.context_today,
help="Date from which the maintenance will we active",
)
next_maintenance_date = fields.Date(compute="_compute_next_maintenance", store=True)
maintenance_plan_horizon = fields.Integer(
string="Planning Horizon period",
default=1,
help="Maintenance planning horizon. Only the maintenance requests "
"inside the horizon will be created.",
)
planning_step = fields.Selection(
[
("day", "Day(s)"),
("week", "Week(s)"),
("month", "Month(s)"),
("year", "Year(s)"),
],
string="Planning Horizon step",
default="year",
help="Let the event automatically repeat at that interval",
)
note = fields.Html()
maintenance_ids = fields.One2many(
"maintenance.request", "maintenance_plan_id", string="Maintenance requests"
)
maintenance_count = fields.Integer(
compute="_compute_maintenance_count", string="Maintenance", store=True
)
maintenance_open_count = fields.Integer(
compute="_compute_maintenance_count", string="Current Maintenance", store=True
)
maintenance_team_id = fields.Many2one("maintenance.team")
skip_notify_follower_on_requests = fields.Boolean(
string="Do not notify to follower when creating requests?", default=True
)
generate_with_domain = fields.Boolean()
generate_domain = fields.Char(string="Apply on")
search_equipment_id = fields.Many2one(
comodel_name="maintenance.equipment",
compute="_compute_search_equipment",
search="_search_search_equipment",
)
@api.model
def _search_search_equipment(self, operator, value):
if operator != "=" or (not value and not isinstance(value, models.NewId)):
raise ValueError(_("Unsupported search operator"))
plans = self.search([("generate_with_domain", "=", True)])
plan_ids = []
equipment = self.env["maintenance.equipment"].browse(value)
for plan in plans:
if equipment.filtered_domain(
safe_eval.safe_eval(
plan.generate_domain or "[]", plan._get_eval_context()
)
):
plan_ids.append(plan.id)
return ["|", ("equipment_id", "=", value), ("id", "in", plan_ids)]
@api.depends("equipment_id")
def _compute_search_equipment(self):
for record in self:
record.search_equipment_id = record.equipment_id
def _get_eval_context(self):
"""Prepare the context used when evaluating python code
:returns: dict -- evaluation context given to safe_eval
"""
return {
"datetime": safe_eval.datetime,
"dateutil": safe_eval.dateutil,
"time": safe_eval.time,
}
def name_get(self):
result = []
for plan in self:
result.append(
(
plan.id,
plan.name
or _(
"Unnamed %(kind)s plan (%(eqpmt)s)",
kind=plan.maintenance_kind_id.name or "",
eqpmt=plan.equipment_id.name,
),
)
)
return result
@api.depends("maintenance_ids.stage_id.done")
def _compute_maintenance_count(self):
for equipment in self:
equipment.maintenance_count = len(equipment.maintenance_ids)
equipment.maintenance_open_count = len(
equipment.maintenance_ids.filtered(lambda x: not x.stage_id.done)
)
def get_relativedelta(self, interval, step):
if step == "day":
return relativedelta(days=interval)
elif step == "week":
return relativedelta(weeks=interval)
elif step == "month":
return relativedelta(months=interval)
elif step == "year":
return relativedelta(years=interval)
@api.depends(
"interval",
"interval_step",
"start_maintenance_date",
"maintenance_ids.request_date",
"maintenance_ids.close_date",
)
def _compute_next_maintenance(self):
for plan in self.filtered(lambda x: x.interval > 0):
interval_timedelta = plan.get_relativedelta(
plan.interval, plan.interval_step
)
next_maintenance_todo = self.env["maintenance.request"].search(
[
("maintenance_plan_id", "=", plan.id),
("stage_id.done", "!=", True),
("close_date", "=", False),
("request_date", ">=", plan.start_maintenance_date),
],
order="request_date asc",
limit=1,
)
if next_maintenance_todo:
plan.next_maintenance_date = next_maintenance_todo.request_date
else:
last_maintenance_done = self.env["maintenance.request"].search(
[
("maintenance_plan_id", "=", plan.id),
("request_date", ">=", plan.start_maintenance_date),
],
order="request_date desc",
limit=1,
)
if last_maintenance_done:
plan.next_maintenance_date = (
last_maintenance_done.request_date + interval_timedelta
)
else:
next_date = plan.start_maintenance_date
while next_date < fields.Date.today():
next_date = next_date + interval_timedelta
plan.next_maintenance_date = next_date
@api.constrains("company_id", "equipment_id")
def _check_company_id(self):
for rec in self:
if (
rec.equipment_id.company_id
and rec.company_id != rec.equipment_id.company_id
):
raise ValidationError(
_("Maintenace Equipment must belong to the equipment's company")
)
def unlink(self):
"""Restrict deletion of maintenance plan should there be maintenance
requests of this kind which are not done for its equipment"""
for plan in self:
request = plan.equipment_id.mapped("maintenance_ids").filtered(
lambda r: (
r.maintenance_kind_id == plan.maintenance_kind_id
and not r.stage_id.done
and r.maintenance_type == "preventive"
)
)
if request:
raise UserError(
_(
"The maintenance plan %(kind)s of equipment %(eqpmnt)s "
"has generated a request which is not done "
"yet. You should either set the request as "
"done, remove its maintenance kind or "
"delete it first.",
kind=plan.maintenance_kind_id.name,
eqpmnt=plan.equipment_id.name,
)
)
return super().unlink()
_sql_constraints = [
(
"equipment_kind_uniq",
"unique (equipment_id, maintenance_kind_id)",
"You cannot define multiple times the same maintenance kind on an "
"equipment maintenance plan.",
)
]
def button_manual_request_generation(self):
"""Call the same method that the cron for generating manually the maintenance
requests."""
for plan in self:
equipment = plan.equipment_id
equipment._create_new_request(plan)
def _get_maintenance_equipments(self):
self.ensure_one()
if self.generate_with_domain and not self.equipment_id:
return self.env["maintenance.equipment"].search(
safe_eval.safe_eval(
self.generate_domain or "[]", self._get_eval_context()
)
)
return [self.equipment_id]

View file

@ -0,0 +1,19 @@
# Copyright 2017 Camptocamp SA
# Copyright 2019 ForgeFlow S.L. (https://www.forgeflow.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class MaintenanceRequest(models.Model):
_inherit = "maintenance.request"
maintenance_kind_id = fields.Many2one(
string="Maintenance kind", comodel_name="maintenance.kind", ondelete="restrict"
)
maintenance_plan_id = fields.Many2one(
string="Maintenance plan", comodel_name="maintenance.plan", ondelete="restrict"
)
note = fields.Html()

View file

@ -0,0 +1,8 @@
* Akim Juillerat <akim.juillerat@camptocamp.com>
* Matteo Mazzoni <matteo@appcademy.tech>
* David Alonso <david.alonso@solvos.es>
* Adrià Gil Sorribes <adria.gil@forgeflow.com>
* Jordi Ballester Alomar <jordi.ballester@forgeflow.com>
* Lois Rilo <lois.rilo@forgeflow.com>
* Enric Tobella <enric.tobella@dixmit.com>
* Alexei Rivera <arivera@archeti.com>

View file

@ -0,0 +1,2 @@
This module extends the functionality of Odoo Maintenance module by allowing
an equipment to have different preventive maintenance kinds.

View file

@ -0,0 +1,14 @@
Install the module.
Should you already use the maintenance module and have equipments with field
'Preventive Maintenance Frequency' defined, a new maintenance plan will be
automatically created on these equipments with maintenance kind 'Install'.
Moreover if a Request of type 'preventive' exists, whose stage isn't marked as
'Request done', and has a Request Date matching the equipment's
'Next Preventive Maintenance', the request will be updated with the
'Install' maintenance kind.
Make sure you don't have multiple 'preventive' requests at a stage which isn't
marked as 'Request done' and on the same 'Request date' as the equipment or
the module installation will fail with a User Error.

View file

@ -0,0 +1,28 @@
Instead of defining a period and duration for only one preventive maintenance
per equipment, you can define multiple preventive maintenance kind for each
equipment.
Maintenance Kinds have to be defined through the configuration menu. Their name
have to be unique and can be set as active or inactive, should these not be
used anymore.
On any equipment over the maintenance tab, the maintenance plan be accessible,
allowing to add different maintenance kind with their
own frequency and duration. The next maintenance date will then be computed
automatically according to the start's date and the frequency defined, but the
maintenance request won't be created automatically as is the case in Odoo's
Maintenance module. In the plan there's also a field allowing the user to set the
maintenance horizon, insert the instructions to follow on the maintenance that
will be forwarded to the maintenance request generated from the plan.
This module uses the original Cron job of Odoo's Maintenance module to generate
maintenance requests. To do so, it takes into account the planning horizon and
generates all maintenance requests whose schedule date would fall inside that
planning horizon. Therefore, the maintenance manager can have a proper planning
of how many maintenance requests are programming for the future. Leaving planning
horizon to 0 will only create those maintenance request that are scheduled for
today.
We can also create maintenance requests from a plan using a domain for selecting the equipments.
This way, we might have a single plan that will generate all the requests.
In order to use it, we need to mark the `Generate with Domain` field.

View file

@ -0,0 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_maintenance_kind_user,access_maintenance_kind_user,model_maintenance_kind,base.group_user,1,0,0,0
access_maintenance_plan_user,access_maintenance_plan_user,model_maintenance_plan,base.group_user,1,0,0,0
access_maintenance_kind_manager,access_maintenance_kind_manager,model_maintenance_kind,maintenance.group_equipment_manager,1,1,1,1
access_maintenance_plan_manager,access_maintenance_plan_manager,model_maintenance_plan,maintenance.group_equipment_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_maintenance_kind_user access_maintenance_kind_user model_maintenance_kind base.group_user 1 0 0 0
3 access_maintenance_plan_user access_maintenance_plan_user model_maintenance_plan base.group_user 1 0 0 0
4 access_maintenance_kind_manager access_maintenance_kind_manager model_maintenance_kind maintenance.group_equipment_manager 1 1 1 1
5 access_maintenance_plan_manager access_maintenance_plan_manager model_maintenance_plan maintenance.group_equipment_manager 1 1 1 1

View file

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="0">
<record id="maintenance_plan_comp_rule" model="ir.rule">
<field name="name">Maintenance plan multi-company</field>
<field name="model_id" ref="model_maintenance_plan" />
<field name="global" eval="True" />
<field
name="domain_force"
>['|',('company_id','=',False),('company_id', 'in', company_ids)]</field>
</record>
<record id="maintenance_plan_rule_user" model="ir.rule">
<field
name="name"
>Users are allowed to access plan from equipments they follow</field>
<field name="model_id" ref="model_maintenance_plan" />
<field
name="domain_force"
>[('equipment_id.message_partner_ids', 'in', [user.partner_id.id])]</field>
<field name="groups" eval="[(4, ref('base.group_user'))]" />
</record>
<record id="maintenance_plan_rule_admin_user" model="ir.rule">
<field name="name">Administrator of maintenance plans</field>
<field name="model_id" ref="model_maintenance_plan" />
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('maintenance.group_equipment_manager'))]" />
</record>
</odoo>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,473 @@
<?xml version="1.0" encoding="utf-8"?>
<!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>Maintenance Plan</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
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: grey; } /* 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 {
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="maintenance-plan">
<h1 class="title">Maintenance Plan</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:51d1395956daf1de19f24abe40f89528841450822d90006b04a75e26f1913828
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<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/maintenance/tree/16.0/maintenance_plan"><img alt="OCA/maintenance" src="https://img.shields.io/badge/github-OCA%2Fmaintenance-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/maintenance-16-0/maintenance-16-0-maintenance_plan"><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/maintenance&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 module extends the functionality of Odoo Maintenance module by allowing
an equipment to have different preventive maintenance kinds.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#installation" id="toc-entry-1">Installation</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-3">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-4">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-5">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-6">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="installation">
<h1><a class="toc-backref" href="#toc-entry-1">Installation</a></h1>
<p>Install the module.</p>
<p>Should you already use the maintenance module and have equipments with field
Preventive Maintenance Frequency defined, a new maintenance plan will be
automatically created on these equipments with maintenance kind Install.</p>
<p>Moreover if a Request of type preventive exists, whose stage isnt marked as
Request done, and has a Request Date matching the equipments
Next Preventive Maintenance, the request will be updated with the
Install maintenance kind.</p>
<p>Make sure you dont have multiple preventive requests at a stage which isnt
marked as Request done and on the same Request date as the equipment or
the module installation will fail with a User Error.</p>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
<p>Instead of defining a period and duration for only one preventive maintenance
per equipment, you can define multiple preventive maintenance kind for each
equipment.</p>
<p>Maintenance Kinds have to be defined through the configuration menu. Their name
have to be unique and can be set as active or inactive, should these not be
used anymore.</p>
<p>On any equipment over the maintenance tab, the maintenance plan be accessible,
allowing to add different maintenance kind with their
own frequency and duration. The next maintenance date will then be computed
automatically according to the starts date and the frequency defined, but the
maintenance request wont be created automatically as is the case in Odoos
Maintenance module. In the plan theres also a field allowing the user to set the
maintenance horizon, insert the instructions to follow on the maintenance that
will be forwarded to the maintenance request generated from the plan.</p>
<p>This module uses the original Cron job of Odoos Maintenance module to generate
maintenance requests. To do so, it takes into account the planning horizon and
generates all maintenance requests whose schedule date would fall inside that
planning horizon. Therefore, the maintenance manager can have a proper planning
of how many maintenance requests are programming for the future. Leaving planning
horizon to 0 will only create those maintenance request that are scheduled for
today.</p>
<p>We can also create maintenance requests from a plan using a domain for selecting the equipments.
This way, we might have a single plan that will generate all the requests.
In order to use it, we need to mark the <cite>Generate with Domain</cite> field.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/maintenance/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/maintenance/issues/new?body=module:%20maintenance_plan%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-4">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-5">Authors</a></h2>
<ul class="simple">
<li>Camptocamp SA</li>
<li>ForgeFlow</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-6">Contributors</a></h2>
<ul class="simple">
<li>Akim Juillerat &lt;<a class="reference external" href="mailto:akim.juillerat&#64;camptocamp.com">akim.juillerat&#64;camptocamp.com</a>&gt;</li>
<li>Matteo Mazzoni &lt;<a class="reference external" href="mailto:matteo&#64;appcademy.tech">matteo&#64;appcademy.tech</a>&gt;</li>
<li>David Alonso &lt;<a class="reference external" href="mailto:david.alonso&#64;solvos.es">david.alonso&#64;solvos.es</a>&gt;</li>
<li>Adrià Gil Sorribes &lt;<a class="reference external" href="mailto:adria.gil&#64;forgeflow.com">adria.gil&#64;forgeflow.com</a>&gt;</li>
<li>Jordi Ballester Alomar &lt;<a class="reference external" href="mailto:jordi.ballester&#64;forgeflow.com">jordi.ballester&#64;forgeflow.com</a>&gt;</li>
<li>Lois Rilo &lt;<a class="reference external" href="mailto:lois.rilo&#64;forgeflow.com">lois.rilo&#64;forgeflow.com</a>&gt;</li>
<li>Enric Tobella &lt;<a class="reference external" href="mailto:enric.tobella&#64;dixmit.com">enric.tobella&#64;dixmit.com</a>&gt;</li>
<li>Alexei Rivera &lt;<a class="reference external" href="mailto:arivera&#64;archeti.com">arivera&#64;archeti.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-7">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/maintenance/tree/16.0/maintenance_plan">OCA/maintenance</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,2 @@
from . import test_maintenance_plan
from . import test_maintenance_plan_domain

View file

@ -0,0 +1,83 @@
# Copyright 2017 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from freezegun import freeze_time
import odoo.tests.common as test_common
class TestMaintenancePlanBase(test_common.TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
# HACK https://github.com/spulec/freezegun/issues/485
freezer = freeze_time("2023-01-25 15:30:00")
freezer.__enter__()
cls.addClassCleanup(freezer.__exit__)
# Remove this variable in v16 and put instead:
# from odoo.addons.base.tests.common import DISABLED_MAIL_CONTEXT
DISABLED_MAIL_CONTEXT = {
"tracking_disable": True,
"mail_create_nolog": True,
"mail_create_nosubscribe": True,
"mail_notrack": True,
"no_reset_password": True,
}
cls.env = cls.env(context=dict(cls.env.context, **DISABLED_MAIL_CONTEXT))
cls.maintenance_request_obj = cls.env["maintenance.request"]
cls.maintenance_plan_obj = cls.env["maintenance.plan"]
cls.maintenance_equipment_obj = cls.env["maintenance.equipment"]
cls.cron = cls.env.ref("maintenance.maintenance_requests_cron")
cls.weekly_kind = cls.env.ref("maintenance_plan.maintenance_kind_weekly")
cls.done_stage = cls.env.ref("maintenance.stage_3")
cls.equipment_1 = cls.maintenance_equipment_obj.create({"name": "Laptop 1"})
cls.maintenance_plan_1 = cls.maintenance_plan_obj.create(
{
"equipment_id": cls.equipment_1.id,
"start_maintenance_date": "2023-01-25",
"interval": 1,
"interval_step": "month",
"maintenance_plan_horizon": 2,
"planning_step": "month",
}
)
cls.maintenance_plan_2 = cls.maintenance_plan_obj.create(
{
"equipment_id": cls.equipment_1.id,
"maintenance_kind_id": cls.weekly_kind.id,
"interval": 1,
"interval_step": "week",
"maintenance_plan_horizon": 2,
"planning_step": "month",
}
)
cls.maintenance_plan_3 = cls.maintenance_plan_obj.create(
{
"name": "My custom plan",
"equipment_id": cls.equipment_1.id,
"interval": 2,
"interval_step": "week",
"maintenance_plan_horizon": 2,
"planning_step": "month",
}
)
cls.maintenance_plan_4 = cls.maintenance_plan_obj.create(
{
"name": "Plan without equipment",
"maintenance_kind_id": cls.weekly_kind.id,
"interval": 1,
"interval_step": "week",
"maintenance_plan_horizon": 2,
"planning_step": "month",
}
)
cls.maintenance_plan_5 = cls.maintenance_plan_obj.create(
{
"start_maintenance_date": "2023-01-25",
"interval": 1,
"interval_step": "month",
"maintenance_plan_horizon": 2,
"planning_step": "month",
}
)
cls.report_obj = cls.env["ir.actions.report"]

View file

@ -0,0 +1,231 @@
# Copyright 2017 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from dateutil.relativedelta import relativedelta
from odoo import _, fields
from .common import TestMaintenancePlanBase
class TestMaintenancePlan(TestMaintenancePlanBase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.today_date = fields.Date.from_string("2023-01-25")
def test_name_get(self):
self.assertEqual(
self.maintenance_plan_1.name_get()[0][1],
_(
"Unnamed %(void)s plan (%(eqpmnt)s)",
void="",
eqpmnt=self.maintenance_plan_1.equipment_id.name,
),
)
self.assertEqual(
self.maintenance_plan_2.name_get()[0][1],
_(
"Unnamed %(kind)s plan (%(eqpmnt)s)",
kind=self.maintenance_plan_2.maintenance_kind_id.name,
eqpmnt=self.maintenance_plan_2.equipment_id.name,
),
)
self.assertEqual(
self.maintenance_plan_3.name_get()[0][1], self.maintenance_plan_3.name
)
def test_next_maintenance_date_01(self):
# We set start maintenance date tomorrow and check next maintenance
# date has been correctly computed
self.maintenance_plan_1.start_maintenance_date = "2023-01-24"
# Check next maintenance date is 1 month from start date
self.assertEqual(
self.maintenance_plan_1.next_maintenance_date,
fields.Date.from_string("2023-02-24"),
)
def test_next_maintenance_date_02(self):
self.cron.method_direct_trigger()
# Check maintenance plan dates
self.assertEqual(
self.maintenance_plan_1.start_maintenance_date, self.today_date
)
self.assertEqual(self.maintenance_plan_1.next_maintenance_date, self.today_date)
# Check information from generated_requests
generated_requests = self.maintenance_request_obj.search(
[("maintenance_plan_id", "=", self.maintenance_plan_1.id)],
order="schedule_date asc",
)
self.assertEqual(len(generated_requests), 3)
maintenance_1 = generated_requests[0]
# First maintenance was planned 2023-01-25
self.assertEqual(maintenance_1.request_date, self.today_date)
# Complete request:
maintenance_1.stage_id = self.done_stage
# Check next one:
maintenance_2 = generated_requests[1]
# This should be expected 2023-02-25
self.assertEqual(
maintenance_2.request_date, fields.Date.from_string("2023-02-25")
)
# Complete request and Check next one:
maintenance_2.stage_id = self.done_stage
maintenance_3 = generated_requests[2]
# This one should be expected 2023-03-25
self.assertEqual(
maintenance_3.request_date, fields.Date.from_string("2023-03-25")
)
# Move it to a date before `start_maintenance_date` (the request should
# be ignored)
past_date = fields.Date.from_string("2022-12-25")
maintenance_3.request_date = past_date
self.assertNotEqual(self.maintenance_plan_1.next_maintenance_date, past_date)
self.assertEqual(
self.maintenance_plan_1.next_maintenance_date,
fields.Date.from_string("2023-03-25"),
)
# Move the request_date far into the future:
future_date = fields.Date.from_string("2023-05-25")
maintenance_3.request_date = future_date
self.assertEqual(self.maintenance_plan_1.next_maintenance_date, future_date)
# Complete request in that date, next expected date should be 1 month
# after latest request done.:
maintenance_3.stage_id = self.done_stage
self.assertEqual(
self.maintenance_plan_1.next_maintenance_date,
fields.Date.from_string("2023-06-25"),
)
def test_generate_requests(self):
self.cron.method_direct_trigger()
generated_requests = self.maintenance_request_obj.search(
[("maintenance_plan_id", "=", self.maintenance_plan_1.id)],
order="schedule_date asc",
)
self.assertEqual(len(generated_requests), 3)
self.assertEqual(
fields.Date.to_date(generated_requests[0].schedule_date), self.today_date
)
self.assertEqual(
fields.Date.to_date(generated_requests[1].schedule_date),
fields.Date.from_string("2023-02-25"),
)
self.assertEqual(
fields.Date.to_date(generated_requests[2].schedule_date),
fields.Date.from_string("2023-03-25"),
)
generated_request = self.maintenance_request_obj.search(
[("maintenance_plan_id", "=", self.maintenance_plan_4.id)], limit=1
)
self.assertEqual(
generated_request.name,
_(
"Preventive Maintenance (%(kind)s) - %(plan)s",
kind=self.weekly_kind.name,
plan=self.maintenance_plan_4.name,
),
)
def test_generate_requests2(self):
self.cron.method_direct_trigger()
generated_requests = self.maintenance_request_obj.search(
[("maintenance_plan_id", "=", self.maintenance_plan_1.id)],
order="schedule_date asc",
)
self.assertEqual(len(generated_requests), 3)
# We set plan start_maintenanca_date to a future one. New requests should take
# into account this new date.
new_date = fields.Date.from_string("2023-04-25")
self.maintenance_plan_1.next_maintenance_date = new_date
self.maintenance_plan_1.maintenance_plan_horizon = 3
self.cron.method_direct_trigger()
generated_requests = self.maintenance_request_obj.search(
[("maintenance_plan_id", "=", self.maintenance_plan_1.id)],
order="schedule_date asc",
)
self.assertEqual(len(generated_requests), 4)
self.assertEqual(generated_requests[-1].request_date, new_date)
def test_generate_requests_no_equipment(self):
self.cron.method_direct_trigger()
generated_requests = self.maintenance_request_obj.search(
[("maintenance_plan_id", "=", self.maintenance_plan_5.id)],
order="schedule_date asc",
)
self.assertEqual(len(generated_requests), 3)
# We set plan start_maintenanca_date to a future one. New requests should take
# into account this new date.
self.maintenance_plan_5.write(
{
"start_maintenance_date": fields.Date.to_string(
self.today_date + relativedelta(weeks=9)
),
"maintenance_plan_horizon": 3,
}
)
self.cron.method_direct_trigger()
generated_requests = self.maintenance_request_obj.search(
[("maintenance_plan_id", "=", self.maintenance_plan_5.id)],
order="schedule_date asc",
)
self.assertEqual(len(generated_requests), 4)
self.assertEqual(
generated_requests[-1].request_date,
self.today_date + relativedelta(weeks=9),
)
self.assertFalse(generated_requests.mapped("equipment_id"))
def test_get_relativedelta(self):
plan = self.maintenance_plan_1
result = plan.get_relativedelta(1, "day")
self.assertEqual(relativedelta(days=1), result)
result = plan.get_relativedelta(1, "week")
self.assertEqual(relativedelta(weeks=1), result)
result = plan.get_relativedelta(1, "month")
self.assertEqual(relativedelta(months=1), result)
result = plan.get_relativedelta(1, "year")
self.assertEqual(relativedelta(years=1), result)
def test_generate_requests_inactive_equipment(self):
self.equipment_1.active = False
self.cron.method_direct_trigger()
generated_requests = self.maintenance_request_obj.search(
[("maintenance_plan_id", "=", self.maintenance_plan_1.id)],
order="schedule_date asc",
)
self.assertEqual(len(generated_requests), 0)
self.equipment_1.active = True
self.cron.method_direct_trigger()
generated_requests = self.maintenance_request_obj.search(
[("maintenance_plan_id", "=", self.maintenance_plan_1.id)],
order="schedule_date asc",
)
self.assertEqual(len(generated_requests), 3)
def test_maintenance_request_report(self):
self.cron.method_direct_trigger()
generated_request = self.maintenance_request_obj.search(
[("maintenance_plan_id", "=", self.maintenance_plan_1.id)],
order="schedule_date asc",
limit=1,
)
generated_request.note = "TEST-INSTRUCTIONS"
res = self.report_obj._render_qweb_text(
"base_maintenance.report_maintenance_request",
generated_request.ids,
False,
)
self.assertRegex(str(res[0]), "TEST-INSTRUCTIONS")
def test_maintenance_plan_button_manual_request_generation(self):
self.assertEqual(len(self.maintenance_plan_1.maintenance_ids), 0)
self.maintenance_plan_1.button_manual_request_generation()
self.assertEqual(len(self.maintenance_plan_1.maintenance_ids), 3)

View file

@ -0,0 +1,38 @@
# Copyright 2023 Dixmit
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
import json
from odoo.addons.maintenance_plan.tests.common import TestMaintenancePlanBase
class TestMaintenancePlanDomain(TestMaintenancePlanBase):
def test_generate_requests_no_domain(self):
self.cron.method_direct_trigger()
generated_requests = self.maintenance_request_obj.search(
[("maintenance_plan_id", "=", self.maintenance_plan_5.id)],
order="schedule_date asc",
)
self.assertEqual(len(generated_requests), 3)
self.assertFalse(generated_requests.mapped("equipment_id"))
def test_generate_requests_domain(self):
equipment_2 = self.maintenance_equipment_obj.create({"name": "Laptop 2"})
self.maintenance_plan_5.write(
{
"generate_with_domain": True,
"generate_domain": json.dumps(
[("id", "in", [equipment_2.id, self.equipment_1.id])]
),
}
)
self.cron.method_direct_trigger()
generated_requests = self.maintenance_request_obj.search(
[("maintenance_plan_id", "=", self.maintenance_plan_5.id)],
order="schedule_date asc",
)
self.assertEqual(len(generated_requests), 6)
self.assertIn(equipment_2, generated_requests.mapped("equipment_id"))
self.assertIn(self.equipment_1, generated_requests.mapped("equipment_id"))

View file

@ -0,0 +1,111 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- equipment : views inheritance -->
<record id="hr_equipment_view_form" model="ir.ui.view">
<field name="name">equipment.form.inherit</field>
<field name="inherit_id" ref="maintenance.hr_equipment_view_form" />
<field name="model">maintenance.equipment</field>
<field name="arch" type="xml">
<div name="button_box" position="inside">
<button
name="%(maintenance_plan_equipment_action)d"
type="action"
class="oe_stat_button"
icon="fa-list"
>
<field
string="Plans"
name="search_maintenance_plan_count"
widget="statinfo"
/>
</button>
</div>
<xpath expr="//group[@name='maintenance']" position="attributes">
<attribute name="attrs">{'invisible': 1}</attribute>
</xpath>
<xpath expr="//group[@name='maintenance']/.." position="after">
<field
name="maintenance_plan_ids"
nolabel="1"
context="{'default_equipment_id': active_id, 'hide_equipment_id': 1}"
>
<tree>
<field name="maintenance_kind_id" string="Kind" />
<field name="maintenance_team_id" string="Team" />
<field name="name" />
<field name="start_maintenance_date" string="Start Date" />
<field name="interval" />
<field name="interval_step" />
<field name="duration" />
<field name="next_maintenance_date" />
<field
name="maintenance_plan_horizon"
string="P. Horizon period"
/>
<field name="planning_step" string="P. Horizon step" />
</tree>
</field>
</xpath>
<field name="maintenance_team_id" position="after">
<field name="maintenance_team_required" attrs="{'invisible': 1}" />
</field>
<field name="maintenance_team_id" position="attributes">
<attribute
name="attrs"
>{'required': [('maintenance_team_required', '=', True)]}</attribute>
</field>
</field>
</record>
<record id="hr_equipment_view_search" model="ir.ui.view">
<field name="name">equipment.search-oxigen</field>
<field name="model">maintenance.equipment</field>
<field name="inherit_id" ref="maintenance.hr_equipment_view_search" />
<field name="arch" type="xml">
<xpath expr="//field[@name='owner_user_id']" position="after">
<field name="maintenance_team_id" />
</xpath>
</field>
</record>
<!-- request : views inheritance -->
<record id="hr_equipment_request_view_form" model="ir.ui.view">
<field name="name">equipment.request.form.inherit</field>
<field name="model">maintenance.request</field>
<field name="priority" eval="999" />
<field name="inherit_id" ref="base_maintenance.equipment_request_view_form" />
<field name="arch" type="xml">
<field name="maintenance_type" position="after">
<field name="maintenance_kind_id" />
</field>
<!-- TODO: Use position="move" instead -->
<xpath expr="//notebook/page[@name='description_page']" position="before">
<page string="Instructions">
<field
name="note"
placeholder="Describe the maintenance to do..."
/>
</page>
</xpath>
<xpath
expr="//notebook/page[@name='description_page']"
position="attributes"
>
<attribute name="string">Notes</attribute>
</xpath>
</field>
</record>
<record id="maintenance.hr_equipment_action" model="ir.actions.act_window">
<field name="context">{'hide_equipment_id': 1}</field>
</record>
<record id="hr_equipment_request_view_tree" model="ir.ui.view">
<field name="name">equipment.request.tree</field>
<field name="model">maintenance.request</field>
<field name="inherit_id" ref="maintenance.hr_equipment_request_view_tree" />
<field name="arch" type="xml">
<xpath expr="field[@name='request_date']" position="attributes">
<attribute name="groups" />
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="maintenance_kind_view_tree" model="ir.ui.view">
<field name="name">maintenance.kind.tree</field>
<field name="model">maintenance.kind</field>
<field name="arch" type="xml">
<tree editable="top">
<field name="name" />
<field name="active" />
</tree>
</field>
</record>
<record id="maintenance_kind_action" model="ir.actions.act_window">
<field name="name">Maintenance kinds</field>
<field name="res_model">maintenance.kind</field>
<field name="view_mode">tree</field>
<field name="view_id" ref="maintenance_kind_view_tree" />
</record>
<menuitem
id="menu_maintenance_kind_configuration"
name="Maintenance kinds"
parent="maintenance.menu_maintenance_configuration"
action="maintenance_kind_action"
sequence="4"
/>
</odoo>

View file

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="hr_equipment_request_action_from_plan" model="ir.actions.act_window">
<field name="name">Maintenance Requests</field>
<field name="res_model">maintenance.request</field>
<field name="binding_model_id" ref="model_maintenance_plan" />
<field name="view_mode">kanban,tree,form,pivot,graph,calendar</field>
<field name="context">{
'default_maintenance_plan_id': active_id,
}</field>
<field name="domain">[('maintenance_plan_id', '=', active_id)]</field>
</record>
<record id="maintenance_plan_view_form" model="ir.ui.view">
<field name="name">maintenance.plan.form</field>
<field name="model">maintenance.plan</field>
<field name="arch" type="xml">
<form string="Maintenance Plan">
<header>
<button
name="button_manual_request_generation"
string="Generate requests for current threshold"
help="If not clicked, the scheduled action will do it for you."
type="object"
attrs="{'invisible' : ['|', ('id', '=', False),('interval', '=', 0)]}"
/>
</header>
<sheet>
<widget
name="web_ribbon"
title="Archived"
bg_color="bg-danger"
attrs="{'invisible': [('active', '=', True)]}"
/>
<field name="active" attrs="{'invisible': 1}" />
<div class="oe_button_box" name="button_box">
<button
name="%(hr_equipment_request_action_from_plan)d"
type="action"
class="oe_stat_button"
icon="fa-ticket"
>
<field
string="Maintenance"
name="maintenance_count"
widget="statinfo"
/>
</button>
</div>
<div class="oe_title">
<label for="name" class="oe_edit_only" />
<h1>
<field
name="name"
placeholder="e.g. Calibration"
attrs="{'required': [('equipment_id', '=', False)]}"
/>
</h1>
</div>
<group>
<group>
<field
name="equipment_id"
invisible="context.get('hide_equipment_id', 0)"
/>
<field name="maintenance_kind_id" />
<field
name="maintenance_team_id"
attrs="{'required': [('equipment_id', '=', False)]}"
/>
<field
name="generate_with_domain"
attrs="{'invisible': [('equipment_id', '!=', False)]}"
/>
<field
name="generate_domain"
widget="domain"
options="{'model': 'maintenance.equipment', 'in_dialog': True}"
attrs="{'invisible': ['|', ('equipment_id', '!=', False), ('generate_with_domain', '=', False)]}"
/>
</group>
<group>
<field name="skip_notify_follower_on_requests" />
<field
name="company_id"
groups="base.group_multi_company"
/>
</group>
</group>
<group>
<group>
<field name="start_maintenance_date" />
<field name="next_maintenance_date" />
</group>
<group>
<field name="duration" />
<label for="interval" />
<div class="o_row">
<field name="interval" />
<field name="interval_step" />
</div>
<label
for="maintenance_plan_horizon"
string="Planning Horizon"
/>
<div class="o_row">
<field name="maintenance_plan_horizon" />
<field name="planning_step" />
</div>
</group>
</group>
<notebook>
<page string="Instructions">
<field
name="note"
placeholder="Describe the maintenance to do..."
/>
</page>
</notebook>
</sheet>
<div class="o_attachment_preview" />
<!-- Chatter -->
<div class="oe_chatter">
<field name="message_follower_ids" groups="base.group_user" />
<field name="activity_ids" />
<field name="message_ids" />
</div>
</form>
</field>
</record>
<record id="maintenance_plan_view_tree" model="ir.ui.view">
<field name="name">maintenance.plan.tree</field>
<field name="model">maintenance.plan</field>
<field name="arch" type="xml">
<tree decoration-muted="active == False">
<field name="equipment_id" />
<field name="maintenance_kind_id" />
<field name="maintenance_team_id" />
<field name="name" />
<field name="start_maintenance_date" />
<field name="interval" />
<field name="interval_step" />
<field name="duration" />
<field name="next_maintenance_date" />
<field name="maintenance_plan_horizon" />
<field name="planning_step" />
<field name="active" invisible="1" />
<field name="company_id" groups="base.group_multi_company" />
</tree>
</field>
</record>
<record id="maintenance_plan_view_search" model="ir.ui.view">
<field name="name">maintenance.plan.search</field>
<field name="model">maintenance.plan</field>
<field name="arch" type="xml">
<search string="Maintenance Plans">
<field name="equipment_id" />
<field name="maintenance_kind_id" />
<field name="maintenance_team_id" />
<field name="name" />
<field name="company_id" groups="base.group_multi_company" />
<field name="start_maintenance_date" />
<filter string="Active" name="active" domain="[('active', '=',True)]" />
<filter
string="Inactive"
name="archived"
domain="[('active', '=',False)]"
/>
<filter
string="Under Maintenance"
name="under_maintenance"
domain="[('maintenance_open_count', '&gt;', 0)]"
/>
</search>
</field>
</record>
<record id="maintenance_plan_action" model="ir.actions.act_window">
<field name="name">Maintenance plans</field>
<field name="res_model">maintenance.plan</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="maintenance_plan_view_tree" />
<field name="domain">['|', ('active', '=', True), ('active', '=',
False)]
</field>
</record>
<record id="maintenance_plan_equipment_action" model="ir.actions.act_window">
<field name="name">Maintenance plans</field>
<field name="res_model">maintenance.plan</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="maintenance_plan_view_tree" />
<field name="context">{
'default_equipment_id': active_id, 'hide_equipment_id': 0
}</field>
<field name="domain">['|', ('active', '=', True), ('active', '=',
False), ('search_equipment_id', '=', active_id)]
</field>
</record>
<menuitem
id="menu_m_plan_form"
name="Maintenance Plans"
parent="maintenance.menu_m_request"
action="maintenance_plan_action"
groups="maintenance.group_equipment_manager,base.group_user"
/>
</odoo>

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<template
id="report_maintenance_request_document"
inherit_id="base_maintenance.report_maintenance_request_document"
>
<xpath expr="//div[@id='description']" position="after">
<div class="row mt32 mb32" id="note">
<div t-if="doc.note" class="col-auto mw-100 mb-2">
<strong>Instructions:</strong>
<div class="m-0" t-field="doc.note" />
</div>
</div>
</xpath>
</template>
</odoo>

View file

@ -0,0 +1,42 @@
[project]
name = "odoo-bringout-oca-maintenance-maintenance_plan"
version = "16.0.0"
description = "Maintenance Plan - Extends preventive maintenance planning"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-maintenance-base_maintenance>=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 = ["maintenance_plan"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]