diff --git a/models/scop_cotisation.py b/models/scop_cotisation.py index 156e8c5d177f84145475cccc80b94c260e525fed..2724f583f53ae7959e7657d76de1bab01682427d 100644 --- a/models/scop_cotisation.py +++ b/models/scop_cotisation.py @@ -1,7 +1,8 @@ # © 2021 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import models, fields +from odoo import models, fields, api +from datetime import date class ScopCotisation(models.AbstractModel): @@ -30,6 +31,38 @@ class ScopCotisation(models.AbstractModel): ) date_cotisation = fields.Date("Date de cotisation", required=True) + member_count = fields.Integer( + "Adhérents renouvelés", + compute='_compute_member_count') + new_member_count = fields.Integer( + "Nouveaux adhérents", + compute='_compute_new_member_count') + invoiced_member_count = fields.Integer( + "Cotisations créées", + compute='_compute_invoiced_member_count') + + # ------------------------------------------------------ + # Compute fields + # ------------------------------------------------------ + @api.multi + def _compute_member_count(self): + for cotiz in self: + cotiz.member_count = len(cotiz.get_members()) + + @api.multi + def _compute_new_member_count(self): + for cotiz in self: + cotiz.new_member_count = len(cotiz.get_new_members()) + + @api.multi + def _compute_invoiced_member_count(self): + for cotiz in self: + cotiz.invoiced_member_count = len( + cotiz.invoice_ids.mapped('partner_id')) + + # ------------------------------------------------------ + # Global functions + # ------------------------------------------------------ def create_contribution(self, product, partner, liasse=None, amount=0): Invoice = self.env['account.invoice'] InvoiceLine = self.env['account.invoice.line'] @@ -58,3 +91,30 @@ class ScopCotisation(models.AbstractModel): }) return member_invoice + + @api.multi + def get_members(self): + self.ensure_one() + members = self.env['scop.membership.period'].search([ + ('type_id', '=', self.env.ref( + 'cgscop_partner.membership_type_1').id), + ('start', '<', date(self.year, 12, 31)), + '|', + ('end', '=', None), + ('end', '>', date(self.year, 1, 1)) + ]).mapped('partner_id') + return members + + @api.multi + def get_new_members(self): + self.ensure_one() + members = self.env['scop.membership.period'].search([ + ('type_id', '=', self.env.ref( + 'cgscop_partner.membership_type_1').id), + ('start', '>=', date(self.year, 1, 1)), + ('start', '<=', date(self.year, 12, 31)), + '|', + ('end', '=', None), + ('end', '>', date(self.year, 1, 1)) + ]).mapped('partner_id') + return members