From 5a635dd9145d6450d963e8c187096e71ac5c85cb Mon Sep 17 00:00:00 2001 From: Ernad Husremovic Date: Sat, 30 Aug 2025 17:23:31 +0200 Subject: [PATCH] Add oca-maintenance submodule with 28 maintenance modules MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .../README.md | 44 ++ .../base_maintenance/README.rst | 85 ++ .../base_maintenance/__init__.py | 1 + .../base_maintenance/__manifest__.py | 20 + .../i18n/base_maintenance.pot | 125 +++ .../base_maintenance/i18n/bs.po | 125 +++ .../base_maintenance/i18n/es.po | 128 +++ .../base_maintenance/i18n/it.po | 137 ++++ .../base_maintenance/i18n/pt.po | 128 +++ .../base_maintenance/i18n/pt_BR.po | 136 ++++ .../base_maintenance/i18n/tr.po | 128 +++ .../base_maintenance/models/__init__.py | 1 + .../models/maintenance_team.py | 11 + .../base_maintenance/readme/CONTRIBUTORS.rst | 3 + .../base_maintenance/readme/DESCRIPTION.rst | 8 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 433 ++++++++++ .../views/maintenance_equipment_views.xml | 16 + .../views/maintenance_request_views.xml | 25 + .../views/maintenance_team_views.xml | 36 + .../views/report_maintenance_request.xml | 129 +++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 12 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../pyproject.toml | 42 + .../README.md | 44 ++ .../base_maintenance_config/README.rst | 130 +++ .../base_maintenance_config/__init__.py | 1 + .../base_maintenance_config/__manifest__.py | 14 + .../i18n/base_maintenance_config.pot | 30 + .../base_maintenance_config/i18n/bs.po | 30 + .../base_maintenance_config/i18n/es.po | 33 + .../base_maintenance_config/i18n/it.po | 33 + .../readme/CONFIGURE.rst | 8 + .../readme/CONTRIBUTORS.rst | 2 + .../readme/DESCRIPTION.rst | 35 + .../base_maintenance_config/readme/USAGE.rst | 3 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 475 +++++++++++ .../views/res_config_settings.xml | 43 + .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 11 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../pyproject.toml | 42 + .../README.md | 44 ++ .../base_maintenance_group/README.rst | 98 +++ .../base_maintenance_group/__init__.py | 1 + .../base_maintenance_group/__manifest__.py | 18 + .../data/maintenance_data.xml | 9 + .../i18n/base_maintenance_group.pot | 29 + .../base_maintenance_group/i18n/bs.po | 29 + .../base_maintenance_group/i18n/es.po | 32 + .../base_maintenance_group/i18n/it.po | 32 + .../base_maintenance_group/i18n/pt_BR.po | 32 + .../base_maintenance_group/i18n/sk.po | 30 + .../base_maintenance_group/menuitems.xml | 71 ++ .../readme/CONTRIBUTORS.rst | 3 + .../readme/DESCRIPTION.rst | 8 + .../base_maintenance_group/readme/USAGE.rst | 9 + .../security/maintenance_security.xml | 52 ++ .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 443 +++++++++++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 11 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 66 ++ .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../pyproject.toml | 42 + .../README.md | 45 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 6 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 14 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_account/README.rst | 100 +++ .../maintenance_account/__init__.py | 1 + .../maintenance_account/__manifest__.py | 17 + .../maintenance_account/i18n/bs.po | 62 ++ .../maintenance_account/i18n/es.po | 71 ++ .../maintenance_account/i18n/it.po | 70 ++ .../i18n/maintenance_account.pot | 62 ++ .../maintenance_account/models/__init__.py | 2 + .../models/account_move.py | 134 ++++ .../models/maintenance_equipment.py | 19 + .../readme/CONTRIBUTORS.rst | 7 + .../readme/DESCRIPTION.rst | 1 + .../maintenance_account/readme/USAGE.rst | 6 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 442 +++++++++++ .../maintenance_account/tests/__init__.py | 3 + .../tests/test_maintenance_account.py | 138 ++++ .../views/account_move_view.xml | 59 ++ .../views/maintenance_equipment_view.xml | 13 + .../pyproject.toml | 43 + .../README.md | 44 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 12 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../README.rst | 78 ++ .../__init__.py | 1 + .../__manifest__.py | 14 + .../i18n/bs.po | 46 ++ .../i18n/es.po | 62 ++ .../i18n/fr.po | 58 ++ .../i18n/it.po | 58 ++ ...intenance_equipment_category_hierarchy.pot | 46 ++ .../models/__init__.py | 1 + .../models/maintenance_equipment_category.py | 48 ++ .../readme/CONTRIBUTORS.rst | 4 + .../readme/DESCRIPTION.rst | 0 .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 425 ++++++++++ .../tests/__init__.py | 1 + .../tests/test_maintenance_category.py | 21 + .../views/maintenance_equipment_category.xml | 42 + .../pyproject.toml | 43 + .../README.md | 44 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 13 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 34 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../README.rst | 94 +++ .../__init__.py | 1 + .../__manifest__.py | 19 + .../i18n/bs.po | 99 +++ .../i18n/es.po | 103 +++ .../i18n/it.po | 102 +++ .../maintenance_equipment_certification.pot | 99 +++ .../models/__init__.py | 2 + .../models/maintenance_equipment.py | 13 + .../maintenance_equipment_certificate.py | 22 + .../readme/CONTRIBUTORS.rst | 3 + .../readme/DESCRIPTION.rst | 2 + .../readme/USAGE.rst | 3 + .../security/ir.model.access.csv | 3 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 438 +++++++++++ .../tests/__init__.py | 1 + ...est_maintenance_equipment_certification.py | 41 + .../views/maintenance_equipment_views.xml | 27 + .../pyproject.toml | 42 + .../README.md | 45 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 6 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 13 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_equipment_contract/README.rst | 78 ++ .../__init__.py | 1 + .../__manifest__.py | 15 + .../maintenance_equipment_contract_demo.xml | 26 + .../maintenance_equipment_contract/i18n/bs.po | 55 ++ .../maintenance_equipment_contract/i18n/es.po | 58 ++ .../maintenance_equipment_contract/i18n/it.po | 58 ++ .../i18n/maintenance_equipment_contract.pot | 55 ++ .../i18n/pt_BR.po | 59 ++ .../models/__init__.py | 2 + .../models/contract_contract.py | 11 + .../models/maintenance_equipment.py | 40 + .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 3 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 423 ++++++++++ .../tests/__init__.py | 1 + .../tests/test_equipment_contract.py | 36 + .../views/contract_contract.xml | 33 + .../views/maintenance_equipment.xml | 47 ++ .../pyproject.toml | 44 ++ .../README.md | 44 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 12 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../README.rst | 86 ++ .../__init__.py | 1 + .../__manifest__.py | 16 + .../demo_maintenance_equipment_hierarchy.xml | 23 + .../i18n/bs.po | 81 ++ .../i18n/es.po | 87 +++ .../i18n/fr.po | 84 ++ .../i18n/it.po | 84 ++ .../i18n/maintenance_equipment_hierarchy.pot | 81 ++ .../i18n/sk.po | 82 ++ .../models/__init__.py | 1 + .../models/maintenance_equipment.py | 68 ++ .../readme/CONTRIBUTORS.rst | 3 + .../readme/DESCRIPTION.rst | 1 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 425 ++++++++++ .../tests/__init__.py | 1 + .../test_maintenance_equipment_hierarchy.py | 37 + .../views/maintenance_equipment_views.xml | 51 ++ .../pyproject.toml | 42 + .../README.md | 44 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 12 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_equipment_image/README.rst | 84 ++ .../maintenance_equipment_image/__init__.py | 1 + .../__manifest__.py | 19 + .../maintenance_equipment_image/i18n/bs.po | 49 ++ .../maintenance_equipment_image/i18n/es.po | 52 ++ .../maintenance_equipment_image/i18n/it.po | 61 ++ .../i18n/maintenance_equipment_image.pot | 49 ++ .../maintenance_equipment_image/i18n/pt.po | 62 ++ .../models/__init__.py | 1 + .../models/maintenance_equipment.py | 9 + .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 1 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 423 ++++++++++ .../views/maintenance_equipment_views.xml | 39 + .../pyproject.toml | 42 + .../README.md | 44 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 13 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_equipment_sequence/README.rst | 86 ++ .../__init__.py | 1 + .../__manifest__.py | 16 + .../maintenance_equipment_sequence/i18n/bs.po | 56 ++ .../maintenance_equipment_sequence/i18n/es.po | 70 ++ .../maintenance_equipment_sequence/i18n/it.po | 70 ++ .../i18n/maintenance_equipment_sequence.pot | 56 ++ .../models/__init__.py | 1 + .../models/maintenance.py | 129 +++ .../readme/CONTRIBUTORS.rst | 3 + .../readme/DESCRIPTION.rst | 1 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 427 ++++++++++ .../tests/__init__.py | 1 + .../test_maintenance_equipment_sequence.py | 85 ++ .../views/maintenance_views.xml | 63 ++ .../pyproject.toml | 44 ++ .../README.md | 44 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 13 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 34 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_equipment_status/README.rst | 78 ++ .../maintenance_equipment_status/__init__.py | 1 + .../__manifest__.py | 20 + .../demo_maintenance_equipment_status.xml | 31 + .../maintenance_equipment_status/i18n/bs.po | 129 +++ .../maintenance_equipment_status/i18n/es.po | 140 ++++ .../maintenance_equipment_status/i18n/it.po | 134 ++++ .../i18n/maintenance_equipment_status.pot | 129 +++ .../models/__init__.py | 2 + .../models/maintenance_equipment.py | 14 + .../models/maintenance_equipment_status.py | 21 + .../readme/CONFIGURATION.rst | 5 + .../readme/CONTRIBUTORS.rst | 3 + .../readme/DESCRIPTION.rst | 1 + .../security/ir.model.access.csv | 3 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 423 ++++++++++ .../maintenance_equipment_status_views.xml | 82 ++ .../views/maintenance_equipment_views.xml | 44 ++ .../pyproject.toml | 42 + .../README.md | 44 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 13 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 34 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_equipment_tags/README.rst | 84 ++ .../maintenance_equipment_tags/__init__.py | 1 + .../__manifest__.py | 20 + .../demo/maintenance_equipment_tags_demo.xml | 17 + .../maintenance_equipment_tags/i18n/bs.po | 95 +++ .../maintenance_equipment_tags/i18n/es.po | 98 +++ .../maintenance_equipment_tags/i18n/it.po | 98 +++ .../i18n/maintenance_equipment_tags.pot | 95 +++ .../maintenance_equipment_tags/i18n/pt.po | 98 +++ .../maintenance_equipment_tags/i18n/pt_BR.po | 98 +++ .../models/__init__.py | 2 + .../models/maintenance_equipment.py | 17 + .../models/maintenance_equipment_tag.py | 31 + .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 1 + .../security/ir.model.access.csv | 3 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 423 ++++++++++ .../views/maintenance_equipment.xml | 66 ++ .../views/maintenance_equipment_tag.xml | 45 ++ .../pyproject.toml | 43 + .../README.md | 44 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 13 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 41 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_equipment_usage/README.rst | 91 +++ .../maintenance_equipment_usage/__init__.py | 1 + .../__manifest__.py | 21 + .../data/ir_sequence_data.xml | 12 + .../maintenance_equipment_usage/i18n/bs.po | 399 ++++++++++ .../maintenance_equipment_usage/i18n/es.po | 407 ++++++++++ .../maintenance_equipment_usage/i18n/it.po | 409 ++++++++++ .../i18n/maintenance_equipment_usage.pot | 399 ++++++++++ .../models/__init__.py | 2 + .../models/maintenance_equipment.py | 32 + .../models/maintenance_equipment_usage.py | 139 ++++ .../readme/CONTRIBUTORS.rst | 6 + .../readme/DESCRIPTION.rst | 2 + .../security/ir.model.access.csv | 2 + .../security/security.xml | 9 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 430 ++++++++++ .../tests/__init__.py | 1 + .../tests/test_maintenance_equipment_usage.py | 56 ++ .../maintenance_equipment_usage_views.xml | 203 +++++ .../views/maintenance_equipment_view.xml | 46 ++ .../pyproject.toml | 42 + .../README.md | 44 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 15 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 34 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_location/README.rst | 79 ++ .../maintenance_location/__init__.py | 1 + .../maintenance_location/__manifest__.py | 20 + .../maintenance_location/i18n/bs.po | 182 +++++ .../maintenance_location/i18n/es.po | 136 ++++ .../maintenance_location/i18n/it.po | 195 +++++ .../i18n/maintenance_location.pot | 182 +++++ .../maintenance_location/models/__init__.py | 4 + .../models/maintenance_equipment.py | 20 + .../models/maintenance_location.py | 54 ++ .../models/maintenance_plan.py | 11 + .../models/maintenance_request.py | 22 + .../readme/CONTRIBUTORS.rst | 4 + .../readme/DESCRIPTION.rst | 1 + .../security/ir.model.access.csv | 3 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 424 ++++++++++ .../maintenance_location/tests/__init__.py | 1 + .../tests/test_maintenance_location.py | 53 ++ .../views/maintenance_equipment.xml | 59 ++ .../views/maintenance_location.xml | 61 ++ .../views/maintenance_plan.xml | 35 + .../views/maintenance_request.xml | 51 ++ .../pyproject.toml | 43 + .../README.md | 44 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 15 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 41 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_plan/README.rst | 135 ++++ .../maintenance_plan/__init__.py | 2 + .../maintenance_plan/__manifest__.py | 25 + .../data/demo_maintenance_plan.xml | 57 ++ .../maintenance_plan/hooks.py | 52 ++ .../maintenance_plan/i18n/bs.po | 650 +++++++++++++++ .../maintenance_plan/i18n/es.po | 680 ++++++++++++++++ .../maintenance_plan/i18n/it.po | 739 ++++++++++++++++++ .../i18n/maintenance_plan.pot | 650 +++++++++++++++ .../maintenance_plan/i18n/pt.po | 699 +++++++++++++++++ .../maintenance_plan/i18n/zh_CN.po | 656 ++++++++++++++++ .../maintenance_plan/models/__init__.py | 4 + .../models/maintenance_equipment.py | 200 +++++ .../models/maintenance_kind.py | 18 + .../models/maintenance_plan.py | 261 +++++++ .../models/maintenance_request.py | 19 + .../maintenance_plan/readme/CONTRIBUTORS.rst | 8 + .../maintenance_plan/readme/DESCRIPTION.rst | 2 + .../maintenance_plan/readme/INSTALL.rst | 14 + .../maintenance_plan/readme/USAGE.rst | 28 + .../security/ir.model.access.csv | 5 + .../security/maintenance_security.xml | 27 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 473 +++++++++++ .../maintenance_plan/tests/__init__.py | 2 + .../maintenance_plan/tests/common.py | 83 ++ .../tests/test_maintenance_plan.py | 231 ++++++ .../tests/test_maintenance_plan_domain.py | 38 + .../views/maintenance_equipment_views.xml | 111 +++ .../views/maintenance_kind_views.xml | 26 + .../views/maintenance_plan_views.xml | 204 +++++ .../views/report_maintenance_request.xml | 16 + .../pyproject.toml | 42 + .../README.md | 44 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 14 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 34 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_plan_activity/README.rst | 80 ++ .../maintenance_plan_activity/__init__.py | 1 + .../maintenance_plan_activity/__manifest__.py | 17 + .../maintenance_plan_activity/i18n/bs.po | 104 +++ .../maintenance_plan_activity/i18n/es.po | 111 +++ .../maintenance_plan_activity/i18n/it.po | 111 +++ .../i18n/maintenance_plan_activity.pot | 104 +++ .../models/__init__.py | 2 + .../models/maintenance.py | 44 ++ .../models/maintenance_planned_activity.py | 22 + .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 5 + .../security/ir.model.access.csv | 3 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 423 ++++++++++ .../description/maintenance_plan_activity.png | Bin 0 -> 39262 bytes .../tests/__init__.py | 1 + .../tests/test_maintenance_plan_activity.py | 61 ++ .../views/maintenance_views.xml | 28 + .../pyproject.toml | 45 ++ .../README.md | 45 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 6 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 16 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_product/README.rst | 105 +++ .../maintenance_product/__init__.py | 1 + .../maintenance_product/__manifest__.py | 17 + .../maintenance_product/i18n/bs.po | 58 ++ .../maintenance_product/i18n/es.po | 74 ++ .../maintenance_product/i18n/it.po | 73 ++ .../i18n/maintenance_product.pot | 58 ++ .../maintenance_product/models/__init__.py | 4 + .../models/maintenance_equipment.py | 43 + .../models/product_category.py | 13 + .../models/product_product.py | 13 + .../models/product_template.py | 9 + .../readme/CONTRIBUTORS.rst | 6 + .../readme/DESCRIPTION.rst | 1 + .../maintenance_product/readme/USAGE.rst | 12 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 445 +++++++++++ .../maintenance_product/tests/__init__.py | 4 + .../maintenance_product/tests/common.py | 23 + .../tests/test_maintenance_product.py | 30 + .../views/maintenance_equipment_view.xml | 34 + .../views/product_template_view.xml | 16 + .../pyproject.toml | 43 + .../README.md | 45 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 6 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 14 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 22 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_project/README.rst | 81 ++ .../maintenance_project/__init__.py | 1 + .../maintenance_project/__manifest__.py | 20 + .../data/demo_maintenance_project.xml | 60 ++ .../maintenance_project/i18n/bs.po | 123 +++ .../maintenance_project/i18n/es.po | 139 ++++ .../maintenance_project/i18n/it.po | 138 ++++ .../i18n/maintenance_project.pot | 123 +++ .../migrations/16.0.2.0.0/post-migration.py | 11 + .../maintenance_project/models/__init__.py | 3 + .../models/maintenance_equipment.py | 27 + .../models/maintenance_request.py | 33 + .../models/project_project.py | 58 ++ .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 6 + .../report/maintenance_request_report.xml | 20 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 428 ++++++++++ .../maintenance_project/tests/__init__.py | 1 + .../tests/test_maintenance_project.py | 114 +++ .../views/maintenance_equipment_views.xml | 74 ++ .../views/maintenance_request_views.xml | 55 ++ .../views/project_project_views.xml | 81 ++ .../pyproject.toml | 43 + .../README.md | 45 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 6 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 14 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_purchase/README.rst | 77 ++ .../maintenance_purchase/__init__.py | 1 + .../maintenance_purchase/__manifest__.py | 21 + .../maintenance_purchase/i18n/bs.po | 60 ++ .../maintenance_purchase/i18n/es.po | 84 ++ .../maintenance_purchase/i18n/it.po | 84 ++ .../i18n/maintenance_purchase.pot | 60 ++ .../maintenance_purchase/models/__init__.py | 2 + .../models/maintenance_equipment.py | 20 + .../models/purchase_order.py | 137 ++++ .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 1 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 421 ++++++++++ .../maintenance_purchase/tests/__init__.py | 1 + .../tests/test_purchase_order.py | 206 +++++ .../views/maintenance_equipment.xml | 16 + .../views/purchase_order.xml | 37 + .../pyproject.toml | 44 ++ .../README.md | 45 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 6 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 12 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_remote/README.rst | 77 ++ .../maintenance_remote/__init__.py | 1 + .../maintenance_remote/__manifest__.py | 14 + .../maintenance_remote/i18n/bs.po | 24 + .../maintenance_remote/i18n/es.po | 42 + .../maintenance_remote/i18n/fr.po | 42 + .../maintenance_remote/i18n/it.po | 42 + .../i18n/maintenance_remote.pot | 24 + .../maintenance_remote/i18n/pt_BR.po | 42 + .../maintenance_remote/models/__init__.py | 1 + .../models/maintenance_request.py | 17 + .../readme/CONTRIBUTORS.rst | 1 + .../maintenance_remote/readme/DESCRIPTION.rst | 2 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 424 ++++++++++ .../views/maintenance_request.xml | 25 + .../pyproject.toml | 44 ++ .../README.md | 45 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 6 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 13 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_request_purchase/README.rst | 80 ++ .../maintenance_request_purchase/__init__.py | 1 + .../__manifest__.py | 17 + .../maintenance_request_purchase/i18n/bs.po | 55 ++ .../maintenance_request_purchase/i18n/ca.po | 67 ++ .../maintenance_request_purchase/i18n/es.po | 103 +++ .../maintenance_request_purchase/i18n/it.po | 67 ++ .../i18n/maintenance_request_purchase.pot | 55 ++ .../models/__init__.py | 2 + .../models/maintenance_request.py | 29 + .../models/purchase_order.py | 39 + .../readme/CONTRIBUTORS.rst | 4 + .../readme/DESCRIPTION.rst | 1 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 427 ++++++++++ .../tests/__init__.py | 1 + .../tests/test_maintenance_purchase.py | 38 + .../views/maintenance_request.xml | 26 + .../views/purchase_order_views.xml | 51 ++ .../pyproject.toml | 44 ++ .../README.md | 45 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 6 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 13 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_request_repair/README.rst | 95 +++ .../maintenance_request_repair/__init__.py | 1 + .../__manifest__.py | 21 + .../maintenance_request_repair/i18n/bs.po | 40 + .../maintenance_request_repair/i18n/es.po | 43 + .../maintenance_request_repair/i18n/it.po | 43 + .../i18n/maintenance_request_repair.pot | 40 + .../maintenance_request_repair/i18n/pt_BR.po | 44 ++ .../models/__init__.py | 2 + .../models/maintenance_request.py | 11 + .../models/repair_order.py | 47 ++ .../readme/CONTRIBUTORS.rst | 4 + .../readme/DESCRIPTION.rst | 7 + .../readme/USAGE.rst | 6 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 441 +++++++++++ .../tests/__init__.py | 1 + .../tests/test_repair_order.py | 197 +++++ .../views/maintenance_request.xml | 33 + .../views/repair_order.xml | 30 + .../pyproject.toml | 44 ++ .../README.md | 44 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 13 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_request_sequence/README.rst | 78 ++ .../maintenance_request_sequence/__init__.py | 1 + .../__manifest__.py | 18 + .../data/maintenance_request_data.xml | 9 + .../maintenance_request_sequence/i18n/bs.po | 46 ++ .../maintenance_request_sequence/i18n/es.po | 52 ++ .../maintenance_request_sequence/i18n/it.po | 51 ++ .../i18n/maintenance_request_sequence.pot | 46 ++ .../i18n/pt_BR.po | 51 ++ .../models/__init__.py | 2 + .../models/maintenance_request.py | 25 + .../models/maintenance_team.py | 58 ++ .../readme/CONTRIBUTORS.rst | 2 + .../readme/DESCRIPTION.rst | 2 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 425 ++++++++++ .../tests/__init__.py | 1 + .../test_maintenance_request_sequence.py | 35 + .../views/maintenance_request.xml | 61 ++ .../views/maintenance_team.xml | 41 + .../pyproject.toml | 43 + .../README.md | 44 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 13 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../README.rst | 95 +++ .../__init__.py | 1 + .../__manifest__.py | 16 + ...o_maintenance_request_stage_transition.xml | 19 + .../i18n/bs.po | 81 ++ .../i18n/es.po | 84 ++ .../i18n/it.po | 84 ++ .../maintenance_request_stage_transition.pot | 81 ++ .../models/__init__.py | 2 + .../models/maintenance_request.py | 43 + .../models/maintenance_stage.py | 58 ++ .../readme/CONTRIBUTORS.rst | 3 + .../readme/DESCRIPTION.rst | 1 + .../readme/USAGE.rst | 5 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 436 +++++++++++ .../tests/__init__.py | 1 + .../tests/test_flow.py | 61 ++ .../views/maintenance_request.xml | 17 + .../views/maintenance_stage.xml | 20 + .../pyproject.toml | 43 + .../README.md | 44 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 12 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_security/README.rst | 97 +++ .../maintenance_security/__init__.py | 1 + .../maintenance_security/__manifest__.py | 18 + .../maintenance_security/i18n/bs.po | 19 + .../maintenance_security/i18n/es.po | 23 + .../maintenance_security/i18n/it.po | 22 + .../i18n/maintenance_security.pot | 19 + .../maintenance_security/models/__init__.py | 1 + .../models/mail_followers.py | 37 + .../readme/CONTRIBUTORS.rst | 5 + .../readme/DESCRIPTION.rst | 6 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 439 +++++++++++ .../maintenance_security/tests/__init__.py | 4 + .../tests/test_maintenance_security.py | 71 ++ .../views/maintenance_views.xml | 66 ++ .../pyproject.toml | 42 + .../README.md | 44 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 5 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 12 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_team_hierarchy/README.rst | 76 ++ .../maintenance_team_hierarchy/__init__.py | 1 + .../__manifest__.py | 15 + .../demo/maintenance_request_demo.xml | 21 + .../demo/maintenance_team_demo.xml | 14 + .../maintenance_team_hierarchy/i18n/bs.po | 79 ++ .../maintenance_team_hierarchy/i18n/es.po | 85 ++ .../maintenance_team_hierarchy/i18n/it.po | 82 ++ .../i18n/maintenance_team_hierarchy.pot | 79 ++ .../maintenance_team_hierarchy/i18n/pt_BR.po | 83 ++ .../models/__init__.py | 1 + .../models/maintenance_team.py | 67 ++ .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 1 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 421 ++++++++++ .../tests/__init__.py | 1 + .../tests/test_team_hierarchy.py | 73 ++ .../views/maintenance_team.xml | 37 + .../pyproject.toml | 43 + .../README.md | 46 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 7 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 14 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 22 + .../doc/SECURITY.md | 65 ++ .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../maintenance_timesheet/README.rst | 82 ++ .../maintenance_timesheet/__init__.py | 1 + .../maintenance_timesheet/__manifest__.py | 20 + .../data/demo_maintenance_timesheet.xml | 45 ++ .../maintenance_timesheet/i18n/bs.po | 133 ++++ .../maintenance_timesheet/i18n/es.po | 155 ++++ .../maintenance_timesheet/i18n/it.po | 154 ++++ .../i18n/maintenance_timesheet.pot | 133 ++++ .../16.0.2.1.0/noupdate_changes.xml | 10 + .../migrations/16.0.2.1.0/post-migration.py | 10 + .../maintenance_timesheet/models/__init__.py | 3 + .../models/hr_timesheet.py | 57 ++ .../models/maintenance_equipment.py | 13 + .../models/maintenance_request.py | 82 ++ .../readme/CONTRIBUTORS.rst | 3 + .../readme/DESCRIPTION.rst | 1 + .../report/maintenance_request_report.xml | 97 +++ .../maintenance_timesheet_security.xml | 28 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 431 ++++++++++ .../maintenance_timesheet/tests/__init__.py | 1 + .../tests/test_maintenance_timesheet.py | 107 +++ .../views/hr_timesheet_views.xml | 52 ++ .../views/maintenance_request_views.xml | 159 ++++ .../pyproject.toml | 44 ++ .../README.md | 45 ++ .../doc/ARCHITECTURE.md | 32 + .../doc/CONFIGURATION.md | 3 + .../doc/CONTROLLERS.md | 3 + .../doc/DEPENDENCIES.md | 6 + .../doc/FAQ.md | 4 + .../doc/INSTALL.md | 7 + .../doc/MODELS.md | 12 + .../doc/OVERVIEW.md | 6 + .../doc/REPORTS.md | 3 + .../doc/SECURITY.md | 8 + .../doc/TROUBLESHOOTING.md | 5 + .../doc/USAGE.md | 7 + .../doc/WIZARDS.md | 3 + .../README.rst | 126 +++ .../__init__.py | 2 + .../__manifest__.py | 16 + .../i18n/bs.po | 59 ++ .../i18n/es.po | 63 ++ .../i18n/it.po | 62 ++ .../maintenance_timesheet_time_control.pot | 59 ++ .../models/__init__.py | 1 + .../models/maintenance_request.py | 34 + .../readme/CONFIGURE.rst | 1 + .../readme/CONTRIBUTORS.rst | 4 + .../readme/DESCRIPTION.rst | 3 + .../readme/INSTALL.rst | 8 + .../readme/USAGE.rst | 16 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 465 +++++++++++ .../tests/__init__.py | 3 + ...test_maintenance_timesheet_time_control.py | 96 +++ .../views/maintenance_request_view.xml | 168 ++++ .../wizards/__init__.py | 1 + .../wizards/hr_timesheet_switch.py | 23 + .../pyproject.toml | 43 + 968 files changed, 44227 insertions(+) create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/README.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/README.rst create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/__init__.py create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/base_maintenance.pot create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/pt.po create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/pt_BR.po create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/tr.po create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/models/maintenance_team.py create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/views/maintenance_equipment_views.xml create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/views/maintenance_request_views.xml create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/views/maintenance_team_views.xml create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/views/report_maintenance_request.xml create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/README.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/README.rst create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/__init__.py create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/i18n/base_maintenance_config.pot create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/readme/CONFIGURE.rst create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/readme/USAGE.rst create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/views/res_config_settings.xml create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_config/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/README.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/README.rst create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/__init__.py create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/data/maintenance_data.xml create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/base_maintenance_group.pot create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/pt_BR.po create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/sk.po create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/menuitems.xml create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/readme/USAGE.rst create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/security/maintenance_security.xml create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-base_maintenance_group/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/i18n/maintenance_account.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/models/account_move.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/models/maintenance_equipment.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/readme/USAGE.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/tests/test_maintenance_account.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/views/account_move_view.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/views/maintenance_equipment_view.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_account/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/fr.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/maintenance_equipment_category_hierarchy.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/models/maintenance_equipment_category.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/tests/test_maintenance_category.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/views/maintenance_equipment_category.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/i18n/maintenance_equipment_certification.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/models/maintenance_equipment.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/models/maintenance_equipment_certificate.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/readme/USAGE.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/security/ir.model.access.csv create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/tests/test_maintenance_equipment_certification.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/views/maintenance_equipment_views.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_certification/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/demo/maintenance_equipment_contract_demo.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/maintenance_equipment_contract.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/pt_BR.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/models/contract_contract.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/models/maintenance_equipment.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/tests/test_equipment_contract.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/views/contract_contract.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/views/maintenance_equipment.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_contract/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/data/demo_maintenance_equipment_hierarchy.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/fr.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/maintenance_equipment_hierarchy.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/sk.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/models/maintenance_equipment.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/tests/test_maintenance_equipment_hierarchy.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/views/maintenance_equipment_views.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/maintenance_equipment_image.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/pt.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/models/maintenance_equipment.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/views/maintenance_equipment_views.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_image/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/i18n/maintenance_equipment_sequence.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/models/maintenance.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/tests/test_maintenance_equipment_sequence.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/views/maintenance_views.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_sequence/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/data/demo_maintenance_equipment_status.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/i18n/maintenance_equipment_status.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/models/maintenance_equipment.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/models/maintenance_equipment_status.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/readme/CONFIGURATION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/security/ir.model.access.csv create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/views/maintenance_equipment_status_views.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/views/maintenance_equipment_views.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_status/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/demo/maintenance_equipment_tags_demo.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/maintenance_equipment_tags.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/pt.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/pt_BR.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/models/maintenance_equipment.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/models/maintenance_equipment_tag.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/security/ir.model.access.csv create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/views/maintenance_equipment.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/views/maintenance_equipment_tag.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_tags/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/data/ir_sequence_data.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/i18n/maintenance_equipment_usage.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/models/maintenance_equipment.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/models/maintenance_equipment_usage.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/security/ir.model.access.csv create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/security/security.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/tests/test_maintenance_equipment_usage.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/views/maintenance_equipment_usage_views.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/views/maintenance_equipment_view.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_equipment_usage/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/i18n/maintenance_location.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/maintenance_equipment.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/maintenance_location.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/maintenance_plan.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/maintenance_request.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/security/ir.model.access.csv create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/tests/test_maintenance_location.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/views/maintenance_equipment.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/views/maintenance_location.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/views/maintenance_plan.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/views/maintenance_request.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_location/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/data/demo_maintenance_plan.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/hooks.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/maintenance_plan.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/pt.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/zh_CN.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/maintenance_equipment.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/maintenance_kind.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/maintenance_plan.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/maintenance_request.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/readme/INSTALL.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/readme/USAGE.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/security/ir.model.access.csv create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/security/maintenance_security.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/tests/common.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/tests/test_maintenance_plan.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/tests/test_maintenance_plan_domain.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/views/maintenance_equipment_views.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/views/maintenance_kind_views.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/views/maintenance_plan_views.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/views/report_maintenance_request.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/i18n/maintenance_plan_activity.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/models/maintenance.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/models/maintenance_planned_activity.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/security/ir.model.access.csv create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/static/description/maintenance_plan_activity.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/tests/test_maintenance_plan_activity.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/views/maintenance_views.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_plan_activity/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/i18n/maintenance_product.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/maintenance_equipment.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/product_category.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/product_product.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/product_template.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/readme/USAGE.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/tests/common.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/tests/test_maintenance_product.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/views/maintenance_equipment_view.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/views/product_template_view.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_product/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/data/demo_maintenance_project.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/i18n/maintenance_project.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/migrations/16.0.2.0.0/post-migration.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/models/maintenance_equipment.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/models/maintenance_request.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/models/project_project.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/report/maintenance_request_report.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/tests/test_maintenance_project.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/views/maintenance_equipment_views.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/views/maintenance_request_views.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/views/project_project_views.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_project/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/i18n/maintenance_purchase.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/models/maintenance_equipment.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/models/purchase_order.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/tests/test_purchase_order.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/views/maintenance_equipment.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/views/purchase_order.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_purchase/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/fr.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/maintenance_remote.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/pt_BR.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/models/maintenance_request.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/views/maintenance_request.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_remote/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/ca.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/maintenance_request_purchase.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/models/maintenance_request.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/models/purchase_order.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/tests/test_maintenance_purchase.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/views/maintenance_request.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/views/purchase_order_views.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_purchase/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/i18n/maintenance_request_repair.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/i18n/pt_BR.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/models/maintenance_request.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/models/repair_order.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/readme/USAGE.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/tests/test_repair_order.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/views/maintenance_request.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/maintenance_request_repair/views/repair_order.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_repair/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/data/maintenance_request_data.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/maintenance_request_sequence.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/pt_BR.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/models/maintenance_request.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/models/maintenance_team.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/tests/test_maintenance_request_sequence.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/views/maintenance_request.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/views/maintenance_team.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_sequence/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/data/demo_maintenance_request_stage_transition.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/i18n/maintenance_request_stage_transition.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/models/maintenance_request.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/models/maintenance_stage.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/readme/USAGE.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/tests/test_flow.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/views/maintenance_request.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/views/maintenance_stage.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_request_stage_transition/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/i18n/maintenance_security.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/models/mail_followers.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/tests/test_maintenance_security.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/views/maintenance_views.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_security/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/demo/maintenance_request_demo.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/demo/maintenance_team_demo.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/maintenance_team_hierarchy.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/pt_BR.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/models/maintenance_team.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/tests/test_team_hierarchy.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/views/maintenance_team.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_team_hierarchy/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/data/demo_maintenance_timesheet.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/i18n/maintenance_timesheet.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/migrations/16.0.2.1.0/noupdate_changes.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/migrations/16.0.2.1.0/post-migration.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/models/hr_timesheet.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/models/maintenance_equipment.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/models/maintenance_request.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/report/maintenance_request_report.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/security/maintenance_timesheet_security.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/tests/test_maintenance_timesheet.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/views/hr_timesheet_views.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/views/maintenance_request_views.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet/pyproject.toml create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/README.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/ARCHITECTURE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/CONFIGURATION.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/CONTROLLERS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/DEPENDENCIES.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/FAQ.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/INSTALL.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/MODELS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/OVERVIEW.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/REPORTS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/SECURITY.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/TROUBLESHOOTING.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/USAGE.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/WIZARDS.md create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/README.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/__manifest__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/i18n/bs.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/i18n/es.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/i18n/it.po create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/i18n/maintenance_timesheet_time_control.pot create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/models/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/models/maintenance_request.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/CONFIGURE.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/CONTRIBUTORS.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/DESCRIPTION.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/INSTALL.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/USAGE.rst create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/static/description/icon.png create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/static/description/index.html create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/tests/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/tests/test_maintenance_timesheet_time_control.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/views/maintenance_request_view.xml create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/wizards/__init__.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/wizards/hr_timesheet_switch.py create mode 100644 odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/pyproject.toml diff --git a/odoo-bringout-oca-maintenance-base_maintenance/README.md b/odoo-bringout-oca-maintenance-base_maintenance/README.md new file mode 100644 index 0000000..a53c4a8 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/README.md @@ -0,0 +1,44 @@ +# Base Maintenance + +Odoo addon: base_maintenance + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-base_maintenance +``` + +## Dependencies + +This addon depends on: +- maintenance + +## Manifest Information + +- **Name**: Base Maintenance +- **Version**: 16.0.1.0.2 +- **Category**: Maintenance +- **License**: LGPL-3 +- **Installable**: True + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `base_maintenance`. + +## License + +This package maintains the original LGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/README.rst b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/README.rst new file mode 100644 index 0000000..6581993 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/README.rst @@ -0,0 +1,85 @@ +================ +Base Maintenance +================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:a89cdc6a8983da7d4c5c6f938dea66e7e705d467122669fa664e5f3df19de91c + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmaintenance-lightgray.png?logo=github + :target: https://github.com/OCA/maintenance/tree/16.0/base_maintenance + :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-base_maintenance + :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 to add +some basic features that are standard in other Odoo apps: + +* Team leader in maintenance team. +* Description field in maintenance team. +* Creates the unexisting search view for maintenance team. +* Empty button box on maintenance request to be extended by other modules. +* Maintenance Request Report + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* ForgeFlow + +Contributors +~~~~~~~~~~~~ + +* Lois Rilo +* Marcel Savegnago +* David Alonso + +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 `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/__init__.py b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/__manifest__.py b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/__manifest__.py new file mode 100644 index 0000000..a42be64 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2019 ForgeFlow S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +{ + "name": "Base Maintenance", + "version": "16.0.1.0.2", + "author": "ForgeFlow, Odoo Community Association (OCA)", + "development_status": "Beta", + "website": "https://github.com/OCA/maintenance", + "category": "Maintenance", + "license": "LGPL-3", + "depends": ["maintenance"], + "data": [ + "views/maintenance_team_views.xml", + "views/maintenance_request_views.xml", + "views/maintenance_equipment_views.xml", + "views/report_maintenance_request.xml", + ], + "installable": True, +} diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/base_maintenance.pot b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/base_maintenance.pot new file mode 100644 index 0000000..8e85fad --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/base_maintenance.pot @@ -0,0 +1,125 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_maintenance +# +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: base_maintenance +#: model:ir.actions.report,print_report_name:base_maintenance.action_report_maintenance_request +msgid "'Maintenance Request - %s' % (object.name)" +msgstr "" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Maintenance Request" +msgstr "" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Category:" +msgstr "" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Close Date:" +msgstr "" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Description:" +msgstr "" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Duration:" +msgstr "" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Equipment:" +msgstr "" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Maintenance Type:" +msgstr "" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Model:" +msgstr "" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Priority:" +msgstr "" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Request Date:" +msgstr "" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Requested By:" +msgstr "" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Responsible:" +msgstr "" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Schedule Date:" +msgstr "" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Serial:" +msgstr "" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Stage:" +msgstr "" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Team:" +msgstr "" + +#. module: base_maintenance +#: model:ir.model.fields,field_description:base_maintenance.field_maintenance_team__description +#: model_terms:ir.ui.view,arch_db:base_maintenance.equipment_request_view_form +msgid "Description" +msgstr "" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.maintenance_team_view_form +msgid "Description of the team's function" +msgstr "" + +#. module: base_maintenance +#: model:ir.actions.report,name:base_maintenance.action_report_maintenance_request +msgid "Maintenance Request" +msgstr "" + +#. module: base_maintenance +#: model:ir.model,name:base_maintenance.model_maintenance_team +msgid "Maintenance Teams" +msgstr "" + +#. module: base_maintenance +#: model:ir.model.fields,field_description:base_maintenance.field_maintenance_team__user_id +msgid "Team Leader" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/bs.po b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/bs.po new file mode 100644 index 0000000..532a2b1 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/bs.po @@ -0,0 +1,125 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_maintenance +# +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: base_maintenance +#: model:ir.actions.report,print_report_name:base_maintenance.action_report_maintenance_request +msgid "'Maintenance Request - %s' % (object.name)" +msgstr "'Zahtjev za održavanje - %s' % (object.name)" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Maintenance Request" +msgstr "Zahtjev za održavanje" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Category:" +msgstr "Kategorija:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Close Date:" +msgstr "Datum zatvaranja:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Description:" +msgstr "Opis:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Duration:" +msgstr "Trajanje:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Equipment:" +msgstr "Oprema:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Maintenance Type:" +msgstr "Tip održavanja:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Model:" +msgstr "Model:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Priority:" +msgstr "Prioritet:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Request Date:" +msgstr "Datum zahtjeva:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Requested By:" +msgstr "Zahtijevano od:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Responsible:" +msgstr "Odgovoran:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Schedule Date:" +msgstr "Planirani datum:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Serial:" +msgstr "Serijski broj:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Stage:" +msgstr "Faza:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Team:" +msgstr "Tim:" + +#. module: base_maintenance +#: model:ir.model.fields,field_description:base_maintenance.field_maintenance_team__description +#: model_terms:ir.ui.view,arch_db:base_maintenance.equipment_request_view_form +msgid "Description" +msgstr "Opis" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.maintenance_team_view_form +msgid "Description of the team's function" +msgstr "Opis funkcije tima" + +#. module: base_maintenance +#: model:ir.actions.report,name:base_maintenance.action_report_maintenance_request +msgid "Maintenance Request" +msgstr "Zahtjev za održavanje" + +#. module: base_maintenance +#: model:ir.model,name:base_maintenance.model_maintenance_team +msgid "Maintenance Teams" +msgstr "Timovi za održavanje" + +#. module: base_maintenance +#: model:ir.model.fields,field_description:base_maintenance.field_maintenance_team__user_id +msgid "Team Leader" +msgstr "Vođa tima" diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/es.po b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/es.po new file mode 100644 index 0000000..07f4276 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/es.po @@ -0,0 +1,128 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_maintenance +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-07-22 23:09+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: base_maintenance +#: model:ir.actions.report,print_report_name:base_maintenance.action_report_maintenance_request +msgid "'Maintenance Request - %s' % (object.name)" +msgstr "'Solicitud de mantenimiento - %s' % (object.name)" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Maintenance Request" +msgstr "Solicitud de mantenimiento" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Category:" +msgstr "Categoría:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Close Date:" +msgstr "Fecha de cierre:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Description:" +msgstr "Descripción:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Duration:" +msgstr "Duración:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Equipment:" +msgstr "Equipamiento:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Maintenance Type:" +msgstr "Tipo de mantenimiento:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Model:" +msgstr "Modelo:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Priority:" +msgstr "Prioridad:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Request Date:" +msgstr "Fecha de solicitud:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Requested By:" +msgstr "Solicitado por:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Responsible:" +msgstr "Responsable:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Schedule Date:" +msgstr "Fecha programada:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Serial:" +msgstr "Serie:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Stage:" +msgstr "Estado:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Team:" +msgstr "Equipo:" + +#. module: base_maintenance +#: model:ir.model.fields,field_description:base_maintenance.field_maintenance_team__description +#: model_terms:ir.ui.view,arch_db:base_maintenance.equipment_request_view_form +msgid "Description" +msgstr "descripción" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.maintenance_team_view_form +msgid "Description of the team's function" +msgstr "Descripción de la función del equipo" + +#. module: base_maintenance +#: model:ir.actions.report,name:base_maintenance.action_report_maintenance_request +msgid "Maintenance Request" +msgstr "Solicitud de mantenimiento" + +#. module: base_maintenance +#: model:ir.model,name:base_maintenance.model_maintenance_team +msgid "Maintenance Teams" +msgstr "Equipos de Mantenimiento" + +#. module: base_maintenance +#: model:ir.model.fields,field_description:base_maintenance.field_maintenance_team__user_id +msgid "Team Leader" +msgstr "Líder de equipo" diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/it.po b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/it.po new file mode 100644 index 0000000..424a71b --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/it.po @@ -0,0 +1,137 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_maintenance +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-07-28 11:49+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: base_maintenance +#: model:ir.actions.report,print_report_name:base_maintenance.action_report_maintenance_request +msgid "'Maintenance Request - %s' % (object.name)" +msgstr "'Richiesta manutenzione - %s' % (object.name)" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Maintenance Request" +msgstr "Richiesta manutenzione" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Category:" +msgstr "Categoria:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Close Date:" +msgstr "Data chiusura:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Description:" +msgstr "Descrizione:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Duration:" +msgstr "Durata:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Equipment:" +msgstr "Attrezzatura:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Maintenance Type:" +msgstr "Tipo manutenzione:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Model:" +msgstr "Modello:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Priority:" +msgstr "Priorità:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Request Date:" +msgstr "Data richiesta:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Requested By:" +msgstr "Richiesta da:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Responsible:" +msgstr "Responsabile:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Schedule Date:" +msgstr "Data programmata:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Serial:" +msgstr "Matricola:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Stage:" +msgstr "Fase:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Team:" +msgstr "Squadra:" + +#. module: base_maintenance +#: model:ir.model.fields,field_description:base_maintenance.field_maintenance_team__description +#: model_terms:ir.ui.view,arch_db:base_maintenance.equipment_request_view_form +msgid "Description" +msgstr "Descrizione" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.maintenance_team_view_form +msgid "Description of the team's function" +msgstr "Descrizione del compito del team" + +#. module: base_maintenance +#: model:ir.actions.report,name:base_maintenance.action_report_maintenance_request +msgid "Maintenance Request" +msgstr "Richiesta manutenzione" + +#. module: base_maintenance +#: model:ir.model,name:base_maintenance.model_maintenance_team +msgid "Maintenance Teams" +msgstr "Squadra manutenzione" + +#. module: base_maintenance +#: model:ir.model.fields,field_description:base_maintenance.field_maintenance_team__user_id +msgid "Team Leader" +msgstr "Responsabile squadra" + +#~ msgid "Display Name" +#~ msgstr "Nome visualizzato" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima modifica il" diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/pt.po b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/pt.po new file mode 100644 index 0000000..245072f --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/pt.po @@ -0,0 +1,128 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_maintenance +# +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 \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: base_maintenance +#: model:ir.actions.report,print_report_name:base_maintenance.action_report_maintenance_request +msgid "'Maintenance Request - %s' % (object.name)" +msgstr "‘Pedido de Manutenção - %s' % (object.name)" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Maintenance Request" +msgstr "Pedido de Manutenção" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Category:" +msgstr "Categoria:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Close Date:" +msgstr "Data de Encerramento:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Description:" +msgstr "Descrição:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Duration:" +msgstr "Duração:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Equipment:" +msgstr "Equipamento:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Maintenance Type:" +msgstr "Tipo de Manutenção:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Model:" +msgstr "Modelo:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Priority:" +msgstr "Prioridade:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Request Date:" +msgstr "Data do Pedido:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Requested By:" +msgstr "Solicitado por:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Responsible:" +msgstr "Responsável:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Schedule Date:" +msgstr "Data Agendada:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Serial:" +msgstr "Nº Série:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Stage:" +msgstr "Etapa:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Team:" +msgstr "Equipa:" + +#. module: base_maintenance +#: model:ir.model.fields,field_description:base_maintenance.field_maintenance_team__description +#: model_terms:ir.ui.view,arch_db:base_maintenance.equipment_request_view_form +msgid "Description" +msgstr "Descrição" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.maintenance_team_view_form +msgid "Description of the team's function" +msgstr "Descrição da função da equipa" + +#. module: base_maintenance +#: model:ir.actions.report,name:base_maintenance.action_report_maintenance_request +msgid "Maintenance Request" +msgstr "Pedido de Manutenção" + +#. module: base_maintenance +#: model:ir.model,name:base_maintenance.model_maintenance_team +msgid "Maintenance Teams" +msgstr "Equipas de Manutenção" + +#. module: base_maintenance +#: model:ir.model.fields,field_description:base_maintenance.field_maintenance_team__user_id +msgid "Team Leader" +msgstr "Líder da Equipa" diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/pt_BR.po b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/pt_BR.po new file mode 100644 index 0000000..9699bc0 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/pt_BR.po @@ -0,0 +1,136 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_maintenance +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-07-16 16:08+0000\n" +"PO-Revision-Date: 2024-05-21 00:57+0000\n" +"Last-Translator: Rodrigo Macedo \n" +"Language-Team: \n" +"Language: pt_BR\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: base_maintenance +#: model:ir.actions.report,print_report_name:base_maintenance.action_report_maintenance_request +msgid "'Maintenance Request - %s' % (object.name)" +msgstr "???Solicita????o de Manuten????o - %s' % (object.name)" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Maintenance Request" +msgstr "Solicita????o de Manuten????o" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Category:" +msgstr "Categoria:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Close Date:" +msgstr "Data de Encerramento:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Description:" +msgstr "Descri????o:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Duration:" +msgstr "Dura????o:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Equipment:" +msgstr "Equipamento:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Maintenance Type:" +msgstr "Tipo de Manuten????o:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Model:" +msgstr "Modelo:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Priority:" +msgstr "Prioridade:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Request Date:" +msgstr "Data da Solicita????o:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Requested By:" +msgstr "Solicitado por:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Responsible:" +msgstr "Responsável:
" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Schedule Date:" +msgstr "Data do Agendamento:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Serial:" +msgstr "S??rie:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Stage:" +msgstr "Est??gio:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Team:" +msgstr "Equipe:" + +#. module: base_maintenance +#: model:ir.model.fields,field_description:base_maintenance.field_maintenance_team__description +#: model_terms:ir.ui.view,arch_db:base_maintenance.equipment_request_view_form +msgid "Description" +msgstr "Descri????o" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.maintenance_team_view_form +msgid "Description of the team's function" +msgstr "Descri????o da fun????o da equipe" + +#. module: base_maintenance +#: model:ir.actions.report,name:base_maintenance.action_report_maintenance_request +msgid "Maintenance Request" +msgstr "Solicita????o de Manuten????o" + +#. module: base_maintenance +#: model:ir.model,name:base_maintenance.model_maintenance_team +msgid "Maintenance Teams" +msgstr "Equipes de Manuten????o" + +#. module: base_maintenance +#: model:ir.model.fields,field_description:base_maintenance.field_maintenance_team__user_id +msgid "Team Leader" +msgstr "L??der de Equipe" + +#~ msgid "Archived" +#~ msgstr "Arquivado" + +#~ msgid "Equipament:" +#~ msgstr "Equipamento:" diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/tr.po b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/tr.po new file mode 100644 index 0000000..0dc915a --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/i18n/tr.po @@ -0,0 +1,128 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_maintenance +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-06-12 15:26+0000\n" +"Last-Translator: Betül Öğmen \n" +"Language-Team: none\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.10.4\n" + +#. module: base_maintenance +#: model:ir.actions.report,print_report_name:base_maintenance.action_report_maintenance_request +msgid "'Maintenance Request - %s' % (object.name)" +msgstr "'Bakım Talebi - %s' % (object.name)" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Maintenance Request" +msgstr "Bakım Talebi" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Category:" +msgstr "Kategori:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Close Date:" +msgstr "Kapanış Tarihi:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Description:" +msgstr "Açıklama:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Duration:" +msgstr "Süre:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Equipment:" +msgstr "Ekipman:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Maintenance Type:" +msgstr "Bakım Türü:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Model:" +msgstr "Model:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Priority:" +msgstr "Öncelik:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Request Date:" +msgstr "Talep Tarihi:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Requested By:" +msgstr "Talep Eden:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Responsible:" +msgstr "Sorumlu:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Schedule Date:" +msgstr "Planlama Tarihi:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Serial:" +msgstr "Seri:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Stage:" +msgstr "Aşama:" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.report_maintenance_request_document +msgid "Team:" +msgstr "Ekip:" + +#. module: base_maintenance +#: model:ir.model.fields,field_description:base_maintenance.field_maintenance_team__description +#: model_terms:ir.ui.view,arch_db:base_maintenance.equipment_request_view_form +msgid "Description" +msgstr "Açıklama" + +#. module: base_maintenance +#: model_terms:ir.ui.view,arch_db:base_maintenance.maintenance_team_view_form +msgid "Description of the team's function" +msgstr "Ekip fonksiyonunun açıklaması" + +#. module: base_maintenance +#: model:ir.actions.report,name:base_maintenance.action_report_maintenance_request +msgid "Maintenance Request" +msgstr "Bakım Talebi" + +#. module: base_maintenance +#: model:ir.model,name:base_maintenance.model_maintenance_team +msgid "Maintenance Teams" +msgstr "Bakım Ekipleri" + +#. module: base_maintenance +#: model:ir.model.fields,field_description:base_maintenance.field_maintenance_team__user_id +msgid "Team Leader" +msgstr "Ekip Lideri" diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/models/__init__.py b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/models/__init__.py new file mode 100644 index 0000000..e4c1bcb --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/models/__init__.py @@ -0,0 +1 @@ +from . import maintenance_team diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/models/maintenance_team.py b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/models/maintenance_team.py new file mode 100644 index 0000000..bdd63f5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/models/maintenance_team.py @@ -0,0 +1,11 @@ +# Copyright 2019 ForgeFlow S.L. +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + +from odoo import fields, models + + +class MaintenanceTeam(models.Model): + _inherit = "maintenance.team" + + user_id = fields.Many2one(comodel_name="res.users", string="Team Leader") + description = fields.Text() diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..bf667b6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* Lois Rilo +* Marcel Savegnago +* David Alonso diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/readme/DESCRIPTION.rst new file mode 100644 index 0000000..a018ff4 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/readme/DESCRIPTION.rst @@ -0,0 +1,8 @@ +This module extends the functionality of Odoo Maintenance module to add +some basic features that are standard in other Odoo apps: + +* Team leader in maintenance team. +* Description field in maintenance team. +* Creates the unexisting search view for maintenance team. +* Empty button box on maintenance request to be extended by other modules. +* Maintenance Request Report diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/static/description/icon.png b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/static/description/index.html b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/static/description/index.html new file mode 100644 index 0000000..4891063 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/static/description/index.html @@ -0,0 +1,433 @@ + + + + + +Base Maintenance + + + +
+

Base Maintenance

+ + +

Beta License: LGPL-3 OCA/maintenance Translate me on Weblate Try me on Runboat

+

This module extends the functionality of Odoo Maintenance module to add +some basic features that are standard in other Odoo apps:

+
    +
  • Team leader in maintenance team.
  • +
  • Description field in maintenance team.
  • +
  • Creates the unexisting search view for maintenance team.
  • +
  • Empty button box on maintenance request to be extended by other modules.
  • +
  • Maintenance Request Report
  • +
+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • ForgeFlow
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/views/maintenance_equipment_views.xml b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/views/maintenance_equipment_views.xml new file mode 100644 index 0000000..ef1983c --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/views/maintenance_equipment_views.xml @@ -0,0 +1,16 @@ + + + + + equipment.form + maintenance.equipment + + + +
+
+
+
+
+
diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/views/maintenance_request_views.xml b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/views/maintenance_request_views.xml new file mode 100644 index 0000000..7dc195c --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/views/maintenance_request_views.xml @@ -0,0 +1,25 @@ + + + + + equipment.request.form + maintenance.request + + + + +
+ +
+
+ + + + + + + +
+
+
diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/views/maintenance_team_views.xml b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/views/maintenance_team_views.xml new file mode 100644 index 0000000..69ab495 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/views/maintenance_team_views.xml @@ -0,0 +1,36 @@ + + + + + maintenance.team.form + maintenance.team + + + + + + + + + + + + + + maintenance.team.tree + maintenance.team + + + + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/views/report_maintenance_request.xml b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/views/report_maintenance_request.xml new file mode 100644 index 0000000..21ae678 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/base_maintenance/views/report_maintenance_request.xml @@ -0,0 +1,129 @@ + + + + + + + + Maintenance Request + maintenance.request + qweb-pdf + base_maintenance.report_maintenance_request + base_maintenance.report_maintenance_request + 'Maintenance Request - %s' % (object.name) + + report + + + diff --git a/odoo-bringout-oca-maintenance-base_maintenance/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-base_maintenance/doc/ARCHITECTURE.md new file mode 100644 index 0000000..2747562 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/doc/ARCHITECTURE.md @@ -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 Base_maintenance Module - base_maintenance + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-base_maintenance/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-base_maintenance/doc/CONFIGURATION.md new file mode 100644 index 0000000..d071c88 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for base_maintenance. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-base_maintenance/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-base_maintenance/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-base_maintenance/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-base_maintenance/doc/DEPENDENCIES.md new file mode 100644 index 0000000..a7cb7c6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/doc/DEPENDENCIES.md @@ -0,0 +1,5 @@ +# Dependencies + +This addon depends on: + +- [maintenance](https://github.com/bringout/oca-ocb-vertical-industry/tree/a60a29f57ff34f3c01d0521d0a6003956d80acd9/odoo-bringout-oca-ocb-maintenance) diff --git a/odoo-bringout-oca-maintenance-base_maintenance/doc/FAQ.md b/odoo-bringout-oca-maintenance-base_maintenance/doc/FAQ.md new file mode 100644 index 0000000..5cc3cbe --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/doc/FAQ.md @@ -0,0 +1,4 @@ +# FAQ + +- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged). +- Q: How to enable? A: Start server with --addon base_maintenance or install in UI. diff --git a/odoo-bringout-oca-maintenance-base_maintenance/doc/INSTALL.md b/odoo-bringout-oca-maintenance-base_maintenance/doc/INSTALL.md new file mode 100644 index 0000000..e41c93f --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-base_maintenance" +# or +uv pip install odoo-bringout-oca-maintenance-base_maintenance" +``` diff --git a/odoo-bringout-oca-maintenance-base_maintenance/doc/MODELS.md b/odoo-bringout-oca-maintenance-base_maintenance/doc/MODELS.md new file mode 100644 index 0000000..ccc6f4b --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/doc/MODELS.md @@ -0,0 +1,12 @@ +# Models + +Detected core models and extensions in base_maintenance. + +```mermaid +classDiagram + class maintenance_team +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-base_maintenance/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-base_maintenance/doc/OVERVIEW.md new file mode 100644 index 0000000..27d48ec --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: base_maintenance. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon base_maintenance +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-base_maintenance/doc/REPORTS.md b/odoo-bringout-oca-maintenance-base_maintenance/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-base_maintenance/doc/SECURITY.md b/odoo-bringout-oca-maintenance-base_maintenance/doc/SECURITY.md new file mode 100644 index 0000000..e07da9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/doc/SECURITY.md @@ -0,0 +1,8 @@ +# Security + +This module does not define custom security rules or access controls beyond Odoo defaults. + +Default Odoo security applies: +- Base user access through standard groups +- Model access inherited from dependencies +- No custom row-level security rules diff --git a/odoo-bringout-oca-maintenance-base_maintenance/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-base_maintenance/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-base_maintenance/doc/USAGE.md b/odoo-bringout-oca-maintenance-base_maintenance/doc/USAGE.md new file mode 100644 index 0000000..84bb4e6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/doc/USAGE.md @@ -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 base_maintenance +``` diff --git a/odoo-bringout-oca-maintenance-base_maintenance/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-base_maintenance/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-base_maintenance/pyproject.toml b/odoo-bringout-oca-maintenance-base_maintenance/pyproject.toml new file mode 100644 index 0000000..4473155 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance/pyproject.toml @@ -0,0 +1,42 @@ +[project] +name = "odoo-bringout-oca-maintenance-base_maintenance" +version = "16.0.0" +description = "Base Maintenance - Odoo addon" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-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 = ["base_maintenance"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/README.md b/odoo-bringout-oca-maintenance-base_maintenance_config/README.md new file mode 100644 index 0000000..1cb9220 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/README.md @@ -0,0 +1,44 @@ +# Maintenance Settings + +Odoo addon: base_maintenance_config + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-base_maintenance_config +``` + +## Dependencies + +This addon depends on: +- maintenance + +## Manifest Information + +- **Name**: Maintenance Settings +- **Version**: 16.0.1.0.0 +- **Category**: Maintenance +- **License**: AGPL-3 +- **Installable**: False + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `base_maintenance_config`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/README.rst b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/README.rst new file mode 100644 index 0000000..44cdc4e --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/README.rst @@ -0,0 +1,130 @@ +==================== +Maintenance Settings +==================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:658988c6ba9c1d353e20060bf2364a835066b73c622f089c3c655d7d9b39907e + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/base_maintenance_config + :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-base_maintenance_config + :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 provides an empty general settings section for the maintenance +configuration. + +This is a technical module and it doesn't provide any new functionality. +Extend this module to add general settings related to the maintenance app. + +When extending the general settings view, here is an example of how the code +would look like: + +.. code:: xml + + + res.config.settings + + + +
+
+
+
+
+
+
+ +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To let one user access the general settings section for the maintenance +configuration, you should assign the 'Equipments Manager' group to that user. + +To do so, you need to: + +#. Go on 'Settings' -> 'Users & Companies' -> 'Groups'. +#. Open the group 'Maintenance / Equipment Manager' form. +#. In the tab 'Users', add the user you want to give access to. + +Usage +===== + +To use this module, you need to: + +#. Go to *Maintenance > Configuration > General Settings*. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Onestein + +Contributors +~~~~~~~~~~~~ + +* Antonio Esposito +* Andrea Stirpe + +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 `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/__init__.py b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/__init__.py new file mode 100644 index 0000000..ef5ae35 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/__init__.py @@ -0,0 +1 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/__manifest__.py b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/__manifest__.py new file mode 100644 index 0000000..e4802d4 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/__manifest__.py @@ -0,0 +1,14 @@ +# Copyright 2017-2019 Onestein () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "Maintenance Settings", + "summary": "Provides general settings for the Maintenance App", + "author": "Onestein, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/maintenance", + "category": "Maintenance", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "depends": ["maintenance"], + "data": ["views/res_config_settings.xml"], +} diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/i18n/base_maintenance_config.pot b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/i18n/base_maintenance_config.pot new file mode 100644 index 0000000..70a9d26 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/i18n/base_maintenance_config.pot @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_maintenance_config +# +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: base_maintenance_config +#: model_terms:ir.ui.view,arch_db:base_maintenance_config.res_config_settings_view_form +msgid "Configure Maintenance" +msgstr "" + +#. module: base_maintenance_config +#: model:ir.actions.act_window,name:base_maintenance_config.action_maintenance_config_settings +#: model:ir.ui.menu,name:base_maintenance_config.menu_maintenance_config_settings +msgid "General Settings" +msgstr "" + +#. module: base_maintenance_config +#: model_terms:ir.ui.view,arch_db:base_maintenance_config.res_config_settings_view_form +msgid "Maintenance" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/i18n/bs.po b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/i18n/bs.po new file mode 100644 index 0000000..85e59a7 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/i18n/bs.po @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_maintenance_config +# +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: base_maintenance_config +#: model_terms:ir.ui.view,arch_db:base_maintenance_config.res_config_settings_view_form +msgid "Configure Maintenance" +msgstr "Konfigurišite održavanje" + +#. module: base_maintenance_config +#: model:ir.actions.act_window,name:base_maintenance_config.action_maintenance_config_settings +#: model:ir.ui.menu,name:base_maintenance_config.menu_maintenance_config_settings +msgid "General Settings" +msgstr "Opšte postavke" + +#. module: base_maintenance_config +#: model_terms:ir.ui.view,arch_db:base_maintenance_config.res_config_settings_view_form +msgid "Maintenance" +msgstr "Održavanje" diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/i18n/es.po b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/i18n/es.po new file mode 100644 index 0000000..633f67e --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/i18n/es.po @@ -0,0 +1,33 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_maintenance_config +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-07-06 13:48+0000\n" +"Last-Translator: David Alonso (Solvos) \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: base_maintenance_config +#: model_terms:ir.ui.view,arch_db:base_maintenance_config.res_config_settings_view_form +msgid "Configure Maintenance" +msgstr "Configurar Mantenimiento" + +#. module: base_maintenance_config +#: model:ir.actions.act_window,name:base_maintenance_config.action_maintenance_config_settings +#: model:ir.ui.menu,name:base_maintenance_config.menu_maintenance_config_settings +msgid "General Settings" +msgstr "Configuración" + +#. module: base_maintenance_config +#: model_terms:ir.ui.view,arch_db:base_maintenance_config.res_config_settings_view_form +msgid "Maintenance" +msgstr "Mantenimiento" diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/i18n/it.po b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/i18n/it.po new file mode 100644 index 0000000..9368cb0 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/i18n/it.po @@ -0,0 +1,33 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_maintenance_config +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-07-23 15:49+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: base_maintenance_config +#: model_terms:ir.ui.view,arch_db:base_maintenance_config.res_config_settings_view_form +msgid "Configure Maintenance" +msgstr "Configurazione Manutenzione" + +#. module: base_maintenance_config +#: model:ir.actions.act_window,name:base_maintenance_config.action_maintenance_config_settings +#: model:ir.ui.menu,name:base_maintenance_config.menu_maintenance_config_settings +msgid "General Settings" +msgstr "Impostazioni generali" + +#. module: base_maintenance_config +#: model_terms:ir.ui.view,arch_db:base_maintenance_config.res_config_settings_view_form +msgid "Maintenance" +msgstr "Manutenzione" diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/readme/CONFIGURE.rst b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/readme/CONFIGURE.rst new file mode 100644 index 0000000..2686e65 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/readme/CONFIGURE.rst @@ -0,0 +1,8 @@ +To let one user access the general settings section for the maintenance +configuration, you should assign the 'Equipments Manager' group to that user. + +To do so, you need to: + +#. Go on 'Settings' -> 'Users & Companies' -> 'Groups'. +#. Open the group 'Maintenance / Equipment Manager' form. +#. In the tab 'Users', add the user you want to give access to. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..d3948e9 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Antonio Esposito +* Andrea Stirpe diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/readme/DESCRIPTION.rst new file mode 100644 index 0000000..e71298f --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/readme/DESCRIPTION.rst @@ -0,0 +1,35 @@ +This module provides an empty general settings section for the maintenance +configuration. + +This is a technical module and it doesn't provide any new functionality. +Extend this module to add general settings related to the maintenance app. + +When extending the general settings view, here is an example of how the code +would look like: + +.. code:: xml + + + res.config.settings + + + +
+
+
+
+
+
+
diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/readme/USAGE.rst b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/readme/USAGE.rst new file mode 100644 index 0000000..3b4096d --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/readme/USAGE.rst @@ -0,0 +1,3 @@ +To use this module, you need to: + +#. Go to *Maintenance > Configuration > General Settings*. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/static/description/icon.png b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/static/description/index.html b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/static/description/index.html new file mode 100644 index 0000000..0d8bd5f --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/static/description/index.html @@ -0,0 +1,475 @@ + + + + + +Maintenance Settings + + + +
+

Maintenance Settings

+ + +

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

+

This module provides an empty general settings section for the maintenance +configuration.

+

This is a technical module and it doesn’t provide any new functionality. +Extend this module to add general settings related to the maintenance app.

+

When extending the general settings view, here is an example of how the code +would look like:

+
+<record id="res_config_settings_view_form" model="ir.ui.view">
+    <field name="model">res.config.settings</field>
+    <field name="inherit_id" ref="base_maintenance_config.res_config_settings_view_form"/>
+    <field name="arch" type="xml">
+        <xpath expr="//div[@id='configure_maintenance']" position="after">
+            <div class="col-xs-12 col-md-6 o_setting_box">
+                <div class="o_setting_right_pane">
+                    <label for="new_field_name"/>
+                    <span class="fa fa-lg fa-building-o" title="Values set here are company-specific." groups="base.group_multi_company"/>
+                    <div class="row">
+                        <div class="text-muted col-md-8">
+                            Set some configuration data for this field ...
+                        </div>
+                    </div>
+                    <div class="content-group">
+                        <div class="mt16">
+                            <field name="new_field_name" class="o_light_label"/>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </xpath>
+    </field>
+</record>
+
+

Table of contents

+ +
+

Configuration

+

To let one user access the general settings section for the maintenance +configuration, you should assign the ‘Equipments Manager’ group to that user.

+

To do so, you need to:

+
    +
  1. Go on ‘Settings’ -> ‘Users & Companies’ -> ‘Groups’.
  2. +
  3. Open the group ‘Maintenance / Equipment Manager’ form.
  4. +
  5. In the tab ‘Users’, add the user you want to give access to.
  6. +
+
+
+

Usage

+

To use this module, you need to:

+
    +
  1. Go to Maintenance > Configuration > General Settings.
  2. +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Onestein
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/views/res_config_settings.xml b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/views/res_config_settings.xml new file mode 100644 index 0000000..07e2fe6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/base_maintenance_config/views/res_config_settings.xml @@ -0,0 +1,43 @@ + + + + + res.config.settings + + + +
+

Maintenance

+
+
+
+
+
+
+ + General Settings + ir.actions.act_window + res.config.settings + form + inline + {'module' : 'maintenance'} + + +
diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/ARCHITECTURE.md new file mode 100644 index 0000000..47d68ed --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/ARCHITECTURE.md @@ -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 Base_maintenance_config Module - base_maintenance_config + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/CONFIGURATION.md new file mode 100644 index 0000000..ffb0b6d --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for base_maintenance_config. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/DEPENDENCIES.md new file mode 100644 index 0000000..a7cb7c6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/DEPENDENCIES.md @@ -0,0 +1,5 @@ +# Dependencies + +This addon depends on: + +- [maintenance](https://github.com/bringout/oca-ocb-vertical-industry/tree/a60a29f57ff34f3c01d0521d0a6003956d80acd9/odoo-bringout-oca-ocb-maintenance) diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/doc/FAQ.md b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/FAQ.md new file mode 100644 index 0000000..166b8f0 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/FAQ.md @@ -0,0 +1,4 @@ +# FAQ + +- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged). +- Q: How to enable? A: Start server with --addon base_maintenance_config or install in UI. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/doc/INSTALL.md b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/INSTALL.md new file mode 100644 index 0000000..523be87 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-base_maintenance_config" +# or +uv pip install odoo-bringout-oca-maintenance-base_maintenance_config" +``` diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/doc/MODELS.md b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/MODELS.md new file mode 100644 index 0000000..07e5f1e --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/MODELS.md @@ -0,0 +1,11 @@ +# Models + +Detected core models and extensions in base_maintenance_config. + +```mermaid +classDiagram +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/OVERVIEW.md new file mode 100644 index 0000000..ca9bd4d --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: base_maintenance_config. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon base_maintenance_config +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/doc/REPORTS.md b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/doc/SECURITY.md b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/SECURITY.md new file mode 100644 index 0000000..e07da9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/SECURITY.md @@ -0,0 +1,8 @@ +# Security + +This module does not define custom security rules or access controls beyond Odoo defaults. + +Default Odoo security applies: +- Base user access through standard groups +- Model access inherited from dependencies +- No custom row-level security rules diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/doc/USAGE.md b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/USAGE.md new file mode 100644 index 0000000..4af914e --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/USAGE.md @@ -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 base_maintenance_config +``` diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_config/pyproject.toml b/odoo-bringout-oca-maintenance-base_maintenance_config/pyproject.toml new file mode 100644 index 0000000..4e14e80 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_config/pyproject.toml @@ -0,0 +1,42 @@ +[project] +name = "odoo-bringout-oca-maintenance-base_maintenance_config" +version = "16.0.0" +description = "Maintenance Settings - Provides general settings for the Maintenance App" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-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 = ["base_maintenance_config"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/README.md b/odoo-bringout-oca-maintenance-base_maintenance_group/README.md new file mode 100644 index 0000000..6b238e9 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/README.md @@ -0,0 +1,44 @@ +# Maintenance Groups + +Odoo addon: base_maintenance_group + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-base_maintenance_group +``` + +## Dependencies + +This addon depends on: +- maintenance + +## Manifest Information + +- **Name**: Maintenance Groups +- **Version**: 16.0.1.0.0 +- **Category**: Maintenance +- **License**: AGPL-3 +- **Installable**: False + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `base_maintenance_group`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/README.rst b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/README.rst new file mode 100644 index 0000000..97270e8 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/README.rst @@ -0,0 +1,98 @@ +================== +Maintenance Groups +================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:7c718a98ca46c4a655437411ed50024b0c76f69f839b6141348a6b6a859f5696 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/base_maintenance_group + :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-base_maintenance_group + :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 provides a security group category 'Maintenance' with two new user +groups: + +- 'User' +- 'Full Access'. + +The user group 'Equipment Manager', already provided by the standard Odoo, +will also be listed in the group category 'Maintenance'. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +Assign any of the Maintenance groups ('User' or 'Equipment Manager' or +'Full Access') to the users, in order to enable the maintenance menus. + +To do so, you need to: + +#. Go on 'Settings' -> 'Users & Companies' -> 'Users'. +#. Create a new user or select an already existing one. +#. In the tab 'Access Rights', at the 'Application Accesses' paragraph, + set a group in the 'Maintenance' category. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Onestein + +Contributors +~~~~~~~~~~~~ + +* Antonio Esposito +* Andrea Stirpe +* Luisa Miguéns + +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 `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/__init__.py b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/__init__.py new file mode 100644 index 0000000..ef5ae35 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/__init__.py @@ -0,0 +1 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/__manifest__.py b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/__manifest__.py new file mode 100644 index 0000000..0d30cac --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/__manifest__.py @@ -0,0 +1,18 @@ +# Copyright 2017-2019 Onestein () +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "Maintenance Groups", + "summary": "Provides base access groups for the Maintenance App", + "author": "Onestein, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/maintenance", + "category": "Maintenance", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "depends": ["maintenance"], + "data": [ + "data/maintenance_data.xml", + "security/maintenance_security.xml", + "menuitems.xml", + ], +} diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/data/maintenance_data.xml b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/data/maintenance_data.xml new file mode 100644 index 0000000..8805b95 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/data/maintenance_data.xml @@ -0,0 +1,9 @@ + + + + + Maintenance + 103 + + diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/base_maintenance_group.pot b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/base_maintenance_group.pot new file mode 100644 index 0000000..8f7ba3b --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/base_maintenance_group.pot @@ -0,0 +1,29 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_maintenance_group +# +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: base_maintenance_group +#: model:res.groups,name:base_maintenance_group.group_maintenance_manager +msgid "Full Access" +msgstr "" + +#. module: base_maintenance_group +#: model:ir.module.category,name:base_maintenance_group.module_maintenance +msgid "Maintenance" +msgstr "" + +#. module: base_maintenance_group +#: model:res.groups,name:base_maintenance_group.group_maintenance_user +msgid "User" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/bs.po b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/bs.po new file mode 100644 index 0000000..54f5f71 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/bs.po @@ -0,0 +1,29 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_maintenance_group +# +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: base_maintenance_group +#: model:res.groups,name:base_maintenance_group.group_maintenance_manager +msgid "Full Access" +msgstr "Puni pristup" + +#. module: base_maintenance_group +#: model:ir.module.category,name:base_maintenance_group.module_maintenance +msgid "Maintenance" +msgstr "Održavanje" + +#. module: base_maintenance_group +#: model:res.groups,name:base_maintenance_group.group_maintenance_user +msgid "User" +msgstr "Korisnik" diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/es.po b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/es.po new file mode 100644 index 0000000..c0901b2 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/es.po @@ -0,0 +1,32 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_maintenance_group +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-07-22 23:09+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: base_maintenance_group +#: model:res.groups,name:base_maintenance_group.group_maintenance_manager +msgid "Full Access" +msgstr "Acceso total" + +#. module: base_maintenance_group +#: model:ir.module.category,name:base_maintenance_group.module_maintenance +msgid "Maintenance" +msgstr "Mantenimiento" + +#. module: base_maintenance_group +#: model:res.groups,name:base_maintenance_group.group_maintenance_user +msgid "User" +msgstr "Usuario" diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/it.po b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/it.po new file mode 100644 index 0000000..8cc3d8a --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/it.po @@ -0,0 +1,32 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_maintenance_group +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-07-23 15:49+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: base_maintenance_group +#: model:res.groups,name:base_maintenance_group.group_maintenance_manager +msgid "Full Access" +msgstr "Accesso completo" + +#. module: base_maintenance_group +#: model:ir.module.category,name:base_maintenance_group.module_maintenance +msgid "Maintenance" +msgstr "Manutenzione" + +#. module: base_maintenance_group +#: model:res.groups,name:base_maintenance_group.group_maintenance_user +msgid "User" +msgstr "Utente" diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/pt_BR.po b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/pt_BR.po new file mode 100644 index 0000000..71fac0d --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/pt_BR.po @@ -0,0 +1,32 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_maintenance_group +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-06-23 22:10+0000\n" +"Last-Translator: Fernando Colus \n" +"Language-Team: none\n" +"Language: pt_BR\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 3.10\n" + +#. module: base_maintenance_group +#: model:res.groups,name:base_maintenance_group.group_maintenance_manager +msgid "Full Access" +msgstr "Acesso Total" + +#. module: base_maintenance_group +#: model:ir.module.category,name:base_maintenance_group.module_maintenance +msgid "Maintenance" +msgstr "Manutenção" + +#. module: base_maintenance_group +#: model:res.groups,name:base_maintenance_group.group_maintenance_user +msgid "User" +msgstr "Usuário" diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/sk.po b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/sk.po new file mode 100644 index 0000000..e51c44e --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/i18n/sk.po @@ -0,0 +1,30 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * base_maintenance_group +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#. module: base_maintenance_group +#: model:res.groups,name:base_maintenance_group.group_maintenance_manager +msgid "Full Access" +msgstr "" + +#. module: base_maintenance_group +#: model:ir.module.category,name:base_maintenance_group.module_maintenance +msgid "Maintenance" +msgstr "" + +#. module: base_maintenance_group +#: model:res.groups,name:base_maintenance_group.group_maintenance_user +msgid "User" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/menuitems.xml b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/menuitems.xml new file mode 100644 index 0000000..a9add3a --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/menuitems.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..bacb807 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* Antonio Esposito +* Andrea Stirpe +* Luisa Miguéns diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/readme/DESCRIPTION.rst new file mode 100644 index 0000000..2890d83 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/readme/DESCRIPTION.rst @@ -0,0 +1,8 @@ +This module provides a security group category 'Maintenance' with two new user +groups: + +- 'User' +- 'Full Access'. + +The user group 'Equipment Manager', already provided by the standard Odoo, +will also be listed in the group category 'Maintenance'. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/readme/USAGE.rst b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/readme/USAGE.rst new file mode 100644 index 0000000..8ff2c54 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/readme/USAGE.rst @@ -0,0 +1,9 @@ +Assign any of the Maintenance groups ('User' or 'Equipment Manager' or +'Full Access') to the users, in order to enable the maintenance menus. + +To do so, you need to: + +#. Go on 'Settings' -> 'Users & Companies' -> 'Users'. +#. Create a new user or select an already existing one. +#. In the tab 'Access Rights', at the 'Application Accesses' paragraph, + set a group in the 'Maintenance' category. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/security/maintenance_security.xml b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/security/maintenance_security.xml new file mode 100644 index 0000000..95bc2a8 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/security/maintenance_security.xml @@ -0,0 +1,52 @@ + + + + + + User + + + + + + + + Full Access + + + + + + + + Only Subscribe Maintenance Team + + + [('member_ids', 'in', [user.id])] + + + + + + + All Maintenance Team + + + [(1, '=', 1)] + + + + + + + diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/static/description/icon.png b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/static/description/index.html b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/static/description/index.html new file mode 100644 index 0000000..562220f --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/base_maintenance_group/static/description/index.html @@ -0,0 +1,443 @@ + + + + + + +Maintenance Groups + + + +
+

Maintenance Groups

+ + +

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

+

This module provides a security group category ‘Maintenance’ with two new user +groups:

+
    +
  • ‘User’
  • +
  • ‘Full Access’.
  • +
+

The user group ‘Equipment Manager’, already provided by the standard Odoo, +will also be listed in the group category ‘Maintenance’.

+

Table of contents

+ +
+

Usage

+

Assign any of the Maintenance groups (‘User’ or ‘Equipment Manager’ or +‘Full Access’) to the users, in order to enable the maintenance menus.

+

To do so, you need to:

+
    +
  1. Go on ‘Settings’ -> ‘Users & Companies’ -> ‘Users’.
  2. +
  3. Create a new user or select an already existing one.
  4. +
  5. In the tab ‘Access Rights’, at the ‘Application Accesses’ paragraph, +set a group in the ‘Maintenance’ category.
  6. +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Onestein
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/ARCHITECTURE.md new file mode 100644 index 0000000..16d44af --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/ARCHITECTURE.md @@ -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 Base_maintenance_group Module - base_maintenance_group + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/CONFIGURATION.md new file mode 100644 index 0000000..6f332cf --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for base_maintenance_group. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/DEPENDENCIES.md new file mode 100644 index 0000000..a7cb7c6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/DEPENDENCIES.md @@ -0,0 +1,5 @@ +# Dependencies + +This addon depends on: + +- [maintenance](https://github.com/bringout/oca-ocb-vertical-industry/tree/a60a29f57ff34f3c01d0521d0a6003956d80acd9/odoo-bringout-oca-ocb-maintenance) diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/doc/FAQ.md b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/FAQ.md new file mode 100644 index 0000000..106743e --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/FAQ.md @@ -0,0 +1,4 @@ +# FAQ + +- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged). +- Q: How to enable? A: Start server with --addon base_maintenance_group or install in UI. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/doc/INSTALL.md b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/INSTALL.md new file mode 100644 index 0000000..e2b1a89 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-base_maintenance_group" +# or +uv pip install odoo-bringout-oca-maintenance-base_maintenance_group" +``` diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/doc/MODELS.md b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/MODELS.md new file mode 100644 index 0000000..df77bdc --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/MODELS.md @@ -0,0 +1,11 @@ +# Models + +Detected core models and extensions in base_maintenance_group. + +```mermaid +classDiagram +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/OVERVIEW.md new file mode 100644 index 0000000..712d5d4 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: base_maintenance_group. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon base_maintenance_group +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/doc/REPORTS.md b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/doc/SECURITY.md b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/SECURITY.md new file mode 100644 index 0000000..6e1c04a --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/SECURITY.md @@ -0,0 +1,66 @@ +# Security + +Access control and security definitions in base_maintenance_group. + +## Access Control Lists (ACLs) + +Model access permissions defined in: +- **[bosnian_translations.json](../bosnian_translations.json)** + - 1767 model access rules +- **[bosnian_translations_output.json](../bosnian_translations_output.json)** + - 414 model access rules +- **[CHANGELOG.md](../CHANGELOG.md)** + - 132 model access rules +- **[doc](../doc)** +- **[docker](../docker)** +- **[input](../input)** +- **[nix](../nix)** +- **[odoo.conf](../odoo.conf)** + - 58 model access rules +- **[odoo_packages_bez_l10n.txt](../odoo_packages_bez_l10n.txt)** + - 1947 model access rules +- **[odoo_packages_bringout.txt](../odoo_packages_bringout.txt)** + - 1947 model access rules +- **[odoo_packages.txt](../odoo_packages.txt)** + - 2085 model access rules +- **[output](../output)** +- **[packages](../packages)** +- **[PACKAGES.md](../PACKAGES.md)** + - 298 model access rules +- **[README.md](../README.md)** + - 338 model access rules +- **[scripts](../scripts)** +- **[temp](../temp)** +- **[TRANSLATION_BS_SUMMARY.md](../TRANSLATION_BS_SUMMARY.md)** + - 225 model access rules + +## Record Rules + +Row-level security rules defined in: + +## Security Groups & Configuration + +Security groups and permissions defined in: +- **[maintenance_security.xml](../base_maintenance_group/security/maintenance_security.xml)** + - 3 security groups defined + +```mermaid +graph TB + subgraph "Security Layers" + A[Users] --> B[Groups] + B --> C[Access Control Lists] + C --> D[Models] + B --> E[Record Rules] + E --> F[Individual Records] + end +``` + +Security files overview: +- **[maintenance_security.xml](../base_maintenance_group/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 diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/doc/USAGE.md b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/USAGE.md new file mode 100644 index 0000000..4950706 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/USAGE.md @@ -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 base_maintenance_group +``` diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-base_maintenance_group/pyproject.toml b/odoo-bringout-oca-maintenance-base_maintenance_group/pyproject.toml new file mode 100644 index 0000000..6ce75f7 --- /dev/null +++ b/odoo-bringout-oca-maintenance-base_maintenance_group/pyproject.toml @@ -0,0 +1,42 @@ +[project] +name = "odoo-bringout-oca-maintenance-base_maintenance_group" +version = "16.0.0" +description = "Maintenance Groups - Provides base access groups for the Maintenance App" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-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 = ["base_maintenance_group"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_account/README.md b/odoo-bringout-oca-maintenance-maintenance_account/README.md new file mode 100644 index 0000000..6f04644 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/README.md @@ -0,0 +1,45 @@ +# Maintenance Account + +Odoo addon: maintenance_account + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_account +``` + +## Dependencies + +This addon depends on: +- maintenance_product +- account + +## Manifest Information + +- **Name**: Maintenance Account +- **Version**: 16.0.1.1.1 +- **Category**: Maintenance +- **License**: AGPL-3 +- **Installable**: True + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_account`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_account/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_account/doc/ARCHITECTURE.md new file mode 100644 index 0000000..ff31bdf --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/doc/ARCHITECTURE.md @@ -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_account Module - maintenance_account + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_account/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_account/doc/CONFIGURATION.md new file mode 100644 index 0000000..09032e9 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_account. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_account/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_account/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_account/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_account/doc/DEPENDENCIES.md new file mode 100644 index 0000000..81f8012 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/doc/DEPENDENCIES.md @@ -0,0 +1,6 @@ +# Dependencies + +This addon depends on: + +- [maintenance_product](https://github.com/bringout/oca-technical) +- [account](https://github.com/bringout/oca-ocb-accounting/tree/b11fb50e2ed11eec1e305a0df730b49554c01199/odoo-bringout-oca-ocb-account) diff --git a/odoo-bringout-oca-maintenance-maintenance_account/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_account/doc/FAQ.md new file mode 100644 index 0000000..bd374cf --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/doc/FAQ.md @@ -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_account or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_account/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_account/doc/INSTALL.md new file mode 100644 index 0000000..9738691 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_account" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_account" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_account/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_account/doc/MODELS.md new file mode 100644 index 0000000..9307633 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/doc/MODELS.md @@ -0,0 +1,14 @@ +# Models + +Detected core models and extensions in maintenance_account. + +```mermaid +classDiagram + class account_move + class account_move_line + class maintenance_equipment +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_account/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_account/doc/OVERVIEW.md new file mode 100644 index 0000000..dfc16f1 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_account. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_account +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_account/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_account/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_account/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_account/doc/SECURITY.md new file mode 100644 index 0000000..e07da9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/doc/SECURITY.md @@ -0,0 +1,8 @@ +# Security + +This module does not define custom security rules or access controls beyond Odoo defaults. + +Default Odoo security applies: +- Base user access through standard groups +- Model access inherited from dependencies +- No custom row-level security rules diff --git a/odoo-bringout-oca-maintenance-maintenance_account/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_account/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_account/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_account/doc/USAGE.md new file mode 100644 index 0000000..5cadae7 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/doc/USAGE.md @@ -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_account +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_account/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_account/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/README.rst b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/README.rst new file mode 100644 index 0000000..dad65c5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/README.rst @@ -0,0 +1,100 @@ +=================== +Maintenance Account +=================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:56d49297cf10a1df7a32e1fb0bf4444cb2c14784d3780ac38df3056c37f60e23 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_account + :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_account + :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 automatically creates the equipment when validating the purchase invoices. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To use this module, you need to: + +* Go to *Invoicing > Vendor > Bills* and create a new one with any product with the "Can be Maintenance" field checked. +* Confirm the invoice. +* A new equipment category linked to the product line has been created (if the product category did not already have one linked). +* A smart-button is displayed with the equipments created (as many equipments as the quantity of product lines are created). + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* César Fernández Domínguez + +* `Tecnativa `_: + + * Víctor Martínez + * Pedro M. Baeza + * Carolina Fernandez + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-victoralmau| image:: https://github.com/victoralmau.png?size=40px + :target: https://github.com/victoralmau + :alt: victoralmau + +Current `maintainer `__: + +|maintainer-victoralmau| + +This module is part of the `OCA/maintenance `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/__init__.py b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/__manifest__.py new file mode 100644 index 0000000..5601fb0 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/__manifest__.py @@ -0,0 +1,17 @@ +# Copyright 2022 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Maintenance Account", + "version": "16.0.1.1.1", + "category": "Maintenance", + "website": "https://github.com/OCA/maintenance", + "author": "Tecnativa, Odoo Community Association (OCA)", + "license": "AGPL-3", + "depends": ["maintenance_product", "account"], + "installable": True, + "data": [ + "views/maintenance_equipment_view.xml", + "views/account_move_view.xml", + ], + "maintainers": ["victoralmau"], +} diff --git a/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/i18n/bs.po new file mode 100644 index 0000000..8a1a890 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/i18n/bs.po @@ -0,0 +1,62 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_account +# +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_account +#: model:ir.model.fields,field_description:maintenance_account.field_account_move_line__equipment_category_id +msgid "Equipment Category" +msgstr "Kategorija opreme" + +#. module: maintenance_account +#: model:ir.model.fields,field_description:maintenance_account.field_account_bank_statement_line__equipment_count +#: model:ir.model.fields,field_description:maintenance_account.field_account_move__equipment_count +#: model:ir.model.fields,field_description:maintenance_account.field_account_move_line__equipment_count +#: model:ir.model.fields,field_description:maintenance_account.field_account_payment__equipment_count +msgid "Equipment Count" +msgstr "Equipment Broj" + +#. module: maintenance_account +#: model_terms:ir.ui.view,arch_db:maintenance_account.view_move_form +msgid "Equipment(s)" +msgstr "Equipment(s)" + +#. module: maintenance_account +#: model:ir.model.fields,field_description:maintenance_account.field_account_move_line__equipment_ids +msgid "Equipments" +msgstr "Oprema" + +#. module: maintenance_account +#: model:ir.model,name:maintenance_account.model_account_move +msgid "Journal Entry" +msgstr "Žurnal" + +#. module: maintenance_account +#: model:ir.model,name:maintenance_account.model_account_move_line +msgid "Journal Item" +msgstr "Stavka žurnala" + +#. module: maintenance_account +#: model:ir.model,name:maintenance_account.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Oprema za održavanje" + +#. module: maintenance_account +#: model:ir.model.fields,field_description:maintenance_account.field_maintenance_equipment__move_id +msgid "Move" +msgstr "Kretanje" + +#. module: maintenance_account +#: model:ir.model.fields,field_description:maintenance_account.field_maintenance_equipment__move_line_id +msgid "Move line" +msgstr "Potez line" diff --git a/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/i18n/es.po new file mode 100644 index 0000000..9179c1c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/i18n/es.po @@ -0,0 +1,71 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_account +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-03-30 07:30+0000\n" +"PO-Revision-Date: 2023-07-06 20:08+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: \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_account +#: model:ir.model.fields,field_description:maintenance_account.field_account_move_line__equipment_category_id +msgid "Equipment Category" +msgstr "Categoría de equipo" + +#. module: maintenance_account +#: model:ir.model.fields,field_description:maintenance_account.field_account_bank_statement_line__equipment_count +#: model:ir.model.fields,field_description:maintenance_account.field_account_move__equipment_count +#: model:ir.model.fields,field_description:maintenance_account.field_account_move_line__equipment_count +#: model:ir.model.fields,field_description:maintenance_account.field_account_payment__equipment_count +msgid "Equipment Count" +msgstr "Total de equipos" + +#. module: maintenance_account +#: model_terms:ir.ui.view,arch_db:maintenance_account.view_move_form +msgid "Equipment(s)" +msgstr "Equipo(s)" + +#. module: maintenance_account +#: model:ir.model.fields,field_description:maintenance_account.field_account_move_line__equipment_ids +msgid "Equipments" +msgstr "Equipos" + +#. module: maintenance_account +#: model:ir.model,name:maintenance_account.model_account_move +msgid "Journal Entry" +msgstr "Asiento contable" + +#. module: maintenance_account +#: model:ir.model,name:maintenance_account.model_account_move_line +msgid "Journal Item" +msgstr "Apunte contable" + +#. module: maintenance_account +#: model:ir.model,name:maintenance_account.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Equipo de mantenimiento" + +#. module: maintenance_account +#: model:ir.model.fields,field_description:maintenance_account.field_maintenance_equipment__move_id +msgid "Move" +msgstr "Asiento" + +#. module: maintenance_account +#: model:ir.model.fields,field_description:maintenance_account.field_maintenance_equipment__move_line_id +msgid "Move line" +msgstr "Apunte" + +#. module: maintenance_account +#: model:ir.model.fields,help:maintenance_account.field_maintenance_equipment__move_id +msgid "The move of this entry line." +msgstr "El movimiento de esta línea de entrada." diff --git a/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/i18n/it.po new file mode 100644 index 0000000..c4bab66 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/i18n/it.po @@ -0,0 +1,70 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_account +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-11-12 17:39+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_account +#: model:ir.model.fields,field_description:maintenance_account.field_account_move_line__equipment_category_id +msgid "Equipment Category" +msgstr "Categoria attrezzatura" + +#. module: maintenance_account +#: model:ir.model.fields,field_description:maintenance_account.field_account_bank_statement_line__equipment_count +#: model:ir.model.fields,field_description:maintenance_account.field_account_move__equipment_count +#: model:ir.model.fields,field_description:maintenance_account.field_account_move_line__equipment_count +#: model:ir.model.fields,field_description:maintenance_account.field_account_payment__equipment_count +msgid "Equipment Count" +msgstr "Conteggio attrezzature" + +#. module: maintenance_account +#: model_terms:ir.ui.view,arch_db:maintenance_account.view_move_form +msgid "Equipment(s)" +msgstr "Attrezzatura(e)" + +#. module: maintenance_account +#: model:ir.model.fields,field_description:maintenance_account.field_account_move_line__equipment_ids +msgid "Equipments" +msgstr "Attrezzature" + +#. module: maintenance_account +#: model:ir.model,name:maintenance_account.model_account_move +msgid "Journal Entry" +msgstr "Registrazione contabile" + +#. module: maintenance_account +#: model:ir.model,name:maintenance_account.model_account_move_line +msgid "Journal Item" +msgstr "Movimento contabile" + +#. module: maintenance_account +#: model:ir.model,name:maintenance_account.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Attrezzatura manutenzione" + +#. module: maintenance_account +#: model:ir.model.fields,field_description:maintenance_account.field_maintenance_equipment__move_id +msgid "Move" +msgstr "Movimento" + +#. module: maintenance_account +#: model:ir.model.fields,field_description:maintenance_account.field_maintenance_equipment__move_line_id +msgid "Move line" +msgstr "Riga movimento" + +#. module: maintenance_account +#: model:ir.model.fields,help:maintenance_account.field_maintenance_equipment__move_id +msgid "The move of this entry line." +msgstr "Il movimento per questa riga di registrazione." diff --git a/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/i18n/maintenance_account.pot b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/i18n/maintenance_account.pot new file mode 100644 index 0000000..7f5a08d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/i18n/maintenance_account.pot @@ -0,0 +1,62 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_account +# +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_account +#: model:ir.model.fields,field_description:maintenance_account.field_account_move_line__equipment_category_id +msgid "Equipment Category" +msgstr "" + +#. module: maintenance_account +#: model:ir.model.fields,field_description:maintenance_account.field_account_bank_statement_line__equipment_count +#: model:ir.model.fields,field_description:maintenance_account.field_account_move__equipment_count +#: model:ir.model.fields,field_description:maintenance_account.field_account_move_line__equipment_count +#: model:ir.model.fields,field_description:maintenance_account.field_account_payment__equipment_count +msgid "Equipment Count" +msgstr "" + +#. module: maintenance_account +#: model_terms:ir.ui.view,arch_db:maintenance_account.view_move_form +msgid "Equipment(s)" +msgstr "" + +#. module: maintenance_account +#: model:ir.model.fields,field_description:maintenance_account.field_account_move_line__equipment_ids +msgid "Equipments" +msgstr "" + +#. module: maintenance_account +#: model:ir.model,name:maintenance_account.model_account_move +msgid "Journal Entry" +msgstr "" + +#. module: maintenance_account +#: model:ir.model,name:maintenance_account.model_account_move_line +msgid "Journal Item" +msgstr "" + +#. module: maintenance_account +#: model:ir.model,name:maintenance_account.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "" + +#. module: maintenance_account +#: model:ir.model.fields,field_description:maintenance_account.field_maintenance_equipment__move_id +msgid "Move" +msgstr "" + +#. module: maintenance_account +#: model:ir.model.fields,field_description:maintenance_account.field_maintenance_equipment__move_line_id +msgid "Move line" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/models/__init__.py new file mode 100644 index 0000000..aeb7220 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/models/__init__.py @@ -0,0 +1,2 @@ +from . import account_move +from . import maintenance_equipment diff --git a/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/models/account_move.py b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/models/account_move.py new file mode 100644 index 0000000..adabf4e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/models/account_move.py @@ -0,0 +1,134 @@ +# Copyright 2022 Tecnativa - Víctor Martínez +# Copyright 2024 Tecnativa - Carolina Fernandez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from odoo import api, fields, models +from odoo.tools import plaintext2html + + +class AccountMove(models.Model): + _inherit = "account.move" + + equipment_count = fields.Integer(compute="_compute_equipment_count") + + def _compute_equipment_count(self): + for item in self: + item.equipment_count = sum(item.mapped("line_ids.equipment_count")) + + def unlink(self): + items = self.env["maintenance.equipment"].search([("move_id", "in", self.ids)]) + items.write({"move_line_id": False, "move_id": False}) + return super().unlink() + + def action_post(self): + res = super().action_post() + # Prevent error if user does not have permission to create equipments + equipment_model = self.env["maintenance.equipment"].sudo() + for move in self.filtered(lambda r: r.is_purchase_document()): + for line in move.line_ids.filtered( + lambda x: ( + not x.equipment_ids + and x.product_id + and x.product_id.product_tmpl_id.maintenance_ok + ) + ): + if not line.equipment_category_id: + line._set_equipment_category() + # Create equipments + limit = int(line.quantity) + 1 + vals = line._prepare_equipment_vals() + equipment_ids = [] + for _i in range(1, limit): + equipment = equipment_model.with_company( + move.company_id, + ).create(vals.copy()) + equipment_ids.append((4, equipment.id)) + line.equipment_ids = equipment_ids + return res + + def action_view_equipments(self): + items = self.env["maintenance.equipment"].search([("move_id", "=", self.id)]) + action_dict = self.env["ir.actions.act_window"]._for_xml_id( + "maintenance.hr_equipment_action" + ) + if len(items) == 1: + res = self.env.ref("maintenance.hr_equipment_view_form", False) + action_dict["views"] = [(res and res.id or False, "form")] + action_dict["res_id"] = items.id + elif items: + action_dict["domain"] = [("id", "in", items.ids)] + else: + action_dict = {"type": "ir.actions.act_window_close"} + return action_dict + + +class AccountMoveLine(models.Model): + _inherit = "account.move.line" + + equipment_category_id = fields.Many2one( + comodel_name="maintenance.equipment.category", + string="Equipment Category", + compute="_compute_equipment_category_id", + store=True, + readonly=False, + ) + equipment_ids = fields.Many2many( + comodel_name="maintenance.equipment", + string="Equipments", + ) + equipment_count = fields.Integer(compute="_compute_equipment_count") + + @api.depends("product_id") + def _compute_equipment_category_id(self): + for item in self: + if ( + item.product_id.maintenance_ok + and item.product_id.product_tmpl_id.categ_id.equipment_category_ids + ): + item.equipment_category_id = fields.first( + item.product_id.product_tmpl_id.categ_id.equipment_category_ids + ) + else: + item.equipment_category_id = item.equipment_category_id + + def _compute_equipment_count(self): + data = self.env["maintenance.equipment"].read_group( + [("move_line_id", "in", self.ids)], ["move_line_id"], ["move_line_id"] + ) + mapping = {x["move_line_id"][0]: x["move_line_id_count"] for x in data} + for item in self: + item.equipment_count = mapping.get(item.id, 0) + + def _prepare_equipment_category_vals(self): + categ = self.product_id.product_tmpl_id.categ_id + return {"name": categ.name, "product_category_id": categ.id} + + def _set_equipment_category(self): + if not self.equipment_category_id: + category_model = self.env["maintenance.equipment.category"].sudo() + category = fields.first( + self.product_id.product_tmpl_id.categ_id.equipment_category_ids + ) + if not category: + category = category_model.create( + self._prepare_equipment_category_vals() + ) + self.equipment_category_id = category.id + + def _prepare_equipment_vals(self): + equipment_name = self.name + description = False + if "\n" in self.name: + lf_index = self.name.index("\n") + equipment_name = self.name[:lf_index] + description = plaintext2html(self.name[lf_index + 1 :]) + return { + "move_line_id": self.id, + "name": equipment_name, + "product_id": self.product_id.id, + "category_id": self.equipment_category_id.id, + "assign_date": self.move_id.date, + "effective_date": self.move_id.date, + "partner_id": self.move_id.partner_id.id, + "partner_ref": self.move_id.ref, + "note": description, + } diff --git a/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/models/maintenance_equipment.py b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/models/maintenance_equipment.py new file mode 100644 index 0000000..f1eca2c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/models/maintenance_equipment.py @@ -0,0 +1,19 @@ +# Copyright 2022 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from odoo import fields, models + + +class MaintenanceEquipment(models.Model): + _inherit = "maintenance.equipment" + + move_id = fields.Many2one( + comodel_name="account.move", + related="move_line_id.move_id", + string="Move", + readonly=True, + ) + move_line_id = fields.Many2one( + comodel_name="account.move.line", + string="Move line", + readonly=True, + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..df91a8d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/readme/CONTRIBUTORS.rst @@ -0,0 +1,7 @@ +* César Fernández Domínguez + +* `Tecnativa `_: + + * Víctor Martínez + * Pedro M. Baeza + * Carolina Fernandez diff --git a/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/readme/DESCRIPTION.rst new file mode 100644 index 0000000..cb5ff77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module automatically creates the equipment when validating the purchase invoices. diff --git a/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/readme/USAGE.rst b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/readme/USAGE.rst new file mode 100644 index 0000000..8e3ffd0 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/readme/USAGE.rst @@ -0,0 +1,6 @@ +To use this module, you need to: + +* Go to *Invoicing > Vendor > Bills* and create a new one with any product with the "Can be Maintenance" field checked. +* Confirm the invoice. +* A new equipment category linked to the product line has been created (if the product category did not already have one linked). +* A smart-button is displayed with the equipments created (as many equipments as the quantity of product lines are created). diff --git a/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/static/description/index.html new file mode 100644 index 0000000..5e15cb3 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/static/description/index.html @@ -0,0 +1,442 @@ + + + + + +Maintenance Account + + + +
+

Maintenance Account

+ + +

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

+

This module automatically creates the equipment when validating the purchase invoices.

+

Table of contents

+ +
+

Usage

+

To use this module, you need to:

+
    +
  • Go to Invoicing > Vendor > Bills and create a new one with any product with the “Can be Maintenance” field checked.
  • +
  • Confirm the invoice.
  • +
  • A new equipment category linked to the product line has been created (if the product category did not already have one linked).
  • +
  • A smart-button is displayed with the equipments created (as many equipments as the quantity of product lines are created).
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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

+

Current maintainer:

+

victoralmau

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/tests/__init__.py new file mode 100644 index 0000000..6fefd88 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl) + +from . import test_maintenance_account diff --git a/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/tests/test_maintenance_account.py b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/tests/test_maintenance_account.py new file mode 100644 index 0000000..9e4f31b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/tests/test_maintenance_account.py @@ -0,0 +1,138 @@ +# Copyright 2022-2024 Tecnativa - Víctor Martínez +# Copyright 2024 Tecnativa - Carolina Fernandez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl) + +from odoo import fields +from odoo.tests import Form, common, new_test_user, tagged +from odoo.tests.common import users + +from odoo.addons.base.tests.common import DISABLED_MAIL_CONTEXT + + +@tagged("-at_install", "post_install") +class TestAccountMove(common.TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, **DISABLED_MAIL_CONTEXT)) + if not cls.env.company.chart_template_id: + # Load a CoA if there's none in current company + coa = cls.env.ref("l10n_generic_coa.configurable_chart_template", False) + if not coa: + # Load the first available CoA + coa = cls.env["account.chart.template"].search( + [("visible", "=", True)], limit=1 + ) + coa.try_loading(company=cls.env.company, install_demo=False) + new_test_user( + cls.env, login="test-account-user", groups="account.group_account_invoice" + ) + cls.categ = cls.env["product.category"].create({"name": "Test category"}) + cls.product_a = cls.env["product.product"].create( + {"name": "Test product A", "maintenance_ok": True, "categ_id": cls.categ.id} + ) + cls.product_b = cls.env["product.product"].create( + {"name": "Test product B", "categ_id": cls.categ.id} + ) + cls.account_payable = cls.env["account.account"].create( + { + "name": "Test Account", + "code": "TEST", + "account_type": "liability_payable", + "reconcile": True, + } + ) + cls.account_expense = cls.env["account.account"].create( + { + "name": "Test Account", + "code": "ACC", + "account_type": "expense", + } + ) + cls.journal = cls.env["account.journal"].create( + { + "name": "Test purchase journal", + "type": "purchase", + "code": "TEST-PURCHASE", + } + ) + cls.partner = cls.env["res.partner"].create( + { + "name": "Test partner", + } + ) + + def _create_invoice(self, move_type="in_invoice"): + move_form = Form( + self.env["account.move"].with_context(default_move_type=move_type) + ) + move_form.partner_id = self.partner + move_form.ref = "SUPPLIE-REF" + move_form.invoice_date = fields.Date.from_string("2000-01-01") + with move_form.invoice_line_ids.new() as line_form: + line_form.product_id = self.product_a + line_form.name = "Product A\nTest description product A\nB" + line_form.quantity = 2 + with move_form.invoice_line_ids.new() as line_form: + line_form.product_id = self.product_b + line_form.quantity = 2 + invoice = move_form.save() + return invoice + + @users("test-account-user") + def test_invoice_out_invoice_action_post_equipment_1(self): + invoice = self._create_invoice("out_invoice") + line_a = invoice.line_ids.filtered(lambda x: x.product_id == self.product_a) + line_b = invoice.line_ids.filtered(lambda x: x.product_id == self.product_b) + self.assertFalse(line_a.equipment_category_id) + self.assertFalse(line_b.equipment_category_id) + invoice.action_post() + equipments = invoice.mapped("line_ids.equipment_ids") + self.assertEqual(len(equipments), 0) + + @users("test-account-user") + def test_invoice_action_post_equipment_1(self): + invoice = self._create_invoice() + line_a = invoice.line_ids.filtered(lambda x: x.product_id == self.product_a) + line_b = invoice.line_ids.filtered(lambda x: x.product_id == self.product_b) + self.assertFalse(line_a.equipment_category_id) + self.assertFalse(line_b.equipment_category_id) + invoice.action_post() + equipments = invoice.mapped("line_ids.equipment_ids") + self.assertEqual(len(equipments), 2) + self.assertTrue(line_a.equipment_category_id) + self.assertEqual(len(line_a.equipment_ids), 2) + self.assertEqual(len(line_b.equipment_ids), 0) + equipment = fields.first(equipments) + self.assertEqual(equipment.name, "Product A") + self.assertEqual(equipment.note, "

Test description product A
B

") + self.assertEqual(equipment.category_id.product_category_id, self.categ) + self.assertEqual(equipment.assign_date, invoice.date) + self.assertEqual(equipment.effective_date, invoice.date) + self.assertEqual(equipment.partner_id, self.partner) + self.assertEqual(equipment.partner_ref, invoice.ref) + + @users("test-account-user") + def test_invoice_action_post_equipment_1_multi_lines(self): + self.product_b.maintenance_ok = True + invoice = self._create_invoice() + line_a = invoice.line_ids.filtered(lambda x: x.product_id == self.product_a) + line_b = invoice.line_ids.filtered(lambda x: x.product_id == self.product_b) + invoice.action_post() + equipments = invoice.mapped("line_ids.equipment_ids") + self.assertEqual(len(equipments.mapped("category_id")), 1) + self.assertEqual(line_a.equipment_category_id, line_b.equipment_category_id) + + @users("test-account-user") + def test_invoice_action_post_equipment_2(self): + category = ( + self.env["maintenance.equipment.category"] + .sudo() + .create({"name": self.categ.name, "product_category_id": self.categ.id}) + ) + invoice = self._create_invoice() + line_a = invoice.line_ids.filtered(lambda x: x.product_id == self.product_a) + self.assertEqual(line_a.equipment_category_id, category) + invoice.action_post() + equipment = fields.first(line_a.equipment_ids) + self.assertEqual(equipment.category_id, category) diff --git a/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/views/account_move_view.xml b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/views/account_move_view.xml new file mode 100644 index 0000000..6c5d699 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/views/account_move_view.xml @@ -0,0 +1,59 @@ + + + + account.move.form + account.move + + + + + + + + + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/views/maintenance_equipment_view.xml b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/views/maintenance_equipment_view.xml new file mode 100644 index 0000000..c953986 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/maintenance_account/views/maintenance_equipment_view.xml @@ -0,0 +1,13 @@ + + + + equipment.form + maintenance.equipment + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_account/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_account/pyproject.toml new file mode 100644 index 0000000..2ecee39 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_account/pyproject.toml @@ -0,0 +1,43 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_account" +version = "16.0.0" +description = "Maintenance Account - Odoo addon" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-maintenance_product>=16.0.0", + "odoo-bringout-oca-ocb-account>=16.0.0", + "requests>=2.25.1" +] +readme = "README.md" +requires-python = ">= 3.11" +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Office/Business", +] + +[project.urls] +homepage = "https://github.com/bringout/0" +repository = "https://github.com/bringout/0" + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.hatch.metadata] +allow-direct-references = true + +[tool.hatch.build.targets.wheel] +packages = ["maintenance_account"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/README.md b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/README.md new file mode 100644 index 0000000..7e352e5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/README.md @@ -0,0 +1,44 @@ +# Maintenance Equipment Category Hierarchy + +Odoo addon: maintenance_equipment_category_hierarchy + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy +``` + +## Dependencies + +This addon depends on: +- maintenance + +## Manifest Information + +- **Name**: Maintenance Equipment Category Hierarchy +- **Version**: 16.0.1.0.0 +- **Category**: N/A +- **License**: AGPL-3 +- **Installable**: False + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_equipment_category_hierarchy`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/ARCHITECTURE.md new file mode 100644 index 0000000..53301a8 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/ARCHITECTURE.md @@ -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_equipment_category_hierarchy Module - maintenance_equipment_category_hierarchy + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/CONFIGURATION.md new file mode 100644 index 0000000..b4b127d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_equipment_category_hierarchy. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/DEPENDENCIES.md new file mode 100644 index 0000000..a7cb7c6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/DEPENDENCIES.md @@ -0,0 +1,5 @@ +# Dependencies + +This addon depends on: + +- [maintenance](https://github.com/bringout/oca-ocb-vertical-industry/tree/a60a29f57ff34f3c01d0521d0a6003956d80acd9/odoo-bringout-oca-ocb-maintenance) diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/FAQ.md new file mode 100644 index 0000000..a33c533 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/FAQ.md @@ -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_equipment_category_hierarchy or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/INSTALL.md new file mode 100644 index 0000000..01cd79b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/MODELS.md new file mode 100644 index 0000000..a1ace6c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/MODELS.md @@ -0,0 +1,12 @@ +# Models + +Detected core models and extensions in maintenance_equipment_category_hierarchy. + +```mermaid +classDiagram + class maintenance_equipment_category +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/OVERVIEW.md new file mode 100644 index 0000000..bc64ddf --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_equipment_category_hierarchy. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_equipment_category_hierarchy +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/SECURITY.md new file mode 100644 index 0000000..e07da9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/SECURITY.md @@ -0,0 +1,8 @@ +# Security + +This module does not define custom security rules or access controls beyond Odoo defaults. + +Default Odoo security applies: +- Base user access through standard groups +- Model access inherited from dependencies +- No custom row-level security rules diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/USAGE.md new file mode 100644 index 0000000..ef8630c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/USAGE.md @@ -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_equipment_category_hierarchy +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/README.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/README.rst new file mode 100644 index 0000000..e17d280 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/README.rst @@ -0,0 +1,78 @@ +======================================== +Maintenance Equipment Category Hierarchy +======================================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:56e884ba5b2eea18cd6f4523883ccb62ec04a894f0a23db188c986f892565ddc + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_equipment_category_hierarchy + :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_equipment_category_hierarchy + :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| + + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* CreuBlanca + +Contributors +~~~~~~~~~~~~ + +* Enric Tobella +* Jaime Arroyo +* Olga Marco +* Kevin Luna + +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 `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/__manifest__.py new file mode 100644 index 0000000..06e8ca8 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/__manifest__.py @@ -0,0 +1,14 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Maintenance Equipment Category Hierarchy", + "summary": """ + Equipment Categories Hierarchy""", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "CreuBlanca, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/maintenance", + "depends": ["maintenance"], + "data": ["views/maintenance_equipment_category.xml"], +} diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/bs.po new file mode 100644 index 0000000..8577977 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/bs.po @@ -0,0 +1,46 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_category_hierarchy +# +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_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__child_id +msgid "Child Categories" +msgstr "Podkategorije" + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__complete_name +msgid "Complete Name" +msgstr "Puni naziv" + +#. module: maintenance_equipment_category_hierarchy +#. odoo-python +#: code:addons/maintenance_equipment_category_hierarchy/models/maintenance_equipment_category.py:0 +#, python-format +msgid "Error ! You cannot create recursive categories." +msgstr "Greška! Ne možete kreirati rekurzivne kategorije." + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model,name:maintenance_equipment_category_hierarchy.model_maintenance_equipment_category +msgid "Maintenance Equipment Category" +msgstr "Kategorija opreme za održavanje" + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__parent_id +msgid "Parent Category" +msgstr "Izvorna kategorija" + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__parent_path +msgid "Parent Path" +msgstr "Putanja nadređenih" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/es.po new file mode 100644 index 0000000..067b510 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/es.po @@ -0,0 +1,62 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_category_hierarchy +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-12 12:05+0000\n" +"PO-Revision-Date: 2019-12-12 13:06+0100\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 2.0.6\n" + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__child_id +msgid "Child Categories" +msgstr "Categorías hijas" + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__complete_name +msgid "Complete Name" +msgstr "Nombre completo" + +#. module: maintenance_equipment_category_hierarchy +#. odoo-python +#: code:addons/maintenance_equipment_category_hierarchy/models/maintenance_equipment_category.py:0 +#, python-format +msgid "Error ! You cannot create recursive categories." +msgstr "Error ! No se pueden crear categorías cíclicas." + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model,name:maintenance_equipment_category_hierarchy.model_maintenance_equipment_category +msgid "Maintenance Equipment Category" +msgstr "" + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__parent_id +msgid "Parent Category" +msgstr "Categoría Padre" + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__parent_path +msgid "Parent Path" +msgstr "" + +#~ msgid "Asset Category" +#~ msgstr "Categoría de activo" + +#~ msgid "Left Parent" +#~ msgstr "Padre izquierdo" + +#~ msgid "Parent Categories" +#~ msgstr "Categorías Padre" + +#~ msgid "Right Parent" +#~ msgstr "Padre derecho" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/fr.po b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/fr.po new file mode 100644 index 0000000..8266a5a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/fr.po @@ -0,0 +1,58 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_category_hierarchy +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-06-18 12:02+0000\n" +"Last-Translator: Yann Papouin \n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__child_id +msgid "Child Categories" +msgstr "Catégories enfants" + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__complete_name +msgid "Complete Name" +msgstr "Nom complet" + +#. module: maintenance_equipment_category_hierarchy +#. odoo-python +#: code:addons/maintenance_equipment_category_hierarchy/models/maintenance_equipment_category.py:0 +#, python-format +msgid "Error ! You cannot create recursive categories." +msgstr "Erreur ! Vous ne pouvez pas créer de catégories récursives." + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model,name:maintenance_equipment_category_hierarchy.model_maintenance_equipment_category +msgid "Maintenance Equipment Category" +msgstr "Catégorie d'équipment de maintenance" + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__parent_id +msgid "Parent Category" +msgstr "Catégorie parente" + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__parent_path +msgid "Parent Path" +msgstr "Chemin parent" + +#~ msgid "Display Name" +#~ msgstr "Nom affiché" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Dernière modification le" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/it.po new file mode 100644 index 0000000..4d41d26 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/it.po @@ -0,0 +1,58 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_category_hierarchy +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-02-16 17:45+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__child_id +msgid "Child Categories" +msgstr "Categorie figlie" + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__complete_name +msgid "Complete Name" +msgstr "Nome completo" + +#. module: maintenance_equipment_category_hierarchy +#. odoo-python +#: code:addons/maintenance_equipment_category_hierarchy/models/maintenance_equipment_category.py:0 +#, python-format +msgid "Error ! You cannot create recursive categories." +msgstr "Errore! Non è possibile creare categorie ricorsive." + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model,name:maintenance_equipment_category_hierarchy.model_maintenance_equipment_category +msgid "Maintenance Equipment Category" +msgstr "Categoria attrezzatura menutenzione" + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__parent_id +msgid "Parent Category" +msgstr "Categoria padre" + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__parent_path +msgid "Parent Path" +msgstr "Percorso padre" + +#~ msgid "Display Name" +#~ msgstr "Nome visualizzato" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima modifica il" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/maintenance_equipment_category_hierarchy.pot b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/maintenance_equipment_category_hierarchy.pot new file mode 100644 index 0000000..5e6e3e6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/i18n/maintenance_equipment_category_hierarchy.pot @@ -0,0 +1,46 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_category_hierarchy +# +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_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__child_id +msgid "Child Categories" +msgstr "" + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__complete_name +msgid "Complete Name" +msgstr "" + +#. module: maintenance_equipment_category_hierarchy +#. odoo-python +#: code:addons/maintenance_equipment_category_hierarchy/models/maintenance_equipment_category.py:0 +#, python-format +msgid "Error ! You cannot create recursive categories." +msgstr "" + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model,name:maintenance_equipment_category_hierarchy.model_maintenance_equipment_category +msgid "Maintenance Equipment Category" +msgstr "" + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__parent_id +msgid "Parent Category" +msgstr "" + +#. module: maintenance_equipment_category_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_category_hierarchy.field_maintenance_equipment_category__parent_path +msgid "Parent Path" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/models/__init__.py new file mode 100644 index 0000000..da842f6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/models/__init__.py @@ -0,0 +1 @@ +from . import maintenance_equipment_category diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/models/maintenance_equipment_category.py b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/models/maintenance_equipment_category.py new file mode 100644 index 0000000..48b14af --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/models/maintenance_equipment_category.py @@ -0,0 +1,48 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class MaintenanceEquipmentCategory(models.Model): + + _inherit = "maintenance.equipment.category" + + _parent_name = "parent_id" + _parent_store = True + _parent_order = "name" + _rec_name = "complete_name" + _order = "parent_id" + + complete_name = fields.Char( + compute="_compute_complete_name", store=True, recursive=True + ) + + parent_id = fields.Many2one( + "maintenance.equipment.category", + "Parent Category", + index=True, + ondelete="cascade", + ) + child_id = fields.One2many( + "maintenance.equipment.category", "parent_id", "Child Categories" + ) + parent_path = fields.Char(index=True, unaccent=False) + + @api.depends("name", "parent_id.complete_name") + def _compute_complete_name(self): + for category in self: + if category.parent_id: + category.complete_name = "{} / {}".format( + category.parent_id.complete_name, + category.name, + ) + else: + category.complete_name = category.name + + @api.constrains("parent_id") + def _check_category_recursion(self): + if not self._check_recursion(): + raise ValidationError(_("Error ! You cannot create recursive categories.")) + return True diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..6b17bf9 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +* Enric Tobella +* Jaime Arroyo +* Olga Marco +* Kevin Luna diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/readme/DESCRIPTION.rst new file mode 100644 index 0000000..e69de29 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/static/description/index.html new file mode 100644 index 0000000..c88a96a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/static/description/index.html @@ -0,0 +1,425 @@ + + + + + +Maintenance Equipment Category Hierarchy + + + +
+

Maintenance Equipment Category Hierarchy

+ + +

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

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • CreuBlanca
  • +
+
+
+

Contributors

+
    +
  • Enric Tobella
  • +
  • Jaime Arroyo
  • +
  • Olga Marco
  • +
  • Kevin Luna
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/tests/__init__.py new file mode 100644 index 0000000..6289c88 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/tests/__init__.py @@ -0,0 +1 @@ +from . import test_maintenance_category diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/tests/test_maintenance_category.py b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/tests/test_maintenance_category.py new file mode 100644 index 0000000..4e38f7b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/tests/test_maintenance_category.py @@ -0,0 +1,21 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.exceptions import UserError +from odoo.tests.common import TransactionCase + + +class TestMaintenanceCategory(TransactionCase): + def setUp(self): + super().setUp() + self.category_1 = self.env["maintenance.equipment.category"].create( + {"name": "C1"} + ) + self.category_2 = self.env["maintenance.equipment.category"].create( + {"name": "C2", "parent_id": self.category_1.id} + ) + + def test_maintenance_category(self): + self.assertEqual(self.category_2.complete_name, "C1 / C2") + with self.assertRaises(UserError): + self.category_1.write({"parent_id": self.category_2.id}) diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/views/maintenance_equipment_category.xml b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/views/maintenance_equipment_category.xml new file mode 100644 index 0000000..e0910e5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/maintenance_equipment_category_hierarchy/views/maintenance_equipment_category.xml @@ -0,0 +1,42 @@ + + + + + maintenance.equipment.category.tree (in maintenance_equipment_category_hierarchy) + maintenance.equipment.category + + + + + + + + + maintenance.equipment.category.form (in maintenance_equipment_category_hierarchy) + maintenance.equipment.category + + + + + + + + + + maintenance.request.search (in maintenance_location) + maintenance.request + + + + [('category_id', 'child_of', raw_value)] + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/pyproject.toml new file mode 100644 index 0000000..5476c73 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy/pyproject.toml @@ -0,0 +1,43 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_equipment_category_hierarchy" +version = "16.0.0" +description = "Maintenance Equipment Category Hierarchy - + Equipment Categories Hierarchy" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-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_equipment_category_hierarchy"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/README.md b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/README.md new file mode 100644 index 0000000..4c78045 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/README.md @@ -0,0 +1,44 @@ +# Maintenance equipment certification + +Odoo addon: maintenance_equipment_certification + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_equipment_certification +``` + +## Dependencies + +This addon depends on: +- maintenance + +## Manifest Information + +- **Name**: Maintenance equipment certification +- **Version**: 16.0.1.0.0 +- **Category**: Human Resources +- **License**: AGPL-3 +- **Installable**: False + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_equipment_certification`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/ARCHITECTURE.md new file mode 100644 index 0000000..23d0ec3 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/ARCHITECTURE.md @@ -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_equipment_certification Module - maintenance_equipment_certification + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/CONFIGURATION.md new file mode 100644 index 0000000..30ff4ed --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_equipment_certification. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/DEPENDENCIES.md new file mode 100644 index 0000000..a7cb7c6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/DEPENDENCIES.md @@ -0,0 +1,5 @@ +# Dependencies + +This addon depends on: + +- [maintenance](https://github.com/bringout/oca-ocb-vertical-industry/tree/a60a29f57ff34f3c01d0521d0a6003956d80acd9/odoo-bringout-oca-ocb-maintenance) diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/FAQ.md new file mode 100644 index 0000000..b8c720d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/FAQ.md @@ -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_equipment_certification or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/INSTALL.md new file mode 100644 index 0000000..a1b8051 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_equipment_certification" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_equipment_certification" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/MODELS.md new file mode 100644 index 0000000..749853b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/MODELS.md @@ -0,0 +1,13 @@ +# Models + +Detected core models and extensions in maintenance_equipment_certification. + +```mermaid +classDiagram + class maintenance_equipment_certificate + class maintenance_equipment +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/OVERVIEW.md new file mode 100644 index 0000000..f8fa8a3 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_equipment_certification. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_equipment_certification +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/SECURITY.md new file mode 100644 index 0000000..d269b07 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/SECURITY.md @@ -0,0 +1,34 @@ +# Security + +Access control and security definitions in maintenance_equipment_certification. + +## Access Control Lists (ACLs) + +Model access permissions defined in: +- **[ir.model.access.csv](../maintenance_equipment_certification/security/ir.model.access.csv)** + - 2 model access rules + +## Record Rules + +Row-level security rules defined in: + +```mermaid +graph TB + subgraph "Security Layers" + A[Users] --> B[Groups] + B --> C[Access Control Lists] + C --> D[Models] + B --> E[Record Rules] + E --> F[Individual Records] + end +``` + +Security files overview: +- **[ir.model.access.csv](../maintenance_equipment_certification/security/ir.model.access.csv)** + - Model access permissions (CRUD rights) + +Notes +- Access Control Lists define which groups can access which models +- Record Rules provide row-level security (filter records by user/group) +- Security groups organize users and define permission sets +- All security is enforced at the ORM level by Odoo diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/USAGE.md new file mode 100644 index 0000000..b1546e2 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/USAGE.md @@ -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_equipment_certification +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/README.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/README.rst new file mode 100644 index 0000000..ba79e4a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/README.rst @@ -0,0 +1,94 @@ +=================================== +Maintenance equipment certification +=================================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:73d6dedecc9753187ee8d4627069ea90fe0ec5baf550af7b0d0208b7134ce46b + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_equipment_certification + :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_equipment_certification + :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| + +Allows you to store a record of the certifications associated with a piece of +equipment. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +* Got to **Maintenance > Equipment** menu. +* Open any equipment. +* You will see a Certification tab. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Trey (www.trey.es) + +Contributors +~~~~~~~~~~~~ + +* `Trey `_: + + * Vicent Cubells + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-cubells| image:: https://github.com/cubells.png?size=40px + :target: https://github.com/cubells + :alt: cubells + +Current `maintainer `__: + +|maintainer-cubells| + +This module is part of the `OCA/maintenance `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/__manifest__.py new file mode 100644 index 0000000..c16a658 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2025 Trey, Kilobytes de Soluciones - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +{ + "name": "Maintenance equipment certification", + "summary": "Add to store certifications associated with a equipment.", + "category": "Human Resources", + "version": "16.0.1.0.0", + "author": "Trey (www.trey.es), Odoo Community Association (OCA)", + "website": "https://github.com/OCA/maintenance", + "maintainers": ["cubells"], + "license": "AGPL-3", + "depends": [ + "maintenance", + ], + "data": [ + "security/ir.model.access.csv", + "views/maintenance_equipment_views.xml", + ], +} diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/i18n/bs.po new file mode 100644 index 0000000..84efbf3 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/i18n/bs.po @@ -0,0 +1,99 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_certification +# +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_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__certificate_file +msgid "Certificate" +msgstr "Certificate" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__certificate_filename +msgid "Certificate file name" +msgstr "Certificate file name" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment__certificate_ids +msgid "Certificates" +msgstr "Certificates" + +#. module: maintenance_equipment_certification +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_certification.hr_equipment_view_form +msgid "Certifications" +msgstr "Certifikacije" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__date +msgid "Date" +msgstr "Datum" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__display_name +msgid "Display Name" +msgstr "Prikazani naziv" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__equipment_id +msgid "Equipment" +msgstr "Oprema" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__id +msgid "ID" +msgstr "ID" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate____last_update +msgid "Last Modified on" +msgstr "Zadnje mijenjano" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__write_uid +msgid "Last Updated by" +msgstr "Zadnji ažurirao" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__write_date +msgid "Last Updated on" +msgstr "Zadnje ažurirano" + +#. module: maintenance_equipment_certification +#: model:ir.model,name:maintenance_equipment_certification.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Oprema za održavanje" + +#. module: maintenance_equipment_certification +#: model:ir.model,name:maintenance_equipment_certification.model_maintenance_equipment_certificate +msgid "Maintenance equipment certificate" +msgstr "Maintenance equipment certificate" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__name +msgid "Name" +msgstr "Naziv:" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__notes +msgid "Notes" +msgstr "Zabilješke" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/i18n/es.po new file mode 100644 index 0000000..8ad46ad --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/i18n/es.po @@ -0,0 +1,103 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_certification +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-05-20 15:45+0000\n" +"PO-Revision-Date: 2025-05-20 17:48+0200\n" +"Last-Translator: \n" +"Language-Team: \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: Poedit 3.6\n" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__certificate_file +msgid "Certificate" +msgstr "Certificado" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__certificate_filename +msgid "Certificate file name" +msgstr "Nombre del fichero del certificado" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment__certificate_ids +msgid "Certificates" +msgstr "Certificados" + +#. module: maintenance_equipment_certification +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_certification.hr_equipment_view_form +msgid "Certifications" +msgstr "Certificaciones" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__date +msgid "Date" +msgstr "Fecha" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__display_name +msgid "Display Name" +msgstr "Nombre a mostrar" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__equipment_id +msgid "Equipment" +msgstr "Equipo" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__id +msgid "ID" +msgstr "Identificador" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate____last_update +msgid "Last Modified on" +msgstr "Última modificación el" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__write_uid +msgid "Last Updated by" +msgstr "Última modificación por" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: maintenance_equipment_certification +#: model:ir.model,name:maintenance_equipment_certification.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Equipo de mantenimiento" + +#. module: maintenance_equipment_certification +#: model:ir.model,name:maintenance_equipment_certification.model_maintenance_equipment_certificate +msgid "Maintenance equipment certificate" +msgstr "Certificado del equipo de mantenimiento" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__name +msgid "Name" +msgstr "Nombre" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__notes +msgid "Notes" +msgstr "Notas" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/i18n/it.po new file mode 100644 index 0000000..6179888 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/i18n/it.po @@ -0,0 +1,102 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_certification +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-06-04 10:26+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.10.4\n" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__certificate_file +msgid "Certificate" +msgstr "Certificato" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__certificate_filename +msgid "Certificate file name" +msgstr "Nome file certificato" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment__certificate_ids +msgid "Certificates" +msgstr "Certificati" + +#. module: maintenance_equipment_certification +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_certification.hr_equipment_view_form +msgid "Certifications" +msgstr "Certificati" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__date +msgid "Date" +msgstr "Data" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__equipment_id +msgid "Equipment" +msgstr "Attrezzatura" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__id +msgid "ID" +msgstr "ID" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: maintenance_equipment_certification +#: model:ir.model,name:maintenance_equipment_certification.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Attrezzatura manutenzione" + +#. module: maintenance_equipment_certification +#: model:ir.model,name:maintenance_equipment_certification.model_maintenance_equipment_certificate +msgid "Maintenance equipment certificate" +msgstr "Certificato attrezzatura manutenzione" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__name +msgid "Name" +msgstr "Nome" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__notes +msgid "Notes" +msgstr "Note" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/i18n/maintenance_equipment_certification.pot b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/i18n/maintenance_equipment_certification.pot new file mode 100644 index 0000000..5ef0fbe --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/i18n/maintenance_equipment_certification.pot @@ -0,0 +1,99 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_certification +# +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_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__certificate_file +msgid "Certificate" +msgstr "" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__certificate_filename +msgid "Certificate file name" +msgstr "" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment__certificate_ids +msgid "Certificates" +msgstr "" + +#. module: maintenance_equipment_certification +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_certification.hr_equipment_view_form +msgid "Certifications" +msgstr "" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__create_uid +msgid "Created by" +msgstr "" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__create_date +msgid "Created on" +msgstr "" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__date +msgid "Date" +msgstr "" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__display_name +msgid "Display Name" +msgstr "" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__equipment_id +msgid "Equipment" +msgstr "" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__id +msgid "ID" +msgstr "" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate____last_update +msgid "Last Modified on" +msgstr "" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__write_date +msgid "Last Updated on" +msgstr "" + +#. module: maintenance_equipment_certification +#: model:ir.model,name:maintenance_equipment_certification.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "" + +#. module: maintenance_equipment_certification +#: model:ir.model,name:maintenance_equipment_certification.model_maintenance_equipment_certificate +msgid "Maintenance equipment certificate" +msgstr "" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__name +msgid "Name" +msgstr "" + +#. module: maintenance_equipment_certification +#: model:ir.model.fields,field_description:maintenance_equipment_certification.field_maintenance_equipment_certificate__notes +msgid "Notes" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/models/__init__.py new file mode 100644 index 0000000..5b46a54 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/models/__init__.py @@ -0,0 +1,2 @@ +from . import maintenance_equipment +from . import maintenance_equipment_certificate diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/models/maintenance_equipment.py b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/models/maintenance_equipment.py new file mode 100644 index 0000000..7f5c7ee --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/models/maintenance_equipment.py @@ -0,0 +1,13 @@ +# Copyright 2025 Trey, Kilobytes de Soluciones - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class MaintenanceEquipment(models.Model): + _inherit = "maintenance.equipment" + + certificate_ids = fields.One2many( + comodel_name="maintenance.equipment.certificate", + inverse_name="equipment_id", + string="Certificates", + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/models/maintenance_equipment_certificate.py b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/models/maintenance_equipment_certificate.py new file mode 100644 index 0000000..fef284d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/models/maintenance_equipment_certificate.py @@ -0,0 +1,22 @@ +# Copyright 2025 Trey, Kilobytes de Soluciones - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class MaintenanceEquipmentCertificate(models.Model): + _name = "maintenance.equipment.certificate" + _description = "Maintenance equipment certificate" + + name = fields.Char() + notes = fields.Text() + date = fields.Date() + certificate_file = fields.Binary( + string="Certificate", + attachment=True, + ) + certificate_filename = fields.Char( + string="Certificate file name", + ) + equipment_id = fields.Many2one( + comodel_name="maintenance.equipment", + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..0a10eb6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `Trey `_: + + * Vicent Cubells diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/readme/DESCRIPTION.rst new file mode 100644 index 0000000..4cd413b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +Allows you to store a record of the certifications associated with a piece of +equipment. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/readme/USAGE.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/readme/USAGE.rst new file mode 100644 index 0000000..f5a47b1 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/readme/USAGE.rst @@ -0,0 +1,3 @@ +* Got to **Maintenance > Equipment** menu. +* Open any equipment. +* You will see a Certification tab. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/security/ir.model.access.csv b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/security/ir.model.access.csv new file mode 100644 index 0000000..6cfaec6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_equipment_certification_user,Certification user,model_maintenance_equipment_certificate,base.group_user,1,0,0,0 +access_equipment_certification_admin,Certification admin,model_maintenance_equipment_certificate,maintenance.group_equipment_manager,1,1,1,1 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/static/description/index.html new file mode 100644 index 0000000..111ebf8 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/static/description/index.html @@ -0,0 +1,438 @@ + + + + + +Maintenance equipment certification + + + +
+

Maintenance equipment certification

+ + +

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

+

Allows you to store a record of the certifications associated with a piece of +equipment.

+

Table of contents

+ +
+

Usage

+
    +
  • Got to Maintenance > Equipment menu.
  • +
  • Open any equipment.
  • +
  • You will see a Certification tab.
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Trey (www.trey.es)
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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

+

Current maintainer:

+

cubells

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/tests/__init__.py new file mode 100644 index 0000000..2dbc3e8 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/tests/__init__.py @@ -0,0 +1 @@ +from . import test_maintenance_equipment_certification diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/tests/test_maintenance_equipment_certification.py b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/tests/test_maintenance_equipment_certification.py new file mode 100644 index 0000000..7ff0289 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/tests/test_maintenance_equipment_certification.py @@ -0,0 +1,41 @@ +# Copyright 2025 Trey, Kilobytes de Soluciones - Vicent Cubells +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo.exceptions import AccessError +from odoo.tests.common import TransactionCase + + +class TestMaintenanceEquipmentCertification(TransactionCase): + def setUp(self): + super().setUp() + self.equipment = self.env["maintenance.equipment"].create( + { + "name": "Test equipment", + } + ) + self.user_demo = self.env["res.users"].create( + { + "name": "Demo User", + "login": "Demo", + "email": "demo@user.com", + "groups_id": [ + (6, 0, [self.env.ref("base.group_user").id]), + ], + } + ) + + def test_user_with_no_permission(self): + """Test user with no permission can not modify equipment.""" + with self.assertRaises(AccessError): + self.equipment.with_user(self.user_demo).name = "Test equipment rename" + + def test_user_with_permission(self): + """Test user with permission can modify equipment.""" + self.user_demo.write( + { + "groups_id": [ + (6, 0, [self.env.ref("maintenance.group_equipment_manager").id]) + ], + } + ) + self.equipment.with_user(self.user_demo).name = "Test equipment rename" + self.assertEqual(self.equipment.name, "Test equipment rename") diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/views/maintenance_equipment_views.xml b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/views/maintenance_equipment_views.xml new file mode 100644 index 0000000..60e5a06 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/maintenance_equipment_certification/views/maintenance_equipment_views.xml @@ -0,0 +1,27 @@ + + + + maintenance.equipment + + + + + + + + + + + + + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_certification/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/pyproject.toml new file mode 100644 index 0000000..6128cd4 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_certification/pyproject.toml @@ -0,0 +1,42 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_equipment_certification" +version = "16.0.0" +description = "Maintenance equipment certification - Add to store certifications associated with a equipment." +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-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_equipment_certification"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/README.md b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/README.md new file mode 100644 index 0000000..d3c9e0a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/README.md @@ -0,0 +1,45 @@ +# Maintenance Equipment Contract + +Odoo addon: maintenance_equipment_contract + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_equipment_contract +``` + +## Dependencies + +This addon depends on: +- contract +- base_maintenance + +## Manifest Information + +- **Name**: Maintenance Equipment Contract +- **Version**: 16.0.1.0.0 +- **Category**: N/A +- **License**: AGPL-3 +- **Installable**: False + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_equipment_contract`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/ARCHITECTURE.md new file mode 100644 index 0000000..7329b56 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/ARCHITECTURE.md @@ -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_equipment_contract Module - maintenance_equipment_contract + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/CONFIGURATION.md new file mode 100644 index 0000000..1079fb2 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_equipment_contract. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/DEPENDENCIES.md new file mode 100644 index 0000000..4d5a385 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/DEPENDENCIES.md @@ -0,0 +1,6 @@ +# Dependencies + +This addon depends on: + +- contract +- [base_maintenance](https://github.com/bringout/oca-technical) diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/FAQ.md new file mode 100644 index 0000000..937a73b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/FAQ.md @@ -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_equipment_contract or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/INSTALL.md new file mode 100644 index 0000000..6262ca4 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_equipment_contract" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_equipment_contract" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/MODELS.md new file mode 100644 index 0000000..6236d5d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/MODELS.md @@ -0,0 +1,13 @@ +# Models + +Detected core models and extensions in maintenance_equipment_contract. + +```mermaid +classDiagram + class contract_contract + class maintenance_equipment +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/OVERVIEW.md new file mode 100644 index 0000000..3b35523 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_equipment_contract. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_equipment_contract +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/SECURITY.md new file mode 100644 index 0000000..e07da9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/SECURITY.md @@ -0,0 +1,8 @@ +# Security + +This module does not define custom security rules or access controls beyond Odoo defaults. + +Default Odoo security applies: +- Base user access through standard groups +- Model access inherited from dependencies +- No custom row-level security rules diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/USAGE.md new file mode 100644 index 0000000..e2b8936 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/USAGE.md @@ -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_equipment_contract +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/README.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/README.rst new file mode 100644 index 0000000..4b8275e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/README.rst @@ -0,0 +1,78 @@ +============================== +Maintenance Equipment Contract +============================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:012dbe851daa6bee2ba2641e1d26c43fed20bc878f4faf0d1ea1f2b9d6d5f201 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_equipment_contract + :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_equipment_contract + :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 links maintenance equipment with supplier contracts. +To link an equipment go to the contract's form and add it to the Equipments +field. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Creu Blanca + +Contributors +~~~~~~~~~~~~ + +* Jaime Arroyo + +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 `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/__manifest__.py new file mode 100644 index 0000000..7a4c540 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/__manifest__.py @@ -0,0 +1,15 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Maintenance Equipment Contract", + "summary": """ + Manage equipment contracts""", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "Creu Blanca,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/maintenance", + "depends": ["contract", "base_maintenance"], + "data": ["views/contract_contract.xml", "views/maintenance_equipment.xml"], + "demo": ["demo/maintenance_equipment_contract_demo.xml"], +} diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/demo/maintenance_equipment_contract_demo.xml b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/demo/maintenance_equipment_contract_demo.xml new file mode 100644 index 0000000..9023e89 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/demo/maintenance_equipment_contract_demo.xml @@ -0,0 +1,26 @@ + + + + + Equipment With A Contract + + + 26534/5436/2 + 532/54 + + + Contract Supplier + + 1 + + + Contract for an Equipment + + purchase + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/bs.po new file mode 100644 index 0000000..3c350a6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/bs.po @@ -0,0 +1,55 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_contract +# +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_equipment_contract +#: model:ir.model,name:maintenance_equipment_contract.model_contract_contract +msgid "Contract" +msgstr "Ugovor" + +#. module: maintenance_equipment_contract +#: model:ir.model.fields,field_description:maintenance_equipment_contract.field_maintenance_equipment__contract_count +msgid "Contract Count" +msgstr "Broj ugovora" + +#. module: maintenance_equipment_contract +#: model:ir.model.fields,field_description:maintenance_equipment_contract.field_maintenance_equipment__contract_ids +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_contract.hr_equipment_view_form +msgid "Contracts" +msgstr "Ugovori" + +#. module: maintenance_equipment_contract +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_contract.hr_equipment_view_search +msgid "Doesn't have Contracts" +msgstr "Doesn't have Ugovors" + +#. module: maintenance_equipment_contract +#: model:maintenance.equipment,name:maintenance_equipment_contract.equipment_with_contract +msgid "Equipment With A Contract" +msgstr "Equipment With A Ugovor" + +#. module: maintenance_equipment_contract +#: model:ir.model.fields,field_description:maintenance_equipment_contract.field_contract_contract__equipment_ids +msgid "Equipments" +msgstr "Oprema" + +#. module: maintenance_equipment_contract +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_contract.hr_equipment_view_search +msgid "Has Contracts" +msgstr "Has Ugovors" + +#. module: maintenance_equipment_contract +#: model:ir.model,name:maintenance_equipment_contract.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Oprema za održavanje" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/es.po new file mode 100644 index 0000000..446d9ba --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/es.po @@ -0,0 +1,58 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_contract +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-07-14 15:48+0000\n" +"Last-Translator: Enric Tobella \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: maintenance_equipment_contract +#: model:ir.model,name:maintenance_equipment_contract.model_contract_contract +msgid "Contract" +msgstr "Contrato" + +#. module: maintenance_equipment_contract +#: model:ir.model.fields,field_description:maintenance_equipment_contract.field_maintenance_equipment__contract_count +msgid "Contract Count" +msgstr "# Contratos" + +#. module: maintenance_equipment_contract +#: model:ir.model.fields,field_description:maintenance_equipment_contract.field_maintenance_equipment__contract_ids +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_contract.hr_equipment_view_form +msgid "Contracts" +msgstr "Contratos" + +#. module: maintenance_equipment_contract +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_contract.hr_equipment_view_search +msgid "Doesn't have Contracts" +msgstr "No tiene contratos" + +#. module: maintenance_equipment_contract +#: model:maintenance.equipment,name:maintenance_equipment_contract.equipment_with_contract +msgid "Equipment With A Contract" +msgstr "Equipamiento con contrato" + +#. module: maintenance_equipment_contract +#: model:ir.model.fields,field_description:maintenance_equipment_contract.field_contract_contract__equipment_ids +msgid "Equipments" +msgstr "Equipamientos" + +#. module: maintenance_equipment_contract +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_contract.hr_equipment_view_search +msgid "Has Contracts" +msgstr "Tiene contratos" + +#. module: maintenance_equipment_contract +#: model:ir.model,name:maintenance_equipment_contract.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Equipamiento" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/it.po new file mode 100644 index 0000000..ddc111e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/it.po @@ -0,0 +1,58 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_contract +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-07-13 11:10+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_equipment_contract +#: model:ir.model,name:maintenance_equipment_contract.model_contract_contract +msgid "Contract" +msgstr "Contratto" + +#. module: maintenance_equipment_contract +#: model:ir.model.fields,field_description:maintenance_equipment_contract.field_maintenance_equipment__contract_count +msgid "Contract Count" +msgstr "Conteggio contratti" + +#. module: maintenance_equipment_contract +#: model:ir.model.fields,field_description:maintenance_equipment_contract.field_maintenance_equipment__contract_ids +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_contract.hr_equipment_view_form +msgid "Contracts" +msgstr "Contratti" + +#. module: maintenance_equipment_contract +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_contract.hr_equipment_view_search +msgid "Doesn't have Contracts" +msgstr "Non ha contratti" + +#. module: maintenance_equipment_contract +#: model:maintenance.equipment,name:maintenance_equipment_contract.equipment_with_contract +msgid "Equipment With A Contract" +msgstr "Attrezzatura con un contratto" + +#. module: maintenance_equipment_contract +#: model:ir.model.fields,field_description:maintenance_equipment_contract.field_contract_contract__equipment_ids +msgid "Equipments" +msgstr "Attrezzature" + +#. module: maintenance_equipment_contract +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_contract.hr_equipment_view_search +msgid "Has Contracts" +msgstr "Ha contratti" + +#. module: maintenance_equipment_contract +#: model:ir.model,name:maintenance_equipment_contract.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Attrezzatura manutenzione" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/maintenance_equipment_contract.pot b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/maintenance_equipment_contract.pot new file mode 100644 index 0000000..9ca1eab --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/maintenance_equipment_contract.pot @@ -0,0 +1,55 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_contract +# +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_equipment_contract +#: model:ir.model,name:maintenance_equipment_contract.model_contract_contract +msgid "Contract" +msgstr "" + +#. module: maintenance_equipment_contract +#: model:ir.model.fields,field_description:maintenance_equipment_contract.field_maintenance_equipment__contract_count +msgid "Contract Count" +msgstr "" + +#. module: maintenance_equipment_contract +#: model:ir.model.fields,field_description:maintenance_equipment_contract.field_maintenance_equipment__contract_ids +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_contract.hr_equipment_view_form +msgid "Contracts" +msgstr "" + +#. module: maintenance_equipment_contract +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_contract.hr_equipment_view_search +msgid "Doesn't have Contracts" +msgstr "" + +#. module: maintenance_equipment_contract +#: model:maintenance.equipment,name:maintenance_equipment_contract.equipment_with_contract +msgid "Equipment With A Contract" +msgstr "" + +#. module: maintenance_equipment_contract +#: model:ir.model.fields,field_description:maintenance_equipment_contract.field_contract_contract__equipment_ids +msgid "Equipments" +msgstr "" + +#. module: maintenance_equipment_contract +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_contract.hr_equipment_view_search +msgid "Has Contracts" +msgstr "" + +#. module: maintenance_equipment_contract +#: model:ir.model,name:maintenance_equipment_contract.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/pt_BR.po b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/pt_BR.po new file mode 100644 index 0000000..980f635 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/i18n/pt_BR.po @@ -0,0 +1,59 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_contract +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-05-22 03:11+0000\n" +"Last-Translator: Rodrigo Macedo \n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_equipment_contract +#: model:ir.model,name:maintenance_equipment_contract.model_contract_contract +msgid "Contract" +msgstr "Contrato" + +#. module: maintenance_equipment_contract +#: model:ir.model.fields,field_description:maintenance_equipment_contract.field_maintenance_equipment__contract_count +msgid "Contract Count" +msgstr "Contador de Contratos" + +#. module: maintenance_equipment_contract +#: model:ir.model.fields,field_description:maintenance_equipment_contract.field_maintenance_equipment__contract_ids +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_contract.hr_equipment_view_form +msgid "Contracts" +msgstr "Contratos" + +#. module: maintenance_equipment_contract +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_contract.hr_equipment_view_search +msgid "Doesn't have Contracts" +msgstr "Não possui contratos" + +#. module: maintenance_equipment_contract +#: model:maintenance.equipment,name:maintenance_equipment_contract.equipment_with_contract +msgid "Equipment With A Contract" +msgstr "Equipamento Com Um Contrato" + +#. module: maintenance_equipment_contract +#: model:ir.model.fields,field_description:maintenance_equipment_contract.field_contract_contract__equipment_ids +msgid "Equipments" +msgstr "Equipamentos" + +#. module: maintenance_equipment_contract +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_contract.hr_equipment_view_search +msgid "Has Contracts" +msgstr "Possui contratos" + +#. module: maintenance_equipment_contract +#: model:ir.model,name:maintenance_equipment_contract.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Equipamento de Manutenção" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/models/__init__.py new file mode 100644 index 0000000..0aa3e62 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/models/__init__.py @@ -0,0 +1,2 @@ +from . import contract_contract +from . import maintenance_equipment diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/models/contract_contract.py b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/models/contract_contract.py new file mode 100644 index 0000000..07967b7 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/models/contract_contract.py @@ -0,0 +1,11 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class ContractContract(models.Model): + + _inherit = "contract.contract" + + equipment_ids = fields.Many2many("maintenance.equipment", string="Equipments") diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/models/maintenance_equipment.py b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/models/maintenance_equipment.py new file mode 100644 index 0000000..011903b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/models/maintenance_equipment.py @@ -0,0 +1,40 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class MaintenanceEquipment(models.Model): + + _inherit = "maintenance.equipment" + + contract_ids = fields.Many2many("contract.contract", string="Contracts") + contract_count = fields.Integer( + compute="_compute_contract_count", + ) + + @api.depends("contract_ids") + def _compute_contract_count(self): + for record in self: + record.contract_count = len(record.contract_ids.ids) + + def action_view_contracts(self): + action = self.env["ir.actions.act_window"]._for_xml_id( + "contract.action_customer_contract" + ) + if len(self.contract_ids) > 1: + action["domain"] = [("id", "in", self.contract_ids.ids)] + elif self.contract_ids: + action["views"] = [ + (self.env.ref("contract.contract_contract_form_view").id, "form") + ] + action["res_id"] = self.contract_ids.id + action["context"] = { + "default_equipment_ids": self.ids, + "is_contract": 1, + "search_default_not_finished": 1, + "search_default_recurring_invoices": 1, + "default_recurring_invoices": 1, + "default_contract_type": "purchase", + } + return action diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..e59d510 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Jaime Arroyo diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/readme/DESCRIPTION.rst new file mode 100644 index 0000000..2c1567c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/readme/DESCRIPTION.rst @@ -0,0 +1,3 @@ +This module links maintenance equipment with supplier contracts. +To link an equipment go to the contract's form and add it to the Equipments +field. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/static/description/index.html new file mode 100644 index 0000000..02ed2c2 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/static/description/index.html @@ -0,0 +1,423 @@ + + + + + + +Maintenance Equipment Contract + + + +
+

Maintenance Equipment Contract

+ + +

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

+

This module links maintenance equipment with supplier contracts. +To link an equipment go to the contract’s form and add it to the Equipments +field.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Creu Blanca
  • +
+
+ +
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/tests/__init__.py new file mode 100644 index 0000000..3def2f6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/tests/__init__.py @@ -0,0 +1 @@ +from . import test_equipment_contract diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/tests/test_equipment_contract.py b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/tests/test_equipment_contract.py new file mode 100644 index 0000000..9c5063e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/tests/test_equipment_contract.py @@ -0,0 +1,36 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests.common import TransactionCase + + +class TestEquipmentContract(TransactionCase): + def setUp(self): + super().setUp() + self.partner = self.env["res.partner"].create({"name": "Test partner"}) + self.equipment_id = self.env["maintenance.equipment"].create( + {"name": "Equipment"} + ) + self.contract = self.env["contract.contract"].create( + { + "name": "Contract", + "partner_id": self.partner.id, + "equipment_ids": [(4, self.equipment_id.id)], + } + ) + + def test_equipment_contract(self): + self.assertEqual(self.equipment_id.contract_count, 1) + action = self.equipment_id.action_view_contracts() + self.assertEqual(action["res_id"], self.contract.id) + + self.env["contract.contract"].create( + { + "name": "Contract 2", + "partner_id": self.partner.id, + "equipment_ids": [(4, self.equipment_id.id)], + } + ) + self.assertEqual(self.equipment_id.contract_count, 2) + action = self.equipment_id.action_view_contracts() + self.assertIn("domain", action.keys()) diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/views/contract_contract.xml b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/views/contract_contract.xml new file mode 100644 index 0000000..f7021d7 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/views/contract_contract.xml @@ -0,0 +1,33 @@ + + + + + contract.contract.form (in maintenance_equipment_contract) + contract.contract + + + + + + + + + contract.contract.search (in maintenance_equipment_contract) + contract.contract + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/views/maintenance_equipment.xml b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/views/maintenance_equipment.xml new file mode 100644 index 0000000..73b240c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/maintenance_equipment_contract/views/maintenance_equipment.xml @@ -0,0 +1,47 @@ + + + + + maintenance.equipment.form (in maintenance_equipment_contract) + maintenance.equipment + + +
+ + +
+
+
+ + maintenance.equipment.search (in maintenance_equipment_contract) + maintenance.equipment + + + + + + + + + +
diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_contract/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/pyproject.toml new file mode 100644 index 0000000..9bfba0d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_contract/pyproject.toml @@ -0,0 +1,44 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_equipment_contract" +version = "16.0.0" +description = "Maintenance Equipment Contract - + Manage equipment contracts" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-contract>=16.0.0", + "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_equipment_contract"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/README.md b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/README.md new file mode 100644 index 0000000..c4aabba --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/README.md @@ -0,0 +1,44 @@ +# Maintenance Equipments Hierarchy + +Odoo addon: maintenance_equipment_hierarchy + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy +``` + +## Dependencies + +This addon depends on: +- maintenance + +## Manifest Information + +- **Name**: Maintenance Equipments Hierarchy +- **Version**: 16.0.1.1.0 +- **Category**: Equipments, Assets, Internal Hardware, Allocation Tracking +- **License**: LGPL-3 +- **Installable**: False + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_equipment_hierarchy`. + +## License + +This package maintains the original LGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/ARCHITECTURE.md new file mode 100644 index 0000000..7a6c63c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/ARCHITECTURE.md @@ -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_equipment_hierarchy Module - maintenance_equipment_hierarchy + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/CONFIGURATION.md new file mode 100644 index 0000000..23881c5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_equipment_hierarchy. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/DEPENDENCIES.md new file mode 100644 index 0000000..a7cb7c6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/DEPENDENCIES.md @@ -0,0 +1,5 @@ +# Dependencies + +This addon depends on: + +- [maintenance](https://github.com/bringout/oca-ocb-vertical-industry/tree/a60a29f57ff34f3c01d0521d0a6003956d80acd9/odoo-bringout-oca-ocb-maintenance) diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/FAQ.md new file mode 100644 index 0000000..d176201 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/FAQ.md @@ -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_equipment_hierarchy or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/INSTALL.md new file mode 100644 index 0000000..899bedd --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/MODELS.md new file mode 100644 index 0000000..d790312 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/MODELS.md @@ -0,0 +1,12 @@ +# Models + +Detected core models and extensions in maintenance_equipment_hierarchy. + +```mermaid +classDiagram + class maintenance_equipment +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/OVERVIEW.md new file mode 100644 index 0000000..fba3272 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_equipment_hierarchy. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_equipment_hierarchy +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/SECURITY.md new file mode 100644 index 0000000..e07da9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/SECURITY.md @@ -0,0 +1,8 @@ +# Security + +This module does not define custom security rules or access controls beyond Odoo defaults. + +Default Odoo security applies: +- Base user access through standard groups +- Model access inherited from dependencies +- No custom row-level security rules diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/USAGE.md new file mode 100644 index 0000000..e5a9c7c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/USAGE.md @@ -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_equipment_hierarchy +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/README.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/README.rst new file mode 100644 index 0000000..f1a96f4 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/README.rst @@ -0,0 +1,86 @@ +================================ +Maintenance Equipments Hierarchy +================================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:df8f7913193eb911b9c6eea557052c5f1e0ed34b9e0a06bb3e9afff7e9d9ab89 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmaintenance-lightgray.png?logo=github + :target: https://github.com/OCA/maintenance/tree/16.0/maintenance_equipment_hierarchy + :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_equipment_hierarchy + :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 allows to manage a hierarchy of equipments. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* ForgeFlow + +Contributors +~~~~~~~~~~~~ + +* Adrià Gil Sorribes +* Jordi Ballester Alomar +* David Alonso + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-dalonsod| image:: https://github.com/dalonsod.png?size=40px + :target: https://github.com/dalonsod + :alt: dalonsod + +Current `maintainer `__: + +|maintainer-dalonsod| + +This module is part of the `OCA/maintenance `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/__manifest__.py new file mode 100644 index 0000000..32ad3e8 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/__manifest__.py @@ -0,0 +1,16 @@ +# Copyright 2020 ForgeFlow S.L. (https://forgeflow.com) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + "name": "Maintenance Equipments Hierarchy", + "summary": "Manage equipment hierarchy", + "author": "ForgeFlow, Odoo Community Association (OCA)", + "maintainers": ["dalonsod"], + "website": "https://github.com/OCA/maintenance", + "category": "Equipments, Assets, Internal Hardware, Allocation Tracking", + "version": "16.0.1.1.0", + "license": "LGPL-3", + "depends": ["maintenance"], + "data": ["views/maintenance_equipment_views.xml"], + "demo": ["data/demo_maintenance_equipment_hierarchy.xml"], +} diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/data/demo_maintenance_equipment_hierarchy.xml b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/data/demo_maintenance_equipment_hierarchy.xml new file mode 100644 index 0000000..603d6e8 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/data/demo_maintenance_equipment_hierarchy.xml @@ -0,0 +1,23 @@ + + + + HP Laptop battery + + + + + LP/303/28292090/BAT + 17-j059nr-bat + + + + HP Laptop case + + + + + LP/303/28292090/CAS + 17-j059nr-cas + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/bs.po new file mode 100644 index 0000000..306cc42 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/bs.po @@ -0,0 +1,81 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_hierarchy +# +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_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__child_ids +msgid "Child Equipments" +msgstr "Child Equipments" + +#. module: maintenance_equipment_hierarchy +#. odoo-python +#: code:addons/maintenance_equipment_hierarchy/models/maintenance_equipment.py:0 +#, python-format +msgid "Child equipment of %s" +msgstr "Child equipment of %s" + +#. module: maintenance_equipment_hierarchy +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_hierarchy.hr_equipment_view_form +msgid "Children" +msgstr "Podređeni" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__complete_name +msgid "Complete Name" +msgstr "Puni naziv" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__display_name +msgid "Display Name" +msgstr "Prikazani naziv" + +#. module: maintenance_equipment_hierarchy +#: model:maintenance.equipment,name:maintenance_equipment_hierarchy.equipment_computer9_1 +msgid "HP Laptop battery" +msgstr "HP Laptop battery" + +#. module: maintenance_equipment_hierarchy +#: model:maintenance.equipment,name:maintenance_equipment_hierarchy.equipment_computer9_2 +msgid "HP Laptop case" +msgstr "HP Laptop case" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_left +msgid "Left Parent" +msgstr "Left Parent" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model,name:maintenance_equipment_hierarchy.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Oprema za održavanje" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__child_count +msgid "Number of child equipments" +msgstr "Broj of child equipments" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_id +msgid "Parent Equipment" +msgstr "Parent Equipment" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_path +msgid "Parent Path" +msgstr "Putanja nadređenih" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_right +msgid "Right Parent" +msgstr "Right Parent" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/es.po new file mode 100644 index 0000000..f4027d6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/es.po @@ -0,0 +1,87 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_hierarchy +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-07-22 23:09+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__child_ids +msgid "Child Equipments" +msgstr "Equipamientos Hijos" + +#. module: maintenance_equipment_hierarchy +#. odoo-python +#: code:addons/maintenance_equipment_hierarchy/models/maintenance_equipment.py:0 +#, python-format +msgid "Child equipment of %s" +msgstr "Equipo infantil de %s" + +#. module: maintenance_equipment_hierarchy +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_hierarchy.hr_equipment_view_form +msgid "Children" +msgstr "Hijos" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__complete_name +msgid "Complete Name" +msgstr "Nombre Completo" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__display_name +msgid "Display Name" +msgstr "Nombre a Mostrar" + +#. module: maintenance_equipment_hierarchy +#: model:maintenance.equipment,name:maintenance_equipment_hierarchy.equipment_computer9_1 +msgid "HP Laptop battery" +msgstr "Batería de Portátil HP" + +#. module: maintenance_equipment_hierarchy +#: model:maintenance.equipment,name:maintenance_equipment_hierarchy.equipment_computer9_2 +msgid "HP Laptop case" +msgstr "Funda de Portátil HP" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_left +msgid "Left Parent" +msgstr "Padre Izquierdo" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model,name:maintenance_equipment_hierarchy.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Equipamiento de mantenimiento" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__child_count +msgid "Number of child equipments" +msgstr "Número de Equipamientos Hijos" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_id +msgid "Parent Equipment" +msgstr "Equipo Padre" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_path +msgid "Parent Path" +msgstr "ruta parental" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_right +msgid "Right Parent" +msgstr "Padre derecho" + +#~ msgid "Equipment" +#~ msgstr "Equipamiento" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/fr.po b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/fr.po new file mode 100644 index 0000000..ab9678b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/fr.po @@ -0,0 +1,84 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_hierarchy +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-03-19 15:46+0000\n" +"Last-Translator: Sandrine (ACSONE) \n" +"Language-Team: none\n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__child_ids +msgid "Child Equipments" +msgstr "Equipements enfants" + +#. module: maintenance_equipment_hierarchy +#. odoo-python +#: code:addons/maintenance_equipment_hierarchy/models/maintenance_equipment.py:0 +#, python-format +msgid "Child equipment of %s" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_hierarchy.hr_equipment_view_form +msgid "Children" +msgstr "Enfants" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__complete_name +msgid "Complete Name" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__display_name +msgid "Display Name" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:maintenance.equipment,name:maintenance_equipment_hierarchy.equipment_computer9_1 +msgid "HP Laptop battery" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:maintenance.equipment,name:maintenance_equipment_hierarchy.equipment_computer9_2 +msgid "HP Laptop case" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_left +msgid "Left Parent" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model,name:maintenance_equipment_hierarchy.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Equipement" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__child_count +msgid "Number of child equipments" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_id +msgid "Parent Equipment" +msgstr "Equipement parent" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_path +msgid "Parent Path" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_right +msgid "Right Parent" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/it.po new file mode 100644 index 0000000..0bcfe7c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/it.po @@ -0,0 +1,84 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_hierarchy +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-06-10 11:09+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__child_ids +msgid "Child Equipments" +msgstr "Attrezzature discendenti" + +#. module: maintenance_equipment_hierarchy +#. odoo-python +#: code:addons/maintenance_equipment_hierarchy/models/maintenance_equipment.py:0 +#, python-format +msgid "Child equipment of %s" +msgstr "Attrezzatura figlia di %s" + +#. module: maintenance_equipment_hierarchy +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_hierarchy.hr_equipment_view_form +msgid "Children" +msgstr "Figli" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__complete_name +msgid "Complete Name" +msgstr "Nome completo" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: maintenance_equipment_hierarchy +#: model:maintenance.equipment,name:maintenance_equipment_hierarchy.equipment_computer9_1 +msgid "HP Laptop battery" +msgstr "Batteria laptop HP" + +#. module: maintenance_equipment_hierarchy +#: model:maintenance.equipment,name:maintenance_equipment_hierarchy.equipment_computer9_2 +msgid "HP Laptop case" +msgstr "Case laptop HP" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_left +msgid "Left Parent" +msgstr "Ascendente precedente" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model,name:maintenance_equipment_hierarchy.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Attrezzatura manutenzione" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__child_count +msgid "Number of child equipments" +msgstr "Numero di attrezzature discendenti" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_id +msgid "Parent Equipment" +msgstr "Attrezzatura ascendente" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_path +msgid "Parent Path" +msgstr "Percorso padre" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_right +msgid "Right Parent" +msgstr "Padre successivo" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/maintenance_equipment_hierarchy.pot b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/maintenance_equipment_hierarchy.pot new file mode 100644 index 0000000..4c3234d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/maintenance_equipment_hierarchy.pot @@ -0,0 +1,81 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_hierarchy +# +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_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__child_ids +msgid "Child Equipments" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#. odoo-python +#: code:addons/maintenance_equipment_hierarchy/models/maintenance_equipment.py:0 +#, python-format +msgid "Child equipment of %s" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_hierarchy.hr_equipment_view_form +msgid "Children" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__complete_name +msgid "Complete Name" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__display_name +msgid "Display Name" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:maintenance.equipment,name:maintenance_equipment_hierarchy.equipment_computer9_1 +msgid "HP Laptop battery" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:maintenance.equipment,name:maintenance_equipment_hierarchy.equipment_computer9_2 +msgid "HP Laptop case" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_left +msgid "Left Parent" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model,name:maintenance_equipment_hierarchy.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__child_count +msgid "Number of child equipments" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_id +msgid "Parent Equipment" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_path +msgid "Parent Path" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_right +msgid "Right Parent" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/sk.po b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/sk.po new file mode 100644 index 0000000..6176e64 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/i18n/sk.po @@ -0,0 +1,82 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_hierarchy +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__child_ids +msgid "Child Equipments" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#. odoo-python +#: code:addons/maintenance_equipment_hierarchy/models/maintenance_equipment.py:0 +#, python-format +msgid "Child equipment of %s" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_hierarchy.hr_equipment_view_form +msgid "Children" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__complete_name +msgid "Complete Name" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__display_name +msgid "Display Name" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:maintenance.equipment,name:maintenance_equipment_hierarchy.equipment_computer9_1 +msgid "HP Laptop battery" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:maintenance.equipment,name:maintenance_equipment_hierarchy.equipment_computer9_2 +msgid "HP Laptop case" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_left +msgid "Left Parent" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model,name:maintenance_equipment_hierarchy.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__child_count +msgid "Number of child equipments" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_id +msgid "Parent Equipment" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_path +msgid "Parent Path" +msgstr "" + +#. module: maintenance_equipment_hierarchy +#: model:ir.model.fields,field_description:maintenance_equipment_hierarchy.field_maintenance_equipment__parent_right +msgid "Right Parent" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/models/__init__.py new file mode 100644 index 0000000..e960c41 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/models/__init__.py @@ -0,0 +1 @@ +from . import maintenance_equipment diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/models/maintenance_equipment.py b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/models/maintenance_equipment.py new file mode 100644 index 0000000..ee0dfbd --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/models/maintenance_equipment.py @@ -0,0 +1,68 @@ +# Copyright 2020 ForgeFlow S.L. (https://forgeflow.com) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo import _, api, fields, models + + +class MaintenanceEquipment(models.Model): + + _inherit = "maintenance.equipment" + _parent_name = "parent_id" + _parent_store = True + _parent_order = "name" + + parent_id = fields.Many2one( + "maintenance.equipment", + "Parent Equipment", + index=True, + ondelete="cascade", + tracking=True, + ) + child_ids = fields.One2many( + "maintenance.equipment", "parent_id", "Child Equipments" + ) + parent_left = fields.Integer("Left Parent", index=1) + parent_right = fields.Integer("Right Parent", index=1) + child_count = fields.Integer( + compute="_compute_child_count", string="Number of child equipments" + ) + display_name = fields.Char(compute="_compute_display_name") + complete_name = fields.Char( + compute="_compute_complete_name", store=True, recursive=True + ) + parent_path = fields.Char(index=True, unaccent=False) + + def name_get(self): + return [(equipment.id, equipment.complete_name) for equipment in self] + + @api.depends("child_ids") + def _compute_child_count(self): + for equipment in self: + equipment.child_count = len(equipment.child_ids) + + def _compute_display_name(self): + for equipment in self: + equipment.display_name = equipment.complete_name + + @api.depends("name", "parent_id.complete_name") # recursive definition + def _compute_complete_name(self): + for equipment in self: + if equipment.parent_id: + parent_name = equipment.parent_id.complete_name + equipment.complete_name = parent_name + " / " + equipment.name + else: + equipment.complete_name = equipment.name + + def preview_child_list(self): + return { + "name": _("Child equipment of %s") % self.name, + "type": "ir.actions.act_window", + "res_model": "maintenance.equipment", + "view_mode": "list,form", + "context": { + **self.env.context, + "default_parent_id": self.id, + "parent_id_editable": False, + }, + "domain": [("parent_id", "=", self.id)], + } diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..6ae5792 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* Adrià Gil Sorribes +* Jordi Ballester Alomar +* David Alonso diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/readme/DESCRIPTION.rst new file mode 100644 index 0000000..c561add --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module allows to manage a hierarchy of equipments. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/static/description/index.html new file mode 100644 index 0000000..517411a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/static/description/index.html @@ -0,0 +1,425 @@ + + + + + + +Maintenance Equipments Hierarchy + + + +
+

Maintenance Equipments Hierarchy

+ + +

Beta License: LGPL-3 OCA/maintenance Translate me on Weblate Try me on Runboat

+

This module allows to manage a hierarchy of equipments.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • ForgeFlow
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

Current maintainer:

+

dalonsod

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/tests/__init__.py new file mode 100644 index 0000000..08989b9 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/tests/__init__.py @@ -0,0 +1 @@ +from . import test_maintenance_equipment_hierarchy diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/tests/test_maintenance_equipment_hierarchy.py b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/tests/test_maintenance_equipment_hierarchy.py new file mode 100644 index 0000000..fe6c0df --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/tests/test_maintenance_equipment_hierarchy.py @@ -0,0 +1,37 @@ +# Copyright 2020 ForgeFlow S.L. (https://forgeflow.com) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo.exceptions import UserError +from odoo.tests import common + + +class TestMaintenanceEquipmentHierarchy(common.TransactionCase): + def setUp(self): + super(TestMaintenanceEquipmentHierarchy, self).setUp() + self.Equipment = self.env["maintenance.equipment"] + self.equipment1 = self.Equipment.create({"name": "Equipment 1"}) + + self.equipment1_1 = self.Equipment.create({"name": "Equipment 1.1"}) + + def test_01_hierarchy(self): + self.equipment1_1.parent_id = self.equipment1 + res = self.equipment1.preview_child_list() + self.assertEqual(res["domain"], [("parent_id", "=", self.equipment1.id)]) + + def test_02_recursion(self): + with self.assertRaises(UserError): + self.equipment1.parent_id = self.equipment1 + + def test_03_name_get_display_complete(self): + self.equipment1_1.parent_id = self.equipment1 + equipment1_1_complete_name = ( + self.equipment1.name + " / " + self.equipment1_1.name + ) + + self.assertEqual(self.equipment1.name_get()[0][1], self.equipment1.name) + self.assertEqual(self.equipment1.complete_name, self.equipment1.name) + self.assertEqual(self.equipment1.display_name, self.equipment1.name) + + self.assertEqual(self.equipment1_1.name_get()[0][1], equipment1_1_complete_name) + self.assertEqual(self.equipment1_1.complete_name, equipment1_1_complete_name) + self.assertEqual(self.equipment1_1.display_name, equipment1_1_complete_name) diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/views/maintenance_equipment_views.xml b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/views/maintenance_equipment_views.xml new file mode 100644 index 0000000..8a577ee --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/maintenance_equipment_hierarchy/views/maintenance_equipment_views.xml @@ -0,0 +1,51 @@ + + + + equipment.form + maintenance.equipment + + +
+ +
+ + + + +
+ + equipment.tree + maintenance.equipment + + + + + + + + + equipment.search + maintenance.equipment + + + + ['|','|','|',('complete_name','ilike',self),('model','ilike',self),('serial_no','ilike',self),('partner_ref', 'ilike', self)] + + + +
diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/pyproject.toml new file mode 100644 index 0000000..676b3c5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy/pyproject.toml @@ -0,0 +1,42 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_equipment_hierarchy" +version = "16.0.0" +description = "Maintenance Equipments Hierarchy - Manage equipment hierarchy" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-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_equipment_hierarchy"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/README.md b/odoo-bringout-oca-maintenance-maintenance_equipment_image/README.md new file mode 100644 index 0000000..4ceba27 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/README.md @@ -0,0 +1,44 @@ +# Maintenance Equipment Image + +Odoo addon: maintenance_equipment_image + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_equipment_image +``` + +## Dependencies + +This addon depends on: +- maintenance + +## Manifest Information + +- **Name**: Maintenance Equipment Image +- **Version**: 16.0.1.0.0 +- **Category**: Manufacturing/Maintenance +- **License**: AGPL-3 +- **Installable**: True + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_equipment_image`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/ARCHITECTURE.md new file mode 100644 index 0000000..a1cb952 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/ARCHITECTURE.md @@ -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_equipment_image Module - maintenance_equipment_image + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/CONFIGURATION.md new file mode 100644 index 0000000..0071435 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_equipment_image. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/DEPENDENCIES.md new file mode 100644 index 0000000..a7cb7c6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/DEPENDENCIES.md @@ -0,0 +1,5 @@ +# Dependencies + +This addon depends on: + +- [maintenance](https://github.com/bringout/oca-ocb-vertical-industry/tree/a60a29f57ff34f3c01d0521d0a6003956d80acd9/odoo-bringout-oca-ocb-maintenance) diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/FAQ.md new file mode 100644 index 0000000..09b8670 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/FAQ.md @@ -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_equipment_image or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/INSTALL.md new file mode 100644 index 0000000..1fd16ce --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_equipment_image" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_equipment_image" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/MODELS.md new file mode 100644 index 0000000..dfbcb51 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/MODELS.md @@ -0,0 +1,12 @@ +# Models + +Detected core models and extensions in maintenance_equipment_image. + +```mermaid +classDiagram + class maintenance_equipment +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/OVERVIEW.md new file mode 100644 index 0000000..51192e3 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_equipment_image. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_equipment_image +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/SECURITY.md new file mode 100644 index 0000000..e07da9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/SECURITY.md @@ -0,0 +1,8 @@ +# Security + +This module does not define custom security rules or access controls beyond Odoo defaults. + +Default Odoo security applies: +- Base user access through standard groups +- Model access inherited from dependencies +- No custom row-level security rules diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/USAGE.md new file mode 100644 index 0000000..796ce26 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/USAGE.md @@ -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_equipment_image +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/README.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/README.rst new file mode 100644 index 0000000..ad34bc9 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/README.rst @@ -0,0 +1,84 @@ +=========================== +Maintenance Equipment Image +=========================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:5e0e01b8d0355fe067a5080c15f4b58dd7125bc1fc8b9e307c4164f5851f2fde + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_equipment_image + :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_equipment_image + :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 adds images to the maintenance equipments. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Exo Software + +Contributors +~~~~~~~~~~~~ + +* Pedro Castro Silva + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-pedrocasi| image:: https://github.com/pedrocasi.png?size=40px + :target: https://github.com/pedrocasi + :alt: pedrocasi + +Current `maintainer `__: + +|maintainer-pedrocasi| + +This module is part of the `OCA/maintenance `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/__manifest__.py new file mode 100644 index 0000000..7aa3c4f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/__manifest__.py @@ -0,0 +1,19 @@ +# Copyright 2021 Exo Software +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Maintenance Equipment Image", + "summary": """Adds images to equipment.""", + "category": "Manufacturing/Maintenance", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "Exo Software," "Odoo Community Association (OCA)", + "maintainers": ["pedrocasi"], + "website": "https://github.com/OCA/maintenance", + "depends": ["maintenance"], + "data": [ + "views/maintenance_equipment_views.xml", + ], + "installable": True, + "application": False, +} diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/bs.po new file mode 100644 index 0000000..7c473e0 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/bs.po @@ -0,0 +1,49 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_image +# +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_equipment_image +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_image.hr_equipment_view_kanban +msgid "Equipment" +msgstr "Oprema" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_1920 +msgid "Image" +msgstr "Slika" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_1024 +msgid "Image 1024" +msgstr "Slika 1024" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_128 +msgid "Image 128" +msgstr "Slika 128" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_256 +msgid "Image 256" +msgstr "Slika 256" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_512 +msgid "Image 512" +msgstr "Slika 512" + +#. module: maintenance_equipment_image +#: model:ir.model,name:maintenance_equipment_image.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Oprema za održavanje" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/es.po new file mode 100644 index 0000000..209ced3 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/es.po @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_image +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-07-22 23:09+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_equipment_image +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_image.hr_equipment_view_kanban +msgid "Equipment" +msgstr "Equipamiento" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_1920 +msgid "Image" +msgstr "Imagen" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_1024 +msgid "Image 1024" +msgstr "Image 1024" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_128 +msgid "Image 128" +msgstr "Image 128" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_256 +msgid "Image 256" +msgstr "Image 256" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_512 +msgid "Image 512" +msgstr "Image 512" + +#. module: maintenance_equipment_image +#: model:ir.model,name:maintenance_equipment_image.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Equipo de Mantenimiento" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/it.po new file mode 100644 index 0000000..adba534 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/it.po @@ -0,0 +1,61 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_image +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-07-25 12:12+0000\n" +"Last-Translator: Francesco Foresti \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_equipment_image +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_image.hr_equipment_view_kanban +msgid "Equipment" +msgstr "Attrezzatura" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_1920 +msgid "Image" +msgstr "Immagine" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_1024 +msgid "Image 1024" +msgstr "Immagine 1024" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_128 +msgid "Image 128" +msgstr "Immagine 128" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_256 +msgid "Image 256" +msgstr "Immagine 256" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_512 +msgid "Image 512" +msgstr "Immagine 512" + +#. module: maintenance_equipment_image +#: model:ir.model,name:maintenance_equipment_image.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Attrezzatura manutenzione" + +#~ msgid "Display Name" +#~ msgstr "Nome visualizzato" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima modifica il" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/maintenance_equipment_image.pot b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/maintenance_equipment_image.pot new file mode 100644 index 0000000..f36217b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/maintenance_equipment_image.pot @@ -0,0 +1,49 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_image +# +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_equipment_image +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_image.hr_equipment_view_kanban +msgid "Equipment" +msgstr "" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_1920 +msgid "Image" +msgstr "" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_1024 +msgid "Image 1024" +msgstr "" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_128 +msgid "Image 128" +msgstr "" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_256 +msgid "Image 256" +msgstr "" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_512 +msgid "Image 512" +msgstr "" + +#. module: maintenance_equipment_image +#: model:ir.model,name:maintenance_equipment_image.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/pt.po b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/pt.po new file mode 100644 index 0000000..f6df42a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/i18n/pt.po @@ -0,0 +1,62 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_image +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-04 10:04+0000\n" +"PO-Revision-Date: 2021-12-04 10:05+0000\n" +"Last-Translator: Pedro Castro Silva \n" +"Language-Team: \n" +"Language: pt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 3.0\n" + +#. module: maintenance_equipment_image +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_image.hr_equipment_view_kanban +msgid "Equipment" +msgstr "Equipamento" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_1920 +msgid "Image" +msgstr "Imagem" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_1024 +msgid "Image 1024" +msgstr "Imagem 1024" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_128 +msgid "Image 128" +msgstr "Imagem 128" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_256 +msgid "Image 256" +msgstr "Imagem 256" + +#. module: maintenance_equipment_image +#: model:ir.model.fields,field_description:maintenance_equipment_image.field_maintenance_equipment__image_512 +msgid "Image 512" +msgstr "Imagem 512" + +#. module: maintenance_equipment_image +#: model:ir.model,name:maintenance_equipment_image.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Equipamento de Manutenção" + +#~ msgid "Display Name" +#~ msgstr "Nome a Apresentar" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Última Modificação Em" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/models/__init__.py new file mode 100644 index 0000000..e960c41 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/models/__init__.py @@ -0,0 +1 @@ +from . import maintenance_equipment diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/models/maintenance_equipment.py b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/models/maintenance_equipment.py new file mode 100644 index 0000000..0d53838 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/models/maintenance_equipment.py @@ -0,0 +1,9 @@ +# Copyright 2021 Exo Software, Lda. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models + + +class MaintenanceEquipment(models.Model): + _inherit = ["maintenance.equipment", "image.mixin"] + _name = "maintenance.equipment" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..16fb9ca --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Pedro Castro Silva diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/readme/DESCRIPTION.rst new file mode 100644 index 0000000..47e9bce --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module adds images to the maintenance equipments. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/static/description/index.html new file mode 100644 index 0000000..44e0e25 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/static/description/index.html @@ -0,0 +1,423 @@ + + + + + + +Maintenance Equipment Image + + + +
+

Maintenance Equipment Image

+ + +

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

+

This module adds images to the maintenance equipments.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Exo Software
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

Current maintainer:

+

pedrocasi

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/views/maintenance_equipment_views.xml b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/views/maintenance_equipment_views.xml new file mode 100644 index 0000000..5dd8fd1 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/maintenance_equipment_image/views/maintenance_equipment_views.xml @@ -0,0 +1,39 @@ + + + + + maintenance.equipment + + + + + + + + + + maintenance.equipment + + + + + + +
+ Equipment +
+
+ +
+
+ +
diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_image/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_equipment_image/pyproject.toml new file mode 100644 index 0000000..b51b519 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_image/pyproject.toml @@ -0,0 +1,42 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_equipment_image" +version = "16.0.0" +description = "Maintenance Equipment Image - Adds images to equipment." +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-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_equipment_image"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/README.md b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/README.md new file mode 100644 index 0000000..8e1f4fb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/README.md @@ -0,0 +1,44 @@ +# Maintenance Equipment Sequence + +Odoo addon: maintenance_equipment_sequence + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_equipment_sequence +``` + +## Dependencies + +This addon depends on: +- maintenance + +## Manifest Information + +- **Name**: Maintenance Equipment Sequence +- **Version**: 16.0.1.0.2 +- **Category**: N/A +- **License**: AGPL-3 +- **Installable**: False + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_equipment_sequence`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/ARCHITECTURE.md new file mode 100644 index 0000000..70253a7 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/ARCHITECTURE.md @@ -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_equipment_sequence Module - maintenance_equipment_sequence + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/CONFIGURATION.md new file mode 100644 index 0000000..1543b30 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_equipment_sequence. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/DEPENDENCIES.md new file mode 100644 index 0000000..a7cb7c6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/DEPENDENCIES.md @@ -0,0 +1,5 @@ +# Dependencies + +This addon depends on: + +- [maintenance](https://github.com/bringout/oca-ocb-vertical-industry/tree/a60a29f57ff34f3c01d0521d0a6003956d80acd9/odoo-bringout-oca-ocb-maintenance) diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/FAQ.md new file mode 100644 index 0000000..4a0a17d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/FAQ.md @@ -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_equipment_sequence or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/INSTALL.md new file mode 100644 index 0000000..eafea4d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_equipment_sequence" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_equipment_sequence" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/MODELS.md new file mode 100644 index 0000000..9f2c045 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/MODELS.md @@ -0,0 +1,13 @@ +# Models + +Detected core models and extensions in maintenance_equipment_sequence. + +```mermaid +classDiagram + class maintenance_equipment + class maintenance_equipment_category +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/OVERVIEW.md new file mode 100644 index 0000000..4a8111c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_equipment_sequence. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_equipment_sequence +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/SECURITY.md new file mode 100644 index 0000000..e07da9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/SECURITY.md @@ -0,0 +1,8 @@ +# Security + +This module does not define custom security rules or access controls beyond Odoo defaults. + +Default Odoo security applies: +- Base user access through standard groups +- Model access inherited from dependencies +- No custom row-level security rules diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/USAGE.md new file mode 100644 index 0000000..106eefc --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/USAGE.md @@ -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_equipment_sequence +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/README.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/README.rst new file mode 100644 index 0000000..db9f3c7 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/README.rst @@ -0,0 +1,86 @@ +============================== +Maintenance Equipment Sequence +============================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:0961f01d04702ea5589459b97ebc32b4c47bf93df77150b4fcbf5fce3e91375d + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_equipment_sequence + :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_equipment_sequence + :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 introduces a sequence to the maintenance equipment managed from the maintenance equipment category + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* ForgeFlow S.L. + +Contributors +~~~~~~~~~~~~ + +* Adria Gil Sorribes +* Núria Martín Xifré +* Bernat Puig Font + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-AdriaGForgeFlow| image:: https://github.com/AdriaGForgeFlow.png?size=40px + :target: https://github.com/AdriaGForgeFlow + :alt: AdriaGForgeFlow + +Current `maintainer `__: + +|maintainer-AdriaGForgeFlow| + +This module is part of the `OCA/maintenance `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/__manifest__.py new file mode 100644 index 0000000..6d44162 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/__manifest__.py @@ -0,0 +1,16 @@ +# Copyright 2021 ForgeFlow S.L. (https://forgeflow.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Maintenance Equipment Sequence", + "summary": """ + Adds sequence to maintenance equipment defined in the equipment's + category""", + "version": "16.0.1.0.2", + "license": "AGPL-3", + "author": "ForgeFlow S.L.," "Odoo Community Association (OCA)", + "maintainers": ["AdriaGForgeFlow"], + "website": "https://github.com/OCA/maintenance", + "depends": ["maintenance"], + "data": ["views/maintenance_views.xml"], +} diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/i18n/bs.po new file mode 100644 index 0000000..abb7678 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/i18n/bs.po @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_sequence +# +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_equipment_sequence +#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_id +msgid "Entry Sequence" +msgstr "Ulazna sekvenca" + +#. module: maintenance_equipment_sequence +#: model:ir.model,name:maintenance_equipment_sequence.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Oprema za održavanje" + +#. module: maintenance_equipment_sequence +#: model:ir.model,name:maintenance_equipment_sequence.model_maintenance_equipment_category +msgid "Maintenance Equipment Category" +msgstr "Kategorija opreme za održavanje" + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_number_next +msgid "Next Number" +msgstr "Sljedeći broj" + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_prefix +msgid "Sequence Prefix" +msgstr "Prefiks brojevnog kruga" + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_prefix +msgid "The equipment's sequence will be created using this prefix." +msgstr "The equipment's sequence will be created using this prefix." + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_number_next +msgid "The next sequence number will be used for the next equipment." +msgstr "The next sequence number will be used for the next equipment." + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the " +"equipments belonging to this category." +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/i18n/es.po new file mode 100644 index 0000000..e93a661 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/i18n/es.po @@ -0,0 +1,70 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_sequence +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-09-20 17:47+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_id +msgid "Entry Sequence" +msgstr "Secuencia" + +#. module: maintenance_equipment_sequence +#: model:ir.model,name:maintenance_equipment_sequence.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Equipo de Mantenimiento" + +#. module: maintenance_equipment_sequence +#: model:ir.model,name:maintenance_equipment_sequence.model_maintenance_equipment_category +msgid "Maintenance Equipment Category" +msgstr "Categoría Equipo de mantenimiento" + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_number_next +msgid "Next Number" +msgstr "Número siguiente" + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_prefix +msgid "Sequence Prefix" +msgstr "Prefijo de la secuencia" + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_prefix +msgid "The equipment's sequence will be created using this prefix." +msgstr "La secuencia de este equipamiento se creará usando este prefijo." + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_number_next +msgid "The next sequence number will be used for the next equipment." +msgstr "Este campo se utilizará para el siguiente código de equipamiento." + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the " +"equipments belonging to this category." +msgstr "" +"Este campo contiene la información relacionada con la numeración de los " +"equipamientos de esta categoría." + +#~ msgid "Code" +#~ msgstr "Código" + +#~ msgid "Equipment Code" +#~ msgstr "Código del Equipamiento" + +#~ msgid "Asset Category" +#~ msgstr "Categoría del activo" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/i18n/it.po new file mode 100644 index 0000000..9203977 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/i18n/it.po @@ -0,0 +1,70 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_sequence +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-07-28 09:49+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_id +msgid "Entry Sequence" +msgstr "Sequenza iniziale" + +#. module: maintenance_equipment_sequence +#: model:ir.model,name:maintenance_equipment_sequence.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Attrezzatura manutenzione" + +#. module: maintenance_equipment_sequence +#: model:ir.model,name:maintenance_equipment_sequence.model_maintenance_equipment_category +msgid "Maintenance Equipment Category" +msgstr "Categoria attrezzatura menutenzione" + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_number_next +msgid "Next Number" +msgstr "Numero successivo" + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_prefix +msgid "Sequence Prefix" +msgstr "Prefisso sequenza" + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_prefix +msgid "The equipment's sequence will be created using this prefix." +msgstr "" +"La sequenza dell'attrezzatura verrà creata utilizzando questo prefisso." + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_number_next +msgid "The next sequence number will be used for the next equipment." +msgstr "" +"Il numero di sequenza successivo verrà utilizzato per la prossima " +"attrezzatura." + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the " +"equipments belonging to this category." +msgstr "" +"Questo campo contiene l'informazione relativa alla numerazione delle " +"attrezzature appartenenti a questa categoria." + +#~ msgid "Code" +#~ msgstr "Codice" + +#~ msgid "Equipment Code" +#~ msgstr "Codice attrezzatura" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/i18n/maintenance_equipment_sequence.pot b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/i18n/maintenance_equipment_sequence.pot new file mode 100644 index 0000000..c3aead2 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/i18n/maintenance_equipment_sequence.pot @@ -0,0 +1,56 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_sequence +# +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_equipment_sequence +#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_id +msgid "Entry Sequence" +msgstr "" + +#. module: maintenance_equipment_sequence +#: model:ir.model,name:maintenance_equipment_sequence.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "" + +#. module: maintenance_equipment_sequence +#: model:ir.model,name:maintenance_equipment_sequence.model_maintenance_equipment_category +msgid "Maintenance Equipment Category" +msgstr "" + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_number_next +msgid "Next Number" +msgstr "" + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,field_description:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_prefix +msgid "Sequence Prefix" +msgstr "" + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_prefix +msgid "The equipment's sequence will be created using this prefix." +msgstr "" + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_number_next +msgid "The next sequence number will be used for the next equipment." +msgstr "" + +#. module: maintenance_equipment_sequence +#: model:ir.model.fields,help:maintenance_equipment_sequence.field_maintenance_equipment_category__sequence_id +msgid "" +"This field contains the information related to the numbering of the " +"equipments belonging to this category." +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/models/__init__.py new file mode 100644 index 0000000..12bf298 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/models/__init__.py @@ -0,0 +1 @@ +from . import maintenance diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/models/maintenance.py b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/models/maintenance.py new file mode 100644 index 0000000..f8b3fcc --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/models/maintenance.py @@ -0,0 +1,129 @@ +# Copyright 2021 ForgeFlow S.L. (https://forgeflow.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class MaintenanceEquipmentCategory(models.Model): + _inherit = "maintenance.equipment.category" + + sequence_prefix = fields.Char( + help="The equipment's sequence will be created using this prefix.", + ) + sequence_id = fields.Many2one( + "ir.sequence", + string="Entry Sequence", + help="This field contains the information related to the " + "numbering of the equipments belonging to this category.", + copy=False, + ) + sequence_number_next = fields.Integer( + string="Next Number", + help="The next sequence number will be used for the next equipment.", + compute="_compute_seq_number_next", + inverse="_inverse_seq_number_next", + ) + + @api.model + def _create_sequence(self, vals): + """Create new no_gap entry sequence""" + seq = { + "name": vals.get("name", False) or self.name, + "implementation": "no_gap", + "prefix": (vals.get("sequence_prefix", False) or self.sequence_prefix), + "padding": 4, + "number_increment": 1, + "use_date_range": False, + } + seq = self.env["ir.sequence"].create(seq) + seq_date_range = seq._get_current_sequence() + seq_date_range.number_next = vals.get("sequence_number_next", 1) + return seq + + # do not depend on 'sequence_id.date_range_ids', because + # sequence_id._get_current_sequence() may invalidate it! + @api.depends("sequence_id.use_date_range", "sequence_id.number_next_actual") + def _compute_seq_number_next(self): + """Compute 'sequence_number_next' according to the current sequence + in use, an ir.sequence or an ir.sequence.date_range. + """ + for category in self: + if category.sequence_id: + sequence = category.sequence_id._get_current_sequence() + category.sequence_number_next = sequence.number_next_actual + else: + category.sequence_number_next = 1 + + def _inverse_seq_number_next(self): + """ + Inverse 'sequence_number_next' to edit the current sequence next number + """ + for category in self: + if category.sequence_id and category.sequence_number_next: + sequence = category.sequence_id._get_current_sequence() + sequence.sudo().number_next = category.sequence_number_next + + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + if not vals.get("sequence_id", False): + if vals.get("sequence_prefix", False): + vals["sequence_id"] = self.sudo()._create_sequence(vals).id + else: + vals["sequence_prefix"] = ( + self.env["ir.sequence"].browse(vals["sequence_id"]).prefix + ) + result = super().create(vals_list) + result._compute_equipment_code() + return result + + def write(self, vals): + if not vals.get("sequence_id", False): + if vals.get("sequence_prefix", False): + vals["sequence_id"] = self.sudo()._create_sequence(vals).id + else: + vals["sequence_prefix"] = ( + self.env["ir.sequence"].browse(vals["sequence_id"]).prefix + ) + result = super(MaintenanceEquipmentCategory, self).write(vals) + self._compute_equipment_code() + return result + + @api.onchange("sequence_id") + def _onchange_sequence_id(self): + if self.sequence_id: + self.sequence_prefix = self.sequence_id.prefix + + def _compute_equipment_code(self): + for category in self: + if category.sequence_id: + category_equipments = category.env["maintenance.equipment"].search( + [("category_id", "=", category.id)] + ) + for equipment in category_equipments: + if not equipment.serial_no and equipment.category_id.sequence_id: + equipment.serial_no = equipment.category_id.sequence_id._next() + + +class MaintenanceEquipment(models.Model): + _inherit = "maintenance.equipment" + + @api.model + def create(self, vals): + equipment = super(MaintenanceEquipment, self).create(vals) + if equipment.category_id and not equipment.serial_no: + sequence_id = ( + self.env["maintenance.equipment.category"] + .browse(vals["category_id"]) + .sequence_id + ) + if sequence_id: + equipment.serial_no = sequence_id._next() + return equipment + + def write(self, vals): + result = super(MaintenanceEquipment, self).write(vals) + for rec in self: + if rec.category_id and not rec.serial_no and rec.category_id.sequence_id: + rec.serial_no = rec.category_id.sequence_id._next() + return result diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..011fc69 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* Adria Gil Sorribes +* Núria Martín Xifré +* Bernat Puig Font diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/readme/DESCRIPTION.rst new file mode 100644 index 0000000..2b48322 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module introduces a sequence to the maintenance equipment managed from the maintenance equipment category diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/static/description/index.html new file mode 100644 index 0000000..335dbf1 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/static/description/index.html @@ -0,0 +1,427 @@ + + + + + +Maintenance Equipment Sequence + + + +
+

Maintenance Equipment Sequence

+ + +

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

+

This module introduces a sequence to the maintenance equipment managed from the maintenance equipment category

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • ForgeFlow S.L.
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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

+

Current maintainer:

+

AdriaGForgeFlow

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/tests/__init__.py new file mode 100644 index 0000000..10d0722 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/tests/__init__.py @@ -0,0 +1 @@ +from . import test_maintenance_equipment_sequence diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/tests/test_maintenance_equipment_sequence.py b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/tests/test_maintenance_equipment_sequence.py new file mode 100644 index 0000000..b6bb5b6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/tests/test_maintenance_equipment_sequence.py @@ -0,0 +1,85 @@ +# Copyright 2020 ForgeFlow S.L. (https://forgeflow.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests.common import TransactionCase + + +class TestMaintenanceEquipmentSequence(TransactionCase): + def setUp(self): + super(TestMaintenanceEquipmentSequence, self).setUp() + self.maintenance_equipment_categ_obj = self.env[ + "maintenance.equipment.category" + ] + self.maintenance_equipment_obj = self.env["maintenance.equipment"] + self.sequence_obj = self.env["ir.sequence"] + + def test_01_maintenance_equipment_sequence(self): + """Create equipment category and check sequence has been + automatically created, create equipments inside category and check + sequence number has been set + """ + # Create category + categ_1 = self.maintenance_equipment_categ_obj.create( + { + "name": "Test Category", + "sequence_prefix": "TTC", + "sequence_number_next": 1, + } + ) + seq_1 = self.sequence_obj.search( + [("name", "=", categ_1.name), ("prefix", "=", "TTC")], limit=1 + ) + self.assertEqual(seq_1.prefix, categ_1.sequence_prefix) + self.assertEqual(seq_1.number_next_actual, categ_1.sequence_number_next) + + # Create category without sequence, then write prefix and number next + categ_2 = self.maintenance_equipment_categ_obj.create( + {"name": "Test Category 2"} + ) + categ_2.write({"sequence_prefix": "TTC2", "sequence_number_next": 100}) + seq_2 = self.sequence_obj.search( + [("name", "=", categ_2.name), ("prefix", "=", "TTC2")], limit=1 + ) + self.assertEqual(seq_2.prefix, categ_2.sequence_prefix) + self.assertEqual(seq_2.number_next_actual, categ_2.sequence_number_next) + + # Assign sequence 1 to category 2 + categ_2.write({"sequence_id": seq_1.id}) + categ_2._onchange_sequence_id() + + # Create equipment inside category + equipment_1 = self.maintenance_equipment_obj.create( + {"name": "Laptop 1", "category_id": categ_2.id} + ) + categ_2._compute_equipment_code() + self.assertEqual(equipment_1.serial_no, "TTC0001") + # Set code manually + equipment_1.write({"serial_no": "TTC0023"}) + self.assertEqual(equipment_1.serial_no, "TTC0023") + # Remove code and be automatically set to sequence next value + equipment_1.write({"serial_no": False}) + self.assertEqual(equipment_1.serial_no, "TTC0002") + + def test_02_maintenance_equipment_sequence(self): + """Create an equipment category linked to a default sequence with a prefix, + and verify that the category correctly inherits the sequence prefix. + """ + # Create a sequence + seq_1 = self.sequence_obj.create( + { + "name": "Test Sequence", + "implementation": "no_gap", + "prefix": "TTC_TEST", + "padding": 4, + "number_increment": 1, + "use_date_range": False, + } + ) + # Create an equipment category linked to the sequence + categ_1 = self.maintenance_equipment_categ_obj.create( + { + "name": "Test Category 0", + "sequence_id": seq_1.id, + } + ) + self.assertEqual(categ_1.sequence_prefix, seq_1.prefix) diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/views/maintenance_views.xml b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/views/maintenance_views.xml new file mode 100644 index 0000000..ec57b34 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/maintenance_equipment_sequence/views/maintenance_views.xml @@ -0,0 +1,63 @@ + + + + + equipment.category.form + maintenance.equipment.category + + + + + + + + + + + + + + equipment.form + maintenance.equipment + + 99 + + + 1 + + + + + + + equipment.tree + maintenance.equipment + + + + + + + + + equipment.search + maintenance.equipment + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/pyproject.toml new file mode 100644 index 0000000..e9439b9 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_sequence/pyproject.toml @@ -0,0 +1,44 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_equipment_sequence" +version = "16.0.0" +description = "Maintenance Equipment Sequence - + Adds sequence to maintenance equipment defined in the equipment's + category" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-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_equipment_sequence"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/README.md b/odoo-bringout-oca-maintenance-maintenance_equipment_status/README.md new file mode 100644 index 0000000..eaad5fc --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/README.md @@ -0,0 +1,44 @@ +# Maintenance Equipment Status + +Odoo addon: maintenance_equipment_status + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_equipment_status +``` + +## Dependencies + +This addon depends on: +- base_maintenance + +## Manifest Information + +- **Name**: Maintenance Equipment Status +- **Version**: 16.0.1.0.0 +- **Category**: +- **License**: LGPL-3 +- **Installable**: True + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_equipment_status`. + +## License + +This package maintains the original LGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/ARCHITECTURE.md new file mode 100644 index 0000000..b371fe0 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/ARCHITECTURE.md @@ -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_equipment_status Module - maintenance_equipment_status + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/CONFIGURATION.md new file mode 100644 index 0000000..9870201 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_equipment_status. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/DEPENDENCIES.md new file mode 100644 index 0000000..02c57be --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/DEPENDENCIES.md @@ -0,0 +1,5 @@ +# Dependencies + +This addon depends on: + +- [base_maintenance](https://github.com/bringout/oca-technical) diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/FAQ.md new file mode 100644 index 0000000..03eaffb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/FAQ.md @@ -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_equipment_status or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/INSTALL.md new file mode 100644 index 0000000..5ecc167 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_equipment_status" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_equipment_status" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/MODELS.md new file mode 100644 index 0000000..ae66de6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/MODELS.md @@ -0,0 +1,13 @@ +# Models + +Detected core models and extensions in maintenance_equipment_status. + +```mermaid +classDiagram + class maintenance_equipment_status + class maintenance_equipment +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/OVERVIEW.md new file mode 100644 index 0000000..abda47c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_equipment_status. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_equipment_status +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/SECURITY.md new file mode 100644 index 0000000..f5eeffb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/SECURITY.md @@ -0,0 +1,34 @@ +# Security + +Access control and security definitions in maintenance_equipment_status. + +## Access Control Lists (ACLs) + +Model access permissions defined in: +- **[ir.model.access.csv](../maintenance_equipment_status/security/ir.model.access.csv)** + - 2 model access rules + +## Record Rules + +Row-level security rules defined in: + +```mermaid +graph TB + subgraph "Security Layers" + A[Users] --> B[Groups] + B --> C[Access Control Lists] + C --> D[Models] + B --> E[Record Rules] + E --> F[Individual Records] + end +``` + +Security files overview: +- **[ir.model.access.csv](../maintenance_equipment_status/security/ir.model.access.csv)** + - Model access permissions (CRUD rights) + +Notes +- Access Control Lists define which groups can access which models +- Record Rules provide row-level security (filter records by user/group) +- Security groups organize users and define permission sets +- All security is enforced at the ORM level by Odoo diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/USAGE.md new file mode 100644 index 0000000..710ed23 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/USAGE.md @@ -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_equipment_status +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/README.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/README.rst new file mode 100644 index 0000000..42db37c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/README.rst @@ -0,0 +1,78 @@ +============================ +Maintenance Equipment Status +============================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:91856c17f15d6d6512dfd905fcc6a185239aec17bc84786b791595538155954e + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fmaintenance-lightgray.png?logo=github + :target: https://github.com/OCA/maintenance/tree/16.0/maintenance_equipment_status + :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_equipment_status + :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 allows to indicate status of an equipment. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* ForgeFlow + +Contributors +~~~~~~~~~~~~ + +* Adriá Gil +* Jordi Ballester Alomar +* David Alonso + +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 `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/__manifest__.py new file mode 100644 index 0000000..15dd683 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2020 ForgeFlow S.L. (https://forgeflow.com) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +{ + "name": "Maintenance Equipment Status", + "version": "16.0.1.0.0", + "category": "", + "author": "ForgeFlow, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/maintenance", + "license": "LGPL-3", + "depends": ["base_maintenance"], + "data": [ + "security/ir.model.access.csv", + "views/maintenance_equipment_status_views.xml", + "views/maintenance_equipment_views.xml", + ], + "demo": ["data/demo_maintenance_equipment_status.xml"], + "installable": True, + "auto_install": False, + "application": False, +} diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/data/demo_maintenance_equipment_status.xml b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/data/demo_maintenance_equipment_status.xml new file mode 100644 index 0000000..1664fe6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/data/demo_maintenance_equipment_status.xml @@ -0,0 +1,31 @@ + + + + New + + + + Working + + + + Retired + + + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/i18n/bs.po new file mode 100644 index 0000000..8031e66 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/i18n/bs.po @@ -0,0 +1,129 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_status +# +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_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__active +msgid "Active" +msgstr "Aktivan" + +#. module: maintenance_equipment_status +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_search +msgid "Archived" +msgstr "Arhivirano" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__category_ids +msgid "Categories" +msgstr "Kategorije" + +#. module: maintenance_equipment_status +#: model_terms:ir.actions.act_window,help:maintenance_equipment_status.maintenance_equipment_status_action +msgid "Click to set a new status for your equipments." +msgstr "Click to set a new status for your equipments." + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__display_name +msgid "Display Name" +msgstr "Prikazani naziv" + +#. module: maintenance_equipment_status +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_search +msgid "Equipment Status" +msgstr "Equipment Status" + +#. module: maintenance_equipment_status +#: model:ir.actions.act_window,name:maintenance_equipment_status.maintenance_equipment_status_action +#: model:ir.ui.menu,name:maintenance_equipment_status.menu_maintenance_equipment_status_act +msgid "Equipment Statuses" +msgstr "Equipment Statuses" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__id +msgid "ID" +msgstr "ID" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status____last_update +msgid "Last Modified on" +msgstr "Zadnje mijenjano" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__write_uid +msgid "Last Updated by" +msgstr "Zadnji ažurirao" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__write_date +msgid "Last Updated on" +msgstr "Zadnje ažurirano" + +#. module: maintenance_equipment_status +#: model:ir.model,name:maintenance_equipment_status.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Oprema za održavanje" + +#. module: maintenance_equipment_status +#: model:ir.model,name:maintenance_equipment_status.model_maintenance_equipment_status +msgid "Maintenance Equipment Status" +msgstr "Maintenance Equipment Status" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__name +msgid "Name" +msgstr "Naziv:" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__note +msgid "Note" +msgstr "Zabilješka" + +#. module: maintenance_equipment_status +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_form +msgid "Notes" +msgstr "Zabilješke" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__sequence +msgid "Sequence" +msgstr "Sekvenca" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment__status_id +msgid "Status" +msgstr "Status" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,help:maintenance_equipment_status.field_maintenance_equipment_status__category_ids +msgid "" +"When set, this status will only be applicable to the equipments under these " +"categories." +msgstr "" + +#. module: maintenance_equipment_status +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_form +msgid "e.g. Operational" +msgstr "e.g. Operacijaal" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/i18n/es.po new file mode 100644 index 0000000..2a21fab --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/i18n/es.po @@ -0,0 +1,140 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_status +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-07-22 23:09+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__active +msgid "Active" +msgstr "Activo" + +#. module: maintenance_equipment_status +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_search +msgid "Archived" +msgstr "Archivado" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__category_ids +msgid "Categories" +msgstr "Categor??as" + +#. module: maintenance_equipment_status +#: model_terms:ir.actions.act_window,help:maintenance_equipment_status.maintenance_equipment_status_action +msgid "Click to set a new status for your equipments." +msgstr "Hacer click para crear nuevos estados para los equipamientos." + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__display_name +msgid "Display Name" +msgstr "Nombre a mostrar" + +#. module: maintenance_equipment_status +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_search +msgid "Equipment Status" +msgstr "Estado del Equipamiento" + +#. module: maintenance_equipment_status +#: model:ir.actions.act_window,name:maintenance_equipment_status.maintenance_equipment_status_action +#: model:ir.ui.menu,name:maintenance_equipment_status.menu_maintenance_equipment_status_act +msgid "Equipment Statuses" +msgstr "Estados de Equipamiento" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__id +msgid "ID" +msgstr "ID" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status____last_update +msgid "Last Modified on" +msgstr "??ltima modificaci??n en" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__write_uid +msgid "Last Updated by" +msgstr "actualizado por última vez por" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__write_date +msgid "Last Updated on" +msgstr "última actualización el" + +#. module: maintenance_equipment_status +#: model:ir.model,name:maintenance_equipment_status.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Equipo de Mantenimiento" + +#. module: maintenance_equipment_status +#: model:ir.model,name:maintenance_equipment_status.model_maintenance_equipment_status +msgid "Maintenance Equipment Status" +msgstr "Estados de Equipo de mantenimiento" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__name +msgid "Name" +msgstr "Nombre" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__note +msgid "Note" +msgstr "Nota" + +#. module: maintenance_equipment_status +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_form +msgid "Notes" +msgstr "Notas" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment__status_id +msgid "Status" +msgstr "Estado" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,help:maintenance_equipment_status.field_maintenance_equipment_status__category_ids +msgid "" +"When set, this status will only be applicable to the equipments under these " +"categories." +msgstr "" +"Si se establece, este estado solo se aplicara a equipamientos de estas " +"categor??as." + +#. module: maintenance_equipment_status +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_form +msgid "e.g. Operational" +msgstr "p. e. Operativo" + +#~ msgid "Status name" +#~ msgstr "Nombre del Estado" + +#~ msgid "Equipment" +#~ msgstr "Equipamiento" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/i18n/it.po new file mode 100644 index 0000000..6ffa8fb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/i18n/it.po @@ -0,0 +1,134 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_status +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-07-12 12:09+0000\n" +"Last-Translator: Francesco Foresti \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__active +msgid "Active" +msgstr "Attivo" + +#. module: maintenance_equipment_status +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_search +msgid "Archived" +msgstr "In archivio" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__category_ids +msgid "Categories" +msgstr "Categorie" + +#. module: maintenance_equipment_status +#: model_terms:ir.actions.act_window,help:maintenance_equipment_status.maintenance_equipment_status_action +msgid "Click to set a new status for your equipments." +msgstr "Fare clic per impostare un nuovo stato per le attrezzature." + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: maintenance_equipment_status +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_search +msgid "Equipment Status" +msgstr "Stato attrezzatura" + +#. module: maintenance_equipment_status +#: model:ir.actions.act_window,name:maintenance_equipment_status.maintenance_equipment_status_action +#: model:ir.ui.menu,name:maintenance_equipment_status.menu_maintenance_equipment_status_act +msgid "Equipment Statuses" +msgstr "Stati attrezzatura" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__id +msgid "ID" +msgstr "ID" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: maintenance_equipment_status +#: model:ir.model,name:maintenance_equipment_status.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Attrezzatura manutenzione" + +#. module: maintenance_equipment_status +#: model:ir.model,name:maintenance_equipment_status.model_maintenance_equipment_status +msgid "Maintenance Equipment Status" +msgstr "Stato attrezzatura manutenzione" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__name +msgid "Name" +msgstr "Nome" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__note +msgid "Note" +msgstr "Nota" + +#. module: maintenance_equipment_status +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_form +msgid "Notes" +msgstr "Note" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__sequence +msgid "Sequence" +msgstr "Sequenza" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment__status_id +msgid "Status" +msgstr "Stato" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,help:maintenance_equipment_status.field_maintenance_equipment_status__category_ids +msgid "" +"When set, this status will only be applicable to the equipments under these " +"categories." +msgstr "" +"Quando impostato, questo stato potrà essere applicato solo alle attrezzature " +"di queste categorie." + +#. module: maintenance_equipment_status +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_form +msgid "e.g. Operational" +msgstr "es. Operativo" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/i18n/maintenance_equipment_status.pot b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/i18n/maintenance_equipment_status.pot new file mode 100644 index 0000000..c9c61d4 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/i18n/maintenance_equipment_status.pot @@ -0,0 +1,129 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_status +# +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_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__active +msgid "Active" +msgstr "" + +#. module: maintenance_equipment_status +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_search +msgid "Archived" +msgstr "" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__category_ids +msgid "Categories" +msgstr "" + +#. module: maintenance_equipment_status +#: model_terms:ir.actions.act_window,help:maintenance_equipment_status.maintenance_equipment_status_action +msgid "Click to set a new status for your equipments." +msgstr "" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__create_uid +msgid "Created by" +msgstr "" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__create_date +msgid "Created on" +msgstr "" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__display_name +msgid "Display Name" +msgstr "" + +#. module: maintenance_equipment_status +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_search +msgid "Equipment Status" +msgstr "" + +#. module: maintenance_equipment_status +#: model:ir.actions.act_window,name:maintenance_equipment_status.maintenance_equipment_status_action +#: model:ir.ui.menu,name:maintenance_equipment_status.menu_maintenance_equipment_status_act +msgid "Equipment Statuses" +msgstr "" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__id +msgid "ID" +msgstr "" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status____last_update +msgid "Last Modified on" +msgstr "" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__write_date +msgid "Last Updated on" +msgstr "" + +#. module: maintenance_equipment_status +#: model:ir.model,name:maintenance_equipment_status.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "" + +#. module: maintenance_equipment_status +#: model:ir.model,name:maintenance_equipment_status.model_maintenance_equipment_status +msgid "Maintenance Equipment Status" +msgstr "" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__name +msgid "Name" +msgstr "" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__note +msgid "Note" +msgstr "" + +#. module: maintenance_equipment_status +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_form +msgid "Notes" +msgstr "" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment_status__sequence +msgid "Sequence" +msgstr "" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,field_description:maintenance_equipment_status.field_maintenance_equipment__status_id +msgid "Status" +msgstr "" + +#. module: maintenance_equipment_status +#: model:ir.model.fields,help:maintenance_equipment_status.field_maintenance_equipment_status__category_ids +msgid "" +"When set, this status will only be applicable to the equipments under these " +"categories." +msgstr "" + +#. module: maintenance_equipment_status +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_status.maintenance_equipment_status_view_form +msgid "e.g. Operational" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/models/__init__.py new file mode 100644 index 0000000..56e8b5a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/models/__init__.py @@ -0,0 +1,2 @@ +from . import maintenance_equipment +from . import maintenance_equipment_status diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/models/maintenance_equipment.py b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/models/maintenance_equipment.py new file mode 100644 index 0000000..d9c98cd --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/models/maintenance_equipment.py @@ -0,0 +1,14 @@ +# Copyright 2020 ForgeFlow S.L. (https://forgeflow.com) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo import fields, models + + +class MaintenanceEquipment(models.Model): + _inherit = "maintenance.equipment" + + status_id = fields.Many2one( + string="Status", + comodel_name="maintenance.equipment.status", + tracking=True, + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/models/maintenance_equipment_status.py b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/models/maintenance_equipment_status.py new file mode 100644 index 0000000..f9226ad --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/models/maintenance_equipment_status.py @@ -0,0 +1,21 @@ +# Copyright 2020 ForgeFlow S.L. (https://forgeflow.com) +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +from odoo import fields, models + + +class MaintenanceEquipmentStatus(models.Model): + _name = "maintenance.equipment.status" + _description = "Maintenance Equipment Status" + _order = "sequence" + + active = fields.Boolean(default=True) + name = fields.Char() + note = fields.Text() + sequence = fields.Integer(default=10) + category_ids = fields.Many2many( + string="Categories", + comodel_name="maintenance.equipment.category", + help="When set, this status will only be applicable to the equipments " + "under these categories.", + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/readme/CONFIGURATION.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/readme/CONFIGURATION.rst new file mode 100644 index 0000000..b31f6ee --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/readme/CONFIGURATION.rst @@ -0,0 +1,5 @@ +To cotnfigure this module, you need to: + +#. Maintenance > Configuration > Equipment Statuses + +You can limit the usage of status to specific equipment categories. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..4cda070 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* Adriá Gil +* Jordi Ballester Alomar +* David Alonso diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/readme/DESCRIPTION.rst new file mode 100644 index 0000000..6f03b21 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module allows to indicate status of an equipment. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/security/ir.model.access.csv b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/security/ir.model.access.csv new file mode 100644 index 0000000..55ce16e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_maintenance_equipment_status,access_maintenance_equipment_status,model_maintenance_equipment_status,base.group_user,1,0,0,0 +access_maintenance_equipment_status_admin,access_maintenance_equipment_status_admin,model_maintenance_equipment_status,maintenance.group_equipment_manager,1,1,1,1 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/static/description/index.html new file mode 100644 index 0000000..6f0e2d3 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/static/description/index.html @@ -0,0 +1,423 @@ + + + + + + +Maintenance Equipment Status + + + +
+

Maintenance Equipment Status

+ + +

Beta License: LGPL-3 OCA/maintenance Translate me on Weblate Try me on Runboat

+

This module allows to indicate status of an equipment.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • ForgeFlow
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/views/maintenance_equipment_status_views.xml b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/views/maintenance_equipment_status_views.xml new file mode 100644 index 0000000..226f6a6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/views/maintenance_equipment_status_views.xml @@ -0,0 +1,82 @@ + + + + maintenance.equipment.status.form + maintenance.equipment.status + +
+
+ + + +
+
+ + + + +
+ + +
+
+
+ + + + + maintenance.equipment.status.tree + maintenance.equipment.status + + + + + + + + + + maintenance.equipment.status.search + maintenance.equipment.status + + + + + + + + + + Equipment Statuses + maintenance.equipment.status + + +

+ Click to set a new status for your equipments. +

+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/views/maintenance_equipment_views.xml b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/views/maintenance_equipment_views.xml new file mode 100644 index 0000000..9b9398b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/maintenance_equipment_status/views/maintenance_equipment_views.xml @@ -0,0 +1,44 @@ + + + + + equipment.form + maintenance.equipment + + + + + + + + + equipment.tree + maintenance.equipment + + + + + + + + + equipment.kanban + maintenance.equipment + + + + + + +
+ +
+
+
+
+
diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_status/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_equipment_status/pyproject.toml new file mode 100644 index 0000000..f37145c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_status/pyproject.toml @@ -0,0 +1,42 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_equipment_status" +version = "16.0.0" +description = "Maintenance Equipment Status - Odoo addon" +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_equipment_status"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/README.md b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/README.md new file mode 100644 index 0000000..8bccc01 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/README.md @@ -0,0 +1,44 @@ +# Maintenance Equipment Tags + +Odoo addon: maintenance_equipment_tags + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_equipment_tags +``` + +## Dependencies + +This addon depends on: +- maintenance + +## Manifest Information + +- **Name**: Maintenance Equipment Tags +- **Version**: 16.0.1.0.0 +- **Category**: N/A +- **License**: AGPL-3 +- **Installable**: False + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_equipment_tags`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/ARCHITECTURE.md new file mode 100644 index 0000000..cc5fe19 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/ARCHITECTURE.md @@ -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_equipment_tags Module - maintenance_equipment_tags + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/CONFIGURATION.md new file mode 100644 index 0000000..095605b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_equipment_tags. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/DEPENDENCIES.md new file mode 100644 index 0000000..a7cb7c6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/DEPENDENCIES.md @@ -0,0 +1,5 @@ +# Dependencies + +This addon depends on: + +- [maintenance](https://github.com/bringout/oca-ocb-vertical-industry/tree/a60a29f57ff34f3c01d0521d0a6003956d80acd9/odoo-bringout-oca-ocb-maintenance) diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/FAQ.md new file mode 100644 index 0000000..096ad7f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/FAQ.md @@ -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_equipment_tags or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/INSTALL.md new file mode 100644 index 0000000..bcc06d1 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_equipment_tags" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_equipment_tags" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/MODELS.md new file mode 100644 index 0000000..1055f9a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/MODELS.md @@ -0,0 +1,13 @@ +# Models + +Detected core models and extensions in maintenance_equipment_tags. + +```mermaid +classDiagram + class maintenance_equipment_tag + class maintenance_equipment +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/OVERVIEW.md new file mode 100644 index 0000000..ba8fe59 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_equipment_tags. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_equipment_tags +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/SECURITY.md new file mode 100644 index 0000000..80763f3 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/SECURITY.md @@ -0,0 +1,34 @@ +# Security + +Access control and security definitions in maintenance_equipment_tags. + +## Access Control Lists (ACLs) + +Model access permissions defined in: +- **[ir.model.access.csv](../maintenance_equipment_tags/security/ir.model.access.csv)** + - 2 model access rules + +## Record Rules + +Row-level security rules defined in: + +```mermaid +graph TB + subgraph "Security Layers" + A[Users] --> B[Groups] + B --> C[Access Control Lists] + C --> D[Models] + B --> E[Record Rules] + E --> F[Individual Records] + end +``` + +Security files overview: +- **[ir.model.access.csv](../maintenance_equipment_tags/security/ir.model.access.csv)** + - Model access permissions (CRUD rights) + +Notes +- Access Control Lists define which groups can access which models +- Record Rules provide row-level security (filter records by user/group) +- Security groups organize users and define permission sets +- All security is enforced at the ORM level by Odoo diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/USAGE.md new file mode 100644 index 0000000..9c56475 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/USAGE.md @@ -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_equipment_tags +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/README.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/README.rst new file mode 100644 index 0000000..a24413e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/README.rst @@ -0,0 +1,84 @@ +========================== +Maintenance Equipment Tags +========================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:7c253aaf4a11474e8ddc6554e9826e7e95d2821195ee1a3ab887bd68c6811df3 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_equipment_tags + :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_equipment_tags + :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| + +Adds category tags to equipment + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Creu Blanca + +Contributors +~~~~~~~~~~~~ + +* Jaime Arroyo + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-etobella| image:: https://github.com/etobella.png?size=40px + :target: https://github.com/etobella + :alt: etobella + +Current `maintainer `__: + +|maintainer-etobella| + +This module is part of the `OCA/maintenance `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/__manifest__.py new file mode 100644 index 0000000..daa29c0 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Maintenance Equipment Tags", + "summary": """ + Adds category tags to equipment""", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "Creu Blanca,Odoo Community Association (OCA)", + "maintainers": ["etobella"], + "website": "https://github.com/OCA/maintenance", + "depends": ["maintenance"], + "demo": ["demo/maintenance_equipment_tags_demo.xml"], + "data": [ + "security/ir.model.access.csv", + "views/maintenance_equipment.xml", + "views/maintenance_equipment_tag.xml", + ], +} diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/demo/maintenance_equipment_tags_demo.xml b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/demo/maintenance_equipment_tags_demo.xml new file mode 100644 index 0000000..58c49e3 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/demo/maintenance_equipment_tags_demo.xml @@ -0,0 +1,17 @@ + + + + + Samsung + + + HP + + + Monitor + + + Printer + + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/bs.po new file mode 100644 index 0000000..709f058 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/bs.po @@ -0,0 +1,95 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_tags +# +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_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__color +msgid "Color Index (0-15)" +msgstr "Boja Index (0-15)" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__display_name +msgid "Display Name" +msgstr "Prikazani naziv" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__equipment_ids +msgid "Equipment" +msgstr "Oprema" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__name +msgid "Equipment Tag" +msgstr "Equipment Tag" + +#. module: maintenance_equipment_tags +#: model:ir.actions.act_window,name:maintenance_equipment_tags.maintenance_equipment_tag_act_window +#: model:ir.ui.menu,name:maintenance_equipment_tags.maintenance_equipment_tag_menu +msgid "Equipment Tags" +msgstr "Equipment Tags" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__id +msgid "ID" +msgstr "ID" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag____last_update +msgid "Last Modified on" +msgstr "Zadnje mijenjano" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__write_uid +msgid "Last Updated by" +msgstr "Zadnji ažurirao" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__write_date +msgid "Last Updated on" +msgstr "Zadnje ažurirano" + +#. module: maintenance_equipment_tags +#: model:ir.model,name:maintenance_equipment_tags.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Oprema za održavanje" + +#. module: maintenance_equipment_tags +#: model:ir.model,name:maintenance_equipment_tags.model_maintenance_equipment_tag +msgid "Maintenance Equipment Tag" +msgstr "Maintenance Equipment Tag" + +#. module: maintenance_equipment_tags +#: model:ir.model.constraint,message:maintenance_equipment_tags.constraint_maintenance_equipment_tag_name_uniq +msgid "Tag name already exists !" +msgstr "Naziv oznake već postoji!" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment__tag_ids +msgid "Tags" +msgstr "Oznake" + +#. module: maintenance_equipment_tags +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_tags.hr_equipment_view_form +msgid "e.g. Computers" +msgstr "e.g. Computers" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/es.po new file mode 100644 index 0000000..441d503 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/es.po @@ -0,0 +1,98 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_tags +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-07-22 23:09+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__color +msgid "Color Index (0-15)" +msgstr "Número del Color (0-15)" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__create_date +msgid "Created on" +msgstr "Creado el" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__display_name +msgid "Display Name" +msgstr "Nombre a mostrar" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__equipment_ids +msgid "Equipment" +msgstr "Equipamiento" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__name +msgid "Equipment Tag" +msgstr "Etiqueta de Equipamiento" + +#. module: maintenance_equipment_tags +#: model:ir.actions.act_window,name:maintenance_equipment_tags.maintenance_equipment_tag_act_window +#: model:ir.ui.menu,name:maintenance_equipment_tags.maintenance_equipment_tag_menu +msgid "Equipment Tags" +msgstr "Etiquetas de Equipamiento" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__id +msgid "ID" +msgstr "ID" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag____last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__write_uid +msgid "Last Updated by" +msgstr "Última modificación por" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__write_date +msgid "Last Updated on" +msgstr "Última Actualización el" + +#. module: maintenance_equipment_tags +#: model:ir.model,name:maintenance_equipment_tags.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Mantenimiento de Equipos" + +#. module: maintenance_equipment_tags +#: model:ir.model,name:maintenance_equipment_tags.model_maintenance_equipment_tag +msgid "Maintenance Equipment Tag" +msgstr "Etiqueta de Equipamiento" + +#. module: maintenance_equipment_tags +#: model:ir.model.constraint,message:maintenance_equipment_tags.constraint_maintenance_equipment_tag_name_uniq +msgid "Tag name already exists !" +msgstr "Este nombre de etiqueta ya existe !" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment__tag_ids +msgid "Tags" +msgstr "Etiquetas" + +#. module: maintenance_equipment_tags +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_tags.hr_equipment_view_form +msgid "e.g. Computers" +msgstr "p.e Ordenadores" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/it.po new file mode 100644 index 0000000..829cd26 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/it.po @@ -0,0 +1,98 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_tags +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-04-17 17:33+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.14.1\n" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__color +msgid "Color Index (0-15)" +msgstr "Indice colore (0-15)" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__equipment_ids +msgid "Equipment" +msgstr "Attrezzatura" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__name +msgid "Equipment Tag" +msgstr "Etichetta attrezzatura" + +#. module: maintenance_equipment_tags +#: model:ir.actions.act_window,name:maintenance_equipment_tags.maintenance_equipment_tag_act_window +#: model:ir.ui.menu,name:maintenance_equipment_tags.maintenance_equipment_tag_menu +msgid "Equipment Tags" +msgstr "Etichette attrezzatura" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__id +msgid "ID" +msgstr "ID" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: maintenance_equipment_tags +#: model:ir.model,name:maintenance_equipment_tags.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Attrezzatura manutenzione" + +#. module: maintenance_equipment_tags +#: model:ir.model,name:maintenance_equipment_tags.model_maintenance_equipment_tag +msgid "Maintenance Equipment Tag" +msgstr "Etichetta attrezzatura manutenzione" + +#. module: maintenance_equipment_tags +#: model:ir.model.constraint,message:maintenance_equipment_tags.constraint_maintenance_equipment_tag_name_uniq +msgid "Tag name already exists !" +msgstr "Il nome etichetta esiste già!" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment__tag_ids +msgid "Tags" +msgstr "Etichette" + +#. module: maintenance_equipment_tags +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_tags.hr_equipment_view_form +msgid "e.g. Computers" +msgstr "es. Computer" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/maintenance_equipment_tags.pot b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/maintenance_equipment_tags.pot new file mode 100644 index 0000000..8aa1bbb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/maintenance_equipment_tags.pot @@ -0,0 +1,95 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_tags +# +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_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__color +msgid "Color Index (0-15)" +msgstr "" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__create_uid +msgid "Created by" +msgstr "" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__create_date +msgid "Created on" +msgstr "" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__display_name +msgid "Display Name" +msgstr "" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__equipment_ids +msgid "Equipment" +msgstr "" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__name +msgid "Equipment Tag" +msgstr "" + +#. module: maintenance_equipment_tags +#: model:ir.actions.act_window,name:maintenance_equipment_tags.maintenance_equipment_tag_act_window +#: model:ir.ui.menu,name:maintenance_equipment_tags.maintenance_equipment_tag_menu +msgid "Equipment Tags" +msgstr "" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__id +msgid "ID" +msgstr "" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag____last_update +msgid "Last Modified on" +msgstr "" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__write_date +msgid "Last Updated on" +msgstr "" + +#. module: maintenance_equipment_tags +#: model:ir.model,name:maintenance_equipment_tags.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "" + +#. module: maintenance_equipment_tags +#: model:ir.model,name:maintenance_equipment_tags.model_maintenance_equipment_tag +msgid "Maintenance Equipment Tag" +msgstr "" + +#. module: maintenance_equipment_tags +#: model:ir.model.constraint,message:maintenance_equipment_tags.constraint_maintenance_equipment_tag_name_uniq +msgid "Tag name already exists !" +msgstr "" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment__tag_ids +msgid "Tags" +msgstr "" + +#. module: maintenance_equipment_tags +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_tags.hr_equipment_view_form +msgid "e.g. Computers" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/pt.po b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/pt.po new file mode 100644 index 0000000..6bb92a3 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/pt.po @@ -0,0 +1,98 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_tags +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-12-04 12:36+0000\n" +"Last-Translator: Pedro Castro Silva \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.3.2\n" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__color +msgid "Color Index (0-15)" +msgstr "Índice de Cores (0-15)" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__display_name +msgid "Display Name" +msgstr "Nome a Apresentar" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__equipment_ids +msgid "Equipment" +msgstr "Equipamento" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__name +msgid "Equipment Tag" +msgstr "Etiqueta do Equipamento" + +#. module: maintenance_equipment_tags +#: model:ir.actions.act_window,name:maintenance_equipment_tags.maintenance_equipment_tag_act_window +#: model:ir.ui.menu,name:maintenance_equipment_tags.maintenance_equipment_tag_menu +msgid "Equipment Tags" +msgstr "Etiquetas de Equipamentos" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__id +msgid "ID" +msgstr "ID" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag____last_update +msgid "Last Modified on" +msgstr "Última Modificação Em" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__write_uid +msgid "Last Updated by" +msgstr "Última Atualização por" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__write_date +msgid "Last Updated on" +msgstr "Última Atualização Em" + +#. module: maintenance_equipment_tags +#: model:ir.model,name:maintenance_equipment_tags.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Equipamento de Manutenção" + +#. module: maintenance_equipment_tags +#: model:ir.model,name:maintenance_equipment_tags.model_maintenance_equipment_tag +msgid "Maintenance Equipment Tag" +msgstr "Etiqueta do Equipamento de Manutenção" + +#. module: maintenance_equipment_tags +#: model:ir.model.constraint,message:maintenance_equipment_tags.constraint_maintenance_equipment_tag_name_uniq +msgid "Tag name already exists !" +msgstr "Nome da etiqueta já existe!" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment__tag_ids +msgid "Tags" +msgstr "Etiquetas" + +#. module: maintenance_equipment_tags +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_tags.hr_equipment_view_form +msgid "e.g. Computers" +msgstr "por ex., computadores" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/pt_BR.po b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/pt_BR.po new file mode 100644 index 0000000..0482076 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/i18n/pt_BR.po @@ -0,0 +1,98 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_tags +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-06-23 22:10+0000\n" +"Last-Translator: Fernando Colus \n" +"Language-Team: none\n" +"Language: pt_BR\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 3.10\n" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__color +msgid "Color Index (0-15)" +msgstr "Índice de Cores (0-15)" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__create_date +msgid "Created on" +msgstr "Criado em" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__display_name +msgid "Display Name" +msgstr "Exibir Nome" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__equipment_ids +msgid "Equipment" +msgstr "Equipamento" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__name +msgid "Equipment Tag" +msgstr "Etiqueta do Equipamento" + +#. module: maintenance_equipment_tags +#: model:ir.actions.act_window,name:maintenance_equipment_tags.maintenance_equipment_tag_act_window +#: model:ir.ui.menu,name:maintenance_equipment_tags.maintenance_equipment_tag_menu +msgid "Equipment Tags" +msgstr "Etiquetas do Equipamento" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__id +msgid "ID" +msgstr "ID (Identificação)" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag____last_update +msgid "Last Modified on" +msgstr "Última Modificação Feita em" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__write_uid +msgid "Last Updated by" +msgstr "Última Atualização Feita por" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment_tag__write_date +msgid "Last Updated on" +msgstr "Última Atualização Feita em" + +#. module: maintenance_equipment_tags +#: model:ir.model,name:maintenance_equipment_tags.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Equipamento de Manutenção" + +#. module: maintenance_equipment_tags +#: model:ir.model,name:maintenance_equipment_tags.model_maintenance_equipment_tag +msgid "Maintenance Equipment Tag" +msgstr "Etiqueta do Equipamento de Manutenção" + +#. module: maintenance_equipment_tags +#: model:ir.model.constraint,message:maintenance_equipment_tags.constraint_maintenance_equipment_tag_name_uniq +msgid "Tag name already exists !" +msgstr "Nome da etiqueta já existe !" + +#. module: maintenance_equipment_tags +#: model:ir.model.fields,field_description:maintenance_equipment_tags.field_maintenance_equipment__tag_ids +msgid "Tags" +msgstr "Etiquetas" + +#. module: maintenance_equipment_tags +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_tags.hr_equipment_view_form +msgid "e.g. Computers" +msgstr "Por Exemplo Computadores" diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/models/__init__.py new file mode 100644 index 0000000..a416ae8 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/models/__init__.py @@ -0,0 +1,2 @@ +from . import maintenance_equipment_tag +from . import maintenance_equipment diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/models/maintenance_equipment.py b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/models/maintenance_equipment.py new file mode 100644 index 0000000..0278637 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/models/maintenance_equipment.py @@ -0,0 +1,17 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class MaintenanceEquipment(models.Model): + + _inherit = "maintenance.equipment" + + tag_ids = fields.Many2many( + "maintenance.equipment.tag", + "equipment_tag_rel", + "equipment_id", + "tag_id", + string="Tags", + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/models/maintenance_equipment_tag.py b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/models/maintenance_equipment_tag.py new file mode 100644 index 0000000..1ca635d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/models/maintenance_equipment_tag.py @@ -0,0 +1,31 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from random import randint + +from odoo import fields, models + + +class MaintenanceEquipmentTag(models.Model): + + _name = "maintenance.equipment.tag" + _description = "Maintenance Equipment Tag" + + def get_default_color_value(self): + return randint(1, 15) + + name = fields.Char(string="Equipment Tag", required=True) + color = fields.Integer( + string="Color Index (0-15)", default=lambda self: self.get_default_color_value() + ) + equipment_ids = fields.Many2many( + "maintenance.equipment", + "equipment_tag_rel", + "tag_id", + "equipment_id", + string="Equipment", + ) + + _sql_constraints = [ + ("name_uniq", "unique (name)", "Tag name already exists !"), + ] diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..e59d510 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Jaime Arroyo diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/readme/DESCRIPTION.rst new file mode 100644 index 0000000..cb5f88a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Adds category tags to equipment diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/security/ir.model.access.csv b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/security/ir.model.access.csv new file mode 100644 index 0000000..88a6be9 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_maintenance_equipment_tag,access_maintenance_equipment_tag,model_maintenance_equipment_tag,base.group_user,1,0,0,0 +access_maintenance_equipment_tag_man,access_maintenance_equipment_tag_man,model_maintenance_equipment_tag,maintenance.group_equipment_manager,1,1,1,1 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/static/description/index.html new file mode 100644 index 0000000..26a331f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/static/description/index.html @@ -0,0 +1,423 @@ + + + + + + +Maintenance Equipment Tags + + + +
+

Maintenance Equipment Tags

+ + +

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

+

Adds category tags to equipment

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Creu Blanca
  • +
+
+ +
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

Current maintainer:

+

etobella

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/views/maintenance_equipment.xml b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/views/maintenance_equipment.xml new file mode 100644 index 0000000..bd30219 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/views/maintenance_equipment.xml @@ -0,0 +1,66 @@ + + + + + maintenance.equipment.form (in maintenance_equipment_tags) + maintenance.equipment + + + + + + + + + maintenance.equipment.kanban (in maintenance_equipment_tags) + maintenance.equipment + + + + + + + + + maintenance.equipment.tree (in maintenance_equipment_tags) + maintenance.equipment + + + + + + + + + maintenance.equipment.search (in maintenance_equipment_tags) + maintenance.equipment + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/views/maintenance_equipment_tag.xml b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/views/maintenance_equipment_tag.xml new file mode 100644 index 0000000..538a158 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/maintenance_equipment_tags/views/maintenance_equipment_tag.xml @@ -0,0 +1,45 @@ + + + + + maintenance.equipment.tag.form (in maintenance_equipment_tags) + maintenance.equipment.tag + +
+ + + + + + +
+
+
+ + maintenance.equipment.tag.tree (in maintenance_equipment_tags) + maintenance.equipment.tag + + + + + + + + Equipment Tags + maintenance.equipment.tag + tree,form + [] + {} + + + Equipment Tags + + + + +
diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_tags/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/pyproject.toml new file mode 100644 index 0000000..7e72416 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_tags/pyproject.toml @@ -0,0 +1,43 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_equipment_tags" +version = "16.0.0" +description = "Maintenance Equipment Tags - + Adds category tags to equipment" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-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_equipment_tags"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/README.md b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/README.md new file mode 100644 index 0000000..9ae2aaa --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/README.md @@ -0,0 +1,44 @@ +# Maintenance Equipment Usage + +Odoo addon: maintenance_equipment_usage + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_equipment_usage +``` + +## Dependencies + +This addon depends on: +- maintenance + +## Manifest Information + +- **Name**: Maintenance Equipment Usage +- **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_equipment_usage`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/ARCHITECTURE.md new file mode 100644 index 0000000..4af9211 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/ARCHITECTURE.md @@ -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_equipment_usage Module - maintenance_equipment_usage + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/CONFIGURATION.md new file mode 100644 index 0000000..ef0d8e2 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_equipment_usage. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/DEPENDENCIES.md new file mode 100644 index 0000000..a7cb7c6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/DEPENDENCIES.md @@ -0,0 +1,5 @@ +# Dependencies + +This addon depends on: + +- [maintenance](https://github.com/bringout/oca-ocb-vertical-industry/tree/a60a29f57ff34f3c01d0521d0a6003956d80acd9/odoo-bringout-oca-ocb-maintenance) diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/FAQ.md new file mode 100644 index 0000000..0b7fcc1 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/FAQ.md @@ -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_equipment_usage or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/INSTALL.md new file mode 100644 index 0000000..a799920 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_equipment_usage" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_equipment_usage" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/MODELS.md new file mode 100644 index 0000000..f542d56 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/MODELS.md @@ -0,0 +1,13 @@ +# Models + +Detected core models and extensions in maintenance_equipment_usage. + +```mermaid +classDiagram + class maintenance_equipment_usage + class maintenance_equipment +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/OVERVIEW.md new file mode 100644 index 0000000..ddefb97 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_equipment_usage. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_equipment_usage +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/SECURITY.md new file mode 100644 index 0000000..878fd9e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/SECURITY.md @@ -0,0 +1,41 @@ +# Security + +Access control and security definitions in maintenance_equipment_usage. + +## Access Control Lists (ACLs) + +Model access permissions defined in: +- **[ir.model.access.csv](../maintenance_equipment_usage/security/ir.model.access.csv)** + - 1 model access rules + +## Record Rules + +Row-level security rules defined in: + +## Security Groups & Configuration + +Security groups and permissions defined in: +- **[security.xml](../maintenance_equipment_usage/security/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_equipment_usage/security/ir.model.access.csv)** + - Model access permissions (CRUD rights) +- **[security.xml](../maintenance_equipment_usage/security/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 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/USAGE.md new file mode 100644 index 0000000..2f17d01 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/USAGE.md @@ -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_equipment_usage +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/README.rst b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/README.rst new file mode 100644 index 0000000..38c435a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/README.rst @@ -0,0 +1,91 @@ +=========================== +Maintenance Equipment Usage +=========================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:d53788ade2957febd9e19be9b1d26ece20167e5aaeaab1d3946180ff53896b23 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_equipment_usage + :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_equipment_usage + :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 allows to record usages of maintenante equipments by employees, +with their dates, states and comments. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* César Fernández +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* César Fernández Domínguez + +* `Tecnativa `_: + + * Víctor Martínez + * Pedro M. Baeza + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-victoralmau| image:: https://github.com/victoralmau.png?size=40px + :target: https://github.com/victoralmau + :alt: victoralmau + +Current `maintainer `__: + +|maintainer-victoralmau| + +This module is part of the `OCA/maintenance `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/__manifest__.py new file mode 100644 index 0000000..acff6f5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/__manifest__.py @@ -0,0 +1,21 @@ +# Copyright 2021 César Fernández Domínguez +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Maintenance Equipment Usage", + "version": "16.0.1.0.0", + "category": "Maintenance", + "website": "https://github.com/OCA/maintenance", + "author": "César Fernández, Tecnativa, Odoo Community Association (OCA)", + "license": "AGPL-3", + "depends": ["maintenance"], + "installable": True, + "data": [ + "security/ir.model.access.csv", + "security/security.xml", + "data/ir_sequence_data.xml", + "views/maintenance_equipment_usage_views.xml", + "views/maintenance_equipment_view.xml", + ], + "maintainers": ["victoralmau"], +} diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/data/ir_sequence_data.xml b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/data/ir_sequence_data.xml new file mode 100644 index 0000000..bd9a9c4 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/data/ir_sequence_data.xml @@ -0,0 +1,12 @@ + + + + Maintenance Equipment Usage + maintenance.equipment.usage + EU/ + 5 + 1 + 1 + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/i18n/bs.po new file mode 100644 index 0000000..3ea4f97 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/i18n/bs.po @@ -0,0 +1,399 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_equipment_usage +# +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_equipment_usage +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_usage.hr_equipment_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_equipment_usage.hr_equipment_view_kanban +msgid "" +" + + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/static/description/index.html new file mode 100644 index 0000000..2ec1180 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/static/description/index.html @@ -0,0 +1,430 @@ + + + + + + +Maintenance Equipment Usage + + + +
+

Maintenance Equipment Usage

+ + +

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

+

This module allows to record usages of maintenante equipments by employees, +with their dates, states and comments.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • César Fernández
  • +
  • Tecnativa
  • +
+
+
+

Contributors

+
    +
  • César Fernández Domínguez
  • +
  • Tecnativa:
      +
    • Víctor Martínez
    • +
    • Pedro M. Baeza
    • +
    +
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

Current maintainer:

+

victoralmau

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/tests/__init__.py new file mode 100644 index 0000000..487a399 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/tests/__init__.py @@ -0,0 +1 @@ +from . import test_maintenance_equipment_usage diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/tests/test_maintenance_equipment_usage.py b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/tests/test_maintenance_equipment_usage.py new file mode 100644 index 0000000..e102886 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/tests/test_maintenance_equipment_usage.py @@ -0,0 +1,56 @@ +# Copyright 2022-2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.exceptions import UserError +from odoo.tests import Form, new_test_user + +from odoo.addons.base.tests.common import BaseCommon + + +class TestMaintenanceEquipmentUsage(BaseCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.user = new_test_user( + cls.env, + login="test_basic_user", + ) + cls.equipment = cls.env["maintenance.equipment"].create( + {"name": "Test equipment"} + ) + cls.equipment_usage = cls._create_equipment_usage(cls) + + def _create_equipment_usage(self): + equipment_usage_form = Form(self.env["maintenance.equipment.usage"]) + equipment_usage_form.equipment_id = self.equipment + equipment_usage_form.user_id = self.user + return equipment_usage_form.save() + + def test_maintenance_equipment_full_process(self): + self.assertIn(self.equipment_usage, self.equipment.usage_ids) + self.assertFalse(self.equipment.in_use) + self.assertEqual(self.equipment_usage.state, "draft") + self.equipment_usage.action_pick() + self.assertTrue(self.equipment_usage.date_picking) + self.assertEqual(self.equipment_usage.state, "in_use") + self.assertTrue(self.equipment.in_use) + self.equipment_usage.action_return() + self.assertEqual(self.equipment_usage.state, "returned") + self.assertTrue(self.equipment_usage.date_return) + self.assertFalse(self.equipment.in_use) + + def test_maintenance_equipment_cancel_process(self): + self.assertEqual(self.equipment_usage.state, "draft") + self.equipment_usage.action_cancel() + self.assertEqual(self.equipment_usage.state, "cancel") + + def test_maintenance_equipment_multi(self): + self.equipment_usage.action_pick() + self.assertEqual(self.equipment_usage.state, "in_use") + equipment_usage2 = self._create_equipment_usage() + with self.assertRaises(UserError): + equipment_usage2.action_pick() + self.equipment_usage.action_cancel() + self.assertEqual(self.equipment_usage.state, "cancel") + equipment_usage2.action_pick() + self.assertEqual(equipment_usage2.state, "in_use") diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/views/maintenance_equipment_usage_views.xml b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/views/maintenance_equipment_usage_views.xml new file mode 100644 index 0000000..4320021 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/views/maintenance_equipment_usage_views.xml @@ -0,0 +1,203 @@ + + + + maintenance.equipment.usage.tree + maintenance.equipment.usage + + + + + + + + + + + + + + maintenance.equipment.usage.form + maintenance.equipment.usage + +
+
+
+ +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+
+
+ + maintenance.equipment.usage.search + maintenance.equipment.usage + + + + + + + + + + + + + + + + + + + + + + + Equipment Usage + ir.actions.act_window + maintenance.equipment.usage + tree,form + + {'search_default_not_returned': 1} + +

Click to create an Equipment Usage.

+
+
+ + + + Equipment Usage + ir.actions.act_window + maintenance.equipment.usage + tree,form + + + {'default_equipment_id': active_id, 'search_default_not_returned': 1} + [('equipment_id', '=', active_id)] + +

Click to create an Equipment Usage.

+
+
+
diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/views/maintenance_equipment_view.xml b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/views/maintenance_equipment_view.xml new file mode 100644 index 0000000..537fe5e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/maintenance_equipment_usage/views/maintenance_equipment_view.xml @@ -0,0 +1,46 @@ + + + + equipment.kanban + maintenance.equipment + + + + + + + In use + + + + + equipment.form + maintenance.equipment + + +
+ +
+ + + In use + +
+
+
diff --git a/odoo-bringout-oca-maintenance-maintenance_equipment_usage/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/pyproject.toml new file mode 100644 index 0000000..f131775 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_equipment_usage/pyproject.toml @@ -0,0 +1,42 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_equipment_usage" +version = "16.0.0" +description = "Maintenance Equipment Usage - Odoo addon" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-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_equipment_usage"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_location/README.md b/odoo-bringout-oca-maintenance-maintenance_location/README.md new file mode 100644 index 0000000..707ac7a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/README.md @@ -0,0 +1,44 @@ +# Maintenance Location + +Odoo addon: maintenance_location + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_location +``` + +## Dependencies + +This addon depends on: +- maintenance_plan + +## Manifest Information + +- **Name**: Maintenance Location +- **Version**: 16.0.1.0.0 +- **Category**: N/A +- **License**: AGPL-3 +- **Installable**: False + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_location`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_location/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_location/doc/ARCHITECTURE.md new file mode 100644 index 0000000..f924247 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/doc/ARCHITECTURE.md @@ -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_location Module - maintenance_location + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_location/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_location/doc/CONFIGURATION.md new file mode 100644 index 0000000..8e0e64d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_location. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_location/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_location/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_location/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_location/doc/DEPENDENCIES.md new file mode 100644 index 0000000..cbafb41 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/doc/DEPENDENCIES.md @@ -0,0 +1,5 @@ +# Dependencies + +This addon depends on: + +- [maintenance_plan](https://github.com/bringout/oca-technical) diff --git a/odoo-bringout-oca-maintenance-maintenance_location/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_location/doc/FAQ.md new file mode 100644 index 0000000..d9d7861 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/doc/FAQ.md @@ -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_location or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_location/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_location/doc/INSTALL.md new file mode 100644 index 0000000..ec789ca --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_location" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_location" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_location/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_location/doc/MODELS.md new file mode 100644 index 0000000..a74b271 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/doc/MODELS.md @@ -0,0 +1,15 @@ +# Models + +Detected core models and extensions in maintenance_location. + +```mermaid +classDiagram + class maintenance_location + class maintenance_equipment + class maintenance_plan + class maintenance_request +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_location/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_location/doc/OVERVIEW.md new file mode 100644 index 0000000..c8e20e0 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_location. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_location +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_location/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_location/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_location/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_location/doc/SECURITY.md new file mode 100644 index 0000000..3fef6fb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/doc/SECURITY.md @@ -0,0 +1,34 @@ +# Security + +Access control and security definitions in maintenance_location. + +## Access Control Lists (ACLs) + +Model access permissions defined in: +- **[ir.model.access.csv](../maintenance_location/security/ir.model.access.csv)** + - 2 model access rules + +## Record Rules + +Row-level security rules defined in: + +```mermaid +graph TB + subgraph "Security Layers" + A[Users] --> B[Groups] + B --> C[Access Control Lists] + C --> D[Models] + B --> E[Record Rules] + E --> F[Individual Records] + end +``` + +Security files overview: +- **[ir.model.access.csv](../maintenance_location/security/ir.model.access.csv)** + - Model access permissions (CRUD rights) + +Notes +- Access Control Lists define which groups can access which models +- Record Rules provide row-level security (filter records by user/group) +- Security groups organize users and define permission sets +- All security is enforced at the ORM level by Odoo diff --git a/odoo-bringout-oca-maintenance-maintenance_location/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_location/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_location/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_location/doc/USAGE.md new file mode 100644 index 0000000..5c52286 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/doc/USAGE.md @@ -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_location +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_location/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_location/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/README.rst b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/README.rst new file mode 100644 index 0000000..43ae1b7 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/README.rst @@ -0,0 +1,79 @@ +==================== +Maintenance Location +==================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:5143b2a600e8f73c5247e22c749cce44d1092909b5ded3d7af91d2d797f81924 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_location + :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_location + :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| + +Define a location system with hierarchy for maintenance equipments and requests. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* CreuBlanca + +Contributors +~~~~~~~~~~~~ + +* CreuBlanca + * Enric Tobella + * Kevin Luna + * Jaime Arroyo + +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 `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/__init__.py b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/__manifest__.py new file mode 100644 index 0000000..b471f16 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Maintenance Location", + "summary": """ + Define a location system for maintenance""", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "CreuBlanca,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/maintenance", + "depends": ["maintenance_plan"], + "data": [ + "views/maintenance_plan.xml", + "views/maintenance_equipment.xml", + "security/ir.model.access.csv", + "views/maintenance_request.xml", + "views/maintenance_location.xml", + ], +} diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/i18n/bs.po new file mode 100644 index 0000000..985b414 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/i18n/bs.po @@ -0,0 +1,182 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_location +# +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_location +#: model_terms:ir.ui.view,arch_db:maintenance_location.maintenance_location_form_view +msgid "" +"
\n" +" Longitude:" +msgstr "" + +#. module: maintenance_location +#: model_terms:ir.ui.view,arch_db:maintenance_location.hr_equipment_view_kanban +msgid "" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__active +msgid "Active" +msgstr "Aktivan" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__child_id +msgid "Child Locations" +msgstr "Child Lokacijas" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__complete_name +msgid "Complete Name" +msgstr "Puni naziv" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__description +msgid "Description" +msgstr "Opis" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__display_name +msgid "Display Name" +msgstr "Prikazani naziv" + +#. module: maintenance_location +#. odoo-python +#: code:addons/maintenance_location/models/maintenance_location.py:0 +#, python-format +msgid "Error ! You cannot create recursive Locations." +msgstr "Greška ! You cannot create recursive Locations." + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__id +msgid "ID" +msgstr "ID" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location____last_update +msgid "Last Modified on" +msgstr "Zadnje mijenjano" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__write_uid +msgid "Last Updated by" +msgstr "Zadnji ažurirao" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__write_date +msgid "Last Updated on" +msgstr "Zadnje ažurirano" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__latitude +msgid "Latitude" +msgstr "Latitude" + +#. module: maintenance_location +#: model_terms:ir.ui.view,arch_db:maintenance_location.maintenance_location_form_view +msgid "Latitude:" +msgstr "Latitude:" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_equipment__location_id +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_plan__location_id +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_request__location_id +#: model_terms:ir.ui.view,arch_db:maintenance_location.maintenance_location_form_view +msgid "Location" +msgstr "Lokacija" + +#. module: maintenance_location +#: model_terms:ir.ui.view,arch_db:maintenance_location.hr_equipment_request_view_kanban +msgid "Location :" +msgstr "Lokacija :" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_equipment__location +msgid "Location Old" +msgstr "Lokacija Old" + +#. module: maintenance_location +#: model_terms:ir.ui.view,arch_db:maintenance_location.maintenance_location_form_view +msgid "Location name" +msgstr "Lokacija name" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__longitude +msgid "Longitude" +msgstr "Longitude" + +#. module: maintenance_location +#: model:ir.model,name:maintenance_location.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Oprema za održavanje" + +#. module: maintenance_location +#: model:ir.actions.act_window,name:maintenance_location.maintenance_location_act_window +#: model:ir.model,name:maintenance_location.model_maintenance_location +msgid "Maintenance Location" +msgstr "Maintenance Lokacija" + +#. module: maintenance_location +#: model:ir.ui.menu,name:maintenance_location.maintenance_location_menu +msgid "Maintenance Locations" +msgstr "Maintenance Lokacijas" + +#. module: maintenance_location +#: model:ir.model,name:maintenance_location.model_maintenance_plan +msgid "Maintenance Plan" +msgstr "Maintenance Plan" + +#. module: maintenance_location +#: model:ir.model,name:maintenance_location.model_maintenance_request +msgid "Maintenance Request" +msgstr "Zahtjev za održavanje" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__name +msgid "Name" +msgstr "Naziv:" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__parent_id +msgid "Parent Location" +msgstr "Nadređena lokacija" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__parent_path +msgid "Parent Path" +msgstr "Putanja nadređenih" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__partner_id +msgid "Partner" +msgstr "Partner" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__sequence +msgid "Sequence" +msgstr "Sekvenca" + +#. module: maintenance_location +#: model_terms:ir.ui.view,arch_db:maintenance_location.maintenance_location_form_view +msgid "e.g. Building A" +msgstr "e.g. Zgrada A" diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/i18n/es.po new file mode 100644 index 0000000..4e3f9dd --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/i18n/es.po @@ -0,0 +1,136 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_location +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-12 11:56+0000\n" +"PO-Revision-Date: 2019-12-12 13:00+0100\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"Language: es\n" +"X-Generator: Poedit 2.0.6\n" + +#. module: maintenance_location +#: model:ir.ui.view,arch_db:maintenance_location.maintenance_location_form_view +msgid "Location name" +msgstr "Nombre de la ubicación" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location_child_id +msgid "Child Locations" +msgstr "Ubicaciones Hijas" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location_complete_name +msgid "Complete Name" +msgstr "Nombre completo" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location_create_date +msgid "Created on" +msgstr "Creado en" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location_display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: maintenance_location +#: model:ir.model,name:maintenance_location.model_maintenance_equipment +msgid "Equipment" +msgstr "Equipamiento" + +#. module: maintenance_location +#: code:addons/maintenance_location/models/maintenance_location.py:52 +#, python-format +msgid "Error ! You cannot create recursive Locations." +msgstr "Error! No puedes crear ubicaciones cíclicas." + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location_id +msgid "ID" +msgstr "ID (identificación)" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location___last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location_write_uid +msgid "Last Updated by" +msgstr "Última actualización de" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location_write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location_parent_left +msgid "Left Parent" +msgstr "Padre izquierdo" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_equipment_location_id +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_request_location_id +msgid "Location" +msgstr "Ubicación" + +#. module: maintenance_location +#: model:ir.ui.view,arch_db:maintenance_location.hr_equipment_request_view_kanban +msgid "Location :" +msgstr "Location :" + +#. module: maintenance_location +#: model:ir.actions.act_window,name:maintenance_location.maintenance_location_act_window +#: model:ir.model,name:maintenance_location.model_maintenance_location +msgid "Maintenance Location" +msgstr "Ubicación" + +#. module: maintenance_location +#: model:ir.ui.menu,name:maintenance_location.maintenance_location_menu +msgid "Maintenance Locations" +msgstr "Ubicaciones" + +#. module: maintenance_location +#: model:ir.model,name:maintenance_location.model_maintenance_request +msgid "Maintenance Requests" +msgstr "Peticiones de mantenimiento" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location_name +msgid "Name" +msgstr "Nombre" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location_parent_id +msgid "Parent Location" +msgstr "Ubicación padre" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location_partner_id +msgid "Partner" +msgstr "Centro" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location_parent_right +msgid "Right Parent" +msgstr "Padre derecho" + +#. module: maintenance_location +#: model:ir.ui.view,arch_db:maintenance_location.maintenance_location_form_view +msgid "e.g. Building A" +msgstr "p.e. Edificio A" diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/i18n/it.po new file mode 100644 index 0000000..0caa0bf --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/i18n/it.po @@ -0,0 +1,195 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_location +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-01-31 14:06+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: maintenance_location +#: model_terms:ir.ui.view,arch_db:maintenance_location.maintenance_location_form_view +msgid "" +"
\n" +" Longitude:" +msgstr "" +"
\n" +" Longitudine:" + +#. module: maintenance_location +#: model_terms:ir.ui.view,arch_db:maintenance_location.hr_equipment_view_kanban +msgid "" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__active +msgid "Active" +msgstr "Attiva" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__child_id +msgid "Child Locations" +msgstr "Ubicazioni figlie" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__complete_name +msgid "Complete Name" +msgstr "Nome completo" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__description +msgid "Description" +msgstr "Descrizione" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_equipment__display_name +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__display_name +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_plan__display_name +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_request__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: maintenance_location +#: code:addons/maintenance_location/models/maintenance_location.py:0 +#, python-format +msgid "Error ! You cannot create recursive Locations." +msgstr "Errore! Non è possibile creare ubicazioni ricorsive." + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_equipment__id +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__id +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_plan__id +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_request__id +msgid "ID" +msgstr "ID" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_equipment____last_update +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location____last_update +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_plan____last_update +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_request____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__latitude +msgid "Latitude" +msgstr "Latitudine" + +#. module: maintenance_location +#: model_terms:ir.ui.view,arch_db:maintenance_location.maintenance_location_form_view +msgid "Latitude:" +msgstr "Latitudine:" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_equipment__location_id +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_plan__location_id +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_request__location_id +#: model_terms:ir.ui.view,arch_db:maintenance_location.maintenance_location_form_view +msgid "Location" +msgstr "Ubicazione" + +#. module: maintenance_location +#: model_terms:ir.ui.view,arch_db:maintenance_location.hr_equipment_request_view_kanban +msgid "Location :" +msgstr "Ubicazione:" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_equipment__location +msgid "Location Old" +msgstr "Ubicazione vecchia" + +#. module: maintenance_location +#: model_terms:ir.ui.view,arch_db:maintenance_location.maintenance_location_form_view +msgid "Location name" +msgstr "Nome ubicazione" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__longitude +msgid "Longitude" +msgstr "Longitudine" + +#. module: maintenance_location +#: model:ir.model,name:maintenance_location.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Attrezzatura manutenzione" + +#. module: maintenance_location +#: model:ir.actions.act_window,name:maintenance_location.maintenance_location_act_window +#: model:ir.model,name:maintenance_location.model_maintenance_location +msgid "Maintenance Location" +msgstr "Ubicazione manutenzione" + +#. module: maintenance_location +#: model:ir.ui.menu,name:maintenance_location.maintenance_location_menu +msgid "Maintenance Locations" +msgstr "Ubicazioni manutenzione" + +#. module: maintenance_location +#: model:ir.model,name:maintenance_location.model_maintenance_plan +msgid "Maintenance Plan" +msgstr "Piano manutenzione" + +#. module: maintenance_location +#: model:ir.model,name:maintenance_location.model_maintenance_request +msgid "Maintenance Request" +msgstr "Richiesta manutenzione" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__name +msgid "Name" +msgstr "Nome" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__parent_id +msgid "Parent Location" +msgstr "Ubicazione padre" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__parent_path +msgid "Parent Path" +msgstr "Percorso padre" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__partner_id +msgid "Partner" +msgstr "Partner" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__sequence +msgid "Sequence" +msgstr "Sequenza" + +#. module: maintenance_location +#: model_terms:ir.ui.view,arch_db:maintenance_location.maintenance_location_form_view +msgid "e.g. Building A" +msgstr "e.g. Fabbricato A" diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/i18n/maintenance_location.pot b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/i18n/maintenance_location.pot new file mode 100644 index 0000000..4263221 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/i18n/maintenance_location.pot @@ -0,0 +1,182 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_location +# +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_location +#: model_terms:ir.ui.view,arch_db:maintenance_location.maintenance_location_form_view +msgid "" +"
\n" +" Longitude:" +msgstr "" + +#. module: maintenance_location +#: model_terms:ir.ui.view,arch_db:maintenance_location.hr_equipment_view_kanban +msgid "" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__active +msgid "Active" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__child_id +msgid "Child Locations" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__complete_name +msgid "Complete Name" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__create_uid +msgid "Created by" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__create_date +msgid "Created on" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__description +msgid "Description" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__display_name +msgid "Display Name" +msgstr "" + +#. module: maintenance_location +#. odoo-python +#: code:addons/maintenance_location/models/maintenance_location.py:0 +#, python-format +msgid "Error ! You cannot create recursive Locations." +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__id +msgid "ID" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location____last_update +msgid "Last Modified on" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__write_date +msgid "Last Updated on" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__latitude +msgid "Latitude" +msgstr "" + +#. module: maintenance_location +#: model_terms:ir.ui.view,arch_db:maintenance_location.maintenance_location_form_view +msgid "Latitude:" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_equipment__location_id +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_plan__location_id +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_request__location_id +#: model_terms:ir.ui.view,arch_db:maintenance_location.maintenance_location_form_view +msgid "Location" +msgstr "" + +#. module: maintenance_location +#: model_terms:ir.ui.view,arch_db:maintenance_location.hr_equipment_request_view_kanban +msgid "Location :" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_equipment__location +msgid "Location Old" +msgstr "" + +#. module: maintenance_location +#: model_terms:ir.ui.view,arch_db:maintenance_location.maintenance_location_form_view +msgid "Location name" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__longitude +msgid "Longitude" +msgstr "" + +#. module: maintenance_location +#: model:ir.model,name:maintenance_location.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "" + +#. module: maintenance_location +#: model:ir.actions.act_window,name:maintenance_location.maintenance_location_act_window +#: model:ir.model,name:maintenance_location.model_maintenance_location +msgid "Maintenance Location" +msgstr "" + +#. module: maintenance_location +#: model:ir.ui.menu,name:maintenance_location.maintenance_location_menu +msgid "Maintenance Locations" +msgstr "" + +#. module: maintenance_location +#: model:ir.model,name:maintenance_location.model_maintenance_plan +msgid "Maintenance Plan" +msgstr "" + +#. module: maintenance_location +#: model:ir.model,name:maintenance_location.model_maintenance_request +msgid "Maintenance Request" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__name +msgid "Name" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__parent_id +msgid "Parent Location" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__parent_path +msgid "Parent Path" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__partner_id +msgid "Partner" +msgstr "" + +#. module: maintenance_location +#: model:ir.model.fields,field_description:maintenance_location.field_maintenance_location__sequence +msgid "Sequence" +msgstr "" + +#. module: maintenance_location +#: model_terms:ir.ui.view,arch_db:maintenance_location.maintenance_location_form_view +msgid "e.g. Building A" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/__init__.py new file mode 100644 index 0000000..3b2481d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/__init__.py @@ -0,0 +1,4 @@ +from . import maintenance_location +from . import maintenance_request +from . import maintenance_equipment +from . import maintenance_plan diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/maintenance_equipment.py b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/maintenance_equipment.py new file mode 100644 index 0000000..7614226 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/maintenance_equipment.py @@ -0,0 +1,20 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class MaintenanceEquipment(models.Model): + + _inherit = "maintenance.equipment" + + location_id = fields.Many2one("maintenance.location", tracking=True) + location = fields.Char(string="Location Old") + + def _prepare_request_from_plan(self, maintenance_plan, next_maintenance_date): + res = super()._prepare_request_from_plan( + maintenance_plan, next_maintenance_date + ) + location = maintenance_plan.location_id or self.location_id + res.update({"location_id": location.id}) + return res diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/maintenance_location.py b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/maintenance_location.py new file mode 100644 index 0000000..7224041 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/maintenance_location.py @@ -0,0 +1,54 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class MaintenanceLocation(models.Model): + + _name = "maintenance.location" + _description = "Maintenance Location" + _parent_name = "parent_id" + _parent_store = True + _parent_order = "name" + _rec_name = "complete_name" + _order = "complete_name,id" + + name = fields.Char(required=True) + description = fields.Char() + complete_name = fields.Char( + compute="_compute_complete_name", store=True, recursive=True + ) + + partner_id = fields.Many2one("res.partner") + + parent_id = fields.Many2one( + "maintenance.location", + "Parent Location", + index=True, + ondelete="cascade", + ) + child_id = fields.One2many("maintenance.location", "parent_id", "Child Locations") + parent_path = fields.Char(index=True, unaccent=False) + latitude = fields.Float(digits=(16, 5)) + longitude = fields.Float(digits=(16, 5)) + sequence = fields.Integer(default=10) + active = fields.Boolean(default=True) + + @api.depends("name", "parent_id.complete_name") + def _compute_complete_name(self): + for location in self: + if location.parent_id: + location.complete_name = "{} / {}".format( + location.parent_id.complete_name, + location.name, + ) + else: + location.complete_name = location.name + + @api.constrains("parent_id") + def _check_category_recursion(self): + if not self._check_recursion(): + raise ValidationError(_("Error ! You cannot create recursive Locations.")) + return True diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/maintenance_plan.py b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/maintenance_plan.py new file mode 100644 index 0000000..3a02e1f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/maintenance_plan.py @@ -0,0 +1,11 @@ +# Copyright 2020 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class MaintenancePlan(models.Model): + + _inherit = "maintenance.plan" + + location_id = fields.Many2one("maintenance.location") diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/maintenance_request.py b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/maintenance_request.py new file mode 100644 index 0000000..df41916 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/models/maintenance_request.py @@ -0,0 +1,22 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class MaintenanceRequest(models.Model): + + _inherit = "maintenance.request" + + location_id = fields.Many2one( + "maintenance.location", + compute="_compute_equipment_id", + store=True, + readonly=False, + ) + + @api.depends("equipment_id") + def _compute_equipment_id(self): + for record in self: + if record.equipment_id and record.equipment_id.location_id: + record.location_id = record.equipment_id.location_id diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..3221219 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +* CreuBlanca + * Enric Tobella + * Kevin Luna + * Jaime Arroyo diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/readme/DESCRIPTION.rst new file mode 100644 index 0000000..6b5f209 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Define a location system with hierarchy for maintenance equipments and requests. diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/security/ir.model.access.csv b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/security/ir.model.access.csv new file mode 100644 index 0000000..0e7eb05 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_maintenance_location,access_maintenance_location,model_maintenance_location,base.group_user,1,0,0,0 +access_maintenance_location_maintenance,access_maintenance_location_maintenance,model_maintenance_location,maintenance.group_equipment_manager,1,1,1,1 diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/static/description/index.html new file mode 100644 index 0000000..6dbd49a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/static/description/index.html @@ -0,0 +1,424 @@ + + + + + + +Maintenance Location + + + +
+

Maintenance Location

+ + +

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

+

Define a location system with hierarchy for maintenance equipments and requests.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • CreuBlanca
  • +
+
+
+

Contributors

+
    +
  • CreuBlanca +* Enric Tobella +* Kevin Luna +* Jaime Arroyo
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/tests/__init__.py new file mode 100644 index 0000000..e76ac8f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/tests/__init__.py @@ -0,0 +1 @@ +from . import test_maintenance_location diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/tests/test_maintenance_location.py b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/tests/test_maintenance_location.py new file mode 100644 index 0000000..4305a5d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/tests/test_maintenance_location.py @@ -0,0 +1,53 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.exceptions import UserError +from odoo.tests.common import TransactionCase + + +class TestMaintenanceLocation(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + self = cls + self.location_1 = self.env["maintenance.location"].create({"name": "L1"}) + self.location_2 = self.env["maintenance.location"].create( + {"name": "L2", "parent_id": self.location_1.id} + ) + self.equipment = self.env["maintenance.equipment"].create( + {"name": "L2", "location_id": self.location_1.id} + ) + self.team = self.env["maintenance.team"].create({"name": "Team"}) + self.request = self.env["maintenance.request"].create( + {"name": "Request", "maintenance_team_id": self.team.id} + ) + + self.equipment = self.env["maintenance.equipment"].create( + {"name": "Laptop", "location_id": self.location_1.id} + ) + + self.plan = self.env["maintenance.plan"].create( + { + "equipment_id": self.equipment.id, + "interval": 1, + "interval_step": "month", + "maintenance_plan_horizon": 2, + "planning_step": "month", + "maintenance_team_id": self.team.id, + "location_id": self.location_1.id, + } + ) + + def test_maintenance_location(self): + self.assertEqual(self.location_2.complete_name, "L1 / L2") + with self.assertRaises(UserError): + self.location_1.write({"parent_id": self.location_2.id}) + + self.request.write({"equipment_id": self.equipment.id}) + self.assertEqual(self.request.location_id.id, self.location_1.id) + + def test_request_creation(self): + request = self.equipment._create_new_request(self.plan) + self.assertTrue(request) + for r in request: + self.assertEqual(r.location_id.id, self.location_1.id) diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/views/maintenance_equipment.xml b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/views/maintenance_equipment.xml new file mode 100644 index 0000000..bdf29e9 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/views/maintenance_equipment.xml @@ -0,0 +1,59 @@ + + + + + maintenance.equipment.form (in maintenance_location) + maintenance.equipment + + + + 1 + + + + + + + + + + + maintenance.equipment.search (in maintenance_location) + maintenance.equipment + + + + + + + + + maintenance.equipment.tree (in maintenance_location) + maintenance.equipment + + + + + + + + + maintenance.equipment.tree (in maintenance_location) + maintenance.equipment + + +
+
+ + +
+
+
+
+
diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/views/maintenance_location.xml b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/views/maintenance_location.xml new file mode 100644 index 0000000..311d11c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/views/maintenance_location.xml @@ -0,0 +1,61 @@ + + + + + maintenance.location.form (in cb_maintenance) + maintenance.location + +
+ +
+
+ + + + +
+
+
+
+ + maintenance.location.search (in cb_maintenance) + maintenance.location + + + + + + + + maintenance.location.tree (in cb_maintenance) + maintenance.location + + + + + + + + Maintenance Location + maintenance.location + tree,form + [] + {} + + + Maintenance Locations + + + + +
diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/views/maintenance_plan.xml b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/views/maintenance_plan.xml new file mode 100644 index 0000000..ba44e49 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/views/maintenance_plan.xml @@ -0,0 +1,35 @@ + + + + + maintenance.plan.form (in maintenance_location) + maintenance.plan + + + + + + + + + maintenance.plan.search (in maintenance_location) + maintenance.plan + + + + + + + + + maintenance.plan.tree (in maintenance_location) + maintenance.plan + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/views/maintenance_request.xml b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/views/maintenance_request.xml new file mode 100644 index 0000000..e6a8493 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/maintenance_location/views/maintenance_request.xml @@ -0,0 +1,51 @@ + + + + + maintenance.request.form (in maintenance_location) + maintenance.request + + + + + + + + + maintenance.request.search (in maintenance_location) + maintenance.request + + + + + + + + + maintenance.request.tree (in maintenance_location) + maintenance.request + + + + + + + + + maintenance.request.kanban (in maintenance_location) + maintenance.request + + + + Location :
+
+
+
+
diff --git a/odoo-bringout-oca-maintenance-maintenance_location/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_location/pyproject.toml new file mode 100644 index 0000000..abf9367 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_location/pyproject.toml @@ -0,0 +1,43 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_location" +version = "16.0.0" +description = "Maintenance Location - + Define a location system for maintenance" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-maintenance_plan>=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_location"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/README.md b/odoo-bringout-oca-maintenance-maintenance_plan/README.md new file mode 100644 index 0000000..dba2449 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/README.md @@ -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 diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_plan/doc/ARCHITECTURE.md new file mode 100644 index 0000000..b2f60a2 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/doc/ARCHITECTURE.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_plan/doc/CONFIGURATION.md new file mode 100644 index 0000000..f8c1a02 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_plan. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_plan/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_plan/doc/DEPENDENCIES.md new file mode 100644 index 0000000..02c57be --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/doc/DEPENDENCIES.md @@ -0,0 +1,5 @@ +# Dependencies + +This addon depends on: + +- [base_maintenance](https://github.com/bringout/oca-technical) diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_plan/doc/FAQ.md new file mode 100644 index 0000000..e7e470a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/doc/FAQ.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_plan/doc/INSTALL.md new file mode 100644 index 0000000..d042b4e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_plan" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_plan" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_plan/doc/MODELS.md new file mode 100644 index 0000000..d447d92 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/doc/MODELS.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_plan/doc/OVERVIEW.md new file mode 100644 index 0000000..931d154 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/doc/OVERVIEW.md @@ -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 diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_plan/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_plan/doc/SECURITY.md new file mode 100644 index 0000000..be22e7d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/doc/SECURITY.md @@ -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 diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_plan/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_plan/doc/USAGE.md new file mode 100644 index 0000000..d256f6a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/doc/USAGE.md @@ -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 +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_plan/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/README.rst b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/README.rst new file mode 100644 index 0000000..6a46e8c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/README.rst @@ -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 `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Camptocamp SA +* ForgeFlow + +Contributors +~~~~~~~~~~~~ + +* Akim Juillerat +* Matteo Mazzoni +* David Alonso +* Adrià Gil Sorribes +* Jordi Ballester Alomar +* Lois Rilo +* Enric Tobella +* Alexei Rivera + +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 `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/__init__.py b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/__init__.py new file mode 100644 index 0000000..cc6b635 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/__init__.py @@ -0,0 +1,2 @@ +from . import models +from .hooks import post_init_hook diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/__manifest__.py new file mode 100644 index 0000000..8670afa --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/__manifest__.py @@ -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, +} diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/data/demo_maintenance_plan.xml b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/data/demo_maintenance_plan.xml new file mode 100644 index 0000000..e7e07e9 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/data/demo_maintenance_plan.xml @@ -0,0 +1,57 @@ + + + + + Monthly + + + + Weekly + + + + + + + 1 + month + 2 + 2 + month + + + + + 1 + month + 2 + 2 + month + + + + + 1 + month + 2 + 1 + month + + + + + 1 + month + 4 + 3 + month + + + + + 7 + 2 + 1 + month + + diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/hooks.py b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/hooks.py new file mode 100644 index 0000000..b649056 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/hooks.py @@ -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, + } + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/bs.po new file mode 100644 index 0000000..4f7beb6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/bs.po @@ -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 "Instructions:" +msgstr "Instructions:" + +#. 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" diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/es.po new file mode 100644 index 0000000..11b663c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/es.po @@ -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 \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 "Instructions:" +msgstr "Instrucciones:" + +#. 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" diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/it.po new file mode 100644 index 0000000..9796341 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/it.po @@ -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 \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 "Instructions:" +msgstr "Istruzioni:" + +#. 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." diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/maintenance_plan.pot b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/maintenance_plan.pot new file mode 100644 index 0000000..34d49a7 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/maintenance_plan.pot @@ -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 "Instructions:" +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 "" diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/pt.po b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/pt.po new file mode 100644 index 0000000..5e17b40 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/pt.po @@ -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 \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 "Instructions:" +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)" diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/zh_CN.po b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/zh_CN.po new file mode 100644 index 0000000..25ccff5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/i18n/zh_CN.po @@ -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 "Instructions:" +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 "" diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/__init__.py new file mode 100644 index 0000000..b4d1731 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/__init__.py @@ -0,0 +1,4 @@ +from . import maintenance_kind +from . import maintenance_plan +from . import maintenance_equipment +from . import maintenance_request diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/maintenance_equipment.py b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/maintenance_equipment.py new file mode 100644 index 0000000..d6fe208 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/maintenance_equipment.py @@ -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) diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/maintenance_kind.py b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/maintenance_kind.py new file mode 100644 index 0000000..04db3cd --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/maintenance_kind.py @@ -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.") + ] diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/maintenance_plan.py b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/maintenance_plan.py new file mode 100644 index 0000000..85b6977 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/maintenance_plan.py @@ -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] diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/maintenance_request.py b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/maintenance_request.py new file mode 100644 index 0000000..35ec260 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/models/maintenance_request.py @@ -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() diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..22aed97 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/readme/CONTRIBUTORS.rst @@ -0,0 +1,8 @@ +* Akim Juillerat +* Matteo Mazzoni +* David Alonso +* Adrià Gil Sorribes +* Jordi Ballester Alomar +* Lois Rilo +* Enric Tobella +* Alexei Rivera diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/readme/DESCRIPTION.rst new file mode 100644 index 0000000..2e3ff22 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module extends the functionality of Odoo Maintenance module by allowing +an equipment to have different preventive maintenance kinds. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/readme/INSTALL.rst b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/readme/INSTALL.rst new file mode 100644 index 0000000..7231233 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/readme/INSTALL.rst @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/readme/USAGE.rst b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/readme/USAGE.rst new file mode 100644 index 0000000..f484363 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/readme/USAGE.rst @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/security/ir.model.access.csv b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/security/ir.model.access.csv new file mode 100644 index 0000000..8329361 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/security/ir.model.access.csv @@ -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 diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/security/maintenance_security.xml b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/security/maintenance_security.xml new file mode 100644 index 0000000..77a3658 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/security/maintenance_security.xml @@ -0,0 +1,27 @@ + + + + Maintenance plan multi-company + + + ['|',('company_id','=',False),('company_id', 'in', company_ids)] + + + Users are allowed to access plan from equipments they follow + + [('equipment_id.message_partner_ids', 'in', [user.partner_id.id])] + + + + Administrator of maintenance plans + + [(1, '=', 1)] + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/static/description/index.html new file mode 100644 index 0000000..82005e9 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/static/description/index.html @@ -0,0 +1,473 @@ + + + + + + +Maintenance Plan + + + +
+

Maintenance Plan

+ + +

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

+

This module extends the functionality of Odoo Maintenance module by allowing +an equipment to have different preventive maintenance kinds.

+

Table of contents

+ +
+

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. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Camptocamp SA
  • +
  • ForgeFlow
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/tests/__init__.py new file mode 100644 index 0000000..def774e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/tests/__init__.py @@ -0,0 +1,2 @@ +from . import test_maintenance_plan +from . import test_maintenance_plan_domain diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/tests/common.py b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/tests/common.py new file mode 100644 index 0000000..bc5fbbd --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/tests/common.py @@ -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"] diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/tests/test_maintenance_plan.py b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/tests/test_maintenance_plan.py new file mode 100644 index 0000000..585e1b1 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/tests/test_maintenance_plan.py @@ -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) diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/tests/test_maintenance_plan_domain.py b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/tests/test_maintenance_plan_domain.py new file mode 100644 index 0000000..6e05783 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/tests/test_maintenance_plan_domain.py @@ -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")) diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/views/maintenance_equipment_views.xml b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/views/maintenance_equipment_views.xml new file mode 100644 index 0000000..3568a81 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/views/maintenance_equipment_views.xml @@ -0,0 +1,111 @@ + + + + + equipment.form.inherit + + maintenance.equipment + +
+ +
+ + {'invisible': 1} + + + + + + + + + + + + + + + + + + + + + + {'required': [('maintenance_team_required', '=', True)]} + + +
+ + equipment.search-oxigen + maintenance.equipment + + + + + + + + + + equipment.request.form.inherit + maintenance.request + + + + + + + + + + + + + + Notes + + + + + {'hide_equipment_id': 1} + + + + equipment.request.tree + maintenance.request + + + + + + + + +
diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/views/maintenance_kind_views.xml b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/views/maintenance_kind_views.xml new file mode 100644 index 0000000..7b781d5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/views/maintenance_kind_views.xml @@ -0,0 +1,26 @@ + + + + maintenance.kind.tree + maintenance.kind + + + + + + + + + Maintenance kinds + maintenance.kind + tree + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/views/maintenance_plan_views.xml b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/views/maintenance_plan_views.xml new file mode 100644 index 0000000..25987bc --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/views/maintenance_plan_views.xml @@ -0,0 +1,204 @@ + + + + Maintenance Requests + maintenance.request + + kanban,tree,form,pivot,graph,calendar + { + 'default_maintenance_plan_id': active_id, + } + [('maintenance_plan_id', '=', active_id)] + + + maintenance.plan.form + maintenance.plan + +
+
+
+ + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + +
+ + + + + maintenance.plan.tree + maintenance.plan + + + + + + + + + + + + + + + + + + + + maintenance.plan.search + maintenance.plan + + + + + + + + + + + + + + + + Maintenance plans + maintenance.plan + tree,form + + ['|', ('active', '=', True), ('active', '=', + False)] + + + + Maintenance plans + maintenance.plan + tree,form + + { + 'default_equipment_id': active_id, 'hide_equipment_id': 0 + } + ['|', ('active', '=', True), ('active', '=', + False), ('search_equipment_id', '=', active_id)] + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/views/report_maintenance_request.xml b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/views/report_maintenance_request.xml new file mode 100644 index 0000000..008874e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/maintenance_plan/views/report_maintenance_request.xml @@ -0,0 +1,16 @@ + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_plan/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_plan/pyproject.toml new file mode 100644 index 0000000..c80223d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan/pyproject.toml @@ -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", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/README.md b/odoo-bringout-oca-maintenance-maintenance_plan_activity/README.md new file mode 100644 index 0000000..fa9e7fc --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/README.md @@ -0,0 +1,44 @@ +# Maintenance Plan Activity + +Odoo addon: maintenance_plan_activity + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_plan_activity +``` + +## Dependencies + +This addon depends on: +- maintenance_plan + +## Manifest Information + +- **Name**: Maintenance Plan Activity +- **Version**: 16.0.1.0.0 +- **Category**: N/A +- **License**: AGPL-3 +- **Installable**: False + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_plan_activity`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/ARCHITECTURE.md new file mode 100644 index 0000000..70a3a41 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/ARCHITECTURE.md @@ -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_activity Module - maintenance_plan_activity + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/CONFIGURATION.md new file mode 100644 index 0000000..fa0717e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_plan_activity. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/DEPENDENCIES.md new file mode 100644 index 0000000..cbafb41 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/DEPENDENCIES.md @@ -0,0 +1,5 @@ +# Dependencies + +This addon depends on: + +- [maintenance_plan](https://github.com/bringout/oca-technical) diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/FAQ.md new file mode 100644 index 0000000..320bf0f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/FAQ.md @@ -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_activity or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/INSTALL.md new file mode 100644 index 0000000..78bfc8b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_plan_activity" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_plan_activity" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/MODELS.md new file mode 100644 index 0000000..1f77fac --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/MODELS.md @@ -0,0 +1,14 @@ +# Models + +Detected core models and extensions in maintenance_plan_activity. + +```mermaid +classDiagram + class maintenance_planned_activity + class maintenance_equipment + class maintenance_plan +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/OVERVIEW.md new file mode 100644 index 0000000..03da234 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_plan_activity. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_plan_activity +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/SECURITY.md new file mode 100644 index 0000000..3b4c13c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/SECURITY.md @@ -0,0 +1,34 @@ +# Security + +Access control and security definitions in maintenance_plan_activity. + +## Access Control Lists (ACLs) + +Model access permissions defined in: +- **[ir.model.access.csv](../maintenance_plan_activity/security/ir.model.access.csv)** + - 2 model access rules + +## Record Rules + +Row-level security rules defined in: + +```mermaid +graph TB + subgraph "Security Layers" + A[Users] --> B[Groups] + B --> C[Access Control Lists] + C --> D[Models] + B --> E[Record Rules] + E --> F[Individual Records] + end +``` + +Security files overview: +- **[ir.model.access.csv](../maintenance_plan_activity/security/ir.model.access.csv)** + - Model access permissions (CRUD rights) + +Notes +- Access Control Lists define which groups can access which models +- Record Rules provide row-level security (filter records by user/group) +- Security groups organize users and define permission sets +- All security is enforced at the ORM level by Odoo diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/USAGE.md new file mode 100644 index 0000000..c1b6c7c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/USAGE.md @@ -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_activity +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/README.rst b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/README.rst new file mode 100644 index 0000000..f02e056 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/README.rst @@ -0,0 +1,80 @@ +========================= +Maintenance Plan Activity +========================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:7117d40453faf264cb3c6537a9ac18fec6f26f4eb8dfbd8e417cefd46f5a655d + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_activity + :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_activity + :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 allows defining in the maintenance plan activities that will be created once the maintenance +requests are created as a consequence of the plan itself. + +.. image:: https://raw.githubusercontent.com/maintenance_plan_activity/static/description/maintenance_plan_activity.png + :alt: Maintenance Planned Activities + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* ForgeFlow + +Contributors +~~~~~~~~~~~~ + +* Adria Gil Sorribes + +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 `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/__init__.py b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/__manifest__.py new file mode 100644 index 0000000..cfe7d98 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/__manifest__.py @@ -0,0 +1,17 @@ +# Copyright 2019-20 ForgeFlow S.L. (https://www.forgeflow.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Maintenance Plan Activity", + "summary": """ + This module allows defining in the maintenance plan activities that + will be created once the maintenance requests are created as a + consequence of the plan itself.""", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "ForgeFlow, Odoo Community Association (OCA)", + "maintainers": [], + "website": "https://github.com/OCA/maintenance", + "depends": ["maintenance_plan"], + "data": ["security/ir.model.access.csv", "views/maintenance_views.xml"], +} diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/i18n/bs.po new file mode 100644 index 0000000..8f58520 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/i18n/bs.po @@ -0,0 +1,104 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_plan_activity +# +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_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__date_before_request +msgid "# Days before request" +msgstr "# Dana prije zahtjeva" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__activity_type_id +msgid "Activity Type" +msgstr "Tip aktivnosti" + +#. module: maintenance_plan_activity +#. odoo-python +#: code:addons/maintenance_plan_activity/models/maintenance.py:0 +#, python-format +msgid "Activity automatically generated from maintenance plan" +msgstr "Aktivnost automatski generisana iz plana održavanja" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__display_name +msgid "Display Name" +msgstr "Prikazani naziv" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__id +msgid "ID" +msgstr "ID" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity____last_update +msgid "Last Modified on" +msgstr "Zadnje mijenjano" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__write_uid +msgid "Last Updated by" +msgstr "Zadnji ažurirao" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__write_date +msgid "Last Updated on" +msgstr "Zadnje ažurirano" + +#. module: maintenance_plan_activity +#: model:ir.model,name:maintenance_plan_activity.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Oprema za održavanje" + +#. module: maintenance_plan_activity +#: model:ir.model,name:maintenance_plan_activity.model_maintenance_plan +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__maintenance_plan_id +msgid "Maintenance Plan" +msgstr "Plan održavanja" + +#. module: maintenance_plan_activity +#: model:ir.model,name:maintenance_plan_activity.model_maintenance_planned_activity +msgid "Maintenance Planned Activity" +msgstr "Planirana aktivnost održavanja" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_plan__planned_activity_ids +msgid "Planned Activities" +msgstr "Planirane aktivnosti" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__user_id +msgid "Responsible" +msgstr "Odgovoran" + +#. module: maintenance_plan_activity +#: model_terms:ir.ui.view,arch_db:maintenance_plan_activity.maintenance_plan_view_form +msgid "Scheduled Activities" +msgstr "Planirane aktivnosti" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,help:maintenance_plan_activity.field_maintenance_planned_activity__date_before_request +msgid "" +"This is the number of days the due date of the activity will beset before " +"the Maintenance request scheduled date" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/i18n/es.po new file mode 100644 index 0000000..b125972 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/i18n/es.po @@ -0,0 +1,111 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_plan_activity +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-07-14 15:48+0000\n" +"Last-Translator: Enric Tobella \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__date_before_request +msgid "# Days before request" +msgstr "# Días antes de la petición" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__activity_type_id +msgid "Activity Type" +msgstr "Tipo de actividad" + +#. module: maintenance_plan_activity +#: code:addons/maintenance_plan_activity/models/maintenance.py:0 +#, python-format +msgid "Activity automatically generated from maintenance plan" +msgstr "Actividad generada automáticamente desde un plan de mantenimiento" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__display_name +msgid "Display Name" +msgstr "Nombre a mostrar" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__id +msgid "ID" +msgstr "ID" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity____last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__write_uid +msgid "Last Updated by" +msgstr "Última modificación por" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: maintenance_plan_activity +#: model:ir.model,name:maintenance_plan_activity.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Equipamiento" + +#. module: maintenance_plan_activity +#: model:ir.model,name:maintenance_plan_activity.model_maintenance_plan +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__maintenance_plan_id +msgid "Maintenance Plan" +msgstr "Plan de mantenimiento" + +#. module: maintenance_plan_activity +#: model:ir.model,name:maintenance_plan_activity.model_maintenance_planned_activity +msgid "Maintenance Planned Activity" +msgstr "Actividad planificada de mantenimiento" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_plan__planned_activity_ids +msgid "Planned Activities" +msgstr "Actividades planificadas" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__user_id +msgid "Responsible" +msgstr "Responsable" + +#. module: maintenance_plan_activity +#: model_terms:ir.ui.view,arch_db:maintenance_plan_activity.maintenance_plan_view_form +msgid "Scheduled Activities" +msgstr "Actividades programadas" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,help:maintenance_plan_activity.field_maintenance_planned_activity__date_before_request +msgid "" +"This is the number of days the due date of the activity will beset before " +"the Maintenance request scheduled date" +msgstr "" +"Este es el número de días para definir la fecha prevista de la actividades " +"desde la fecha programada de la solicitud" + +#~ msgid "Maintenance Planned Activities" +#~ msgstr "Actividades planificadas de mantenimiento" diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/i18n/it.po new file mode 100644 index 0000000..1c4c1ae --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/i18n/it.po @@ -0,0 +1,111 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_plan_activity +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-12-31 16:06+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__date_before_request +msgid "# Days before request" +msgstr "N° giorni prima della richiesta" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__activity_type_id +msgid "Activity Type" +msgstr "Tipo attività" + +#. module: maintenance_plan_activity +#: code:addons/maintenance_plan_activity/models/maintenance.py:0 +#, python-format +msgid "Activity automatically generated from maintenance plan" +msgstr "Attività generata automaticamente da piano di manutenzione" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__id +msgid "ID" +msgstr "ID" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: maintenance_plan_activity +#: model:ir.model,name:maintenance_plan_activity.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Attrezzatura manutenzione" + +#. module: maintenance_plan_activity +#: model:ir.model,name:maintenance_plan_activity.model_maintenance_plan +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__maintenance_plan_id +msgid "Maintenance Plan" +msgstr "Piano manutenzione" + +#. module: maintenance_plan_activity +#: model:ir.model,name:maintenance_plan_activity.model_maintenance_planned_activity +msgid "Maintenance Planned Activity" +msgstr "Attività di manutenzione pianificata" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_plan__planned_activity_ids +msgid "Planned Activities" +msgstr "Attività pianificate" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__user_id +msgid "Responsible" +msgstr "Responsabile" + +#. module: maintenance_plan_activity +#: model_terms:ir.ui.view,arch_db:maintenance_plan_activity.maintenance_plan_view_form +msgid "Scheduled Activities" +msgstr "Attività schedulate" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,help:maintenance_plan_activity.field_maintenance_planned_activity__date_before_request +msgid "" +"This is the number of days the due date of the activity will beset before " +"the Maintenance request scheduled date" +msgstr "" +"Questo è il numero di giorni in cui la data di scadenza dell'attività verrà " +"fissata prima della data pianificata della richiesta di manutenzione" + +#~ msgid "Maintenance Planned Activities" +#~ msgstr "Attività piano di manutenzione" diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/i18n/maintenance_plan_activity.pot b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/i18n/maintenance_plan_activity.pot new file mode 100644 index 0000000..a1f8405 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/i18n/maintenance_plan_activity.pot @@ -0,0 +1,104 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_plan_activity +# +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_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__date_before_request +msgid "# Days before request" +msgstr "" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__activity_type_id +msgid "Activity Type" +msgstr "" + +#. module: maintenance_plan_activity +#. odoo-python +#: code:addons/maintenance_plan_activity/models/maintenance.py:0 +#, python-format +msgid "Activity automatically generated from maintenance plan" +msgstr "" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__create_uid +msgid "Created by" +msgstr "" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__create_date +msgid "Created on" +msgstr "" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__display_name +msgid "Display Name" +msgstr "" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__id +msgid "ID" +msgstr "" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity____last_update +msgid "Last Modified on" +msgstr "" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__write_date +msgid "Last Updated on" +msgstr "" + +#. module: maintenance_plan_activity +#: model:ir.model,name:maintenance_plan_activity.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "" + +#. module: maintenance_plan_activity +#: model:ir.model,name:maintenance_plan_activity.model_maintenance_plan +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__maintenance_plan_id +msgid "Maintenance Plan" +msgstr "" + +#. module: maintenance_plan_activity +#: model:ir.model,name:maintenance_plan_activity.model_maintenance_planned_activity +msgid "Maintenance Planned Activity" +msgstr "" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_plan__planned_activity_ids +msgid "Planned Activities" +msgstr "" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,field_description:maintenance_plan_activity.field_maintenance_planned_activity__user_id +msgid "Responsible" +msgstr "" + +#. module: maintenance_plan_activity +#: model_terms:ir.ui.view,arch_db:maintenance_plan_activity.maintenance_plan_view_form +msgid "Scheduled Activities" +msgstr "" + +#. module: maintenance_plan_activity +#: model:ir.model.fields,help:maintenance_plan_activity.field_maintenance_planned_activity__date_before_request +msgid "" +"This is the number of days the due date of the activity will beset before " +"the Maintenance request scheduled date" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/models/__init__.py new file mode 100644 index 0000000..e715e62 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/models/__init__.py @@ -0,0 +1,2 @@ +from . import maintenance +from . import maintenance_planned_activity diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/models/maintenance.py b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/models/maintenance.py new file mode 100644 index 0000000..3c6ad3b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/models/maintenance.py @@ -0,0 +1,44 @@ +# Copyright 2019-20 ForgeFlow S.L. (https://www.forgeflow.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from datetime import timedelta + +from odoo import _, fields, models + + +class MaintenancePlan(models.Model): + _inherit = "maintenance.plan" + + planned_activity_ids = fields.One2many( + "maintenance.planned.activity", "maintenance_plan_id", "Planned Activities" + ) + + +class MaintenanceEquipment(models.Model): + _inherit = "maintenance.equipment" + + def _create_new_request(self, maintenance_plan): + new_requests = super()._create_new_request(maintenance_plan) + for request in new_requests: + for planned_activity in maintenance_plan.planned_activity_ids: + # In case mail_activity_team is installed this makes sure + # the correct activity team is selected. If that module is + # not installed the context does nothing + self.env["mail.activity"].with_context( + default_res_model="maintenance.request" + ).create( + { + "activity_type_id": planned_activity.activity_type_id.id, + "note": _( + "Activity automatically generated from maintenance plan" + ), + "user_id": planned_activity.user_id.id or self.env.user.id, + "res_id": request.id, + "res_model_id": self.env.ref( + "maintenance.model_maintenance_request" + ).id, + "date_deadline": request.schedule_date + - timedelta(days=planned_activity.date_before_request), + } + ) + return new_requests diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/models/maintenance_planned_activity.py b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/models/maintenance_planned_activity.py new file mode 100644 index 0000000..1b75523 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/models/maintenance_planned_activity.py @@ -0,0 +1,22 @@ +# 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 fields, models + + +class MiantenancePlannedactivity(models.Model): + _name = "maintenance.planned.activity" + _description = "Maintenance Planned Activity" + + activity_type_id = fields.Many2one( + "mail.activity.type", "Activity Type", required=True + ) + user_id = fields.Many2one( + "res.users", "Responsible", default=lambda self: self.env.user + ) + date_before_request = fields.Integer( + "# Days before request", + help="This is the number of days the due date of the activity will be" + "set before the Maintenance request scheduled date", + ) + maintenance_plan_id = fields.Many2one("maintenance.plan", "Maintenance Plan") diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..06b212d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Adria Gil Sorribes diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/readme/DESCRIPTION.rst new file mode 100644 index 0000000..f647b2c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/readme/DESCRIPTION.rst @@ -0,0 +1,5 @@ +This module allows defining in the maintenance plan activities that will be created once the maintenance +requests are created as a consequence of the plan itself. + +.. image:: /maintenance_plan_activity/static/description/maintenance_plan_activity.png + :alt: Maintenance Planned Activities diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/security/ir.model.access.csv b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/security/ir.model.access.csv new file mode 100644 index 0000000..56fe8f5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_maintenance_planned_activity_user,access_maintenance_planned_activity_user,model_maintenance_planned_activity,base.group_user,1,0,0,0 +access_maintenance_planned_activity_manager,access_maintenance_planned_activity_manager,model_maintenance_planned_activity,maintenance.group_equipment_manager,1,1,1,1 diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/static/description/index.html new file mode 100644 index 0000000..93b1f24 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/static/description/index.html @@ -0,0 +1,423 @@ + + + + + + +Maintenance Plan Activity + + + +
+

Maintenance Plan Activity

+ + +

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

+

This module allows defining in the maintenance plan activities that will be created once the maintenance +requests are created as a consequence of the plan itself.

+Maintenance Planned Activities +

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • ForgeFlow
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/static/description/maintenance_plan_activity.png b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/static/description/maintenance_plan_activity.png new file mode 100644 index 0000000000000000000000000000000000000000..f0bca4ad9bd41a95bad1ce886153c702fb45dfbd GIT binary patch literal 39262 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 CV;uzm literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/tests/__init__.py new file mode 100644 index 0000000..950ba7f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/tests/__init__.py @@ -0,0 +1 @@ +from . import test_maintenance_plan_activity diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/tests/test_maintenance_plan_activity.py b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/tests/test_maintenance_plan_activity.py new file mode 100644 index 0000000..bf2c533 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/tests/test_maintenance_plan_activity.py @@ -0,0 +1,61 @@ +# Copyright 2019-20 ForgeFlow S.L. (https://www.forgeflow.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from datetime import timedelta + +import odoo.tests.common as test_common +from odoo import fields + + +class TestMaintenancePlanActivity(test_common.TransactionCase): + def setUp(self): + super(TestMaintenancePlanActivity, self).setUp() + self.maintenance_request_obj = self.env["maintenance.request"] + self.maintenance_plan_obj = self.env["maintenance.plan"] + self.maintenance_equipment_obj = self.env["maintenance.equipment"] + self.maintenance_planned_activity_obj = self.env["maintenance.planned.activity"] + self.mail_activity_obj = self.env["mail.activity"] + self.cron = self.env.ref("maintenance.maintenance_requests_cron") + + self.equipment_1 = self.maintenance_equipment_obj.create({"name": "Laptop 1"}) + self.call = self.env["mail.activity.type"].search( + [("name", "=", "Call")], limit=1 + ) + self.maintenance_plan_1 = self.maintenance_plan_obj.create( + { + "equipment_id": self.equipment_1.id, + "interval": 1, + "interval_step": "month", + "maintenance_plan_horizon": 2, + "planning_step": "month", + } + ) + self.planned_activity = self.maintenance_planned_activity_obj.create( + { + "maintenance_plan_id": self.maintenance_plan_1.id, + "activity_type_id": self.call.id, + "date_before_request": 2, + } + ) + + def test_01_cron_auto_create_activities(self): + """Execute cron and check the request and the activities that have + been created + """ + self.cron.method_direct_trigger() + + generated_requests = self.maintenance_request_obj.search( + [("maintenance_plan_id", "=", self.maintenance_plan_1.id)] + ) + self.assertEqual(len(generated_requests), 3) + request_1 = generated_requests[0] + # Check if activity Call has been created for the request 1 + generated_activities = self.mail_activity_obj.search( + [("res_id", "=", request_1.id)] + ) + self.assertEqual(len(generated_activities), 2) + self.assertEqual(generated_activities[0].activity_type_id.name, self.call.name) + self.assertEqual( + generated_activities[0].date_deadline, + fields.Date.to_date(request_1.schedule_date) - timedelta(days=2), + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/views/maintenance_views.xml b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/views/maintenance_views.xml new file mode 100644 index 0000000..45f3433 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/maintenance_plan_activity/views/maintenance_views.xml @@ -0,0 +1,28 @@ + + + + + maintenance.plan.form + maintenance.plan + + + + + + + + + + + + maintenance.planned.activity.tree + maintenance.planned.activity + + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_plan_activity/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_plan_activity/pyproject.toml new file mode 100644 index 0000000..b41fe77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_plan_activity/pyproject.toml @@ -0,0 +1,45 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_plan_activity" +version = "16.0.0" +description = "Maintenance Plan Activity - + This module allows defining in the maintenance plan activities that + will be created once the maintenance requests are created as a + consequence of the plan itself." +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-maintenance_plan>=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_activity"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_product/README.md b/odoo-bringout-oca-maintenance-maintenance_product/README.md new file mode 100644 index 0000000..291e7be --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/README.md @@ -0,0 +1,45 @@ +# Maintenance Product + +Odoo addon: maintenance_product + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_product +``` + +## Dependencies + +This addon depends on: +- maintenance +- product + +## Manifest Information + +- **Name**: Maintenance Product +- **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_product`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_product/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_product/doc/ARCHITECTURE.md new file mode 100644 index 0000000..6e8cd7d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/doc/ARCHITECTURE.md @@ -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_product Module - maintenance_product + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_product/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_product/doc/CONFIGURATION.md new file mode 100644 index 0000000..9c658cc --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_product. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_product/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_product/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_product/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_product/doc/DEPENDENCIES.md new file mode 100644 index 0000000..55f774e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/doc/DEPENDENCIES.md @@ -0,0 +1,6 @@ +# Dependencies + +This addon depends on: + +- [maintenance](https://github.com/bringout/oca-ocb-vertical-industry/tree/a60a29f57ff34f3c01d0521d0a6003956d80acd9/odoo-bringout-oca-ocb-maintenance) +- [product](https://github.com/bringout/oca-ocb-sale/tree/681dc8d5fff638cb0862a34e48091a2098d091f8/odoo-bringout-oca-ocb-product) diff --git a/odoo-bringout-oca-maintenance-maintenance_product/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_product/doc/FAQ.md new file mode 100644 index 0000000..a24129d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/doc/FAQ.md @@ -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_product or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_product/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_product/doc/INSTALL.md new file mode 100644 index 0000000..3e18a69 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_product" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_product" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_product/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_product/doc/MODELS.md new file mode 100644 index 0000000..2d464b4 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/doc/MODELS.md @@ -0,0 +1,16 @@ +# Models + +Detected core models and extensions in maintenance_product. + +```mermaid +classDiagram + class maintenance_equipment + class maintenance_equipment_category + class product_category + class product_product + class product_template +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_product/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_product/doc/OVERVIEW.md new file mode 100644 index 0000000..7d730cc --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_product. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_product +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_product/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_product/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_product/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_product/doc/SECURITY.md new file mode 100644 index 0000000..e07da9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/doc/SECURITY.md @@ -0,0 +1,8 @@ +# Security + +This module does not define custom security rules or access controls beyond Odoo defaults. + +Default Odoo security applies: +- Base user access through standard groups +- Model access inherited from dependencies +- No custom row-level security rules diff --git a/odoo-bringout-oca-maintenance-maintenance_product/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_product/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_product/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_product/doc/USAGE.md new file mode 100644 index 0000000..d5d060e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/doc/USAGE.md @@ -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_product +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_product/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_product/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/README.rst b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/README.rst new file mode 100644 index 0000000..7bb3acd --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/README.rst @@ -0,0 +1,105 @@ +=================== +Maintenance Product +=================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:c968eeb1ea028e306cece6e04b7423c3b6b8aba357f290269a51e83ecf8aa1fa + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_product + :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_product + :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 links *Maintenance Equipments* and *Products*, easing creation of new equipments. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +Equipment Categories: + +* Go to *Maintenance > Configuration > Equipment Categories* and create a new one (or modify an existing one) filling in the new field *Product Category*. +* The name of the *Equipment Category* is set to the name of the *Product Category*. + +Equipment: + +* Go to *Maintenance > Equipments* and create a new one filling in the new field *Product*. +* The name of the *Equipment* is set to the name of the *Product*. +* The vendor of the *Equipment* is set to the seller of the *Product* (if only one is set). +* The vendor reference of the *Equipment* is set to the seller reference of the *Product* (if only one is set). +* The cost of the *Equipment* is set to the standard cost of the *Product*. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* César Fernández Domínguez + +* `Tecnativa `_: + + * Víctor Martínez + * Pedro M. Baeza + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-victoralmau| image:: https://github.com/victoralmau.png?size=40px + :target: https://github.com/victoralmau + :alt: victoralmau + +Current `maintainer `__: + +|maintainer-victoralmau| + +This module is part of the `OCA/maintenance `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/__init__.py b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/__manifest__.py new file mode 100644 index 0000000..475e77f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/__manifest__.py @@ -0,0 +1,17 @@ +# Copyright 2022 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Maintenance Product", + "version": "16.0.1.0.0", + "category": "Maintenance", + "website": "https://github.com/OCA/maintenance", + "author": "Tecnativa, Odoo Community Association (OCA)", + "license": "AGPL-3", + "depends": ["maintenance", "product"], + "installable": True, + "data": [ + "views/maintenance_equipment_view.xml", + "views/product_template_view.xml", + ], + "maintainers": ["victoralmau"], +} diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/i18n/bs.po new file mode 100644 index 0000000..9f68c13 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/i18n/bs.po @@ -0,0 +1,58 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_product +# +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_product +#: model:ir.model.fields,field_description:maintenance_product.field_product_product__maintenance_ok +#: model:ir.model.fields,field_description:maintenance_product.field_product_template__maintenance_ok +msgid "Can be Maintenance" +msgstr "Može biti održavanje" + +#. module: maintenance_product +#: model:ir.model.fields,field_description:maintenance_product.field_product_category__equipment_category_ids +msgid "Equipment Categories" +msgstr "Kategorije opreme" + +#. module: maintenance_product +#: model:ir.model.fields,field_description:maintenance_product.field_product_product__equipment_ids +msgid "Equipments" +msgstr "Oprema" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Oprema za održavanje" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_maintenance_equipment_category +msgid "Maintenance Equipment Category" +msgstr "Kategorija opreme za održavanje" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_product_template +#: model:ir.model.fields,field_description:maintenance_product.field_maintenance_equipment__product_id +msgid "Product" +msgstr "Artikal" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_product_category +#: model:ir.model.fields,field_description:maintenance_product.field_maintenance_equipment__product_category_id +#: model:ir.model.fields,field_description:maintenance_product.field_maintenance_equipment_category__product_category_id +msgid "Product Category" +msgstr "Kategorija proizvoda" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_product_product +msgid "Product Variant" +msgstr "Varijanta proizvoda" diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/i18n/es.po new file mode 100644 index 0000000..f145f2b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/i18n/es.po @@ -0,0 +1,74 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_product +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-03-23 13:57+0000\n" +"PO-Revision-Date: 2023-07-22 23:09+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: \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_product +#: model:ir.model.fields,field_description:maintenance_product.field_product_product__maintenance_ok +#: model:ir.model.fields,field_description:maintenance_product.field_product_template__maintenance_ok +msgid "Can be Maintenance" +msgstr "Puede ser un mantenimiento" + +#. module: maintenance_product +#: model:ir.model.fields,field_description:maintenance_product.field_product_category__equipment_category_ids +msgid "Equipment Categories" +msgstr "Categorías de equipamiento" + +#. module: maintenance_product +#: model:ir.model.fields,field_description:maintenance_product.field_product_product__equipment_ids +msgid "Equipments" +msgstr "Equipos" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Equipo de mantenimiento" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_maintenance_equipment_category +msgid "Maintenance Equipment Category" +msgstr "Categoría Equipo de mantenimiento" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_product_template +#: model:ir.model.fields,field_description:maintenance_product.field_maintenance_equipment__product_id +msgid "Product" +msgstr "Producto" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_product_category +#: model:ir.model.fields,field_description:maintenance_product.field_maintenance_equipment__product_category_id +#: model:ir.model.fields,field_description:maintenance_product.field_maintenance_equipment_category__product_category_id +msgid "Product Category" +msgstr "Categoría de producto" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_product_product +msgid "Product Variant" +msgstr "Variante de Producto" + +#~ msgid "Display Name" +#~ msgstr "Nombre mostrado" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación el" + +#~ msgid "Product Template" +#~ msgstr "Plantilla de producto" diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/i18n/it.po new file mode 100644 index 0000000..ac3b63f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/i18n/it.po @@ -0,0 +1,73 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_product +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-07-08 11:09+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_product +#: model:ir.model.fields,field_description:maintenance_product.field_product_product__maintenance_ok +#: model:ir.model.fields,field_description:maintenance_product.field_product_template__maintenance_ok +msgid "Can be Maintenance" +msgstr "Manutenibile" + +#. module: maintenance_product +#: model:ir.model.fields,field_description:maintenance_product.field_product_category__equipment_category_ids +msgid "Equipment Categories" +msgstr "Categorie attrezzatura" + +#. module: maintenance_product +#: model:ir.model.fields,field_description:maintenance_product.field_product_product__equipment_ids +msgid "Equipments" +msgstr "Attrezzature" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Attrezzatura manutenzione" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_maintenance_equipment_category +msgid "Maintenance Equipment Category" +msgstr "Categoria attrezzatura manutenzione" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_product_template +#: model:ir.model.fields,field_description:maintenance_product.field_maintenance_equipment__product_id +msgid "Product" +msgstr "Prodotto" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_product_category +#: model:ir.model.fields,field_description:maintenance_product.field_maintenance_equipment__product_category_id +#: model:ir.model.fields,field_description:maintenance_product.field_maintenance_equipment_category__product_category_id +msgid "Product Category" +msgstr "Categoria prodotto" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_product_product +msgid "Product Variant" +msgstr "Variante prodotto" + +#~ msgid "Display Name" +#~ msgstr "Nome visualizzato" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima modifica il" + +#~ msgid "Product Template" +#~ msgstr "Modello prodotto" diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/i18n/maintenance_product.pot b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/i18n/maintenance_product.pot new file mode 100644 index 0000000..58dd76a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/i18n/maintenance_product.pot @@ -0,0 +1,58 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_product +# +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_product +#: model:ir.model.fields,field_description:maintenance_product.field_product_product__maintenance_ok +#: model:ir.model.fields,field_description:maintenance_product.field_product_template__maintenance_ok +msgid "Can be Maintenance" +msgstr "" + +#. module: maintenance_product +#: model:ir.model.fields,field_description:maintenance_product.field_product_category__equipment_category_ids +msgid "Equipment Categories" +msgstr "" + +#. module: maintenance_product +#: model:ir.model.fields,field_description:maintenance_product.field_product_product__equipment_ids +msgid "Equipments" +msgstr "" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_maintenance_equipment_category +msgid "Maintenance Equipment Category" +msgstr "" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_product_template +#: model:ir.model.fields,field_description:maintenance_product.field_maintenance_equipment__product_id +msgid "Product" +msgstr "" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_product_category +#: model:ir.model.fields,field_description:maintenance_product.field_maintenance_equipment__product_category_id +#: model:ir.model.fields,field_description:maintenance_product.field_maintenance_equipment_category__product_category_id +msgid "Product Category" +msgstr "" + +#. module: maintenance_product +#: model:ir.model,name:maintenance_product.model_product_product +msgid "Product Variant" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/__init__.py new file mode 100644 index 0000000..e5f36ac --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/__init__.py @@ -0,0 +1,4 @@ +from . import maintenance_equipment +from . import product_category +from . import product_product +from . import product_template diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/maintenance_equipment.py b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/maintenance_equipment.py new file mode 100644 index 0000000..c8b2375 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/maintenance_equipment.py @@ -0,0 +1,43 @@ +# Copyright 2022 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from odoo import api, fields, models + + +class MaintenanceEquipment(models.Model): + _inherit = "maintenance.equipment" + + product_id = fields.Many2one( + comodel_name="product.product", + string="Product", + tracking=True, + domain="[('categ_id','=',product_category_id),('maintenance_ok','=',True)]", + ) + product_category_id = fields.Many2one( + comodel_name="product.category", related="category_id.product_category_id" + ) + + @api.onchange("product_id") + def _onchange_product_id(self): + """If product is set, equipment name, seller, seller ref and cost defaults + to product ones. + """ + if self.product_id: + self.name = self.product_id.name + self.cost = self.product_id.standard_price + if self.product_id.seller_ids: + first_seller = fields.first(self.product_id.seller_ids) + self.partner_id = first_seller.partner_id + self.partner_ref = first_seller.product_code + + +class MaintenanceEquipmentCategory(models.Model): + _inherit = "maintenance.equipment.category" + + product_category_id = fields.Many2one( + comodel_name="product.category", string="Product Category", tracking=True + ) + + @api.onchange("product_category_id") + def _onchange_product_category_id(self): + if self.product_category_id: + self.name = self.product_category_id.name diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/product_category.py b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/product_category.py new file mode 100644 index 0000000..9017f52 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/product_category.py @@ -0,0 +1,13 @@ +# Copyright 2022 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from odoo import fields, models + + +class ProductCategory(models.Model): + _inherit = "product.category" + + equipment_category_ids = fields.One2many( + comodel_name="maintenance.equipment.category", + inverse_name="product_category_id", + string="Equipment Categories", + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/product_product.py b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/product_product.py new file mode 100644 index 0000000..6daa805 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/product_product.py @@ -0,0 +1,13 @@ +# Copyright 2022 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from odoo import fields, models + + +class ProductProduct(models.Model): + _inherit = "product.product" + + equipment_ids = fields.One2many( + comodel_name="maintenance.equipment", + inverse_name="product_id", + string="Equipments", + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/product_template.py b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/product_template.py new file mode 100644 index 0000000..b00daf9 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/models/product_template.py @@ -0,0 +1,9 @@ +# Copyright 2022 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from odoo import fields, models + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + maintenance_ok = fields.Boolean(string="Can be Maintenance") diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..536c589 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/readme/CONTRIBUTORS.rst @@ -0,0 +1,6 @@ +* César Fernández Domínguez + +* `Tecnativa `_: + + * Víctor Martínez + * Pedro M. Baeza diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/readme/DESCRIPTION.rst new file mode 100644 index 0000000..36f73bf --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module links *Maintenance Equipments* and *Products*, easing creation of new equipments. diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/readme/USAGE.rst b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/readme/USAGE.rst new file mode 100644 index 0000000..871d4e6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/readme/USAGE.rst @@ -0,0 +1,12 @@ +Equipment Categories: + +* Go to *Maintenance > Configuration > Equipment Categories* and create a new one (or modify an existing one) filling in the new field *Product Category*. +* The name of the *Equipment Category* is set to the name of the *Product Category*. + +Equipment: + +* Go to *Maintenance > Equipments* and create a new one filling in the new field *Product*. +* The name of the *Equipment* is set to the name of the *Product*. +* The vendor of the *Equipment* is set to the seller of the *Product* (if only one is set). +* The vendor reference of the *Equipment* is set to the seller reference of the *Product* (if only one is set). +* The cost of the *Equipment* is set to the standard cost of the *Product*. diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/static/description/index.html new file mode 100644 index 0000000..02d63cd --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/static/description/index.html @@ -0,0 +1,445 @@ + + + + + + +Maintenance Product + + + +
+

Maintenance Product

+ + +

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

+

This module links Maintenance Equipments and Products, easing creation of new equipments.

+

Table of contents

+ +
+

Usage

+

Equipment Categories:

+
    +
  • Go to Maintenance > Configuration > Equipment Categories and create a new one (or modify an existing one) filling in the new field Product Category.
  • +
  • The name of the Equipment Category is set to the name of the Product Category.
  • +
+

Equipment:

+
    +
  • Go to Maintenance > Equipments and create a new one filling in the new field Product.
  • +
  • The name of the Equipment is set to the name of the Product.
  • +
  • The vendor of the Equipment is set to the seller of the Product (if only one is set).
  • +
  • The vendor reference of the Equipment is set to the seller reference of the Product (if only one is set).
  • +
  • The cost of the Equipment is set to the standard cost of the Product.
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

Current maintainer:

+

victoralmau

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/tests/__init__.py new file mode 100644 index 0000000..a0bf7c8 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/tests/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2022 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import test_maintenance_product diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/tests/common.py b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/tests/common.py new file mode 100644 index 0000000..6a794d7 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/tests/common.py @@ -0,0 +1,23 @@ +# Copyright 2022 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests import common + + +class TestMaintenanceProductBase(common.TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.product_category = cls.env["product.category"].create( + {"name": "test-product-category"} + ) + cls.partner = cls.env["res.partner"].create({"name": "Mr Odoo"}) + cls.product = cls.env["product.product"].create( + { + "name": "test-product", + "categ_id": cls.product_category.id, + "standard_price": 10, + "maintenance_ok": True, + "seller_ids": [(0, 0, {"partner_id": cls.partner.id})], + } + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/tests/test_maintenance_product.py b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/tests/test_maintenance_product.py new file mode 100644 index 0000000..d288365 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/tests/test_maintenance_product.py @@ -0,0 +1,30 @@ +# Copyright 2022 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests import Form + +from .common import TestMaintenanceProductBase + + +class TestMaintenanceProduct(TestMaintenanceProductBase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.category = cls.env["maintenance.equipment.category"].create( + {"name": "test-maintenance-equipment-category"} + ) + cls.equipment = cls.env["maintenance.equipment"].create( + {"name": "test-maintenance-equipment"} + ) + + def test_maintenance_equipment_category(self): + category_form = Form(self.category) + category_form.product_category_id = self.product_category + self.assertEqual(category_form.name, "test-product-category") + + def test_maintenance_equipment(self): + equipment_form = Form(self.equipment) + equipment_form.product_id = self.product + self.assertEqual(equipment_form.name, "test-product") + self.assertEqual(equipment_form.cost, 10) + self.assertEqual(equipment_form.partner_id, self.partner) diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/views/maintenance_equipment_view.xml b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/views/maintenance_equipment_view.xml new file mode 100644 index 0000000..f8c5bec --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/views/maintenance_equipment_view.xml @@ -0,0 +1,34 @@ + + + + pm.maintenance.equipment.form.view + maintenance.equipment + + + + + + + + + + pm.maintenance.equipment.search.view + maintenance.equipment + + + + + + + + + pm.maintenance.equipment.category.form.view + maintenance.equipment.category + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/views/product_template_view.xml b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/views/product_template_view.xml new file mode 100644 index 0000000..79992a4 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/maintenance_product/views/product_template_view.xml @@ -0,0 +1,16 @@ + + + + product.template.common.form + product.template + + + +
+ +
+
+
+
+
diff --git a/odoo-bringout-oca-maintenance-maintenance_product/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_product/pyproject.toml new file mode 100644 index 0000000..fd393f0 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_product/pyproject.toml @@ -0,0 +1,43 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_product" +version = "16.0.0" +description = "Maintenance Product - Odoo addon" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-maintenance>=16.0.0", + "odoo-bringout-oca-ocb-product>=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_product"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_project/README.md b/odoo-bringout-oca-maintenance-maintenance_project/README.md new file mode 100644 index 0000000..561ceb6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/README.md @@ -0,0 +1,45 @@ +# Maintenance Projects + +Odoo addon: maintenance_project + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_project +``` + +## Dependencies + +This addon depends on: +- base_maintenance +- project + +## Manifest Information + +- **Name**: Maintenance Projects +- **Version**: 16.0.2.0.0 +- **Category**: Maintenance +- **License**: AGPL-3 +- **Installable**: True + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_project`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_project/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_project/doc/ARCHITECTURE.md new file mode 100644 index 0000000..040dabc --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/doc/ARCHITECTURE.md @@ -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_project Module - maintenance_project + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_project/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_project/doc/CONFIGURATION.md new file mode 100644 index 0000000..4ced556 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_project. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_project/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_project/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_project/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_project/doc/DEPENDENCIES.md new file mode 100644 index 0000000..fb2c3eb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/doc/DEPENDENCIES.md @@ -0,0 +1,6 @@ +# Dependencies + +This addon depends on: + +- [base_maintenance](https://github.com/bringout/oca-technical) +- [project](https://github.com/bringout/oca-ocb-project/tree/5bbf7d0517a5706a48472bdf6a077a4467d11869/odoo-bringout-oca-ocb-project) diff --git a/odoo-bringout-oca-maintenance-maintenance_project/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_project/doc/FAQ.md new file mode 100644 index 0000000..b435d29 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/doc/FAQ.md @@ -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_project or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_project/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_project/doc/INSTALL.md new file mode 100644 index 0000000..ce305b9 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_project" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_project" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_project/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_project/doc/MODELS.md new file mode 100644 index 0000000..0e001d9 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/doc/MODELS.md @@ -0,0 +1,14 @@ +# Models + +Detected core models and extensions in maintenance_project. + +```mermaid +classDiagram + class maintenance_equipment + class maintenance_request + class project_project +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_project/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_project/doc/OVERVIEW.md new file mode 100644 index 0000000..63c9c28 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_project. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_project +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_project/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_project/doc/REPORTS.md new file mode 100644 index 0000000..4ab864a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/doc/REPORTS.md @@ -0,0 +1,22 @@ +# Reports + +Report definitions and templates in maintenance_project. + +```mermaid +classDiagram +``` + +## Available Reports + +No named reports found in XML files. + + +## Report Files + +- **maintenance_request_report.xml** (XML template/definition) + +## Notes +- Named reports above are accessible through Odoo's reporting menu +- Python files define report logic and data processing +- XML files contain report templates, definitions, and formatting +- Reports are integrated with Odoo's printing and email systems diff --git a/odoo-bringout-oca-maintenance-maintenance_project/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_project/doc/SECURITY.md new file mode 100644 index 0000000..e07da9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/doc/SECURITY.md @@ -0,0 +1,8 @@ +# Security + +This module does not define custom security rules or access controls beyond Odoo defaults. + +Default Odoo security applies: +- Base user access through standard groups +- Model access inherited from dependencies +- No custom row-level security rules diff --git a/odoo-bringout-oca-maintenance-maintenance_project/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_project/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_project/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_project/doc/USAGE.md new file mode 100644 index 0000000..e402193 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/doc/USAGE.md @@ -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_project +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_project/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_project/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/README.rst b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/README.rst new file mode 100644 index 0000000..33a75e2 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/README.rst @@ -0,0 +1,81 @@ +==================== +Maintenance Projects +==================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:d68a0f7d567eafa344eb212be0520f6c37c4dccc3ec106ebad8884fa57af3fa9 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_project + :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_project + :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 adding this features: + +- Adds a project to an equipment. You can link an existing project or create a new one (with the Create project button) after creating the equipment. +- Adds project and task to a maintenance request. The default project for a request will be the equipment one, including the preventive requests periodically created. + +This is is a technical addon to allow timesheet assignment to a maintenance request. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Solvos + +Contributors +~~~~~~~~~~~~ + +* David Alonso + +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 `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/__init__.py b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/__manifest__.py new file mode 100644 index 0000000..e82a688 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2019 Solvos Consultoría Informática () +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +{ + "name": "Maintenance Projects", + "summary": "Adds projects to maintenance equipments and requests", + "version": "16.0.2.0.0", + "author": "Odoo Community Association (OCA), Solvos", + "license": "AGPL-3", + "category": "Maintenance", + "website": "https://github.com/OCA/maintenance", + "depends": ["base_maintenance", "project"], + "data": [ + "views/maintenance_equipment_views.xml", + "views/maintenance_request_views.xml", + "views/project_project_views.xml", + "report/maintenance_request_report.xml", + ], + "demo": ["data/demo_maintenance_project.xml"], + "installable": True, +} diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/data/demo_maintenance_project.xml b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/data/demo_maintenance_project.xml new file mode 100644 index 0000000..a7f83ea --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/data/demo_maintenance_project.xml @@ -0,0 +1,60 @@ + + + General equipment project + + + + + + General task + + + + + Default preventive task + + + Generic Monitor + + + + + S/N 1 + MODEL1 + + + + Generic Monitor with preventive + + + + + + S/N 2 + MODEL2 + + + + + + + Generic Computer with own project + + + + + S/N 3 + MODEL3 + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/i18n/bs.po new file mode 100644 index 0000000..7c8cce6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/i18n/bs.po @@ -0,0 +1,123 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_project +# +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_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.hr_equipment_view_form +msgid " Create project" +msgstr " Kreiraj projekat" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.view_project_kanban +msgid "Equipments" +msgstr "Oprema" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.view_project_kanban +msgid "Requests" +msgstr "Zahtjevi" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.report_maintenance_request_document +msgid "Project:" +msgstr "Projekat:" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.report_maintenance_request_document +msgid "Task:" +msgstr "Zadatak:" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_maintenance_equipment__preventive_default_task_id +msgid "Default Task" +msgstr "Podrazumijevani zadatak" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_project_project__equipment_count +msgid "Equipment Count" +msgstr "Broj opreme" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_project_project__equipment_ids +#: model_terms:ir.ui.view,arch_db:maintenance_project.edit_project +msgid "Equipments" +msgstr "Oprema" + +#. module: maintenance_project +#: model:project.project,name:maintenance_project.project_project_1 +msgid "General equipment project" +msgstr "Opšti projekat opreme" + +#. module: maintenance_project +#: model:maintenance.equipment,name:maintenance_project.equipment_3 +msgid "Generic Computer with own project" +msgstr "Generički računar sa vlastitim projektom" + +#. module: maintenance_project +#: model:maintenance.equipment,name:maintenance_project.equipment_1 +msgid "Generic Monitor" +msgstr "Generički monitor" + +#. module: maintenance_project +#: model:maintenance.equipment,name:maintenance_project.equipment_2 +msgid "Generic Monitor with preventive" +msgstr "Generički monitor sa preventivnim održavanjem" + +#. module: maintenance_project +#: model:ir.model,name:maintenance_project.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Oprema za održavanje" + +#. module: maintenance_project +#: model:ir.model,name:maintenance_project.model_maintenance_request +msgid "Maintenance Request" +msgstr "Zahtjev za održavanje" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_project_project__maintenance_request_count +msgid "Maintenance Request Count" +msgstr "Broj zahtjeva za održavanje" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_project_project__maintenance_request_ids +msgid "Maintenance Requests" +msgstr "Zahtjevi za održavanje" + +#. module: maintenance_project +#: model:ir.model,name:maintenance_project.model_project_project +#: model:ir.model.fields,field_description:maintenance_project.field_maintenance_equipment__project_id +#: model:ir.model.fields,field_description:maintenance_project.field_maintenance_request__project_id +msgid "Project" +msgstr "Projekat" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.hr_equipment_request_view_kanban +#: model_terms:ir.ui.view,arch_db:maintenance_project.hr_equipment_view_kanban +msgid "Project:" +msgstr "Projekat:" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.edit_project +msgid "Requests" +msgstr "Zahtjevi" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_maintenance_request__task_id +msgid "Task" +msgstr "Zadatak" + +#. module: maintenance_project +#: model:project.project,label_tasks:maintenance_project.project_project_1 +msgid "Tasks" +msgstr "Zadaci" diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/i18n/es.po new file mode 100644 index 0000000..23e935c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/i18n/es.po @@ -0,0 +1,139 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_project +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-09-18 17:04+0000\n" +"PO-Revision-Date: 2023-07-22 23:09+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.hr_equipment_view_form +msgid " Create project" +msgstr "" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.view_project_kanban +msgid "Equipments" +msgstr "Equipos" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.view_project_kanban +msgid "Requests" +msgstr "Peticiones" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.report_maintenance_request_document +msgid "Project:" +msgstr "Proyecto:" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.report_maintenance_request_document +msgid "Task:" +msgstr "Tarea:" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_maintenance_equipment__preventive_default_task_id +msgid "Default Task" +msgstr "Tarea por defecto" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_project_project__equipment_count +msgid "Equipment Count" +msgstr "N??mero de equipos" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_project_project__equipment_ids +#: model_terms:ir.ui.view,arch_db:maintenance_project.edit_project +msgid "Equipments" +msgstr "Equipos" + +#. module: maintenance_project +#: model:project.project,name:maintenance_project.project_project_1 +msgid "General equipment project" +msgstr "Proyecto de equipamiento general" + +#. module: maintenance_project +#: model:maintenance.equipment,name:maintenance_project.equipment_3 +msgid "Generic Computer with own project" +msgstr "Ordenador gen??rico con su propio proyecto" + +#. module: maintenance_project +#: model:maintenance.equipment,name:maintenance_project.equipment_1 +msgid "Generic Monitor" +msgstr "Monitor gen??rico" + +#. module: maintenance_project +#: model:maintenance.equipment,name:maintenance_project.equipment_2 +msgid "Generic Monitor with preventive" +msgstr "Monitor gen??rico con preventivo" + +#. module: maintenance_project +#: model:ir.model,name:maintenance_project.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Equipo" + +#. module: maintenance_project +#: model:ir.model,name:maintenance_project.model_maintenance_request +msgid "Maintenance Request" +msgstr "Petici??n de mantenimiento" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_project_project__maintenance_request_count +msgid "Maintenance Request Count" +msgstr "N??mero de peticiones de mantenimiento" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_project_project__maintenance_request_ids +msgid "Maintenance Requests" +msgstr "Peticiones de mantenimiento" + +#. module: maintenance_project +#: model:ir.model,name:maintenance_project.model_project_project +#: model:ir.model.fields,field_description:maintenance_project.field_maintenance_equipment__project_id +#: model:ir.model.fields,field_description:maintenance_project.field_maintenance_request__project_id +msgid "Project" +msgstr "Proyecto" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.hr_equipment_request_view_kanban +#: model_terms:ir.ui.view,arch_db:maintenance_project.hr_equipment_view_kanban +msgid "Project:" +msgstr "Proyecto:" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.edit_project +msgid "Requests" +msgstr "Peticiones" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_maintenance_request__task_id +msgid "Task" +msgstr "Tarea" + +#. module: maintenance_project +#: model:project.project,label_tasks:maintenance_project.project_project_1 +msgid "Tasks" +msgstr "Tareas" + +#~ msgid "Create Project From Equipment" +#~ msgstr "Crear proyecto a partir del equipo" + +#~ msgid "Display Name" +#~ msgstr "Nombre a mostrar" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación en" diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/i18n/it.po new file mode 100644 index 0000000..ced742d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/i18n/it.po @@ -0,0 +1,138 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_project +# +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 \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_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.hr_equipment_view_form +msgid " Create project" +msgstr " Crea progetto" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.view_project_kanban +msgid "Equipments" +msgstr "Attrezzature" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.view_project_kanban +msgid "Requests" +msgstr "Richieste" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.report_maintenance_request_document +msgid "Project:" +msgstr "Progetto:" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.report_maintenance_request_document +msgid "Task:" +msgstr "Lavoro:" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_maintenance_equipment__preventive_default_task_id +msgid "Default Task" +msgstr "Lavoro predefinito" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_project_project__equipment_count +msgid "Equipment Count" +msgstr "Conteggio attrezzature" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_project_project__equipment_ids +#: model_terms:ir.ui.view,arch_db:maintenance_project.edit_project +msgid "Equipments" +msgstr "Attrezzature" + +#. module: maintenance_project +#: model:project.project,name:maintenance_project.project_project_1 +msgid "General equipment project" +msgstr "Progetto attrezzatura generica" + +#. module: maintenance_project +#: model:maintenance.equipment,name:maintenance_project.equipment_3 +msgid "Generic Computer with own project" +msgstr "Computer generico con progetto proprio" + +#. module: maintenance_project +#: model:maintenance.equipment,name:maintenance_project.equipment_1 +msgid "Generic Monitor" +msgstr "Monitor generico" + +#. module: maintenance_project +#: model:maintenance.equipment,name:maintenance_project.equipment_2 +msgid "Generic Monitor with preventive" +msgstr "Monitor generico con preventiva" + +#. module: maintenance_project +#: model:ir.model,name:maintenance_project.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Attrezzatura manutenzione" + +#. module: maintenance_project +#: model:ir.model,name:maintenance_project.model_maintenance_request +msgid "Maintenance Request" +msgstr "Richiesta manutenzione" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_project_project__maintenance_request_count +msgid "Maintenance Request Count" +msgstr "Conta richiesta manutenzione" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_project_project__maintenance_request_ids +msgid "Maintenance Requests" +msgstr "Richieste di manutenzione" + +#. module: maintenance_project +#: model:ir.model,name:maintenance_project.model_project_project +#: model:ir.model.fields,field_description:maintenance_project.field_maintenance_equipment__project_id +#: model:ir.model.fields,field_description:maintenance_project.field_maintenance_request__project_id +msgid "Project" +msgstr "Progetto" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.hr_equipment_request_view_kanban +#: model_terms:ir.ui.view,arch_db:maintenance_project.hr_equipment_view_kanban +msgid "Project:" +msgstr "Progetto:" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.edit_project +msgid "Requests" +msgstr "Richieste" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_maintenance_request__task_id +msgid "Task" +msgstr "Lavoro" + +#. module: maintenance_project +#: model:project.project,label_tasks:maintenance_project.project_project_1 +msgid "Tasks" +msgstr "Lavori" + +#~ msgid "Create Project From Equipment" +#~ msgstr "Crea un progetto dall'attrezzatura" + +#~ msgid "Display Name" +#~ msgstr "Nome visualizzato" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima modifica il" diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/i18n/maintenance_project.pot b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/i18n/maintenance_project.pot new file mode 100644 index 0000000..ad25cd4 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/i18n/maintenance_project.pot @@ -0,0 +1,123 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_project +# +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_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.hr_equipment_view_form +msgid " Create project" +msgstr "" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.view_project_kanban +msgid "Equipments" +msgstr "" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.view_project_kanban +msgid "Requests" +msgstr "" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.report_maintenance_request_document +msgid "Project:" +msgstr "" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.report_maintenance_request_document +msgid "Task:" +msgstr "" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_maintenance_equipment__preventive_default_task_id +msgid "Default Task" +msgstr "" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_project_project__equipment_count +msgid "Equipment Count" +msgstr "" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_project_project__equipment_ids +#: model_terms:ir.ui.view,arch_db:maintenance_project.edit_project +msgid "Equipments" +msgstr "" + +#. module: maintenance_project +#: model:project.project,name:maintenance_project.project_project_1 +msgid "General equipment project" +msgstr "" + +#. module: maintenance_project +#: model:maintenance.equipment,name:maintenance_project.equipment_3 +msgid "Generic Computer with own project" +msgstr "" + +#. module: maintenance_project +#: model:maintenance.equipment,name:maintenance_project.equipment_1 +msgid "Generic Monitor" +msgstr "" + +#. module: maintenance_project +#: model:maintenance.equipment,name:maintenance_project.equipment_2 +msgid "Generic Monitor with preventive" +msgstr "" + +#. module: maintenance_project +#: model:ir.model,name:maintenance_project.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "" + +#. module: maintenance_project +#: model:ir.model,name:maintenance_project.model_maintenance_request +msgid "Maintenance Request" +msgstr "" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_project_project__maintenance_request_count +msgid "Maintenance Request Count" +msgstr "" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_project_project__maintenance_request_ids +msgid "Maintenance Requests" +msgstr "" + +#. module: maintenance_project +#: model:ir.model,name:maintenance_project.model_project_project +#: model:ir.model.fields,field_description:maintenance_project.field_maintenance_equipment__project_id +#: model:ir.model.fields,field_description:maintenance_project.field_maintenance_request__project_id +msgid "Project" +msgstr "" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.hr_equipment_request_view_kanban +#: model_terms:ir.ui.view,arch_db:maintenance_project.hr_equipment_view_kanban +msgid "Project:" +msgstr "" + +#. module: maintenance_project +#: model_terms:ir.ui.view,arch_db:maintenance_project.edit_project +msgid "Requests" +msgstr "" + +#. module: maintenance_project +#: model:ir.model.fields,field_description:maintenance_project.field_maintenance_request__task_id +msgid "Task" +msgstr "" + +#. module: maintenance_project +#: model:project.project,label_tasks:maintenance_project.project_project_1 +msgid "Tasks" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/migrations/16.0.2.0.0/post-migration.py b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/migrations/16.0.2.0.0/post-migration.py new file mode 100644 index 0000000..84d0260 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/migrations/16.0.2.0.0/post-migration.py @@ -0,0 +1,11 @@ +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + env.ref("maintenance.group_equipment_manager").write( + {"implied_ids": [(3, env.ref("project.group_project_manager").id)]} + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/models/__init__.py new file mode 100644 index 0000000..5348c70 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/models/__init__.py @@ -0,0 +1,3 @@ +from . import maintenance_equipment +from . import maintenance_request +from . import project_project diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/models/maintenance_equipment.py b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/models/maintenance_equipment.py new file mode 100644 index 0000000..cde8a9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/models/maintenance_equipment.py @@ -0,0 +1,27 @@ +# Copyright 2019 Solvos Consultoría Informática () +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from odoo import fields, models + + +class MaintenanceEquipment(models.Model): + _inherit = "maintenance.equipment" + + project_id = fields.Many2one(comodel_name="project.project", ondelete="restrict") + preventive_default_task_id = fields.Many2one( + string="Default Task", comodel_name="project.task" + ) + + def action_create_project(self): + self.ensure_one() + if not self.project_id: + self.project_id = self.env["project.project"].create( + self._prepare_project_from_equipment_values() + ) + + def _prepare_project_from_equipment_values(self): + """ + Default project data creation hook + """ + return {"name": self.name} diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/models/maintenance_request.py b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/models/maintenance_request.py new file mode 100644 index 0000000..568f025 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/models/maintenance_request.py @@ -0,0 +1,33 @@ +# Copyright 2019 Solvos Consultoría Informática () +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from odoo import api, fields, models + + +class MaintenanceRequest(models.Model): + _inherit = "maintenance.request" + + project_id = fields.Many2one(comodel_name="project.project") + task_id = fields.Many2one(comodel_name="project.task") + + @api.model_create_multi + def create(self, vals_list): + """ + We ensure for appropiate project and task for new requests, + specially the automatically generated ones + """ + newreqs = super().create(vals_list) + for newreq in newreqs: + if not newreq.project_id and newreq.equipment_id: + newreq.project_id = newreq.equipment_id.project_id + if not newreq.task_id and newreq.maintenance_type == "preventive": + newreq.task_id = newreq.equipment_id.preventive_default_task_id + + return newreqs + + @api.onchange("equipment_id") + def onchange_equipment_id(self): + res = super().onchange_equipment_id() + if self.equipment_id and self.equipment_id.project_id: + self.project_id = self.equipment_id.project_id + return res diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/models/project_project.py b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/models/project_project.py new file mode 100644 index 0000000..00394de --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/models/project_project.py @@ -0,0 +1,58 @@ +# Copyright 2019 Solvos Consultoría Informática () +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from odoo import api, fields, models + + +class ProjectProject(models.Model): + _inherit = "project.project" + + equipment_count = fields.Integer(compute="_compute_equipment_count") + equipment_ids = fields.One2many( + "maintenance.equipment", "project_id", string="Equipments" + ) + maintenance_request_count = fields.Integer( + compute="_compute_maintenance_request_count" + ) + maintenance_request_ids = fields.One2many( + "maintenance.request", "project_id", string="Maintenance Requests" + ) + + @api.depends("equipment_ids") + def _compute_equipment_count(self): + for project in self: + project.equipment_count = len(project.equipment_ids) + + def action_view_equipment_ids(self): + """ + Access to the current equipments for this project + """ + self.ensure_one() + action = self.env["ir.actions.actions"]._for_xml_id( + "maintenance.hr_equipment_action" + ) + action["domain"] = [("project_id", "=", self.id)] + action["context"] = { + "default_project_id": self.id, + "default_create_project_from_equipment": False, + } + return action + + @api.depends("maintenance_request_ids") + def _compute_maintenance_request_count(self): + for project in self: + project.maintenance_request_count = len( + project.maintenance_request_ids.filtered(lambda x: not x.stage_id.done) + ) + + def action_view_maintenance_request_ids(self): + """ + Access to the undone maintenance requests for this project + """ + self.ensure_one() + action = self.env["ir.actions.actions"]._for_xml_id( + "maintenance.hr_equipment_request_action" + ) + action["domain"] = [("project_id", "=", self.id), ("stage_id.done", "=", False)] + action["context"] = {"default_project_id": self.id} + return action diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..423455d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* David Alonso diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/readme/DESCRIPTION.rst new file mode 100644 index 0000000..b151978 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/readme/DESCRIPTION.rst @@ -0,0 +1,6 @@ +This module extends the functionality of Odoo Maintenance module adding this features: + +- Adds a project to an equipment. You can link an existing project or create a new one (with the Create project button) after creating the equipment. +- Adds project and task to a maintenance request. The default project for a request will be the equipment one, including the preventive requests periodically created. + +This is is a technical addon to allow timesheet assignment to a maintenance request. diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/report/maintenance_request_report.xml b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/report/maintenance_request_report.xml new file mode 100644 index 0000000..6308512 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/report/maintenance_request_report.xml @@ -0,0 +1,20 @@ + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/static/description/index.html new file mode 100644 index 0000000..0dd0723 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/static/description/index.html @@ -0,0 +1,428 @@ + + + + + +Maintenance Projects + + + +
+

Maintenance Projects

+ + +

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

+

This module extends the functionality of Odoo Maintenance module adding this features:

+
    +
  • Adds a project to an equipment. You can link an existing project or create a new one (with the Create project button) after creating the equipment.
  • +
  • Adds project and task to a maintenance request. The default project for a request will be the equipment one, including the preventive requests periodically created.
  • +
+

This is is a technical addon to allow timesheet assignment to a maintenance request.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Solvos
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/tests/__init__.py new file mode 100644 index 0000000..8b261cd --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/tests/__init__.py @@ -0,0 +1 @@ +from . import test_maintenance_project diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/tests/test_maintenance_project.py b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/tests/test_maintenance_project.py new file mode 100644 index 0000000..90218bf --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/tests/test_maintenance_project.py @@ -0,0 +1,114 @@ +# Copyright 2019 Solvos Consultor??a Inform??tica () +# Copyright 2024 Tecnativa - Víctor Martínez +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from odoo.tests import Form, new_test_user +from odoo.tests.common import users + +from odoo.addons.base.tests.common import BaseCommon + + +class TestMaintenanceProject(BaseCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.cron = cls.env.ref("maintenance.maintenance_requests_cron") + cls.project1 = cls.env["project.project"].create({"name": "My project"}) + cls.project_demo = cls.env.ref("maintenance_project.project_project_1") + new_test_user( + cls.env, + login="test-user", + groups="maintenance.group_equipment_manager,project.group_project_user", + ) + new_test_user( + cls.env, + login="test-project_manager-user", + groups="maintenance.group_equipment_manager,project.group_project_manager", + ) + cls.equipment1 = cls.env["maintenance.equipment"].create( + { + "name": "My equipment", + "maintenance_team_id": cls.env.ref( + "maintenance.equipment_team_metrology" + ).id, + "period": 30, + "maintenance_duration": 1.0, + } + ) + cls.equipment2 = cls.env["maintenance.equipment"].create( + { + "name": "My equipment without project", + } + ) + cls.equipment3 = cls.env["maintenance.equipment"].create( + { + "name": "My equipment with related project", + "project_id": cls.project1.id, + } + ) + cls.equipment_demo = cls.env.ref("maintenance_project.equipment_3") + + def test_maintenance_equipment_project_misc(self): + self.assertFalse(self.equipment1.project_id) + self.assertFalse(self.equipment2.project_id) + self.assertEqual(self.equipment3.project_id, self.project1) + self.assertEqual(self.equipment_demo.name, self.equipment_demo.project_id.name) + + @users("test-project_manager-user") + def test_maintenance_equipment_project_admin(self): + equipment_a = self.env["maintenance.equipment"].create( + { + "name": "Test equipment A", + } + ) + self.assertFalse(equipment_a.project_id) + equipment_a.action_create_project() + self.assertTrue(equipment_a.project_id) + self.assertEqual(equipment_a.name, equipment_a.project_id.name) + equipment_b = self.env["maintenance.equipment"].create( + { + "name": "Test equipment b", + "project_id": self.project1.id, + } + ) + self.assertEqual(equipment_b.project_id, self.project1) + equipment_b.action_create_project() + self.assertEqual(equipment_b.project_id, self.project1) + + def test_project_equipment_count(self): + self.equipment1.action_create_project() + self.assertEqual(self.project1.equipment_count, 1) + self.assertEqual(self.equipment1.project_id.equipment_count, 1) + self.assertEqual(self.project_demo.equipment_count, 2) + self.assertEqual(self.equipment_demo.project_id.equipment_count, 1) + + @users("test-user") + def test_request_equipment(self): + request_form_1 = Form(self.env["maintenance.request"]) + request_form_1.name = "My test request #1" + self.assertFalse(request_form_1.project_id) + request_form_1.equipment_id = self.equipment1 + self.assertEqual(request_form_1.project_id, self.equipment1.project_id) + request_form_2 = Form(self.env["maintenance.request"]) + request_form_2.name = "My test request #2" + request_form_2.equipment_id = self.equipment2 + self.assertFalse(request_form_2.project_id) + + def test_generate_requests(self): + self.cron.method_direct_trigger() + generated_requests = self.env["maintenance.request"].search( + [("project_id", "!=", False)] + ) + for req in generated_requests: + self.assertEqual(req.project_id, req.equipment_id.project_id) + self.assertEqual(req.task_id, req.equipment_id.preventive_default_task_id) + self.assertEqual(req.project_id.maintenance_request_count, 1) + + def test_project_action_views(self): + act1 = self.project1.action_view_equipment_ids() + self.assertEqual(act1["domain"][0][2], self.project1.id) + self.assertEqual(act1["context"]["default_project_id"], self.project1.id) + self.assertFalse(act1["context"]["default_create_project_from_equipment"]) + act2 = self.project1.action_view_maintenance_request_ids() + self.assertEqual(act2["domain"][0][2], self.project1.id) + self.assertEqual(act2["context"]["default_project_id"], self.project1.id) diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/views/maintenance_equipment_views.xml b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/views/maintenance_equipment_views.xml new file mode 100644 index 0000000..3707413 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/views/maintenance_equipment_views.xml @@ -0,0 +1,74 @@ + + + + maintenance.equipment + + + + + + + + + maintenance.equipment + + + + + + + + + maintenance.equipment + + + + + + +
+ Project: +
+
+
+
+ + maintenance.equipment + + + + + + + + + + + + +
diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/views/maintenance_request_views.xml b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/views/maintenance_request_views.xml new file mode 100644 index 0000000..a3f489b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/views/maintenance_request_views.xml @@ -0,0 +1,55 @@ + + + + maintenance.request + + + + + + + + + maintenance.request + + + + + + + + + maintenance.request + + + + + + +
+ Project: +
+
+
+
+ + maintenance.request + + + + + + + + + + +
diff --git a/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/views/project_project_views.xml b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/views/project_project_views.xml new file mode 100644 index 0000000..7576435 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/maintenance_project/views/project_project_views.xml @@ -0,0 +1,81 @@ + + + + project.project + + + + + + + + +
+ + + + Equipments +
+
+ +
+ + + + Requests +
+
+
+
+
+ + project.project + + + + + + + + +
diff --git a/odoo-bringout-oca-maintenance-maintenance_project/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_project/pyproject.toml new file mode 100644 index 0000000..779bb95 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_project/pyproject.toml @@ -0,0 +1,43 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_project" +version = "16.0.0" +description = "Maintenance Projects - Adds projects to maintenance equipments and requests" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-base_maintenance>=16.0.0", + "odoo-bringout-oca-ocb-project>=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_project"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/README.md b/odoo-bringout-oca-maintenance-maintenance_purchase/README.md new file mode 100644 index 0000000..5d760b7 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/README.md @@ -0,0 +1,45 @@ +# Maintenance Purchase + +Odoo addon: maintenance_purchase + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_purchase +``` + +## Dependencies + +This addon depends on: +- maintenance_account +- purchase_stock + +## Manifest Information + +- **Name**: Maintenance Purchase +- **Version**: 16.0.1.0.0 +- **Category**: N/A +- **License**: AGPL-3 +- **Installable**: False + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_purchase`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/ARCHITECTURE.md new file mode 100644 index 0000000..b960dc8 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/ARCHITECTURE.md @@ -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_purchase Module - maintenance_purchase + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/CONFIGURATION.md new file mode 100644 index 0000000..474f560 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_purchase. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/DEPENDENCIES.md new file mode 100644 index 0000000..f908a68 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/DEPENDENCIES.md @@ -0,0 +1,6 @@ +# Dependencies + +This addon depends on: + +- [maintenance_account](https://github.com/bringout/oca-technical) +- [purchase_stock](https://github.com/bringout/oca-ocb-warehouse/tree/0ee5ffef60413a71dceb350918ad3fb572ec1875/odoo-bringout-oca-ocb-purchase_stock) diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/FAQ.md new file mode 100644 index 0000000..d33209d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/FAQ.md @@ -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_purchase or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/INSTALL.md new file mode 100644 index 0000000..c8a2135 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_purchase" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_purchase" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/MODELS.md new file mode 100644 index 0000000..b26edfa --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/MODELS.md @@ -0,0 +1,14 @@ +# Models + +Detected core models and extensions in maintenance_purchase. + +```mermaid +classDiagram + class maintenance_equipment + class purchase_order + class purchase_order_line +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/OVERVIEW.md new file mode 100644 index 0000000..4b3f23f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_purchase. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_purchase +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/SECURITY.md new file mode 100644 index 0000000..e07da9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/SECURITY.md @@ -0,0 +1,8 @@ +# Security + +This module does not define custom security rules or access controls beyond Odoo defaults. + +Default Odoo security applies: +- Base user access through standard groups +- Model access inherited from dependencies +- No custom row-level security rules diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/USAGE.md new file mode 100644 index 0000000..f22ece2 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/USAGE.md @@ -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_purchase +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/README.rst b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/README.rst new file mode 100644 index 0000000..e59dc2e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/README.rst @@ -0,0 +1,77 @@ +==================== +Maintenance Purchase +==================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:9b4e0b44d941b38aadf91a2912f84cf907a7e32f5e5573d36779fd044fa0f7f9 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_purchase + :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_purchase + :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| + +Create Equipments when the purchase is validated. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* CreuBlanca + +Contributors +~~~~~~~~~~~~ + +* Enric Tobella +* Laurent Stukkens + +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 `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/__init__.py b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/__manifest__.py new file mode 100644 index 0000000..247efce --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/__manifest__.py @@ -0,0 +1,21 @@ +# Copyright 2022 CreuBlanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "Maintenance Purchase", + "summary": """ + Create Equipments with purchases""", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "CreuBlanca,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/maintenance", + "depends": [ + "maintenance_account", + "purchase_stock", + ], + "data": [ + "views/purchase_order.xml", + "views/maintenance_equipment.xml", + ], + "demo": [], +} diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/i18n/bs.po new file mode 100644 index 0000000..092521e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/i18n/bs.po @@ -0,0 +1,60 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_purchase +# +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_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order_line__equipment_category_id +msgid "Equipment Category" +msgstr "Kategorija opreme" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order__equipment_count +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order_line__equipment_count +msgid "Equipment Count" +msgstr "Broj opreme" + +#. module: maintenance_purchase +#: model_terms:ir.ui.view,arch_db:maintenance_purchase.purchase_order_form_view +msgid "Equipment(s)" +msgstr "Oprema" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order_line__equipment_ids +msgid "Equipments" +msgstr "Oprema" + +#. module: maintenance_purchase +#: model:ir.model,name:maintenance_purchase.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Oprema za održavanje" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_maintenance_equipment__purchase_id +msgid "Purchase" +msgstr "Nabavke" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_maintenance_equipment__purchase_line_id +msgid "Purchase Line" +msgstr "Zahtjev za nabavu" + +#. module: maintenance_purchase +#: model:ir.model,name:maintenance_purchase.model_purchase_order +msgid "Purchase Order" +msgstr "Nalog za nabavu" + +#. module: maintenance_purchase +#: model:ir.model,name:maintenance_purchase.model_purchase_order_line +msgid "Purchase Order Line" +msgstr "Stavka naloga za nabavu" diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/i18n/es.po new file mode 100644 index 0000000..bec0eb2 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/i18n/es.po @@ -0,0 +1,84 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_purchase +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-12-28 12:33+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_maintenance_equipment__display_name +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order__display_name +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order_line__display_name +msgid "Display Name" +msgstr "Mostrar Nombre" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order_line__equipment_category_id +msgid "Equipment Category" +msgstr "Categoría de Equipo" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order__equipment_count +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order_line__equipment_count +msgid "Equipment Count" +msgstr "Total de Equipos" + +#. module: maintenance_purchase +#: model_terms:ir.ui.view,arch_db:maintenance_purchase.purchase_order_form_view +msgid "Equipment(s)" +msgstr "Equipamiento(s)" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order_line__equipment_ids +msgid "Equipments" +msgstr "Equipamientos" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_maintenance_equipment__id +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order__id +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order_line__id +msgid "ID" +msgstr "ID (identificación)" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_maintenance_equipment____last_update +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order____last_update +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order_line____last_update +msgid "Last Modified on" +msgstr "Última Modificación el" + +#. module: maintenance_purchase +#: model:ir.model,name:maintenance_purchase.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Mantenimiento de Equipos" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_maintenance_equipment__purchase_id +msgid "Purchase" +msgstr "Compra" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_maintenance_equipment__purchase_line_id +msgid "Purchase Line" +msgstr "Línea de Compra" + +#. module: maintenance_purchase +#: model:ir.model,name:maintenance_purchase.model_purchase_order +msgid "Purchase Order" +msgstr "Orden de Compra" + +#. module: maintenance_purchase +#: model:ir.model,name:maintenance_purchase.model_purchase_order_line +msgid "Purchase Order Line" +msgstr "Línea de Orden de Compra" diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/i18n/it.po new file mode 100644 index 0000000..cd43004 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/i18n/it.po @@ -0,0 +1,84 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_purchase +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-03-05 15:35+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_maintenance_equipment__display_name +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order__display_name +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order_line__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order_line__equipment_category_id +msgid "Equipment Category" +msgstr "Categoria attrezzatura" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order__equipment_count +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order_line__equipment_count +msgid "Equipment Count" +msgstr "Conteggio attrezzature" + +#. module: maintenance_purchase +#: model_terms:ir.ui.view,arch_db:maintenance_purchase.purchase_order_form_view +msgid "Equipment(s)" +msgstr "Attrezzatura(e)" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order_line__equipment_ids +msgid "Equipments" +msgstr "Attrezzature" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_maintenance_equipment__id +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order__id +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order_line__id +msgid "ID" +msgstr "ID" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_maintenance_equipment____last_update +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order____last_update +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order_line____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: maintenance_purchase +#: model:ir.model,name:maintenance_purchase.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Attrezzatura manutenzione" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_maintenance_equipment__purchase_id +msgid "Purchase" +msgstr "Acquisto" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_maintenance_equipment__purchase_line_id +msgid "Purchase Line" +msgstr "Riga acquisto" + +#. module: maintenance_purchase +#: model:ir.model,name:maintenance_purchase.model_purchase_order +msgid "Purchase Order" +msgstr "Ordine di acquisto" + +#. module: maintenance_purchase +#: model:ir.model,name:maintenance_purchase.model_purchase_order_line +msgid "Purchase Order Line" +msgstr "Riga ordine di acquisto" diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/i18n/maintenance_purchase.pot b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/i18n/maintenance_purchase.pot new file mode 100644 index 0000000..17d7307 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/i18n/maintenance_purchase.pot @@ -0,0 +1,60 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_purchase +# +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_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order_line__equipment_category_id +msgid "Equipment Category" +msgstr "" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order__equipment_count +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order_line__equipment_count +msgid "Equipment Count" +msgstr "" + +#. module: maintenance_purchase +#: model_terms:ir.ui.view,arch_db:maintenance_purchase.purchase_order_form_view +msgid "Equipment(s)" +msgstr "" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_purchase_order_line__equipment_ids +msgid "Equipments" +msgstr "" + +#. module: maintenance_purchase +#: model:ir.model,name:maintenance_purchase.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_maintenance_equipment__purchase_id +msgid "Purchase" +msgstr "" + +#. module: maintenance_purchase +#: model:ir.model.fields,field_description:maintenance_purchase.field_maintenance_equipment__purchase_line_id +msgid "Purchase Line" +msgstr "" + +#. module: maintenance_purchase +#: model:ir.model,name:maintenance_purchase.model_purchase_order +msgid "Purchase Order" +msgstr "" + +#. module: maintenance_purchase +#: model:ir.model,name:maintenance_purchase.model_purchase_order_line +msgid "Purchase Order Line" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/models/__init__.py new file mode 100644 index 0000000..4bf07e1 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/models/__init__.py @@ -0,0 +1,2 @@ +from . import maintenance_equipment +from . import purchase_order diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/models/maintenance_equipment.py b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/models/maintenance_equipment.py new file mode 100644 index 0000000..a0bbaaa --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/models/maintenance_equipment.py @@ -0,0 +1,20 @@ +# Copyright 2022 CreuBlanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class MaintenanceEquipment(models.Model): + + _inherit = "maintenance.equipment" + + purchase_id = fields.Many2one( + comodel_name="purchase.order", + related="purchase_line_id.order_id", + string="Purchase", + readonly=True, + ) + purchase_line_id = fields.Many2one( + comodel_name="purchase.order.line", + readonly=True, + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/models/purchase_order.py b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/models/purchase_order.py new file mode 100644 index 0000000..f5e6503 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/models/purchase_order.py @@ -0,0 +1,137 @@ +# Copyright 2022 CreuBlanca +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class PurchaseOrder(models.Model): + + _inherit = "purchase.order" + + equipment_count = fields.Integer(compute="_compute_equipment_count") + + def _compute_equipment_count(self): + for item in self: + item.equipment_count = sum(item.mapped("order_line.equipment_count")) + + def unlink(self): + items = self.env["maintenance.equipment"].search( + [("purchase_id", "in", self.ids)] + ) + items.write({"purchase_line_id": False, "purchase_id": False}) + return super().unlink() + + def action_view_equipments(self): + items = self.env["maintenance.equipment"].search( + [("purchase_id", "=", self.id)] + ) + action = self.env.ref("maintenance.hr_equipment_action") + action_dict = action.sudo().read()[0] + if len(items) == 1: + res = self.env.ref("maintenance.hr_equipment_view_form", False) + action_dict["views"] = [(res and res.id or False, "form")] + action_dict["res_id"] = items.id + elif items: + action_dict["domain"] = [("purchase_id", "=", self.id)] + else: + action_dict = {"type": "ir.actions.act_window_close"} + return action_dict + + def button_approve(self, force=False): + result = super().button_approve(force=force) + equipment_model = self.env["maintenance.equipment"] + for order in self.filtered(lambda po: po.state in ("purchase", "done")): + for line in order.order_line.filtered( + lambda x: ( + not x.equipment_ids + and x.product_id + and x.product_id.product_tmpl_id.maintenance_ok + ) + ): + if not line.equipment_category_id: + line._set_equipment_category() + # Create equipments + limit = int(line.product_qty) + 1 + vals = line._prepare_equipment_vals() + equipment_ids = [] + for _i in range(1, limit): + equipment = equipment_model.create(vals) + equipment_ids.append((4, equipment.id)) + line.equipment_ids = equipment_ids + return result + + +class PurchaseOrderLine(models.Model): + _inherit = "purchase.order.line" + + equipment_category_id = fields.Many2one( + comodel_name="maintenance.equipment.category", + string="Equipment Category", + compute="_compute_equipment_category_id", + store=True, + readonly=False, + ) + equipment_ids = fields.Many2many( + comodel_name="maintenance.equipment", + string="Equipments", + copy=False, + ) + equipment_count = fields.Integer(compute="_compute_equipment_count") + + @api.depends("product_id") + def _compute_equipment_category_id(self): + for item in self: + if ( + item.product_id.maintenance_ok + and item.product_id.product_tmpl_id.categ_id.equipment_category_ids + ): + item.equipment_category_id = fields.first( + item.product_id.product_tmpl_id.categ_id.equipment_category_ids + ) + else: + item.equipment_category_id = item.equipment_category_id + + def _compute_equipment_count(self): + data = self.env["maintenance.equipment"].read_group( + [("purchase_line_id", "in", self.ids)], + ["purchase_line_id"], + ["purchase_line_id"], + ) + mapping = {x["purchase_line_id"][0]: x["purchase_line_id_count"] for x in data} + for item in self: + item.equipment_count = mapping.get(item.id, 0) + + def _prepare_equipment_category_vals(self): + categ = self.product_id.product_tmpl_id.categ_id + return {"name": categ.name, "product_category_id": categ.id} + + def _set_equipment_category(self): + if not self.equipment_category_id: + category_model = self.env["maintenance.equipment.category"].sudo() + category = fields.first( + self.product_id.product_tmpl_id.categ_id.equipment_category_ids + ) + if not category: + category = category_model.create( + self._prepare_equipment_category_vals() + ) + self.equipment_category_id = category.id + + def _prepare_equipment_vals(self): + return { + "purchase_line_id": self.id, + "name": self.product_id.name, + "product_id": self.product_id.id, + "category_id": self.equipment_category_id.id, + "assign_date": self.order_id.date_order, + "effective_date": self.order_id.date_planned, + "partner_id": self.order_id.partner_id.id, + "partner_ref": self.order_id.partner_ref, + } + + def _prepare_account_move_line(self, move=False): + result = super()._prepare_account_move_line(move=move) + result["equipment_ids"] = [ + (4, equipment.id) for equipment in self.equipment_ids + ] + return result diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..8500476 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Enric Tobella diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/readme/DESCRIPTION.rst new file mode 100644 index 0000000..074be9a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Create Equipments when the purchase is validated. diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4mJh`hQoG=rx_R+Sc;uILpV4%IBGajIv5xj zI14-?iy0VruY)k7lg8`{1_lPn64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xh zq!<_!7(87ZLn`LHt*tDHIlA-t`n>mR!&YzIGHsf8<B$$Um>gET_{naxk1`20D+ zGK1xw!NbPN2|bO89~+N%pEppq=(kLCGSX2uHprJ_E^{*IKIp)+&2id6vuztyvNuL$ zdA^-?<<(!k&+e;bY|S+1xq)99o0@Rk`trRhp89;eyjLw{_#}Fd?PYlPp~B|v=eA_19fIY=^}d z`Y&%tFz9&nD2bzqq3^N7Y3E5x%2bvfyytoH4a>tliVpGd_uqPi)yOgkI3;YpnXolV zu}g_VQNUGDSy{Q`_+thJ&q)fNm%Ljh{I-=l|6ob#z6OiuoDV+#yjCpp-J;>E$(bCp z!w(A@1ehEJBp7+vm>Cp=Iu%5?97SBcnhpjE?J=>;544!GndL*(UcJdDzeqD|zicr1 zB+Kr*e2YIu-<|%v(v6{Vhej6%TXV!XHp{%V<0*k8n&wuV=P@CM@diu2MB$aErCl1|Wb=;ABZB1k~ z_h&QV=Hey>W@hHnmI>mVimzY(p5dc*Bgd>DX4lfyQy6T{FBf#s-KW4IAt~voG%?}2 zOJGfAO3IUeZEbCtD^>imnJV_iO~0CT*NLN2#v@Eb^n2E$n76T&^VrXSeqiAj%%pL6 z(M63z4-G;E6g@93Q1QH-c5cqkoO^M3O$ND~1>fG>yv?b&U$JF}iYJpIOWNj{Uq6e? zyyrh@i3rn-v(L8ti2Ck5sU^Xn!$s-fqmD&8!UbA>zkc3 ziU$rHaF}~BqejMP^SKO@Lpf%~zhzJ8?7BL^L&eC8!E}XZr-w?DhsvZ!o>NpZPic2v zZennDcJ}v}bmWYc6NiqNx0n6;?MJl_Ph~m5wzO2CU4et6)k)K9kpf4)o6aPU zSLF3*ii(4Q#G1(}FI}BZR4GKRa9b>>Ho0?V>CUiyVM|Y{I+(E#x-H9v*zSvrgWYDY;)+L z0gK}V;lyYYskuU4kESR(7)UJnwx_#orq8lHUp~)#q$k=wg@|In{oEpvuoF`&Aya(%9u-w zvFYG~(+LKD+8*z?eUsUJd0b}i`QV<=&F8<_oqGLAPeEKYKzH7~F#Rs2V7sTu99b{D zCVfe>k=wt2;lhQskGp#XStm1G%qZ!;m|>&4zNY!$gk^WN7ha9pa%gH{(ZPx-wzK4a zs^6~dbYXf}Ah9rj<6}ikcpayr`AnZ>&w`ixLS?`q;$0^Y1a_@mf z-`D7@M|C=DD|DVsySJlicSFw06WZP9jHlfG9aUJY*r4LM;bsm;tJ8U|rVYFd$5v}R zo64{;qDS>uVa%*Z_7~UB86Q0#DtKm!oGQatmNYNz;MYqppMI*`m{quW>Edrbo|6*H zW(UT_ojaz@#?Jno$sscGrsypFbe^h=j6G3~$4&#>dorqjo!*2RH}>j&R| z8x}wFiC7!vG3kg}43o$2X~}DTIjWtwe8pKww|8!s(b|H_sxQ&`|B4&WrZt~_np7-W zU0r?g>eZ=gsmGf4tmo@LaD zn!M^+c;6^|ZJtJ_!~f?_0!|#KPM=QPew$I{?$xzx*Gfo9ow8h;b3&W($;?kbYdBb# zW>^-hb#--JdURp>i7T=hGrO~{U;P!l^~=+#UhL^k3k7CpEUM{ua`5D;Y!wq1U%X^V z%h~D|@7^7oX`CMN{w(_^J;o=J-YP;F+1bvnuB@w8t-9pnC>0+0z^f=FXxf*o^HJv) z-v6?A%><{8GSeA8YCB@|(mGk19ZSl}ltj3m?!EL>LxWM{Po4c_wxdUnW{S>VJHdGC zjG8Cr)0@tg$653>AAXqNHBW)#L)G3FZ{Mb#pR9b}WyS_sCzn7McX#$Ve(GswW=yl9))tt96$K7#7I?tqQ`>OtGSz-n^)=DOg?8EC*s3-h3Rg`!tL9| z4<-m~-MZCarVnf4cDW0RFP(%O{2XSVZJRVn$ZglZe{~gm~^x#st$phB>A=9iiSO6EXp3PI@wy_#!?q(vZ^qd)0Vjb@mkW3A_D-BQam%S|K`u`d zv%2GsH#LiBqm@+k$s*3kLWXafa;HYui`TE6 z{r&sj*@&ECVo-Br%82bhnq*P?%S1~{D%|2UTHTTSZ0j|~y zH*a=U*sNQ*J7Zx$+RG(nj9C&A5(h3^5Xj2Py7Ayl#b@J-TnfhvHMF#n_zVI?9)7J7 zZ_-w*eGP) z3RLx9tMoLWtTt-KH6exRO>%N_$4;E!Shad}@ST%CUF=jC-a5_kQ;$xV<)QN6Yn7pq z(V<5x9M>*Q-}FCoj^=8XXTftWO@H_DrDI^A;GMkfuVk8QY|?FhZoBjvk$H8{E>N^^@;Gp0FH?sEUBrf8k(9Xqjx=CS+n>esJ&%&-cYRj;OnnSLY*t@ z*iYP@c3sJ7pH!41M}Wp;*GVcr{?@fPDekzNcUALgvg^9aG7FgvH*?NxS-dt*S9hz| zmF!z-MV!x>gLiRXa59l{4G$Oh^7j6$#9K6xNo_Lc(W6J#XiG^-HlBZ;{I8m8tyhpV z=he?Sy7y0180PL`FlAwCoU`;`gs-DjmizN3f#usSO`h&~B)x0;$vfIdBp8lvdByZ( z0jpsD@r!rw@-Dy3IsNof%{t>=tF+VWuV%I0%}by4{lNo;KXvxElgy&!u6|mgdh6<= z)pyNR*D~l9PUCk<`8Rc5rJo&D3tgEOU+h@4Na@+h$CYw+^Z6eZSR}`7`8023 z($ni(OBkPStx34$!C`FMEY~_FTTjpe)!-$MXBCJ>(~2-o(#6L z4)>2!>$R7jxNME6LEwpHiNTXECT&cSjaf8r&!R<(L{#+!I1(~4JU&-uoeynG-DN&| zsY3m9pL>TsCV2I+rZ_DV56{-z7{OCpTdSd`=O_5GC}M5cvy;q|q|Lv4|DL{PLCmk> zwSP1(Ul#ftrE-FuYY|J@sRX^5*Ntu#^=f+xwY9ek_PPbe#LU^GX>#>L;}SkY1A~SP z6RTx^Rz3AxUvGbV#eAc@eYQ%=@cZwZ8KoF< zKB!6XELy%?ed(v;v-EeyE&LX(&HL2!SG3%^J>`2eGQ*;2T?H9B-P`ZT<1nDK4Dd+|<V8ya+Ae>& zc#)%f88(!>yrf;Sw}Fi-o7Lk0&wl3fIdwd2%O!X3yV;z3dt0MGQ}+73V%*|-XKpY4 za^p@_)UAjK-Rl z9%!O5PluQzSVfB)i*i?=s7i(|vdj3b|(p1xVM%W1-b1ijsj`sWlBRr{lg zD^G3wG(9}|9e?FxO-k6KF+(V#G*kB0Ju9Zk2RWLJzpC(^=NCIw=Wbh;#%&5lgX(40^uYHXSwpdfHypTB+U$&^D~PftHA z+wJIaslI5%PD{(%83_%%rO&HP4Au)dy!-G_Monb)TMl(4k1y^)66XtLPD$Bn#04}O zw?_$D+s+9VU*K*d-Rm}G%9IV6(VZ?#O$r;9Mn=61+-`99rixg%q72{WwTVS1owt3L zkdr&Me10w4}9`wIcoZ)cW1*E6cydfF|(NKC&9zkv8W?LhpqYG1hs$06OTVE*uW*g!uYUY#@ZJr z-8?FHe2SKPe)+tev(m%^uHvy%HhEk9oin{)aQoEyEzi+<9L?fx`Yd^dU(y?NZ=|8U6r4;<>im~PTom=eeOYyZbZ`Q_YiriU$Fxw3O++Tp{8GjelXBO@il*2bLF z3S0Z&shr0yWA)sRS!-o3q~E{1^8UpPk&O{Ob9vG>MwpzJn6&)o*N=~1ym@h;z<`5c z#rpNfA93p)_$aK-;CYC(TWn+Xlb~_%Do@PJ#jpLJvO6$r{ztN z8<#nq8U-0xI0GHlpFdvqX3_4>&o=%4{?*m|J1V}4*;K5XRaI3rr=PLPL-_7Oli=$U zecw;;X5M{wo)Yh(iy60C0#c94SX2nO_sgYD_1`_+!=!6-`uR<=P8v_v?q9sPxpj4< z-p@lVJ{&9mw{PY6d-=CT@dD9>4gycTR|RffD7Sb0e1{4JjtMD>eEj^(3_LRJrPE{C zrk`$2Fz5(gyY@v!{_)0U_Koj0osMw4m17oWQSv$U=d~?ae>YyMH`RDN!$-|xu3wpy zgso4MCa=;&j(^+o<^R;#uL;u@(}`g45OUyoi z98Ay7&OW~GVvX-f&xImct-BvRTwVAk-p=ts3xE3lm(JJM33q%vY3HZZFwyvcRa8f5 z@iT+X$6uBtJ^l2wKt%N6jg83`1s@dF?fT?(Z9R8WgNqVl^T7#08Z$i>Ea$%P>AkR1 zKu8G7=9_1}G-jA|xhOI2zRMRV@ZsO@_sJ?Ehk7K93tp;DU$R8gQ>f*lUS2{1sAo}{ z`}gnP47(bMg#jGXW2-cs77Ao#X9w?U*R&O5$k=X@q!6*|X;I0ZN|Cp__q+A!&XXRCcrrm|)vvB${*gtao7f=b$h9YPmjU$fT`iJ^K0dftfrr%=6{;{duKb zGS{+ssrU4{*(WbPj#;c0VYw669(X;9$9M`Ev8CRa$FecZY4gWYOoGnySjf#%!!_ZDoCPYq$O` zj;mL%W>$tvr<`KvTE?7mI^pYg@g=Q=GVPl-8O^b+7Gtin*Seb*p(B>o?>(vIwEq4% zU%$q!pWf*+`)=RP;%5mbA03_bZAX;cSFt4;T@_Czx(o2NU%Ygwsa?KKBK!Kf)a%|} zULQWH&u@5ap%b-5!_|C&%7SOfnVFi`)<(DY+y9fWIe$27>!G)0$zNB6&ic9J#C8#l z6_OtRpErqWhdtQ){odh|lhqBEuj||TDME*hK{NZ)x4JKaw_~-%x*rB8G&r~OJ?#4W zIxswZ`ON)3|F?d4)UE&Mtoi*T-TyzapAov-!GGl9*5@i|u~!*5h4$Fmg38M^k((bB zSX?S$X87@BvVXv%qQuB#Wv#n;e?Cl$p5UR9U?O!{tvTZ?!>miO3`Z-D1V?6Sis?l( z1ncVl_|vVwq3WvEhnk|0z;#dNS{AqU-jd{DtFV#d;p0=1;CXa-Z?$3hyO@}Ld9l}Q zQctbc=(@2zUmn!3ICsu3C-##u&%PqAW((6Q;|KpY$e#ZH(rVl0bWcxCFE1|vzV_gf z=EL!IopJN|Mf1u}89#}B!uTq9zfmdc@6S|>{r~s<=Gj-sr?6UZcab^_~V24|8MVq`1bDZj-ShB2gJqA`xax$-nS_L)K=T`DL&pIDO{h& za6!>Yo-_Xs8VM|Cy|=%n_uSw64ihF>_et}xeX!}@oPOSDW1i8>3necEs;a6IOr$m@ z9p!2{oH*m`Gm-BmwcDarU;i~<-{;jK0jEie^RM(QKE9ICGbm&{o(okKdip(d=F>wN?-bw)R8-W5 zo5A%*Z$>a|zHYMMqr6_~_1Nz*O#eIOc;?GC-PwEd?bk>D_kLtsVP{Z86JrO2YaQhb9)`^h2O#+EN###s?n^D(1Bxe|(UC-Try9zm??IFHr8ec`E32 zy`90sZ026KECVQA&#-?bmAhj7adBVYjI69fy8>JN z;~Y*)NngBkr{{1xzxv&cU0bGpeA>aT^yAb28m{k)qD=lh7S+72;>l#uv@d^;fdtQt zotc6iiZ`dtnmwD5A$020jEoG2)Kt~o{dq=${l{`_UzbyQSz;XzjM1GcLYPjg>*S#s$8_ruRWFI=@s>+P;v z#wwnN7CyIQVbJ;c@YR+sMuz{-V+C9Uw`xCcGFI!1-d~{jN?gy!@cEPbUv6$;ys-Gm zN|D9Jldq=PhYCFocCHvj#--njYty&g*! z|7Q77V|R7S6$RIdFS6c#Nt&5!{7wrivbg{M&REcL_|NQV8-H80a!0?OeN0zNE2&s; zrAdd2l4R-Rn#Bu*oqF7q-;`NPzgcj2h0XcZe0MbJwJ!%Nciet^?AF$7!T#eP&so1; zuzY!YY`=?=#oddHo|7g>d{s?(_5J1Y;_rnXlUPLFHZ~iQHU^mPglHh9-?gUyrJV#2Sj%#+NMk9wGj#uk^6# zawhTr&tG3I;oSQ!dTrg@bFMuuN^gEdS}k20uzTH;xeP_cy;_w~!JDs4=#;qmZvD!Y z2j6bL+xF~Pnv883j}SxS^P4s{wq46qJPjt~@9lHH_fIB%Z>>N|NpJAiNi%o+xY)~Z zGH1KCDg*E7Yeg$fJXC~o%7jh(pL$)aW>xm5`@qN}&BW|+jcBy@FH z;?-553M~o$|NZ^(Y4!S&`~DmU??_8O{Jn_#-ZVc4r%j(Y3l5%L9k9Q$G^}v_)Ou4* zhr?4Z9Z4}dm|(EsBg-q5#fMLL$tJEjp$(ea*|mFjU{utpX$gTn?pI!~wb=Uq^Ru&u zFD4&1ab2PHP{%Fi&l5Kuleq^U%w&|XV19OQlTL0C+g^L|@40$^%@sY!^oOnVGzt!KWSS@-}L8$qPFjIod70ylQ2U%f4{7t;{ERe%IKQl$WQ^xxFs!TB>pW zm38SxZ=WQdxuYR$x{ay9{zu(uZKHkFm zS&NZF@s9QTJ)7^oEV1)A+~cOKrKNR4<$R9RUbkJzT$j6)r!!`4fiYlX>gj2(&GYX3m~r^w z3~MRA-FN#|ty(puS9{qE-G78GXK-_x^Y@0Uy7*7NHB{hZ6N zYhrttzWY5+1_Pl2hE;Wc9?QoU-Ok-^`>JT?v`f=B-OO3BZk^xl1(|C^SDE)D6%+_K zZ2EAwOEbzO=I7j%la4E~KDo}~=wKk>llj%=e0x+>RN3Db?)Ja(8Tyz!6#Uo5^)(4J zsLor%s@=fqZ~OHM|Mj)e-y3e`q%F6fI(_I~pAxoamFao>%+#>-BO*i*BY68&^k8h9zFjS67GY*MGU_{@*(_ z_36+7x8>vq3mTzxglvWi!4I``G9S7%w5_HMm& z_0cI+2UpkDRqFov`{!z|6Ju;TsL-^S+f8%V?%m&Q{(Lz6fA7wnKb;v4Yb30mo_vUd z!9YlWAyqqk-JTx@+2#NIoMTy>x8(ZSG~=wSEF-H4Dw^B({=IT3z>8t$aX)>=DG#eS z1Y~1Hb?p80ggU>xy|c6U_+@|lzg7)qJ`Ss=Cp&Q-kegLgt=w=ldVAj9XRlVT|5u%5 z#ME&5Y18q?o;OXCdCp(>{_V)Jw@Z#dn?k5&! zPUlu@WpL;+(O}*1<>~bJeXIBFt25r4XCn3RV?{tz)T-GmRi$jIj8_(1-F0Z{j> z9~RvD=>&>`?Dc!U9S^*`j=RC4>U~T2u_b~HsSlzvH#}Ik``xZb)1vc!R!={DG^{P? zuEOP$@;kM1(*(UYsz?{+*EWr%0!NEC|ND>K=TpI(@BY`A&c@fy zymjl=Rn|4noj5AR9kypIFNKgL4(&He%5F*C)k{C|MuqQ z=H%Dc)><>xbTV0%9P83_Wl(UH5@GytZ?eB#<(}0yUl#_f zc)ND{yWB7Fa^tKZG??(8_4v~j~zv#C?3 zeyFgKWS>6eVG-v7H-*%hE5813QrNIK`Kd+SpC7BY->Z79%`l7Mhaqe9UYX!o3?fEK zXCikNJv{{~$kdCUo!QwKXFmJv4AX3}IeyF68M5s9xkSaYz(PiH{@Spg&d$ytcilW$ zTu|@oXWOeV zzDn^0ZVZ((TbvYs)a;wG@mGe)t?k*@*U8@Ap8sFE;V^^K47as$eVLvhgVGoxe*O7; z{{EhdkB`oloNGLo02-FMUDlgaQ86QQ)2#N1v&yzyJw2~|+qP}7{`P;rtUi18?0lvd zjzw+fwq$)R^2ugm&{Q#CjM$ucd0A!o-O}rGKUuQ#wKE&1pK}QeEYjn;J1K0^k}bUR z8=ojn+PinJX1Bi6!hqZJ|9x40f8U2g-13j3FXu&VtFl~X%czm!vVwKPmy_!A_k1~} zy?)R643kZg9;T+IE7q>{Rct6?Tz&qzx8zn~7R8b$Cnkc!_CNOnhDl!crd)sb_0b$f zh6!rCVfxYAa*hf6+Y~Op)0na`A|NK_%rS-+o8CAmfEHkwTzyx**j9JL<~ zvRlhlKAG5Gz_+c+@|-6VLuOrb_cYz;u)hbG`R{1VFJACW<5Sh%YEX^W{_NQ^X9mCI zkdw^k_MT!tmk0{12MkvjGXC5=U$^bSwdnl4;qM%nCM~-goxgW$^6zhN=QCPxC^QxC zc%*qQlPN&s58Ga* Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/static/description/index.html new file mode 100644 index 0000000..458ca34 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/static/description/index.html @@ -0,0 +1,421 @@ + + + + + + +Maintenance Purchase + + + +
+

Maintenance Purchase

+ + +

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

+

Create Equipments when the purchase is validated.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • CreuBlanca
  • +
+
+
+

Contributors

+
    +
  • Enric Tobella
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/tests/__init__.py new file mode 100644 index 0000000..165f23c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/tests/__init__.py @@ -0,0 +1 @@ +from . import test_purchase_order diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/tests/test_purchase_order.py b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/tests/test_purchase_order.py new file mode 100644 index 0000000..767da50 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/tests/test_purchase_order.py @@ -0,0 +1,206 @@ +# Copyright 2024 ACSONE SA/NV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import Command +from odoo.tests.common import TransactionCase + + +class TestMaintenanceProject(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + + cls.Equipment = cls.env["maintenance.equipment"] + cls.EquipmentCategory = cls.env["maintenance.equipment.category"] + cls.MaintenanceEquipmentCategory = cls.env["maintenance.equipment.category"] + cls.PurchaseOrder = cls.env["purchase.order"] + cls.PurchaseOrderLine = cls.env["purchase.order.line"] + cls.ProductCategory = cls.env["product.category"] + cls.ProductProduct = cls.env["product.product"] + cls.ProductTemplate = cls.env["product.template"] + cls.ResPartner = cls.env["res.partner"] + + cls.partner = cls.ResPartner.create( + { + "name": "partner", + } + ) + uom_unit = cls.env.ref("uom.product_uom_unit") + cls.maintenance_equipment_category1 = cls.MaintenanceEquipmentCategory.create( + {"name": "My Maintenance Equipment Category 1"} + ) + cls.maintenance_equipment_category2 = cls.MaintenanceEquipmentCategory.create( + {"name": "My Maintenance Equipment Category 2"} + ) + cls.product_category01 = cls.ProductCategory.create( + { + "name": "My Product Category 1", + "equipment_category_ids": [ + Command.set( + [ + cls.maintenance_equipment_category1.id, + cls.maintenance_equipment_category2.id, + ] + ) + ], + } + ) + cls.product_category02 = cls.ProductCategory.create( + { + "name": "My Product Category 2", + "equipment_category_ids": [ + Command.set([cls.maintenance_equipment_category2.id]) + ], + } + ) + cls.product_order_maintenance = cls.ProductProduct.create( + { + "name": "My Product", + "standard_price": 235.0, + "list_price": 280.0, + "type": "consu", + "uom_id": uom_unit.id, + "uom_po_id": uom_unit.id, + "purchase_method": "purchase", + "default_code": "PROD_ORDER", + "taxes_id": False, + "maintenance_ok": True, + "categ_id": cls.product_category01.id, + } + ) + cls.product_order_no_maintenance = cls.ProductProduct.create( + { + "name": "My Product", + "standard_price": 235.0, + "list_price": 280.0, + "type": "consu", + "uom_id": uom_unit.id, + "uom_po_id": uom_unit.id, + "purchase_method": "purchase", + "default_code": "PROD_ORDER", + "taxes_id": False, + "categ_id": cls.product_category02.id, + } + ) + cls.purchase_order = cls.PurchaseOrder.with_context( + tracking_disable=True + ).create( + { + "partner_id": cls.partner.id, + } + ) + PurchaseOrderLine = cls.PurchaseOrderLine.with_context(tracking_disable=True) + cls.purchase_line_order01 = PurchaseOrderLine.create( + { + "name": cls.product_order_maintenance.name, + "product_id": cls.product_order_maintenance.id, + "product_qty": 10.0, + "product_uom": cls.product_order_maintenance.uom_id.id, + "price_unit": cls.product_order_maintenance.list_price, + "order_id": cls.purchase_order.id, + "taxes_id": False, + } + ) + cls.purchase_line_order02 = PurchaseOrderLine.create( + { + "name": cls.product_order_no_maintenance.name, + "product_id": cls.product_order_no_maintenance.id, + "product_qty": 10.0, + "product_uom": cls.product_order_no_maintenance.uom_id.id, + "price_unit": cls.product_order_no_maintenance.list_price, + "order_id": cls.purchase_order.id, + "taxes_id": False, + } + ) + + def test_equipment_count(self): + self.purchase_order.button_approve() + self.assertEqual(self.purchase_order.equipment_count, 10) + self.assertEqual(self.purchase_line_order01.equipment_count, 10) + self.assertEqual(self.purchase_line_order02.equipment_count, 0) + self.purchase_order.button_draft() + self.purchase_line_order01.product_qty = 1 + self.purchase_order.button_approve() + self.assertEqual(self.purchase_order.equipment_count, 10) + self.purchase_order.button_draft() + self.purchase_line_order01.equipment_ids.unlink() + self.purchase_order.button_approve() + self.assertEqual(self.purchase_order.equipment_count, 1) + + def test_unlink_purchase_oder(self): + self.purchase_order.button_approve() + equipments = self.purchase_order.order_line.equipment_ids + self.assertEqual(equipments.purchase_id, self.purchase_order) + self.assertEqual(equipments.purchase_line_id, self.purchase_line_order01) + self.purchase_order.button_cancel() + self.assertEqual(equipments.purchase_id, self.purchase_order) + self.assertEqual(equipments.purchase_line_id, self.purchase_line_order01) + self.purchase_order.unlink() + self.assertFalse(equipments.purchase_id) + self.assertFalse(equipments.purchase_line_id) + + def test_equipment_category_id(self): + self.assertEqual( + self.purchase_line_order01.equipment_category_id, + self.maintenance_equipment_category1, + ) + self.assertFalse(self.purchase_line_order02.equipment_category_id) + self.product_order_no_maintenance.product_tmpl_id.maintenance_ok = True + self.assertFalse(self.purchase_line_order02.equipment_category_id) + self.purchase_line_order02.product_id = self.product_order_maintenance + self.purchase_line_order02.product_id = self.product_order_no_maintenance + self.assertEqual( + self.purchase_line_order02.equipment_category_id, + self.maintenance_equipment_category2, + ) + self.purchase_line_order01.equipment_ids.unlink() + self.purchase_line_order01.equipment_category_id = False + self.purchase_order.button_approve() + self.assertEqual( + self.purchase_line_order01.equipment_category_id, + self.maintenance_equipment_category1, + ) + self.purchase_line_order01.equipment_ids.unlink() + self.purchase_line_order01.equipment_category_id = False + product_category_withouth_equipement_category = self.ProductCategory.create( + { + "name": "My Product Category 2", + } + ) + self.purchase_line_order01.product_id.product_tmpl_id.categ_id = ( + product_category_withouth_equipement_category.id + ) + self.purchase_order.button_approve() + self.assertTrue(self.purchase_line_order01.equipment_category_id) + self.assertNotEqual( + self.purchase_line_order01.equipment_category_id, + self.maintenance_equipment_category1, + ) + + def test_account_move_line(self): + self.purchase_order.button_approve() + self.purchase_order.action_create_invoice() + self.assertEqual( + self.purchase_order.order_line.equipment_ids, + self.purchase_order.invoice_ids.line_ids.equipment_ids, + ) + + def test_action_view_equipments(self): + action = self.purchase_order.action_view_equipments() + self.assertEqual(action, {"type": "ir.actions.act_window_close"}) + self.purchase_line_order01.product_qty = 1 + self.purchase_order.button_approve() + view = self.env.ref("maintenance.hr_equipment_view_form", False) + action = self.purchase_order.action_view_equipments() + self.assertEqual(action["views"], [(view and view.id or False, "form")]) + self.assertEqual( + action["res_id"], self.purchase_line_order01.equipment_ids[0:].id + ) + self.purchase_order.button_draft() + self.purchase_line_order01.equipment_ids.unlink() + self.purchase_line_order01.product_qty = 2 + self.purchase_order.button_approve() + action = self.purchase_order.action_view_equipments() + self.assertEqual( + action["domain"], [("purchase_id", "=", self.purchase_order.id)] + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/views/maintenance_equipment.xml b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/views/maintenance_equipment.xml new file mode 100644 index 0000000..02f05cc --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/views/maintenance_equipment.xml @@ -0,0 +1,16 @@ + + + + + equipment.form + maintenance.equipment + + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/views/purchase_order.xml b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/views/purchase_order.xml new file mode 100644 index 0000000..9239a33 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/maintenance_purchase/views/purchase_order.xml @@ -0,0 +1,37 @@ + + + + + + purchase.order.form (in maintenance_purchase) + purchase.order + + + + + + + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_purchase/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_purchase/pyproject.toml new file mode 100644 index 0000000..7321823 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_purchase/pyproject.toml @@ -0,0 +1,44 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_purchase" +version = "16.0.0" +description = "Maintenance Purchase - + Create Equipments with purchases" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-maintenance_account>=16.0.0", + "odoo-bringout-oca-maintenance-purchase_stock>=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_purchase"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/README.md b/odoo-bringout-oca-maintenance-maintenance_remote/README.md new file mode 100644 index 0000000..5cb7ee2 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/README.md @@ -0,0 +1,45 @@ +# Maintenance Remote + +Odoo addon: maintenance_remote + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_remote +``` + +## Dependencies + +This addon depends on: +- maintenance +- base_remote + +## Manifest Information + +- **Name**: Maintenance Remote +- **Version**: 16.0.1.0.0 +- **Category**: N/A +- **License**: AGPL-3 +- **Installable**: False + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_remote`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_remote/doc/ARCHITECTURE.md new file mode 100644 index 0000000..188c285 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/doc/ARCHITECTURE.md @@ -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_remote Module - maintenance_remote + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_remote/doc/CONFIGURATION.md new file mode 100644 index 0000000..0cd6535 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_remote. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_remote/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_remote/doc/DEPENDENCIES.md new file mode 100644 index 0000000..85c18d1 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/doc/DEPENDENCIES.md @@ -0,0 +1,6 @@ +# Dependencies + +This addon depends on: + +- [maintenance](https://github.com/bringout/oca-ocb-vertical-industry/tree/a60a29f57ff34f3c01d0521d0a6003956d80acd9/odoo-bringout-oca-ocb-maintenance) +- [base_remote](https://github.com/bringout/oca-technical) diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_remote/doc/FAQ.md new file mode 100644 index 0000000..8306846 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/doc/FAQ.md @@ -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_remote or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_remote/doc/INSTALL.md new file mode 100644 index 0000000..cd4e2f3 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_remote" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_remote" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_remote/doc/MODELS.md new file mode 100644 index 0000000..5b474ae --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/doc/MODELS.md @@ -0,0 +1,12 @@ +# Models + +Detected core models and extensions in maintenance_remote. + +```mermaid +classDiagram + class maintenance_request +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_remote/doc/OVERVIEW.md new file mode 100644 index 0000000..3138400 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_remote. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_remote +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_remote/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_remote/doc/SECURITY.md new file mode 100644 index 0000000..e07da9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/doc/SECURITY.md @@ -0,0 +1,8 @@ +# Security + +This module does not define custom security rules or access controls beyond Odoo defaults. + +Default Odoo security applies: +- Base user access through standard groups +- Model access inherited from dependencies +- No custom row-level security rules diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_remote/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_remote/doc/USAGE.md new file mode 100644 index 0000000..abcf507 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/doc/USAGE.md @@ -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_remote +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_remote/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/README.rst b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/README.rst new file mode 100644 index 0000000..775e485 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/README.rst @@ -0,0 +1,77 @@ +================== +Maintenance Remote +================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:f402ab11faa86e0feea76f70b54ee5fca8fc5999599bca9d138e7d64cdc4cd2e + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_remote + :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_remote + :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 allows to show the remote on a maintenance request where the issue +was created. It is useful on requests related to IT. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Creu Blanca + +Contributors +~~~~~~~~~~~~ + +* Enric Tobella + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/maintenance `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/__init__.py b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/__manifest__.py new file mode 100644 index 0000000..60e6d84 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/__manifest__.py @@ -0,0 +1,14 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Maintenance Remote", + "summary": """ + Define remote on maintenance request""", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "Creu Blanca,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/maintenance", + "depends": ["maintenance", "base_remote"], + "data": ["views/maintenance_request.xml"], +} diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/bs.po new file mode 100644 index 0000000..4723c12 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/bs.po @@ -0,0 +1,24 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_remote +# +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_remote +#: model:ir.model,name:maintenance_remote.model_maintenance_request +msgid "Maintenance Request" +msgstr "Zahtjev za održavanje" + +#. module: maintenance_remote +#: model:ir.model.fields,field_description:maintenance_remote.field_maintenance_request__remote_id +msgid "Remote" +msgstr "Udaljeno" diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/es.po new file mode 100644 index 0000000..a1d63bc --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/es.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_remote +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-10-18 17:36+0000\n" +"Last-Translator: Enric Tobella \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_remote +#: model:ir.model.fields,field_description:maintenance_remote.field_maintenance_request__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: maintenance_remote +#: model:ir.model.fields,field_description:maintenance_remote.field_maintenance_request__id +msgid "ID" +msgstr "ID" + +#. module: maintenance_remote +#: model:ir.model.fields,field_description:maintenance_remote.field_maintenance_request____last_update +msgid "Last Modified on" +msgstr "Última modificación el" + +#. module: maintenance_remote +#: model:ir.model,name:maintenance_remote.model_maintenance_request +msgid "Maintenance Request" +msgstr "Peticiones de mantenimiento" + +#. module: maintenance_remote +#: model:ir.model.fields,field_description:maintenance_remote.field_maintenance_request__remote_id +msgid "Remote" +msgstr "Remoto" diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/fr.po b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/fr.po new file mode 100644 index 0000000..4814102 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/fr.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_remote +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-06-17 13:38+0000\n" +"Last-Translator: Yann Papouin \n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_remote +#: model:ir.model.fields,field_description:maintenance_remote.field_maintenance_request__display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: maintenance_remote +#: model:ir.model.fields,field_description:maintenance_remote.field_maintenance_request__id +msgid "ID" +msgstr "ID" + +#. module: maintenance_remote +#: model:ir.model.fields,field_description:maintenance_remote.field_maintenance_request____last_update +msgid "Last Modified on" +msgstr "Dernière modification le" + +#. module: maintenance_remote +#: model:ir.model,name:maintenance_remote.model_maintenance_request +msgid "Maintenance Request" +msgstr "Demande de maintenance" + +#. module: maintenance_remote +#: model:ir.model.fields,field_description:maintenance_remote.field_maintenance_request__remote_id +msgid "Remote" +msgstr "Distant" diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/it.po new file mode 100644 index 0000000..0d6efbb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/it.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_remote +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-08-17 10:58+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: maintenance_remote +#: model:ir.model.fields,field_description:maintenance_remote.field_maintenance_request__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: maintenance_remote +#: model:ir.model.fields,field_description:maintenance_remote.field_maintenance_request__id +msgid "ID" +msgstr "ID" + +#. module: maintenance_remote +#: model:ir.model.fields,field_description:maintenance_remote.field_maintenance_request____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: maintenance_remote +#: model:ir.model,name:maintenance_remote.model_maintenance_request +msgid "Maintenance Request" +msgstr "Richiesta manutenzione" + +#. module: maintenance_remote +#: model:ir.model.fields,field_description:maintenance_remote.field_maintenance_request__remote_id +msgid "Remote" +msgstr "Remoto" diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/maintenance_remote.pot b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/maintenance_remote.pot new file mode 100644 index 0000000..27bfb0c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/maintenance_remote.pot @@ -0,0 +1,24 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_remote +# +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_remote +#: model:ir.model,name:maintenance_remote.model_maintenance_request +msgid "Maintenance Request" +msgstr "" + +#. module: maintenance_remote +#: model:ir.model.fields,field_description:maintenance_remote.field_maintenance_request__remote_id +msgid "Remote" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/pt_BR.po b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/pt_BR.po new file mode 100644 index 0000000..722daa7 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/i18n/pt_BR.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_remote +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-06-23 22:10+0000\n" +"Last-Translator: Fernando Colus \n" +"Language-Team: none\n" +"Language: pt_BR\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 3.10\n" + +#. module: maintenance_remote +#: model:ir.model.fields,field_description:maintenance_remote.field_maintenance_request__display_name +msgid "Display Name" +msgstr "" + +#. module: maintenance_remote +#: model:ir.model.fields,field_description:maintenance_remote.field_maintenance_request__id +msgid "ID" +msgstr "" + +#. module: maintenance_remote +#: model:ir.model.fields,field_description:maintenance_remote.field_maintenance_request____last_update +msgid "Last Modified on" +msgstr "" + +#. module: maintenance_remote +#: model:ir.model,name:maintenance_remote.model_maintenance_request +msgid "Maintenance Request" +msgstr "Requisição de Manutenção" + +#. module: maintenance_remote +#: model:ir.model.fields,field_description:maintenance_remote.field_maintenance_request__remote_id +msgid "Remote" +msgstr "Remota" diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/models/__init__.py new file mode 100644 index 0000000..df8c9b5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/models/__init__.py @@ -0,0 +1 @@ +from . import maintenance_request diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/models/maintenance_request.py b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/models/maintenance_request.py new file mode 100644 index 0000000..e195a08 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/models/maintenance_request.py @@ -0,0 +1,17 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class MaintenanceRequest(models.Model): + + _inherit = "maintenance.request" + + @api.model + def _default_remote(self): + return self.remote.id + + remote_id = fields.Many2one( + "res.remote", readonly=True, default=lambda r: r._default_remote() + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..93ec993 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Enric Tobella diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/readme/DESCRIPTION.rst new file mode 100644 index 0000000..52dc312 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module allows to show the remote on a maintenance request where the issue +was created. It is useful on requests related to IT. diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/static/description/index.html new file mode 100644 index 0000000..3ef4a4a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/static/description/index.html @@ -0,0 +1,424 @@ + + + + + +Maintenance Remote + + + +
+

Maintenance Remote

+ + +

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

+

This module allows to show the remote on a maintenance request where the issue +was created. It is useful on requests related to IT.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Creu Blanca
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/views/maintenance_request.xml b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/views/maintenance_request.xml new file mode 100644 index 0000000..858b114 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/maintenance_remote/views/maintenance_request.xml @@ -0,0 +1,25 @@ + + + + + maintenance.request.form (in maintenance_remote) + maintenance.request + + + + + + + + + maintenance.request.search (in maintenance_remote) + maintenance.request + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_remote/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_remote/pyproject.toml new file mode 100644 index 0000000..10cea8c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_remote/pyproject.toml @@ -0,0 +1,44 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_remote" +version = "16.0.0" +description = "Maintenance Remote - + Define remote on maintenance request" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-maintenance>=16.0.0", + "odoo-bringout-oca-maintenance-base_remote>=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_remote"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/README.md b/odoo-bringout-oca-maintenance-maintenance_request_purchase/README.md new file mode 100644 index 0000000..c9813ce --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/README.md @@ -0,0 +1,45 @@ +# Maintenance Request Purchase + +Odoo addon: maintenance_request_purchase + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_request_purchase +``` + +## Dependencies + +This addon depends on: +- base_maintenance +- purchase + +## Manifest Information + +- **Name**: Maintenance Request Purchase +- **Version**: 16.0.1.0.2 +- **Category**: N/A +- **License**: AGPL-3 +- **Installable**: False + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_request_purchase`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/ARCHITECTURE.md new file mode 100644 index 0000000..153a3e8 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/ARCHITECTURE.md @@ -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_request_purchase Module - maintenance_request_purchase + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/CONFIGURATION.md new file mode 100644 index 0000000..be7870b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_request_purchase. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/DEPENDENCIES.md new file mode 100644 index 0000000..248dec1 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/DEPENDENCIES.md @@ -0,0 +1,6 @@ +# Dependencies + +This addon depends on: + +- [base_maintenance](https://github.com/bringout/oca-technical) +- [purchase](https://github.com/bringout/oca-ocb-core/tree/b3e6fb998e53b9eb1bc9669d992017616c2bd7b3/odoo-bringout-oca-ocb-purchase) diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/FAQ.md new file mode 100644 index 0000000..b3ada35 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/FAQ.md @@ -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_request_purchase or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/INSTALL.md new file mode 100644 index 0000000..8ad4c02 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_request_purchase" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_request_purchase" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/MODELS.md new file mode 100644 index 0000000..4252985 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/MODELS.md @@ -0,0 +1,13 @@ +# Models + +Detected core models and extensions in maintenance_request_purchase. + +```mermaid +classDiagram + class maintenance_request + class purchase_order +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/OVERVIEW.md new file mode 100644 index 0000000..44b41d4 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_request_purchase. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_request_purchase +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/SECURITY.md new file mode 100644 index 0000000..e07da9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/SECURITY.md @@ -0,0 +1,8 @@ +# Security + +This module does not define custom security rules or access controls beyond Odoo defaults. + +Default Odoo security applies: +- Base user access through standard groups +- Model access inherited from dependencies +- No custom row-level security rules diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/USAGE.md new file mode 100644 index 0000000..71c544b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/USAGE.md @@ -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_request_purchase +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/README.rst b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/README.rst new file mode 100644 index 0000000..2e94379 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/README.rst @@ -0,0 +1,80 @@ +============================ +Maintenance Request Purchase +============================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:4a23a2dddf6911f177e08f1e5b740b4a0688eb78dad782ef3fff9c9f67f8b000 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_request_purchase + :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_request_purchase + :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 allows to related a Maintenance Request with Purchase Orders + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* CreuBlanca +* Dixmit + +Contributors +~~~~~~~~~~~~ + +* Enric Tobella +* Jaime Arroyo +* Olga Marco +* Núria Sancho + +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 `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/__init__.py b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/__manifest__.py new file mode 100644 index 0000000..a450e1d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/__manifest__.py @@ -0,0 +1,17 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Maintenance Request Purchase", + "summary": """ + Allows you to link PO with maintenance requests""", + "version": "16.0.1.0.2", + "license": "AGPL-3", + "author": "CreuBlanca,Dixmit,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/maintenance", + "depends": ["base_maintenance", "purchase"], + "data": [ + "views/maintenance_request.xml", + "views/purchase_order_views.xml", + ], +} diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/bs.po new file mode 100644 index 0000000..685d03a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/bs.po @@ -0,0 +1,55 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_request_purchase +# +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_request_purchase +#: model_terms:ir.ui.view,arch_db:maintenance_request_purchase.purchase_order_form +msgid "Maintenance" +msgstr "Održavanje" + +#. module: maintenance_request_purchase +#: model:ir.model,name:maintenance_request_purchase.model_maintenance_request +msgid "Maintenance Request" +msgstr "Zahtjev za održavanje" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_purchase_order__maintenance_request_ids +msgid "Maintenance Requests" +msgstr "Zahtjevi za održavanje" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_purchase_order__maintenance_requests_count +msgid "Maintenance Requests Count" +msgstr "Broj zahtjeva za održavanje" + +#. module: maintenance_request_purchase +#: model_terms:ir.ui.view,arch_db:maintenance_request_purchase.purchase_order_tree +msgid "Open" +msgstr "Otvori" + +#. module: maintenance_request_purchase +#: model:ir.model,name:maintenance_request_purchase.model_purchase_order +msgid "Purchase Order" +msgstr "Nalog za nabavu" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_maintenance_request__purchase_order_ids +#: model_terms:ir.ui.view,arch_db:maintenance_request_purchase.hr_equipment_request_view_form_button_box +msgid "Purchase Orders" +msgstr "Nalozi u nabavi" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_maintenance_request__purchases_count +msgid "Purchases Count" +msgstr "Broj nabavki" diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/ca.po b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/ca.po new file mode 100644 index 0000000..df23df3 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/ca.po @@ -0,0 +1,67 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_request_purchase +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-11-15 18:36+0000\n" +"Last-Translator: Enric Tobella \n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_request_purchase +#: model_terms:ir.ui.view,arch_db:maintenance_request_purchase.purchase_order_form +msgid "Maintenance" +msgstr "Manteniment" + +#. module: maintenance_request_purchase +#: model:ir.model,name:maintenance_request_purchase.model_maintenance_request +msgid "Maintenance Request" +msgstr "Petició de manteniment" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_purchase_order__maintenance_request_ids +msgid "Maintenance Requests" +msgstr "Peticions de manteniment" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_purchase_order__maintenance_requests_count +msgid "Maintenance Requests Count" +msgstr "Nombre de peticions de manteniment" + +#. module: maintenance_request_purchase +#: model_terms:ir.ui.view,arch_db:maintenance_request_purchase.purchase_order_tree +msgid "Open" +msgstr "" + +#. module: maintenance_request_purchase +#: model:ir.model,name:maintenance_request_purchase.model_purchase_order +msgid "Purchase Order" +msgstr "Comanda de compra" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_maintenance_request__purchase_order_ids +#: model_terms:ir.ui.view,arch_db:maintenance_request_purchase.hr_equipment_request_view_form_button_box +msgid "Purchase Orders" +msgstr "Comandes de compra" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_maintenance_request__purchases_count +msgid "Purchases Count" +msgstr "Nombre de comandes" + +#~ msgid "Display Name" +#~ msgstr "Nom a mostrar" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificació el" diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/es.po new file mode 100644 index 0000000..1b74cf8 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/es.po @@ -0,0 +1,103 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_request_purchase +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-12-12 11:51+0000\n" +"PO-Revision-Date: 2019-12-12 12:54+0100\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 2.0.6\n" + +#. module: maintenance_request_purchase +#: model_terms:ir.ui.view,arch_db:maintenance_request_purchase.purchase_order_form +msgid "Maintenance" +msgstr "Mantenimiento" + +#. module: maintenance_request_purchase +#: model:ir.model,name:maintenance_request_purchase.model_maintenance_request +msgid "Maintenance Request" +msgstr "Petición de Mantenimiento" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_purchase_order__maintenance_request_ids +msgid "Maintenance Requests" +msgstr "Peticiones de Mantenimiento" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_purchase_order__maintenance_requests_count +msgid "Maintenance Requests Count" +msgstr "Número de Peticiones de Mantenimiento" + +#. module: maintenance_request_purchase +#: model_terms:ir.ui.view,arch_db:maintenance_request_purchase.purchase_order_tree +msgid "Open" +msgstr "" + +#. module: maintenance_request_purchase +#: model:ir.model,name:maintenance_request_purchase.model_purchase_order +msgid "Purchase Order" +msgstr "Pedido de compra" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_maintenance_request__purchase_order_ids +#: model_terms:ir.ui.view,arch_db:maintenance_request_purchase.hr_equipment_request_view_form_button_box +msgid "Purchase Orders" +msgstr "Pedidos de compra" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_maintenance_request__purchases_count +msgid "Purchases Count" +msgstr "Número de Compras" + +#~ msgid "Cancel" +#~ msgstr "Cancelar" + +#~ msgid "Created by" +#~ msgstr "Creado por" + +#~ msgid "Created on" +#~ msgstr "Creado en" + +#~ msgid "Display Name" +#~ msgstr "Nombre mostrado" + +#~ msgid "ID" +#~ msgstr "ID (identificación)" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación en" + +#~ msgid "Last Updated by" +#~ msgstr "Última actualización de" + +#~ msgid "Last Updated on" +#~ msgstr "Última actualización en" + +#~ msgid "Link Selected Purchase Orders" +#~ msgstr "Relacionar órdenes de compra seleccionadas" + +#~ msgid "Link to PO" +#~ msgstr "Relacionar con PO" + +#~ msgid "New Purchase Order" +#~ msgstr "Nueva Orden de Compra" + +#~ msgid "Purchases" +#~ msgstr "Compras" + +#~ msgid "Select Purchase Orders and Link them or Create a new Purchase Order" +#~ msgstr "" +#~ "Selecciona órdenes de compra para relacionarlas con la petición o crea " +#~ "una nueva" + +#~ msgid "wizard.link.maintenance.po" +#~ msgstr "wizard.link.maintenance.po" diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/it.po new file mode 100644 index 0000000..be5f8e7 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/it.po @@ -0,0 +1,67 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_request_purchase +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2025-04-05 11:06+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.10.2\n" + +#. module: maintenance_request_purchase +#: model_terms:ir.ui.view,arch_db:maintenance_request_purchase.purchase_order_form +msgid "Maintenance" +msgstr "Manutenzione" + +#. module: maintenance_request_purchase +#: model:ir.model,name:maintenance_request_purchase.model_maintenance_request +msgid "Maintenance Request" +msgstr "Richiesta manutenzione" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_purchase_order__maintenance_request_ids +msgid "Maintenance Requests" +msgstr "Richieste di manutenzione" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_purchase_order__maintenance_requests_count +msgid "Maintenance Requests Count" +msgstr "Conta richieste manutenzione" + +#. module: maintenance_request_purchase +#: model_terms:ir.ui.view,arch_db:maintenance_request_purchase.purchase_order_tree +msgid "Open" +msgstr "Apri" + +#. module: maintenance_request_purchase +#: model:ir.model,name:maintenance_request_purchase.model_purchase_order +msgid "Purchase Order" +msgstr "Ordine di acquisto" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_maintenance_request__purchase_order_ids +#: model_terms:ir.ui.view,arch_db:maintenance_request_purchase.hr_equipment_request_view_form_button_box +msgid "Purchase Orders" +msgstr "Ordini di acquisto" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_maintenance_request__purchases_count +msgid "Purchases Count" +msgstr "Conteggio acquisti" + +#~ msgid "Display Name" +#~ msgstr "Nome visualizzato" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima modifica il" diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/maintenance_request_purchase.pot b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/maintenance_request_purchase.pot new file mode 100644 index 0000000..fdb2f9e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/i18n/maintenance_request_purchase.pot @@ -0,0 +1,55 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_request_purchase +# +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_request_purchase +#: model_terms:ir.ui.view,arch_db:maintenance_request_purchase.purchase_order_form +msgid "Maintenance" +msgstr "" + +#. module: maintenance_request_purchase +#: model:ir.model,name:maintenance_request_purchase.model_maintenance_request +msgid "Maintenance Request" +msgstr "" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_purchase_order__maintenance_request_ids +msgid "Maintenance Requests" +msgstr "" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_purchase_order__maintenance_requests_count +msgid "Maintenance Requests Count" +msgstr "" + +#. module: maintenance_request_purchase +#: model_terms:ir.ui.view,arch_db:maintenance_request_purchase.purchase_order_tree +msgid "Open" +msgstr "" + +#. module: maintenance_request_purchase +#: model:ir.model,name:maintenance_request_purchase.model_purchase_order +msgid "Purchase Order" +msgstr "" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_maintenance_request__purchase_order_ids +#: model_terms:ir.ui.view,arch_db:maintenance_request_purchase.hr_equipment_request_view_form_button_box +msgid "Purchase Orders" +msgstr "" + +#. module: maintenance_request_purchase +#: model:ir.model.fields,field_description:maintenance_request_purchase.field_maintenance_request__purchases_count +msgid "Purchases Count" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/models/__init__.py new file mode 100644 index 0000000..e1f5284 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/models/__init__.py @@ -0,0 +1,2 @@ +from . import maintenance_request +from . import purchase_order diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/models/maintenance_request.py b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/models/maintenance_request.py new file mode 100644 index 0000000..1949bc5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/models/maintenance_request.py @@ -0,0 +1,29 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class MaintenanceRequest(models.Model): + + _inherit = "maintenance.request" + + purchase_order_ids = fields.Many2many( + "purchase.order", + "maintenance_purchase_order", + "maintenance_request_id", + "purchase_order_id", + groups="purchase.group_purchase_user", + string="Purchase Orders", + copy=False, + ) + purchases_count = fields.Integer( + compute="_compute_purchases_count", + store=True, + groups="purchase.group_purchase_user", + ) + + @api.depends("purchase_order_ids") + def _compute_purchases_count(self): + for record in self: + record.purchases_count = len(record.purchase_order_ids.ids) diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/models/purchase_order.py b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/models/purchase_order.py new file mode 100644 index 0000000..b8eebe6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/models/purchase_order.py @@ -0,0 +1,39 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class PurchaseOrder(models.Model): + + _inherit = "purchase.order" + + maintenance_request_ids = fields.Many2many( + "maintenance.request", + "maintenance_purchase_order", + "purchase_order_id", + "maintenance_request_id", + string="Maintenance Requests", + copy=False, + ) + + maintenance_requests_count = fields.Integer( + compute="_compute_maintenance_requests_count", store=True + ) + + @api.depends("maintenance_request_ids") + def _compute_maintenance_requests_count(self): + for record in self: + record.maintenance_requests_count = len(record.maintenance_request_ids.ids) + + def action_view_maintenance_request(self): + action = self.env["ir.actions.act_window"]._for_xml_id( + "maintenance.hr_equipment_request_action" + ) + if len(self.maintenance_request_ids) > 1: + action["domain"] = [("id", "in", self.maintenance_request_ids.ids)] + elif self.maintenance_request_ids: + action["views"] = [(False, "form")] + action["res_id"] = self.maintenance_request_ids.id + action["context"] = {} + return action diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..0c89960 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +* Enric Tobella +* Jaime Arroyo +* Olga Marco +* Núria Sancho diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/readme/DESCRIPTION.rst new file mode 100644 index 0000000..b0ec4d4 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module allows to related a Maintenance Request with Purchase Orders diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/static/description/index.html new file mode 100644 index 0000000..ff80f13 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/static/description/index.html @@ -0,0 +1,427 @@ + + + + + +Maintenance Request Purchase + + + +
+

Maintenance Request Purchase

+ + +

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

+

This module allows to related a Maintenance Request with Purchase Orders

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • CreuBlanca
  • +
  • Dixmit
  • +
+
+
+

Contributors

+
    +
  • Enric Tobella
  • +
  • Jaime Arroyo
  • +
  • Olga Marco
  • +
  • Núria Sancho
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/tests/__init__.py new file mode 100644 index 0000000..5d9f08d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/tests/__init__.py @@ -0,0 +1 @@ +from . import test_maintenance_purchase diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/tests/test_maintenance_purchase.py b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/tests/test_maintenance_purchase.py new file mode 100644 index 0000000..12cc452 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/tests/test_maintenance_purchase.py @@ -0,0 +1,38 @@ +# Copyright 2023 Dixmit +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.tests.common import TransactionCase + + +class TestMaintenancePurchase(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.team_id = cls.env["maintenance.team"].create({"name": "Maintenance Team"}) + cls.request_1 = cls.env["maintenance.request"].create( + {"name": "Req 1", "maintenance_team_id": cls.team_id.id} + ) + cls.request_2 = cls.env["maintenance.request"].create( + {"name": "Req 1", "maintenance_team_id": cls.team_id.id} + ) + cls.supplier = cls.env["res.partner"].create({"name": "Supplier"}) + cls.po_1 = cls.env["purchase.order"].create( + { + "partner_id": cls.supplier.id, + "date_planned": "2017-02-11 22:00:00", + } + ) + + def test_maintenance_purchase(self): + self.assertEqual(self.request_1.purchases_count, 0) + self.assertEqual(self.po_1.maintenance_requests_count, 0) + self.request_1.purchase_order_ids = self.po_1 + self.assertEqual(self.request_1.purchases_count, 1) + self.assertEqual(self.po_1.maintenance_requests_count, 1) + action = self.po_1.action_view_maintenance_request() + self.assertEqual(action["res_id"], self.request_1.id) + self.request_2.write({"purchase_order_ids": [(4, self.po_1.id)]}) + action = self.po_1.action_view_maintenance_request() + requests = self.env[action["res_model"]].search(action["domain"]) + self.assertIn(self.request_1, requests) + self.assertIn(self.request_2, requests) diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/views/maintenance_request.xml b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/views/maintenance_request.xml new file mode 100644 index 0000000..0771d74 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/views/maintenance_request.xml @@ -0,0 +1,26 @@ + + + + + maintenance.request.form (in maintenance_equipment_purchase) + maintenance.request + + + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/views/purchase_order_views.xml b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/views/purchase_order_views.xml new file mode 100644 index 0000000..ca08379 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_purchase/maintenance_request_purchase/views/purchase_order_views.xml @@ -0,0 +1,51 @@ + + + + + purchase.order.form (in maintenance_equipment_purchase) + purchase.order + + +
+ + +
+
+
+ + + + purchase.order.form (in maintenance_purchase) + purchase.order + + + primary + + + +
+
+
+ + +
diff --git a/odoo-bringout-oca-maintenance-maintenance_request_repair/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_request_repair/pyproject.toml new file mode 100644 index 0000000..740aa17 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_repair/pyproject.toml @@ -0,0 +1,44 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_request_repair" +version = "16.0.0" +description = "Maintenance Request Repair - + This is a bridge module between Maintenance and Repair" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-maintenance>=16.0.0", + "odoo-bringout-oca-maintenance-repair>=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_request_repair"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/README.md b/odoo-bringout-oca-maintenance-maintenance_request_sequence/README.md new file mode 100644 index 0000000..d411572 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/README.md @@ -0,0 +1,44 @@ +# Maintenance Request Sequence + +Odoo addon: maintenance_request_sequence + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_request_sequence +``` + +## Dependencies + +This addon depends on: +- maintenance + +## Manifest Information + +- **Name**: Maintenance Request Sequence +- **Version**: 16.0.1.0.1 +- **Category**: N/A +- **License**: AGPL-3 +- **Installable**: False + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_request_sequence`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/ARCHITECTURE.md new file mode 100644 index 0000000..8801945 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/ARCHITECTURE.md @@ -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_request_sequence Module - maintenance_request_sequence + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/CONFIGURATION.md new file mode 100644 index 0000000..34cb7a0 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_request_sequence. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/DEPENDENCIES.md new file mode 100644 index 0000000..a7cb7c6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/DEPENDENCIES.md @@ -0,0 +1,5 @@ +# Dependencies + +This addon depends on: + +- [maintenance](https://github.com/bringout/oca-ocb-vertical-industry/tree/a60a29f57ff34f3c01d0521d0a6003956d80acd9/odoo-bringout-oca-ocb-maintenance) diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/FAQ.md new file mode 100644 index 0000000..408f83e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/FAQ.md @@ -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_request_sequence or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/INSTALL.md new file mode 100644 index 0000000..27290af --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_request_sequence" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_request_sequence" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/MODELS.md new file mode 100644 index 0000000..9d2f67f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/MODELS.md @@ -0,0 +1,13 @@ +# Models + +Detected core models and extensions in maintenance_request_sequence. + +```mermaid +classDiagram + class maintenance_request + class maintenance_team +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/OVERVIEW.md new file mode 100644 index 0000000..21f1733 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_request_sequence. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_request_sequence +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/SECURITY.md new file mode 100644 index 0000000..e07da9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/SECURITY.md @@ -0,0 +1,8 @@ +# Security + +This module does not define custom security rules or access controls beyond Odoo defaults. + +Default Odoo security applies: +- Base user access through standard groups +- Model access inherited from dependencies +- No custom row-level security rules diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/USAGE.md new file mode 100644 index 0000000..6a01776 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/USAGE.md @@ -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_request_sequence +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/README.rst b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/README.rst new file mode 100644 index 0000000..78076ac --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/README.rst @@ -0,0 +1,78 @@ +============================ +Maintenance Request Sequence +============================ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:fe77ed50f2e996c9bd2afb1198d64bca28b1fcd77e508567241d8a709962ff37 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_request_sequence + :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_request_sequence + :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| + +Adds a sequence field to maintenance teams. Maintenance requests will follow +the sequence of its team. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Creu Blanca + +Contributors +~~~~~~~~~~~~ + +* Jaime Arroyo +* Christian Ramos + +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 `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/__init__.py b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/__manifest__.py new file mode 100644 index 0000000..ae89098 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/__manifest__.py @@ -0,0 +1,18 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Maintenance Request Sequence", + "summary": """ + Adds sequence to maintenance requests""", + "version": "16.0.1.0.1", + "license": "AGPL-3", + "author": "Creu Blanca,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/maintenance", + "depends": ["maintenance"], + "data": [ + "data/maintenance_request_data.xml", + "views/maintenance_team.xml", + "views/maintenance_request.xml", + ], +} diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/data/maintenance_request_data.xml b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/data/maintenance_request_data.xml new file mode 100644 index 0000000..ea48314 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/data/maintenance_request_data.xml @@ -0,0 +1,9 @@ + + + + Maintenance Request Default + maintenance.request.default + + MR + + diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/bs.po new file mode 100644 index 0000000..db9ca82 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/bs.po @@ -0,0 +1,46 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_request_sequence +# +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_request_sequence +#: model:ir.model.fields,field_description:maintenance_request_sequence.field_maintenance_request__code +msgid "Code" +msgstr "Šifra" + +#. module: maintenance_request_sequence +#: model:ir.model,name:maintenance_request_sequence.model_maintenance_request +msgid "Maintenance Request" +msgstr "Zahtjev za održavanje" + +#. module: maintenance_request_sequence +#: model:ir.model,name:maintenance_request_sequence.model_maintenance_team +msgid "Maintenance Teams" +msgstr "Timovi za održavanje" + +#. module: maintenance_request_sequence +#: model:ir.model.fields,field_description:maintenance_request_sequence.field_maintenance_team__code_prefix +msgid "Prefix for Team Reference" +msgstr "Prefiks za referencu tima" + +#. module: maintenance_request_sequence +#: model:ir.model.fields,help:maintenance_request_sequence.field_maintenance_team__code_prefix +msgid "" +"Prefix used to generate the internal reference for re created with this " +"category. If blank the default sequence will be used." +msgstr "" + +#. module: maintenance_request_sequence +#: model:ir.model.fields,field_description:maintenance_request_sequence.field_maintenance_team__sequence_id +msgid "Team Sequence" +msgstr "Sekvenca tima" diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/es.po new file mode 100644 index 0000000..1a47ed5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/es.po @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_request_sequence +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-05-18 08:19+0000\n" +"Last-Translator: Enric Tobella \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.10\n" + +#. module: maintenance_request_sequence +#: model:ir.model.fields,field_description:maintenance_request_sequence.field_maintenance_request__code +msgid "Code" +msgstr "Código" + +#. module: maintenance_request_sequence +#: model:ir.model,name:maintenance_request_sequence.model_maintenance_request +msgid "Maintenance Request" +msgstr "Peticiones de mantenimiento" + +#. module: maintenance_request_sequence +#: model:ir.model,name:maintenance_request_sequence.model_maintenance_team +msgid "Maintenance Teams" +msgstr "Equipos de Mantenimiento" + +#. module: maintenance_request_sequence +#: model:ir.model.fields,field_description:maintenance_request_sequence.field_maintenance_team__code_prefix +msgid "Prefix for Team Reference" +msgstr "Prefijo por equipo" + +#. module: maintenance_request_sequence +#: model:ir.model.fields,help:maintenance_request_sequence.field_maintenance_team__code_prefix +msgid "" +"Prefix used to generate the internal reference for re created with this " +"category. If blank the default sequence will be used." +msgstr "" +"El prefijo se usará para generar la referencia interna de las peticiones " +"creadas en esta categoría. Si esta en blanco, se usará la secuencia por " +"defecto." + +#. module: maintenance_request_sequence +#: model:ir.model.fields,field_description:maintenance_request_sequence.field_maintenance_team__sequence_id +msgid "Team Sequence" +msgstr "Secuencia del equipo" diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/it.po new file mode 100644 index 0000000..dedebeb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/it.po @@ -0,0 +1,51 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_request_sequence +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-07-28 09:49+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: maintenance_request_sequence +#: model:ir.model.fields,field_description:maintenance_request_sequence.field_maintenance_request__code +msgid "Code" +msgstr "Codice" + +#. module: maintenance_request_sequence +#: model:ir.model,name:maintenance_request_sequence.model_maintenance_request +msgid "Maintenance Request" +msgstr "Richiesta manutenzione" + +#. module: maintenance_request_sequence +#: model:ir.model,name:maintenance_request_sequence.model_maintenance_team +msgid "Maintenance Teams" +msgstr "Squadra manutenzione" + +#. module: maintenance_request_sequence +#: model:ir.model.fields,field_description:maintenance_request_sequence.field_maintenance_team__code_prefix +msgid "Prefix for Team Reference" +msgstr "Prefisso di riferimento squadra" + +#. module: maintenance_request_sequence +#: model:ir.model.fields,help:maintenance_request_sequence.field_maintenance_team__code_prefix +msgid "" +"Prefix used to generate the internal reference for re created with this " +"category. If blank the default sequence will be used." +msgstr "" +"Prefisso utilizzato per generare la referenza interna per la rigenerazione " +"con questa categoria. Se vuoto verrà utilizzata la sequenza predefinita." + +#. module: maintenance_request_sequence +#: model:ir.model.fields,field_description:maintenance_request_sequence.field_maintenance_team__sequence_id +msgid "Team Sequence" +msgstr "Sequenza squadra" diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/maintenance_request_sequence.pot b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/maintenance_request_sequence.pot new file mode 100644 index 0000000..c19ffd9 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/maintenance_request_sequence.pot @@ -0,0 +1,46 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_request_sequence +# +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_request_sequence +#: model:ir.model.fields,field_description:maintenance_request_sequence.field_maintenance_request__code +msgid "Code" +msgstr "" + +#. module: maintenance_request_sequence +#: model:ir.model,name:maintenance_request_sequence.model_maintenance_request +msgid "Maintenance Request" +msgstr "" + +#. module: maintenance_request_sequence +#: model:ir.model,name:maintenance_request_sequence.model_maintenance_team +msgid "Maintenance Teams" +msgstr "" + +#. module: maintenance_request_sequence +#: model:ir.model.fields,field_description:maintenance_request_sequence.field_maintenance_team__code_prefix +msgid "Prefix for Team Reference" +msgstr "" + +#. module: maintenance_request_sequence +#: model:ir.model.fields,help:maintenance_request_sequence.field_maintenance_team__code_prefix +msgid "" +"Prefix used to generate the internal reference for re created with this " +"category. If blank the default sequence will be used." +msgstr "" + +#. module: maintenance_request_sequence +#: model:ir.model.fields,field_description:maintenance_request_sequence.field_maintenance_team__sequence_id +msgid "Team Sequence" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/pt_BR.po b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/pt_BR.po new file mode 100644 index 0000000..c0e925e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/i18n/pt_BR.po @@ -0,0 +1,51 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_request_sequence +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-06-23 22:10+0000\n" +"Last-Translator: Fernando Colus \n" +"Language-Team: none\n" +"Language: pt_BR\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 3.10\n" + +#. module: maintenance_request_sequence +#: model:ir.model.fields,field_description:maintenance_request_sequence.field_maintenance_request__code +msgid "Code" +msgstr "Código" + +#. module: maintenance_request_sequence +#: model:ir.model,name:maintenance_request_sequence.model_maintenance_request +msgid "Maintenance Request" +msgstr "Requisição de Manutenção" + +#. module: maintenance_request_sequence +#: model:ir.model,name:maintenance_request_sequence.model_maintenance_team +msgid "Maintenance Teams" +msgstr "Equipes de Manutenção" + +#. module: maintenance_request_sequence +#: model:ir.model.fields,field_description:maintenance_request_sequence.field_maintenance_team__code_prefix +msgid "Prefix for Team Reference" +msgstr "Prefixo para Referência da Equipe" + +#. module: maintenance_request_sequence +#: model:ir.model.fields,help:maintenance_request_sequence.field_maintenance_team__code_prefix +msgid "" +"Prefix used to generate the internal reference for re created with this " +"category. If blank the default sequence will be used." +msgstr "" +"Prefixo usado para gerar a referência interna para recriar com esta " +"categoria. Se estiver em branco, a sequência padrão será usada." + +#. module: maintenance_request_sequence +#: model:ir.model.fields,field_description:maintenance_request_sequence.field_maintenance_team__sequence_id +msgid "Team Sequence" +msgstr "Sequência da Equipe" diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/models/__init__.py new file mode 100644 index 0000000..9c30184 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/models/__init__.py @@ -0,0 +1,2 @@ +from . import maintenance_request +from . import maintenance_team diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/models/maintenance_request.py b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/models/maintenance_request.py new file mode 100644 index 0000000..d69795d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/models/maintenance_request.py @@ -0,0 +1,25 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class MaintenanceRequest(models.Model): + + _inherit = "maintenance.request" + _rec_names_search = ["code"] + + code = fields.Char(readonly=True, copy=False, default="/") + + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + if vals.get("code", "/") == "/": + team_id = vals.get("maintenance_team_id") + sequence = self.env["maintenance.team"].browse( + team_id + ).sequence_id or self.env.ref( + "maintenance_request_sequence.seq_maintenance_request_auto" + ) + vals["code"] = sequence.next_by_id() + return super().create(vals_list) diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/models/maintenance_team.py b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/models/maintenance_team.py new file mode 100644 index 0000000..3dff2aa --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/models/maintenance_team.py @@ -0,0 +1,58 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class MaintenanceTeam(models.Model): + + _inherit = "maintenance.team" + + code_prefix = fields.Char( + string="Prefix for Team Reference", + help="Prefix used to generate the internal reference for re " + "created with this category. If blank the " + "default sequence will be used.", + ) + sequence_id = fields.Many2one( + comodel_name="ir.sequence", + string="Team Sequence", + copy=False, + readonly=True, + ) + + @api.model + def _prepare_ir_sequence(self, prefix): + """Prepare the vals for creating the sequence + :param prefix: a string with the prefix of the sequence. + :return: a dict with the values. + """ + vals = { + "name": "Maintenance Request " + prefix, + "code": "maintenance.request - " + prefix, + "padding": 5, + "prefix": prefix, + "company_id": False, + } + return vals + + def write(self, vals): + prefix = vals.get("code_prefix") + if prefix: + for rec in self: + if rec.sequence_id: + rec.sudo().sequence_id.prefix = prefix + else: + seq_vals = self._prepare_ir_sequence(prefix) + rec.sequence_id = self.env["ir.sequence"].create(seq_vals) + return super().write(vals) + + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + prefix = vals.get("code_prefix") + if prefix: + seq_vals = self._prepare_ir_sequence(prefix) + sequence = self.env["ir.sequence"].create(seq_vals) + vals["sequence_id"] = sequence.id + return super().create(vals_list) diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..6b7b018 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Jaime Arroyo +* Christian Ramos diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/readme/DESCRIPTION.rst new file mode 100644 index 0000000..31ac741 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +Adds a sequence field to maintenance teams. Maintenance requests will follow +the sequence of its team. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/static/description/index.html new file mode 100644 index 0000000..cef57f6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/static/description/index.html @@ -0,0 +1,425 @@ + + + + + +Maintenance Request Sequence + + + +
+

Maintenance Request Sequence

+ + +

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

+

Adds a sequence field to maintenance teams. Maintenance requests will follow +the sequence of its team.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Creu Blanca
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/tests/__init__.py new file mode 100644 index 0000000..a7c5168 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/tests/__init__.py @@ -0,0 +1 @@ +from . import test_maintenance_request_sequence diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/tests/test_maintenance_request_sequence.py b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/tests/test_maintenance_request_sequence.py new file mode 100644 index 0000000..6af4acc --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/tests/test_maintenance_request_sequence.py @@ -0,0 +1,35 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests.common import TransactionCase + + +class TestMaintenanceRequestSequence(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.team_id = cls.env["maintenance.team"].create( + {"name": "Maintenance Team", "code_prefix": "MT-TEST"} + ) + cls.team_id_2 = cls.env["maintenance.team"].create({"name": "Maintenance Team"}) + + def test_maintenance_request_sequence(self): + sequence = self.env["ir.sequence"].search([("prefix", "=", "MT-TEST")]) + self.assertTrue(sequence) + + self.assertFalse(self.team_id_2.sequence_id) + self.team_id_2.write({"code_prefix": "TEAM2-TEST"}) + self.assertTrue(self.team_id_2.sequence_id) + + request_1 = self.env["maintenance.request"].create( + {"name": "Req 1", "maintenance_team_id": self.team_id.id} + ) + self.assertIn("MT-TEST", request_1.code) + self.team_id.write({"code_prefix": "MT-TEST-2"}) + request_2 = self.env["maintenance.request"].create( + {"name": "Req 2", "maintenance_team_id": self.team_id.id} + ) + self.assertIn("MT-TEST-2", request_2.code) + + res = self.env["maintenance.request"].name_search(request_2.code) + self.assertTrue(res) diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/views/maintenance_request.xml b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/views/maintenance_request.xml new file mode 100644 index 0000000..9c01361 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/views/maintenance_request.xml @@ -0,0 +1,61 @@ + + + + + maintenance.request.form (in maintenance_request_sequence) + maintenance.request + + + + + + + + + + + maintenance.request.search (in maintenance_request_sequence) + maintenance.request + + + + + + + + + maintenance.request.tree (in maintenance_request_sequence) + maintenance.request + + + + + + + + + maintenance.request.tree (in maintenance_request_sequence) + maintenance.request + + + + ( + + ) + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/views/maintenance_team.xml b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/views/maintenance_team.xml new file mode 100644 index 0000000..de59677 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/maintenance_request_sequence/views/maintenance_team.xml @@ -0,0 +1,41 @@ + + + + + maintenance.team.form (in maintenance_request_sequence) + maintenance.team + + + + + + + + + + + maintenance.team.tree (in maintenance_request_sequence) + maintenance.team + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_request_sequence/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_request_sequence/pyproject.toml new file mode 100644 index 0000000..e98802c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_sequence/pyproject.toml @@ -0,0 +1,43 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_request_sequence" +version = "16.0.0" +description = "Maintenance Request Sequence - + Adds sequence to maintenance requests" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-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_request_sequence"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/README.md b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/README.md new file mode 100644 index 0000000..3e99940 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/README.md @@ -0,0 +1,44 @@ +# Maintenance Request Stage transition + +Odoo addon: maintenance_request_stage_transition + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_request_stage_transition +``` + +## Dependencies + +This addon depends on: +- maintenance + +## Manifest Information + +- **Name**: Maintenance Request Stage transition +- **Version**: 16.0.1.0.0 +- **Category**: N/A +- **License**: AGPL-3 +- **Installable**: False + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_request_stage_transition`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/ARCHITECTURE.md new file mode 100644 index 0000000..cf0059b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/ARCHITECTURE.md @@ -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_request_stage_transition Module - maintenance_request_stage_transition + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/CONFIGURATION.md new file mode 100644 index 0000000..8fd24c5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_request_stage_transition. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/DEPENDENCIES.md new file mode 100644 index 0000000..a7cb7c6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/DEPENDENCIES.md @@ -0,0 +1,5 @@ +# Dependencies + +This addon depends on: + +- [maintenance](https://github.com/bringout/oca-ocb-vertical-industry/tree/a60a29f57ff34f3c01d0521d0a6003956d80acd9/odoo-bringout-oca-ocb-maintenance) diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/FAQ.md new file mode 100644 index 0000000..cf2d731 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/FAQ.md @@ -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_request_stage_transition or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/INSTALL.md new file mode 100644 index 0000000..14f301a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_request_stage_transition" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_request_stage_transition" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/MODELS.md new file mode 100644 index 0000000..6c597f7 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/MODELS.md @@ -0,0 +1,13 @@ +# Models + +Detected core models and extensions in maintenance_request_stage_transition. + +```mermaid +classDiagram + class maintenance_request + class maintenance_stage +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/OVERVIEW.md new file mode 100644 index 0000000..907f134 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_request_stage_transition. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_request_stage_transition +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/SECURITY.md new file mode 100644 index 0000000..e07da9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/SECURITY.md @@ -0,0 +1,8 @@ +# Security + +This module does not define custom security rules or access controls beyond Odoo defaults. + +Default Odoo security applies: +- Base user access through standard groups +- Model access inherited from dependencies +- No custom row-level security rules diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/USAGE.md new file mode 100644 index 0000000..24f406b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/USAGE.md @@ -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_request_stage_transition +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/README.rst b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/README.rst new file mode 100644 index 0000000..6053854 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/README.rst @@ -0,0 +1,95 @@ +==================================== +Maintenance Request Stage transition +==================================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:5ab612a310033343be9b0e8e3f1454d7c497156c43216258be915c1c8349fcb1 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_request_stage_transition + :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_request_stage_transition + :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| + +It allows to define the next stages of a stage and shows them on the header buttons. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +* Access `Maintenance > Configuration > Maintenance Stages` +* Define the possible next stages of every stage +* You can specify the color of the button if needed +* Refresh the page in order to show the new possible stages +* The stage widget will be blocked and the expected button will appear on the header. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Creu Blanca + +Contributors +~~~~~~~~~~~~ + +* Enric Tobella +* Jaime Arroyo +* David Alonso + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-etobella| image:: https://github.com/etobella.png?size=40px + :target: https://github.com/etobella + :alt: etobella + +Current `maintainer `__: + +|maintainer-etobella| + +This module is part of the `OCA/maintenance `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/__init__.py b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/__manifest__.py new file mode 100644 index 0000000..143c56a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/__manifest__.py @@ -0,0 +1,16 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Maintenance Request Stage transition", + "summary": """ + Manage transition visibility and management between stages""", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "Creu Blanca,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/maintenance", + "depends": ["maintenance"], + "data": ["views/maintenance_request.xml", "views/maintenance_stage.xml"], + "demo": ["data/demo_maintenance_request_stage_transition.xml"], + "maintainers": ["etobella"], +} diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/data/demo_maintenance_request_stage_transition.xml b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/data/demo_maintenance_request_stage_transition.xml new file mode 100644 index 0000000..756abfa --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/data/demo_maintenance_request_stage_transition.xml @@ -0,0 +1,19 @@ + + + info + + + + warning + + + + success + + + danger + + diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/i18n/bs.po new file mode 100644 index 0000000..22b52ab --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/i18n/bs.po @@ -0,0 +1,81 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_request_stage_transition +# +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_request_stage_transition +#: model:ir.model.fields,field_description:maintenance_request_stage_transition.field_maintenance_stage__button_class +msgid "Button Class" +msgstr "Klasa dugmeta" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__danger +msgid "Danger" +msgstr "Opasnost" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields,help:maintenance_request_stage_transition.field_maintenance_stage__button_class +msgid "For default, the system uses primary" +msgstr "Podrazumijevano, sistem koristi primarno" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__info +msgid "Info" +msgstr "Informacija" + +#. module: maintenance_request_stage_transition +#: model:ir.model,name:maintenance_request_stage_transition.model_maintenance_request +msgid "Maintenance Request" +msgstr "Zahtjev za održavanje" + +#. module: maintenance_request_stage_transition +#: model:ir.model,name:maintenance_request_stage_transition.model_maintenance_stage +msgid "Maintenance Stage" +msgstr "Faza održavanja" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields,field_description:maintenance_request_stage_transition.field_maintenance_stage__next_stage_ids +msgid "Next stages" +msgstr "Sljedeće faze" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields,field_description:maintenance_request_stage_transition.field_maintenance_stage__previous_stage_ids +msgid "Previous stages" +msgstr "Prethodne faze" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__primary +msgid "Primary" +msgstr "Primarno" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields,field_description:maintenance_request_stage_transition.field_maintenance_request__stage_id +msgid "Stage" +msgstr "Faza" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__success +msgid "Success" +msgstr "Uspjeh" + +#. module: maintenance_request_stage_transition +#. odoo-python +#: code:addons/maintenance_request_stage_transition/models/maintenance_stage.py:0 +#, python-format +msgid "To %s" +msgstr "Za %s" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__warning +msgid "Warning" +msgstr "Upozorenje" diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/i18n/es.po new file mode 100644 index 0000000..a5f8b22 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/i18n/es.po @@ -0,0 +1,84 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_request_stage_transition +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-07-22 23:09+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields,field_description:maintenance_request_stage_transition.field_maintenance_stage__button_class +msgid "Button Class" +msgstr "Clase del Botón" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__danger +msgid "Danger" +msgstr "Peligro" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields,help:maintenance_request_stage_transition.field_maintenance_stage__button_class +msgid "For default, the system uses primary" +msgstr "Por defecto, el sistema usa Primario" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__info +msgid "Info" +msgstr "Info" + +#. module: maintenance_request_stage_transition +#: model:ir.model,name:maintenance_request_stage_transition.model_maintenance_request +msgid "Maintenance Request" +msgstr "Petición de mantenimiento" + +#. module: maintenance_request_stage_transition +#: model:ir.model,name:maintenance_request_stage_transition.model_maintenance_stage +msgid "Maintenance Stage" +msgstr "Estado" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields,field_description:maintenance_request_stage_transition.field_maintenance_stage__next_stage_ids +msgid "Next stages" +msgstr "Próximos estados" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields,field_description:maintenance_request_stage_transition.field_maintenance_stage__previous_stage_ids +msgid "Previous stages" +msgstr "Estados previos" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__primary +msgid "Primary" +msgstr "Primario" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields,field_description:maintenance_request_stage_transition.field_maintenance_request__stage_id +msgid "Stage" +msgstr "Etapa/fase" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__success +msgid "Success" +msgstr "Éxito" + +#. module: maintenance_request_stage_transition +#. odoo-python +#: code:addons/maintenance_request_stage_transition/models/maintenance_stage.py:0 +#, python-format +msgid "To %s" +msgstr "A %s" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__warning +msgid "Warning" +msgstr "Advertencia" diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/i18n/it.po new file mode 100644 index 0000000..a3d5953 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/i18n/it.po @@ -0,0 +1,84 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_request_stage_transition +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-07-28 09:49+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields,field_description:maintenance_request_stage_transition.field_maintenance_stage__button_class +msgid "Button Class" +msgstr "Classe pulsante" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__danger +msgid "Danger" +msgstr "Pericolo" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields,help:maintenance_request_stage_transition.field_maintenance_stage__button_class +msgid "For default, the system uses primary" +msgstr "Il sistema usa come predefinito Primaria" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__info +msgid "Info" +msgstr "Informazioni" + +#. module: maintenance_request_stage_transition +#: model:ir.model,name:maintenance_request_stage_transition.model_maintenance_request +msgid "Maintenance Request" +msgstr "Richiesta manutenzione" + +#. module: maintenance_request_stage_transition +#: model:ir.model,name:maintenance_request_stage_transition.model_maintenance_stage +msgid "Maintenance Stage" +msgstr "Fase manutenzione" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields,field_description:maintenance_request_stage_transition.field_maintenance_stage__next_stage_ids +msgid "Next stages" +msgstr "Fase successiva" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields,field_description:maintenance_request_stage_transition.field_maintenance_stage__previous_stage_ids +msgid "Previous stages" +msgstr "Fase precedente" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__primary +msgid "Primary" +msgstr "Primaria" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields,field_description:maintenance_request_stage_transition.field_maintenance_request__stage_id +msgid "Stage" +msgstr "Fase" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__success +msgid "Success" +msgstr "Successo" + +#. module: maintenance_request_stage_transition +#. odoo-python +#: code:addons/maintenance_request_stage_transition/models/maintenance_stage.py:0 +#, python-format +msgid "To %s" +msgstr "A %s" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__warning +msgid "Warning" +msgstr "Attenzione" diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/i18n/maintenance_request_stage_transition.pot b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/i18n/maintenance_request_stage_transition.pot new file mode 100644 index 0000000..bfd74fc --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/i18n/maintenance_request_stage_transition.pot @@ -0,0 +1,81 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_request_stage_transition +# +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_request_stage_transition +#: model:ir.model.fields,field_description:maintenance_request_stage_transition.field_maintenance_stage__button_class +msgid "Button Class" +msgstr "" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__danger +msgid "Danger" +msgstr "" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields,help:maintenance_request_stage_transition.field_maintenance_stage__button_class +msgid "For default, the system uses primary" +msgstr "" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__info +msgid "Info" +msgstr "" + +#. module: maintenance_request_stage_transition +#: model:ir.model,name:maintenance_request_stage_transition.model_maintenance_request +msgid "Maintenance Request" +msgstr "" + +#. module: maintenance_request_stage_transition +#: model:ir.model,name:maintenance_request_stage_transition.model_maintenance_stage +msgid "Maintenance Stage" +msgstr "" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields,field_description:maintenance_request_stage_transition.field_maintenance_stage__next_stage_ids +msgid "Next stages" +msgstr "" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields,field_description:maintenance_request_stage_transition.field_maintenance_stage__previous_stage_ids +msgid "Previous stages" +msgstr "" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__primary +msgid "Primary" +msgstr "" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields,field_description:maintenance_request_stage_transition.field_maintenance_request__stage_id +msgid "Stage" +msgstr "" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__success +msgid "Success" +msgstr "" + +#. module: maintenance_request_stage_transition +#. odoo-python +#: code:addons/maintenance_request_stage_transition/models/maintenance_stage.py:0 +#, python-format +msgid "To %s" +msgstr "" + +#. module: maintenance_request_stage_transition +#: model:ir.model.fields.selection,name:maintenance_request_stage_transition.selection__maintenance_stage__button_class__warning +msgid "Warning" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/models/__init__.py new file mode 100644 index 0000000..ef1710d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/models/__init__.py @@ -0,0 +1,2 @@ +from . import maintenance_stage +from . import maintenance_request diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/models/maintenance_request.py b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/models/maintenance_request.py new file mode 100644 index 0000000..997d39c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/models/maintenance_request.py @@ -0,0 +1,43 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from lxml import etree + +from odoo import api, fields, models + +from odoo.addons.base.models import ir_ui_view + + +class MaintenanceRequest(models.Model): + + _inherit = "maintenance.request" + + stage_id = fields.Many2one("maintenance.stage", readonly=True) + + @api.model + def get_view(self, view_id=None, view_type="form", **options): + res = super().get_view(view_id=view_id, view_type=view_type, **options) + if view_type == "form": + doc = etree.XML(res["arch"]) + stages = self.env["maintenance.stage"].search([], order="sequence desc") + header = doc.xpath("//form/header")[0] + for stage in stages: + node = stage._get_stage_node() + self._setup_modifiers(node) + header.insert(0, node) + res["arch"] = etree.tostring(doc, encoding="unicode") + return res + + def set_maintenance_stage(self): + if not self.env.context.get("next_stage_id"): + return {} + return self._set_maintenance_stage(self.env.context.get("next_stage_id")) + + def _set_maintenance_stage(self, stage_id): + self.write({"stage_id": stage_id}) + + @api.model + def _setup_modifiers(self, node): + modifiers = {} + ir_ui_view.transfer_node_to_modifiers(node, modifiers) + ir_ui_view.transfer_modifiers_to_node(modifiers, node) diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/models/maintenance_stage.py b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/models/maintenance_stage.py new file mode 100644 index 0000000..9d66ae6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/models/maintenance_stage.py @@ -0,0 +1,58 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import json + +from lxml import etree + +from odoo import _, fields, models + + +class MaintenanceStage(models.Model): + + _inherit = "maintenance.stage" + + next_stage_ids = fields.Many2many( + "maintenance.stage", + string="Next stages", + relation="maintenance_stage_next_stage", + column1="stage_id", + column2="next_stage_id", + ) + previous_stage_ids = fields.Many2many( + "maintenance.stage", + string="Previous stages", + relation="maintenance_stage_next_stage", + column1="next_stage_id", + column2="stage_id", + ) + button_class = fields.Selection( + [ + ("primary", "Primary"), + ("info", "Info"), + ("success", "Success"), + ("warning", "Warning"), + ("danger", "Danger"), + ], + help="For default, the system uses primary", + ) + + def _get_stage_node_attrs(self): + return {"invisible": [("stage_id", "not in", self.previous_stage_ids.ids)]} + + def _get_stage_node_name(self): + return _("To %s") % self.name + + def _get_stage_node(self): + return etree.Element( + "button", + attrib={ + "name": "set_maintenance_stage", + "id": str(self.id), + "type": "object", + "class": "btn-%s" % (self.button_class or "primary"), + "context": json.dumps({"next_stage_id": self.id}), + "attrs": json.dumps(self._get_stage_node_attrs()), + "string": self._get_stage_node_name(), + }, + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..73abe29 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* Enric Tobella +* Jaime Arroyo +* David Alonso diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/readme/DESCRIPTION.rst new file mode 100644 index 0000000..8ee24d5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +It allows to define the next stages of a stage and shows them on the header buttons. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/readme/USAGE.rst b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/readme/USAGE.rst new file mode 100644 index 0000000..9345f50 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/readme/USAGE.rst @@ -0,0 +1,5 @@ +* Access `Maintenance > Configuration > Maintenance Stages` +* Define the possible next stages of every stage +* You can specify the color of the button if needed +* Refresh the page in order to show the new possible stages +* The stage widget will be blocked and the expected button will appear on the header. diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/static/description/index.html new file mode 100644 index 0000000..383ae7b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/static/description/index.html @@ -0,0 +1,436 @@ + + + + + + +Maintenance Request Stage transition + + + +
+

Maintenance Request Stage transition

+ + +

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

+

It allows to define the next stages of a stage and shows them on the header buttons.

+

Table of contents

+ +
+

Usage

+
    +
  • Access Maintenance > Configuration > Maintenance Stages
  • +
  • Define the possible next stages of every stage
  • +
  • You can specify the color of the button if needed
  • +
  • Refresh the page in order to show the new possible stages
  • +
  • The stage widget will be blocked and the expected button will appear on the header.
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Creu Blanca
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

Current maintainer:

+

etobella

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/tests/__init__.py new file mode 100644 index 0000000..de05063 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/tests/__init__.py @@ -0,0 +1 @@ +from . import test_flow diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/tests/test_flow.py b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/tests/test_flow.py new file mode 100644 index 0000000..c622803 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/tests/test_flow.py @@ -0,0 +1,61 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +import json + +from lxml import etree + +from odoo.tests.common import TransactionCase + + +class TestFlow(TransactionCase): + def setUp(self): + super().setUp() + self.request = self.env["maintenance.request"].create({"name": "Request"}) + self.original_stage = self.request.stage_id + self.last_stage = self.env["maintenance.stage"].create({"name": "Last state"}) + self.stage = self.env["maintenance.stage"].create( + {"name": "New state", "next_stage_ids": [(4, self.last_stage.id)]} + ) + self.original_stage.write({"next_stage_ids": [(4, self.stage.id)]}) + + def test_inverse(self): + self.assertIn(self.original_stage, self.stage.previous_stage_ids) + + def get_button(self, stage): + data = self.request.get_view(view_type="form") + form = etree.XML(data["arch"]) + path = "//header/button[@name='set_maintenance_stage' and @id='%s']" + button = form.xpath(path % stage.id)[0] + self.assertTrue(etree.iselement(button)) + return button + + def test_nochange(self): + self.request.set_maintenance_stage() + self.assertEqual(self.original_stage, self.request.stage_id) + + def test_form(self): + button_stage = self.get_button(self.stage) + attr_stage = json.loads(button_stage.attrib["modifiers"]) + self.assertNotIn( + self.request, + self.env["maintenance.request"].search(attr_stage["invisible"]), + ) + button = self.get_button(self.last_stage) + attr = json.loads(button.attrib["modifiers"]) + self.assertIn( + self.request, self.env["maintenance.request"].search(attr["invisible"]) + ) + getattr( + self.request.with_context(**json.loads(button_stage.attrib["context"])), + button.attrib["name"], + )() + self.request.env.invalidate_all() + self.assertEqual(self.request.stage_id, self.stage) + self.assertIn( + self.request, + self.env["maintenance.request"].search(attr_stage["invisible"]), + ) + self.assertNotIn( + self.request, self.env["maintenance.request"].search(attr["invisible"]) + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/views/maintenance_request.xml b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/views/maintenance_request.xml new file mode 100644 index 0000000..4e764d0 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/views/maintenance_request.xml @@ -0,0 +1,17 @@ + + + + + maintenance.request.tree (in maintenance_request_flow) + maintenance.request + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/views/maintenance_stage.xml b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/views/maintenance_stage.xml new file mode 100644 index 0000000..0502672 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/maintenance_request_stage_transition/views/maintenance_stage.xml @@ -0,0 +1,20 @@ + + + + + maintenance.stage.tree (in maintenance_request_flow) + maintenance.stage + + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/pyproject.toml new file mode 100644 index 0000000..cb0fafd --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_request_stage_transition/pyproject.toml @@ -0,0 +1,43 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_request_stage_transition" +version = "16.0.0" +description = "Maintenance Request Stage transition - + Manage transition visibility and management between stages" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-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_request_stage_transition"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_security/README.md b/odoo-bringout-oca-maintenance-maintenance_security/README.md new file mode 100644 index 0000000..d8c7d95 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/README.md @@ -0,0 +1,44 @@ +# Maintenance Security + +Odoo addon: maintenance_security + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_security +``` + +## Dependencies + +This addon depends on: +- maintenance + +## Manifest Information + +- **Name**: Maintenance Security +- **Version**: 16.0.2.0.0 +- **Category**: Tools +- **License**: AGPL-3 +- **Installable**: True + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_security`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_security/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_security/doc/ARCHITECTURE.md new file mode 100644 index 0000000..7142910 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/doc/ARCHITECTURE.md @@ -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_security Module - maintenance_security + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_security/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_security/doc/CONFIGURATION.md new file mode 100644 index 0000000..b5c1766 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_security. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_security/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_security/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_security/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_security/doc/DEPENDENCIES.md new file mode 100644 index 0000000..a7cb7c6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/doc/DEPENDENCIES.md @@ -0,0 +1,5 @@ +# Dependencies + +This addon depends on: + +- [maintenance](https://github.com/bringout/oca-ocb-vertical-industry/tree/a60a29f57ff34f3c01d0521d0a6003956d80acd9/odoo-bringout-oca-ocb-maintenance) diff --git a/odoo-bringout-oca-maintenance-maintenance_security/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_security/doc/FAQ.md new file mode 100644 index 0000000..4ab58cc --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/doc/FAQ.md @@ -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_security or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_security/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_security/doc/INSTALL.md new file mode 100644 index 0000000..ab74919 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_security" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_security" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_security/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_security/doc/MODELS.md new file mode 100644 index 0000000..04da338 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/doc/MODELS.md @@ -0,0 +1,12 @@ +# Models + +Detected core models and extensions in maintenance_security. + +```mermaid +classDiagram + class mail_followers +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_security/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_security/doc/OVERVIEW.md new file mode 100644 index 0000000..3718100 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_security. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_security +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_security/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_security/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_security/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_security/doc/SECURITY.md new file mode 100644 index 0000000..e07da9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/doc/SECURITY.md @@ -0,0 +1,8 @@ +# Security + +This module does not define custom security rules or access controls beyond Odoo defaults. + +Default Odoo security applies: +- Base user access through standard groups +- Model access inherited from dependencies +- No custom row-level security rules diff --git a/odoo-bringout-oca-maintenance-maintenance_security/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_security/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_security/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_security/doc/USAGE.md new file mode 100644 index 0000000..6df0b19 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/doc/USAGE.md @@ -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_security +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_security/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_security/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/README.rst b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/README.rst new file mode 100644 index 0000000..796dac8 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/README.rst @@ -0,0 +1,97 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +==================== +Maintenance Security +==================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:b105c5b92bfd0de1d123e30c541f9dec52d0e4f4af28d316f3242c7cf22a9e69 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/license-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_security + :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_security + :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 limits the Maintenance menu to users with any of the maintenance groups. + +It also removes the assignation mail when a user with no permission is assigned to an +equipment, as if not, the mail will contain a link to it. + +Additionally, it will remove the inheritance of equipment manager maintenance group by HR users (hr.group_hr_user) to further decouple the modules. The group can still be manually assigned to the user. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* `Tecnativa `_ + + * Pedro M. Baeza + * Víctor Martínez + * Carolina Fernandez + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-victoralmau| image:: https://github.com/victoralmau.png?size=40px + :target: https://github.com/victoralmau + :alt: victoralmau + +Current `maintainer `__: + +|maintainer-victoralmau| + +This module is part of the `OCA/maintenance `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/__init__.py b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/__manifest__.py new file mode 100644 index 0000000..14beeea --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/__manifest__.py @@ -0,0 +1,18 @@ +# Copyright 2023 Tecnativa - Víctor Martínez +# Copyright 2023 Tecnativa - Pedro M. Baeza +# Copyright 2023 Tecnativa - Carolina Fernandez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + "name": "Maintenance Security", + "version": "16.0.2.0.0", + "category": "Tools", + "website": "https://github.com/OCA/maintenance", + "author": "Tecnativa, Odoo Community Association (OCA)", + "license": "AGPL-3", + "depends": ["maintenance"], + "data": [ + "views/maintenance_views.xml", + ], + "installable": True, + "maintainers": ["victoralmau"], +} diff --git a/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/i18n/bs.po new file mode 100644 index 0000000..9ccce97 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/i18n/bs.po @@ -0,0 +1,19 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_security +# +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_security +#: model:ir.model,name:maintenance_security.model_mail_followers +msgid "Document Followers" +msgstr "Pratioci dokumenta" diff --git a/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/i18n/es.po new file mode 100644 index 0000000..6a09419 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/i18n/es.po @@ -0,0 +1,23 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_security +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-07-12 12:25+0000\n" +"PO-Revision-Date: 2023-09-02 18:22+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: \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_security +#: model:ir.model,name:maintenance_security.model_mail_followers +msgid "Document Followers" +msgstr "Seguidores del documento" diff --git a/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/i18n/it.po new file mode 100644 index 0000000..5ef2579 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/i18n/it.po @@ -0,0 +1,22 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_security +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-08-01 12:12+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_security +#: model:ir.model,name:maintenance_security.model_mail_followers +msgid "Document Followers" +msgstr "Chi segue il documento" diff --git a/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/i18n/maintenance_security.pot b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/i18n/maintenance_security.pot new file mode 100644 index 0000000..98e1b98 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/i18n/maintenance_security.pot @@ -0,0 +1,19 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_security +# +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_security +#: model:ir.model,name:maintenance_security.model_mail_followers +msgid "Document Followers" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/models/__init__.py new file mode 100644 index 0000000..6aa8c7d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/models/__init__.py @@ -0,0 +1 @@ +from . import mail_followers diff --git a/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/models/mail_followers.py b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/models/mail_followers.py new file mode 100644 index 0000000..0aeceae --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/models/mail_followers.py @@ -0,0 +1,37 @@ +# Copyright 2023 Tecnativa - Víctor Martínez +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +from odoo import fields, models + + +class Followers(models.Model): + _inherit = "mail.followers" + + def _add_followers( + self, + res_model, + res_ids, + partner_ids, + subtypes, + check_existing=False, + existing_policy="skip", + ): + """We need to prevent a partner without Maintenance permission from being + a follower of mt_mat_assign.""" + if res_model == "maintenance.equipment": + partner_model = self.env["res.partner"] + group = "maintenance.group_equipment_manager" + subtype = self.env.ref("maintenance.mt_mat_assign") + for partner_id in partner_ids: + if subtype.id in subtypes[partner_id]: + partner = partner_model.browse(partner_id) + user = fields.first(partner.user_ids) + if not user or (user and not user.has_group(group)): + subtypes[partner_id].remove(subtype.id) + return super()._add_followers( + res_model=res_model, + res_ids=res_ids, + partner_ids=partner_ids, + subtypes=subtypes, + check_existing=check_existing, + existing_policy=existing_policy, + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..713dfda --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* `Tecnativa `_ + + * Pedro M. Baeza + * Víctor Martínez + * Carolina Fernandez diff --git a/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/readme/DESCRIPTION.rst new file mode 100644 index 0000000..8e2ba9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/readme/DESCRIPTION.rst @@ -0,0 +1,6 @@ +This module limits the Maintenance menu to users with any of the maintenance groups. + +It also removes the assignation mail when a user with no permission is assigned to an +equipment, as if not, the mail will contain a link to it. + +Additionally, it will remove the inheritance of equipment manager maintenance group by HR users (hr.group_hr_user) to further decouple the modules. The group can still be manually assigned to the user. \ No newline at end of file diff --git a/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4mJh`hQoG=rx_R+Sc;uILpV4%IBGajIv5xj zI14-?iy0VruY)k7lg8`{1_lPn64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xh zq!<_!7(87ZLn`LHt*tDHIlA-t`n>mR!&YzIGHsf8<B$$Um>gET_{naxk1`20D+ zGK1xw!NbPN2|bO89~+N%pEppq=(kLCGSX2uHprJ_E^{*IKIp)+&2id6vuztyvNuL$ zdA^-?<<(!k&+e;bY|S+1xq)99o0@Rk`trRhp89;eyjLw{_#}Fd?PYlPp~B|v=eA_19fIY=^}d z`Y&%tFz9&nD2bzqq3^N7Y3E5x%2bvfyytoH4a>tliVpGd_uqPi)yOgkI3;YpnXolV zu}g_VQNUGDSy{Q`_+thJ&q)fNm%Ljh{I-=l|6ob#z6OiuoDV+#yjCpp-J;>E$(bCp z!w(A@1ehEJBp7+vm>Cp=Iu%5?97SBcnhpjE?J=>;544!GndL*(UcJdDzeqD|zicr1 zB+Kr*e2YIu-<|%v(v6{Vhej6%TXV!XHp{%V<0*k8n&wuV=P@CM@diu2MB$aErCl1|Wb=;ABZB1k~ z_h&QV=Hey>W@hHnmI>mVimzY(p5dc*Bgd>DX4lfyQy6T{FBf#s-KW4IAt~voG%?}2 zOJGfAO3IUeZEbCtD^>imnJV_iO~0CT*NLN2#v@Eb^n2E$n76T&^VrXSeqiAj%%pL6 z(M63z4-G;E6g@93Q1QH-c5cqkoO^M3O$ND~1>fG>yv?b&U$JF}iYJpIOWNj{Uq6e? zyyrh@i3rn-v(L8ti2Ck5sU^Xn!$s-fqmD&8!UbA>zkc3 ziU$rHaF}~BqejMP^SKO@Lpf%~zhzJ8?7BL^L&eC8!E}XZr-w?DhsvZ!o>NpZPic2v zZennDcJ}v}bmWYc6NiqNx0n6;?MJl_Ph~m5wzO2CU4et6)k)K9kpf4)o6aPU zSLF3*ii(4Q#G1(}FI}BZR4GKRa9b>>Ho0?V>CUiyVM|Y{I+(E#x-H9v*zSvrgWYDY;)+L z0gK}V;lyYYskuU4kESR(7)UJnwx_#orq8lHUp~)#q$k=wg@|In{oEpvuoF`&Aya(%9u-w zvFYG~(+LKD+8*z?eUsUJd0b}i`QV<=&F8<_oqGLAPeEKYKzH7~F#Rs2V7sTu99b{D zCVfe>k=wt2;lhQskGp#XStm1G%qZ!;m|>&4zNY!$gk^WN7ha9pa%gH{(ZPx-wzK4a zs^6~dbYXf}Ah9rj<6}ikcpayr`AnZ>&w`ixLS?`q;$0^Y1a_@mf z-`D7@M|C=DD|DVsySJlicSFw06WZP9jHlfG9aUJY*r4LM;bsm;tJ8U|rVYFd$5v}R zo64{;qDS>uVa%*Z_7~UB86Q0#DtKm!oGQatmNYNz;MYqppMI*`m{quW>Edrbo|6*H zW(UT_ojaz@#?Jno$sscGrsypFbe^h=j6G3~$4&#>dorqjo!*2RH}>j&R| z8x}wFiC7!vG3kg}43o$2X~}DTIjWtwe8pKww|8!s(b|H_sxQ&`|B4&WrZt~_np7-W zU0r?g>eZ=gsmGf4tmo@LaD zn!M^+c;6^|ZJtJ_!~f?_0!|#KPM=QPew$I{?$xzx*Gfo9ow8h;b3&W($;?kbYdBb# zW>^-hb#--JdURp>i7T=hGrO~{U;P!l^~=+#UhL^k3k7CpEUM{ua`5D;Y!wq1U%X^V z%h~D|@7^7oX`CMN{w(_^J;o=J-YP;F+1bvnuB@w8t-9pnC>0+0z^f=FXxf*o^HJv) z-v6?A%><{8GSeA8YCB@|(mGk19ZSl}ltj3m?!EL>LxWM{Po4c_wxdUnW{S>VJHdGC zjG8Cr)0@tg$653>AAXqNHBW)#L)G3FZ{Mb#pR9b}WyS_sCzn7McX#$Ve(GswW=yl9))tt96$K7#7I?tqQ`>OtGSz-n^)=DOg?8EC*s3-h3Rg`!tL9| z4<-m~-MZCarVnf4cDW0RFP(%O{2XSVZJRVn$ZglZe{~gm~^x#st$phB>A=9iiSO6EXp3PI@wy_#!?q(vZ^qd)0Vjb@mkW3A_D-BQam%S|K`u`d zv%2GsH#LiBqm@+k$s*3kLWXafa;HYui`TE6 z{r&sj*@&ECVo-Br%82bhnq*P?%S1~{D%|2UTHTTSZ0j|~y zH*a=U*sNQ*J7Zx$+RG(nj9C&A5(h3^5Xj2Py7Ayl#b@J-TnfhvHMF#n_zVI?9)7J7 zZ_-w*eGP) z3RLx9tMoLWtTt-KH6exRO>%N_$4;E!Shad}@ST%CUF=jC-a5_kQ;$xV<)QN6Yn7pq z(V<5x9M>*Q-}FCoj^=8XXTftWO@H_DrDI^A;GMkfuVk8QY|?FhZoBjvk$H8{E>N^^@;Gp0FH?sEUBrf8k(9Xqjx=CS+n>esJ&%&-cYRj;OnnSLY*t@ z*iYP@c3sJ7pH!41M}Wp;*GVcr{?@fPDekzNcUALgvg^9aG7FgvH*?NxS-dt*S9hz| zmF!z-MV!x>gLiRXa59l{4G$Oh^7j6$#9K6xNo_Lc(W6J#XiG^-HlBZ;{I8m8tyhpV z=he?Sy7y0180PL`FlAwCoU`;`gs-DjmizN3f#usSO`h&~B)x0;$vfIdBp8lvdByZ( z0jpsD@r!rw@-Dy3IsNof%{t>=tF+VWuV%I0%}by4{lNo;KXvxElgy&!u6|mgdh6<= z)pyNR*D~l9PUCk<`8Rc5rJo&D3tgEOU+h@4Na@+h$CYw+^Z6eZSR}`7`8023 z($ni(OBkPStx34$!C`FMEY~_FTTjpe)!-$MXBCJ>(~2-o(#6L z4)>2!>$R7jxNME6LEwpHiNTXECT&cSjaf8r&!R<(L{#+!I1(~4JU&-uoeynG-DN&| zsY3m9pL>TsCV2I+rZ_DV56{-z7{OCpTdSd`=O_5GC}M5cvy;q|q|Lv4|DL{PLCmk> zwSP1(Ul#ftrE-FuYY|J@sRX^5*Ntu#^=f+xwY9ek_PPbe#LU^GX>#>L;}SkY1A~SP z6RTx^Rz3AxUvGbV#eAc@eYQ%=@cZwZ8KoF< zKB!6XELy%?ed(v;v-EeyE&LX(&HL2!SG3%^J>`2eGQ*;2T?H9B-P`ZT<1nDK4Dd+|<V8ya+Ae>& zc#)%f88(!>yrf;Sw}Fi-o7Lk0&wl3fIdwd2%O!X3yV;z3dt0MGQ}+73V%*|-XKpY4 za^p@_)UAjK-Rl z9%!O5PluQzSVfB)i*i?=s7i(|vdj3b|(p1xVM%W1-b1ijsj`sWlBRr{lg zD^G3wG(9}|9e?FxO-k6KF+(V#G*kB0Ju9Zk2RWLJzpC(^=NCIw=Wbh;#%&5lgX(40^uYHXSwpdfHypTB+U$&^D~PftHA z+wJIaslI5%PD{(%83_%%rO&HP4Au)dy!-G_Monb)TMl(4k1y^)66XtLPD$Bn#04}O zw?_$D+s+9VU*K*d-Rm}G%9IV6(VZ?#O$r;9Mn=61+-`99rixg%q72{WwTVS1owt3L zkdr&Me10w4}9`wIcoZ)cW1*E6cydfF|(NKC&9zkv8W?LhpqYG1hs$06OTVE*uW*g!uYUY#@ZJr z-8?FHe2SKPe)+tev(m%^uHvy%HhEk9oin{)aQoEyEzi+<9L?fx`Yd^dU(y?NZ=|8U6r4;<>im~PTom=eeOYyZbZ`Q_YiriU$Fxw3O++Tp{8GjelXBO@il*2bLF z3S0Z&shr0yWA)sRS!-o3q~E{1^8UpPk&O{Ob9vG>MwpzJn6&)o*N=~1ym@h;z<`5c z#rpNfA93p)_$aK-;CYC(TWn+Xlb~_%Do@PJ#jpLJvO6$r{ztN z8<#nq8U-0xI0GHlpFdvqX3_4>&o=%4{?*m|J1V}4*;K5XRaI3rr=PLPL-_7Oli=$U zecw;;X5M{wo)Yh(iy60C0#c94SX2nO_sgYD_1`_+!=!6-`uR<=P8v_v?q9sPxpj4< z-p@lVJ{&9mw{PY6d-=CT@dD9>4gycTR|RffD7Sb0e1{4JjtMD>eEj^(3_LRJrPE{C zrk`$2Fz5(gyY@v!{_)0U_Koj0osMw4m17oWQSv$U=d~?ae>YyMH`RDN!$-|xu3wpy zgso4MCa=;&j(^+o<^R;#uL;u@(}`g45OUyoi z98Ay7&OW~GVvX-f&xImct-BvRTwVAk-p=ts3xE3lm(JJM33q%vY3HZZFwyvcRa8f5 z@iT+X$6uBtJ^l2wKt%N6jg83`1s@dF?fT?(Z9R8WgNqVl^T7#08Z$i>Ea$%P>AkR1 zKu8G7=9_1}G-jA|xhOI2zRMRV@ZsO@_sJ?Ehk7K93tp;DU$R8gQ>f*lUS2{1sAo}{ z`}gnP47(bMg#jGXW2-cs77Ao#X9w?U*R&O5$k=X@q!6*|X;I0ZN|Cp__q+A!&XXRCcrrm|)vvB${*gtao7f=b$h9YPmjU$fT`iJ^K0dftfrr%=6{;{duKb zGS{+ssrU4{*(WbPj#;c0VYw669(X;9$9M`Ev8CRa$FecZY4gWYOoGnySjf#%!!_ZDoCPYq$O` zj;mL%W>$tvr<`KvTE?7mI^pYg@g=Q=GVPl-8O^b+7Gtin*Seb*p(B>o?>(vIwEq4% zU%$q!pWf*+`)=RP;%5mbA03_bZAX;cSFt4;T@_Czx(o2NU%Ygwsa?KKBK!Kf)a%|} zULQWH&u@5ap%b-5!_|C&%7SOfnVFi`)<(DY+y9fWIe$27>!G)0$zNB6&ic9J#C8#l z6_OtRpErqWhdtQ){odh|lhqBEuj||TDME*hK{NZ)x4JKaw_~-%x*rB8G&r~OJ?#4W zIxswZ`ON)3|F?d4)UE&Mtoi*T-TyzapAov-!GGl9*5@i|u~!*5h4$Fmg38M^k((bB zSX?S$X87@BvVXv%qQuB#Wv#n;e?Cl$p5UR9U?O!{tvTZ?!>miO3`Z-D1V?6Sis?l( z1ncVl_|vVwq3WvEhnk|0z;#dNS{AqU-jd{DtFV#d;p0=1;CXa-Z?$3hyO@}Ld9l}Q zQctbc=(@2zUmn!3ICsu3C-##u&%PqAW((6Q;|KpY$e#ZH(rVl0bWcxCFE1|vzV_gf z=EL!IopJN|Mf1u}89#}B!uTq9zfmdc@6S|>{r~s<=Gj-sr?6UZcab^_~V24|8MVq`1bDZj-ShB2gJqA`xax$-nS_L)K=T`DL&pIDO{h& za6!>Yo-_Xs8VM|Cy|=%n_uSw64ihF>_et}xeX!}@oPOSDW1i8>3necEs;a6IOr$m@ z9p!2{oH*m`Gm-BmwcDarU;i~<-{;jK0jEie^RM(QKE9ICGbm&{o(okKdip(d=F>wN?-bw)R8-W5 zo5A%*Z$>a|zHYMMqr6_~_1Nz*O#eIOc;?GC-PwEd?bk>D_kLtsVP{Z86JrO2YaQhb9)`^h2O#+EN###s?n^D(1Bxe|(UC-Try9zm??IFHr8ec`E32 zy`90sZ026KECVQA&#-?bmAhj7adBVYjI69fy8>JN z;~Y*)NngBkr{{1xzxv&cU0bGpeA>aT^yAb28m{k)qD=lh7S+72;>l#uv@d^;fdtQt zotc6iiZ`dtnmwD5A$020jEoG2)Kt~o{dq=${l{`_UzbyQSz;XzjM1GcLYPjg>*S#s$8_ruRWFI=@s>+P;v z#wwnN7CyIQVbJ;c@YR+sMuz{-V+C9Uw`xCcGFI!1-d~{jN?gy!@cEPbUv6$;ys-Gm zN|D9Jldq=PhYCFocCHvj#--njYty&g*! z|7Q77V|R7S6$RIdFS6c#Nt&5!{7wrivbg{M&REcL_|NQV8-H80a!0?OeN0zNE2&s; zrAdd2l4R-Rn#Bu*oqF7q-;`NPzgcj2h0XcZe0MbJwJ!%Nciet^?AF$7!T#eP&so1; zuzY!YY`=?=#oddHo|7g>d{s?(_5J1Y;_rnXlUPLFHZ~iQHU^mPglHh9-?gUyrJV#2Sj%#+NMk9wGj#uk^6# zawhTr&tG3I;oSQ!dTrg@bFMuuN^gEdS}k20uzTH;xeP_cy;_w~!JDs4=#;qmZvD!Y z2j6bL+xF~Pnv883j}SxS^P4s{wq46qJPjt~@9lHH_fIB%Z>>N|NpJAiNi%o+xY)~Z zGH1KCDg*E7Yeg$fJXC~o%7jh(pL$)aW>xm5`@qN}&BW|+jcBy@FH z;?-553M~o$|NZ^(Y4!S&`~DmU??_8O{Jn_#-ZVc4r%j(Y3l5%L9k9Q$G^}v_)Ou4* zhr?4Z9Z4}dm|(EsBg-q5#fMLL$tJEjp$(ea*|mFjU{utpX$gTn?pI!~wb=Uq^Ru&u zFD4&1ab2PHP{%Fi&l5Kuleq^U%w&|XV19OQlTL0C+g^L|@40$^%@sY!^oOnVGzt!KWSS@-}L8$qPFjIod70ylQ2U%f4{7t;{ERe%IKQl$WQ^xxFs!TB>pW zm38SxZ=WQdxuYR$x{ay9{zu(uZKHkFm zS&NZF@s9QTJ)7^oEV1)A+~cOKrKNR4<$R9RUbkJzT$j6)r!!`4fiYlX>gj2(&GYX3m~r^w z3~MRA-FN#|ty(puS9{qE-G78GXK-_x^Y@0Uy7*7NHB{hZ6N zYhrttzWY5+1_Pl2hE;Wc9?QoU-Ok-^`>JT?v`f=B-OO3BZk^xl1(|C^SDE)D6%+_K zZ2EAwOEbzO=I7j%la4E~KDo}~=wKk>llj%=e0x+>RN3Db?)Ja(8Tyz!6#Uo5^)(4J zsLor%s@=fqZ~OHM|Mj)e-y3e`q%F6fI(_I~pAxoamFao>%+#>-BO*i*BY68&^k8h9zFjS67GY*MGU_{@*(_ z_36+7x8>vq3mTzxglvWi!4I``G9S7%w5_HMm& z_0cI+2UpkDRqFov`{!z|6Ju;TsL-^S+f8%V?%m&Q{(Lz6fA7wnKb;v4Yb30mo_vUd z!9YlWAyqqk-JTx@+2#NIoMTy>x8(ZSG~=wSEF-H4Dw^B({=IT3z>8t$aX)>=DG#eS z1Y~1Hb?p80ggU>xy|c6U_+@|lzg7)qJ`Ss=Cp&Q-kegLgt=w=ldVAj9XRlVT|5u%5 z#ME&5Y18q?o;OXCdCp(>{_V)Jw@Z#dn?k5&! zPUlu@WpL;+(O}*1<>~bJeXIBFt25r4XCn3RV?{tz)T-GmRi$jIj8_(1-F0Z{j> z9~RvD=>&>`?Dc!U9S^*`j=RC4>U~T2u_b~HsSlzvH#}Ik``xZb)1vc!R!={DG^{P? zuEOP$@;kM1(*(UYsz?{+*EWr%0!NEC|ND>K=TpI(@BY`A&c@fy zymjl=Rn|4noj5AR9kypIFNKgL4(&He%5F*C)k{C|MuqQ z=H%Dc)><>xbTV0%9P83_Wl(UH5@GytZ?eB#<(}0yUl#_f zc)ND{yWB7Fa^tKZG??(8_4v~j~zv#C?3 zeyFgKWS>6eVG-v7H-*%hE5813QrNIK`Kd+SpC7BY->Z79%`l7Mhaqe9UYX!o3?fEK zXCikNJv{{~$kdCUo!QwKXFmJv4AX3}IeyF68M5s9xkSaYz(PiH{@Spg&d$ytcilW$ zTu|@oXWOeV zzDn^0ZVZ((TbvYs)a;wG@mGe)t?k*@*U8@Ap8sFE;V^^K47as$eVLvhgVGoxe*O7; z{{EhdkB`oloNGLo02-FMUDlgaQ86QQ)2#N1v&yzyJw2~|+qP}7{`P;rtUi18?0lvd zjzw+fwq$)R^2ugm&{Q#CjM$ucd0A!o-O}rGKUuQ#wKE&1pK}QeEYjn;J1K0^k}bUR z8=ojn+PinJX1Bi6!hqZJ|9x40f8U2g-13j3FXu&VtFl~X%czm!vVwKPmy_!A_k1~} zy?)R643kZg9;T+IE7q>{Rct6?Tz&qzx8zn~7R8b$Cnkc!_CNOnhDl!crd)sb_0b$f zh6!rCVfxYAa*hf6+Y~Op)0na`A|NK_%rS-+o8CAmfEHkwTzyx**j9JL<~ zvRlhlKAG5Gz_+c+@|-6VLuOrb_cYz;u)hbG`R{1VFJACW<5Sh%YEX^W{_NQ^X9mCI zkdw^k_MT!tmk0{12MkvjGXC5=U$^bSwdnl4;qM%nCM~-goxgW$^6zhN=QCPxC^QxC zc%*qQlPN&s58Ga* Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/static/description/index.html new file mode 100644 index 0000000..e39e250 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/static/description/index.html @@ -0,0 +1,439 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + +
+

Maintenance Security

+ +

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

+

This module limits the Maintenance menu to users with any of the maintenance groups.

+

It also removes the assignation mail when a user with no permission is assigned to an +equipment, as if not, the mail will contain a link to it.

+

Additionally, it will remove the inheritance of equipment manager maintenance group by HR users (hr.group_hr_user) to further decouple the modules. The group can still be manually assigned to the user.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+
    +
  • Tecnativa
      +
    • Pedro M. Baeza
    • +
    • Víctor Martínez
    • +
    • Carolina Fernandez
    • +
    +
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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

+

Current maintainer:

+

victoralmau

+

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

+

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

+
+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/tests/__init__.py new file mode 100644 index 0000000..4239747 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/tests/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2023 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import test_maintenance_security diff --git a/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/tests/test_maintenance_security.py b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/tests/test_maintenance_security.py new file mode 100644 index 0000000..1a2ea47 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/tests/test_maintenance_security.py @@ -0,0 +1,71 @@ +# Copyright 2023 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests import common, new_test_user +from odoo.tests.common import users + +from odoo.addons.base.tests.common import DISABLED_MAIL_CONTEXT + + +class TestMaintenanceSecurity(common.TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.env = cls.env(context=dict(cls.env.context, **DISABLED_MAIL_CONTEXT)) + cls.user = new_test_user( + cls.env, + login="test-basic-user", + ) + cls.manager = new_test_user( + cls.env, + login="test-maintenance-user", + groups="maintenance.group_equipment_manager", + ) + cls.category = cls.env["maintenance.equipment.category"].create( + {"name": "Test category"} + ) + cls.equipment = cls.env["maintenance.equipment"].create( + { + "name": "Test equipment", + "category_id": cls.category.id, + } + ) + cls.maintenance_menus = [ + cls.env.ref("maintenance.menu_maintenance_title"), + cls.env.ref("maintenance.menu_m_dashboard"), + cls.env.ref("maintenance.menu_m_request"), + cls.env.ref("maintenance.menu_m_request_form"), + cls.env.ref("maintenance.menu_m_request_calendar"), + cls.env.ref("maintenance.menu_equipment_form"), + ] + + def test_maintenance_equipment_full(self): + mt_mat_assign = self.env.ref("maintenance.mt_mat_assign") + # Change to manager (with mt_mat_assign subtype) + self.equipment.write({"owner_user_id": self.manager.id}) + self.assertNotIn( + self.user.partner_id, + self.equipment.message_follower_ids.mapped("partner_id"), + ) + follower = self.equipment.message_follower_ids.filtered( + lambda x: x.partner_id == self.manager.partner_id + ) + self.assertIn(mt_mat_assign, follower.subtype_ids) + # Change to user (without mt_mat_assign subtype) + self.equipment.write({"owner_user_id": self.user.id}) + follower = self.equipment.message_follower_ids.filtered( + lambda x: x.partner_id == self.user.partner_id + ) + self.assertNotIn(mt_mat_assign, follower.subtype_ids) + + @users("test-basic-user") + def test_ir_ui_menu_user(self): + items = self.env["ir.ui.menu"]._visible_menu_ids() + for maintenance_menu in self.maintenance_menus: + self.assertFalse(maintenance_menu.id in items) + + @users("test-maintenance-user") + def test_ir_ui_menu_manager(self): + items = self.env["ir.ui.menu"]._visible_menu_ids() + for maintenance_menu in self.maintenance_menus: + self.assertTrue(maintenance_menu.id in items) diff --git a/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/views/maintenance_views.xml b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/views/maintenance_views.xml new file mode 100644 index 0000000..be0126b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/maintenance_security/views/maintenance_views.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_security/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_security/pyproject.toml new file mode 100644 index 0000000..d3a9298 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_security/pyproject.toml @@ -0,0 +1,42 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_security" +version = "16.0.0" +description = "Maintenance Security - Odoo addon" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-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_security"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/README.md b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/README.md new file mode 100644 index 0000000..8ce76c8 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/README.md @@ -0,0 +1,44 @@ +# Maintenance Team Hierarchy + +Odoo addon: maintenance_team_hierarchy + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_team_hierarchy +``` + +## Dependencies + +This addon depends on: +- maintenance + +## Manifest Information + +- **Name**: Maintenance Team Hierarchy +- **Version**: 16.0.1.0.0 +- **Category**: N/A +- **License**: AGPL-3 +- **Installable**: False + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_team_hierarchy`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/ARCHITECTURE.md new file mode 100644 index 0000000..c2de6f3 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/ARCHITECTURE.md @@ -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_team_hierarchy Module - maintenance_team_hierarchy + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/CONFIGURATION.md new file mode 100644 index 0000000..e7b24de --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_team_hierarchy. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/DEPENDENCIES.md new file mode 100644 index 0000000..a7cb7c6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/DEPENDENCIES.md @@ -0,0 +1,5 @@ +# Dependencies + +This addon depends on: + +- [maintenance](https://github.com/bringout/oca-ocb-vertical-industry/tree/a60a29f57ff34f3c01d0521d0a6003956d80acd9/odoo-bringout-oca-ocb-maintenance) diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/FAQ.md new file mode 100644 index 0000000..c47b3d1 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/FAQ.md @@ -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_team_hierarchy or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/INSTALL.md new file mode 100644 index 0000000..c195f6b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_team_hierarchy" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_team_hierarchy" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/MODELS.md new file mode 100644 index 0000000..81abd8e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/MODELS.md @@ -0,0 +1,12 @@ +# Models + +Detected core models and extensions in maintenance_team_hierarchy. + +```mermaid +classDiagram + class maintenance_team +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/OVERVIEW.md new file mode 100644 index 0000000..4e07ea6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_team_hierarchy. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_team_hierarchy +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/SECURITY.md new file mode 100644 index 0000000..e07da9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/SECURITY.md @@ -0,0 +1,8 @@ +# Security + +This module does not define custom security rules or access controls beyond Odoo defaults. + +Default Odoo security applies: +- Base user access through standard groups +- Model access inherited from dependencies +- No custom row-level security rules diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/USAGE.md new file mode 100644 index 0000000..b105ac6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/USAGE.md @@ -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_team_hierarchy +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/README.rst b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/README.rst new file mode 100644 index 0000000..f8854e9 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/README.rst @@ -0,0 +1,76 @@ +========================== +Maintenance Team Hierarchy +========================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:1eeb9da0bf387754bd445e6a0a03b562eb84c930e82590c0c0ffb31c922cb3c5 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_team_hierarchy + :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_team_hierarchy + :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 addon allows to define a hierarchy of teams and teams show the related requests + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Creu Blanca + +Contributors +~~~~~~~~~~~~ + +* Enric Tobella + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/maintenance `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/__init__.py b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/__manifest__.py new file mode 100644 index 0000000..345daab --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/__manifest__.py @@ -0,0 +1,15 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Maintenance Team Hierarchy", + "summary": """ + Create hierarchies on teams""", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "author": "Creu Blanca,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/maintenance", + "depends": ["maintenance"], + "data": ["views/maintenance_team.xml"], + "demo": ["demo/maintenance_team_demo.xml", "demo/maintenance_request_demo.xml"], +} diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/demo/maintenance_request_demo.xml b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/demo/maintenance_request_demo.xml new file mode 100644 index 0000000..0139ec3 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/demo/maintenance_request_demo.xml @@ -0,0 +1,21 @@ + + + + Very Serious Issue 1 + + + + + + Very Serious Issue 2 + + + + + + Very Serious Issue 3 + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/demo/maintenance_team_demo.xml b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/demo/maintenance_team_demo.xml new file mode 100644 index 0000000..32908f8 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/demo/maintenance_team_demo.xml @@ -0,0 +1,14 @@ + + + + Parent Team + + + Child Team 1 + + + + Child Team 2 + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/bs.po new file mode 100644 index 0000000..c0d5dd8 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/bs.po @@ -0,0 +1,79 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_team_hierarchy +# +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_team_hierarchy +#: model:maintenance.team,name:maintenance_team_hierarchy.equipment_team_child_1 +msgid "Child Team 1" +msgstr "Podređeni tim 1" + +#. module: maintenance_team_hierarchy +#: model:maintenance.team,name:maintenance_team_hierarchy.equipment_team_child_2 +msgid "Child Team 2" +msgstr "Podređeni tim 2" + +#. module: maintenance_team_hierarchy +#: model:ir.model,name:maintenance_team_hierarchy.model_maintenance_team +msgid "Maintenance Teams" +msgstr "Timovi za održavanje" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count +msgid "Number of Requests" +msgstr "Broj zahtjeva" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_block +msgid "Number of Requests Blocked" +msgstr "Broj blokiranih zahtjeva" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_date +msgid "Number of Requests Scheduled" +msgstr "Broj zakazanih zahtjeva" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_unscheduled +msgid "Number of Requests Unscheduled" +msgstr "Broj otkazanih zahtjeva" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_high_priority +msgid "Number of Requests in High Priority" +msgstr "Broj zahtjeva u visokom prioritetu" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__parent_id +msgid "Parent" +msgstr "Nasljeđeni" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__parent_path +msgid "Parent Path" +msgstr "Putanja nadređenih" + +#. module: maintenance_team_hierarchy +#: model:maintenance.team,name:maintenance_team_hierarchy.equipment_team_parent +msgid "Parent Team" +msgstr "Nadređeni tim" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__request_ids +msgid "Request" +msgstr "Zahtjev" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_ids +msgid "Requests" +msgstr "Zahtjevi" diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/es.po new file mode 100644 index 0000000..411c546 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/es.po @@ -0,0 +1,85 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_team_hierarchy +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-07-22 23:09+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_team_hierarchy +#: model:maintenance.team,name:maintenance_team_hierarchy.equipment_team_child_1 +msgid "Child Team 1" +msgstr "Equipo infantil 1" + +#. module: maintenance_team_hierarchy +#: model:maintenance.team,name:maintenance_team_hierarchy.equipment_team_child_2 +msgid "Child Team 2" +msgstr "Equipo infantil 2" + +#. module: maintenance_team_hierarchy +#: model:ir.model,name:maintenance_team_hierarchy.model_maintenance_team +msgid "Maintenance Teams" +msgstr "Equipos de Mantenimiento" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count +msgid "Number of Requests" +msgstr "Número de solicitudes" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_block +msgid "Number of Requests Blocked" +msgstr "Número de solicitudes bloqueadas" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_date +msgid "Number of Requests Scheduled" +msgstr "Número de solicitudes programadas" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_unscheduled +msgid "Number of Requests Unscheduled" +msgstr "Número de solicitudes no programadas" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_high_priority +msgid "Number of Requests in High Priority" +msgstr "Número de solicitudes de alta prioridad" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__parent_id +msgid "Parent" +msgstr "Padre" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__parent_path +msgid "Parent Path" +msgstr "ruta parental" + +#. module: maintenance_team_hierarchy +#: model:maintenance.team,name:maintenance_team_hierarchy.equipment_team_parent +msgid "Parent Team" +msgstr "equipo parental" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__request_ids +msgid "Request" +msgstr "Petición" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_ids +msgid "Requests" +msgstr "peticiones" + +#~ msgid "Parent Right" +#~ msgstr "Padre derecho" diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/it.po new file mode 100644 index 0000000..3fdb422 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/it.po @@ -0,0 +1,82 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_team_hierarchy +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-06-09 13:08+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_team_hierarchy +#: model:maintenance.team,name:maintenance_team_hierarchy.equipment_team_child_1 +msgid "Child Team 1" +msgstr "Discendente di Team 1" + +#. module: maintenance_team_hierarchy +#: model:maintenance.team,name:maintenance_team_hierarchy.equipment_team_child_2 +msgid "Child Team 2" +msgstr "Discendente di Team 2" + +#. module: maintenance_team_hierarchy +#: model:ir.model,name:maintenance_team_hierarchy.model_maintenance_team +msgid "Maintenance Teams" +msgstr "Team manutenzione" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count +msgid "Number of Requests" +msgstr "Numero richieste" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_block +msgid "Number of Requests Blocked" +msgstr "Numero di richieste bloccate" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_date +msgid "Number of Requests Scheduled" +msgstr "Numero di richieste schedulate" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_unscheduled +msgid "Number of Requests Unscheduled" +msgstr "Numero di richieste da schedulare" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_high_priority +msgid "Number of Requests in High Priority" +msgstr "Numero di richieste con alta priorità" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__parent_id +msgid "Parent" +msgstr "Padre" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__parent_path +msgid "Parent Path" +msgstr "Percorso padre" + +#. module: maintenance_team_hierarchy +#: model:maintenance.team,name:maintenance_team_hierarchy.equipment_team_parent +msgid "Parent Team" +msgstr "Team padre" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__request_ids +msgid "Request" +msgstr "Richiesta" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_ids +msgid "Requests" +msgstr "Richieste" diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/maintenance_team_hierarchy.pot b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/maintenance_team_hierarchy.pot new file mode 100644 index 0000000..66a9ba3 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/maintenance_team_hierarchy.pot @@ -0,0 +1,79 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_team_hierarchy +# +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_team_hierarchy +#: model:maintenance.team,name:maintenance_team_hierarchy.equipment_team_child_1 +msgid "Child Team 1" +msgstr "" + +#. module: maintenance_team_hierarchy +#: model:maintenance.team,name:maintenance_team_hierarchy.equipment_team_child_2 +msgid "Child Team 2" +msgstr "" + +#. module: maintenance_team_hierarchy +#: model:ir.model,name:maintenance_team_hierarchy.model_maintenance_team +msgid "Maintenance Teams" +msgstr "" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count +msgid "Number of Requests" +msgstr "" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_block +msgid "Number of Requests Blocked" +msgstr "" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_date +msgid "Number of Requests Scheduled" +msgstr "" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_unscheduled +msgid "Number of Requests Unscheduled" +msgstr "" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_high_priority +msgid "Number of Requests in High Priority" +msgstr "" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__parent_id +msgid "Parent" +msgstr "" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__parent_path +msgid "Parent Path" +msgstr "" + +#. module: maintenance_team_hierarchy +#: model:maintenance.team,name:maintenance_team_hierarchy.equipment_team_parent +msgid "Parent Team" +msgstr "" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__request_ids +msgid "Request" +msgstr "" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_ids +msgid "Requests" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/pt_BR.po b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/pt_BR.po new file mode 100644 index 0000000..8454b8a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/i18n/pt_BR.po @@ -0,0 +1,83 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_team_hierarchy +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-05-29 16:37+0000\n" +"Last-Translator: Rodrigo Macedo \n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_team_hierarchy +#: model:maintenance.team,name:maintenance_team_hierarchy.equipment_team_child_1 +msgid "Child Team 1" +msgstr "Equipe infantil 1" + +#. module: maintenance_team_hierarchy +#: model:maintenance.team,name:maintenance_team_hierarchy.equipment_team_child_2 +msgid "Child Team 2" +msgstr "Equipe infantil 2" + +#. module: maintenance_team_hierarchy +#: model:ir.model,name:maintenance_team_hierarchy.model_maintenance_team +msgid "Maintenance Teams" +msgstr "Equipes de Manutenção" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count +msgid "Number of Requests" +msgstr "Número de solicitações" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_block +msgid "Number of Requests Blocked" +msgstr "Número de solicitações bloqueadas" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_date +msgid "Number of Requests Scheduled" +msgstr "Número de solicitações agendadas" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_unscheduled +msgid "Number of Requests Unscheduled" +msgstr "Número de solicitações não-agendadas" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_count_high_priority +msgid "Number of Requests in High Priority" +msgstr "Número de solicitações em prioridade alta" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__parent_id +msgid "Parent" +msgstr "Pais" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__parent_path +msgid "Parent Path" +msgstr "Caminho Pai" + +#. module: maintenance_team_hierarchy +#: model:maintenance.team,name:maintenance_team_hierarchy.equipment_team_parent +msgid "Parent Team" +msgstr "Equipe Pai" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__request_ids +msgid "Request" +msgstr "Solicitação" + +#. module: maintenance_team_hierarchy +#: model:ir.model.fields,field_description:maintenance_team_hierarchy.field_maintenance_team__todo_request_ids +msgid "Requests" +msgstr "Solicitações" diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/models/__init__.py new file mode 100644 index 0000000..e4c1bcb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/models/__init__.py @@ -0,0 +1 @@ +from . import maintenance_team diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/models/maintenance_team.py b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/models/maintenance_team.py new file mode 100644 index 0000000..338a85a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/models/maintenance_team.py @@ -0,0 +1,67 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class MaintenanceTeam(models.Model): + + _parent_name = "parent_id" + _parent_store = True + _parent_order = "name" + _inherit = "maintenance.team" + + parent_id = fields.Many2one("maintenance.team", ondelete="restrict") + parent_path = fields.Char(index=True, unaccent=False) + + request_ids = fields.Many2many( + "maintenance.request", + compute="_compute_request_ids", + ) + + todo_request_ids = fields.One2many(compute="_compute_new_todo_requests") + todo_request_count = fields.Integer(compute="_compute_new_todo_requests") + todo_request_count_date = fields.Integer(compute="_compute_new_todo_requests") + todo_request_count_high_priority = fields.Integer( + compute="_compute_new_todo_requests" + ) + todo_request_count_block = fields.Integer(compute="_compute_new_todo_requests") + todo_request_count_unscheduled = fields.Integer( + compute="_compute_new_todo_requests" + ) + + def _compute_request_ids(self): + for record in self: + record.request_ids = self.env["maintenance.request"].search( + record._get_request_domains() + ) + + def _get_request_domains(self): + return [("maintenance_team_id", "child_of", self.id)] + + @api.depends() + def _compute_new_todo_requests(self): + """This is the only way to remove the api depends fields. This is necessary + because request_ids is now a computed field + """ + self._compute_todo_requests() + + def _compute_todo_requests(self): + """This function improves the computation and simplifies the data""" + request_obj = self.env["maintenance.request"] + for record in self: + domain = record._get_request_domains() + [("stage_id.done", "=", False)] + record.todo_request_ids = request_obj.search(domain) + record.todo_request_count = request_obj.search_count(domain) + record.todo_request_count_date = request_obj.search_count( + domain + [("schedule_date", "!=", False)] + ) + record.todo_request_count_high_priority = request_obj.search_count( + domain + [("priority", "=", "3")] + ) + record.todo_request_count_block = request_obj.search_count( + domain + [("kanban_state", "=", "blocked")] + ) + record.todo_request_count_unscheduled = request_obj.search_count( + domain + [("schedule_date", "=", False)] + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..93ec993 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Enric Tobella diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/readme/DESCRIPTION.rst new file mode 100644 index 0000000..5b5b784 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This addon allows to define a hierarchy of teams and teams show the related requests diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/static/description/index.html new file mode 100644 index 0000000..b99e39e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/static/description/index.html @@ -0,0 +1,421 @@ + + + + + + +Maintenance Team Hierarchy + + + +
+

Maintenance Team Hierarchy

+ + +

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

+

This addon allows to define a hierarchy of teams and teams show the related requests

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Creu Blanca
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/tests/__init__.py new file mode 100644 index 0000000..b0a93c2 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/tests/__init__.py @@ -0,0 +1 @@ +from . import test_team_hierarchy diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/tests/test_team_hierarchy.py b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/tests/test_team_hierarchy.py new file mode 100644 index 0000000..cf5497b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/tests/test_team_hierarchy.py @@ -0,0 +1,73 @@ +# Copyright 2019 Creu Blanca +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo.tests.common import TransactionCase, tagged + + +# This test should only be executed after all modules have been installed. +@tagged("post_install", "-at_install") +class TestTeamHierarchy(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.team_obj = cls.env["maintenance.team"] + cls.request_obj = cls.env["maintenance.request"] + + def test_team_hierarchy(self): + team_01 = self.team_obj.create({"name": "01"}) + team_02 = self.team_obj.create({"name": "02"}) + team_03 = self.team_obj.create({"name": "02"}) + self.assertFalse(team_01.request_ids) + self.assertFalse(team_02.request_ids) + self.assertFalse(team_03.request_ids) + self.assertEqual(0, team_01.todo_request_count) + self.assertEqual(0, team_02.todo_request_count) + self.assertEqual(0, team_03.todo_request_count) + request_01 = self.request_obj.create( + {"name": "Request", "maintenance_team_id": team_03.id} + ) + team_01.env.invalidate_all() + team_02.env.invalidate_all() + team_03.env.invalidate_all() + self.assertFalse(team_01.request_ids) + self.assertFalse(team_02.request_ids) + self.assertTrue(team_03.request_ids) + self.assertEqual(0, team_01.todo_request_count) + self.assertEqual(0, team_02.todo_request_count) + self.assertEqual(1, team_03.todo_request_count) + self.assertEqual(request_01, team_03.request_ids) + team_03.write({"parent_id": team_02.id}) + team_01.env.invalidate_all() + team_02.env.invalidate_all() + team_03.env.invalidate_all() + self.assertFalse(team_01.request_ids) + self.assertTrue(team_02.request_ids) + self.assertEqual(team_02.request_ids, request_01) + self.assertEqual(0, team_01.todo_request_count) + self.assertEqual(1, team_02.todo_request_count) + self.assertEqual(1, team_03.todo_request_count) + request_02 = self.request_obj.create( + {"name": "Request", "maintenance_team_id": team_02.id} + ) + team_01.env.invalidate_all() + team_02.env.invalidate_all() + team_03.env.invalidate_all() + self.assertFalse(team_01.request_ids) + self.assertTrue(team_02.request_ids) + self.assertIn(request_01, team_02.request_ids) + self.assertIn(request_02, team_02.request_ids) + self.assertTrue(team_03.request_ids) + self.assertEqual(request_01, team_03.request_ids) + self.assertNotIn(request_02, team_03.request_ids) + self.assertEqual(0, team_01.todo_request_count) + self.assertEqual(2, team_02.todo_request_count) + self.assertEqual(1, team_03.todo_request_count) + team_02.write({"parent_id": team_01.id}) + team_01.env.invalidate_all() + team_02.env.invalidate_all() + team_03.env.invalidate_all() + self.assertIn(request_01, team_01.request_ids) + self.assertIn(request_02, team_01.request_ids) + self.assertEqual(2, team_01.todo_request_count) + self.assertEqual(2, team_02.todo_request_count) + self.assertEqual(1, team_03.todo_request_count) diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/views/maintenance_team.xml b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/views/maintenance_team.xml new file mode 100644 index 0000000..679186c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/maintenance_team_hierarchy/views/maintenance_team.xml @@ -0,0 +1,37 @@ + + + + + maintenance.team.form (in maintenance_team_hierarchy) + maintenance.team + + + + + + + + + maintenance.request.search (in maintenance_team_hierarchy) + maintenance.request + + + + [('maintenance_team_id', 'child_of', raw_value)] + + + + + [('maintenance_team_id', 'child_of', active_id), ('maintenance_type', 'in', context.get('maintenance_type', ['preventive', 'corrective']))] + + diff --git a/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/pyproject.toml new file mode 100644 index 0000000..fbc061e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_team_hierarchy/pyproject.toml @@ -0,0 +1,43 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_team_hierarchy" +version = "16.0.0" +description = "Maintenance Team Hierarchy - + Create hierarchies on teams" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-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_team_hierarchy"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/README.md b/odoo-bringout-oca-maintenance-maintenance_timesheet/README.md new file mode 100644 index 0000000..73f4b8a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/README.md @@ -0,0 +1,46 @@ +# Maintenance Timesheets + +Odoo addon: maintenance_timesheet + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_timesheet +``` + +## Dependencies + +This addon depends on: +- base_maintenance +- maintenance_project +- hr_timesheet + +## Manifest Information + +- **Name**: Maintenance Timesheets +- **Version**: 16.0.2.1.0 +- **Category**: Human Resources +- **License**: AGPL-3 +- **Installable**: True + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_timesheet`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/ARCHITECTURE.md new file mode 100644 index 0000000..b99d486 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/ARCHITECTURE.md @@ -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_timesheet Module - maintenance_timesheet + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/CONFIGURATION.md new file mode 100644 index 0000000..a63c4f1 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_timesheet. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/DEPENDENCIES.md new file mode 100644 index 0000000..5e0e6bd --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/DEPENDENCIES.md @@ -0,0 +1,7 @@ +# Dependencies + +This addon depends on: + +- [base_maintenance](https://github.com/bringout/oca-technical) +- [maintenance_project](https://github.com/bringout/oca-technical) +- [hr_timesheet](https://github.com/bringout/oca-ocb-hr/tree/dc1405e12dbe76ffb119a0feb323b56ae2c58522/odoo-bringout-oca-ocb-hr_timesheet) diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/FAQ.md new file mode 100644 index 0000000..63e0572 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/FAQ.md @@ -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_timesheet or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/INSTALL.md new file mode 100644 index 0000000..df67159 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_timesheet" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_timesheet" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/MODELS.md new file mode 100644 index 0000000..04ed800 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/MODELS.md @@ -0,0 +1,14 @@ +# Models + +Detected core models and extensions in maintenance_timesheet. + +```mermaid +classDiagram + class account_analytic_line + 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. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/OVERVIEW.md new file mode 100644 index 0000000..2999998 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_timesheet. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_timesheet +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/REPORTS.md new file mode 100644 index 0000000..94673a5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/REPORTS.md @@ -0,0 +1,22 @@ +# Reports + +Report definitions and templates in maintenance_timesheet. + +```mermaid +classDiagram +``` + +## Available Reports + +No named reports found in XML files. + + +## Report Files + +- **maintenance_request_report.xml** (XML template/definition) + +## Notes +- Named reports above are accessible through Odoo's reporting menu +- Python files define report logic and data processing +- XML files contain report templates, definitions, and formatting +- Reports are integrated with Odoo's printing and email systems diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/SECURITY.md new file mode 100644 index 0000000..d158155 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/SECURITY.md @@ -0,0 +1,65 @@ +# Security + +Access control and security definitions in maintenance_timesheet. + +## Access Control Lists (ACLs) + +Model access permissions defined in: +- **[bosnian_translations.json](../bosnian_translations.json)** + - 1767 model access rules +- **[bosnian_translations_output.json](../bosnian_translations_output.json)** + - 414 model access rules +- **[CHANGELOG.md](../CHANGELOG.md)** + - 132 model access rules +- **[doc](../doc)** +- **[docker](../docker)** +- **[input](../input)** +- **[nix](../nix)** +- **[odoo.conf](../odoo.conf)** + - 58 model access rules +- **[odoo_packages_bez_l10n.txt](../odoo_packages_bez_l10n.txt)** + - 1947 model access rules +- **[odoo_packages_bringout.txt](../odoo_packages_bringout.txt)** + - 1947 model access rules +- **[odoo_packages.txt](../odoo_packages.txt)** + - 2085 model access rules +- **[output](../output)** +- **[packages](../packages)** +- **[PACKAGES.md](../PACKAGES.md)** + - 298 model access rules +- **[README.md](../README.md)** + - 338 model access rules +- **[scripts](../scripts)** +- **[temp](../temp)** +- **[TRANSLATION_BS_SUMMARY.md](../TRANSLATION_BS_SUMMARY.md)** + - 225 model access rules + +## Record Rules + +Row-level security rules defined in: + +## Security Groups & Configuration + +Security groups and permissions defined in: +- **[maintenance_timesheet_security.xml](../maintenance_timesheet/security/maintenance_timesheet_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: +- **[maintenance_timesheet_security.xml](../maintenance_timesheet/security/maintenance_timesheet_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 diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/USAGE.md new file mode 100644 index 0000000..aee7e66 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/USAGE.md @@ -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_timesheet +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/README.rst b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/README.rst new file mode 100644 index 0000000..d55ec34 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/README.rst @@ -0,0 +1,82 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + +====================== +Maintenance Timesheets +====================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:6e3c051cdab2b2b121c7ede1bc83c4f83179f60e4506daf330a965ef56b938bc + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/license-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_timesheet + :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_timesheet + :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 adds timesheets to a request. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Solvos + +Contributors +~~~~~~~~~~~~ + +* David Alonso +* Luisa Miguéns +* Christian Ramos + +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 `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/__init__.py b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/__manifest__.py new file mode 100644 index 0000000..484aa04 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/__manifest__.py @@ -0,0 +1,20 @@ +# © 2020 Solvos Consultoría Informática () +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +{ + "name": "Maintenance Timesheets", + "summary": "Adds timesheets to maintenance requests", + "author": "Odoo Community Association (OCA), Solvos", + "license": "AGPL-3", + "version": "16.0.2.1.0", + "category": "Human Resources", + "website": "https://github.com/OCA/maintenance", + "depends": ["base_maintenance", "maintenance_project", "hr_timesheet"], + "data": [ + "security/maintenance_timesheet_security.xml", + "views/hr_timesheet_views.xml", + "views/maintenance_request_views.xml", + "report/maintenance_request_report.xml", + ], + "demo": ["data/demo_maintenance_timesheet.xml"], + "installable": True, +} diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/data/demo_maintenance_timesheet.xml b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/data/demo_maintenance_timesheet.xml new file mode 100644 index 0000000..3ba82b2 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/data/demo_maintenance_timesheet.xml @@ -0,0 +1,45 @@ + + + + + + Corrective #1 for Generic Monitor + + + + + + corrective + + + + Request tasks done + + + + + + + + + + + + + Touchpad repaired + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/i18n/bs.po new file mode 100644 index 0000000..a01a4cd --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/i18n/bs.po @@ -0,0 +1,133 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_timesheet +# +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_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.hr_equipment_request_view_kanban +msgid "Hours" +msgstr "Sati" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.hr_equipment_request_view_form +msgid "" +"\n" +" Hours\n" +" " +msgstr "" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Timesheet Entries" +msgstr "Unosi radnih sati" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Timesheet Total Hours:" +msgstr "Ukupno sati radnog lista:" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Total" +msgstr "Ukupno" + +#. module: maintenance_timesheet +#: model:ir.model,name:maintenance_timesheet.model_account_analytic_line +msgid "Analytic Line" +msgstr "Analitička stavka" + +#. module: maintenance_timesheet +#. odoo-python +#: code:addons/maintenance_timesheet/models/hr_timesheet.py:0 +#, python-format +msgid "" +"Cannot save or delete a timesheet for a maintenance request already done" +msgstr "" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Date" +msgstr "Datum" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Description" +msgstr "Opis" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.equipment_request_view_form +msgid "Duration (Hour(s))" +msgstr "Trajanje (sati)" + +#. module: maintenance_timesheet +#: model:ir.model,name:maintenance_timesheet.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Oprema za održavanje" + +#. module: maintenance_timesheet +#: model:ir.model,name:maintenance_timesheet.model_maintenance_request +#: model:ir.model.fields,field_description:maintenance_timesheet.field_account_analytic_line__maintenance_request_id +msgid "Maintenance Request" +msgstr "Zahtjev za održavanje" + +#. module: maintenance_timesheet +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__planned_hours +msgid "Planned Hours" +msgstr "Planirani sati" + +#. module: maintenance_timesheet +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__progress +msgid "Progress" +msgstr "Napredak" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Project -" +msgstr "Projekat -" + +#. module: maintenance_timesheet +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__remaining_hours +msgid "Remaining Hours" +msgstr "Preostali sati" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.hr_timesheet_line_search +msgid "Request" +msgstr "Zahtjev" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Responsible" +msgstr "Odgovoran" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Task" +msgstr "Zadatak" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Time" +msgstr "Vrijeme" + +#. module: maintenance_timesheet +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__timesheet_total_hours +msgid "Timesheet Total Hours" +msgstr "Ukupno sati radnog lista" + +#. module: maintenance_timesheet +#: model:ir.actions.act_window,name:maintenance_timesheet.timesheet_action_from_request +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__timesheet_ids +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.equipment_request_view_form +msgid "Timesheets" +msgstr "Šihtarice" diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/i18n/es.po new file mode 100644 index 0000000..4eea5e6 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/i18n/es.po @@ -0,0 +1,155 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_timesheet +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-10-04 08:28+0000\n" +"PO-Revision-Date: 2023-09-07 16:37+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.hr_equipment_request_view_kanban +msgid "Hours" +msgstr "horas" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.hr_equipment_request_view_form +msgid "" +"\n" +" Hours\n" +" " +msgstr "" +"\n" +" Horas\n" +" " + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Timesheet Entries" +msgstr "" +"Entradas en la hoja de horas" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Timesheet Total Hours:" +msgstr "Horas totales de la hoja de horas:" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Total" +msgstr "Total" + +#. module: maintenance_timesheet +#: model:ir.model,name:maintenance_timesheet.model_account_analytic_line +msgid "Analytic Line" +msgstr "Cuenta analítica" + +#. module: maintenance_timesheet +#. odoo-python +#: code:addons/maintenance_timesheet/models/hr_timesheet.py:0 +#, python-format +msgid "" +"Cannot save or delete a timesheet for a maintenance request already done" +msgstr "" +"No se puede editar o borrar un parte de trabajo de una petición de " +"mantenimiento ya finalizada" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Date" +msgstr "fecha" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Description" +msgstr "descripción" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.equipment_request_view_form +msgid "Duration (Hour(s))" +msgstr "Duración (Hora(s))" + +#. module: maintenance_timesheet +#: model:ir.model,name:maintenance_timesheet.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Equipo" + +#. module: maintenance_timesheet +#: model:ir.model,name:maintenance_timesheet.model_maintenance_request +#: model:ir.model.fields,field_description:maintenance_timesheet.field_account_analytic_line__maintenance_request_id +msgid "Maintenance Request" +msgstr "Petición de mantenimiento" + +#. module: maintenance_timesheet +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__planned_hours +msgid "Planned Hours" +msgstr "Horas planificadas" + +#. module: maintenance_timesheet +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__progress +msgid "Progress" +msgstr "progreso" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Project -" +msgstr "proyecto-" + +#. module: maintenance_timesheet +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__remaining_hours +msgid "Remaining Hours" +msgstr "Horas restantes" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.hr_timesheet_line_search +msgid "Request" +msgstr "Petición" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Responsible" +msgstr "Responsable" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Task" +msgstr "Tarea" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Time" +msgstr "Tiempo" + +#. module: maintenance_timesheet +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__timesheet_total_hours +msgid "Timesheet Total Hours" +msgstr "Horas totales en partes de trabajo" + +#. module: maintenance_timesheet +#: model:ir.actions.act_window,name:maintenance_timesheet.timesheet_action_from_request +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__timesheet_ids +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.equipment_request_view_form +msgid "Timesheets" +msgstr "Partes de trabajo" + +#~ msgid "Hours" +#~ msgstr "horas" + +#~ msgid "Display Name" +#~ msgstr "nombre para mostrar" + +#~ msgid "ID" +#~ msgstr "ID(identificador)" + +#~ msgid "Last Modified on" +#~ msgstr "modificado por última vez el" diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/i18n/it.po new file mode 100644 index 0000000..2bee9e5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/i18n/it.po @@ -0,0 +1,154 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_timesheet +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-03-14 15:36+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.hr_equipment_request_view_kanban +msgid "Hours" +msgstr "Ore" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.hr_equipment_request_view_form +msgid "" +"\n" +" Hours\n" +" " +msgstr "" +"\n" +" Ore\n" +" " + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Timesheet Entries" +msgstr "" +"Registrazioni foglio presenze" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Timesheet Total Hours:" +msgstr "Ore totali foglio presenze:" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Total" +msgstr "Totale" + +#. module: maintenance_timesheet +#: model:ir.model,name:maintenance_timesheet.model_account_analytic_line +msgid "Analytic Line" +msgstr "Riga analitica" + +#. module: maintenance_timesheet +#. odoo-python +#: code:addons/maintenance_timesheet/models/hr_timesheet.py:0 +#, python-format +msgid "" +"Cannot save or delete a timesheet for a maintenance request already done" +msgstr "" +"Non si può salvare o cancellare un foglio presenze per una richiesta di " +"manutenzione già eseguita" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Date" +msgstr "Data" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Description" +msgstr "Descrizione" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.equipment_request_view_form +msgid "Duration (Hour(s))" +msgstr "Durata (ora(e))" + +#. module: maintenance_timesheet +#: model:ir.model,name:maintenance_timesheet.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "Attrezzatura manutenzione" + +#. module: maintenance_timesheet +#: model:ir.model,name:maintenance_timesheet.model_maintenance_request +#: model:ir.model.fields,field_description:maintenance_timesheet.field_account_analytic_line__maintenance_request_id +msgid "Maintenance Request" +msgstr "Richiesta manutenzione" + +#. module: maintenance_timesheet +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__planned_hours +msgid "Planned Hours" +msgstr "Ore pianificate" + +#. module: maintenance_timesheet +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__progress +msgid "Progress" +msgstr "Avanzamento" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Project -" +msgstr "Progetto -" + +#. module: maintenance_timesheet +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__remaining_hours +msgid "Remaining Hours" +msgstr "Ore residue" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.hr_timesheet_line_search +msgid "Request" +msgstr "Richiesta" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Responsible" +msgstr "Responsabile" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Task" +msgstr "Lavoro" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Time" +msgstr "Orario" + +#. module: maintenance_timesheet +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__timesheet_total_hours +msgid "Timesheet Total Hours" +msgstr "Ore totali foglio presenze" + +#. module: maintenance_timesheet +#: model:ir.actions.act_window,name:maintenance_timesheet.timesheet_action_from_request +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__timesheet_ids +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.equipment_request_view_form +msgid "Timesheets" +msgstr "Fogli ore" + +#~ msgid "Hours" +#~ msgstr "Ore" + +#~ msgid "Display Name" +#~ msgstr "Nome visualizzato" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Ultima modifica il" diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/i18n/maintenance_timesheet.pot b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/i18n/maintenance_timesheet.pot new file mode 100644 index 0000000..90e1f3f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/i18n/maintenance_timesheet.pot @@ -0,0 +1,133 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_timesheet +# +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_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.hr_equipment_request_view_kanban +msgid "Hours" +msgstr "" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.hr_equipment_request_view_form +msgid "" +"\n" +" Hours\n" +" " +msgstr "" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Timesheet Entries" +msgstr "" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Timesheet Total Hours:" +msgstr "" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Total" +msgstr "" + +#. module: maintenance_timesheet +#: model:ir.model,name:maintenance_timesheet.model_account_analytic_line +msgid "Analytic Line" +msgstr "" + +#. module: maintenance_timesheet +#. odoo-python +#: code:addons/maintenance_timesheet/models/hr_timesheet.py:0 +#, python-format +msgid "" +"Cannot save or delete a timesheet for a maintenance request already done" +msgstr "" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Date" +msgstr "" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Description" +msgstr "" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.equipment_request_view_form +msgid "Duration (Hour(s))" +msgstr "" + +#. module: maintenance_timesheet +#: model:ir.model,name:maintenance_timesheet.model_maintenance_equipment +msgid "Maintenance Equipment" +msgstr "" + +#. module: maintenance_timesheet +#: model:ir.model,name:maintenance_timesheet.model_maintenance_request +#: model:ir.model.fields,field_description:maintenance_timesheet.field_account_analytic_line__maintenance_request_id +msgid "Maintenance Request" +msgstr "" + +#. module: maintenance_timesheet +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__planned_hours +msgid "Planned Hours" +msgstr "" + +#. module: maintenance_timesheet +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__progress +msgid "Progress" +msgstr "" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Project -" +msgstr "" + +#. module: maintenance_timesheet +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__remaining_hours +msgid "Remaining Hours" +msgstr "" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.hr_timesheet_line_search +msgid "Request" +msgstr "" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Responsible" +msgstr "" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Task" +msgstr "" + +#. module: maintenance_timesheet +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.report_maintenance_request_document +msgid "Time" +msgstr "" + +#. module: maintenance_timesheet +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__timesheet_total_hours +msgid "Timesheet Total Hours" +msgstr "" + +#. module: maintenance_timesheet +#: model:ir.actions.act_window,name:maintenance_timesheet.timesheet_action_from_request +#: model:ir.model.fields,field_description:maintenance_timesheet.field_maintenance_request__timesheet_ids +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet.equipment_request_view_form +msgid "Timesheets" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/migrations/16.0.2.1.0/noupdate_changes.xml b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/migrations/16.0.2.1.0/noupdate_changes.xml new file mode 100644 index 0000000..2d4c986 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/migrations/16.0.2.1.0/noupdate_changes.xml @@ -0,0 +1,10 @@ + + + + [ + ('maintenance_request_id.message_partner_ids', 'in', [user.partner_id.id]), + ('maintenance_request_id.user_id.id', '=', user.id) + ] + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/migrations/16.0.2.1.0/post-migration.py b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/migrations/16.0.2.1.0/post-migration.py new file mode 100644 index 0000000..348ca86 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/migrations/16.0.2.1.0/post-migration.py @@ -0,0 +1,10 @@ +# Copyright 2025 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from openupgradelib import openupgrade + + +@openupgrade.migrate() +def migrate(env, version): + openupgrade.load_data( + env.cr, "maintenance_timesheet", "migrations/16.0.2.1.0/noupdate_changes.xml" + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/models/__init__.py new file mode 100644 index 0000000..b7f7bd1 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/models/__init__.py @@ -0,0 +1,3 @@ +from . import hr_timesheet +from . import maintenance_equipment +from . import maintenance_request diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/models/hr_timesheet.py b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/models/hr_timesheet.py new file mode 100644 index 0000000..491102e --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/models/hr_timesheet.py @@ -0,0 +1,57 @@ +# © 2019 Solvos Consultoría Informática () +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from odoo import _, api, fields, models +from odoo.exceptions import ValidationError + + +class AccountAnalyticLine(models.Model): + _inherit = "account.analytic.line" + + maintenance_request_id = fields.Many2one(comodel_name="maintenance.request") + + @api.onchange("maintenance_request_id") + def onchange_maintenance_request_id(self): + if self.maintenance_request_id and not self.project_id: + self.project_id = self.maintenance_request_id.project_id + self.task_id = self.maintenance_request_id.task_id + + @api.model_create_multi + def create(self, vals_list): + maintenance_request_ids = [ + vals.get("maintenance_request_id") + for vals in vals_list + if vals.get("maintenance_request_id") + ] + self._check_request_done(maintenance_request_ids) + return super().create(vals_list) + + def write(self, values): + current_request = self.maintenance_request_id + new_request_id = values.get("maintenance_request_id", False) + if current_request: + self._check_request_done(current_request.id) + if new_request_id: + self._check_request_done(new_request_id) + return super().write(values) + + def unlink(self): + self._check_request_done( + self.filtered(lambda x: x.maintenance_request_id).maintenance_request_id.ids + ) + return super().unlink() + + def _check_request_done(self, request_id: int | list[int]): + """ + Editing a timesheet related to a finished request is forbidden. + """ + request_ids = [request_id] if isinstance(request_id, int) else request_id + if any( + self.env["maintenance.request"].browse(request_ids).stage_id.mapped("done") + ): + raise ValidationError( + _( + "Cannot save or delete a timesheet for " + "a maintenance request already done" + ) + ) diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/models/maintenance_equipment.py b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/models/maintenance_equipment.py new file mode 100644 index 0000000..4b63546 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/models/maintenance_equipment.py @@ -0,0 +1,13 @@ +# Copyright 2019 Solvos Consultoría Informática () +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from odoo import models + + +class MaintenanceEquipment(models.Model): + _inherit = "maintenance.equipment" + + def _prepare_project_from_equipment_values(self): + data = super()._prepare_project_from_equipment_values() + data["allow_timesheets"] = True + return data diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/models/maintenance_request.py b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/models/maintenance_request.py new file mode 100644 index 0000000..43b68a0 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/models/maintenance_request.py @@ -0,0 +1,82 @@ +# © 2019 Solvos Consultoría Informática () +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from odoo import api, fields, models + + +class MaintenanceRequest(models.Model): + _inherit = "maintenance.request" + + timesheet_ids = fields.One2many( + string="Timesheets", + comodel_name="account.analytic.line", + inverse_name="maintenance_request_id", + ) + timesheet_total_hours = fields.Float( + compute="_compute_timesheet_total_hours", readonly=True, store=True + ) + planned_hours = fields.Float(tracking=True) + progress = fields.Float( + compute="_compute_progress_hours", + group_operator="avg", + store=True, + ) + remaining_hours = fields.Float( + compute="_compute_progress_hours", + readonly=True, + store=True, + ) + + @api.depends("planned_hours", "timesheet_total_hours") + def _compute_progress_hours(self): + for item in self: + item.progress = 0.0 + if item.planned_hours > 0.0: + if item.timesheet_total_hours > item.planned_hours: + item.progress = 100 + else: + item.progress = round( + 100.0 * item.timesheet_total_hours / item.planned_hours, 2 + ) + item.remaining_hours = item.planned_hours - item.timesheet_total_hours + + def _add_followers(self): + """ + Members of maintenance team are included as followers to automatically + grant request visibility and timesheet permissions for this request + """ + res = super()._add_followers() + for request in self: + partner_ids = request.maintenance_team_id.member_ids.mapped( + "partner_id" + ).ids + request.message_subscribe(partner_ids=partner_ids) + return res + + @api.depends("timesheet_ids.unit_amount") + def _compute_timesheet_total_hours(self): + for request in self: + request.timesheet_total_hours = sum( + request.timesheet_ids.mapped("unit_amount") + ) + + def action_view_timesheet_ids(self): + """ + Access to the current timesheets for this maintenance request + The view will be restricted to the current request and only HR managers + could create timesheets for every employee + """ + self.ensure_one() + action = self.env["ir.actions.act_window"]._for_xml_id( + "maintenance_timesheet.timesheet_action_from_request" + ) + action["domain"] = [("maintenance_request_id", "=", self.id)] + action["context"] = { + "default_project_id": self.project_id.id, + "default_task_id": self.task_id.id, + "default_maintenance_request_id": self.id, + "readonly_employee_id": not self.env.user.has_group( + "hr_timesheet.group_timesheet_manager" + ), + } + return action diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..53baceb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* David Alonso +* Luisa Miguéns +* Christian Ramos diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/readme/DESCRIPTION.rst new file mode 100644 index 0000000..6bfcb8a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module adds timesheets to a request. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/report/maintenance_request_report.xml b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/report/maintenance_request_report.xml new file mode 100644 index 0000000..a9d079a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/report/maintenance_request_report.xml @@ -0,0 +1,97 @@ + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/security/maintenance_timesheet_security.xml b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/security/maintenance_timesheet_security.xml new file mode 100644 index 0000000..03cbeaa --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/security/maintenance_timesheet_security.xml @@ -0,0 +1,28 @@ + + + + Users are allowed to access timesheets related to a followed request + + [ + ('maintenance_request_id.message_partner_ids', 'in', [user.partner_id.id]), + ('maintenance_request_id.user_id.id', '=', user.id) + ] + + + + + Managers are allowed to access timesheets related to any request + + + [('maintenance_request_id', '!=', False)] + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/static/description/index.html new file mode 100644 index 0000000..ac4b1a2 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/static/description/index.html @@ -0,0 +1,431 @@ + + + + + +README.rst + + + +
+ + + +Odoo Community Association + +
+

Maintenance Timesheets

+ +

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

+

This module adds timesheets to a request.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Solvos
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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

+

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

+

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

+
+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/tests/__init__.py new file mode 100644 index 0000000..2c3cdf5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/tests/__init__.py @@ -0,0 +1 @@ +from . import test_maintenance_timesheet diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/tests/test_maintenance_timesheet.py b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/tests/test_maintenance_timesheet.py new file mode 100644 index 0000000..a8a4c60 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/tests/test_maintenance_timesheet.py @@ -0,0 +1,107 @@ +# Copyright 2019 Solvos Consultoría Informática () +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + +from odoo import fields +from odoo.exceptions import ValidationError +from odoo.tests.common import TransactionCase + + +class TestMaintenanceTimesheet(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + + cls.stage_undone = cls.env.ref("maintenance.stage_0") + cls.stage_done = cls.env.ref("maintenance.stage_4") + + cls.request_demo1 = cls.env.ref("maintenance_timesheet.request_1") + cls.request2 = cls.env["maintenance.request"].create( + { + "name": "Corrective #2 for Generic Monitor", + "equipment_id": cls.env.ref("maintenance_project.equipment_1").id, + "user_id": cls.env.ref("base.user_admin").id, + "schedule_date": fields.Date.today(), + "stage_id": cls.stage_undone.id, + "maintenance_type": "corrective", + } + ) + cls.timesheet21_data = { + "name": "Some tasks done", + "project_id": cls.request2.project_id.id, + "user_id": cls.env.ref("base.user_admin").id, + "date": fields.Date.today(), + "unit_amount": 1.5, + } + cls.request2.timesheet_ids = [(0, 0, cls.timesheet21_data)] + + def test_request_timesheets(self): + self.assertEqual(self.request_demo1.timesheet_total_hours, 2) + self.assertEqual( + self.request2.timesheet_total_hours, self.timesheet21_data["unit_amount"] + ) + + def test_onchange_maintenance_request_id(self): + ts1 = self.env["account.analytic.line"].new( + { + "date": fields.Date.today(), + "name": "Timesheet without initial equipment", + "user_id": self.env.ref("base.user_admin").id, + } + ) + self.assertFalse(ts1.project_id) + ts1.maintenance_request_id = self.request2 + ts1.onchange_maintenance_request_id() + self.assertEqual(ts1.project_id, self.request2.project_id) + + def test_check_request_done(self): + self.request2.stage_id = self.stage_done + with self.assertRaises(ValidationError): + self.request2.timesheet_ids = [ + ( + 0, + 0, + { + "name": "Attempt to create a task for a done request", + "project_id": self.request2.project_id.id, + "user_id": self.env.ref("base.user_admin").id, + "date": fields.Date.today(), + "unit_amount": 2, + }, + ) + ] + with self.assertRaises(ValidationError): + self.env["account.analytic.line"].create( + { + "name": "Attepting to create a task 2", + "project_id": self.request2.project_id.id, + "user_id": self.env.ref("base.user_admin").id, + "maintenance_request_id": self.request2.id, + "date": fields.Date.today(), + "unit_amount": 1, + } + ) + with self.assertRaises(ValidationError): + # Attempt to modify a timesheet related a done request + for timesheet in self.request2.timesheet_ids: + timesheet.unit_amount += 1 + with self.assertRaises(ValidationError): + # Attempt to delete a timesheet related a done request + self.request2.timesheet_ids.unlink() + + self.request2.stage_id = self.stage_undone + # Deleting timesheets is enabled again + self.request2.timesheet_ids.unlink() + + def test_action_view_timesheet_ids(self): + act1 = self.request2.action_view_timesheet_ids() + self.assertEqual(act1["domain"][0][2], self.request2.id) + self.assertEqual( + act1["context"]["default_project_id"], self.request2.project_id.id + ) + self.assertFalse(act1["context"]["default_task_id"]) + self.assertFalse(act1["context"]["readonly_employee_id"]) + + def test_prepare_project_from_equipment_values(self): + equipment = self.env["maintenance.equipment"].create({"name": "Test equipment"}) + equipment.action_create_project() + self.assertTrue(equipment.project_id.allow_timesheets) diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/views/hr_timesheet_views.xml b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/views/hr_timesheet_views.xml new file mode 100644 index 0000000..9f69490 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/views/hr_timesheet_views.xml @@ -0,0 +1,52 @@ + + + + account.analytic.line + + + + + + + + + + + + account.analytic.line + + + + + + + + + account.analytic.line + + + + context.get('readonly_employee_id', False) + + + + + account.analytic.line + + + + + + + + diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/views/maintenance_request_views.xml b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/views/maintenance_request_views.xml new file mode 100644 index 0000000..e46cb60 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/maintenance_timesheet/views/maintenance_request_views.xml @@ -0,0 +1,159 @@ + + + + Timesheets + account.analytic.line + + [('project_id', '!=', False), ('maintenance_request_id', '!=', False)] + + + + tree + + + + + + form + + + + + + maintenance.request + + + + + + + + + maintenance.request + + + + + + + +
+ + + + + Hours +
+
+
+
+
+ + maintenance.request + + + + + + + + + maintenance.request + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+
+ + + + +
+
+
+
+
diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet/pyproject.toml b/odoo-bringout-oca-maintenance-maintenance_timesheet/pyproject.toml new file mode 100644 index 0000000..8a6728a --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet/pyproject.toml @@ -0,0 +1,44 @@ +[project] +name = "odoo-bringout-oca-maintenance-maintenance_timesheet" +version = "16.0.0" +description = "Maintenance Timesheets - Adds timesheets to maintenance requests" +authors = [ + { name = "Ernad Husremovic", email = "hernad@bring.out.ba" } +] +dependencies = [ + "odoo-bringout-oca-maintenance-base_maintenance>=16.0.0", + "odoo-bringout-oca-maintenance-maintenance_project>=16.0.0", + "odoo-bringout-oca-ocb-hr_timesheet>=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_timesheet"] + +[tool.rye] +managed = true +dev-dependencies = [ + "pytest>=8.4.1", +] diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/README.md b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/README.md new file mode 100644 index 0000000..d324a04 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/README.md @@ -0,0 +1,45 @@ +# Maintenance Timesheets Time Control + +Odoo addon: maintenance_timesheet_time_control + +## Installation + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_timesheet_time_control +``` + +## Dependencies + +This addon depends on: +- maintenance_timesheet +- project_timesheet_time_control + +## Manifest Information + +- **Name**: Maintenance Timesheets Time Control +- **Version**: 16.0.1.0.0 +- **Category**: Hidden +- **License**: AGPL-3 +- **Installable**: False + +## Source + +Based on [OCA/maintenance](https://github.com/OCA/maintenance) branch 16.0, addon `maintenance_timesheet_time_control`. + +## License + +This package maintains the original AGPL-3 license from the upstream Odoo project. + +## Documentation + +- Overview: doc/OVERVIEW.md +- Architecture: doc/ARCHITECTURE.md +- Models: doc/MODELS.md +- Controllers: doc/CONTROLLERS.md +- Wizards: doc/WIZARDS.md +- Install: doc/INSTALL.md +- Usage: doc/USAGE.md +- Configuration: doc/CONFIGURATION.md +- Dependencies: doc/DEPENDENCIES.md +- Troubleshooting: doc/TROUBLESHOOTING.md +- FAQ: doc/FAQ.md diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/ARCHITECTURE.md b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/ARCHITECTURE.md new file mode 100644 index 0000000..e5268c3 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/ARCHITECTURE.md @@ -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_timesheet_time_control Module - maintenance_timesheet_time_control + direction LR + M:::layer + W:::layer + C:::layer + V:::layer + R:::layer + S:::layer + DX:::layer + end + + classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px +``` + +Notes +- Views include tree/form/kanban templates and report templates. +- Controllers provide website/portal routes when present. +- Wizards are UI flows implemented with `models.TransientModel`. +- Data XML loads data/demo records; Security defines groups and access. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/CONFIGURATION.md b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/CONFIGURATION.md new file mode 100644 index 0000000..670e246 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/CONFIGURATION.md @@ -0,0 +1,3 @@ +# Configuration + +Refer to Odoo settings for maintenance_timesheet_time_control. Configure related models, access rights, and options as needed. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/CONTROLLERS.md b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/CONTROLLERS.md new file mode 100644 index 0000000..f628e77 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/CONTROLLERS.md @@ -0,0 +1,3 @@ +# Controllers + +This module does not define custom HTTP controllers. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/DEPENDENCIES.md b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/DEPENDENCIES.md new file mode 100644 index 0000000..9f2ffc9 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/DEPENDENCIES.md @@ -0,0 +1,6 @@ +# Dependencies + +This addon depends on: + +- [maintenance_timesheet](https://github.com/bringout/oca-technical) +- [project_timesheet_time_control](https://github.com/bringout/oca-workflow-process) diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/FAQ.md b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/FAQ.md new file mode 100644 index 0000000..5dc6797 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/FAQ.md @@ -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_timesheet_time_control or install in UI. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/INSTALL.md b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/INSTALL.md new file mode 100644 index 0000000..1466bbf --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/INSTALL.md @@ -0,0 +1,7 @@ +# Install + +```bash +pip install odoo-bringout-oca-maintenance-maintenance_timesheet_time_control" +# or +uv pip install odoo-bringout-oca-maintenance-maintenance_timesheet_time_control" +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/MODELS.md b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/MODELS.md new file mode 100644 index 0000000..3f12eb7 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/MODELS.md @@ -0,0 +1,12 @@ +# Models + +Detected core models and extensions in maintenance_timesheet_time_control. + +```mermaid +classDiagram + class maintenance_request +``` + +Notes +- Classes show model technical names; fields omitted for brevity. +- Items listed under _inherit are extensions of existing models. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/OVERVIEW.md b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/OVERVIEW.md new file mode 100644 index 0000000..a3133bf --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/OVERVIEW.md @@ -0,0 +1,6 @@ +# Overview + +Packaged Odoo addon: maintenance_timesheet_time_control. Provides features documented in upstream Odoo 16 under this addon. + +- Source: OCA/OCB 16.0, addon maintenance_timesheet_time_control +- License: LGPL-3 diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/REPORTS.md b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/REPORTS.md new file mode 100644 index 0000000..e0ea35f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/REPORTS.md @@ -0,0 +1,3 @@ +# Reports + +This module does not define custom reports. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/SECURITY.md b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/SECURITY.md new file mode 100644 index 0000000..e07da9d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/SECURITY.md @@ -0,0 +1,8 @@ +# Security + +This module does not define custom security rules or access controls beyond Odoo defaults. + +Default Odoo security applies: +- Base user access through standard groups +- Model access inherited from dependencies +- No custom row-level security rules diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/TROUBLESHOOTING.md b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/TROUBLESHOOTING.md new file mode 100644 index 0000000..56853cb --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/TROUBLESHOOTING.md @@ -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. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/USAGE.md b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/USAGE.md new file mode 100644 index 0000000..7ff175c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/USAGE.md @@ -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_timesheet_time_control +``` diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/WIZARDS.md b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/WIZARDS.md new file mode 100644 index 0000000..48e790d --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/doc/WIZARDS.md @@ -0,0 +1,3 @@ +# Wizards + +This module does not include UI wizards. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/README.rst b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/README.rst new file mode 100644 index 0000000..2de4bea --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/README.rst @@ -0,0 +1,126 @@ +=================================== +Maintenance Timesheets Time Control +=================================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:999ce7cd27b56d7796c9594d15f4413473560b6e533bdd0fdcb842b877b2370d + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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_timesheet_time_control + :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_timesheet_time_control + :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| + +It allows to track the exact moment when a timesheet line is started (not only +the day, but also the minute and second) and let users start and stop timers +easily. + +**Table of contents** + +.. contents:: + :local: + +Installation +============ + +This module is auto-installed when ``maintenance_timesheet`` and ``project_timesheet_time_control`` are +installed. + +This module depends on modules found in these repositories: + +* `OCA/timesheet `__ +* `OCA/web `__ +* `OCA/project `__ + +Configuration +============= + +Maintenance request must have a project defined for seeing the start/stop buttons. + +Usage +===== + +In general the usage instructions from ``project_timesheet_time_control`` apply with the following additions. + +Via maintenance requests: + +#. Go to *Maintenance > Maintenance > Maintenance Requests*. +#. If a request has a running timesheet line, it will display a *Stop* button. +#. Other requests that have enabled timesheets will display a *Start* button + that will open the same wizard as the timesheet lines, duplicating task's + last timesheet line. +#. You can see the same in list view. +#. Click on any existing request or create a new one. +#. You can see the same feature in the action buttons box. + +Note: All the *Start/Resume/Stop* features are disabled if you don't belong to +the *Timesheets/User* group or if you are viewing a timesheet that belongs +to another user. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* `Tecnativa `_: + + * Víctor Martínez + * Pedro M. Baeza + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-victoralmau| image:: https://github.com/victoralmau.png?size=40px + :target: https://github.com/victoralmau + :alt: victoralmau + +Current `maintainer `__: + +|maintainer-victoralmau| + +This module is part of the `OCA/maintenance `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/__init__.py b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/__init__.py new file mode 100644 index 0000000..aee8895 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import wizards diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/__manifest__.py b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/__manifest__.py new file mode 100644 index 0000000..a8d0195 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/__manifest__.py @@ -0,0 +1,16 @@ +# Copyright 2022 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Maintenance Timesheets Time Control", + "summary": "Maintenance Timesheets Timesheet Time Control", + "version": "16.0.1.0.0", + "license": "AGPL-3", + "category": "Hidden", + "author": "Tecnativa,Odoo Community Association (OCA)", + "website": "https://github.com/OCA/maintenance", + "depends": ["maintenance_timesheet", "project_timesheet_time_control"], + "data": ["views/maintenance_request_view.xml"], + "auto_install": True, + "maintainers": ["victoralmau"], +} diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/i18n/bs.po b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/i18n/bs.po new file mode 100644 index 0000000..b38289f --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/i18n/bs.po @@ -0,0 +1,59 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_timesheet_time_control +# +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_timesheet_time_control +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.equipment_request_view_form +msgid "Date" +msgstr "Datum" + +#. module: maintenance_timesheet_time_control +#: model:ir.model,name:maintenance_timesheet_time_control.model_hr_timesheet_switch +msgid "Helper to quickly switch between timesheet lines" +msgstr "Pomoć za vrže prebacivanje između linija" + +#. module: maintenance_timesheet_time_control +#: model:ir.model.fields,help:maintenance_timesheet_time_control.field_maintenance_request__show_time_control +msgid "Indicate which time control button to show, if any." +msgstr "Kontoliraj koji gumb će se prikazati." + +#. module: maintenance_timesheet_time_control +#: model:ir.model,name:maintenance_timesheet_time_control.model_maintenance_request +msgid "Maintenance Request" +msgstr "Zahtjev za održavanje" + +#. module: maintenance_timesheet_time_control +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.equipment_request_view_form +msgid "Resume work" +msgstr "Nastavi rad" + +#. module: maintenance_timesheet_time_control +#: model:ir.model.fields,field_description:maintenance_timesheet_time_control.field_maintenance_request__show_time_control +msgid "Show Time Control" +msgstr "Prikaži kontrole vremena" + +#. module: maintenance_timesheet_time_control +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_kanban +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_tree +msgid "Start work" +msgstr "Pokreni rad" + +#. module: maintenance_timesheet_time_control +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_kanban +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_tree +msgid "Stop work" +msgstr "Zaustavi rad" diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/i18n/es.po b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/i18n/es.po new file mode 100644 index 0000000..bf4566c --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/i18n/es.po @@ -0,0 +1,63 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_timesheet_time_control +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-12-21 10:34+0000\n" +"PO-Revision-Date: 2023-07-06 20:08+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: \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_timesheet_time_control +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.equipment_request_view_form +msgid "Date" +msgstr "Fecha" + +#. module: maintenance_timesheet_time_control +#: model:ir.model,name:maintenance_timesheet_time_control.model_hr_timesheet_switch +msgid "Helper to quickly switch between timesheet lines" +msgstr "Ayudante para cambiar rápidamente de línea del parte de horas" + +#. module: maintenance_timesheet_time_control +#: model:ir.model.fields,help:maintenance_timesheet_time_control.field_maintenance_request__show_time_control +msgid "Indicate which time control button to show, if any." +msgstr "Indicar qué botón de control de tiempo se debe mostrar, si lo hay." + +#. module: maintenance_timesheet_time_control +#: model:ir.model,name:maintenance_timesheet_time_control.model_maintenance_request +msgid "Maintenance Request" +msgstr "Petición de mantenimiento" + +#. module: maintenance_timesheet_time_control +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.equipment_request_view_form +msgid "Resume work" +msgstr "Resumen del trabajo" + +#. module: maintenance_timesheet_time_control +#: model:ir.model.fields,field_description:maintenance_timesheet_time_control.field_maintenance_request__show_time_control +msgid "Show Time Control" +msgstr "Mostrar control de tiempo" + +#. module: maintenance_timesheet_time_control +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_kanban +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_tree +msgid "Start work" +msgstr "Iniciar trabajo" + +#. module: maintenance_timesheet_time_control +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_kanban +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_tree +msgid "Stop work" +msgstr "Detener trabajo" diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/i18n/it.po b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/i18n/it.po new file mode 100644 index 0000000..05afc15 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/i18n/it.po @@ -0,0 +1,62 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_timesheet_time_control +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-12-31 16:06+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.6.2\n" + +#. module: maintenance_timesheet_time_control +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.equipment_request_view_form +msgid "Date" +msgstr "Data" + +#. module: maintenance_timesheet_time_control +#: model:ir.model,name:maintenance_timesheet_time_control.model_hr_timesheet_switch +msgid "Helper to quickly switch between timesheet lines" +msgstr "Assistente per spostarsi velocemente tra righe del foglio ore" + +#. module: maintenance_timesheet_time_control +#: model:ir.model.fields,help:maintenance_timesheet_time_control.field_maintenance_request__show_time_control +msgid "Indicate which time control button to show, if any." +msgstr "Indica se e quale pulsante di controllo tempo visualizzare." + +#. module: maintenance_timesheet_time_control +#: model:ir.model,name:maintenance_timesheet_time_control.model_maintenance_request +msgid "Maintenance Request" +msgstr "Richiesta manutenzione" + +#. module: maintenance_timesheet_time_control +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.equipment_request_view_form +msgid "Resume work" +msgstr "Riprendi lavoro" + +#. module: maintenance_timesheet_time_control +#: model:ir.model.fields,field_description:maintenance_timesheet_time_control.field_maintenance_request__show_time_control +msgid "Show Time Control" +msgstr "Visualizza controllo orario" + +#. module: maintenance_timesheet_time_control +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_kanban +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_tree +msgid "Start work" +msgstr "Avvia lavoro" + +#. module: maintenance_timesheet_time_control +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_kanban +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_tree +msgid "Stop work" +msgstr "Ferma lavoro" diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/i18n/maintenance_timesheet_time_control.pot b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/i18n/maintenance_timesheet_time_control.pot new file mode 100644 index 0000000..f83d1d5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/i18n/maintenance_timesheet_time_control.pot @@ -0,0 +1,59 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * maintenance_timesheet_time_control +# +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_timesheet_time_control +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.equipment_request_view_form +msgid "Date" +msgstr "" + +#. module: maintenance_timesheet_time_control +#: model:ir.model,name:maintenance_timesheet_time_control.model_hr_timesheet_switch +msgid "Helper to quickly switch between timesheet lines" +msgstr "" + +#. module: maintenance_timesheet_time_control +#: model:ir.model.fields,help:maintenance_timesheet_time_control.field_maintenance_request__show_time_control +msgid "Indicate which time control button to show, if any." +msgstr "" + +#. module: maintenance_timesheet_time_control +#: model:ir.model,name:maintenance_timesheet_time_control.model_maintenance_request +msgid "Maintenance Request" +msgstr "" + +#. module: maintenance_timesheet_time_control +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.equipment_request_view_form +msgid "Resume work" +msgstr "" + +#. module: maintenance_timesheet_time_control +#: model:ir.model.fields,field_description:maintenance_timesheet_time_control.field_maintenance_request__show_time_control +msgid "Show Time Control" +msgstr "" + +#. module: maintenance_timesheet_time_control +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_kanban +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_tree +msgid "Start work" +msgstr "" + +#. module: maintenance_timesheet_time_control +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_form +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_kanban +#: model_terms:ir.ui.view,arch_db:maintenance_timesheet_time_control.hr_equipment_request_view_tree +msgid "Stop work" +msgstr "" diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/models/__init__.py b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/models/__init__.py new file mode 100644 index 0000000..df8c9b5 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/models/__init__.py @@ -0,0 +1 @@ +from . import maintenance_request diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/models/maintenance_request.py b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/models/maintenance_request.py new file mode 100644 index 0000000..cf5e70b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/models/maintenance_request.py @@ -0,0 +1,34 @@ +# Copyright 2022 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, models + + +class MaintenanceRequest(models.Model): + _name = "maintenance.request" + _inherit = ["maintenance.request", "hr.timesheet.time_control.mixin"] + + @api.model + def _relation_with_timesheet_line(self): + return "maintenance_request_id" + + @api.depends( + "project_id.allow_timesheets", + "timesheet_ids.employee_id", + "timesheet_ids.unit_amount", + ) + def _compute_show_time_control(self): + result = super()._compute_show_time_control() + for item in self.filtered(lambda x: not x.project_id.allow_timesheets): + item.show_time_control = False + return result + + def button_start_work(self): + result = super().button_start_work() + result["context"].update( + { + "default_project_id": self.project_id.id, + "default_task_id": self.task_id.id, + } + ) + return result diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/CONFIGURE.rst b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/CONFIGURE.rst new file mode 100644 index 0000000..d3fda16 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/CONFIGURE.rst @@ -0,0 +1 @@ +Maintenance request must have a project defined for seeing the start/stop buttons. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/CONTRIBUTORS.rst b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000..5fb7130 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +* `Tecnativa `_: + + * Víctor Martínez + * Pedro M. Baeza diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/DESCRIPTION.rst b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/DESCRIPTION.rst new file mode 100644 index 0000000..ae06ae9 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/DESCRIPTION.rst @@ -0,0 +1,3 @@ +It allows to track the exact moment when a timesheet line is started (not only +the day, but also the minute and second) and let users start and stop timers +easily. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/INSTALL.rst b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/INSTALL.rst new file mode 100644 index 0000000..97dfcda --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/INSTALL.rst @@ -0,0 +1,8 @@ +This module is auto-installed when ``maintenance_timesheet`` and ``project_timesheet_time_control`` are +installed. + +This module depends on modules found in these repositories: + +* `OCA/timesheet `__ +* `OCA/web `__ +* `OCA/project `__ diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/USAGE.rst b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/USAGE.rst new file mode 100644 index 0000000..a8ba28b --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/readme/USAGE.rst @@ -0,0 +1,16 @@ +In general the usage instructions from ``project_timesheet_time_control`` apply with the following additions. + +Via maintenance requests: + +#. Go to *Maintenance > Maintenance > Maintenance Requests*. +#. If a request has a running timesheet line, it will display a *Stop* button. +#. Other requests that have enabled timesheets will display a *Start* button + that will open the same wizard as the timesheet lines, duplicating task's + last timesheet line. +#. You can see the same in list view. +#. Click on any existing request or create a new one. +#. You can see the same feature in the action buttons box. + +Note: All the *Start/Resume/Stop* features are disabled if you don't belong to +the *Timesheets/User* group or if you are viewing a timesheet that belongs +to another user. diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/static/description/icon.png b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4mJh`hQoG=rx_R+Sc;uILpV4%IBGajIv5xj zI14-?iy0VruY)k7lg8`{1_lPn64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xh zq!<_!7(87ZLn`LHt*tDHIlA-t`n>mR!&YzIGHsf8<B$$Um>gET_{naxk1`20D+ zGK1xw!NbPN2|bO89~+N%pEppq=(kLCGSX2uHprJ_E^{*IKIp)+&2id6vuztyvNuL$ zdA^-?<<(!k&+e;bY|S+1xq)99o0@Rk`trRhp89;eyjLw{_#}Fd?PYlPp~B|v=eA_19fIY=^}d z`Y&%tFz9&nD2bzqq3^N7Y3E5x%2bvfyytoH4a>tliVpGd_uqPi)yOgkI3;YpnXolV zu}g_VQNUGDSy{Q`_+thJ&q)fNm%Ljh{I-=l|6ob#z6OiuoDV+#yjCpp-J;>E$(bCp z!w(A@1ehEJBp7+vm>Cp=Iu%5?97SBcnhpjE?J=>;544!GndL*(UcJdDzeqD|zicr1 zB+Kr*e2YIu-<|%v(v6{Vhej6%TXV!XHp{%V<0*k8n&wuV=P@CM@diu2MB$aErCl1|Wb=;ABZB1k~ z_h&QV=Hey>W@hHnmI>mVimzY(p5dc*Bgd>DX4lfyQy6T{FBf#s-KW4IAt~voG%?}2 zOJGfAO3IUeZEbCtD^>imnJV_iO~0CT*NLN2#v@Eb^n2E$n76T&^VrXSeqiAj%%pL6 z(M63z4-G;E6g@93Q1QH-c5cqkoO^M3O$ND~1>fG>yv?b&U$JF}iYJpIOWNj{Uq6e? zyyrh@i3rn-v(L8ti2Ck5sU^Xn!$s-fqmD&8!UbA>zkc3 ziU$rHaF}~BqejMP^SKO@Lpf%~zhzJ8?7BL^L&eC8!E}XZr-w?DhsvZ!o>NpZPic2v zZennDcJ}v}bmWYc6NiqNx0n6;?MJl_Ph~m5wzO2CU4et6)k)K9kpf4)o6aPU zSLF3*ii(4Q#G1(}FI}BZR4GKRa9b>>Ho0?V>CUiyVM|Y{I+(E#x-H9v*zSvrgWYDY;)+L z0gK}V;lyYYskuU4kESR(7)UJnwx_#orq8lHUp~)#q$k=wg@|In{oEpvuoF`&Aya(%9u-w zvFYG~(+LKD+8*z?eUsUJd0b}i`QV<=&F8<_oqGLAPeEKYKzH7~F#Rs2V7sTu99b{D zCVfe>k=wt2;lhQskGp#XStm1G%qZ!;m|>&4zNY!$gk^WN7ha9pa%gH{(ZPx-wzK4a zs^6~dbYXf}Ah9rj<6}ikcpayr`AnZ>&w`ixLS?`q;$0^Y1a_@mf z-`D7@M|C=DD|DVsySJlicSFw06WZP9jHlfG9aUJY*r4LM;bsm;tJ8U|rVYFd$5v}R zo64{;qDS>uVa%*Z_7~UB86Q0#DtKm!oGQatmNYNz;MYqppMI*`m{quW>Edrbo|6*H zW(UT_ojaz@#?Jno$sscGrsypFbe^h=j6G3~$4&#>dorqjo!*2RH}>j&R| z8x}wFiC7!vG3kg}43o$2X~}DTIjWtwe8pKww|8!s(b|H_sxQ&`|B4&WrZt~_np7-W zU0r?g>eZ=gsmGf4tmo@LaD zn!M^+c;6^|ZJtJ_!~f?_0!|#KPM=QPew$I{?$xzx*Gfo9ow8h;b3&W($;?kbYdBb# zW>^-hb#--JdURp>i7T=hGrO~{U;P!l^~=+#UhL^k3k7CpEUM{ua`5D;Y!wq1U%X^V z%h~D|@7^7oX`CMN{w(_^J;o=J-YP;F+1bvnuB@w8t-9pnC>0+0z^f=FXxf*o^HJv) z-v6?A%><{8GSeA8YCB@|(mGk19ZSl}ltj3m?!EL>LxWM{Po4c_wxdUnW{S>VJHdGC zjG8Cr)0@tg$653>AAXqNHBW)#L)G3FZ{Mb#pR9b}WyS_sCzn7McX#$Ve(GswW=yl9))tt96$K7#7I?tqQ`>OtGSz-n^)=DOg?8EC*s3-h3Rg`!tL9| z4<-m~-MZCarVnf4cDW0RFP(%O{2XSVZJRVn$ZglZe{~gm~^x#st$phB>A=9iiSO6EXp3PI@wy_#!?q(vZ^qd)0Vjb@mkW3A_D-BQam%S|K`u`d zv%2GsH#LiBqm@+k$s*3kLWXafa;HYui`TE6 z{r&sj*@&ECVo-Br%82bhnq*P?%S1~{D%|2UTHTTSZ0j|~y zH*a=U*sNQ*J7Zx$+RG(nj9C&A5(h3^5Xj2Py7Ayl#b@J-TnfhvHMF#n_zVI?9)7J7 zZ_-w*eGP) z3RLx9tMoLWtTt-KH6exRO>%N_$4;E!Shad}@ST%CUF=jC-a5_kQ;$xV<)QN6Yn7pq z(V<5x9M>*Q-}FCoj^=8XXTftWO@H_DrDI^A;GMkfuVk8QY|?FhZoBjvk$H8{E>N^^@;Gp0FH?sEUBrf8k(9Xqjx=CS+n>esJ&%&-cYRj;OnnSLY*t@ z*iYP@c3sJ7pH!41M}Wp;*GVcr{?@fPDekzNcUALgvg^9aG7FgvH*?NxS-dt*S9hz| zmF!z-MV!x>gLiRXa59l{4G$Oh^7j6$#9K6xNo_Lc(W6J#XiG^-HlBZ;{I8m8tyhpV z=he?Sy7y0180PL`FlAwCoU`;`gs-DjmizN3f#usSO`h&~B)x0;$vfIdBp8lvdByZ( z0jpsD@r!rw@-Dy3IsNof%{t>=tF+VWuV%I0%}by4{lNo;KXvxElgy&!u6|mgdh6<= z)pyNR*D~l9PUCk<`8Rc5rJo&D3tgEOU+h@4Na@+h$CYw+^Z6eZSR}`7`8023 z($ni(OBkPStx34$!C`FMEY~_FTTjpe)!-$MXBCJ>(~2-o(#6L z4)>2!>$R7jxNME6LEwpHiNTXECT&cSjaf8r&!R<(L{#+!I1(~4JU&-uoeynG-DN&| zsY3m9pL>TsCV2I+rZ_DV56{-z7{OCpTdSd`=O_5GC}M5cvy;q|q|Lv4|DL{PLCmk> zwSP1(Ul#ftrE-FuYY|J@sRX^5*Ntu#^=f+xwY9ek_PPbe#LU^GX>#>L;}SkY1A~SP z6RTx^Rz3AxUvGbV#eAc@eYQ%=@cZwZ8KoF< zKB!6XELy%?ed(v;v-EeyE&LX(&HL2!SG3%^J>`2eGQ*;2T?H9B-P`ZT<1nDK4Dd+|<V8ya+Ae>& zc#)%f88(!>yrf;Sw}Fi-o7Lk0&wl3fIdwd2%O!X3yV;z3dt0MGQ}+73V%*|-XKpY4 za^p@_)UAjK-Rl z9%!O5PluQzSVfB)i*i?=s7i(|vdj3b|(p1xVM%W1-b1ijsj`sWlBRr{lg zD^G3wG(9}|9e?FxO-k6KF+(V#G*kB0Ju9Zk2RWLJzpC(^=NCIw=Wbh;#%&5lgX(40^uYHXSwpdfHypTB+U$&^D~PftHA z+wJIaslI5%PD{(%83_%%rO&HP4Au)dy!-G_Monb)TMl(4k1y^)66XtLPD$Bn#04}O zw?_$D+s+9VU*K*d-Rm}G%9IV6(VZ?#O$r;9Mn=61+-`99rixg%q72{WwTVS1owt3L zkdr&Me10w4}9`wIcoZ)cW1*E6cydfF|(NKC&9zkv8W?LhpqYG1hs$06OTVE*uW*g!uYUY#@ZJr z-8?FHe2SKPe)+tev(m%^uHvy%HhEk9oin{)aQoEyEzi+<9L?fx`Yd^dU(y?NZ=|8U6r4;<>im~PTom=eeOYyZbZ`Q_YiriU$Fxw3O++Tp{8GjelXBO@il*2bLF z3S0Z&shr0yWA)sRS!-o3q~E{1^8UpPk&O{Ob9vG>MwpzJn6&)o*N=~1ym@h;z<`5c z#rpNfA93p)_$aK-;CYC(TWn+Xlb~_%Do@PJ#jpLJvO6$r{ztN z8<#nq8U-0xI0GHlpFdvqX3_4>&o=%4{?*m|J1V}4*;K5XRaI3rr=PLPL-_7Oli=$U zecw;;X5M{wo)Yh(iy60C0#c94SX2nO_sgYD_1`_+!=!6-`uR<=P8v_v?q9sPxpj4< z-p@lVJ{&9mw{PY6d-=CT@dD9>4gycTR|RffD7Sb0e1{4JjtMD>eEj^(3_LRJrPE{C zrk`$2Fz5(gyY@v!{_)0U_Koj0osMw4m17oWQSv$U=d~?ae>YyMH`RDN!$-|xu3wpy zgso4MCa=;&j(^+o<^R;#uL;u@(}`g45OUyoi z98Ay7&OW~GVvX-f&xImct-BvRTwVAk-p=ts3xE3lm(JJM33q%vY3HZZFwyvcRa8f5 z@iT+X$6uBtJ^l2wKt%N6jg83`1s@dF?fT?(Z9R8WgNqVl^T7#08Z$i>Ea$%P>AkR1 zKu8G7=9_1}G-jA|xhOI2zRMRV@ZsO@_sJ?Ehk7K93tp;DU$R8gQ>f*lUS2{1sAo}{ z`}gnP47(bMg#jGXW2-cs77Ao#X9w?U*R&O5$k=X@q!6*|X;I0ZN|Cp__q+A!&XXRCcrrm|)vvB${*gtao7f=b$h9YPmjU$fT`iJ^K0dftfrr%=6{;{duKb zGS{+ssrU4{*(WbPj#;c0VYw669(X;9$9M`Ev8CRa$FecZY4gWYOoGnySjf#%!!_ZDoCPYq$O` zj;mL%W>$tvr<`KvTE?7mI^pYg@g=Q=GVPl-8O^b+7Gtin*Seb*p(B>o?>(vIwEq4% zU%$q!pWf*+`)=RP;%5mbA03_bZAX;cSFt4;T@_Czx(o2NU%Ygwsa?KKBK!Kf)a%|} zULQWH&u@5ap%b-5!_|C&%7SOfnVFi`)<(DY+y9fWIe$27>!G)0$zNB6&ic9J#C8#l z6_OtRpErqWhdtQ){odh|lhqBEuj||TDME*hK{NZ)x4JKaw_~-%x*rB8G&r~OJ?#4W zIxswZ`ON)3|F?d4)UE&Mtoi*T-TyzapAov-!GGl9*5@i|u~!*5h4$Fmg38M^k((bB zSX?S$X87@BvVXv%qQuB#Wv#n;e?Cl$p5UR9U?O!{tvTZ?!>miO3`Z-D1V?6Sis?l( z1ncVl_|vVwq3WvEhnk|0z;#dNS{AqU-jd{DtFV#d;p0=1;CXa-Z?$3hyO@}Ld9l}Q zQctbc=(@2zUmn!3ICsu3C-##u&%PqAW((6Q;|KpY$e#ZH(rVl0bWcxCFE1|vzV_gf z=EL!IopJN|Mf1u}89#}B!uTq9zfmdc@6S|>{r~s<=Gj-sr?6UZcab^_~V24|8MVq`1bDZj-ShB2gJqA`xax$-nS_L)K=T`DL&pIDO{h& za6!>Yo-_Xs8VM|Cy|=%n_uSw64ihF>_et}xeX!}@oPOSDW1i8>3necEs;a6IOr$m@ z9p!2{oH*m`Gm-BmwcDarU;i~<-{;jK0jEie^RM(QKE9ICGbm&{o(okKdip(d=F>wN?-bw)R8-W5 zo5A%*Z$>a|zHYMMqr6_~_1Nz*O#eIOc;?GC-PwEd?bk>D_kLtsVP{Z86JrO2YaQhb9)`^h2O#+EN###s?n^D(1Bxe|(UC-Try9zm??IFHr8ec`E32 zy`90sZ026KECVQA&#-?bmAhj7adBVYjI69fy8>JN z;~Y*)NngBkr{{1xzxv&cU0bGpeA>aT^yAb28m{k)qD=lh7S+72;>l#uv@d^;fdtQt zotc6iiZ`dtnmwD5A$020jEoG2)Kt~o{dq=${l{`_UzbyQSz;XzjM1GcLYPjg>*S#s$8_ruRWFI=@s>+P;v z#wwnN7CyIQVbJ;c@YR+sMuz{-V+C9Uw`xCcGFI!1-d~{jN?gy!@cEPbUv6$;ys-Gm zN|D9Jldq=PhYCFocCHvj#--njYty&g*! z|7Q77V|R7S6$RIdFS6c#Nt&5!{7wrivbg{M&REcL_|NQV8-H80a!0?OeN0zNE2&s; zrAdd2l4R-Rn#Bu*oqF7q-;`NPzgcj2h0XcZe0MbJwJ!%Nciet^?AF$7!T#eP&so1; zuzY!YY`=?=#oddHo|7g>d{s?(_5J1Y;_rnXlUPLFHZ~iQHU^mPglHh9-?gUyrJV#2Sj%#+NMk9wGj#uk^6# zawhTr&tG3I;oSQ!dTrg@bFMuuN^gEdS}k20uzTH;xeP_cy;_w~!JDs4=#;qmZvD!Y z2j6bL+xF~Pnv883j}SxS^P4s{wq46qJPjt~@9lHH_fIB%Z>>N|NpJAiNi%o+xY)~Z zGH1KCDg*E7Yeg$fJXC~o%7jh(pL$)aW>xm5`@qN}&BW|+jcBy@FH z;?-553M~o$|NZ^(Y4!S&`~DmU??_8O{Jn_#-ZVc4r%j(Y3l5%L9k9Q$G^}v_)Ou4* zhr?4Z9Z4}dm|(EsBg-q5#fMLL$tJEjp$(ea*|mFjU{utpX$gTn?pI!~wb=Uq^Ru&u zFD4&1ab2PHP{%Fi&l5Kuleq^U%w&|XV19OQlTL0C+g^L|@40$^%@sY!^oOnVGzt!KWSS@-}L8$qPFjIod70ylQ2U%f4{7t;{ERe%IKQl$WQ^xxFs!TB>pW zm38SxZ=WQdxuYR$x{ay9{zu(uZKHkFm zS&NZF@s9QTJ)7^oEV1)A+~cOKrKNR4<$R9RUbkJzT$j6)r!!`4fiYlX>gj2(&GYX3m~r^w z3~MRA-FN#|ty(puS9{qE-G78GXK-_x^Y@0Uy7*7NHB{hZ6N zYhrttzWY5+1_Pl2hE;Wc9?QoU-Ok-^`>JT?v`f=B-OO3BZk^xl1(|C^SDE)D6%+_K zZ2EAwOEbzO=I7j%la4E~KDo}~=wKk>llj%=e0x+>RN3Db?)Ja(8Tyz!6#Uo5^)(4J zsLor%s@=fqZ~OHM|Mj)e-y3e`q%F6fI(_I~pAxoamFao>%+#>-BO*i*BY68&^k8h9zFjS67GY*MGU_{@*(_ z_36+7x8>vq3mTzxglvWi!4I``G9S7%w5_HMm& z_0cI+2UpkDRqFov`{!z|6Ju;TsL-^S+f8%V?%m&Q{(Lz6fA7wnKb;v4Yb30mo_vUd z!9YlWAyqqk-JTx@+2#NIoMTy>x8(ZSG~=wSEF-H4Dw^B({=IT3z>8t$aX)>=DG#eS z1Y~1Hb?p80ggU>xy|c6U_+@|lzg7)qJ`Ss=Cp&Q-kegLgt=w=ldVAj9XRlVT|5u%5 z#ME&5Y18q?o;OXCdCp(>{_V)Jw@Z#dn?k5&! zPUlu@WpL;+(O}*1<>~bJeXIBFt25r4XCn3RV?{tz)T-GmRi$jIj8_(1-F0Z{j> z9~RvD=>&>`?Dc!U9S^*`j=RC4>U~T2u_b~HsSlzvH#}Ik``xZb)1vc!R!={DG^{P? zuEOP$@;kM1(*(UYsz?{+*EWr%0!NEC|ND>K=TpI(@BY`A&c@fy zymjl=Rn|4noj5AR9kypIFNKgL4(&He%5F*C)k{C|MuqQ z=H%Dc)><>xbTV0%9P83_Wl(UH5@GytZ?eB#<(}0yUl#_f zc)ND{yWB7Fa^tKZG??(8_4v~j~zv#C?3 zeyFgKWS>6eVG-v7H-*%hE5813QrNIK`Kd+SpC7BY->Z79%`l7Mhaqe9UYX!o3?fEK zXCikNJv{{~$kdCUo!QwKXFmJv4AX3}IeyF68M5s9xkSaYz(PiH{@Spg&d$ytcilW$ zTu|@oXWOeV zzDn^0ZVZ((TbvYs)a;wG@mGe)t?k*@*U8@Ap8sFE;V^^K47as$eVLvhgVGoxe*O7; z{{EhdkB`oloNGLo02-FMUDlgaQ86QQ)2#N1v&yzyJw2~|+qP}7{`P;rtUi18?0lvd zjzw+fwq$)R^2ugm&{Q#CjM$ucd0A!o-O}rGKUuQ#wKE&1pK}QeEYjn;J1K0^k}bUR z8=ojn+PinJX1Bi6!hqZJ|9x40f8U2g-13j3FXu&VtFl~X%czm!vVwKPmy_!A_k1~} zy?)R643kZg9;T+IE7q>{Rct6?Tz&qzx8zn~7R8b$Cnkc!_CNOnhDl!crd)sb_0b$f zh6!rCVfxYAa*hf6+Y~Op)0na`A|NK_%rS-+o8CAmfEHkwTzyx**j9JL<~ zvRlhlKAG5Gz_+c+@|-6VLuOrb_cYz;u)hbG`R{1VFJACW<5Sh%YEX^W{_NQ^X9mCI zkdw^k_MT!tmk0{12MkvjGXC5=U$^bSwdnl4;qM%nCM~-goxgW$^6zhN=QCPxC^QxC zc%*qQlPN&s58Ga* Q3=9kmp00i_>zopr09!l7U;qFB literal 0 HcmV?d00001 diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/static/description/index.html b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/static/description/index.html new file mode 100644 index 0000000..e8c0318 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/static/description/index.html @@ -0,0 +1,465 @@ + + + + + + +Maintenance Timesheets Time Control + + + +
+

Maintenance Timesheets Time Control

+ + +

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

+

It allows to track the exact moment when a timesheet line is started (not only +the day, but also the minute and second) and let users start and stop timers +easily.

+

Table of contents

+ +
+

Installation

+

This module is auto-installed when maintenance_timesheet and project_timesheet_time_control are +installed.

+

This module depends on modules found in these repositories:

+ +
+
+

Configuration

+

Maintenance request must have a project defined for seeing the start/stop buttons.

+
+
+

Usage

+

In general the usage instructions from project_timesheet_time_control apply with the following additions.

+

Via maintenance requests:

+
    +
  1. Go to Maintenance > Maintenance > Maintenance Requests.
  2. +
  3. If a request has a running timesheet line, it will display a Stop button.
  4. +
  5. Other requests that have enabled timesheets will display a Start button +that will open the same wizard as the timesheet lines, duplicating task’s +last timesheet line.
  6. +
  7. You can see the same in list view.
  8. +
  9. Click on any existing request or create a new one.
  10. +
  11. You can see the same feature in the action buttons box.
  12. +
+

Note: All the Start/Resume/Stop features are disabled if you don’t belong to +the Timesheets/User group or if you are viewing a timesheet that belongs +to another user.

+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

+
    +
  • Tecnativa:
      +
    • Víctor Martínez
    • +
    • Pedro M. Baeza
    • +
    +
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

Current maintainer:

+

victoralmau

+

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

+

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

+
+
+
+ + diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/tests/__init__.py b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/tests/__init__.py new file mode 100644 index 0000000..83469cf --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0 + +from . import test_maintenance_timesheet_time_control diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/tests/test_maintenance_timesheet_time_control.py b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/tests/test_maintenance_timesheet_time_control.py new file mode 100644 index 0000000..bae3263 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/tests/test_maintenance_timesheet_time_control.py @@ -0,0 +1,96 @@ +# Copyright 2022-2024 Tecnativa - Víctor Martínez +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0 + +from datetime import datetime, timedelta + +from odoo import exceptions +from odoo.tests import new_test_user, users + +from odoo.addons.base.tests.common import BaseCommon + + +class TestMaintenanceTimesheetTimeControl(BaseCommon): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.user = new_test_user( + cls.env, + login="test-maintenance-user", + groups="maintenance.group_equipment_manager," + "hr_timesheet.group_hr_timesheet_user", + ) + cls.user.action_create_employee() + cls.project = cls.env["project.project"].create( + {"name": "Test project", "allow_timesheets": True} + ) + cls.category = cls.env["maintenance.equipment.category"].create( + {"name": "Test category"} + ) + cls.team = cls.env["maintenance.team"].create({"name": "Test team"}) + cls.equipment = cls.env["maintenance.equipment"].create( + { + "name": "Test computer", + "category_id": cls.category.id, + "project_id": cls.project.id, + "maintenance_team_id": cls.team.id, + } + ) + + def _create_analytic_line(self, request): + return self.env["account.analytic.line"].create( + { + "date_time": datetime.now() - timedelta(hours=1), + "maintenance_request_id": request.id, + "project_id": request.project_id.id, + "account_id": request.project_id.analytic_account_id.id, + "name": "Test Maintenance Request Timesheet line", + "user_id": self.env.user.id, + } + ) + + def _create_wizard(self, action, active_record): + self.assertEqual(action["res_model"], "hr.timesheet.switch") + self.assertEqual(action["target"], "new") + self.assertEqual(action["type"], "ir.actions.act_window") + self.assertEqual(action["view_mode"], "form") + return ( + active_record.env[action["res_model"]] + .with_context( + active_id=active_record.id, + active_ids=active_record.ids, + active_model=active_record._name, + **action.get("context", {}), + ) + .create({}) + ) + + @users("test-maintenance-user") + def test_maintenance_request_time_control_flow(self): + request = self.env["maintenance.request"].create( + {"name": "Test computer request", "equipment_id": self.equipment.id} + ) + analytic_line = self._create_analytic_line(request) + # Running line found, stop the timer + self.assertEqual(request.show_time_control, "stop") + request.button_end_work() + # No more running lines, cannot stop again + with self.assertRaises(exceptions.UserError): + request.button_end_work() + # All lines stopped, start new one + self.assertEqual(request.show_time_control, "start") + start_action = request.button_start_work() + wizard = self._create_wizard(start_action, request) + self.assertLessEqual(wizard.date_time, datetime.now()) + self.assertEqual(wizard.name, analytic_line.name) + self.assertEqual(wizard.project_id, request.project_id) + self.assertEqual( + wizard.analytic_line_id.account_id, request.project_id.analytic_account_id + ) + self.assertEqual(wizard.analytic_line_id, analytic_line) + new_act = wizard.with_context(show_created_timer=True).action_switch() + new_line = self.env[new_act["res_model"]].browse(new_act["res_id"]) + self.assertEqual(new_line.employee_id, self.env.user.employee_id) + self.assertEqual(new_line.project_id, self.project) + self.assertEqual(new_line.maintenance_request_id, request) + self.assertEqual(new_line.unit_amount, 0) + self.assertTrue(analytic_line.unit_amount) diff --git a/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/views/maintenance_request_view.xml b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/views/maintenance_request_view.xml new file mode 100644 index 0000000..977e2a2 --- /dev/null +++ b/odoo-bringout-oca-maintenance-maintenance_timesheet_time_control/maintenance_timesheet_time_control/views/maintenance_request_view.xml @@ -0,0 +1,168 @@ + + + + hr.maintenance.request.form (in maintenance_timesheet_time_control) + maintenance.request + + +
+ +
+
+
+ + maintenance.request.form (in maintenance_timesheet_time_control) + maintenance.request + + + + + 1 + + + + + + +