From 8e69382d84eaa36b2208cbd1bf7362ee6eba78f5 Mon Sep 17 00:00:00 2001 From: Marc Durepos Date: Wed, 10 Sep 2025 13:37:16 -0400 Subject: [PATCH] [MIG] partner_equipment_applications to 18.0 --- partner_equipment_applications/__init__.py | 1 + .../__manifest__.py | 36 ++++++++++++++++ .../models/__init__.py | 2 + .../models/application.py | 29 +++++++++++++ .../models/equipment.py | 17 ++++++++ .../views/application_views.xml | 39 +++++++++++++++++ .../views/equipment_views.xml | 42 +++++++++++++++++++ 7 files changed, 166 insertions(+) create mode 100644 partner_equipment_applications/__init__.py create mode 100644 partner_equipment_applications/__manifest__.py create mode 100644 partner_equipment_applications/models/__init__.py create mode 100644 partner_equipment_applications/models/application.py create mode 100644 partner_equipment_applications/models/equipment.py create mode 100644 partner_equipment_applications/views/application_views.xml create mode 100644 partner_equipment_applications/views/equipment_views.xml diff --git a/partner_equipment_applications/__init__.py b/partner_equipment_applications/__init__.py new file mode 100644 index 0000000..0650744 --- /dev/null +++ b/partner_equipment_applications/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/partner_equipment_applications/__manifest__.py b/partner_equipment_applications/__manifest__.py new file mode 100644 index 0000000..5bc56b9 --- /dev/null +++ b/partner_equipment_applications/__manifest__.py @@ -0,0 +1,36 @@ +# +# Bemade Inc. +# +# Copyright (C) 2023-June Bemade Inc. (). +# Author: Marc Durepos (Contact : marc@bemade.org) +# +# This program is under the terms of the GNU Lesser General Public License, +# version 3. +# +# For full license details, see https://www.gnu.org/licenses/lgpl-3.0.en.html. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +{ + "name": "Partner Application Equipment", + "version": "18.0.1.0.0", + "summary": "Make the link between customer_applications and fsm_equipment.", + "category": "Services/Field Service", + "author": "Bemade Inc.", + "website": "http://www.bemade.org", + "license": "LGPL-3", + "depends": ["fsm_equipment", "customer_applications"], + "data": [ + "views/equipment_views.xml", + "views/application_views.xml", + ], + "assets": {}, + "installable": True, + "auto_install": True, +} diff --git a/partner_equipment_applications/models/__init__.py b/partner_equipment_applications/models/__init__.py new file mode 100644 index 0000000..adab03c --- /dev/null +++ b/partner_equipment_applications/models/__init__.py @@ -0,0 +1,2 @@ +from . import application +from . import equipment diff --git a/partner_equipment_applications/models/application.py b/partner_equipment_applications/models/application.py new file mode 100644 index 0000000..7ec1352 --- /dev/null +++ b/partner_equipment_applications/models/application.py @@ -0,0 +1,29 @@ +from odoo import models, fields, api, _ +from odoo.exceptions import ValidationError + + +class PartnerApplication(models.Model): + _inherit = "partner.application" + + equipment_ids = fields.One2many( + comodel_name="fsm.equipment", + inverse_name="application_id", + string="Equipment", + ) + equipment_count = fields.Integer( + compute="_compute_equipment_count", + string="Equipment Count", + ) + + @api.constrains("equipment_ids") + def _check_equipment_ids(self): + for application in self: + if len(application.equipment_ids.partner_id) > 1: + raise ValidationError( + _("An application can only be linked to one partner.") + ) + + @api.depends("equipment_ids") + def _compute_equipment_count(self): + for application in self: + application.equipment_count = len(application.equipment_ids) diff --git a/partner_equipment_applications/models/equipment.py b/partner_equipment_applications/models/equipment.py new file mode 100644 index 0000000..4fb8576 --- /dev/null +++ b/partner_equipment_applications/models/equipment.py @@ -0,0 +1,17 @@ +from odoo import models, fields + + +class Equipment(models.Model): + _inherit = "fsm.equipment" + + application_id = fields.Many2one( + comodel_name="partner.application", + tracking=1, + domain="[('partner_id', '=', partner_id)]", + ondelete="restrict", + ) + application_type_id = fields.Many2one( + comodel_name="partner.application.type", + related="application_id.application_type_id", + readonly=True, + ) diff --git a/partner_equipment_applications/views/application_views.xml b/partner_equipment_applications/views/application_views.xml new file mode 100644 index 0000000..f7dd12f --- /dev/null +++ b/partner_equipment_applications/views/application_views.xml @@ -0,0 +1,39 @@ + + + + Partner Equipments + fsm.equipment + list,form + {'default_application_id': context.get("application_id")} + [('application_id', '=', context.get("application_id"))] + + + partner.application.search + partner.application + + + + + + + + + partner.application.form + partner.application + + +
+ + +
+
+
+ +
\ No newline at end of file diff --git a/partner_equipment_applications/views/equipment_views.xml b/partner_equipment_applications/views/equipment_views.xml new file mode 100644 index 0000000..6d7d34c --- /dev/null +++ b/partner_equipment_applications/views/equipment_views.xml @@ -0,0 +1,42 @@ + + + + fsm.equipment.view.search + fsm.equipment + + + + + + + + + + + + + fsm.equipment.view.list + fsm.equipment + + + + + + + + + + + fsm.equipment.view.form + fsm.equipment + + + + + + + + \ No newline at end of file