Browse Source

indicateurs, traductions

master
root 3 years ago
parent
commit
70706eee77
6 changed files with 104 additions and 21 deletions
  1. +21
    -11
      i18n/fr.po
  2. +58
    -7
      models/aggregate.py
  3. +5
    -0
      models/donation.py
  4. +8
    -1
      models/partner.py
  5. +1
    -0
      views/aggregate.xml
  6. +11
    -2
      views/partner.xml

+ 21
- 11
i18n/fr.po View File

@ -523,12 +523,12 @@ msgstr "Dupliquer"
#. module: opendons
#: model:ir.actions.act_window,name:opendons.action_operation_duplicate
msgid "Duplicate operation"
msgstr "Dupliquer l'opération"
msgstr "Dupliquer la campagne"
#. module: opendons
#: model:ir.model,name:opendpendons.model_opendons_operation_duplicate
msgid "Duplicate the operation"
msgstr "Dupliquer l'opération"
msgstr "Dupliquer la campagne"
#. module: opendons
#: model:ir.ui.menu,name:opendons.opendons_duplicate_title_menu
@ -1081,19 +1081,19 @@ msgstr "N° appartement,étage"
#: model:ir.model.fields,field_description:opendons.field_opendons_returnmail_npai__operation_id
#: model:ir.model.fields,field_description:opendons.field_opendons_segment__operation_id
msgid "Operation"
msgstr ""
msgstr "Campagne"
#. module: opendons
#: model:ir.ui.menu,name:opendons.operation_top_menu
msgid "Operations"
msgstr ""
msgstr "Campagnes"
#. module: opendons
#: model:ir.actions.act_window,name:opendons.operation_action
#: model:ir.ui.menu,name:opendons.operation_menu
#: model:ir.ui.menu,name:opendons.operation_title_menu
msgid "Opérations"
msgstr ""
msgstr "Campagnes"
#. module: opendons
#: model:ir.model.fields,field_description:opendons.field_opendons_qualifier_category__order
@ -1690,7 +1690,7 @@ msgstr ""
#: model:ir.model.fields,field_description:opendons.field_res_partner__operation_excl_ids
#: model:ir.model.fields,field_description:opendons.field_res_users__operation_excl_ids
msgid "excluded operations"
msgstr "opérations exclues"
msgstr "campagnes exclues"
#. module: opendons
#: model:ir.model.fields,field_description:opendons.field_opendons_operation__partner_excl_ids
@ -1712,7 +1712,7 @@ msgstr "Date du premier don"
#. module: opendons
#: model:ir.model.fields,field_description:opendons.field_opendons_aggregate_partner__first_donation_operation_id
msgid "first donation operation"
msgstr "Première opération"
msgstr "Première campagne"
#. module: opendons
#: model:ir.model.fields,field_description:opendons.field_opendons_aggregate_partner__first_donation_product_id
@ -1843,13 +1843,13 @@ msgstr ""
#. module: opendons
#: model_terms:ir.ui.view,arch_db:opendons.operation_form
msgid "operation_form"
msgstr "Opération"
msgstr "Campagne"
#. module: opendons
#: model:ir.model.fields,field_description:opendons.field_res_partner__operation_ids
#: model:ir.model.fields,field_description:opendons.field_res_users__operation_ids
msgid "operations"
msgstr "opérations"
msgstr "campagnes"
#. module: opendons
#: model:ir.model,name:opendons.model_opendons_operation
@ -2232,7 +2232,7 @@ msgstr "Champ interne"
#. module: opendons
#: model_terms:ir.ui.view,arch_db:opendons.view_partner_form
msgid "<span>Marketing operations</span>"
msgstr "<span>Operations marketing </span>"
msgstr "<span>Campagnes marketing </span>"
#. module: base
#: model:ir.model.fields.selection,name:base.selection__res_partner__company_type__person
@ -2259,4 +2259,14 @@ msgstr "Reçus fiscaux"
#: model:ir.actions.act_window,name:donation.partner_donation_action
#: model_terms:ir.ui.view,arch_db:donation.view_partner_form
msgid "Donations"
msgstr "Dons"
msgstr "Dons"
#. module: opendons
#: model_terms:ir.ui.view,arch_db:opendons.payment_batch_form
msgid "Donation Lines"
msgstr "Paiements"
#. module: opendons
#: model_terms:ir.ui.view,arch_db:opendons.payment_batch_form
msgid "Payments count"
msgstr "Nombre de paiements"

+ 58
- 7
models/aggregate.py View File

@ -25,22 +25,25 @@ class opendons_aggregate_partner(models.Model):
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={}
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
#first_donation_date=self._compute_first_donation_date(partner.id)
vals['first_donation_date']=self._compute_first_donation_date(partner.id)
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['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)
partner.aggregate_id=res.id
def _compute_init(self):
aggregate=self.env['opendons.aggregate.partner'].search([])
@ -82,10 +85,58 @@ class opendons_aggregate_partner(models.Model):
def _compute_max_amount_donation(self,partner_id):
donation=self.env['donation.donation'].search([('partner_id','=',int(partner_id)),('recurring_template','=',False),('state','=','done')],limit=1,order="amount_total desc")
if donation:
return donation.amount_total
else:
return False
return True
def _compute_annual_average_number_donation(self,partner_id):
annual_donation= self.env['donation.donation'].read_group([('partner_id','=',int(partner_id))], fields=['year_donation_date','partner_id:count'], groupby=['year_donation_date'],lazy=False)
if annual_donation:
i=0
total=0
for l in annual_donation:
total=total+l['partner_id']
i=i+1
return total/i
else:
return 0
return True
def _compute_average_amount_donation(self,partner_id):
return True
donation=self.env['donation.donation'].search([('partner_id','=',int(partner_id)),('recurring_template','=',False),('state','=','done')])
if donation:
i=0
amount=0
for d in donation:
amount=amount+d.amount_total
i=i+1
return amount/i
else:
return 0
def _compute_rfm_score(self,partner_id):
# Score RFM = Récence * (poids accordé à la Récence)
# + Fréquence * (poids accordé à la Fréquence)
# + Montant * (poids accordé au Montant)
# recency
#3-12 months since last donation (Rate them as 5 on your recency score)
#13-24 months since last donation (Rate them as 4 on your recency score)
#25-36 months since last donation (Rate them as 3 on your recency score)
#37-48 months since last donation (Rate them as 2 on your recency score)
#>49 and over since last donation Rate them as 1 on your recency score)
#frequency
#Donated between 21 to 25 times during the last 25 solicited (Rate them as 5 on your frequency score)
#Donated 16 to 20 times during the last 25 solicited (Rate them as 4 on your frequency score)
#Donated 11 to 15 times during the last 25 solicited (Rate them as 3 on your frequency score)
#Donated 6 to 10 times during the last 25 solicited (Rate them as 2 on your frequency score)
#Donated 1 to 5 times during the last 25 solicited (Rate them as 1 on your frequency score)
#the highest donation amount (monetary value) each donor gave each time,
#breaking them up into 5 categories in the last 5 years
return True

+ 5
- 0
models/donation.py View File

@ -85,7 +85,12 @@ class DonationDonation(models.Model):
string='Payment Batch',
ondelete='set null'
)
year_donation_date=fields.Integer('Year donation date',compute='_compute_year_donation_date',store=True)
def _compute_year_donation_date(self):
for rec in self:
rec.year_donation_date=rec.donation_date.year
def _default_payment_mode_id(self):
#raise Warning(self.recurring_template)


+ 8
- 1
models/partner.py View File

@ -146,8 +146,15 @@ class partner(models.Model):
donor_id=fields.Char('Donor id',compute="_compute_donor_id",store=True)
aggregate_id=fields.Many2one('opendons.aggregate.partner','partner_id')
first_donation_product_id=fields.Many2one(related='aggregate_id.first_donation_product_id')
first_donation_date=fields.Date(related='aggregate_id.first_donation_date')
max_amount_donation=fields.Float(related='aggregate_id.max_amount_donation')
annual_average_number_donation=fields.Float(related='aggregate_id.annual_average_number_donation')
average_amount_donation=fields.Float(related='aggregate_id.average_amount_donation')
def _compute_donor_id(self):
for rec in self:
if rec.key:


+ 1
- 0
views/aggregate.xml View File

@ -6,6 +6,7 @@
<field name="model">opendons.aggregate.partner</field>
<field name="arch" type="xml">
<tree create="0">
<field name="partner_id"/>
<field name="first_donation_product_id"/>
<field name="first_donation_operation_id"/>
<field name="first_donation_date"/>


+ 11
- 2
views/partner.xml View File

@ -60,7 +60,7 @@
<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="view_mode">tree,pivot,graph,form</field>
<field name="context">{'search_default_partner_id': active_id}</field>
</record>
@ -316,7 +316,16 @@
type="object" class="oe_edit_only btn-link"
attrs="{'invisible': ['|', '|', ('is_company','=', True), ('company_name', '=', ''), ('company_name', '=', False)]}"/>
</group>
</group>
<group>
<field name="first_donation_product_id"/>
<field name="first_donation_date"/>
<field name="max_amount_donation"/>
<field name="annual_average_number_donation"/>
<field name="average_amount_donation"/>
</group>
</group>
</xpath>
<xpath expr="/form/sheet/div/div" position="replace">


Loading…
Cancel
Save