diff --git a/golem_activity_registration_payment/wizard/golem_activity_registration_invoicing.py b/golem_activity_registration_payment/wizard/golem_activity_registration_invoicing.py index 96fd434..95a5419 100644 --- a/golem_activity_registration_payment/wizard/golem_activity_registration_invoicing.py +++ b/golem_activity_registration_payment/wizard/golem_activity_registration_invoicing.py @@ -21,6 +21,7 @@ import logging from math import ceil from odoo import models, fields, api, _ +from odoo.exceptions import ValidationError from odoo.exceptions import UserError _LOGGER = logging.getLogger(__name__) @@ -50,6 +51,11 @@ class GolemActivityRegistrationInvoicing(models.TransientModel): ondelete='cascade') member_id = fields.Many2one('golem.member', 'Member', required=True, ondelete='cascade') + partner_ids = fields.Many2many('res.partner', compute='_compute_partner_ids') + on_the_name_of = fields.Many2one('res.partner', 'On the Name of', + ondelete='cascade', + domain="[('id', '=', partner_ids[0][2])]") + is_minor = fields.Boolean(related='member_id.is_minor') line_ids = fields.One2many('golem.activity.registration.invoicing.line', 'invoicing_id', string='Activities') schedule_id = fields.Many2one('golem.payment.schedule', 'Payment schedule', @@ -65,6 +71,14 @@ class GolemActivityRegistrationInvoicing(models.TransientModel): ondelete='cascade') payment_ids = fields.Many2many('account.payment', string='Generated payments') + @api.depends('member_id') + def _compute_partner_ids(self): + for rec in self: + partner_ids = rec.member_id.legal_guardian_ids.mapped('legal_guardian_id').ids + if hasattr(rec.member_id, 'family_member_ids'): + partner_ids += rec.member_id.family_member_ids.filtered( + lambda r: r.id != self.member_id.partner_id.id).ids + rec.partner_ids = [(6, 0, partner_ids)] def _create_invoice_line(self, product, price, invoice): """ Create invoice line : needs cache record for onchange, then real @@ -84,7 +98,10 @@ class GolemActivityRegistrationInvoicing(models.TransientModel): def _create_invoice(self): """ Create invoice and lines """ self.ensure_one() - partner = self.member_id.partner_id + if self.is_minor: + partner = self.on_the_name_of + else: + partner = self.member_id.partner_id #check if there is a draft invoice for the current customer member_line = partner.member_lines.filtered( lambda ml: (ml.membership_id.membership_season_id == self.season_id @@ -136,6 +153,10 @@ class GolemActivityRegistrationInvoicing(models.TransientModel): def validate(self): """ Validate and create invoice and payments """ self.ensure_one() + if self.is_minor and not self.on_the_name_of: + err = _('This member is a minor, please fill on the name of so you ' + 'invoice this registration') + raise ValidationError(err) self[0].line_ids.mapped('registration_id').write({'state': 'confirmed'}) invoice = self._create_invoice() self.invoice_id = invoice diff --git a/golem_activity_registration_payment/wizard/golem_activity_registration_invoicing.xml b/golem_activity_registration_payment/wizard/golem_activity_registration_invoicing.xml index 4c37847..13c25e4 100644 --- a/golem_activity_registration_payment/wizard/golem_activity_registration_invoicing.xml +++ b/golem_activity_registration_payment/wizard/golem_activity_registration_invoicing.xml @@ -33,7 +33,11 @@ along with this program. If not, see . - + + + +