Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
9b242e2
[REF] sale_quotation: refactor the quotation mechanism.
nicolas-delbovier-acsone May 12, 2025
1a29073
[IMP] shopinvader_product_order_mode: use field dependency instead of…
nicolas-delbovier-acsone Jun 3, 2025
3fe5f1e
[FIX] fix typo 'unabled' -> 'enabled'
nicolas-delbovier-acsone Jun 10, 2025
89e7e87
[ADD] sale_typology: extract the concept of "typology" in sale.order …
nicolas-delbovier-acsone May 16, 2025
9abeea5
[IMP] sale_quotation: use the "typology" field to delcare the sale or…
nicolas-delbovier-acsone May 19, 2025
75a5176
[ADD] sale_cart_quotation: introduce module to decouple sale_quotatio…
nicolas-delbovier-acsone May 19, 2025
c23d91a
[IMP] shopinvader_api_quotation: remove sale_cart dependency and enha…
nicolas-delbovier-acsone May 20, 2025
2584403
[ADD] shopinvader_api_cart_quotation: add a module to isolate the log…
nicolas-delbovier-acsone May 21, 2025
d26f28a
[IMP] sale_cart: add ondelete strategy on typology field
nicolas-delbovier-acsone Jun 3, 2025
3fe01bd
[IMP] sale_cart_quotation: add a button to trigger the "request quota…
nicolas-delbovier-acsone Jun 3, 2025
4149bc1
[IMP] sale_quotation: add ondelete strategy to typology field in sale…
nicolas-delbovier-acsone Jun 3, 2025
5b5bc91
[IMP] shopinvader_api_quotation: improve update logic + small fixes.
nicolas-delbovier-acsone Jun 3, 2025
22811ae
[IMP] fix typo 'unabled' -> 'enabled'
nicolas-delbovier-acsone Jun 16, 2025
5040cd8
[FIX] sale_quotation: Remove redundant unit test
nicolas-delbovier-acsone Jul 1, 2025
8db39d5
[FIX] sale_quotation: Restore standard SO confirmation; introduce opt…
nicolas-delbovier-acsone Jul 2, 2025
11f5de7
[IMP] sale_quotation: improve UI of the sale_order form.
nicolas-delbovier-acsone Jul 8, 2025
220f163
[IMP] sale_quotation: rename method for clarity.
nicolas-delbovier-acsone Jul 9, 2025
baedd61
[IMP] sale_cart: Makes menu more flexible
lmignon Jul 14, 2025
837a9ac
[IMP]sale_quotation: Improves menu.
lmignon Jul 14, 2025
706c89c
[IMP] sale_quotation: Improves UI/UX
lmignon Jul 14, 2025
16a420c
[IMP] sale_quotation: Defines user's specific actions
lmignon Jul 14, 2025
0131797
[IMP] sale_cart_quotation: Uses new actions declared for customer use…
lmignon Jul 14, 2025
9fbab7a
[IMP] shopinvader_api_cart_quotation: CUses new actions declared for …
lmignon Jul 14, 2025
4cff80b
[IMP] shopinvader_api_quotation: Improves API
lmignon Jul 14, 2025
e098166
[IMP] sale_quotation, shopinvader_api_quotation: add FR translations
lmignon Jul 16, 2025
d3781c1
[IMP] sale_quotation: Improves UI
lmignon Jul 16, 2025
a38270e
[IMP] sale_quotation: Improves UI
lmignon Jul 16, 2025
a43fcdf
[IMP] sale_quotation: Translations
lmignon Jul 16, 2025
8833a15
[IMP] shopinvader_api_quotation: No download while the quotation is n…
lmignon Jul 23, 2025
ecb6cd9
[IMP] shopinvader_api_quotation: Quotation name is not editable.
lmignon Jul 23, 2025
5ef4fe7
[IMP]shopinvader_api_quotation: Refactor code to split sale and quota…
lmignon Jul 23, 2025
c7e5ca3
[IMP] shopinvader_api_quotation: Add search params
lmignon Jul 23, 2025
32d591c
[IMP] shopinvader_api_quotation: Add the quotation_state into the sal…
lmignon Jul 23, 2025
3500a94
[IMP] shopinvader_api_quotation: Implement partial update and add note
lmignon Jul 23, 2025
6604c1c
[FIX] sale_quotation, shopinvader_api_quotation: Add pot file
lmignon Jul 29, 2025
4c50954
[FIX] sale_quotation: Avoid double call to actions
lmignon Sep 1, 2025
767fa97
[FIX] shopinvader_api_quotation: Ensure salesperson is auto-subscribe…
nicolas-delbovier-acsone Oct 15, 2025
ad37158
pre-commit update
nicolas-delbovier-acsone May 28, 2026
527a4f3
sale_quotation: Avoid unnecessary ping pong calls
paradoxxxzero May 27, 2026
a480dfa
[REF] sale_quotation: refactor confirmation workflow to use native UI…
nicolas-delbovier-acsone May 28, 2026
58ec689
[FIX] shopinvader_api_quotation: mssing import in unit tests
nicolas-delbovier-acsone May 28, 2026
6934e7f
[FIX] shopinvader_api_quotation: adapt client requests to Starlette H…
nicolas-delbovier-acsone May 29, 2026
7c5a35b
[FIX] shopinvader_api_quotation: elevate privileges on quotation acce…
nicolas-delbovier-acsone May 29, 2026
dc8bef1
[FIX] shopinvader_api_quotation: fix typo
nicolas-delbovier-acsone Jun 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions sale_cart/README.rst
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association

=========
Sale Cart
=========
Expand All @@ -13,7 +17,7 @@ Sale Cart
.. |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
.. |badge2| image:: https://img.shields.io/badge/license-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-shopinvader%2Fodoo--shopinvader-lightgray.png?logo=github
Expand All @@ -22,7 +26,7 @@ Sale Cart

|badge1| |badge2| |badge3|

This addon add a typology on sale.order to distinguish the sale orders that are
This addon adds a "cart" typology on sale.order to distinguish the sale orders that are
in the process of being written (cart) and those that are quotations
ready to be confirmed.

Expand Down Expand Up @@ -56,6 +60,7 @@ Contributors
~~~~~~~~~~~~

* Laurent Mignon <laurent.mignon@acsone.eu>
* Nicolas DELBOVIER <nicolas.delbovier@acsone.eu>

Maintainers
~~~~~~~~~~~
Expand Down
2 changes: 1 addition & 1 deletion sale_cart/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"license": "AGPL-3",
"author": "ACSONE SA/NV",
"website": "https://github.com/shopinvader/odoo-shopinvader",
"depends": ["sale", "sales_team"],
"depends": ["sale", "sales_team", "sale_typology"],
"data": ["views/sale_order.xml"],
"demo": [],
"external_dependencies": {"python": ["openupgradelib"]},
Expand Down
7 changes: 6 additions & 1 deletion sale_cart/models/sale_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,12 @@
class SaleOrder(models.Model):
_inherit = "sale.order"

typology = fields.Selection([("sale", "Sale"), ("cart", "Cart")], default="sale")
typology = fields.Selection(
selection_add=[("cart", "Cart")],
ondelete={
"cart": "cascade",
},
)

def _confirm_cart(self):
self.ensure_one()
Expand Down
1 change: 1 addition & 0 deletions sale_cart/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
* Laurent Mignon <laurent.mignon@acsone.eu>
* Nicolas DELBOVIER <nicolas.delbovier@acsone.eu>
2 changes: 1 addition & 1 deletion sale_cart/readme/DESCRIPTION.rst
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
This addon add a typology on sale.order to distinguish the sale orders that are
This addon adds a "cart" typology on sale.order to distinguish the sale orders that are
in the process of being written (cart) and those that are quotations
ready to be confirmed.

Expand Down
27 changes: 17 additions & 10 deletions sale_cart/static/description/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>Sale Cart</title>
<title>README.rst</title>
<style type="text/css">

/*
Expand Down Expand Up @@ -360,17 +360,22 @@
</style>
</head>
<body>
<div class="document" id="sale-cart">
<h1 class="title">Sale Cart</h1>
<div class="document">


<a class="reference external image-reference" href="https://odoo-community.org/get-involved?utm_source=readme">
<img alt="Odoo Community Association" src="https://odoo-community.org/readme-banner-image" />
</a>
<div class="section" id="sale-cart">
<h1>Sale Cart</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:f8b90f8e15973c46f8a0158f465e5ffe13ef8e244cef29288fe7b60472da3262
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" 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 image-reference" 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 image-reference" href="https://github.com/shopinvader/odoo-shopinvader/tree/16.0/sale_cart"><img alt="shopinvader/odoo-shopinvader" src="https://img.shields.io/badge/github-shopinvader%2Fodoo--shopinvader-lightgray.png?logo=github" /></a></p>
<p>This addon add a typology on sale.order to distinguish the sale orders that are
<p><a class="reference external image-reference" 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 image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/shopinvader/odoo-shopinvader/tree/16.0/sale_cart"><img alt="shopinvader/odoo-shopinvader" src="https://img.shields.io/badge/github-shopinvader%2Fodoo--shopinvader-lightgray.png?logo=github" /></a></p>
<p>This addon adds a “cart” typology on sale.order to distinguish the sale orders that are
in the process of being written (cart) and those that are quotations
ready to be confirmed.</p>
<p>It also automatically converts the cart into a sale when the payment is
Expand All @@ -388,33 +393,35 @@ <h1 class="title">Sale Cart</h1>
</ul>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-1">Bug Tracker</a></h1>
<h2><a class="toc-backref" href="#toc-entry-1">Bug Tracker</a></h2>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/shopinvader/odoo-shopinvader/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 to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/shopinvader/odoo-shopinvader/issues/new?body=module:%20sale_cart%0Aversion:%2016.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">
<h1><a class="toc-backref" href="#toc-entry-2">Credits</a></h1>
<h2><a class="toc-backref" href="#toc-entry-2">Credits</a></h2>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-3">Authors</a></h2>
<h3><a class="toc-backref" href="#toc-entry-3">Authors</a></h3>
<ul class="simple">
<li>ACSONE SA/NV</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-4">Contributors</a></h2>
<h3><a class="toc-backref" href="#toc-entry-4">Contributors</a></h3>
<ul class="simple">
<li>Laurent Mignon &lt;<a class="reference external" href="mailto:laurent.mignon&#64;acsone.eu">laurent.mignon&#64;acsone.eu</a>&gt;</li>
<li>Nicolas DELBOVIER &lt;<a class="reference external" href="mailto:nicolas.delbovier&#64;acsone.eu">nicolas.delbovier&#64;acsone.eu</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-5">Maintainers</a></h2>
<h3><a class="toc-backref" href="#toc-entry-5">Maintainers</a></h3>
<p>This module is part of the <a class="reference external" href="https://github.com/shopinvader/odoo-shopinvader/tree/16.0/sale_cart">shopinvader/odoo-shopinvader</a> project on GitHub.</p>
<p>You are welcome to contribute.</p>
</div>
</div>
</div>
</div>
</body>
</html>
2 changes: 1 addition & 1 deletion sale_cart/views/sale_order.xml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
</record>

<record id="sale.action_quotations" model="ir.actions.act_window">
<field name="domain">[('typology', '=', 'sale'),
<field name="domain">[('typology', '!=', 'cart'),
('state','in',('draft','sent','cancel'))]
</field>
</record>
Expand Down
64 changes: 64 additions & 0 deletions sale_cart_quotation/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association

===================
Sale Cart Quotation
===================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:092764e34a3532b13b87a0b07712f405be8de3df4ce5265a1c4f0640ea1f44f8
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |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/license-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-shopinvader%2Fodoo--shopinvader-lightgray.png?logo=github
:target: https://github.com/shopinvader/odoo-shopinvader/tree/16.0/sale_cart_quotation
:alt: shopinvader/odoo-shopinvader

|badge1| |badge2| |badge3|

Glue module between sale_quotation and sale_cart, allowing users to request a quotation directly from a cart.

**Table of contents**

.. contents::
:local:

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/shopinvader/odoo-shopinvader/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/shopinvader/odoo-shopinvader/issues/new?body=module:%20sale_cart_quotation%0Aversion:%2016.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.

Credits
=======

Authors
~~~~~~~

* ACSONE SA/NV

Contributors
~~~~~~~~~~~~

* Nicolas DELBOVIER <nicolas.delbovier@acsone.eu>

Maintainers
~~~~~~~~~~~

This module is part of the `shopinvader/odoo-shopinvader <https://github.com/shopinvader/odoo-shopinvader/tree/16.0/sale_cart_quotation>`_ project on GitHub.

You are welcome to contribute.
1 change: 1 addition & 0 deletions sale_cart_quotation/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
17 changes: 17 additions & 0 deletions sale_cart_quotation/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Copyright 2025 ACSONE SA/NV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

{
"name": "Sale Cart Quotation",
"summary": """Glue module between sale_quotation and sale_cart,
allowing users to request a quotation directly from a cart.""",
"version": "16.0.1.0.0",
"license": "AGPL-3",
"author": "ACSONE SA/NV",
"website": "https://github.com/shopinvader/odoo-shopinvader",
"depends": ["sale_quotation", "sale_cart"],
"data": [
"views/sale_order.xml",
],
"demo": [],
}
1 change: 1 addition & 0 deletions sale_cart_quotation/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import sale_order
21 changes: 21 additions & 0 deletions sale_cart_quotation/models/sale_order.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Copyright 2025 ACSONE SA/NV
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).

from odoo import _, models
from odoo.exceptions import UserError


class SaleOrder(models.Model):
_inherit = "sale.order"

def action_cart_request_quotation(self):
if any(rec.state != "draft" or rec.typology != "cart" for rec in self):
raise UserError(
_(
"Only orders of cart typology in draft state "
"can be converted to quotation"
)
)
self.write({"use_customer_quotation_workflow": True})
self.action_customer_request_quotation()
return True
1 change: 1 addition & 0 deletions sale_cart_quotation/readme/CONTRIBUTORS.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* Nicolas DELBOVIER <nicolas.delbovier@acsone.eu>
1 change: 1 addition & 0 deletions sale_cart_quotation/readme/DESCRIPTION.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Glue module between sale_quotation and sale_cart, allowing users to request a quotation directly from a cart.
Loading
Loading