From ddefa78b4947eac207529ff79e84b44fc2683b74 Mon Sep 17 00:00:00 2001 From: clementthomas Date: Mon, 23 Dec 2024 17:30:29 +0100 Subject: [PATCH] [IMP] event_generate_quotation_from_registration: add link to registration in generated sale order and invoice diplay this link in tree and form views --- .../__manifest__.py | 2 ++ .../models/__init__.py | 3 ++- .../models/account_move.py | 6 +++++ .../models/event_registration.py | 25 +++++++++++++++++-- .../models/event_registration_financier.py | 14 ++++++----- .../models/sale_order.py | 9 +++++++ .../views/account_move_views.xml | 24 ++++++++++++++++++ .../views/sale_order_views.xml | 24 ++++++++++++++++++ 8 files changed, 98 insertions(+), 9 deletions(-) create mode 100644 event_generate_quotation_from_registration/models/account_move.py create mode 100644 event_generate_quotation_from_registration/views/account_move_views.xml create mode 100644 event_generate_quotation_from_registration/views/sale_order_views.xml diff --git a/event_generate_quotation_from_registration/__manifest__.py b/event_generate_quotation_from_registration/__manifest__.py index 6e24714..dfbc36b 100644 --- a/event_generate_quotation_from_registration/__manifest__.py +++ b/event_generate_quotation_from_registration/__manifest__.py @@ -15,6 +15,8 @@ "data": [ 'security/ir.model.access.csv', 'views/event_registration_views.xml', + 'views/sale_order_views.xml', + 'views/account_move_views.xml', ], "installable": True, } diff --git a/event_generate_quotation_from_registration/models/__init__.py b/event_generate_quotation_from_registration/models/__init__.py index 998c634..f035bf8 100644 --- a/event_generate_quotation_from_registration/models/__init__.py +++ b/event_generate_quotation_from_registration/models/__init__.py @@ -1,3 +1,4 @@ from . import event_registration from . import event_registration_financier -from . import sale_order \ No newline at end of file +from . import sale_order +from . import account_move \ No newline at end of file diff --git a/event_generate_quotation_from_registration/models/account_move.py b/event_generate_quotation_from_registration/models/account_move.py new file mode 100644 index 0000000..86872c6 --- /dev/null +++ b/event_generate_quotation_from_registration/models/account_move.py @@ -0,0 +1,6 @@ +from odoo import _, api, Command, fields, models + +class AccountMove(models.Model): + _inherit = "account.move" + + event_registration_id = fields.Many2one('event.registration', string="Stagiaire") \ No newline at end of file diff --git a/event_generate_quotation_from_registration/models/event_registration.py b/event_generate_quotation_from_registration/models/event_registration.py index c5a749c..f862595 100644 --- a/event_generate_quotation_from_registration/models/event_registration.py +++ b/event_generate_quotation_from_registration/models/event_registration.py @@ -8,12 +8,31 @@ class EventRegistration(models.Model): financier_ids = fields.One2many('event.registration.financier', 'registration_id', string="Financements") + def name_get(self): + result = [] + for registration in self: + if registration.partner_id and registration.event_id: + name = f"{registration.partner_id.name} ({registration.event_id.name})" + result.append((registration.id, name)) + return result + + @api.depends("partner_id", "event_id") + def _compute_display_name(self): + for registration in self: + if registration.partner_id and registration.event_id: + registration.display_name = f"{registration.partner_id.name} ({registration.event_id.name})" + else: + registration.display_name = super(EventRegistration, registration)._compute_display_name() + + def generate_quotation(self): for registration in self: for financier in registration.financier_ids: if not financier.quotation_id: - sale_order = self.env['sale.order'].create(financier.get_sale_order_values()) + so_values = financier.get_sale_order_values() + so_values['order_line'] = financier.get_sale_order_line_values() + sale_order = self.env['sale.order'].create(so_values) financier.quotation_id = sale_order else: order_lines = self.env['sale.order.line'].search([ @@ -21,4 +40,6 @@ class EventRegistration(models.Model): ('product_id','=',financier.get_product_id()) ]) if order_lines: - order_lines[0].price_unit = financier.amount \ No newline at end of file + order_lines[0].price_unit = financier.amount + financier.quotation_id.write(financier.get_sale_order_values()) + \ No newline at end of file diff --git a/event_generate_quotation_from_registration/models/event_registration_financier.py b/event_generate_quotation_from_registration/models/event_registration_financier.py index bb3fc8e..7129b8e 100644 --- a/event_generate_quotation_from_registration/models/event_registration_financier.py +++ b/event_generate_quotation_from_registration/models/event_registration_financier.py @@ -27,11 +27,13 @@ class EventRegistrationFinancier(models.Model): def get_sale_order_values(self): return { - 'partner_id':self.financier_id.id, - 'order_line':[ - Command.create({ + 'event_registration_id':self.registration_id.id, + 'partner_id':self.financier_id.id, + } + + def get_sale_order_line_values(self): + return [Command.create({ "price_unit": self.amount, "product_id": self.get_product_id() - }) - ] - } \ No newline at end of file + })] + diff --git a/event_generate_quotation_from_registration/models/sale_order.py b/event_generate_quotation_from_registration/models/sale_order.py index 535c21d..6e1f807 100644 --- a/event_generate_quotation_from_registration/models/sale_order.py +++ b/event_generate_quotation_from_registration/models/sale_order.py @@ -6,6 +6,15 @@ _logger = logging.getLogger(__name__) class SaleOrder(models.Model): _inherit = "sale.order" + event_registration_id = fields.Many2one('event.registration', string="Stagiaire") + + def _prepare_invoice(self): + """Copy event_registration_id to generated invoice + """ + res = super(SaleOrder, self)._prepare_invoice() + res["event_registration_id"] = self.event_registration_id.id + return res + def linked_to_registration(self): return len(self.env['event.registration.financier'].search([('quotation_id','=',self.id)])) > 0 diff --git a/event_generate_quotation_from_registration/views/account_move_views.xml b/event_generate_quotation_from_registration/views/account_move_views.xml new file mode 100644 index 0000000..8365787 --- /dev/null +++ b/event_generate_quotation_from_registration/views/account_move_views.xml @@ -0,0 +1,24 @@ + + + + view.move.form.inherit.event.generate.quotation + account.move + + + + + + + + + + view.out.invoice.tree.inherit.event.generate.quotation + account.move + + + + + + + + diff --git a/event_generate_quotation_from_registration/views/sale_order_views.xml b/event_generate_quotation_from_registration/views/sale_order_views.xml new file mode 100644 index 0000000..d43a118 --- /dev/null +++ b/event_generate_quotation_from_registration/views/sale_order_views.xml @@ -0,0 +1,24 @@ + + + + sale.order.form.inherit.event.generate.quotation + sale.order + + + + + + + + + + view.quotation.tree.inherit.event.generate.quotation + sale.order + + + + + + + +