diff --git a/__manifest__.py b/__manifest__.py
index d8318a1..13ed871 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -38,6 +38,7 @@
'views/returnmail.xml',
'views/payment_batch.xml',
'views/website_sale.xml',
+ 'views/aggregate.xml',
'wizard/operation_duplicate_wizard.xml'
diff --git a/models/__init__.py b/models/__init__.py
index 26873d7..45373d8 100644
--- a/models/__init__.py
+++ b/models/__init__.py
@@ -12,4 +12,5 @@ from . import relationship
from . import returnmail
from . import payment_batch
from . import sale_order
-from . import product
\ No newline at end of file
+from . import product
+from . import aggregate
\ No newline at end of file
diff --git a/models/aggregate.py b/models/aggregate.py
new file mode 100644
index 0000000..a663656
--- /dev/null
+++ b/models/aggregate.py
@@ -0,0 +1,91 @@
+from odoo import models, fields, api,_
+from odoo.exceptions import UserError, ValidationError,Warning
+from psycopg2 import sql, DatabaseError
+
+from werkzeug import utils
+import json
+
+
+
+class opendons_aggregate_partner(models.Model):
+ _name = 'opendons.aggregate.partner'
+ _description = 'opération marketing : partner agregats'
+
+ partner_id = fields.Many2one('res.partner',string='partner',readonly=True)
+
+ first_donation_product_id=fields.Many2one('product.product',string='first donation product affectation',readonly=True)
+ first_donation_date=fields.Date(string='first donation date', readonly=True)
+ first_donation_operation_id = fields.Many2one('opendon.operation',string='first donation operation',readonly=True)
+
+
+
+ max_amount_donation=fields.Float(string='max amount donation',readonly=True)
+ annual_average_number_donation=fields.Float(string='annual average number of donation',readonly=True)
+ average_amount_donation=fields.Float(string='average amount donation',readonly=True)
+ rfm_score=fields.Float(string='rfm score',readonly=True)
+
+ def compute_aggregate(self):
+ vals={}
+ self._compute_init()
+ partners=self.env['res.partner'].search([])
+ for partner in partners:
+ vals['partner_id']=int(partner.id)
+ vals['first_donation_product_id']=self._compute_first_donation_product(partner.id)
+
+ first_donation_date=self._compute_first_donation_date(partner.id)
+ if first_donation_date:vals['first_donation_date']=first_donation_date
+
+ vals['first_donation_operation_id']=self._compute_first_donation_operation(partner.id)
+ #vals['max_amount_donation']=self._compute_max_amount_donation(partner_id))
+ #vals['annual_average_number_donation']=self._compute_annual_average_number_donation(partner_id))
+ #vals['average_amount_donation']=self._compute_average_amount_donation(partner_id))
+ #vals['rfm_score']=self._compute_rfm_score(partner_id))
+ res=self.env['opendons.aggregate.partner'].create(vals)
+ def _compute_init(self):
+
+ aggregate=self.env['opendons.aggregate.partner'].search([])
+ aggregate.unlink()
+ return True
+
+ def _compute_first_donation_product(self,partner_id):
+
+ first_donation=self.env['donation.donation'].search([('partner_id','=',int(partner_id)),('recurring_template','=',False),('state','=','done')],limit=1,order="donation_date asc")
+
+ if first_donation:
+ first_line_donation=self.env['donation.line'].search([('donation_id','=',int(first_donation.id))],limit=1,order="id asc")
+
+ if first_line_donation:
+
+ return int(first_line_donation.product_id)
+
+ return False
+
+
+
+ def _compute_first_donation_operation(self,partner_id):
+
+ first_donation=self.env['donation.donation'].search([('partner_id','=',int(partner_id)),('recurring_template','=',False),('state','=','done')],limit=1,order="donation_date asc")
+ if first_donation:
+ return int(first_donation.operation_id)
+ else:
+ return False
+
+
+
+ def _compute_first_donation_date(self,partner_id):
+
+ first_donation=self.env['donation.donation'].search([('partner_id','=',int(partner_id)),('recurring_template','=',False),('state','=','done')],limit=1,order="donation_date asc")
+ if first_donation:
+ return first_donation.donation_date
+ else:
+ return False
+
+
+ def _compute_max_amount_donation(self,partner_id):
+ return True
+ def _compute_annual_average_number_donation(self,partner_id):
+ return True
+ def _compute_average_amount_donation(self,partner_id):
+ return True
+ def _compute_rfm_score(self,partner_id):
+ return True
\ No newline at end of file
diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv
index 98ad175..0ed7ed1 100644
--- a/security/ir.model.access.csv
+++ b/security/ir.model.access.csv
@@ -22,4 +22,5 @@ access_opendons_returnmailnpai,opendons_returnmailnpai,model_opendons_returnmail
access_opendons_payment_batch,opendons_payment_batch,model_opendons_payment_batch,donation.group_donation_manager,1,1,1,1
access_opendons_payment_batch_qr_code,opendons_payment_batch_qrcode,model_opendons_payment_batch_qrcode,donation.group_donation_manager,1,1,1,1
-access_opendons_duplicate_operation_wizard,opendons_duplicate_operation_wizard,model_opendons_operation_duplicate,donation.group_donation_manager,1,1,1,1
\ No newline at end of file
+access_opendons_duplicate_operation_wizard,opendons_duplicate_operation_wizard,model_opendons_operation_duplicate,donation.group_donation_manager,1,1,1,1
+access_opendons_aggregate_partner,opendons_aggregate_partner,model_opendons_aggregate_partner,donation.group_donation_manager,1,1,1,1
diff --git a/views/aggregate.xml b/views/aggregate.xml
new file mode 100644
index 0000000..66ea37d
--- /dev/null
+++ b/views/aggregate.xml
@@ -0,0 +1,54 @@
+
+
+
+
+ opendons_aggregate_partner list
+ opendons.aggregate.partner
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ opendons_aggregate_partner_form
+ opendons.aggregate.partner
+
+
+
+
+
+
+
+ opendons.aggregate_partner.search
+ opendons.aggregate.partner
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/views/partner.xml b/views/partner.xml
index dac78f3..7dbb0b1 100644
--- a/views/partner.xml
+++ b/views/partner.xml
@@ -47,6 +47,13 @@
{'search_default_partner_id': active_id}
+
+ Indicators
+ opendons.aggregate.partner
+ tree,form
+ {'search_default_partner_id': active_id}
+
+
Recurring_donation
donation.donation
@@ -101,13 +108,13 @@
1
-
-
+
-
-
+
+
+