|
@ -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 |