Browse Source

aggregats

master
root 3 years ago
parent
commit
6d98743735
6 changed files with 168 additions and 6 deletions
  1. +1
    -0
      __manifest__.py
  2. +2
    -1
      models/__init__.py
  3. +91
    -0
      models/aggregate.py
  4. +2
    -1
      security/ir.model.access.csv
  5. +54
    -0
      views/aggregate.xml
  6. +18
    -4
      views/partner.xml

+ 1
- 0
__manifest__.py View File

@ -38,6 +38,7 @@
'views/returnmail.xml',
'views/payment_batch.xml',
'views/website_sale.xml',
'views/aggregate.xml',
'wizard/operation_duplicate_wizard.xml'


+ 2
- 1
models/__init__.py View File

@ -12,4 +12,5 @@ from . import relationship
from . import returnmail
from . import payment_batch
from . import sale_order
from . import product
from . import product
from . import aggregate

+ 91
- 0
models/aggregate.py View File

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

+ 2
- 1
security/ir.model.access.csv View File

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

+ 54
- 0
views/aggregate.xml View File

@ -0,0 +1,54 @@
<?xml version="1.0"?>
<odoo>
<record model="ir.ui.view" id="opendons.aggregate_partner_list">
<field name="name">opendons_aggregate_partner list</field>
<field name="model">opendons.aggregate.partner</field>
<field name="arch" type="xml">
<tree create="0">
<field name="first_donation_product_id"/>
<field name="first_donation_operation_id"/>
<field name="first_donation_date"/>
<field name="max_amount_donation"/>
<field name="annual_average_number_donation"/>
<field name="average_amount_donation"/>
<field name="rfm_score"/>
</tree>
</field>
</record>
<record model="ir.ui.view" id="opendons.aggregate_partner_form" >
<field name="name">opendons_aggregate_partner_form</field>
<field name="model">opendons.aggregate.partner</field>
<field name="arch" type="xml">
<form string="Partner Indicators" create="0">
<header>
<button name="compute_aggregate" type="object" string="Compute"/>
</header>
<sheet>
<group name="main">
<field name="first_donation_product_id"/>
<field name="first_donation_operation_id"/>
<field name="first_donation_date"/>
<field name="max_amount_donation"/>
<field name="annual_average_number_donation"/>
<field name="average_amount_donation"/>
<field name="rfm_score"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="opendons.aggregate_partner_search" model="ir.ui.view">
<field name="name">opendons.aggregate_partner.search</field>
<field name="model">opendons.aggregate.partner</field>
<field name="arch" type="xml">
<search string="Search Indicator">
<field name="partner_id" />
</search>
</field>
</record>
</odoo>

+ 18
- 4
views/partner.xml View File

@ -47,6 +47,13 @@
<field name="context">{'search_default_partner_id': active_id}</field>
</record>
<record id="act_partner_aggregate" model="ir.actions.act_window">
<field name="name">Indicators</field>
<field name="res_model">opendons.aggregate.partner</field>
<field name="view_mode">tree,form</field>
<field name="context">{'search_default_partner_id': active_id}</field>
</record>
<record id="act_partner_recurring_donation" model="ir.actions.act_window">
<field name="name">Recurring_donation</field>
<field name="res_model">donation.donation</field>
@ -101,13 +108,13 @@
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//page[@name='contact_addresses']" position="replace">
</xpath>
<!-- <xpath expr="//page[@name='contact_addresses']" position="replace">
</xpath> -->
<xpath expr="//span[@name='address_name']" position="before">
<field name="npai_count"/>
</xpath>
<xpath expr="//field[@name='state_id']" position="replace">
</xpath>
<!-- <xpath expr="//field[@name='state_id']" position="replace">
</xpath> -->
<xpath expr="//div[@name='button_box']" position="inside">
<button class="oe_stat_button" type="action"
name="%(act_partner_recurring_donation)d"
@ -147,6 +154,13 @@
icon="fa-handshake-o">
<field string="Relationship" name="relationshipPartner_count" widget="statinfo"/>
</button>
<button class="oe_stat_button" type="action"
name="%(act_partner_aggregate)d"
icon="fa-info">
<span>Indicators</span>
</button>
</xpath>
</field>
</record>


Loading…
Cancel
Save