From 10fe74f125615bc710bd591ab051d7d4a916c2f4 Mon Sep 17 00:00:00 2001
From: kongrattapong
Date: Tue, 28 Jan 2020 16:02:31 +0700
Subject: [PATCH 01/25] [13.0][ADD] purchase_isolated_rfq
---
purchase_isolated_rfq/README.rst | 90 ++++
purchase_isolated_rfq/__init__.py | 2 +
purchase_isolated_rfq/__manifest__.py | 14 +
.../data/ir_sequence_data.xml | 12 +
purchase_isolated_rfq/hooks.py | 13 +
purchase_isolated_rfq/models/__init__.py | 1 +
.../models/purchase_order.py | 82 ++++
purchase_isolated_rfq/readme/CONTRIBUTORS.rst | 1 +
purchase_isolated_rfq/readme/DESCRIPTION.rst | 12 +
purchase_isolated_rfq/readme/USAGE.rst | 2 +
.../static/description/index.html | 435 ++++++++++++++++++
purchase_isolated_rfq/tests/__init__.py | 1 +
.../tests/test_purchase_isolated_rfq.py | 33 ++
.../views/purchase_views.xml | 53 +++
14 files changed, 751 insertions(+)
create mode 100644 purchase_isolated_rfq/README.rst
create mode 100644 purchase_isolated_rfq/__init__.py
create mode 100644 purchase_isolated_rfq/__manifest__.py
create mode 100644 purchase_isolated_rfq/data/ir_sequence_data.xml
create mode 100644 purchase_isolated_rfq/hooks.py
create mode 100644 purchase_isolated_rfq/models/__init__.py
create mode 100644 purchase_isolated_rfq/models/purchase_order.py
create mode 100644 purchase_isolated_rfq/readme/CONTRIBUTORS.rst
create mode 100644 purchase_isolated_rfq/readme/DESCRIPTION.rst
create mode 100644 purchase_isolated_rfq/readme/USAGE.rst
create mode 100644 purchase_isolated_rfq/static/description/index.html
create mode 100644 purchase_isolated_rfq/tests/__init__.py
create mode 100644 purchase_isolated_rfq/tests/test_purchase_isolated_rfq.py
create mode 100644 purchase_isolated_rfq/views/purchase_views.xml
diff --git a/purchase_isolated_rfq/README.rst b/purchase_isolated_rfq/README.rst
new file mode 100644
index 00000000000..8078b09a083
--- /dev/null
+++ b/purchase_isolated_rfq/README.rst
@@ -0,0 +1,90 @@
+=====================
+Purchase Isolated RFQ
+=====================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpurchase--workflow-lightgray.png?logo=github
+ :target: https://github.com/OCA/purchase-workflow/tree/13.0-add-purchase_isolated_quotation/purchase_isolated_rfq
+ :alt: OCA/purchase-workflow
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/purchase-workflow-13-0-add-purchase_isolated_quotation/purchase-workflow-13-0-add-purchase_isolated_quotation-purchase_isolated_rfq
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+ :target: https://runbot.odoo-community.org/runbot/142/13.0-add-purchase_isolated_quotation
+ :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+Note: This module is similar to sale_isolated_quotation, but for purchase/rfq
+
+In some countries/companies, It's already common to separate these two documents.
+For filing purposes, the document sequence of Requests For Quotation (RFQ) and Purchases order
+has to be separated. In practice, there could be multiple RFQ open
+to a vendor, yet only one RFQ get converted to the Purchases order.
+
+This module separate RFQ and Purchases order by adding order_sequence flag in
+purchase.order model.
+
+Each type of document will have separated sequence numbering.
+RFQ will have only 2 state, Draft and Done. Purchases Order work as normal.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Usage
+=====
+
+* Create RFQ as normal
+* As user click "Convert to Order", the isolated purchases order will be created
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub 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 `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* Ecosoft
+
+Contributors
+~~~~~~~~~~~~
+
+* Rattapong Chokmasermkul
+
+Maintainers
+~~~~~~~~~~~
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+This module is part of the `OCA/purchase-workflow `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/purchase_isolated_rfq/__init__.py b/purchase_isolated_rfq/__init__.py
new file mode 100644
index 00000000000..1d353d71e70
--- /dev/null
+++ b/purchase_isolated_rfq/__init__.py
@@ -0,0 +1,2 @@
+from .hooks import post_init_hook
+from . import models
diff --git a/purchase_isolated_rfq/__manifest__.py b/purchase_isolated_rfq/__manifest__.py
new file mode 100644
index 00000000000..52280c7e37d
--- /dev/null
+++ b/purchase_isolated_rfq/__manifest__.py
@@ -0,0 +1,14 @@
+# Copyright 2020 Ecosoft Co., Ltd (https://ecosoft.co.th)
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)
+{
+ "name": "Purchase Isolated RFQ",
+ "version": "13.0.1.0.0",
+ "author": "Ecosoft, Odoo Community Association (OCA)",
+ "category": "Purchases",
+ "website": "https://github.com/OCA/purchase-workflow",
+ "depends": ["purchase"],
+ "license": "AGPL-3",
+ "data": ["data/ir_sequence_data.xml", "views/purchase_views.xml"],
+ "installable": True,
+ "post_init_hook": "post_init_hook",
+}
diff --git a/purchase_isolated_rfq/data/ir_sequence_data.xml b/purchase_isolated_rfq/data/ir_sequence_data.xml
new file mode 100644
index 00000000000..567a14b349a
--- /dev/null
+++ b/purchase_isolated_rfq/data/ir_sequence_data.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ Requests for Quotation
+ purchase.rfq
+ RFQ
+ 3
+
+
+
+
diff --git a/purchase_isolated_rfq/hooks.py b/purchase_isolated_rfq/hooks.py
new file mode 100644
index 00000000000..aa36f8bc358
--- /dev/null
+++ b/purchase_isolated_rfq/hooks.py
@@ -0,0 +1,13 @@
+# Copyright 2020 Ecosoft Co., Ltd (https://ecosoft.co.th)
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)
+
+
+def post_init_hook(cr, registry):
+ """ Set value for order_sequence on old records """
+ cr.execute(
+ """
+ update purchase_order
+ set order_sequence = true
+ where state not in ('draft', 'cancel')
+ """
+ )
diff --git a/purchase_isolated_rfq/models/__init__.py b/purchase_isolated_rfq/models/__init__.py
new file mode 100644
index 00000000000..9f03530643d
--- /dev/null
+++ b/purchase_isolated_rfq/models/__init__.py
@@ -0,0 +1 @@
+from . import purchase_order
diff --git a/purchase_isolated_rfq/models/purchase_order.py b/purchase_isolated_rfq/models/purchase_order.py
new file mode 100644
index 00000000000..385446fe573
--- /dev/null
+++ b/purchase_isolated_rfq/models/purchase_order.py
@@ -0,0 +1,82 @@
+# Copyright 2020 Ecosoft Co., Ltd (https://ecosoft.co.th)
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)
+from odoo import _, api, fields, models
+from odoo.exceptions import UserError
+
+
+class PurchaseOrder(models.Model):
+ _inherit = "purchase.order"
+
+ order_sequence = fields.Boolean(string="Order Sequence", readonly=True, index=True)
+ quote_id = fields.Many2one(
+ comodel_name="purchase.order",
+ string="Quotation",
+ readonly=True,
+ ondelete="restrict",
+ copy=False,
+ help="For Purchases Order, this field references to its RFQ",
+ )
+ purchase_order_id = fields.Many2one(
+ comodel_name="purchase.order",
+ string="Order",
+ readonly=True,
+ ondelete="restrict",
+ copy=False,
+ help="For RFQ, this field references to its Purchases Order",
+ )
+ rfq_state = fields.Selection(
+ selection=[
+ ("draft", "Draft"),
+ ("sent", "Mail Sent"),
+ ("cancel", "Cancelled"),
+ ("done", "Done"),
+ ],
+ string="RFQ Status",
+ readonly=True,
+ related="state",
+ help="Only relative RFQ states",
+ )
+
+ @api.model
+ def create(self, vals):
+ order_sequence = vals.get("order_sequence") or self.env.context.get(
+ "order_sequence"
+ )
+ if not order_sequence and vals.get("name", "/") == "/":
+ vals["name"] = self.env["ir.sequence"].next_by_code("purchase.rfq") or "/"
+ return super().create(vals)
+
+ def _prepare_order_from_rfq(self):
+ return {
+ "name": self.env["ir.sequence"].next_by_code("purchase.order") or "/",
+ "order_sequence": True,
+ "quote_id": self.id,
+ "partner_ref": self.partner_ref,
+ }
+
+ def action_convert_to_order(self):
+ self.ensure_one()
+ if self.order_sequence:
+ raise UserError(_("Only quotation can convert to order"))
+ purchase_order = self.copy(self._prepare_order_from_rfq())
+ purchase_order.button_confirm()
+ # Reference from this RFQ to Purchase Order
+ self.purchase_order_id = purchase_order.id
+ if self.state == "draft":
+ self.button_done()
+ return self.open_duplicated_purchase_order()
+
+ @api.model
+ def open_duplicated_purchase_order(self):
+ return {
+ "name": _("Purchases Order"),
+ "view_mode": "form",
+ "view_id": False,
+ "res_model": "purchase.order",
+ "context": {"default_order_sequence": True, "order_sequence": True},
+ "type": "ir.actions.act_window",
+ "nodestroy": True,
+ "target": "current",
+ "domain": "[('order_sequence', '=', True)]",
+ "res_id": self.purchase_order_id and self.purchase_order_id.id or False,
+ }
diff --git a/purchase_isolated_rfq/readme/CONTRIBUTORS.rst b/purchase_isolated_rfq/readme/CONTRIBUTORS.rst
new file mode 100644
index 00000000000..79207589486
--- /dev/null
+++ b/purchase_isolated_rfq/readme/CONTRIBUTORS.rst
@@ -0,0 +1 @@
+* Rattapong Chokmasermkul
diff --git a/purchase_isolated_rfq/readme/DESCRIPTION.rst b/purchase_isolated_rfq/readme/DESCRIPTION.rst
new file mode 100644
index 00000000000..7cd8fde472f
--- /dev/null
+++ b/purchase_isolated_rfq/readme/DESCRIPTION.rst
@@ -0,0 +1,12 @@
+Note: This module is similar to sale_isolated_quotation, but for purchase/rfq
+
+In some countries/companies, It's already common to separate these two documents.
+For filing purposes, the document sequence of Requests For Quotation (RFQ) and Purchases order
+has to be separated. In practice, there could be multiple RFQ open
+to a vendor, yet only one RFQ get converted to the Purchases order.
+
+This module separate RFQ and Purchases order by adding order_sequence flag in
+purchase.order model.
+
+Each type of document will have separated sequence numbering.
+RFQ will have only 2 state, Draft and Done. Purchases Order work as normal.
diff --git a/purchase_isolated_rfq/readme/USAGE.rst b/purchase_isolated_rfq/readme/USAGE.rst
new file mode 100644
index 00000000000..f703e3ad408
--- /dev/null
+++ b/purchase_isolated_rfq/readme/USAGE.rst
@@ -0,0 +1,2 @@
+* Create RFQ as normal
+* As user click "Convert to Order", the isolated purchases order will be created
diff --git a/purchase_isolated_rfq/static/description/index.html b/purchase_isolated_rfq/static/description/index.html
new file mode 100644
index 00000000000..a34e96648e6
--- /dev/null
+++ b/purchase_isolated_rfq/static/description/index.html
@@ -0,0 +1,435 @@
+
+
+
+
+
+
+Purchase Isolated RFQ
+
+
+
+
+
Purchase Isolated RFQ
+
+
+
+
Note: This module is similar to sale_isolated_quotation, but for purchase/rfq
+
In some countries/companies, It’s already common to separate these two documents.
+For filing purposes, the document sequence of Requests For Quotation (RFQ) and Purchases order
+has to be separated. In practice, there could be multiple RFQ open
+to a vendor, yet only one RFQ get converted to the Purchases order.
+
This module separate RFQ and Purchases order by adding order_sequence flag in
+purchase.order model.
+
Each type of document will have separated sequence numbering.
+RFQ will have only 2 state, Draft and Done. Purchases Order work as normal.
Bugs are tracked on GitHub 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.
+
Do not contact contributors directly about support or help with technical issues.
OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+
diff --git a/purchase_isolated_rfq/tests/__init__.py b/purchase_isolated_rfq/tests/__init__.py
new file mode 100644
index 00000000000..1e240f8aa90
--- /dev/null
+++ b/purchase_isolated_rfq/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_purchase_isolated_rfq
diff --git a/purchase_isolated_rfq/tests/test_purchase_isolated_rfq.py b/purchase_isolated_rfq/tests/test_purchase_isolated_rfq.py
new file mode 100644
index 00000000000..3be46cf0d2f
--- /dev/null
+++ b/purchase_isolated_rfq/tests/test_purchase_isolated_rfq.py
@@ -0,0 +1,33 @@
+# Copyright 2020 Ecosoft Co., Ltd (https://ecosoft.co.th)
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html)
+from odoo.exceptions import UserError
+from odoo.tests.common import TransactionCase
+
+
+class TestPurchaseIsolatedRFQ(TransactionCase):
+ def setUp(self):
+ super().setUp()
+ self.partner = self.env.ref("base.res_partner_2")
+ vals = {"partner_id": self.partner.id, "order_sequence": False}
+ self.rfq = self.env["purchase.order"].create(vals)
+
+ def test_quotation_convert_to_order(self):
+ """ Expect.
+ - When quotation is converted to order
+ - Status chagned to 'done'
+ - New purchase.order of order_sequence = True created
+ - RFQ can reference to Order and Order can reference to RFQ too
+ """
+ self.rfq.action_convert_to_order()
+ po = self.rfq.purchase_order_id
+ self.assertEqual(self.rfq.state, "done")
+ self.assertFalse(self.rfq.order_sequence)
+ self.assertTrue(po.order_sequence)
+ self.assertEqual(po.state, "purchase")
+ self.assertEqual(po.partner_id, self.partner)
+ self.assertEqual(po.quote_id, self.rfq)
+ # Exceptions Case
+ with self.assertRaises(UserError) as e:
+ po.action_convert_to_order()
+ error_message = "Only quotation can convert to order"
+ self.assertEqual(e.exception.name, error_message)
diff --git a/purchase_isolated_rfq/views/purchase_views.xml b/purchase_isolated_rfq/views/purchase_views.xml
new file mode 100644
index 00000000000..c0e6792ff20
--- /dev/null
+++ b/purchase_isolated_rfq/views/purchase_views.xml
@@ -0,0 +1,53 @@
+
+
+
+ purchase.order.form
+ purchase.order
+
+
+
+ not context.get('order_sequence', False)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {'order_sequence': order_sequence}
+
+
+
+
+
+
+ {'default_order_sequence': False, 'order_sequence': False}
+ [('order_sequence', '=', False)]
+
+
+ {'default_order_sequence': True, 'order_sequence': True}
+ [('order_sequence', '=', True)]
+
+
+
From 3fb2ea1547bf81a044ae5db4242fc536cfc36e0b Mon Sep 17 00:00:00 2001
From: oca-travis
Date: Fri, 21 Feb 2020 14:17:36 +0000
Subject: [PATCH 02/25] [UPD] Update purchase_isolated_rfq.pot
---
.../i18n/purchase_isolated_rfq.pot | 76 +++++++++++++++++++
1 file changed, 76 insertions(+)
create mode 100644 purchase_isolated_rfq/i18n/purchase_isolated_rfq.pot
diff --git a/purchase_isolated_rfq/i18n/purchase_isolated_rfq.pot b/purchase_isolated_rfq/i18n/purchase_isolated_rfq.pot
new file mode 100644
index 00000000000..f554ed3c9ca
--- /dev/null
+++ b/purchase_isolated_rfq/i18n/purchase_isolated_rfq.pot
@@ -0,0 +1,76 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * purchase_isolated_rfq
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: purchase_isolated_rfq
+#: model_terms:ir.ui.view,arch_db:purchase_isolated_rfq.purchase_order_form
+msgid "Cancel"
+msgstr ""
+
+#. module: purchase_isolated_rfq
+#: model_terms:ir.ui.view,arch_db:purchase_isolated_rfq.purchase_order_form
+msgid "Convert to Order"
+msgstr ""
+
+#. module: purchase_isolated_rfq
+#: model:ir.model.fields,help:purchase_isolated_rfq.field_purchase_order__quote_id
+msgid "For Purchases Order, this field references to its RFQ"
+msgstr ""
+
+#. module: purchase_isolated_rfq
+#: model:ir.model.fields,help:purchase_isolated_rfq.field_purchase_order__purchase_order_id
+msgid "For RFQ, this field references to its Purchases Order"
+msgstr ""
+
+#. module: purchase_isolated_rfq
+#: code:addons/purchase_isolated_rfq/models/purchase_order.py:0
+#, python-format
+msgid "Only quotation can convert to order"
+msgstr ""
+
+#. module: purchase_isolated_rfq
+#: model:ir.model.fields,help:purchase_isolated_rfq.field_purchase_order__rfq_state
+msgid "Only relative RFQ states"
+msgstr ""
+
+#. module: purchase_isolated_rfq
+#: model:ir.model.fields,field_description:purchase_isolated_rfq.field_purchase_order__purchase_order_id
+msgid "Order"
+msgstr ""
+
+#. module: purchase_isolated_rfq
+#: model:ir.model.fields,field_description:purchase_isolated_rfq.field_purchase_order__order_sequence
+msgid "Order Sequence"
+msgstr ""
+
+#. module: purchase_isolated_rfq
+#: model:ir.model,name:purchase_isolated_rfq.model_purchase_order
+msgid "Purchase Order"
+msgstr ""
+
+#. module: purchase_isolated_rfq
+#: code:addons/purchase_isolated_rfq/models/purchase_order.py:0
+#, python-format
+msgid "Purchases Order"
+msgstr ""
+
+#. module: purchase_isolated_rfq
+#: model:ir.model.fields,field_description:purchase_isolated_rfq.field_purchase_order__quote_id
+msgid "Quotation"
+msgstr ""
+
+#. module: purchase_isolated_rfq
+#: model:ir.model.fields,field_description:purchase_isolated_rfq.field_purchase_order__rfq_state
+msgid "RFQ Status"
+msgstr ""
From 56f85d325692963453fea44c285601e4f9115c87 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Fri, 21 Feb 2020 14:37:04 +0000
Subject: [PATCH 03/25] [UPD] README.rst
---
purchase_isolated_rfq/README.rst | 10 +++++-----
purchase_isolated_rfq/static/description/index.html | 6 +++---
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/purchase_isolated_rfq/README.rst b/purchase_isolated_rfq/README.rst
index 8078b09a083..a6fe4f84a40 100644
--- a/purchase_isolated_rfq/README.rst
+++ b/purchase_isolated_rfq/README.rst
@@ -14,13 +14,13 @@ Purchase Isolated RFQ
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpurchase--workflow-lightgray.png?logo=github
- :target: https://github.com/OCA/purchase-workflow/tree/13.0-add-purchase_isolated_quotation/purchase_isolated_rfq
+ :target: https://github.com/OCA/purchase-workflow/tree/13.0/purchase_isolated_rfq
:alt: OCA/purchase-workflow
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/purchase-workflow-13-0-add-purchase_isolated_quotation/purchase-workflow-13-0-add-purchase_isolated_quotation-purchase_isolated_rfq
+ :target: https://translation.odoo-community.org/projects/purchase-workflow-13-0/purchase-workflow-13-0-purchase_isolated_rfq
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
- :target: https://runbot.odoo-community.org/runbot/142/13.0-add-purchase_isolated_quotation
+ :target: https://runbot.odoo-community.org/runbot/142/13.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -55,7 +55,7 @@ Bug Tracker
Bugs are tracked on `GitHub 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 `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -85,6 +85,6 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
-This module is part of the `OCA/purchase-workflow `_ project on GitHub.
+This module is part of the `OCA/purchase-workflow `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/purchase_isolated_rfq/static/description/index.html b/purchase_isolated_rfq/static/description/index.html
index a34e96648e6..6f0b21aee55 100644
--- a/purchase_isolated_rfq/static/description/index.html
+++ b/purchase_isolated_rfq/static/description/index.html
@@ -367,7 +367,7 @@
Purchase Isolated RFQ
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
Note: This module is similar to sale_isolated_quotation, but for purchase/rfq
In some countries/companies, It’s already common to separate these two documents.
For filing purposes, the document sequence of Requests For Quotation (RFQ) and Purchases order
@@ -402,7 +402,7 @@
Bugs are tracked on GitHub 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.
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.