Browse Source

[REF] cpo -> pog: rename everything

pull/145/head
robin.keunen 4 years ago
parent
commit
b2155fdfcc
  1. 4
      compute_purchase_order/models/__init__.py
  2. 1
      compute_purchase_order/readme/DESCRIPTION.rst
  3. 11
      compute_purchase_order/security/ir.model.access.csv
  4. 1
      compute_purchase_order/tests/__init__.py
  5. 16
      purchase_order_generator/README.rst
  6. 0
      purchase_order_generator/__init__.py
  7. 10
      purchase_order_generator/__manifest__.py
  8. 4
      purchase_order_generator/models/__init__.py
  9. 0
      purchase_order_generator/models/product_template.py
  10. 6
      purchase_order_generator/models/purchase_order.py
  11. 32
      purchase_order_generator/models/purchase_order_generator.py
  12. 12
      purchase_order_generator/models/purchase_order_generator_line.py
  13. 0
      purchase_order_generator/readme/CONTRIBUTORS.rst
  14. 1
      purchase_order_generator/readme/DESCRIPTION.rst
  15. 0
      purchase_order_generator/readme/USAGE.rst
  16. 11
      purchase_order_generator/security/ir.model.access.csv
  17. 16
      purchase_order_generator/static/description/index.html
  18. 1
      purchase_order_generator/tests/__init__.py
  19. 42
      purchase_order_generator/tests/test_pog.py
  20. 0
      purchase_order_generator/views/product_template.xml
  21. 0
      purchase_order_generator/views/purchase_order.xml
  22. 34
      purchase_order_generator/views/purchase_order_generator.xml

4
compute_purchase_order/models/__init__.py

@ -1,4 +0,0 @@
from . import purchase_order
from . import computed_purchase_order
from . import computed_purchase_order_line
from . import product_template

1
compute_purchase_order/readme/DESCRIPTION.rst

@ -1 +0,0 @@
Compute purchase order from selected products.

11
compute_purchase_order/security/ir.model.access.csv

@ -1,11 +0,0 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_purchase_order,purchase.order,model_computed_purchase_order,purchase.group_purchase_user,1,1,1,1
access_purchase_order_manager,purchase.order,model_computed_purchase_order,purchase.group_purchase_manager,1,1,1,1
access_purchase_order_stock_worker,purchase.order,model_computed_purchase_order,stock.group_stock_user,1,0,0,0
access_purchase_order_invoicing_payments,purchase.order,model_computed_purchase_order,account.group_account_invoice,1,1,0,0
access_purchase_order_line,purchase.order.line user,model_computed_purchase_order_line,purchase.group_purchase_user,1,1,1,1
access_purchase_order_line_manager,purchase.order.line manager,model_computed_purchase_order_line,purchase.group_purchase_manager,1,1,1,1
access_purchase_order_line_stock_worker,purchase.order.line,model_computed_purchase_order_line,stock.group_stock_user,1,0,0,0
access_purchase_order_line_invoicing_payments,purchase.order.line,model_computed_purchase_order_line,account.group_account_invoice,1,1,0,0

1
compute_purchase_order/tests/__init__.py

@ -1 +0,0 @@
from . import test_cpo

16
compute_purchase_order/README.rst → purchase_order_generator/README.rst

@ -1,6 +1,6 @@
=======================
Computed Purchase Order
=======================
========================
Purchase Order Generator
========================
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
@ -14,12 +14,12 @@ Computed Purchase Order
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-beescoop%2Fobeesdoo-lightgray.png?logo=github
:target: https://github.com/beescoop/obeesdoo/tree/12.0/compute_purchase_order
:target: https://github.com/beescoop/obeesdoo/tree/12.0/purchase_order_generator
:alt: beescoop/obeesdoo
|badge1| |badge2| |badge3|
Compute purchase order from selected products.
Generate purchase order from a product selection.
**Table of contents**
@ -32,7 +32,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues <https://github.com/beescoop/obeesdoo/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/beescoop/obeesdoo/issues/new?body=module:%20compute_purchase_order%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
`feedback <https://github.com/beescoop/obeesdoo/issues/new?body=module:%20purchase_order_generator%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
@ -42,7 +42,7 @@ Credits
Authors
~~~~~~~
* Coop IT Easy
* Coop IT Easy SCRLfs
Contributors
~~~~~~~~~~~~
@ -53,6 +53,6 @@ Contributors
Maintainers
~~~~~~~~~~~
This module is part of the `beescoop/obeesdoo <https://github.com/beescoop/obeesdoo/tree/12.0/compute_purchase_order>`_ project on GitHub.
This module is part of the `beescoop/obeesdoo <https://github.com/beescoop/obeesdoo/tree/12.0/purchase_order_generator>`_ project on GitHub.
You are welcome to contribute.

0
compute_purchase_order/__init__.py → purchase_order_generator/__init__.py

10
compute_purchase_order/__manifest__.py → purchase_order_generator/__manifest__.py

@ -3,17 +3,17 @@
# Vincent Van Rossem <vincent@coopiteasy.be>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
"name": "Computed Purchase Order",
"name": "Purchase Order Generator",
"version": "12.0.1.0.0",
"category": "Purchase Order",
"summary": "Compute purchase order from selected products",
"author": "Coop IT Easy",
"website": "https://github.com/coopiteasy/procurement-addons",
"summary": "Generate purchase order from a product selection",
"author": "Coop IT Easy SCRLfs",
"website": "https://github.com/beescoop/obeesdoo/",
"license": "AGPL-3",
"depends": ["purchase", "beesdoo_stock_coverage"],
"data": [
"security/ir.model.access.csv",
"views/computed_purchase_order.xml",
"views/purchase_order_generator.xml",
"views/purchase_order.xml",
],
}

4
purchase_order_generator/models/__init__.py

@ -0,0 +1,4 @@
from . import purchase_order
from . import purchase_order_generator
from . import purchase_order_generator_line
from . import product_template

0
compute_purchase_order/models/product_template.py → purchase_order_generator/models/product_template.py

6
compute_purchase_order/models/purchase_order.py → purchase_order_generator/models/purchase_order.py

@ -9,9 +9,9 @@ class PurchaseOrder(models.Model):
_inherit = "purchase.order"
original_cpo_id = fields.Many2one(
"computed.purchase.order",
string="Original CPO",
help="CPO used to generate this Purchase Order",
"purchase.order.generator",
string="Original POG",
help="POG used to generate this Purchase Order",
)

32
compute_purchase_order/models/computed_purchase_order.py → purchase_order_generator/models/purchase_order_generator.py

@ -7,12 +7,12 @@ from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
class ComputedPurchaseOrder(models.Model):
_description = "Computed Purchase Order"
_name = "computed.purchase.order"
class PurchaseOrderGenerator(models.Model):
_description = "Purchase Order Generator"
_name = "purchase.order.generator"
_order = "id desc"
name = fields.Char(string="CPO Reference", default=_("New"))
name = fields.Char(string="POG Reference", default=_("New"))
order_date = fields.Datetime(
string="Purchase Order Date",
default=fields.Datetime.now,
@ -21,7 +21,7 @@ class ComputedPurchaseOrder(models.Model):
)
date_planned = fields.Datetime(
string="Date Planned",
default=fields.Datetime.now, # default=lambda _: fields.Datetime.now()
default=fields.Datetime.now,
)
supplier_id = fields.Many2one(
comodel_name="res.partner",
@ -29,13 +29,13 @@ class ComputedPurchaseOrder(models.Model):
readonly=True,
help="Supplier of the purchase order.",
)
cpo_line_ids = fields.One2many(
comodel_name="computed.purchase.order.line",
pog_line_ids = fields.One2many(
comodel_name="purchase.order.generator.line",
inverse_name="cpo_id",
string="Order Lines",
)
total_amount = fields.Float(
string="Total Amount (w/o VAT)", compute="_compute_cpo_total"
string="Total Amount (w/o VAT)", compute="compute_pog_total"
)
generated_purchase_order_ids = fields.One2many(
comodel_name="purchase.order",
@ -48,10 +48,10 @@ class ComputedPurchaseOrder(models.Model):
)
@api.multi
@api.depends("cpo_line_ids", "cpo_line_ids.purchase_quantity")
def _compute_cpo_total(self):
@api.depends("pog_line_ids", "pog_line_ids.purchase_quantity")
def compute_pog_total(self):
for cpo in self:
total_amount = sum(cpol.subtotal for cpol in cpo.cpo_line_ids)
total_amount = sum(cpol.subtotal for cpol in cpo.pog_line_ids)
cpo.total_amount = total_amount
@api.model
@ -71,11 +71,11 @@ class ComputedPurchaseOrder(models.Model):
@api.model
def generate_cpo(self):
order_line_obj = self.env["computed.purchase.order.line"]
order_line_obj = self.env["purchase.order.generator.line"]
product_ids = self.env.context.get("active_ids", [])
supplier = self._get_selected_supplier()
name = "CPO {} {}".format(supplier.name, fields.Date.today())
name = "POG {} {}".format(supplier.name, fields.Date.today())
cpo = self.create({"name": name, "supplier_id": supplier.id})
for product_id in product_ids:
@ -95,7 +95,7 @@ class ComputedPurchaseOrder(models.Model):
)
action = {
"type": "ir.actions.act_window",
"res_model": "computed.purchase.order",
"res_model": "purchase.order.generator",
"res_id": cpo.id,
"view_type": "form",
"view_mode": "form,tree",
@ -107,7 +107,7 @@ class ComputedPurchaseOrder(models.Model):
def create_purchase_order(self):
self.ensure_one()
if sum(self.cpo_line_ids.mapped("purchase_quantity")) == 0:
if sum(self.pog_line_ids.mapped("purchase_quantity")) == 0:
raise ValidationError(
"You need at least a product to generate " "a Purchase Order"
)
@ -120,7 +120,7 @@ class ComputedPurchaseOrder(models.Model):
}
)
for cpo_line in self.cpo_line_ids:
for cpo_line in self.pog_line_ids:
if cpo_line.purchase_quantity > 0:
pol = self.env["purchase.order.line"].create(
{

12
compute_purchase_order/models/computed_purchase_order_line.py → purchase_order_generator/models/purchase_order_generator_line.py

@ -10,14 +10,14 @@ from odoo.exceptions import ValidationError
_logger = logging.getLogger(__name__)
class ComputedPurchaseOrderLine(models.Model):
_description = "Computed Purchase Order Line"
_name = "computed.purchase.order.line"
class PurchaseOrderGeneratorLine(models.Model):
_description = "Purchase Order Generator Line"
_name = "purchase.order.generator.line"
name = fields.Char(string="Product Name", compute="_compute_name")
cpo_id = fields.Many2one(
comodel_name="computed.purchase.order",
string="Computed Purchase Order",
comodel_name="purchase.order.generator",
string="Purchase Order Generator",
)
product_template_id = fields.Many2one(
comodel_name="product.template",
@ -146,7 +146,7 @@ class ComputedPurchaseOrderLine(models.Model):
if len(si) == 0:
raise ValidationError(
_("CPO supplier does not sell product {name}").format(
_("POG supplier does not sell product {name}").format(
name=cpol.product_template_id.name
)
)

0
compute_purchase_order/readme/CONTRIBUTORS.rst → purchase_order_generator/readme/CONTRIBUTORS.rst

1
purchase_order_generator/readme/DESCRIPTION.rst

@ -0,0 +1 @@
Generate purchase order from a product selection.

0
compute_purchase_order/readme/USAGE.rst → purchase_order_generator/readme/USAGE.rst

11
purchase_order_generator/security/ir.model.access.csv

@ -0,0 +1,11 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_purchase_order,purchase.order,model_purchase_order_generator,purchase.group_purchase_user,1,1,1,1
access_purchase_order_manager,purchase.order,model_purchase_order_generator,purchase.group_purchase_manager,1,1,1,1
access_purchase_order_stock_worker,purchase.order,model_purchase_order_generator,stock.group_stock_user,1,0,0,0
access_purchase_order_invoicing_payments,purchase.order,model_purchase_order_generator,account.group_account_invoice,1,1,0,0
access_purchase_order_line,purchase.order.line user,model_purchase_order_generator_line,purchase.group_purchase_user,1,1,1,1
access_purchase_order_line_manager,purchase.order.line manager,model_purchase_order_generator_line,purchase.group_purchase_manager,1,1,1,1
access_purchase_order_line_stock_worker,purchase.order.line,model_purchase_order_generator_line,stock.group_stock_user,1,0,0,0
access_purchase_order_line_invoicing_payments,purchase.order.line,model_purchase_order_generator_line,account.group_account_invoice,1,1,0,0

16
compute_purchase_order/static/description/index.html → purchase_order_generator/static/description/index.html

@ -4,7 +4,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
<title>Computed Purchase Order</title>
<title>Purchase Order Generator</title>
<style type="text/css">
/*
@ -360,15 +360,15 @@ ul.auto-toc {
</style>
</head>
<body>
<div class="document" id="computed-purchase-order">
<h1 class="title">Computed Purchase Order</h1>
<div class="document" id="purchase-order-generator">
<h1 class="title">Purchase Order Generator</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/beescoop/obeesdoo/tree/12.0/compute_purchase_order"><img alt="beescoop/obeesdoo" src="https://img.shields.io/badge/github-beescoop%2Fobeesdoo-lightgray.png?logo=github" /></a></p>
<p>Compute purchase order from selected products.</p>
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/beescoop/obeesdoo/tree/12.0/purchase_order_generator"><img alt="beescoop/obeesdoo" src="https://img.shields.io/badge/github-beescoop%2Fobeesdoo-lightgray.png?logo=github" /></a></p>
<p>Generate purchase order from a product selection.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
@ -386,7 +386,7 @@ ul.auto-toc {
<p>Bugs are tracked on <a class="reference external" href="https://github.com/beescoop/obeesdoo/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/beescoop/obeesdoo/issues/new?body=module:%20compute_purchase_order%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<a class="reference external" href="https://github.com/beescoop/obeesdoo/issues/new?body=module:%20purchase_order_generator%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
@ -394,7 +394,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
<div class="section" id="authors">
<h2><a class="toc-backref" href="#id3">Authors</a></h2>
<ul class="simple">
<li>Coop IT Easy</li>
<li>Coop IT Easy SCRLfs</li>
</ul>
</div>
<div class="section" id="contributors">
@ -406,7 +406,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#id5">Maintainers</a></h2>
<p>This module is part of the <a class="reference external" href="https://github.com/beescoop/obeesdoo/tree/12.0/compute_purchase_order">beescoop/obeesdoo</a> project on GitHub.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/beescoop/obeesdoo/tree/12.0/purchase_order_generator">beescoop/obeesdoo</a> project on GitHub.</p>
<p>You are welcome to contribute.</p>
</div>
</div>

1
purchase_order_generator/tests/__init__.py

@ -0,0 +1 @@
from . import test_pog

42
compute_purchase_order/tests/test_cpo.py → purchase_order_generator/tests/test_pog.py

@ -30,40 +30,40 @@ class TestCPO(TransactionCase):
]
)
cpo_obj = self.env["computed.purchase.order"]
cpo_action = cpo_obj.with_context(
pog_obj = self.env["purchase.order.generator"]
pog_action = pog_obj.with_context(
active_ids=[self.ptemplate1.id]
).generate_cpo()
cpo = cpo_obj.browse(cpo_action["res_id"])
cpol = cpo.cpo_line_ids # expect one line
pog = pog_obj.browse(pog_action["res_id"])
pogl = pog.pog_line_ids # expect one line
self.assertEquals(cpo.supplier_id, self.supplier)
self.assertEquals(cpol.product_template_id, self.ptemplate1)
self.assertEquals(cpol.product_price, supplierinfo.price)
self.assertEquals(cpol.purchase_quantity, supplierinfo.min_qty)
self.assertEquals(pog.supplier_id, self.supplier)
self.assertEquals(pogl.product_template_id, self.ptemplate1)
self.assertEquals(pogl.product_price, supplierinfo.price)
self.assertEquals(pogl.purchase_quantity, supplierinfo.min_qty)
# testing triggers
expected_subtotal = supplierinfo.price * supplierinfo.min_qty
self.assertEquals(cpol.subtotal, expected_subtotal)
self.assertEquals(pogl.subtotal, expected_subtotal)
cpol.purchase_quantity = 4
pogl.purchase_quantity = 4
expected_subtotal = supplierinfo.price * 4
self.assertEquals(cpol.subtotal, expected_subtotal)
self.assertEquals(pogl.subtotal, expected_subtotal)
cpo_form = Form(cpo)
with cpo_form.cpo_line_ids.edit(index=0) as line_form:
pog_form = Form(pog)
with pog_form.pog_line_ids.edit(index=0) as line_form:
line_form.product_template_id = self.ptemplate2
self.assertEquals(line_form.product_template_id, self.ptemplate2)
cpo = cpo_form.save()
cpol = cpo.cpo_line_ids
pog = pog_form.save()
pogl = pog.pog_line_ids
expected_subtotal = supplierinfo2.price * supplierinfo2.min_qty
self.assertEquals(cpol.product_price, supplierinfo2.price)
self.assertEquals(cpol.purchase_quantity, supplierinfo2.min_qty)
self.assertEquals(cpol.subtotal, expected_subtotal)
self.assertEquals(pogl.product_price, supplierinfo2.price)
self.assertEquals(pogl.purchase_quantity, supplierinfo2.min_qty)
self.assertEquals(pogl.subtotal, expected_subtotal)
def test_generate_po(self):
cpo_obj = self.env["computed.purchase.order"]
cpo_obj = self.env["purchase.order.generator"]
cpo_action = cpo_obj.with_context(
active_ids=[self.ptemplate1.id, self.ptemplate2.id]
).generate_cpo()
@ -72,9 +72,9 @@ class TestCPO(TransactionCase):
po = self.env["purchase.order"].browse(po_action["res_id"])
self.assertEquals(cpo.supplier_id, po.partner_id)
self.assertEquals(len(cpo.cpo_line_ids), len(po.order_line))
self.assertEquals(len(cpo.pog_line_ids), len(po.order_line))
lines = zip(
cpo.cpo_line_ids.sorted(lambda l: l.product_template_id),
cpo.pog_line_ids.sorted(lambda l: l.product_template_id),
po.order_line.sorted(lambda l: l.product_id.product_tmpl_id),
)
for cpol, pol in lines:

0
compute_purchase_order/views/product_template.xml → purchase_order_generator/views/product_template.xml

0
compute_purchase_order/views/purchase_order.xml → purchase_order_generator/views/purchase_order.xml

34
compute_purchase_order/views/computed_purchase_order.xml → purchase_order_generator/views/purchase_order_generator.xml

@ -3,9 +3,9 @@
<!-- views-->
<!--tree-->
<record id="computed_purchase_order_tree" model="ir.ui.view">
<field name="name">computed.purchase.order.tree</field>
<field name="model">computed.purchase.order</field>
<record id="purchase_order_generator_tree" model="ir.ui.view">
<field name="name">purchase.order.generator.tree</field>
<field name="model">purchase.order.generator</field>
<field name="arch" type="xml">
<tree>
<field name="name"/>
@ -18,9 +18,9 @@
</record>
<!-- form -->
<record id="computed_purchase_order_form" model="ir.ui.view">
<field name="name">computed.purchase.order.form</field>
<field name="model">computed.purchase.order</field>
<record id="purchase_order_generator_form" model="ir.ui.view">
<field name="name">purchase.order.generator.form</field>
<field name="model">purchase.order.generator</field>
<field name="arch" type="xml">
<form>
<header>
@ -55,10 +55,10 @@
</group>
<field name="cpo_line_ids"> <!--context="{'cpo_seller_id': supplier_id}"> -->
<field name="pog_line_ids">
<tree name="order_lines" string="Order Lines"
editable='bottom'>
<field name="product_template_id"/> <!--domain="[('main_seller_id', '=', cpo_seller_id)]"/> -->
<field name="product_template_id"/>
<field name="qty_available" readonly='1'/>
<field name="virtual_available" readonly='1'/>
<field name="uom_id" readonly='1'/>
@ -79,8 +79,8 @@
</record>
<!-- filters-->
<record id="computed_purchase_order_filter" model="ir.ui.view">
<field name="model">computed.purchase.order</field>
<record id="purchase_order_generator_filter" model="ir.ui.view">
<field name="model">purchase.order.generator</field>
<field name="arch" type="xml">
<search>
<field name="supplier_id"/>
@ -90,20 +90,20 @@
<!-- Menu item -->
<record id="action_computed_purchase_order" model="ir.actions.act_window">
<field name="name">Computed Purchase Orders</field>
<field name="res_model">computed.purchase.order</field>
<record id="action_purchase_order_generator" model="ir.actions.act_window">
<field name="name">Purchase Order Generators</field>
<field name="res_model">purchase.order.generator</field>
</record>
<menuitem id="computed_purchase_order"
<menuitem id="purchase_order_generator"
parent="purchase.menu_procurement_management"
action="action_computed_purchase_order"/>
action="action_purchase_order_generator"/>
<!-- Actions -->
<record id="action_generate_cpo" model="ir.actions.server">
<field name="name">Compute Purchase Order</field>
<field name="model_id" ref="model_computed_purchase_order"/>
<field name="name">Generate Purchase Order</field>
<field name="model_id" ref="model_purchase_order_generator"/>
<field name="binding_model_id" ref="product.model_product_template"/>
<field name="state">code</field>
<field name="code">
Loading…
Cancel
Save