Skip to content

Commit 40ebfff

Browse files
committed
[IMP] Construction: Adding a cost automation
- Added "Automate Cost Update" checkbox in the "Vendor Bills" section of the "Purchase" tab in the product template view. - Implemented automation rule to update supplier info when a PO or Bill is saved with a different price for the same product, based on the checkbox being checked. task-4138749
1 parent eba84d6 commit 40ebfff

File tree

5 files changed

+99
-0
lines changed

5 files changed

+99
-0
lines changed

construction/__manifest__.py

+6
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
focusing on accurate quoting, efficient planning, seamless execution, and excellent customer service, ...
88
""",
99
'depends': [
10+
'base_automation',
1011
'crm_enterprise',
1112
'documents',
1213
'helpdesk',
@@ -20,8 +21,13 @@
2021
'sale_margin',
2122
'sale_project_forecast',
2223
'sign',
24+
'web_studio',
2325
],
2426
'data': [
27+
'data/base_automation.xml',
28+
'data/ir_action_server.xml',
29+
'data/ir_model_fields.xml',
30+
'data/ir_ui_view.xml',
2531
'data/account_analytic_account.xml',
2632
'data/documents_folder.xml',
2733
'data/res_config_settings.xml',

construction/data/base_automation.xml

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<odoo>
3+
<record id="base_automation_1" model="base.automation">
4+
<field name="name">Automate Supplier Info</field>
5+
<field name="model_id" ref="purchase.model_purchase_order"/>
6+
<field name="trigger_field_ids" eval="[(6, 0, [ref('purchase.field_purchase_order__state')])]"/>
7+
<field name="trigger">on_state_set</field>
8+
<field name="trg_selection_field_id" ref="purchase.selection__purchase_order__state__purchase"/>
9+
<field name="filter_domain">[('state', '=', 'purchase')]</field>
10+
</record>
11+
<record id="base_automation_2" model="base.automation" context="{'studio': True}">
12+
<field name="model_id" ref="account.model_account_move"/>
13+
<field name="trigger_field_ids" eval="[(6, 0, [ref('account.field_account_move__state')])]"/>
14+
<field name="trigger">on_state_set</field>
15+
<field name="trg_selection_field_id" ref="account.selection__account_move__state__posted"/>
16+
<field name="filter_domain">[('state', '=', 'posted')]</field>
17+
<field name="name">Automate Supplier Info</field>
18+
</record>
19+
</odoo>
+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<odoo>
3+
<record id="automate_sipplier_info" model="ir.actions.server">
4+
<field name="name">Automate the supplier info cost</field>
5+
<field name="model_id" ref="purchase.model_purchase_order"/>
6+
<field name="base_automation_id" ref="base_automation_1"/>
7+
<field name="state">code</field>
8+
<field name="code"><![CDATA[
9+
for line in record.order_line:
10+
product = line.product_id
11+
if product.categ_id.x_automate_cost_update:
12+
supplier_info = env['product.supplierinfo'].search([
13+
('product_tmpl_id', '=', product.product_tmpl_id.id),
14+
('partner_id', '=', record.partner_id.id)
15+
], limit=1)
16+
17+
if supplier_info and float_compare(supplier_info.price, line.price_unit, precision_digits=2) != 0:
18+
supplier_info.write({
19+
'min_qty': line.product_qty,
20+
'price': line.price_unit,
21+
})
22+
product.write({'standard_price': line.price_unit})
23+
]]></field>
24+
</record>
25+
26+
<record id="automate_sipplier_info_invoices" model="ir.actions.server">
27+
<field name="name">Automate the supplier info cost Invoices</field>
28+
<field name="model_id" ref="account.model_account_move"/>
29+
<field name="base_automation_id" ref="base_automation_2"/>
30+
<field name="state">code</field>
31+
<field name="code"><![CDATA[
32+
for line in record.invoice_line_ids:
33+
product = line.product_id
34+
if product.categ_id.x_automate_cost_update:
35+
supplier_info = env['product.supplierinfo'].search([
36+
('product_tmpl_id', '=', product.product_tmpl_id.id),
37+
('partner_id', '=', record.partner_id.id)
38+
], limit=1)
39+
40+
if supplier_info and float_compare(supplier_info.price, line.price_unit, precision_digits=2) != 0:
41+
supplier_info.write({
42+
'min_qty': line.quantity,
43+
'price': line.price_unit,
44+
})
45+
product.write({'standard_price': line.price_unit})
46+
]]></field>
47+
</record>
48+
</odoo>

construction/data/ir_model_fields.xml

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<odoo>
3+
<record id="x_automate_cost_update" model="ir.model.fields">
4+
<field name="name">x_automate_cost_update</field>
5+
<field name="ttype">boolean</field>
6+
<field name="model_id" ref="product.model_product_category"/>
7+
<field name="field_description">Automate Cost Update</field>
8+
</record>
9+
</odoo>

construction/data/ir_ui_view.xml

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version='1.0' encoding='UTF-8'?>
2+
<odoo>
3+
<record id="product_category_form_view" model="ir.ui.view">
4+
<field name="name">product.category.form customization</field>
5+
<field name="inherit_id" ref="product.product_category_form_view"/>
6+
<field name="mode">extension</field>
7+
<field name="model">product.category</field>
8+
<field name="active" eval="True"/>
9+
<field name="priority">160</field>
10+
<field name="type">form</field>
11+
<field name="arch" type="xml">
12+
<xpath expr="//field[@name='property_cost_method']" position="after">
13+
<field name="x_automate_cost_update"/>
14+
</xpath>
15+
</field>
16+
</record>
17+
</odoo>

0 commit comments

Comments
 (0)