From 70706eee7762866a5010268ccffc30115860598c Mon Sep 17 00:00:00 2001 From: root Date: Mon, 23 May 2022 12:36:04 +0000 Subject: [PATCH] indicateurs, traductions --- i18n/fr.po | 32 ++++++++++++++-------- models/aggregate.py | 65 ++++++++++++++++++++++++++++++++++++++++----- models/donation.py | 5 ++++ models/partner.py | 9 ++++++- views/aggregate.xml | 1 + views/partner.xml | 13 +++++++-- 6 files changed, 104 insertions(+), 21 deletions(-) diff --git a/i18n/fr.po b/i18n/fr.po index 9307e40..03b2f33 100644 --- a/i18n/fr.po +++ b/i18n/fr.po @@ -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 "Marketing operations" -msgstr "Operations marketing " +msgstr "Campagnes marketing " #. 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" \ No newline at end of file +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" \ No newline at end of file diff --git a/models/aggregate.py b/models/aggregate.py index a663656..04b9e66 100644 --- a/models/aggregate.py +++ b/models/aggregate.py @@ -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 \ No newline at end of file diff --git a/models/donation.py b/models/donation.py index 67083b4..b978745 100644 --- a/models/donation.py +++ b/models/donation.py @@ -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) diff --git a/models/partner.py b/models/partner.py index 5c11504..eedff62 100644 --- a/models/partner.py +++ b/models/partner.py @@ -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: diff --git a/views/aggregate.xml b/views/aggregate.xml index 66ea37d..8a802cd 100644 --- a/views/aggregate.xml +++ b/views/aggregate.xml @@ -6,6 +6,7 @@ opendons.aggregate.partner + diff --git a/views/partner.xml b/views/partner.xml index e1b6409..4968276 100644 --- a/views/partner.xml +++ b/views/partner.xml @@ -60,7 +60,7 @@ Indicators opendons.aggregate.partner - tree,form + tree,pivot,graph,form {'search_default_partner_id': active_id} @@ -316,7 +316,16 @@ type="object" class="oe_edit_only btn-link" attrs="{'invisible': ['|', '|', ('is_company','=', True), ('company_name', '=', ''), ('company_name', '=', False)]}"/> - + + + + + + + + + +