From a275fe150a6b6070bdddf67eedbab99b91830a66 Mon Sep 17 00:00:00 2001
From: Andreu Orensanz
Date: Mon, 4 Nov 2024 17:22:14 +0100
Subject: [PATCH 1/4] [ADD] repair_service
---
repair_service/README.rst | 103 +++++
repair_service/__init__.py | 3 +
repair_service/__manifest__.py | 17 +
repair_service/i18n/repair_service.pot | 93 ++++
repair_service/models/__init__.py | 4 +
repair_service/models/repair_order.py | 17 +
repair_service/models/repair_service.py | 70 +++
repair_service/pyproject.toml | 3 +
repair_service/readme/CONTEXT.md | 1 +
repair_service/readme/CONTRIBUTORS.md | 3 +
repair_service/readme/DESCRIPTION.md | 1 +
repair_service/readme/USAGE.md | 1 +
repair_service/security/ir.model.access.csv | 2 +
repair_service/static/description/icon.png | Bin 0 -> 9455 bytes
repair_service/static/description/index.html | 454 +++++++++++++++++++
repair_service/tests/__init__.py | 3 +
repair_service/tests/test_repair_service.py | 103 +++++
repair_service/views/repair_views.xml | 29 ++
18 files changed, 907 insertions(+)
create mode 100644 repair_service/README.rst
create mode 100644 repair_service/__init__.py
create mode 100644 repair_service/__manifest__.py
create mode 100644 repair_service/i18n/repair_service.pot
create mode 100644 repair_service/models/__init__.py
create mode 100644 repair_service/models/repair_order.py
create mode 100644 repair_service/models/repair_service.py
create mode 100644 repair_service/pyproject.toml
create mode 100644 repair_service/readme/CONTEXT.md
create mode 100644 repair_service/readme/CONTRIBUTORS.md
create mode 100644 repair_service/readme/DESCRIPTION.md
create mode 100644 repair_service/readme/USAGE.md
create mode 100644 repair_service/security/ir.model.access.csv
create mode 100644 repair_service/static/description/icon.png
create mode 100644 repair_service/static/description/index.html
create mode 100644 repair_service/tests/__init__.py
create mode 100644 repair_service/tests/test_repair_service.py
create mode 100644 repair_service/views/repair_views.xml
diff --git a/repair_service/README.rst b/repair_service/README.rst
new file mode 100644
index 00000000..1ba25a31
--- /dev/null
+++ b/repair_service/README.rst
@@ -0,0 +1,103 @@
+==============
+Repair Service
+==============
+
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:62e6c28ce5e0812243297177f509b29023e6996ede4ff0cae11bc6aa06e0a6b2
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |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%2Frepair-lightgray.png?logo=github
+ :target: https://github.com/OCA/repair/tree/17.0/repair_service
+ :alt: OCA/repair
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/repair-17-0/repair-17-0-repair_service
+ :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/repair&target_branch=17.0
+ :alt: Try me on Runboat
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module introduces repair services. It adds a new "Services" tab in
+the repair orders, where users can add and manage services associated
+with the repair. Once the repair order is confirmed and a sale order is
+created, these services can be automatically added as sale order lines.
+Moreover, if the repair order has the "Under Warranty" field checked,
+the module ensures that the corresponding sale order lines price are set
+to a value of 0, reflecting the warranty coverage.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Use Cases / Context
+===================
+
+This functionality is similar to the "Operations" tab that existed in
+previous versions in core Odoo. This tab allowed users to manage
+services and operations in the repair orders. This module reintroduces
+that functionality and adds these services as sale order lines when the
+sale order is generated.
+
+Usage
+=====
+
+When creating or editing a repair order, you will find a new "Services"
+tab within the repair order form. In this tab, you can input and manage
+the services performed as part of the repair order. Once the repair
+order is confirmed, when you creating a sale order from the repair
+order, the services listed in the "Services" tab will be automatically
+added as sale order lines.
+
+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
+------------
+
+- `ForgeFlow `__:
+
+ - Andreu Orensanz
+
+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/repair `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/repair_service/__init__.py b/repair_service/__init__.py
new file mode 100644
index 00000000..31660d6a
--- /dev/null
+++ b/repair_service/__init__.py
@@ -0,0 +1,3 @@
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from . import models
diff --git a/repair_service/__manifest__.py b/repair_service/__manifest__.py
new file mode 100644
index 00000000..247bc9c9
--- /dev/null
+++ b/repair_service/__manifest__.py
@@ -0,0 +1,17 @@
+# Copyright 2024 ForgeFlow S.L. (https://www.forgeflow.com)
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+{
+ "name": "Repair Service",
+ "summary": """
+ Adds services to repair orders, so that they can be added
+ as sale order lines.
+ """,
+ "version": "17.0.1.0.0",
+ "category": "Repair",
+ "website": "https://github.com/OCA/repair",
+ "author": "ForgeFlow, Odoo Community Association (OCA)",
+ "license": "AGPL-3",
+ "depends": ["repair"],
+ "data": ["security/ir.model.access.csv", "views/repair_views.xml"],
+}
diff --git a/repair_service/i18n/repair_service.pot b/repair_service/i18n/repair_service.pot
new file mode 100644
index 00000000..f3fbd5ec
--- /dev/null
+++ b/repair_service/i18n/repair_service.pot
@@ -0,0 +1,93 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * repair_service
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.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: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__product_uom_category_id
+msgid "Category"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,help:repair_service.field_repair_service__product_uom_category_id
+msgid ""
+"Conversion between Units of Measure can only occur if they belong to the "
+"same category. The conversion will be made based on the ratios."
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__display_name
+msgid "Description"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__id
+msgid "ID"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__product_id
+msgid "Product"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__product_uom
+msgid "Product Uom"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__product_uom_qty
+#: model_terms:ir.ui.view,arch_db:repair_service.view_repair_order_form_inherit
+msgid "Quantity"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model,name:repair_service.model_repair_order
+msgid "Repair Order"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__repair_id
+msgid "Repair Order Reference"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_order__repair_service_ids
+#: model_terms:ir.ui.view,arch_db:repair_service.view_repair_order_form_inherit
+msgid "Services"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model,name:repair_service.model_repair_service
+msgid "repair.service"
+msgstr ""
diff --git a/repair_service/models/__init__.py b/repair_service/models/__init__.py
new file mode 100644
index 00000000..c5c31165
--- /dev/null
+++ b/repair_service/models/__init__.py
@@ -0,0 +1,4 @@
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from . import repair_service
+from . import repair_order
diff --git a/repair_service/models/repair_order.py b/repair_service/models/repair_order.py
new file mode 100644
index 00000000..98458760
--- /dev/null
+++ b/repair_service/models/repair_order.py
@@ -0,0 +1,17 @@
+# Copyright 2024 ForgeFlow S.L. (https://www.forgeflow.com)
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+from odoo import fields, models
+
+
+class RepairOrder(models.Model):
+ _inherit = "repair.order"
+
+ repair_service_ids = fields.One2many(
+ "repair.service", "repair_id", "Services", copy=True
+ )
+
+ def action_create_sale_order(self):
+ action = super().action_create_sale_order()
+ self.repair_service_ids._create_repair_sale_order_line()
+ return action
diff --git a/repair_service/models/repair_service.py b/repair_service/models/repair_service.py
new file mode 100644
index 00000000..31b630a2
--- /dev/null
+++ b/repair_service/models/repair_service.py
@@ -0,0 +1,70 @@
+# Copyright 2024 ForgeFlow S.L. (https://www.forgeflow.com)
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+from odoo import api, fields, models
+
+
+class RepairService(models.Model):
+ _name = "repair.service"
+
+ repair_id = fields.Many2one(
+ "repair.order", "Repair Order Reference", ondelete="cascade", required=True
+ )
+ display_name = fields.Text(
+ "Description",
+ required=True,
+ compute="_compute_name",
+ store=True,
+ precompute=True,
+ )
+ product_id = fields.Many2one(
+ "product.product", "Product", domain=[("type", "=", "service")], required=True
+ )
+ product_uom_category_id = fields.Many2one(related="product_id.uom_id.category_id")
+ product_uom = fields.Many2one(
+ "uom.uom",
+ required=True,
+ domain="[('category_id', '=', product_uom_category_id)]",
+ readonly=False,
+ precompute=True,
+ compute="_compute_product_uom",
+ store=True,
+ )
+ product_uom_qty = fields.Float(
+ "Quantity", digits="Product Unit of Measure", required=True, default=1.0
+ )
+
+ @api.depends("product_id")
+ def _compute_name(self):
+ for service in self:
+ service.display_name = service.product_id.name
+
+ @api.depends("product_id")
+ def _compute_product_uom(self):
+ for service in self:
+ service.product_uom = service.product_id.uom_id
+
+ def _create_repair_sale_order_line(self):
+ if not self:
+ return
+ so_line_vals = []
+ for service in self:
+ if not service.repair_id.sale_order_id:
+ continue
+ product_qty = (
+ service.product_uom_qty
+ if service.repair_id.state != "done"
+ else service.product_uom_qty
+ )
+ so_line_vals.append(
+ {
+ "order_id": service.repair_id.sale_order_id.id,
+ "product_id": service.product_id.id,
+ "product_uom_qty": product_qty,
+ }
+ )
+ if service.repair_id.under_warranty:
+ so_line_vals[-1]["price_unit"] = 0.0
+ elif service.product_id.lst_price:
+ so_line_vals[-1]["price_unit"] = service.product_id.lst_price
+ self.env["sale.order.line"].create(so_line_vals)
diff --git a/repair_service/pyproject.toml b/repair_service/pyproject.toml
new file mode 100644
index 00000000..4231d0cc
--- /dev/null
+++ b/repair_service/pyproject.toml
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["whool"]
+build-backend = "whool.buildapi"
diff --git a/repair_service/readme/CONTEXT.md b/repair_service/readme/CONTEXT.md
new file mode 100644
index 00000000..1cba7ff9
--- /dev/null
+++ b/repair_service/readme/CONTEXT.md
@@ -0,0 +1 @@
+This functionality is similar to the "Operations" tab that existed in previous versions in core Odoo. This tab allowed users to manage services and operations in the repair orders. This module reintroduces that functionality and adds these services as sale order lines when the sale order is generated.
diff --git a/repair_service/readme/CONTRIBUTORS.md b/repair_service/readme/CONTRIBUTORS.md
new file mode 100644
index 00000000..650a4c13
--- /dev/null
+++ b/repair_service/readme/CONTRIBUTORS.md
@@ -0,0 +1,3 @@
+- [ForgeFlow](https://forgeflow.com):
+
+ > - Andreu Orensanz \<\>
\ No newline at end of file
diff --git a/repair_service/readme/DESCRIPTION.md b/repair_service/readme/DESCRIPTION.md
new file mode 100644
index 00000000..854916ee
--- /dev/null
+++ b/repair_service/readme/DESCRIPTION.md
@@ -0,0 +1 @@
+This module introduces repair services. It adds a new "Services" tab in the repair orders, where users can add and manage services associated with the repair. Once the repair order is confirmed and a sale order is created, these services can be automatically added as sale order lines. Moreover, if the repair order has the "Under Warranty" field checked, the module ensures that the corresponding sale order lines price are set to a value of 0, reflecting the warranty coverage.
diff --git a/repair_service/readme/USAGE.md b/repair_service/readme/USAGE.md
new file mode 100644
index 00000000..9187238a
--- /dev/null
+++ b/repair_service/readme/USAGE.md
@@ -0,0 +1 @@
+When creating or editing a repair order, you will find a new "Services" tab within the repair order form. In this tab, you can input and manage the services performed as part of the repair order. Once the repair order is confirmed, when you creating a sale order from the repair order, the services listed in the "Services" tab will be automatically added as sale order lines.
diff --git a/repair_service/security/ir.model.access.csv b/repair_service/security/ir.model.access.csv
new file mode 100644
index 00000000..76c012f6
--- /dev/null
+++ b/repair_service/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_repair_service_user,repair.service user,model_repair_service,stock.group_stock_user,1,1,1,1
diff --git a/repair_service/static/description/icon.png b/repair_service/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
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
z
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
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
diff --git a/repair_service/static/description/index.html b/repair_service/static/description/index.html
new file mode 100644
index 00000000..259a5e17
--- /dev/null
+++ b/repair_service/static/description/index.html
@@ -0,0 +1,454 @@
+
+
+
+
+
+Repair Service
+
+
+
+
+
Repair Service
+
+
+

+
This module introduces repair services. It adds a new “Services” tab in
+the repair orders, where users can add and manage services associated
+with the repair. Once the repair order is confirmed and a sale order is
+created, these services can be automatically added as sale order lines.
+Moreover, if the repair order has the “Under Warranty” field checked,
+the module ensures that the corresponding sale order lines price are set
+to a value of 0, reflecting the warranty coverage.
+
Table of contents
+
+
+
+
This functionality is similar to the “Operations” tab that existed in
+previous versions in core Odoo. This tab allowed users to manage
+services and operations in the repair orders. This module reintroduces
+that functionality and adds these services as sale order lines when the
+sale order is generated.
+
+
+
+
When creating or editing a repair order, you will find a new “Services”
+tab within the repair order form. In this tab, you can input and manage
+the services performed as part of the repair order. Once the repair
+order is confirmed, when you creating a sale order from the repair
+order, the services listed in the “Services” tab will be automatically
+added as sale order lines.
+
+
+
+
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.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+
+
+
+
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/repair project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
diff --git a/repair_service/tests/__init__.py b/repair_service/tests/__init__.py
new file mode 100644
index 00000000..94d9b034
--- /dev/null
+++ b/repair_service/tests/__init__.py
@@ -0,0 +1,3 @@
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+
+from . import test_repair_service
diff --git a/repair_service/tests/test_repair_service.py b/repair_service/tests/test_repair_service.py
new file mode 100644
index 00000000..3f5c484e
--- /dev/null
+++ b/repair_service/tests/test_repair_service.py
@@ -0,0 +1,103 @@
+from odoo.tests import tagged
+from odoo.tests.common import TransactionCase
+
+
+@tagged("post_install", "-at_install")
+class TestRepairOrderFlow(TransactionCase):
+ def setUp(self):
+ super().setUp()
+ self.RepairOrder = self.env["repair.order"]
+ self.RepairService = self.env["repair.service"]
+ self.SaleOrder = self.env["sale.order"]
+ self.Product = self.env["product.product"]
+ self.Uom = self.env["uom.uom"]
+
+ # Create a test service product
+ self.service_product = self.Product.create(
+ {
+ "name": "Repair Service Product",
+ "type": "service",
+ "uom_id": self.env.ref("uom.product_uom_unit").id,
+ }
+ )
+
+ # Create a test repair order
+ self.repair_order = self.RepairOrder.create(
+ {
+ "name": "Test Repair Order",
+ "partner_id": self.env.ref("base.res_partner_1").id,
+ }
+ )
+
+ # Create a repair service associated with the repair order
+ self.repair_service = self.RepairService.create(
+ {
+ "repair_id": self.repair_order.id,
+ "product_id": self.service_product.id,
+ "product_uom_qty": 2.0,
+ "product_uom": self.service_product.uom_id.id,
+ }
+ )
+
+ def test_01_action_create_sale_order(self):
+ # Create a sale order from the repair order
+ self.repair_order.action_create_sale_order()
+
+ # Check that the sale order has been created
+ sale_order = self.repair_order.sale_order_id
+ self.assertTrue(sale_order)
+
+ # Check that the sale order has a line for the repair service
+ sale_order_line = sale_order.order_line.filtered(
+ lambda lam: lam.product_id == self.service_product
+ )
+ self.assertTrue(sale_order_line)
+
+ # Check that the sale order line has the correct quantity
+ self.assertEqual(sale_order_line.product_uom_qty, 2.0)
+
+ def test_02_action_create_sale_order_under_warranty(self):
+ # Set the repair order to be under warranty
+ self.repair_order.under_warranty = True
+
+ # Create a sale order from the repair order
+ self.repair_order.action_create_sale_order()
+
+ # Check that the sale order has been created
+ sale_order = self.repair_order.sale_order_id
+ self.assertTrue(sale_order)
+
+ # Check that the sale order has a line for the repair service
+ sale_order_line = sale_order.order_line.filtered(
+ lambda lam: lam.product_id == self.service_product
+ )
+ self.assertTrue(sale_order_line)
+
+ # Check that the sale order line has the correct quantity
+ self.assertEqual(sale_order_line.product_uom_qty, 2.0)
+
+ # Check that the sale order line has a price unit of 0.0
+ self.assertEqual(sale_order_line.price_unit, 0.0)
+
+ def test_03_action_create_sale_order_not_under_warranty(self):
+ # Set the repair order to be not under warranty
+ self.repair_order.under_warranty = False
+
+ # Create a sale order from the repair order
+ self.repair_order.action_create_sale_order()
+
+ # Check that the sale order has been created
+ sale_order = self.repair_order.sale_order_id
+ self.assertTrue(sale_order)
+
+ # Check that the sale order has a line for the repair service
+ sale_order_line = sale_order.order_line.filtered(
+ lambda lam: lam.product_id == self.service_product
+ )
+ self.assertTrue(sale_order_line)
+
+ # Check that the sale order line has the correct quantity
+ self.assertEqual(sale_order_line.product_uom_qty, 2.0)
+
+ # Check that the sale order line has the correct price unit
+ self.assertEqual(sale_order_line.price_unit, self.service_product.lst_price)
diff --git a/repair_service/views/repair_views.xml b/repair_service/views/repair_views.xml
new file mode 100644
index 00000000..ddb8be75
--- /dev/null
+++ b/repair_service/views/repair_views.xml
@@ -0,0 +1,29 @@
+
+
+
+ repair.order.form.inherit.operations - repair_service
+ repair.order
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From 349b355f491b4ddd8b0f0a50951766641d71ef9c Mon Sep 17 00:00:00 2001
From: mymage
Date: Mon, 11 Nov 2024 11:03:01 +0000
Subject: [PATCH 2/4] Added translation using Weblate (Italian)
---
repair_service/i18n/it.po | 94 +++++++++++++++++++++++++++++++++++++++
1 file changed, 94 insertions(+)
create mode 100644 repair_service/i18n/it.po
diff --git a/repair_service/i18n/it.po b/repair_service/i18n/it.po
new file mode 100644
index 00000000..73a07eff
--- /dev/null
+++ b/repair_service/i18n/it.po
@@ -0,0 +1,94 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * repair_service
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\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"
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__product_uom_category_id
+msgid "Category"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,help:repair_service.field_repair_service__product_uom_category_id
+msgid ""
+"Conversion between Units of Measure can only occur if they belong to the "
+"same category. The conversion will be made based on the ratios."
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__display_name
+msgid "Description"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__id
+msgid "ID"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__product_id
+msgid "Product"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__product_uom
+msgid "Product Uom"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__product_uom_qty
+#: model_terms:ir.ui.view,arch_db:repair_service.view_repair_order_form_inherit
+msgid "Quantity"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model,name:repair_service.model_repair_order
+msgid "Repair Order"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_service__repair_id
+msgid "Repair Order Reference"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model.fields,field_description:repair_service.field_repair_order__repair_service_ids
+#: model_terms:ir.ui.view,arch_db:repair_service.view_repair_order_form_inherit
+msgid "Services"
+msgstr ""
+
+#. module: repair_service
+#: model:ir.model,name:repair_service.model_repair_service
+msgid "repair.service"
+msgstr ""
From d7dca4c40e7eccd68367044a3c48a2d78e27f6aa Mon Sep 17 00:00:00 2001
From: mymage
Date: Mon, 11 Nov 2024 11:03:06 +0000
Subject: [PATCH 3/4] Translated using Weblate (Italian)
Currently translated at 100.0% (15 of 15 strings)
Translation: repair-17.0/repair-17.0-repair_service
Translate-URL: https://translation.odoo-community.org/projects/repair-17-0/repair-17-0-repair_service/it/
---
repair_service/i18n/it.po | 35 ++++++++++++++++++++---------------
1 file changed, 20 insertions(+), 15 deletions(-)
diff --git a/repair_service/i18n/it.po b/repair_service/i18n/it.po
index 73a07eff..2a929b3c 100644
--- a/repair_service/i18n/it.po
+++ b/repair_service/i18n/it.po
@@ -6,18 +6,20 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 17.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2024-11-11 13: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: repair_service
#: model:ir.model.fields,field_description:repair_service.field_repair_service__product_uom_category_id
msgid "Category"
-msgstr ""
+msgstr "Categoria"
#. module: repair_service
#: model:ir.model.fields,help:repair_service.field_repair_service__product_uom_category_id
@@ -25,70 +27,73 @@ msgid ""
"Conversion between Units of Measure can only occur if they belong to the "
"same category. The conversion will be made based on the ratios."
msgstr ""
+"Le conversioni tra unità di misura possono avvenire solo se appartengono "
+"alla stessa categoria. La conversione verrà effettuata in base alle "
+"proporzioni."
#. module: repair_service
#: model:ir.model.fields,field_description:repair_service.field_repair_service__create_uid
msgid "Created by"
-msgstr ""
+msgstr "Creato da"
#. module: repair_service
#: model:ir.model.fields,field_description:repair_service.field_repair_service__create_date
msgid "Created on"
-msgstr ""
+msgstr "Creato il"
#. module: repair_service
#: model:ir.model.fields,field_description:repair_service.field_repair_service__display_name
msgid "Description"
-msgstr ""
+msgstr "Descrizione"
#. module: repair_service
#: model:ir.model.fields,field_description:repair_service.field_repair_service__id
msgid "ID"
-msgstr ""
+msgstr "ID"
#. module: repair_service
#: model:ir.model.fields,field_description:repair_service.field_repair_service__write_uid
msgid "Last Updated by"
-msgstr ""
+msgstr "Ultimo aggiornamento di"
#. module: repair_service
#: model:ir.model.fields,field_description:repair_service.field_repair_service__write_date
msgid "Last Updated on"
-msgstr ""
+msgstr "Ultimo aggiornamento il"
#. module: repair_service
#: model:ir.model.fields,field_description:repair_service.field_repair_service__product_id
msgid "Product"
-msgstr ""
+msgstr "Prodotto"
#. module: repair_service
#: model:ir.model.fields,field_description:repair_service.field_repair_service__product_uom
msgid "Product Uom"
-msgstr ""
+msgstr "UdM prodotto"
#. module: repair_service
#: model:ir.model.fields,field_description:repair_service.field_repair_service__product_uom_qty
#: model_terms:ir.ui.view,arch_db:repair_service.view_repair_order_form_inherit
msgid "Quantity"
-msgstr ""
+msgstr "Quantità"
#. module: repair_service
#: model:ir.model,name:repair_service.model_repair_order
msgid "Repair Order"
-msgstr ""
+msgstr "Ordine di riparazione"
#. module: repair_service
#: model:ir.model.fields,field_description:repair_service.field_repair_service__repair_id
msgid "Repair Order Reference"
-msgstr ""
+msgstr "Riferimento ordine riparazione"
#. module: repair_service
#: model:ir.model.fields,field_description:repair_service.field_repair_order__repair_service_ids
#: model_terms:ir.ui.view,arch_db:repair_service.view_repair_order_form_inherit
msgid "Services"
-msgstr ""
+msgstr "Servizi"
#. module: repair_service
#: model:ir.model,name:repair_service.model_repair_service
msgid "repair.service"
-msgstr ""
+msgstr "repair.service"
From 609e04ca81209db53816249d08329ad0433fdd48 Mon Sep 17 00:00:00 2001
From: Bhavesh Heliconia
Date: Tue, 7 Jan 2025 18:05:29 +0530
Subject: [PATCH 4/4] [MIG] repair_service: Migration to 18.0
---
repair_service/README.rst | 16 +++++++++-------
repair_service/__manifest__.py | 2 +-
repair_service/models/repair_service.py | 1 +
repair_service/readme/CONTRIBUTORS.md | 3 ++-
repair_service/static/description/index.html | 8 +++++---
repair_service/views/repair_views.xml | 4 ++--
6 files changed, 20 insertions(+), 14 deletions(-)
diff --git a/repair_service/README.rst b/repair_service/README.rst
index 1ba25a31..9e133729 100644
--- a/repair_service/README.rst
+++ b/repair_service/README.rst
@@ -17,13 +17,13 @@ Repair Service
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Frepair-lightgray.png?logo=github
- :target: https://github.com/OCA/repair/tree/17.0/repair_service
+ :target: https://github.com/OCA/repair/tree/18.0/repair_service
:alt: OCA/repair
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/repair-17-0/repair-17-0-repair_service
+ :target: https://translation.odoo-community.org/projects/repair-18-0/repair-18-0-repair_service
: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/repair&target_branch=17.0
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/repair&target_branch=18.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -66,7 +66,7 @@ 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 `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -81,9 +81,11 @@ Authors
Contributors
------------
-- `ForgeFlow `__:
+- `ForgeFlow `__:
- - Andreu Orensanz
+ - Andreu Orensanz
+
+- ``Heliconia Solutions Pvt. Ltd. ``\ \_
Maintainers
-----------
@@ -98,6 +100,6 @@ 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/repair `_ project on GitHub.
+This module is part of the `OCA/repair `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/repair_service/__manifest__.py b/repair_service/__manifest__.py
index 247bc9c9..21f1f490 100644
--- a/repair_service/__manifest__.py
+++ b/repair_service/__manifest__.py
@@ -7,7 +7,7 @@
Adds services to repair orders, so that they can be added
as sale order lines.
""",
- "version": "17.0.1.0.0",
+ "version": "18.0.1.0.0",
"category": "Repair",
"website": "https://github.com/OCA/repair",
"author": "ForgeFlow, Odoo Community Association (OCA)",
diff --git a/repair_service/models/repair_service.py b/repair_service/models/repair_service.py
index 31b630a2..aa2c40f5 100644
--- a/repair_service/models/repair_service.py
+++ b/repair_service/models/repair_service.py
@@ -6,6 +6,7 @@
class RepairService(models.Model):
_name = "repair.service"
+ _description = "Repair Service"
repair_id = fields.Many2one(
"repair.order", "Repair Order Reference", ondelete="cascade", required=True
diff --git a/repair_service/readme/CONTRIBUTORS.md b/repair_service/readme/CONTRIBUTORS.md
index 650a4c13..d99bcd6d 100644
--- a/repair_service/readme/CONTRIBUTORS.md
+++ b/repair_service/readme/CONTRIBUTORS.md
@@ -1,3 +1,4 @@
- [ForgeFlow](https://forgeflow.com):
- > - Andreu Orensanz \<\>
\ No newline at end of file
+ > - Andreu Orensanz \<\>
+- `Heliconia Solutions Pvt. Ltd. `_
diff --git a/repair_service/static/description/index.html b/repair_service/static/description/index.html
index 259a5e17..509f081e 100644
--- a/repair_service/static/description/index.html
+++ b/repair_service/static/description/index.html
@@ -369,7 +369,7 @@ Repair Service
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:62e6c28ce5e0812243297177f509b29023e6996ede4ff0cae11bc6aa06e0a6b2
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

This module introduces repair services. It adds a new “Services” tab in
the repair orders, where users can add and manage services associated
with the repair. Once the repair order is confirmed and a sale order is
@@ -413,7 +413,7 @@
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.
+feedback.
Do not contact contributors directly about support or help with technical issues.
@@ -434,6 +434,8 @@
+
Heliconia Solutions Pvt. Ltd. <https://www.heliconia.io>_
+
@@ -445,7 +447,7 @@
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/repair project on GitHub.
+
This module is part of the OCA/repair project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/repair_service/views/repair_views.xml b/repair_service/views/repair_views.xml
index ddb8be75..8d5eebc6 100644
--- a/repair_service/views/repair_views.xml
+++ b/repair_service/views/repair_views.xml
@@ -11,7 +11,7 @@
name="repair_service_ids"
readonly="state in ('cancel', 'done')"
>
-
+
-
+