From b618e48eaefc93ca865de481c8d1bbf74c922da1 Mon Sep 17 00:00:00 2001 From: pilarvargas-tecnativa Date: Thu, 19 Sep 2024 16:30:13 +0200 Subject: [PATCH 01/15] [ADD] helpdesk_mgmt_sale: Add new module TT50683 --- helpdesk_mgmt_sale/README.rst | 88 ++++ helpdesk_mgmt_sale/__init__.py | 1 + helpdesk_mgmt_sale/__manifest__.py | 18 + helpdesk_mgmt_sale/models/__init__.py | 2 + helpdesk_mgmt_sale/models/helpdesk_ticket.py | 25 + helpdesk_mgmt_sale/models/sale_order.py | 7 + helpdesk_mgmt_sale/readme/CONTRIBUTORS.rst | 3 + helpdesk_mgmt_sale/readme/DESCRIPTION.rst | 4 + helpdesk_mgmt_sale/readme/USAGE.rst | 6 + .../static/description/icon.png | Bin 0 -> 14071 bytes .../static/description/icon.svg | 267 +++++++++++ .../static/description/index.html | 434 ++++++++++++++++++ helpdesk_mgmt_sale/tests/__init__.py | 1 + .../tests/test_helpdesk_ticket.py | 53 +++ .../views/helpdesk_ticket_views.xml | 25 + helpdesk_mgmt_sale/views/sale_order_views.xml | 20 + 16 files changed, 954 insertions(+) create mode 100644 helpdesk_mgmt_sale/README.rst create mode 100644 helpdesk_mgmt_sale/__init__.py create mode 100644 helpdesk_mgmt_sale/__manifest__.py create mode 100644 helpdesk_mgmt_sale/models/__init__.py create mode 100644 helpdesk_mgmt_sale/models/helpdesk_ticket.py create mode 100644 helpdesk_mgmt_sale/models/sale_order.py create mode 100644 helpdesk_mgmt_sale/readme/CONTRIBUTORS.rst create mode 100644 helpdesk_mgmt_sale/readme/DESCRIPTION.rst create mode 100644 helpdesk_mgmt_sale/readme/USAGE.rst create mode 100644 helpdesk_mgmt_sale/static/description/icon.png create mode 100644 helpdesk_mgmt_sale/static/description/icon.svg create mode 100644 helpdesk_mgmt_sale/static/description/index.html create mode 100644 helpdesk_mgmt_sale/tests/__init__.py create mode 100644 helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py create mode 100644 helpdesk_mgmt_sale/views/helpdesk_ticket_views.xml create mode 100644 helpdesk_mgmt_sale/views/sale_order_views.xml diff --git a/helpdesk_mgmt_sale/README.rst b/helpdesk_mgmt_sale/README.rst new file mode 100644 index 0000000000..190be50533 --- /dev/null +++ b/helpdesk_mgmt_sale/README.rst @@ -0,0 +1,88 @@ +=================== +Helpdesk Sale Order +=================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:5d0720d9a8524713cedc3cb1665d48b3783019ef5183e22e33eb722fb73f3808 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Fhelpdesk-lightgray.png?logo=github + :target: https://github.com/OCA/helpdesk/tree/15.0/helpdesk_mgmt_sale + :alt: OCA/helpdesk +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/helpdesk-15-0/helpdesk-15-0-helpdesk_mgmt_sale + :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/helpdesk&target_branch=15.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the Helpdesk functionality in Odoo to allow integration between Helpdesk tickets and sales orders. A ticket can have several sales orders associated with it, which in turn will have the ticket associated with it, allowing tickets and sales to be related. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +To associate orders to Helpdesk tickets: + +#. Create or modify a Helpdesk ticket. +#. In the ticket view, you will find a **Sales Order** Smartbutton which will show the number of orders associated to the ticket. +#. Clicking on the Smartbutton will open a view with all the sales orders related to the current ticket. +#. To create an order associated to the ticket click on the **Create** button. + +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 `_: + + * Pilar Vargas + +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/helpdesk `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/helpdesk_mgmt_sale/__init__.py b/helpdesk_mgmt_sale/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/helpdesk_mgmt_sale/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/helpdesk_mgmt_sale/__manifest__.py b/helpdesk_mgmt_sale/__manifest__.py new file mode 100644 index 0000000000..c774c6c2c1 --- /dev/null +++ b/helpdesk_mgmt_sale/__manifest__.py @@ -0,0 +1,18 @@ +# Copyright 2024 Tecnativa - Pilar Vargas +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +{ + "name": "Helpdesk Sale Order", + "summary": "Add the option to select project in the sale orders.", + "version": "15.0.1.0.0", + "license": "AGPL-3", + "category": "Sales Management", + "author": "Tecnativa," "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/helpdesk", + "depends": ["helpdesk_mgmt", "sale"], + "data": [ + "views/helpdesk_ticket_views.xml", + "views/sale_order_views.xml", + ], + "development_status": "Beta", + "auto_install": True, +} diff --git a/helpdesk_mgmt_sale/models/__init__.py b/helpdesk_mgmt_sale/models/__init__.py new file mode 100644 index 0000000000..18f415b1c0 --- /dev/null +++ b/helpdesk_mgmt_sale/models/__init__.py @@ -0,0 +1,2 @@ +from . import helpdesk_ticket +from . import sale_order diff --git a/helpdesk_mgmt_sale/models/helpdesk_ticket.py b/helpdesk_mgmt_sale/models/helpdesk_ticket.py new file mode 100644 index 0000000000..f88ccc68e6 --- /dev/null +++ b/helpdesk_mgmt_sale/models/helpdesk_ticket.py @@ -0,0 +1,25 @@ +from odoo import api, fields, models + + +class HelpdeskTicket(models.Model): + _inherit = "helpdesk.ticket" + + sale_order_ids = fields.One2many("sale.order", "ticket_id") + so_count = fields.Integer( + string="Sale Order Count", compute="_compute_so_count", store=True + ) + + @api.depends("sale_order_ids") + def _compute_so_count(self): + for ticket in self: + ticket.so_count = len(ticket.sale_order_ids) + + def action_view_sale_orders(self): + """Returns action to view sale orders related to this ticket.""" + action = self.env["ir.actions.actions"]._for_xml_id("sale.action_orders") + action["domain"] = [("ticket_id", "=", self.id)] + action["context"] = { + "default_ticket_id": self.id, + "default_partner_id": self.partner_id.id, + } + return action diff --git a/helpdesk_mgmt_sale/models/sale_order.py b/helpdesk_mgmt_sale/models/sale_order.py new file mode 100644 index 0000000000..56424d3461 --- /dev/null +++ b/helpdesk_mgmt_sale/models/sale_order.py @@ -0,0 +1,7 @@ +from odoo import fields, models + + +class SaleOrder(models.Model): + _inherit = "sale.order" + + ticket_id = fields.Many2one("helpdesk.ticket") diff --git a/helpdesk_mgmt_sale/readme/CONTRIBUTORS.rst b/helpdesk_mgmt_sale/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..44075b9f25 --- /dev/null +++ b/helpdesk_mgmt_sale/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `Tecnativa `_: + + * Pilar Vargas diff --git a/helpdesk_mgmt_sale/readme/DESCRIPTION.rst b/helpdesk_mgmt_sale/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..af71e8d0c7 --- /dev/null +++ b/helpdesk_mgmt_sale/readme/DESCRIPTION.rst @@ -0,0 +1,4 @@ +This module extends the Helpdesk functionality in Odoo to allow an integration between +Helpdesk tickets and sales orders. A ticket can have several sales orders associated +with it, which in turn will have the ticket associated with it, allowing tickets and +sales to be related. diff --git a/helpdesk_mgmt_sale/readme/USAGE.rst b/helpdesk_mgmt_sale/readme/USAGE.rst new file mode 100644 index 0000000000..2628bcdec6 --- /dev/null +++ b/helpdesk_mgmt_sale/readme/USAGE.rst @@ -0,0 +1,6 @@ +To associate orders to Helpdesk tickets: + +#. Create or modify a Helpdesk ticket. +#. In the ticket view, you will find a **Sales Order** Smartbutton which will show the number of orders associated to the ticket. +#. Clicking on the Smartbutton will open a view with all the sales orders related to the current ticket. +#. To create an order associated to the ticket click on the **Create** button. diff --git a/helpdesk_mgmt_sale/static/description/icon.png b/helpdesk_mgmt_sale/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f3748245b10e9f4dcf1b0a75ba53ef6e934184f5 GIT binary patch literal 14071 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
Q4Q8b~Pt;3HUaFku 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 MxPn-Xh+)wG0P1HGa{vGU literal 0 HcmV?d00001 diff --git a/helpdesk_mgmt_sale/static/description/icon.svg b/helpdesk_mgmt_sale/static/description/icon.svg new file mode 100644 index 0000000000..911d657702 --- /dev/null +++ b/helpdesk_mgmt_sale/static/description/icon.svg @@ -0,0 +1,267 @@ + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/helpdesk_mgmt_sale/static/description/index.html b/helpdesk_mgmt_sale/static/description/index.html new file mode 100644 index 0000000000..4b444c4aca --- /dev/null +++ b/helpdesk_mgmt_sale/static/description/index.html @@ -0,0 +1,434 @@ + + + + + +Helpdesk Sale Order + + + +
+

Helpdesk Sale Order

+ + +

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

+

This module extends the Helpdesk functionality in Odoo to allow integration between Helpdesk tickets and sales orders. A ticket can have several sales orders associated with it, which in turn will have the ticket associated with it, allowing tickets and sales to be related.

+

Table of contents

+ +
+

Usage

+

To associate orders to Helpdesk tickets:

+
    +
  1. Create or modify a Helpdesk ticket.
  2. +
  3. In the ticket view, you will find a Sales Order Smartbutton which will show the number of orders associated to the ticket.
  4. +
  5. Clicking on the Smartbutton will open a view with all the sales orders related to the current ticket.
  6. +
  7. To create an order associated to the ticket click on the Create button.
  8. +
+
+
+

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.

+

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

+

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

+
+
+
+ + diff --git a/helpdesk_mgmt_sale/tests/__init__.py b/helpdesk_mgmt_sale/tests/__init__.py new file mode 100644 index 0000000000..5b420011e0 --- /dev/null +++ b/helpdesk_mgmt_sale/tests/__init__.py @@ -0,0 +1 @@ +from . import test_helpdesk_ticket diff --git a/helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py b/helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py new file mode 100644 index 0000000000..cbbc863110 --- /dev/null +++ b/helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py @@ -0,0 +1,53 @@ +# Copyright (C) 2024 Tecnativa - Pilar Vargas +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo.tests.common import TransactionCase + + +class TestHelpdeskTicketSale(TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.partner = cls.env["res.partner"].create( + {"name": "Test Partner", "email": "testpartner@example.com"} + ) + cls.ticket = cls.env["helpdesk.ticket"].create( + { + "name": "Test Helpdesk Ticket", + "partner_id": cls.partner.id, + "description": "Test Helpdesk Ticket", + } + ) + cls.sale_order_1 = cls.env["sale.order"].create( + { + "partner_id": cls.partner.id, + "ticket_id": cls.ticket.id, + } + ) + cls.sale_order_2 = cls.env["sale.order"].create( + { + "partner_id": cls.partner.id, + "ticket_id": cls.ticket.id, + } + ) + + def test_sale_orders_associated_with_ticket(self): + # Verify that a Helpdesk ticket has multiple sales orders associated with it. + self.assertEqual(len(self.ticket.sale_order_ids), 2) + self.assertIn(self.sale_order_1, self.ticket.sale_order_ids) + self.assertIn(self.sale_order_2, self.ticket.sale_order_ids) + + def test_partner_association_in_sale_order(self): + # Verify that a sales order is associated with the correct ticket partner. + self.assertEqual(self.sale_order_1.partner_id, self.partner) + self.assertEqual(self.sale_order_2.partner_id, self.partner) + + def test_smartbutton_sale_order_count(self): + # Check the sales order counter in the smartbutton of the ticket. + self.ticket._compute_so_count() + self.assertEqual(self.ticket.so_count, 2) + + def test_action_view_sale_orders(self): + # Verify that the smartbutton action displays the associated orders correctly. + action = self.ticket.action_view_sale_orders() + self.assertEqual(action["domain"], [("ticket_id", "=", self.ticket.id)]) + self.assertEqual(action["context"]["default_ticket_id"], self.ticket.id) diff --git a/helpdesk_mgmt_sale/views/helpdesk_ticket_views.xml b/helpdesk_mgmt_sale/views/helpdesk_ticket_views.xml new file mode 100644 index 0000000000..8ad5f9e9bd --- /dev/null +++ b/helpdesk_mgmt_sale/views/helpdesk_ticket_views.xml @@ -0,0 +1,25 @@ + + + + + helpdesk.ticket + + + + + + + + + diff --git a/helpdesk_mgmt_sale/views/sale_order_views.xml b/helpdesk_mgmt_sale/views/sale_order_views.xml new file mode 100644 index 0000000000..c209380afd --- /dev/null +++ b/helpdesk_mgmt_sale/views/sale_order_views.xml @@ -0,0 +1,20 @@ + + + + + sale.order + + + + + + + + + + + From 6594487576add9961bb0086630f9e033948373f7 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Fri, 20 Sep 2024 17:37:15 +0000 Subject: [PATCH 02/15] [UPD] Update helpdesk_mgmt_sale.pot [BOT] post-merge updates --- helpdesk_mgmt_sale/README.rst | 7 ++- .../i18n/helpdesk_mgmt_sale.pot | 49 +++++++++++++++++++ .../static/description/index.html | 18 ++++--- 3 files changed, 66 insertions(+), 8 deletions(-) create mode 100644 helpdesk_mgmt_sale/i18n/helpdesk_mgmt_sale.pot diff --git a/helpdesk_mgmt_sale/README.rst b/helpdesk_mgmt_sale/README.rst index 190be50533..41a09a0892 100644 --- a/helpdesk_mgmt_sale/README.rst +++ b/helpdesk_mgmt_sale/README.rst @@ -7,7 +7,7 @@ Helpdesk Sale Order !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:5d0720d9a8524713cedc3cb1665d48b3783019ef5183e22e33eb722fb73f3808 + !! source digest: sha256:01e1efa36c6e799c149291e34ff665ab891fb45fd2e9026b0f39a760c0bd4382 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -28,7 +28,10 @@ Helpdesk Sale Order |badge1| |badge2| |badge3| |badge4| |badge5| -This module extends the Helpdesk functionality in Odoo to allow integration between Helpdesk tickets and sales orders. A ticket can have several sales orders associated with it, which in turn will have the ticket associated with it, allowing tickets and sales to be related. +This module extends the Helpdesk functionality in Odoo to allow an integration between +Helpdesk tickets and sales orders. A ticket can have several sales orders associated +with it, which in turn will have the ticket associated with it, allowing tickets and +sales to be related. **Table of contents** diff --git a/helpdesk_mgmt_sale/i18n/helpdesk_mgmt_sale.pot b/helpdesk_mgmt_sale/i18n/helpdesk_mgmt_sale.pot new file mode 100644 index 0000000000..434e682fa1 --- /dev/null +++ b/helpdesk_mgmt_sale/i18n/helpdesk_mgmt_sale.pot @@ -0,0 +1,49 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * helpdesk_mgmt_sale +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.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: helpdesk_mgmt_sale +#: model_terms:ir.ui.view,arch_db:helpdesk_mgmt_sale.view_order_form +msgid "Helpdesk" +msgstr "" + +#. module: helpdesk_mgmt_sale +#: model:ir.model,name:helpdesk_mgmt_sale.model_helpdesk_ticket +msgid "Helpdesk Ticket" +msgstr "" + +#. module: helpdesk_mgmt_sale +#: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_helpdesk_ticket__sale_order_ids +msgid "Sale Order" +msgstr "" + +#. module: helpdesk_mgmt_sale +#: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_helpdesk_ticket__so_count +msgid "Sale Order Count" +msgstr "" + +#. module: helpdesk_mgmt_sale +#: model_terms:ir.ui.view,arch_db:helpdesk_mgmt_sale.ticket_view_form +msgid "Sale Orders" +msgstr "" + +#. module: helpdesk_mgmt_sale +#: model:ir.model,name:helpdesk_mgmt_sale.model_sale_order +msgid "Sales Order" +msgstr "" + +#. module: helpdesk_mgmt_sale +#: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_sale_order__ticket_id +msgid "Ticket" +msgstr "" diff --git a/helpdesk_mgmt_sale/static/description/index.html b/helpdesk_mgmt_sale/static/description/index.html index 4b444c4aca..615a290a50 100644 --- a/helpdesk_mgmt_sale/static/description/index.html +++ b/helpdesk_mgmt_sale/static/description/index.html @@ -8,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. +Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -274,7 +275,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: grey; } /* line numbers */ +pre.code .ln { color: gray; } /* line numbers */ pre.code, code { background-color: #eeeeee } pre.code .comment, code .comment { color: #5C6576 } pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } @@ -300,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -366,10 +367,13 @@

Helpdesk Sale Order

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:5d0720d9a8524713cedc3cb1665d48b3783019ef5183e22e33eb722fb73f3808 +!! source digest: sha256:01e1efa36c6e799c149291e34ff665ab891fb45fd2e9026b0f39a760c0bd4382 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

-

This module extends the Helpdesk functionality in Odoo to allow integration between Helpdesk tickets and sales orders. A ticket can have several sales orders associated with it, which in turn will have the ticket associated with it, allowing tickets and sales to be related.

+

This module extends the Helpdesk functionality in Odoo to allow an integration between +Helpdesk tickets and sales orders. A ticket can have several sales orders associated +with it, which in turn will have the ticket associated with it, allowing tickets and +sales to be related.

Table of contents

    @@ -421,7 +425,9 @@

    Contributors

    Maintainers

    This module is maintained by the OCA.

    -Odoo Community Association + +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.

    From 9f99e102d25c01ed950195c821aa03f4e6bb6538 Mon Sep 17 00:00:00 2001 From: Pilar Vargas Date: Mon, 23 Sep 2024 07:22:56 +0000 Subject: [PATCH 03/15] Added translation using Weblate (Spanish) Translated using Weblate (Spanish) Currently translated at 100.0% (7 of 7 strings) Translation: helpdesk-15.0/helpdesk-15.0-helpdesk_mgmt_sale Translate-URL: https://translation.odoo-community.org/projects/helpdesk-15-0/helpdesk-15-0-helpdesk_mgmt_sale/es/ --- helpdesk_mgmt_sale/i18n/es.po | 52 +++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 helpdesk_mgmt_sale/i18n/es.po diff --git a/helpdesk_mgmt_sale/i18n/es.po b/helpdesk_mgmt_sale/i18n/es.po new file mode 100644 index 0000000000..fd89ccc1bc --- /dev/null +++ b/helpdesk_mgmt_sale/i18n/es.po @@ -0,0 +1,52 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * helpdesk_mgmt_sale +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 15.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-09-23 10:06+0000\n" +"Last-Translator: Pilar Vargas \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 5.6.2\n" + +#. module: helpdesk_mgmt_sale +#: model_terms:ir.ui.view,arch_db:helpdesk_mgmt_sale.view_order_form +msgid "Helpdesk" +msgstr "Servicio de asistencia" + +#. module: helpdesk_mgmt_sale +#: model:ir.model,name:helpdesk_mgmt_sale.model_helpdesk_ticket +msgid "Helpdesk Ticket" +msgstr "Solicitud de servicio de asistencia" + +#. module: helpdesk_mgmt_sale +#: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_helpdesk_ticket__sale_order_ids +msgid "Sale Order" +msgstr "Pedido de venta" + +#. module: helpdesk_mgmt_sale +#: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_helpdesk_ticket__so_count +msgid "Sale Order Count" +msgstr "Nº de pedidos de venta" + +#. module: helpdesk_mgmt_sale +#: model_terms:ir.ui.view,arch_db:helpdesk_mgmt_sale.ticket_view_form +msgid "Sale Orders" +msgstr "Pedidos" + +#. module: helpdesk_mgmt_sale +#: model:ir.model,name:helpdesk_mgmt_sale.model_sale_order +msgid "Sales Order" +msgstr "Pedidos" + +#. module: helpdesk_mgmt_sale +#: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_sale_order__ticket_id +msgid "Ticket" +msgstr "Solicitud" From 65392fd6cd7e2a49e7e7b484a0e4fb7ab7255f95 Mon Sep 17 00:00:00 2001 From: pilarvargas-tecnativa Date: Fri, 27 Sep 2024 16:14:47 +0200 Subject: [PATCH 04/15] [IMP] helpdesk_mgmt_sale: Allow to assign multiple tickets to an order TT50683 [UPD] Update helpdesk_mgmt_sale.pot [BOT] post-merge updates Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: helpdesk-15.0/helpdesk-15.0-helpdesk_mgmt_sale Translate-URL: https://translation.odoo-community.org/projects/helpdesk-15-0/helpdesk-15-0-helpdesk_mgmt_sale/ --- helpdesk_mgmt_sale/README.rst | 2 +- helpdesk_mgmt_sale/__manifest__.py | 2 +- helpdesk_mgmt_sale/i18n/es.po | 2 +- helpdesk_mgmt_sale/i18n/helpdesk_mgmt_sale.pot | 2 +- .../migrations/15.0.2.0.0/post-migration.py | 18 ++++++++++++++++++ helpdesk_mgmt_sale/models/helpdesk_ticket.py | 6 +++--- helpdesk_mgmt_sale/models/sale_order.py | 2 +- .../static/description/index.html | 2 +- .../tests/test_helpdesk_ticket.py | 10 ++++++---- helpdesk_mgmt_sale/views/sale_order_views.xml | 2 +- 10 files changed, 34 insertions(+), 14 deletions(-) create mode 100644 helpdesk_mgmt_sale/migrations/15.0.2.0.0/post-migration.py diff --git a/helpdesk_mgmt_sale/README.rst b/helpdesk_mgmt_sale/README.rst index 41a09a0892..009948ad7e 100644 --- a/helpdesk_mgmt_sale/README.rst +++ b/helpdesk_mgmt_sale/README.rst @@ -7,7 +7,7 @@ Helpdesk Sale Order !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:01e1efa36c6e799c149291e34ff665ab891fb45fd2e9026b0f39a760c0bd4382 + !! source digest: sha256:8d126fce4ed269cbcbb629bb3ca3b833d1d1c6c6dc5fd01034c9735d5593fcd9 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/helpdesk_mgmt_sale/__manifest__.py b/helpdesk_mgmt_sale/__manifest__.py index c774c6c2c1..624fd258df 100644 --- a/helpdesk_mgmt_sale/__manifest__.py +++ b/helpdesk_mgmt_sale/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Helpdesk Sale Order", "summary": "Add the option to select project in the sale orders.", - "version": "15.0.1.0.0", + "version": "15.0.2.0.0", "license": "AGPL-3", "category": "Sales Management", "author": "Tecnativa," "Odoo Community Association (OCA)", diff --git a/helpdesk_mgmt_sale/i18n/es.po b/helpdesk_mgmt_sale/i18n/es.po index fd89ccc1bc..01c97d8749 100644 --- a/helpdesk_mgmt_sale/i18n/es.po +++ b/helpdesk_mgmt_sale/i18n/es.po @@ -47,6 +47,6 @@ msgid "Sales Order" msgstr "Pedidos" #. module: helpdesk_mgmt_sale -#: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_sale_order__ticket_id +#: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_sale_order__ticket_ids msgid "Ticket" msgstr "Solicitud" diff --git a/helpdesk_mgmt_sale/i18n/helpdesk_mgmt_sale.pot b/helpdesk_mgmt_sale/i18n/helpdesk_mgmt_sale.pot index 434e682fa1..ddd980346f 100644 --- a/helpdesk_mgmt_sale/i18n/helpdesk_mgmt_sale.pot +++ b/helpdesk_mgmt_sale/i18n/helpdesk_mgmt_sale.pot @@ -44,6 +44,6 @@ msgid "Sales Order" msgstr "" #. module: helpdesk_mgmt_sale -#: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_sale_order__ticket_id +#: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_sale_order__ticket_ids msgid "Ticket" msgstr "" diff --git a/helpdesk_mgmt_sale/migrations/15.0.2.0.0/post-migration.py b/helpdesk_mgmt_sale/migrations/15.0.2.0.0/post-migration.py new file mode 100644 index 0000000000..fb87fc5670 --- /dev/null +++ b/helpdesk_mgmt_sale/migrations/15.0.2.0.0/post-migration.py @@ -0,0 +1,18 @@ +# Copyright 2024 Tecnativa - Pilar Vargas +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +from openupgradelib import openupgrade + + +def convert_sale_order_tickets(env): + openupgrade.m2o_to_x2m( + env.cr, + env["sale.order"], + "sale_order", + "ticket_ids", + "ticket_id", + ) + + +@openupgrade.migrate() +def migrate(env, version): + convert_sale_order_tickets(env) diff --git a/helpdesk_mgmt_sale/models/helpdesk_ticket.py b/helpdesk_mgmt_sale/models/helpdesk_ticket.py index f88ccc68e6..c7d7a58017 100644 --- a/helpdesk_mgmt_sale/models/helpdesk_ticket.py +++ b/helpdesk_mgmt_sale/models/helpdesk_ticket.py @@ -4,7 +4,7 @@ class HelpdeskTicket(models.Model): _inherit = "helpdesk.ticket" - sale_order_ids = fields.One2many("sale.order", "ticket_id") + sale_order_ids = fields.Many2many("sale.order") so_count = fields.Integer( string="Sale Order Count", compute="_compute_so_count", store=True ) @@ -17,9 +17,9 @@ def _compute_so_count(self): def action_view_sale_orders(self): """Returns action to view sale orders related to this ticket.""" action = self.env["ir.actions.actions"]._for_xml_id("sale.action_orders") - action["domain"] = [("ticket_id", "=", self.id)] + action["domain"] = [("ticket_ids", "in", [self.id])] action["context"] = { - "default_ticket_id": self.id, + "default_ticket_ids": [(4, [self.id])], "default_partner_id": self.partner_id.id, } return action diff --git a/helpdesk_mgmt_sale/models/sale_order.py b/helpdesk_mgmt_sale/models/sale_order.py index 56424d3461..23d0a7a3c3 100644 --- a/helpdesk_mgmt_sale/models/sale_order.py +++ b/helpdesk_mgmt_sale/models/sale_order.py @@ -4,4 +4,4 @@ class SaleOrder(models.Model): _inherit = "sale.order" - ticket_id = fields.Many2one("helpdesk.ticket") + ticket_ids = fields.Many2many("helpdesk.ticket") diff --git a/helpdesk_mgmt_sale/static/description/index.html b/helpdesk_mgmt_sale/static/description/index.html index 615a290a50..3c02a2e7f1 100644 --- a/helpdesk_mgmt_sale/static/description/index.html +++ b/helpdesk_mgmt_sale/static/description/index.html @@ -367,7 +367,7 @@

    Helpdesk Sale Order

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:01e1efa36c6e799c149291e34ff665ab891fb45fd2e9026b0f39a760c0bd4382 +!! source digest: sha256:8d126fce4ed269cbcbb629bb3ca3b833d1d1c6c6dc5fd01034c9735d5593fcd9 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

    This module extends the Helpdesk functionality in Odoo to allow an integration between diff --git a/helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py b/helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py index cbbc863110..b3523de33b 100644 --- a/helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py +++ b/helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py @@ -20,13 +20,13 @@ def setUpClass(cls): cls.sale_order_1 = cls.env["sale.order"].create( { "partner_id": cls.partner.id, - "ticket_id": cls.ticket.id, + "ticket_ids": [(6, 0, [cls.ticket.id])], # Adaptación a Many2many } ) cls.sale_order_2 = cls.env["sale.order"].create( { "partner_id": cls.partner.id, - "ticket_id": cls.ticket.id, + "ticket_ids": [(6, 0, [cls.ticket.id])], # Adaptación a Many2many } ) @@ -49,5 +49,7 @@ def test_smartbutton_sale_order_count(self): def test_action_view_sale_orders(self): # Verify that the smartbutton action displays the associated orders correctly. action = self.ticket.action_view_sale_orders() - self.assertEqual(action["domain"], [("ticket_id", "=", self.ticket.id)]) - self.assertEqual(action["context"]["default_ticket_id"], self.ticket.id) + self.assertEqual(action["domain"], [("ticket_ids", "in", [self.ticket.id])]) + self.assertEqual( + action["context"]["default_ticket_ids"], [(4, [self.ticket.id])] + ) diff --git a/helpdesk_mgmt_sale/views/sale_order_views.xml b/helpdesk_mgmt_sale/views/sale_order_views.xml index c209380afd..2de013adbe 100644 --- a/helpdesk_mgmt_sale/views/sale_order_views.xml +++ b/helpdesk_mgmt_sale/views/sale_order_views.xml @@ -12,7 +12,7 @@ - + From e80256ff6a5107d973d6d33694882844a3823f27 Mon Sep 17 00:00:00 2001 From: pilarvargas-tecnativa Date: Tue, 1 Oct 2024 09:56:29 +0200 Subject: [PATCH 05/15] [IMP] helpdesk_mgmt_sale: Access tickets from the order MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit With the widget ‘many2many_tags’ it is not possible to click on a ticket in the order and access the form. By adding a smartbutton it is possible to access the list of tickets in the order and also consult the form for each one of them. TT50683 [UPD] Update helpdesk_mgmt_sale.pot [BOT] post-merge updates Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: helpdesk-15.0/helpdesk-15.0-helpdesk_mgmt_sale Translate-URL: https://translation.odoo-community.org/projects/helpdesk-15-0/helpdesk-15-0-helpdesk_mgmt_sale/ --- helpdesk_mgmt_sale/README.rst | 2 +- helpdesk_mgmt_sale/__manifest__.py | 2 +- helpdesk_mgmt_sale/i18n/es.po | 11 +++++++++++ helpdesk_mgmt_sale/i18n/helpdesk_mgmt_sale.pot | 11 +++++++++++ helpdesk_mgmt_sale/models/sale_order.py | 10 +++++++++- helpdesk_mgmt_sale/static/description/index.html | 2 +- helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py | 4 ++-- helpdesk_mgmt_sale/views/helpdesk_ticket_views.xml | 9 ++++++++- helpdesk_mgmt_sale/views/sale_order_views.xml | 11 +++++++++++ 9 files changed, 55 insertions(+), 7 deletions(-) diff --git a/helpdesk_mgmt_sale/README.rst b/helpdesk_mgmt_sale/README.rst index 009948ad7e..9c72614ada 100644 --- a/helpdesk_mgmt_sale/README.rst +++ b/helpdesk_mgmt_sale/README.rst @@ -7,7 +7,7 @@ Helpdesk Sale Order !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:8d126fce4ed269cbcbb629bb3ca3b833d1d1c6c6dc5fd01034c9735d5593fcd9 + !! source digest: sha256:9058b48ff43b86b6c8dd426fccf2d6ccf02d75989c508e82bee02b5bfe550bcf !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/helpdesk_mgmt_sale/__manifest__.py b/helpdesk_mgmt_sale/__manifest__.py index 624fd258df..7905cda0e1 100644 --- a/helpdesk_mgmt_sale/__manifest__.py +++ b/helpdesk_mgmt_sale/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Helpdesk Sale Order", "summary": "Add the option to select project in the sale orders.", - "version": "15.0.2.0.0", + "version": "15.0.2.1.0", "license": "AGPL-3", "category": "Sales Management", "author": "Tecnativa," "Odoo Community Association (OCA)", diff --git a/helpdesk_mgmt_sale/i18n/es.po b/helpdesk_mgmt_sale/i18n/es.po index 01c97d8749..98ceb79687 100644 --- a/helpdesk_mgmt_sale/i18n/es.po +++ b/helpdesk_mgmt_sale/i18n/es.po @@ -50,3 +50,14 @@ msgstr "Pedidos" #: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_sale_order__ticket_ids msgid "Ticket" msgstr "Solicitud" + +#. module: helpdesk_mgmt_sale +#: model:ir.actions.act_window,name:helpdesk_mgmt_sale.action_helpdesk_ticket +#: model_terms:ir.ui.view,arch_db:helpdesk_mgmt_sale.view_order_form +msgid "Tickets" +msgstr "" + +#. module: helpdesk_mgmt_sale +#: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_sale_order__ticket_count +msgid "Tickets Count" +msgstr "" diff --git a/helpdesk_mgmt_sale/i18n/helpdesk_mgmt_sale.pot b/helpdesk_mgmt_sale/i18n/helpdesk_mgmt_sale.pot index ddd980346f..9a4c4b5e3a 100644 --- a/helpdesk_mgmt_sale/i18n/helpdesk_mgmt_sale.pot +++ b/helpdesk_mgmt_sale/i18n/helpdesk_mgmt_sale.pot @@ -47,3 +47,14 @@ msgstr "" #: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_sale_order__ticket_ids msgid "Ticket" msgstr "" + +#. module: helpdesk_mgmt_sale +#: model:ir.actions.act_window,name:helpdesk_mgmt_sale.action_helpdesk_ticket +#: model_terms:ir.ui.view,arch_db:helpdesk_mgmt_sale.view_order_form +msgid "Tickets" +msgstr "" + +#. module: helpdesk_mgmt_sale +#: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_sale_order__ticket_count +msgid "Tickets Count" +msgstr "" diff --git a/helpdesk_mgmt_sale/models/sale_order.py b/helpdesk_mgmt_sale/models/sale_order.py index 23d0a7a3c3..b1e89a4605 100644 --- a/helpdesk_mgmt_sale/models/sale_order.py +++ b/helpdesk_mgmt_sale/models/sale_order.py @@ -1,7 +1,15 @@ -from odoo import fields, models +from odoo import api, fields, models class SaleOrder(models.Model): _inherit = "sale.order" ticket_ids = fields.Many2many("helpdesk.ticket") + ticket_count = fields.Integer( + string="Tickets Count", compute="_compute_ticket_count", store=True + ) + + @api.depends("ticket_ids") + def _compute_ticket_count(self): + for order in self: + order.ticket_count = len(order.ticket_ids) diff --git a/helpdesk_mgmt_sale/static/description/index.html b/helpdesk_mgmt_sale/static/description/index.html index 3c02a2e7f1..1ab3458965 100644 --- a/helpdesk_mgmt_sale/static/description/index.html +++ b/helpdesk_mgmt_sale/static/description/index.html @@ -367,7 +367,7 @@

    Helpdesk Sale Order

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:8d126fce4ed269cbcbb629bb3ca3b833d1d1c6c6dc5fd01034c9735d5593fcd9 +!! source digest: sha256:9058b48ff43b86b6c8dd426fccf2d6ccf02d75989c508e82bee02b5bfe550bcf !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

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

    This module extends the Helpdesk functionality in Odoo to allow an integration between diff --git a/helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py b/helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py index b3523de33b..a8946e29b9 100644 --- a/helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py +++ b/helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py @@ -20,13 +20,13 @@ def setUpClass(cls): cls.sale_order_1 = cls.env["sale.order"].create( { "partner_id": cls.partner.id, - "ticket_ids": [(6, 0, [cls.ticket.id])], # Adaptación a Many2many + "ticket_ids": [(6, 0, [cls.ticket.id])], } ) cls.sale_order_2 = cls.env["sale.order"].create( { "partner_id": cls.partner.id, - "ticket_ids": [(6, 0, [cls.ticket.id])], # Adaptación a Many2many + "ticket_ids": [(6, 0, [cls.ticket.id])], } ) diff --git a/helpdesk_mgmt_sale/views/helpdesk_ticket_views.xml b/helpdesk_mgmt_sale/views/helpdesk_ticket_views.xml index 8ad5f9e9bd..7f4c831be7 100644 --- a/helpdesk_mgmt_sale/views/helpdesk_ticket_views.xml +++ b/helpdesk_mgmt_sale/views/helpdesk_ticket_views.xml @@ -15,11 +15,18 @@ name="action_view_sale_orders" type="object" class="oe_stat_button" - icon="fa-ticket" + icon="fa-dollar" > + + Tickets + helpdesk.ticket + tree,form + [('sale_order_ids', 'in', active_id)] + {'default_sale_order_ids': [(4, active_id)]} + diff --git a/helpdesk_mgmt_sale/views/sale_order_views.xml b/helpdesk_mgmt_sale/views/sale_order_views.xml index 2de013adbe..f5a4e1e74d 100644 --- a/helpdesk_mgmt_sale/views/sale_order_views.xml +++ b/helpdesk_mgmt_sale/views/sale_order_views.xml @@ -15,6 +15,17 @@ + + + From a108701c09135409feedf3ca44376338e3a2a1f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Wed, 15 Jan 2025 17:05:24 +0100 Subject: [PATCH 06/15] [IMP] helpdesk_mgmt_sale: pre-commit auto fixes --- helpdesk_mgmt_sale/README.rst | 39 ++++++++++--------- helpdesk_mgmt_sale/pyproject.toml | 3 ++ helpdesk_mgmt_sale/readme/CONTRIBUTORS.md | 2 + helpdesk_mgmt_sale/readme/CONTRIBUTORS.rst | 3 -- helpdesk_mgmt_sale/readme/DESCRIPTION.md | 4 ++ helpdesk_mgmt_sale/readme/DESCRIPTION.rst | 4 -- helpdesk_mgmt_sale/readme/USAGE.md | 9 +++++ helpdesk_mgmt_sale/readme/USAGE.rst | 6 --- .../static/description/index.html | 23 ++++++----- 9 files changed, 52 insertions(+), 41 deletions(-) create mode 100644 helpdesk_mgmt_sale/pyproject.toml create mode 100644 helpdesk_mgmt_sale/readme/CONTRIBUTORS.md delete mode 100644 helpdesk_mgmt_sale/readme/CONTRIBUTORS.rst create mode 100644 helpdesk_mgmt_sale/readme/DESCRIPTION.md delete mode 100644 helpdesk_mgmt_sale/readme/DESCRIPTION.rst create mode 100644 helpdesk_mgmt_sale/readme/USAGE.md delete mode 100644 helpdesk_mgmt_sale/readme/USAGE.rst diff --git a/helpdesk_mgmt_sale/README.rst b/helpdesk_mgmt_sale/README.rst index 9c72614ada..cccca9c1a5 100644 --- a/helpdesk_mgmt_sale/README.rst +++ b/helpdesk_mgmt_sale/README.rst @@ -17,21 +17,21 @@ Helpdesk Sale Order :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fhelpdesk-lightgray.png?logo=github - :target: https://github.com/OCA/helpdesk/tree/15.0/helpdesk_mgmt_sale + :target: https://github.com/OCA/helpdesk/tree/17.0/helpdesk_mgmt_sale :alt: OCA/helpdesk .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/helpdesk-15-0/helpdesk-15-0-helpdesk_mgmt_sale + :target: https://translation.odoo-community.org/projects/helpdesk-17-0/helpdesk-17-0-helpdesk_mgmt_sale :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/helpdesk&target_branch=15.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/helpdesk&target_branch=17.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| -This module extends the Helpdesk functionality in Odoo to allow an integration between -Helpdesk tickets and sales orders. A ticket can have several sales orders associated -with it, which in turn will have the ticket associated with it, allowing tickets and -sales to be related. +This module extends the Helpdesk functionality in Odoo to allow an +integration between Helpdesk tickets and sales orders. A ticket can have +several sales orders associated with it, which in turn will have the +ticket associated with it, allowing tickets and sales to be related. **Table of contents** @@ -43,10 +43,13 @@ Usage To associate orders to Helpdesk tickets: -#. Create or modify a Helpdesk ticket. -#. In the ticket view, you will find a **Sales Order** Smartbutton which will show the number of orders associated to the ticket. -#. Clicking on the Smartbutton will open a view with all the sales orders related to the current ticket. -#. To create an order associated to the ticket click on the **Create** button. +1. Create or modify a Helpdesk ticket. +2. In the ticket view, you will find a **Sales Order** Smartbutton which + will show the number of orders associated to the ticket. +3. Clicking on the Smartbutton will open a view with all the sales + orders related to the current ticket. +4. To create an order associated to the ticket click on the **Create** + button. Bug Tracker =========== @@ -54,7 +57,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. @@ -62,19 +65,19 @@ Credits ======= Authors -~~~~~~~ +------- * Tecnativa Contributors -~~~~~~~~~~~~ +------------ -* `Tecnativa `_: +- `Tecnativa `__: - * Pilar Vargas + - Pilar Vargas Maintainers -~~~~~~~~~~~ +----------- This module is maintained by the OCA. @@ -86,6 +89,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/helpdesk `_ project on GitHub. +This module is part of the `OCA/helpdesk `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/helpdesk_mgmt_sale/pyproject.toml b/helpdesk_mgmt_sale/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/helpdesk_mgmt_sale/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/helpdesk_mgmt_sale/readme/CONTRIBUTORS.md b/helpdesk_mgmt_sale/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..df940da7c6 --- /dev/null +++ b/helpdesk_mgmt_sale/readme/CONTRIBUTORS.md @@ -0,0 +1,2 @@ +- [Tecnativa](https://www.tecnativa.com): + - Pilar Vargas diff --git a/helpdesk_mgmt_sale/readme/CONTRIBUTORS.rst b/helpdesk_mgmt_sale/readme/CONTRIBUTORS.rst deleted file mode 100644 index 44075b9f25..0000000000 --- a/helpdesk_mgmt_sale/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1,3 +0,0 @@ -* `Tecnativa `_: - - * Pilar Vargas diff --git a/helpdesk_mgmt_sale/readme/DESCRIPTION.md b/helpdesk_mgmt_sale/readme/DESCRIPTION.md new file mode 100644 index 0000000000..c5cdd99ad8 --- /dev/null +++ b/helpdesk_mgmt_sale/readme/DESCRIPTION.md @@ -0,0 +1,4 @@ +This module extends the Helpdesk functionality in Odoo to allow an +integration between Helpdesk tickets and sales orders. A ticket can have +several sales orders associated with it, which in turn will have the +ticket associated with it, allowing tickets and sales to be related. diff --git a/helpdesk_mgmt_sale/readme/DESCRIPTION.rst b/helpdesk_mgmt_sale/readme/DESCRIPTION.rst deleted file mode 100644 index af71e8d0c7..0000000000 --- a/helpdesk_mgmt_sale/readme/DESCRIPTION.rst +++ /dev/null @@ -1,4 +0,0 @@ -This module extends the Helpdesk functionality in Odoo to allow an integration between -Helpdesk tickets and sales orders. A ticket can have several sales orders associated -with it, which in turn will have the ticket associated with it, allowing tickets and -sales to be related. diff --git a/helpdesk_mgmt_sale/readme/USAGE.md b/helpdesk_mgmt_sale/readme/USAGE.md new file mode 100644 index 0000000000..af3580e3e4 --- /dev/null +++ b/helpdesk_mgmt_sale/readme/USAGE.md @@ -0,0 +1,9 @@ +To associate orders to Helpdesk tickets: + +1. Create or modify a Helpdesk ticket. +2. In the ticket view, you will find a **Sales Order** Smartbutton + which will show the number of orders associated to the ticket. +3. Clicking on the Smartbutton will open a view with all the sales + orders related to the current ticket. +4. To create an order associated to the ticket click on the **Create** + button. diff --git a/helpdesk_mgmt_sale/readme/USAGE.rst b/helpdesk_mgmt_sale/readme/USAGE.rst deleted file mode 100644 index 2628bcdec6..0000000000 --- a/helpdesk_mgmt_sale/readme/USAGE.rst +++ /dev/null @@ -1,6 +0,0 @@ -To associate orders to Helpdesk tickets: - -#. Create or modify a Helpdesk ticket. -#. In the ticket view, you will find a **Sales Order** Smartbutton which will show the number of orders associated to the ticket. -#. Clicking on the Smartbutton will open a view with all the sales orders related to the current ticket. -#. To create an order associated to the ticket click on the **Create** button. diff --git a/helpdesk_mgmt_sale/static/description/index.html b/helpdesk_mgmt_sale/static/description/index.html index 1ab3458965..cc332323b4 100644 --- a/helpdesk_mgmt_sale/static/description/index.html +++ b/helpdesk_mgmt_sale/static/description/index.html @@ -369,11 +369,11 @@

    Helpdesk Sale Order

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:9058b48ff43b86b6c8dd426fccf2d6ccf02d75989c508e82bee02b5bfe550bcf !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

    -

    This module extends the Helpdesk functionality in Odoo to allow an integration between -Helpdesk tickets and sales orders. A ticket can have several sales orders associated -with it, which in turn will have the ticket associated with it, allowing tickets and -sales to be related.

    +

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

    +

    This module extends the Helpdesk functionality in Odoo to allow an +integration between Helpdesk tickets and sales orders. A ticket can have +several sales orders associated with it, which in turn will have the +ticket associated with it, allowing tickets and sales to be related.

    Table of contents

      @@ -392,9 +392,12 @@

      Usage

      To associate orders to Helpdesk tickets:

      1. Create or modify a Helpdesk ticket.
      2. -
      3. In the ticket view, you will find a Sales Order Smartbutton which will show the number of orders associated to the ticket.
      4. -
      5. Clicking on the Smartbutton will open a view with all the sales orders related to the current ticket.
      6. -
      7. To create an order associated to the ticket click on the Create button.
      8. +
      9. In the ticket view, you will find a Sales Order Smartbutton which +will show the number of orders associated to the ticket.
      10. +
      11. Clicking on the Smartbutton will open a view with all the sales +orders related to the current ticket.
      12. +
      13. To create an order associated to the ticket click on the Create +button.
    @@ -402,7 +405,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.

    @@ -431,7 +434,7 @@

    Maintainers

    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/helpdesk project on GitHub.

    +

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

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

    From bff1b0c7d45da687644d96fffaa92aeb134e49f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Wed, 15 Jan 2025 17:07:59 +0100 Subject: [PATCH 07/15] [MIG] helpdesk_mgmt_sale: Migration to 17.0 TT52326 --- helpdesk_mgmt_sale/README.rst | 4 ++-- helpdesk_mgmt_sale/__manifest__.py | 4 ++-- .../migrations/15.0.2.0.0/post-migration.py | 18 ------------------ .../static/description/index.html | 2 +- .../tests/test_helpdesk_ticket.py | 4 ++-- .../views/helpdesk_ticket_views.xml | 5 +---- helpdesk_mgmt_sale/views/sale_order_views.xml | 11 ++++++----- 7 files changed, 14 insertions(+), 34 deletions(-) delete mode 100644 helpdesk_mgmt_sale/migrations/15.0.2.0.0/post-migration.py diff --git a/helpdesk_mgmt_sale/README.rst b/helpdesk_mgmt_sale/README.rst index cccca9c1a5..1add284fbe 100644 --- a/helpdesk_mgmt_sale/README.rst +++ b/helpdesk_mgmt_sale/README.rst @@ -10,9 +10,9 @@ Helpdesk Sale Order !! source digest: sha256:9058b48ff43b86b6c8dd426fccf2d6ccf02d75989c508e82bee02b5bfe550bcf !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png +.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png :target: https://odoo-community.org/page/development-status - :alt: Beta + :alt: Production/Stable .. |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 diff --git a/helpdesk_mgmt_sale/__manifest__.py b/helpdesk_mgmt_sale/__manifest__.py index 7905cda0e1..eff6b8c4a5 100644 --- a/helpdesk_mgmt_sale/__manifest__.py +++ b/helpdesk_mgmt_sale/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Helpdesk Sale Order", "summary": "Add the option to select project in the sale orders.", - "version": "15.0.2.1.0", + "version": "17.0.1.0.0", "license": "AGPL-3", "category": "Sales Management", "author": "Tecnativa," "Odoo Community Association (OCA)", @@ -13,6 +13,6 @@ "views/helpdesk_ticket_views.xml", "views/sale_order_views.xml", ], - "development_status": "Beta", + "development_status": "Production/Stable", "auto_install": True, } diff --git a/helpdesk_mgmt_sale/migrations/15.0.2.0.0/post-migration.py b/helpdesk_mgmt_sale/migrations/15.0.2.0.0/post-migration.py deleted file mode 100644 index fb87fc5670..0000000000 --- a/helpdesk_mgmt_sale/migrations/15.0.2.0.0/post-migration.py +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright 2024 Tecnativa - Pilar Vargas -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openupgradelib import openupgrade - - -def convert_sale_order_tickets(env): - openupgrade.m2o_to_x2m( - env.cr, - env["sale.order"], - "sale_order", - "ticket_ids", - "ticket_id", - ) - - -@openupgrade.migrate() -def migrate(env, version): - convert_sale_order_tickets(env) diff --git a/helpdesk_mgmt_sale/static/description/index.html b/helpdesk_mgmt_sale/static/description/index.html index cc332323b4..21bd1cf9bf 100644 --- a/helpdesk_mgmt_sale/static/description/index.html +++ b/helpdesk_mgmt_sale/static/description/index.html @@ -369,7 +369,7 @@

    Helpdesk Sale Order

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:9058b48ff43b86b6c8dd426fccf2d6ccf02d75989c508e82bee02b5bfe550bcf !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

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

    +

    Production/Stable License: AGPL-3 OCA/helpdesk Translate me on Weblate Try me on Runboat

    This module extends the Helpdesk functionality in Odoo to allow an integration between Helpdesk tickets and sales orders. A ticket can have several sales orders associated with it, which in turn will have the diff --git a/helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py b/helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py index a8946e29b9..1a142276f1 100644 --- a/helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py +++ b/helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py @@ -1,9 +1,9 @@ # Copyright (C) 2024 Tecnativa - Pilar Vargas # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo.tests.common import TransactionCase +from odoo.addons.base.tests.common import BaseCommon -class TestHelpdeskTicketSale(TransactionCase): +class TestHelpdeskTicketSale(BaseCommon): @classmethod def setUpClass(cls): super().setUpClass() diff --git a/helpdesk_mgmt_sale/views/helpdesk_ticket_views.xml b/helpdesk_mgmt_sale/views/helpdesk_ticket_views.xml index 7f4c831be7..16455a4745 100644 --- a/helpdesk_mgmt_sale/views/helpdesk_ticket_views.xml +++ b/helpdesk_mgmt_sale/views/helpdesk_ticket_views.xml @@ -5,10 +5,6 @@ helpdesk.ticket - diff --git a/helpdesk_mgmt_sale/views/sale_order_views.xml b/helpdesk_mgmt_sale/views/sale_order_views.xml index f5a4e1e74d..f254ae8090 100644 --- a/helpdesk_mgmt_sale/views/sale_order_views.xml +++ b/helpdesk_mgmt_sale/views/sale_order_views.xml @@ -5,14 +5,14 @@ sale.order - - + @@ -22,6 +22,7 @@ class="btn btn-primary" icon="fa-ticket" context="{'default_sale_order_ids': [(4, id)]}" + groups="helpdesk_mgmt.group_helpdesk_user_own" > From 3dcd7485afbe9bd3bfd7fa7babea18fdfc4cf747 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Thu, 16 Jan 2025 07:55:50 +0000 Subject: [PATCH 08/15] [UPD] Update helpdesk_mgmt_sale.pot --- helpdesk_mgmt_sale/i18n/helpdesk_mgmt_sale.pot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpdesk_mgmt_sale/i18n/helpdesk_mgmt_sale.pot b/helpdesk_mgmt_sale/i18n/helpdesk_mgmt_sale.pot index 9a4c4b5e3a..a4c49b22ff 100644 --- a/helpdesk_mgmt_sale/i18n/helpdesk_mgmt_sale.pot +++ b/helpdesk_mgmt_sale/i18n/helpdesk_mgmt_sale.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 15.0\n" +"Project-Id-Version: Odoo Server 17.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" From 6f58a3bb154faa2fca5616d7b2e792730822e7ed Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 16 Jan 2025 07:58:39 +0000 Subject: [PATCH 09/15] [BOT] post-merge updates --- helpdesk_mgmt_sale/README.rst | 6 +++--- helpdesk_mgmt_sale/static/description/index.html | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/helpdesk_mgmt_sale/README.rst b/helpdesk_mgmt_sale/README.rst index 1add284fbe..c0badb1918 100644 --- a/helpdesk_mgmt_sale/README.rst +++ b/helpdesk_mgmt_sale/README.rst @@ -7,7 +7,7 @@ Helpdesk Sale Order !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:9058b48ff43b86b6c8dd426fccf2d6ccf02d75989c508e82bee02b5bfe550bcf + !! source digest: sha256:2ab046e203695403f895341ed0023213d1e747713574bc567c5c69ba4a97c273 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png @@ -72,9 +72,9 @@ Authors Contributors ------------ -- `Tecnativa `__: +- `Tecnativa `__: - - Pilar Vargas + - Pilar Vargas Maintainers ----------- diff --git a/helpdesk_mgmt_sale/static/description/index.html b/helpdesk_mgmt_sale/static/description/index.html index 21bd1cf9bf..84d78fbc62 100644 --- a/helpdesk_mgmt_sale/static/description/index.html +++ b/helpdesk_mgmt_sale/static/description/index.html @@ -367,7 +367,7 @@

    Helpdesk Sale Order

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:9058b48ff43b86b6c8dd426fccf2d6ccf02d75989c508e82bee02b5bfe550bcf +!! source digest: sha256:2ab046e203695403f895341ed0023213d1e747713574bc567c5c69ba4a97c273 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Production/Stable License: AGPL-3 OCA/helpdesk Translate me on Weblate Try me on Runboat

    This module extends the Helpdesk functionality in Odoo to allow an From fa3bfbfd1e4a08f11126e03992f2202218b424e2 Mon Sep 17 00:00:00 2001 From: mymage Date: Sun, 19 Jan 2025 14:07:41 +0000 Subject: [PATCH 10/15] Added translation using Weblate (Italian) --- helpdesk_mgmt_sale/i18n/it.po | 61 +++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 helpdesk_mgmt_sale/i18n/it.po diff --git a/helpdesk_mgmt_sale/i18n/it.po b/helpdesk_mgmt_sale/i18n/it.po new file mode 100644 index 0000000000..bdf2029da6 --- /dev/null +++ b/helpdesk_mgmt_sale/i18n/it.po @@ -0,0 +1,61 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * helpdesk_mgmt_sale +# +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: helpdesk_mgmt_sale +#: model_terms:ir.ui.view,arch_db:helpdesk_mgmt_sale.view_order_form +msgid "Helpdesk" +msgstr "" + +#. module: helpdesk_mgmt_sale +#: model:ir.model,name:helpdesk_mgmt_sale.model_helpdesk_ticket +msgid "Helpdesk Ticket" +msgstr "" + +#. module: helpdesk_mgmt_sale +#: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_helpdesk_ticket__sale_order_ids +msgid "Sale Order" +msgstr "" + +#. module: helpdesk_mgmt_sale +#: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_helpdesk_ticket__so_count +msgid "Sale Order Count" +msgstr "" + +#. module: helpdesk_mgmt_sale +#: model_terms:ir.ui.view,arch_db:helpdesk_mgmt_sale.ticket_view_form +msgid "Sale Orders" +msgstr "" + +#. module: helpdesk_mgmt_sale +#: model:ir.model,name:helpdesk_mgmt_sale.model_sale_order +msgid "Sales Order" +msgstr "" + +#. module: helpdesk_mgmt_sale +#: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_sale_order__ticket_ids +msgid "Ticket" +msgstr "" + +#. module: helpdesk_mgmt_sale +#: model:ir.actions.act_window,name:helpdesk_mgmt_sale.action_helpdesk_ticket +#: model_terms:ir.ui.view,arch_db:helpdesk_mgmt_sale.view_order_form +msgid "Tickets" +msgstr "" + +#. module: helpdesk_mgmt_sale +#: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_sale_order__ticket_count +msgid "Tickets Count" +msgstr "" From 4347cc3797738c08b3ad54a1db585cf94253e444 Mon Sep 17 00:00:00 2001 From: mymage Date: Sun, 19 Jan 2025 14:07:46 +0000 Subject: [PATCH 11/15] Translated using Weblate (Italian) Currently translated at 100.0% (9 of 9 strings) Translation: helpdesk-17.0/helpdesk-17.0-helpdesk_mgmt_sale Translate-URL: https://translation.odoo-community.org/projects/helpdesk-17-0/helpdesk-17-0-helpdesk_mgmt_sale/it/ --- helpdesk_mgmt_sale/i18n/it.po | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/helpdesk_mgmt_sale/i18n/it.po b/helpdesk_mgmt_sale/i18n/it.po index bdf2029da6..ca0f23c910 100644 --- a/helpdesk_mgmt_sale/i18n/it.po +++ b/helpdesk_mgmt_sale/i18n/it.po @@ -6,56 +6,58 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 17.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2025-01-19 15: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: helpdesk_mgmt_sale #: model_terms:ir.ui.view,arch_db:helpdesk_mgmt_sale.view_order_form msgid "Helpdesk" -msgstr "" +msgstr "Helpdesk" #. module: helpdesk_mgmt_sale #: model:ir.model,name:helpdesk_mgmt_sale.model_helpdesk_ticket msgid "Helpdesk Ticket" -msgstr "" +msgstr "Ticket assistenza clienti" #. module: helpdesk_mgmt_sale #: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_helpdesk_ticket__sale_order_ids msgid "Sale Order" -msgstr "" +msgstr "Ordine di vendita" #. module: helpdesk_mgmt_sale #: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_helpdesk_ticket__so_count msgid "Sale Order Count" -msgstr "" +msgstr "Conteggio ordini di vendita" #. module: helpdesk_mgmt_sale #: model_terms:ir.ui.view,arch_db:helpdesk_mgmt_sale.ticket_view_form msgid "Sale Orders" -msgstr "" +msgstr "Ordini di vendita" #. module: helpdesk_mgmt_sale #: model:ir.model,name:helpdesk_mgmt_sale.model_sale_order msgid "Sales Order" -msgstr "" +msgstr "Ordine di vendita" #. module: helpdesk_mgmt_sale #: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_sale_order__ticket_ids msgid "Ticket" -msgstr "" +msgstr "Ticket" #. module: helpdesk_mgmt_sale #: model:ir.actions.act_window,name:helpdesk_mgmt_sale.action_helpdesk_ticket #: model_terms:ir.ui.view,arch_db:helpdesk_mgmt_sale.view_order_form msgid "Tickets" -msgstr "" +msgstr "Ticket" #. module: helpdesk_mgmt_sale #: model:ir.model.fields,field_description:helpdesk_mgmt_sale.field_sale_order__ticket_count msgid "Tickets Count" -msgstr "" +msgstr "Conteggio ticket" From f904a639aa7d5024e846aa43aceb5c4f2c5747e9 Mon Sep 17 00:00:00 2001 From: mymage Date: Mon, 20 Jan 2025 14:44:26 +0000 Subject: [PATCH 12/15] Translated using Weblate (Italian) Currently translated at 100.0% (9 of 9 strings) Translation: helpdesk-17.0/helpdesk-17.0-helpdesk_mgmt_sale Translate-URL: https://translation.odoo-community.org/projects/helpdesk-17-0/helpdesk-17-0-helpdesk_mgmt_sale/it/ --- helpdesk_mgmt_sale/i18n/it.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/helpdesk_mgmt_sale/i18n/it.po b/helpdesk_mgmt_sale/i18n/it.po index ca0f23c910..20636acfd6 100644 --- a/helpdesk_mgmt_sale/i18n/it.po +++ b/helpdesk_mgmt_sale/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 17.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2025-01-19 15:06+0000\n" +"PO-Revision-Date: 2025-01-20 17:06+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -19,7 +19,7 @@ msgstr "" #. module: helpdesk_mgmt_sale #: model_terms:ir.ui.view,arch_db:helpdesk_mgmt_sale.view_order_form msgid "Helpdesk" -msgstr "Helpdesk" +msgstr "Assistenza clienti" #. module: helpdesk_mgmt_sale #: model:ir.model,name:helpdesk_mgmt_sale.model_helpdesk_ticket From 0c9785fd5693c55061734e28806741a319ac0056 Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Tue, 4 Feb 2025 10:00:04 +0100 Subject: [PATCH 13/15] [IMP] heldpesk_mgmt*: Update Logo --- .../static/description/icon.png | Bin 14071 -> 36748 bytes .../static/description/icon.svg | 378 ++++++------------ 2 files changed, 118 insertions(+), 260 deletions(-) diff --git a/helpdesk_mgmt_sale/static/description/icon.png b/helpdesk_mgmt_sale/static/description/icon.png index f3748245b10e9f4dcf1b0a75ba53ef6e934184f5..b3ad914af95726eb8aaa6cf891f268c9a3b3bc5d 100644 GIT binary patch literal 36748 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 Ssu-340000R8?DKs&~Dudk>%UVDEh*l@ufq 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
    Q4Q8b~Pt;3HUaFku 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 MxPn-Xh+)wG0P1HGa{vGU diff --git a/helpdesk_mgmt_sale/static/description/icon.svg b/helpdesk_mgmt_sale/static/description/icon.svg index 911d657702..07b809893c 100644 --- a/helpdesk_mgmt_sale/static/description/icon.svg +++ b/helpdesk_mgmt_sale/static/description/icon.svg @@ -1,267 +1,125 @@ - + image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + xmlns:svg="http://www.w3.org/2000/svg"> + + + + + + + + + + + + + + + + + + + + From 52747f0de6ac1bad653e8581b173dd9d233df084 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 5 Feb 2025 07:32:11 +0000 Subject: [PATCH 14/15] [BOT] post-merge updates --- helpdesk_mgmt_sale/README.rst | 2 +- helpdesk_mgmt_sale/__manifest__.py | 2 +- helpdesk_mgmt_sale/static/description/index.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/helpdesk_mgmt_sale/README.rst b/helpdesk_mgmt_sale/README.rst index c0badb1918..12a4c69b8d 100644 --- a/helpdesk_mgmt_sale/README.rst +++ b/helpdesk_mgmt_sale/README.rst @@ -7,7 +7,7 @@ Helpdesk Sale Order !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:2ab046e203695403f895341ed0023213d1e747713574bc567c5c69ba4a97c273 + !! source digest: sha256:c35c9b4e862a497f67d6f09473e5166aa61d3fbdb4dd2b0f65810d9ba956dee4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png diff --git a/helpdesk_mgmt_sale/__manifest__.py b/helpdesk_mgmt_sale/__manifest__.py index eff6b8c4a5..cfabfcc0ca 100644 --- a/helpdesk_mgmt_sale/__manifest__.py +++ b/helpdesk_mgmt_sale/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Helpdesk Sale Order", "summary": "Add the option to select project in the sale orders.", - "version": "17.0.1.0.0", + "version": "17.0.1.0.1", "license": "AGPL-3", "category": "Sales Management", "author": "Tecnativa," "Odoo Community Association (OCA)", diff --git a/helpdesk_mgmt_sale/static/description/index.html b/helpdesk_mgmt_sale/static/description/index.html index 84d78fbc62..fd527b485b 100644 --- a/helpdesk_mgmt_sale/static/description/index.html +++ b/helpdesk_mgmt_sale/static/description/index.html @@ -367,7 +367,7 @@

    Helpdesk Sale Order

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:2ab046e203695403f895341ed0023213d1e747713574bc567c5c69ba4a97c273 +!! source digest: sha256:c35c9b4e862a497f67d6f09473e5166aa61d3fbdb4dd2b0f65810d9ba956dee4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Production/Stable License: AGPL-3 OCA/helpdesk Translate me on Weblate Try me on Runboat

    This module extends the Helpdesk functionality in Odoo to allow an From ee129a08c267e34a12278a5c959882971cf638d8 Mon Sep 17 00:00:00 2001 From: Bhavesh Heliconia Date: Wed, 19 Feb 2025 12:10:13 +0530 Subject: [PATCH 15/15] [MIG] helpdesk_mgmt_sale: Migration to 18.0 --- helpdesk_mgmt_sale/README.rst | 14 +++++++++----- helpdesk_mgmt_sale/__manifest__.py | 2 +- helpdesk_mgmt_sale/models/helpdesk_ticket.py | 4 ++-- helpdesk_mgmt_sale/readme/CONTRIBUTORS.md | 2 ++ helpdesk_mgmt_sale/static/description/index.html | 10 +++++++--- helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py | 8 +++++--- helpdesk_mgmt_sale/views/helpdesk_ticket_views.xml | 4 ++-- helpdesk_mgmt_sale/views/sale_order_views.xml | 2 +- 8 files changed, 29 insertions(+), 17 deletions(-) diff --git a/helpdesk_mgmt_sale/README.rst b/helpdesk_mgmt_sale/README.rst index 12a4c69b8d..be8a8057cb 100644 --- a/helpdesk_mgmt_sale/README.rst +++ b/helpdesk_mgmt_sale/README.rst @@ -17,13 +17,13 @@ Helpdesk Sale Order :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fhelpdesk-lightgray.png?logo=github - :target: https://github.com/OCA/helpdesk/tree/17.0/helpdesk_mgmt_sale + :target: https://github.com/OCA/helpdesk/tree/18.0/helpdesk_mgmt_sale :alt: OCA/helpdesk .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/helpdesk-17-0/helpdesk-17-0-helpdesk_mgmt_sale + :target: https://translation.odoo-community.org/projects/helpdesk-18-0/helpdesk-18-0-helpdesk_mgmt_sale :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/helpdesk&target_branch=17.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/helpdesk&target_branch=18.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -57,7 +57,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. @@ -76,6 +76,10 @@ Contributors - Pilar Vargas +- `Heliconia Solutions Pvt. Ltd. `__ + + - Bhavesh Heliconia + Maintainers ----------- @@ -89,6 +93,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/helpdesk `_ project on GitHub. +This module is part of the `OCA/helpdesk `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/helpdesk_mgmt_sale/__manifest__.py b/helpdesk_mgmt_sale/__manifest__.py index cfabfcc0ca..58ca0e6a01 100644 --- a/helpdesk_mgmt_sale/__manifest__.py +++ b/helpdesk_mgmt_sale/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Helpdesk Sale Order", "summary": "Add the option to select project in the sale orders.", - "version": "17.0.1.0.1", + "version": "18.0.1.0.0", "license": "AGPL-3", "category": "Sales Management", "author": "Tecnativa," "Odoo Community Association (OCA)", diff --git a/helpdesk_mgmt_sale/models/helpdesk_ticket.py b/helpdesk_mgmt_sale/models/helpdesk_ticket.py index c7d7a58017..2b2c5517f5 100644 --- a/helpdesk_mgmt_sale/models/helpdesk_ticket.py +++ b/helpdesk_mgmt_sale/models/helpdesk_ticket.py @@ -1,4 +1,4 @@ -from odoo import api, fields, models +from odoo import Command, api, fields, models class HelpdeskTicket(models.Model): @@ -19,7 +19,7 @@ def action_view_sale_orders(self): action = self.env["ir.actions.actions"]._for_xml_id("sale.action_orders") action["domain"] = [("ticket_ids", "in", [self.id])] action["context"] = { - "default_ticket_ids": [(4, [self.id])], + "default_ticket_ids": [Command.link([self.id])], "default_partner_id": self.partner_id.id, } return action diff --git a/helpdesk_mgmt_sale/readme/CONTRIBUTORS.md b/helpdesk_mgmt_sale/readme/CONTRIBUTORS.md index df940da7c6..70808a15ff 100644 --- a/helpdesk_mgmt_sale/readme/CONTRIBUTORS.md +++ b/helpdesk_mgmt_sale/readme/CONTRIBUTORS.md @@ -1,2 +1,4 @@ - [Tecnativa](https://www.tecnativa.com): - Pilar Vargas +- [Heliconia Solutions Pvt. Ltd.](https://www.heliconia.io) + - Bhavesh Heliconia diff --git a/helpdesk_mgmt_sale/static/description/index.html b/helpdesk_mgmt_sale/static/description/index.html index fd527b485b..5574df0704 100644 --- a/helpdesk_mgmt_sale/static/description/index.html +++ b/helpdesk_mgmt_sale/static/description/index.html @@ -369,7 +369,7 @@

    Helpdesk Sale Order

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:c35c9b4e862a497f67d6f09473e5166aa61d3fbdb4dd2b0f65810d9ba956dee4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

    Production/Stable License: AGPL-3 OCA/helpdesk Translate me on Weblate Try me on Runboat

    +

    Production/Stable License: AGPL-3 OCA/helpdesk Translate me on Weblate Try me on Runboat

    This module extends the Helpdesk functionality in Odoo to allow an integration between Helpdesk tickets and sales orders. A ticket can have several sales orders associated with it, which in turn will have the @@ -405,7 +405,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.

@@ -423,6 +423,10 @@

Contributors

  • Pilar Vargas
  • +
  • Heliconia Solutions Pvt. Ltd.
      +
    • Bhavesh Heliconia
    • +
    +
  • @@ -434,7 +438,7 @@

    Maintainers

    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/helpdesk project on GitHub.

    +

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

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

    diff --git a/helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py b/helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py index 1a142276f1..0bcb125f7d 100644 --- a/helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py +++ b/helpdesk_mgmt_sale/tests/test_helpdesk_ticket.py @@ -1,5 +1,7 @@ # Copyright (C) 2024 Tecnativa - Pilar Vargas # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import Command + from odoo.addons.base.tests.common import BaseCommon @@ -20,13 +22,13 @@ def setUpClass(cls): cls.sale_order_1 = cls.env["sale.order"].create( { "partner_id": cls.partner.id, - "ticket_ids": [(6, 0, [cls.ticket.id])], + "ticket_ids": [Command.set([cls.ticket.id])], } ) cls.sale_order_2 = cls.env["sale.order"].create( { "partner_id": cls.partner.id, - "ticket_ids": [(6, 0, [cls.ticket.id])], + "ticket_ids": [Command.set([cls.ticket.id])], } ) @@ -51,5 +53,5 @@ def test_action_view_sale_orders(self): action = self.ticket.action_view_sale_orders() self.assertEqual(action["domain"], [("ticket_ids", "in", [self.ticket.id])]) self.assertEqual( - action["context"]["default_ticket_ids"], [(4, [self.ticket.id])] + action["context"]["default_ticket_ids"], [Command.link([self.ticket.id])] ) diff --git a/helpdesk_mgmt_sale/views/helpdesk_ticket_views.xml b/helpdesk_mgmt_sale/views/helpdesk_ticket_views.xml index 16455a4745..cbee53c7b8 100644 --- a/helpdesk_mgmt_sale/views/helpdesk_ticket_views.xml +++ b/helpdesk_mgmt_sale/views/helpdesk_ticket_views.xml @@ -22,8 +22,8 @@ Tickets helpdesk.ticket - tree,form + list,form [('sale_order_ids', 'in', active_id)] - {'default_sale_order_ids': [(4, active_id)]} + {'default_sale_order_ids': active_id} diff --git a/helpdesk_mgmt_sale/views/sale_order_views.xml b/helpdesk_mgmt_sale/views/sale_order_views.xml index f254ae8090..c132ec7afc 100644 --- a/helpdesk_mgmt_sale/views/sale_order_views.xml +++ b/helpdesk_mgmt_sale/views/sale_order_views.xml @@ -21,7 +21,7 @@ type="action" class="btn btn-primary" icon="fa-ticket" - context="{'default_sale_order_ids': [(4, id)]}" + context="{'default_sale_order_ids': id}" groups="helpdesk_mgmt.group_helpdesk_user_own" >