From 09017b13e9f7552099a4424d1204c3fac0e3dfc6 Mon Sep 17 00:00:00 2001 From: Fabien BOURGEOIS Date: Tue, 21 Aug 2018 11:10:54 +0200 Subject: [PATCH] [ADD]GOLEM Family Membership : multiple enhancements * Ability to choose 1:n members for each subscription ; * Do not invoice more than 1 person ; * Keep subscription tracking info on family form ; * Allow subscription cancel. --- golem_family_membership/__manifest__.py | 3 +- golem_family_membership/models/__init__.py | 2 +- .../models/golem_family.py | 5 +- golem_family_membership/models/membership.py | 29 ++++++++++ .../models/product_template.py | 27 +++++++++ .../views/golem_family_views.xml | 25 ++++++--- .../views/membership_views.xml | 55 +++++++++++++++++++ .../wizard/golem_membership_invoice.py | 38 +++++++++---- .../wizard/golem_membership_invoice_views.xml | 8 ++- 9 files changed, 167 insertions(+), 25 deletions(-) create mode 100644 golem_family_membership/models/membership.py create mode 100644 golem_family_membership/models/product_template.py create mode 100644 golem_family_membership/views/membership_views.xml diff --git a/golem_family_membership/__manifest__.py b/golem_family_membership/__manifest__.py index 00bc1ff..50ba7d7 100644 --- a/golem_family_membership/__manifest__.py +++ b/golem_family_membership/__manifest__.py @@ -27,6 +27,7 @@ 'application': False, 'installable': True, 'depends': ['golem_family', 'membership'], - 'data': ['views/golem_family_views.xml', + 'data': ['views/membership_views.xml', + 'views/golem_family_views.xml', 'wizard/golem_membership_invoice_views.xml'] } diff --git a/golem_family_membership/models/__init__.py b/golem_family_membership/models/__init__.py index 49bfba1..0435468 100644 --- a/golem_family_membership/models/__init__.py +++ b/golem_family_membership/models/__init__.py @@ -16,4 +16,4 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from . import golem_family +from . import product_template, membership, golem_family diff --git a/golem_family_membership/models/golem_family.py b/golem_family_membership/models/golem_family.py index 7ea0b30..824deca 100644 --- a/golem_family_membership/models/golem_family.py +++ b/golem_family_membership/models/golem_family.py @@ -18,13 +18,16 @@ """ GOLEM Families Adaptations""" -from odoo import models, api, _ +from odoo import models, fields, api, _ class GolemFamily(models.Model): """ GOLEM Family Adaptations """ _inherit = 'golem.family' + member_line_ids = fields.One2many('membership.membership_line', + 'family_id', string='Membership lines') + @api.multi def family_membership(self): """ Wizard call for family membership """ diff --git a/golem_family_membership/models/membership.py b/golem_family_membership/models/membership.py new file mode 100644 index 0000000..a15f1e7 --- /dev/null +++ b/golem_family_membership/models/membership.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- + +# Copyright 2018 Youssef El Ouahby +# Copyright 2018 Fabien Bourgeois +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +""" GOLEM Families Adaptations""" + +from odoo import models, fields + + +class MembershipLine(models.Model): + """ Membership Line Adaptations """ + _inherit = 'membership.membership_line' + + family_id = fields.Many2one('golem.family', string='Family', + ondelete='cascade', index=True) diff --git a/golem_family_membership/models/product_template.py b/golem_family_membership/models/product_template.py new file mode 100644 index 0000000..cc8aa0d --- /dev/null +++ b/golem_family_membership/models/product_template.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- + +# Copyright 2018 Fabien Bourgeois +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +""" Product adaptations """ + +from odoo import models, fields + + +class ProductTemplate(models.Model): + """ Product Template adaptations """ + _inherit = 'product.template' + + family_membership = fields.Boolean(default=False) diff --git a/golem_family_membership/views/golem_family_views.xml b/golem_family_membership/views/golem_family_views.xml index 218047e..2a624f3 100644 --- a/golem_family_membership/views/golem_family_views.xml +++ b/golem_family_membership/views/golem_family_views.xml @@ -20,22 +20,33 @@ along with this program. If not, see . + Golem Family form adaptations golem.family - -
+ + +
-
+ + + + + + + + + + + +
+
diff --git a/golem_family_membership/views/membership_views.xml b/golem_family_membership/views/membership_views.xml new file mode 100644 index 0000000..439d931 --- /dev/null +++ b/golem_family_membership/views/membership_views.xml @@ -0,0 +1,55 @@ + + + + + + + + Membership Product Form adaptations + product.template + + + + + + + + + + + Membership Product Search adaptations + product.template + + + + + + + + + + + + + + + diff --git a/golem_family_membership/wizard/golem_membership_invoice.py b/golem_family_membership/wizard/golem_membership_invoice.py index 9ae904c..6db2ac2 100644 --- a/golem_family_membership/wizard/golem_membership_invoice.py +++ b/golem_family_membership/wizard/golem_membership_invoice.py @@ -24,15 +24,29 @@ class GolemMembershipInvoice(models.TransientModel): """ GOLEM Membership Invoice adaptations """ _inherit = 'golem.membership.invoice' - family_id = fields.Many2one('golem.family', required=True) - members_ids = fields.Many2many('res.partner') - on_the_name_of = fields.Many2one('res.partner', domain="[('id', '=', members_ids[0][2])]") + family_id = fields.Many2one('golem.family', string='Family', + required=True, ondelete='cascade') + member_ids = fields.Many2many('res.partner', string='Concerned members') + on_the_name_of = fields.Many2one('res.partner', ondelete='cascade', + required=True) @api.onchange('family_id') def onchange_family(self): - """ Fill members_ids """ + """ Fill member_ids """ for record in self: - record.members_ids = [(6, False, record.family_id.members_ids.ids)] + if record.family_id and record.family_id.member_ids: + record.member_ids = [(6, False, + record.family_id.member_ids.ids)] + + @api.onchange('member_ids') + def onchange_members(self): + """ On change members : custom domain for on the name of """ + record = self[0] + if record.member_ids: + return { + 'domain': {'on_the_name_of': [('id', 'in', record.member_ids.ids)]} + } + return {'domain': {'on_the_name_of': []}} @api.multi def membership_family_invoice(self): @@ -42,13 +56,13 @@ class GolemMembershipInvoice(models.TransientModel): datas = {'membership_product_id': record.product_id.id, 'amount': record.member_price} invoice_list = record.on_the_name_of.create_membership_invoice(datas=datas) - datas = {'membership_product_id': record.product_id.id, - 'amount': 0.0} - gen = (member for member in record.members_ids if member != record.on_the_name_of) - for member in gen: - id_membership = member.create_membership_invoice(datas=datas) - self.env['account.invoice'].browse(id_membership).action_invoice_open() - invoice_list += id_membership + # Link membership lines to family and targetted members + membership_line = record.on_the_name_of.member_lines[0] # Last one + membership_line.family_id = record.family_id + # Add membership lines for other family members + for member in record.member_ids: + if member != record.on_the_name_of: + membership_line.copy({'partner': member.id}) search_view_id = self.env.ref('account.view_account_invoice_filter') form_view_id = self.env.ref('account.invoice_form') diff --git a/golem_family_membership/wizard/golem_membership_invoice_views.xml b/golem_family_membership/wizard/golem_membership_invoice_views.xml index e10d9b2..78bf637 100644 --- a/golem_family_membership/wizard/golem_membership_invoice_views.xml +++ b/golem_family_membership/wizard/golem_membership_invoice_views.xml @@ -28,9 +28,11 @@ along with this program. If not, see .
- - - + +