Skip to content

Commit b6ff68f

Browse files
committed
[IMP] excise_management: Replace automation logic with server action
Replaced automation-based report line generation with a compute trigger using a dedicated boolean field. Key updates: - Added computed boolean field `x_details_computation` on `x_excise_report` to trigger `ir_action_compute_excise_report_line` - Implemented server action to: • fetch relevant stock moves • group data by excise category and move type • create report lines and bind stock moves • update `x_line_ids` and mark computation status
1 parent 3eeb99b commit b6ff68f

File tree

7 files changed

+41
-100
lines changed

7 files changed

+41
-100
lines changed

beverage_distributor/data/knowledge_article.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,9 @@ Create a warehouse for each branch: Go to Inventory > Configuration > Ware
131131
<p><strong>Excise reporting</strong></p>
132132
<p>On top of the legal reporting, you need as well to know at all time the quantity of excise submitted products in your fiscal deposit warehouses.</p>
133133
<ul>
134-
<li><p>Open the <strong>Inventory app</strong> and reach the Excise Reports from the Reporting menu.</p></li>
135-
<li><p>Rows come with the same move types detailed as the Excise Reports.</p></li>
136-
<li><p>The Total row allows you to capture your currently in fiscal deposit warehouse product quantity!</p></li>
134+
<li>Open the <strong>Inventory app</strong> and reach the Excise Reports from the Reporting menu.</li>
135+
<li>Rows come with the same move types detailed as the Excise Reports.</li>
136+
<li>The Total row allows you to capture your currently in fiscal deposit warehouse product quantity!</li>
137137
</ul>
138138
<p>You now have the keys to easily report those to the relevant authorities!</p>
139139
<p><a href="https://apps.odoo.com/apps/modules/19.0/excise_management" class="btn btn-outline-primary btn-sm" target="_blank">🎓 Excise Management</a></p>

excise_management/data/base_automation.xml

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,4 @@
2727
<field name="trigger">on_create_or_write</field>
2828
<field name="trigger_field_ids" eval="[(6, 0, [ref('account.field_account_tax__tax_group_id')])]"/>
2929
</record>
30-
<record id="base_automation_create_excise_report_line" model="base.automation">
31-
<field name="model_id" ref="excise_report"/>
32-
<field name="action_server_ids" eval="[(6, 0, [ref('ir_action_create_excise_report_line')])]"/>
33-
<field name="trigger">on_create</field>
34-
<field name="name">Create Excise Report Line</field>
35-
</record>
36-
<record id="base_automation_update_excise_report_line_onupdate_stock_move" model="base.automation">
37-
<field name="model_id" ref="stock.model_stock_move"/>
38-
<field name="action_server_ids" eval="[(6, 0, [ref('ir_action_update_excise_report_line_onupdate_stock_move')])]"/>
39-
<field name="trigger">on_create_or_write</field>
40-
<field name="name">Update Excise line: when changing state and date</field>
41-
<field name="trigger_field_ids" eval="[(6, 0, [ref('stock.field_stock_move__date'), ref('stock.field_stock_move__state')])]"/>
42-
</record>
4330
</odoo>

excise_management/data/ir_actions_server.xml

Lines changed: 19 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -72,73 +72,28 @@ if from_date < datetime.date.today():
7272
action = {'view_mode': 'list', 'res_model': 'stock.move', 'type': 'ir.actions.act_window', 'domain': [('id', 'in', record.x_line_ids.mapped('x_move_ids.id'))], 'view_id': env.ref('excise_management.stock_move_view_list').id, 'name': 'Excises Analysis',}
7373
]]></field>
7474
</record>
75-
<record id="ir_action_create_excise_report_line" model="ir.actions.server">
76-
<field name="code"><![CDATA[
77-
all_moves_ids = env['stock.move'].search([
78-
('date', '>=', min(records.mapped('x_from_date'), default=datetime.datetime.today())),
79-
('date', '<', max(records.mapped('x_to_date'), default=datetime.datetime.today())),
80-
('x_excise_category', '!=', False),
81-
('x_fiscal_deposit_move', 'not in', ['none', False]),
82-
('state', '=', 'done'),
83-
])
84-
for record in records:
85-
grouped_data = {}
86-
for move in all_moves_ids:
87-
if move.date.date() < record.x_from_date or move.date.date() >= record.x_to_date: continue
88-
key = (move.x_excise_category.id, move.x_fiscal_deposit_move)
89-
if key not in grouped_data: grouped_data[key] = {'qty': 0.0, 'amount': 0.0, 'line_move_ids': []}
90-
grouped_data[key]['qty'] += move.x_excise_quantity
91-
grouped_data[key]['amount'] += move.x_excise_amount
92-
grouped_data[key]['line_move_ids'].append(move.id)
93-
lines = env['x_excise_report_line'].create([{
94-
'x_excise_category_id': key[0],
95-
'x_excise_move_type': key[1],
96-
'x_excise_quantity': values['qty'],
97-
'x_excise_amount': values['amount'],
98-
'x_excise_report_id': record.id,
99-
'x_move_ids': [(6, 0, values['line_move_ids'])]
100-
} for key, values in grouped_data.items()])
101-
record['x_line_ids'] = [(6, 0, lines.ids)] if bool(lines) else [(5, 0, 0)]
102-
]]></field>
75+
<record id="ir_action_compute_excise_report_line" model="ir.actions.server">
10376
<field name="model_id" ref="excise_report"/>
77+
<field name="name">Compute excise report line</field>
10478
<field name="state">code</field>
105-
<field name="name">Action to Create Excise Report Line</field>
106-
<field name="usage">base_automation</field>
107-
</record>
108-
<record id="ir_action_update_excise_report_line_onupdate_stock_move" model="ir.actions.server">
10979
<field name="code"><![CDATA[
110-
if record['state'] == 'done' and record['x_excise_category'] and record['x_fiscal_deposit_move'] and record['x_fiscal_deposit_move'] != 'none':
111-
all_report_ids = env['x_excise_report'].search([])
112-
old_report_ids = all_report_ids.filtered(lambda report: report.x_from_date > record['date'].date() or report.x_to_date <= record['date'].date())
113-
for report_id in old_report_ids:
114-
line_ids = report_id.x_line_ids.filtered(lambda l: l.x_excise_category_id == record['x_excise_category'] and l.x_excise_move_type == record['x_fiscal_deposit_move'] and record.id in l.x_move_ids.ids)
115-
for line_id in line_ids:
116-
line_id['x_excise_quantity'] -= record['x_excise_quantity'] or 0.0
117-
line_id['x_excise_amount'] -= record['x_excise_amount'] or 0.0
118-
line_id['x_move_ids'] = [(3, record.id)]
119-
if not line_id['x_move_ids']:
120-
line_id.unlink()
121-
new_report_ids = all_report_ids - old_report_ids
122-
for report_id in new_report_ids:
123-
line_ids = report_id.x_line_ids.filtered(lambda l: l.x_excise_category_id == record['x_excise_category'] and l.x_excise_move_type == record['x_fiscal_deposit_move'])
124-
for line_id in line_ids:
125-
if record.id not in line_id.x_move_ids.ids:
126-
line_id['x_excise_quantity'] += record['x_excise_quantity'] or 0.0
127-
line_id['x_excise_amount'] += record['x_excise_amount'] or 0.0
128-
line_id['x_move_ids'] = [(4, record.id)]
129-
if not line_ids:
130-
env['x_excise_report_line'].create([{
131-
'x_excise_category_id': record['x_excise_category'].id,
132-
'x_excise_move_type': record['x_fiscal_deposit_move'],
133-
'x_excise_quantity': record['x_excise_quantity'],
134-
'x_excise_amount': record['x_excise_amount'],
135-
'x_excise_report_id': report_id.id,
136-
'x_move_ids': [(6, 0, [record.id])]
137-
}])
80+
for record in records:
81+
if record.x_state != "done" and record.x_from_date and record.x_to_date:
82+
all_moves_ids = env['stock.move']._read_group([
83+
('date', '>=', record.x_from_date),
84+
('date', '<', record.x_to_date),
85+
('x_excise_category', '!=', False), ('x_fiscal_deposit_move', 'not in', ['none', False]), ('state', '=', 'done'),
86+
],
87+
groupby=['x_excise_category', 'x_fiscal_deposit_move'],
88+
aggregates=['x_excise_quantity:sum', 'x_excise_amount:sum', 'id:recordset']
89+
)
90+
lines = [env['x_excise_report_line'].create({
91+
'x_excise_category_id': move[0].id, 'x_excise_move_type': move[1], 'x_excise_quantity': move[2],
92+
'x_excise_amount': move[3], 'x_excise_report_id': record.id, 'x_move_ids': [(6, 0, move[4].ids)],}).id
93+
for move in all_moves_ids
94+
]
95+
record.write({'x_line_ids': [(6, 0, lines)], 'x_details_computation': True})
96+
else: record['x_details_computation'] = False
13897
]]></field>
139-
<field name="model_id" ref="stock.model_stock_move"/>
140-
<field name="state">code</field>
141-
<field name="name">Action to Update Excise line</field>
142-
<field name="usage">base_automation</field>
14398
</record>
14499
</odoo>

excise_management/data/ir_model_fields.xml

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,18 @@ for record in self:
479479
<field name="model_id" ref="excise_report"/>
480480
<field name="name">x_document</field>
481481
</record>
482+
<record id="details_computation_excise_report" model="ir.model.fields">
483+
<field name="ttype">boolean</field>
484+
<field name="field_description">Line Computation</field>
485+
<field name="model_id" ref="excise_report"/>
486+
<field name="name">x_details_computation</field>
487+
<field name="store" eval="False"/>
488+
<field name="compute"><![CDATA[
489+
for record in self:
490+
server_action = self.env['ir.actions.server'].browse(self.env.ref('excise_management.ir_action_compute_excise_report_line')).id
491+
server_action.with_context(active_ids=[record.id], active_model="x_excise_report").sudo().run()
492+
]]></field>
493+
</record>
482494
<record id="state_excise_report" model="ir.model.fields">
483495
<field name="name">x_state</field>
484496
<field name="copied" eval="False"/>
@@ -600,18 +612,6 @@ for rec in self: rec['x_currency_id'] = self.env.company.currency_id.id
600612
<field name="store" eval="True"/>
601613
<field name="copied" eval="False"/>
602614
</record>
603-
<record id="excise_report_stock_moves_count" model="ir.model.fields">
604-
<field name="compute"><![CDATA[
605-
for record in self: record['x_move_id_count'] = len(record.x_line_ids.mapped('x_move_ids'))
606-
]]></field>
607-
<field name="ttype">integer</field>
608-
<field name="field_description">Stock move ID count</field>
609-
<field name="model_id" ref="excise_report"/>
610-
<field name="name">x_move_id_count</field>
611-
<field name="depends">x_line_ids, x_line_ids.x_move_ids</field>
612-
<field name="store" eval="False"/>
613-
<field name="readonly" eval="True"/>
614-
</record>
615615
<record id="res_company_reporter" model="ir.model.fields">
616616
<field name="name">x_reporter_id</field>
617617
<field name="ttype">many2one</field>

excise_management/data/ir_ui_view.xml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,7 @@
223223
</header>
224224
<sheet>
225225
<div name="button_box" class="oe_button_box">
226-
<button class="oe_stat_button" icon="fa-truck" type="action" name="%(action_excise_report_stock_moves)d">
227-
<field widget="statinfo" name="x_move_id_count" string="Moves"/>
228-
</button>
226+
<button class="oe_stat_button" icon="fa-truck" type="action" name="%(action_excise_report_stock_moves)d" string="Moves" />
229227
</div>
230228
<div class="oe_title">
231229
<h1>
@@ -239,6 +237,7 @@
239237
<group>
240238
<field name="x_external_id"/>
241239
<field name="x_document"/>
240+
<field name="x_details_computation" invisible="1"/>
242241
</group>
243242
</group>
244243
<notebook>

micro_brewery/data/knowledge_article.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -310,9 +310,9 @@
310310
<h3>Excise reporting</h3>
311311
<p>On top of the legal reporting, you need as well to know at all time the quantity of excise submitted products in your fiscal deposit warehouses.</p>
312312
<ul>
313-
<li><p>Open the <strong>Inventory app</strong> and reach the Excise Reports from the Reporting menu.</p></li>
314-
<li><p>Rows come with the same move types detailed as the Excise Reports.</p></li>
315-
<li><p>The Total row allows you to capture your currently in fiscal deposit warehouse product quantity!</p></li>
313+
<li>Open the <strong>Inventory app</strong> and reach the Excise Reports from the Reporting menu.</li>
314+
<li>Rows come with the same move types detailed as the Excise Reports.</li>
315+
<li>The Total row allows you to capture your currently in fiscal deposit warehouse product quantity!</li>
316316
</ul>
317317
<p>You now have the keys to easily report those to the relevant authorities!</p>
318318
<p><a href="https://apps.odoo.com/apps/modules/19.0/excise_management" class="btn btn-outline-primary btn-sm" target="_blank">🎓 Excise Management</a></p>

run_industry.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ echo "Debug: $DEBUG"
5151

5252
INDUSTRY_PATH="industry/"
5353
PYTHON_BIN="python3"
54-
ODOO_BIN="odoo/odoo-bin"
55-
ADDONS_PATH="$INDUSTRY_PATH/tests,enterprise,odoo/addons,odoo/odoo/addons,design-themes"
54+
ODOO_BIN="community/odoo-bin"
55+
ADDONS_PATH="$INDUSTRY_PATH/tests,enterprise,community/addons,community/odoo/addons,design-themes"
5656
TEST_TAGS="/test_generic,/test_$INDUSTRY_NAME"
5757
DEP_DB="dep-$INDUSTRY_NAME"
5858

0 commit comments

Comments
 (0)