From 6d98743735497416ed75a5f09ab0b1b6b9c258a4 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 26 Mar 2022 09:29:10 +0000 Subject: [PATCH] aggregats --- __manifest__.py | 1 + models/__init__.py | 3 +- models/aggregate.py | 91 ++++++++++++++++++++++++++++++++++++ security/ir.model.access.csv | 3 +- views/aggregate.xml | 54 +++++++++++++++++++++ views/partner.xml | 22 +++++++-- 6 files changed, 168 insertions(+), 6 deletions(-) create mode 100644 models/aggregate.py create mode 100644 views/aggregate.xml 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 - - + - - + + +