You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

91 lines
3.8 KiB

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