From 5f7c1ba263f9bb1650d4fe3b95e0cdbab210aa81 Mon Sep 17 00:00:00 2001 From: jordan <jordan@le-filament.com> Date: Wed, 10 Feb 2021 10:03:55 +0100 Subject: [PATCH] [update] get members and new members in scop_cotiz parent --- models/scop_cotisation.py | 62 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/models/scop_cotisation.py b/models/scop_cotisation.py index 156e8c5..2724f58 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 -- GitLab