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