Display block rate instead of absolute value
The rate provides a better picture of the unsubscription of the marketing scenario.
This commit is contained in:
1 parent
42b5ba1377
commit
f671cb8532
5 files changed
+34
-2
No files matched your search
@@ -1,3 +1,4 @@
|
||||
* Display block rate instead of absolute value
|
||||
* Display email rates instead of absolute value
|
||||
|
||||
Version 7.0.0 - 2023-10-30
|
||||
|
||||
@@ -74,6 +74,9 @@ class Scenario(Workflow, ModelSQL, ModelView):
|
||||
fields.Integer("Records"), 'get_record_count')
|
||||
record_count_blocked = fields.Function(
|
||||
fields.Integer("Records Blocked"), 'get_record_count')
|
||||
block_rate = fields.Function(
|
||||
fields.Float("Block Rate"),
|
||||
'get_rate')
|
||||
unsubscribable = fields.Boolean(
|
||||
"Unsubscribable",
|
||||
help="If checked parties are also unsubscribed from the scenario.")
|
||||
@@ -169,6 +172,15 @@ class Scenario(Workflow, ModelSQL, ModelView):
|
||||
pass
|
||||
return count
|
||||
|
||||
@classmethod
|
||||
def get_rate(cls, scenarios, names):
|
||||
rates = {name: defaultdict(float) for name in names}
|
||||
for scenario in scenarios:
|
||||
if 'block_rate' in names and scenario.record_count:
|
||||
rates['block_rate'][scenario.id] = round(
|
||||
scenario.record_count_blocked / scenario.record_count, 2)
|
||||
return rates
|
||||
|
||||
@classmethod
|
||||
def validate_fields(cls, scenarios, field_names):
|
||||
super().validate_fields(scenarios, field_names)
|
||||
|
||||
@@ -111,6 +111,8 @@ Trigger scenario::
|
||||
1
|
||||
>>> scenario.record_count_blocked
|
||||
0
|
||||
>>> scenario.block_rate
|
||||
0.0
|
||||
|
||||
Check email sent::
|
||||
|
||||
|
||||
@@ -83,6 +83,14 @@ Trigger scenario::
|
||||
>>> record, = Record.find([])
|
||||
>>> assertEqual(record.record, sale)
|
||||
|
||||
>>> scenario.reload()
|
||||
>>> scenario.record_count
|
||||
1
|
||||
>>> scenario.record_count_blocked
|
||||
0
|
||||
>>> scenario.block_rate
|
||||
0.0
|
||||
|
||||
Block and unsubscribe::
|
||||
|
||||
>>> record.click('block')
|
||||
@@ -91,6 +99,14 @@ Block and unsubscribe::
|
||||
>>> party.reload()
|
||||
>>> assertEqual(party.marketing_scenario_unsubscribed, [scenario])
|
||||
|
||||
>>> scenario.reload()
|
||||
>>> scenario.record_count
|
||||
1
|
||||
>>> scenario.record_count_blocked
|
||||
1
|
||||
>>> scenario.block_rate
|
||||
1.0
|
||||
|
||||
Create a new sale::
|
||||
|
||||
>>> sale = Sale(party=party)
|
||||
|
||||
@@ -5,7 +5,8 @@ this repository contains the full copyright notices and license terms. -->
|
||||
<field name="name" expand="2"/>
|
||||
<field name="model" expand="1"/>
|
||||
<field name="unsubscribable" optional="0"/>
|
||||
<field name="record_count"/>
|
||||
<field name="record_count_blocked"/>
|
||||
<field name="block_rate" factor="100">
|
||||
<suffix string="%" name="block_rate"/>
|
||||
</field>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
Reference in new issue
Block a user