From 876cfef8668bca744594078308c06be876350123 Mon Sep 17 00:00:00 2001 From: Eric Antones Date: Fri, 19 Sep 2025 16:20:02 +0200 Subject: [PATCH 1/2] [IMP] account_invoice_report_service: added hooks to allow grouping for other type of orders and not just sale orders. --- account_invoice_report_service/i18n/es.po | 6 +++ .../models/__init__.py | 2 - .../models/account_invoice.py | 37 +++++++++++++------ 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/account_invoice_report_service/i18n/es.po b/account_invoice_report_service/i18n/es.po index 19811a46b..c6f58565b 100644 --- a/account_invoice_report_service/i18n/es.po +++ b/account_invoice_report_service/i18n/es.po @@ -301,6 +301,12 @@ msgstr "" "Caso no implementado: La misma línea de factura pertenece a diferentes " "pedidos" +#. module: account_invoice_report_service +#: code:addons/account_invoice_report_service/models/account_invoice.py:0 +#, python-format +msgid "Not implemented case: The same invoice line %(line)s belongs to different orders %(orders)s" +msgstr "Caso no implementado: La misma línea de factura %(line)s pertenece a diferentes pedidos %(orders)s" + #. module: account_invoice_report_service #: model:ir.model.fields,field_description:account_invoice_report_service.field_sale_order__date_order_tz msgid "Order Date TZ" diff --git a/account_invoice_report_service/models/__init__.py b/account_invoice_report_service/models/__init__.py index 0a4254a4d..9dc235d8c 100644 --- a/account_invoice_report_service/models/__init__.py +++ b/account_invoice_report_service/models/__init__.py @@ -1,5 +1,3 @@ -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) - from . import res_company from . import account_invoice from . import res_config_settings diff --git a/account_invoice_report_service/models/account_invoice.py b/account_invoice_report_service/models/account_invoice.py index 05592ff0a..a5b68c640 100644 --- a/account_invoice_report_service/models/account_invoice.py +++ b/account_invoice_report_service/models/account_invoice.py @@ -25,23 +25,34 @@ def print_report_invoice_service(self): ) return self.company_id.report_service_id.report_action(self) - def _group_by_order(self): + def _group_invoice_lines_by_order(self): order_d, no_order = {}, self.env["account.move.line"] for iline in self.invoice_line_ids: - if iline.sale_line_ids: - for oline in iline.sale_line_ids: - order = oline.order_id - if order not in order_d: - order_d[order] = self.env["account.move.line"] - order_d[order] |= iline - else: + orders = list(filter(None, iline._get_orders())) + if len(orders) == 1: + order = orders[0] + if order not in order_d: + order_d[order] = self.env["account.move.line"] + order_d[order] |= iline + elif not orders: no_order += iline - + else: + raise ValidationError( + _( + "Not implemented case: " + "The same invoice line %(line)s " + "belongs to different orders %(orders)s" + ) + % { + "line": iline.name, + "orders": ", ".join([x.name for x in orders]), + } + ) return order_d, no_order def get_service_lines_by_order(self): # group by order - order_d, no_order = self._group_by_order() + order_d, no_order = self._group_invoice_lines_by_order() # grouping by round trip code order_rt_date_l = [] @@ -89,7 +100,7 @@ def get_service_lines_by_order(self): def get_delivery_lines_by_order(self): # group by order - order_d, no_order = self._group_by_order() + order_d, no_order = self._group_invoice_lines_by_order() # sort and join with lines w/o orders order_sorted_l = [] @@ -114,6 +125,10 @@ def get_delivery_lines_by_order(self): class AccountMoveLine(models.Model): _inherit = "account.move.line" + def _get_orders(self): + # we use a list to allow different types of orders, sale, repair, etc + return [x for x in self.sale_line_ids.order_id] + def get_line_lots(self): return ( self.move_line_ids.mapped("lot_id").sorted(lambda x: x.name).mapped("name") From 1d0ed3f06fc1727edab809c1c13d974e962ad925 Mon Sep 17 00:00:00 2001 From: Eric Antones Date: Fri, 19 Sep 2025 16:20:19 +0200 Subject: [PATCH 2/2] [ADD] account_invoice_report_service_repair: enhance invoice report with repair order details --- .../README.rst | 63 +++ .../__init__.py | 1 + .../__manifest__.py | 16 + .../models/__init__.py | 2 + .../models/account_move_line.py | 15 + .../models/repair_order.py | 30 ++ .../readme/CONTRIBUTORS.rst | 3 + .../readme/DESCRIPTION.rst | 1 + .../static/description/icon.png | Bin 0 -> 6342 bytes .../static/description/index.html | 420 ++++++++++++++++++ .../account_invoice_report_service_repair | 1 + .../setup.py | 6 + 12 files changed, 558 insertions(+) create mode 100644 account_invoice_report_service_repair/README.rst create mode 100644 account_invoice_report_service_repair/__init__.py create mode 100644 account_invoice_report_service_repair/__manifest__.py create mode 100644 account_invoice_report_service_repair/models/__init__.py create mode 100644 account_invoice_report_service_repair/models/account_move_line.py create mode 100644 account_invoice_report_service_repair/models/repair_order.py create mode 100644 account_invoice_report_service_repair/readme/CONTRIBUTORS.rst create mode 100644 account_invoice_report_service_repair/readme/DESCRIPTION.rst create mode 100644 account_invoice_report_service_repair/static/description/icon.png create mode 100644 account_invoice_report_service_repair/static/description/index.html create mode 120000 setup/account_invoice_report_service_repair/odoo/addons/account_invoice_report_service_repair create mode 100644 setup/account_invoice_report_service_repair/setup.py diff --git a/account_invoice_report_service_repair/README.rst b/account_invoice_report_service_repair/README.rst new file mode 100644 index 000000000..213e6cef3 --- /dev/null +++ b/account_invoice_report_service_repair/README.rst @@ -0,0 +1,63 @@ +============================= +Service invoice report repair +============================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:077fc208bce6c55eaf2aee8ca4a08be195c7918016044acdac0cf770484173e6 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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-NuoBiT%2Fodoo--addons-lightgray.png?logo=github + :target: https://github.com/NuoBiT/odoo-addons/tree/14.0/account_invoice_report_service_repair + :alt: NuoBiT/odoo-addons + +|badge1| |badge2| |badge3| + +The "Account Invoice Report Service Repair" module enhances the invoice delivery report by including information about the associated repair order. When a service repair is performed and invoiced, this module ensures that the repair order reference is visible on the invoice delivery report. This feature improves traceability and transparency for both internal users and customers, making it easier to track which repair operations are linked to each invoice. The module is especially useful for companies that manage repair services and need to provide detailed documentation to their clients. + +**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 +~~~~~~~ + +* NuoBiT Solutions +* S.L. + +Contributors +~~~~~~~~~~~~ + +* `NuoBiT `_: + + * Eric Antones + +Maintainers +~~~~~~~~~~~ + +This module is part of the `NuoBiT/odoo-addons `_ project on GitHub. + +You are welcome to contribute. diff --git a/account_invoice_report_service_repair/__init__.py b/account_invoice_report_service_repair/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/account_invoice_report_service_repair/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/account_invoice_report_service_repair/__manifest__.py b/account_invoice_report_service_repair/__manifest__.py new file mode 100644 index 000000000..cc04320a7 --- /dev/null +++ b/account_invoice_report_service_repair/__manifest__.py @@ -0,0 +1,16 @@ +# Copyright 2025 NuoBiT - Eric Antones +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +{ + "name": "Service invoice report repair", + "summary": "This module displays the related repair order on the " + "invoice delivery report, providing a clear link between " + "service repairs and their corresponding invoices.", + "version": "14.0.1.0.0", + "author": "NuoBiT Solutions, S.L.", + "license": "AGPL-3", + "category": "Accounting", + "website": "https://github.com/nuobit/odoo-addons", + "depends": ["account_invoice_report_service", "repair"], + "auto_install": True, +} diff --git a/account_invoice_report_service_repair/models/__init__.py b/account_invoice_report_service_repair/models/__init__.py new file mode 100644 index 000000000..1aabaa391 --- /dev/null +++ b/account_invoice_report_service_repair/models/__init__.py @@ -0,0 +1,2 @@ +from . import account_move_line +from . import repair_order diff --git a/account_invoice_report_service_repair/models/account_move_line.py b/account_invoice_report_service_repair/models/account_move_line.py new file mode 100644 index 000000000..8d047e5ae --- /dev/null +++ b/account_invoice_report_service_repair/models/account_move_line.py @@ -0,0 +1,15 @@ +# Copyright 2025 NuoBiT - Eric Antones +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + + +from odoo import models + + +class AccountMoveLine(models.Model): + _inherit = "account.move.line" + + def _get_orders(self): + # we use a list to allow different types of orders, sale, repair, etc + return super()._get_orders() + [ + x for x in self.repair_fee_ids.repair_id | self.repair_line_ids.repair_id + ] diff --git a/account_invoice_report_service_repair/models/repair_order.py b/account_invoice_report_service_repair/models/repair_order.py new file mode 100644 index 000000000..78d8620aa --- /dev/null +++ b/account_invoice_report_service_repair/models/repair_order.py @@ -0,0 +1,30 @@ +# Copyright 2025 NuoBiT - Eric Antones +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) + +from odoo import fields, models + + +class Repair(models.Model): + _inherit = "repair.order" + + date_order = fields.Datetime(related="move_id.date", readonly=True) + + client_order_ref = fields.Char(compute="_compute_client_order_ref") + + def _compute_client_order_ref(self): + for order in self: + order.client_order_ref = False + + service_number = fields.Integer(compute="_compute_service_number") + + def _compute_service_number(self): + for order in self: + order.service_number = 0 + + date_order_tz = fields.Date( + string="Order Date TZ", readonly=True, compute="_compute_date_order_tz" + ) + + def _compute_date_order_tz(self): + for rec in self: + rec.date_order_tz = fields.Date.context_today(rec, rec.date_order) diff --git a/account_invoice_report_service_repair/readme/CONTRIBUTORS.rst b/account_invoice_report_service_repair/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..77acb88da --- /dev/null +++ b/account_invoice_report_service_repair/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `NuoBiT `_: + + * Eric Antones diff --git a/account_invoice_report_service_repair/readme/DESCRIPTION.rst b/account_invoice_report_service_repair/readme/DESCRIPTION.rst new file mode 100644 index 000000000..e7fcb8b8c --- /dev/null +++ b/account_invoice_report_service_repair/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +The "Account Invoice Report Service Repair" module enhances the invoice delivery report by including information about the associated repair order. When a service repair is performed and invoiced, this module ensures that the repair order reference is visible on the invoice delivery report. This feature improves traceability and transparency for both internal users and customers, making it easier to track which repair operations are linked to each invoice. The module is especially useful for companies that manage repair services and need to provide detailed documentation to their clients. diff --git a/account_invoice_report_service_repair/static/description/icon.png b/account_invoice_report_service_repair/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1cd641e792c30455187ca30940bc0f329ce8bbb0 GIT binary patch literal 6342 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 literal 0 HcmV?d00001 diff --git a/account_invoice_report_service_repair/static/description/index.html b/account_invoice_report_service_repair/static/description/index.html new file mode 100644 index 000000000..2d403cb6f --- /dev/null +++ b/account_invoice_report_service_repair/static/description/index.html @@ -0,0 +1,420 @@ + + + + + +Service invoice report repair + + + +
+

Service invoice report repair

+ + +

Beta License: AGPL-3 NuoBiT/odoo-addons

+

The “Account Invoice Report Service Repair” module enhances the invoice delivery report by including information about the associated repair order. When a service repair is performed and invoiced, this module ensures that the repair order reference is visible on the invoice delivery report. This feature improves traceability and transparency for both internal users and customers, making it easier to track which repair operations are linked to each invoice. The module is especially useful for companies that manage repair services and need to provide detailed documentation to their clients.

+

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

+
    +
  • NuoBiT Solutions
  • +
  • S.L.
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is part of the NuoBiT/odoo-addons project on GitHub.

+

You are welcome to contribute.

+
+
+
+ + diff --git a/setup/account_invoice_report_service_repair/odoo/addons/account_invoice_report_service_repair b/setup/account_invoice_report_service_repair/odoo/addons/account_invoice_report_service_repair new file mode 120000 index 000000000..80d1f557e --- /dev/null +++ b/setup/account_invoice_report_service_repair/odoo/addons/account_invoice_report_service_repair @@ -0,0 +1 @@ +../../../../account_invoice_report_service_repair \ No newline at end of file diff --git a/setup/account_invoice_report_service_repair/setup.py b/setup/account_invoice_report_service_repair/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/account_invoice_report_service_repair/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)