Skip to content

Commit

Permalink
Merge commit 'refs/pull/2266/head' of https://github.com/oca/sale-wor…
Browse files Browse the repository at this point in the history
…kflow into 16.0-1096
  • Loading branch information
docker-odoo committed Jan 11, 2023
2 parents abdcf2a + 4be9ab6 commit 41aa7bf
Show file tree
Hide file tree
Showing 95 changed files with 20,059 additions and 0 deletions.
143 changes: 143 additions & 0 deletions sale_exception/README.rst
@@ -0,0 +1,143 @@
==============
Sale Exception
==============

.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! 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%2Fsale--workflow-lightgray.png?logo=github
:target: https://github.com/OCA/sale-workflow/tree/15.0/sale_exception
:alt: OCA/sale-workflow
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/sale-workflow-15-0/sale-workflow-15-0-sale_exception
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/167/15.0
:alt: Try me on Runbot

|badge1| |badge2| |badge3| |badge4| |badge5|

This module allows you attach several customizable exceptions to your
sale order in a way that you can filter orders by exceptions type and fix them.

This is especially useful in an scenario for mass sales order import because
it's likely some orders have errors when you import them (like product not
found in Odoo, wrong line format etc.)

**Table of contents**

.. contents::
:local:

Configuration
=============

If you are going to use Customer sale warning and Product warning,
for setting corresponding information, you need to:

#. Go to *Settings > User & Companies > Users*.
#. Edit your user.
#. Check "A warning can be set on a product or a customer (Sale)" group.
#. Install sale_management addon.

Usage
=====

Not Enough Virtual Stock:
#. Go to *Sales > Products > Products*.
#. Create new storable product without stock available.
#. Go to *Sales > Orders > Quotations*
#. Create new quotation.
#. Add product without stock available.
#. An exception will be displayed.

No ZIP code on destination:
#. Go to *Contacts*.
#. Edit or create new contact.
#. Set empty zip code.
#. Go to *Sales > Orders > Quotations*
#. Create new quotation.
#. Set delivery address with no zip code.
#. An exception will be displayed.

Product warning:
#. Go to *Sales > Products > Products*.
#. Edit or create new product.
#. Go to *Sales* tab.
#. Set your desired warning option under the *Warning when Selling this Product* group.
#. Set some warning message.
#. Go to *Sales > Orders > Quotations*
#. Create new quotation.
#. Add product with warning message.
#. An exception will be displayed.

Partner warning:
#. Go to *Contacts*.
#. Edit or create new contact.
#. Go to *Internal notes* tab.
#. Set warning option according to *Warning on the Sales Order* group.
#. Set some warning message.
#. Go to *Sales > Orders > Quotations*
#. Create new quotation.
#. Set partner with warning message.
#. An exception will be displayed.

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

Bugs are tracked on `GitHub Issues <https://github.com/OCA/sale-workflow/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/OCA/sale-workflow/issues/new?body=module:%20sale_exception%0Aversion:%2015.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
~~~~~~~

* Akretion
* Sodexis
* Camptocamp

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

* Raphaël Valyi <raphael.valyi@akretion.com>
* Renato Lima <renato.lima@akretion.com>
* Sébastien BEAU <sebastien.beau@akretion.com>
* Guewen Baconnier <guewen.baconnier@camptocamp.com>
* Yannick Vaucher <yannick.vaucher@camptocamp.com>
* Simone Orsi <simahawk@gmail.com>
* SodexisTeam <dev@sodexis.com>
* Mourad EL HADJ MIMOUNE <mourad.elhadj.mimoune@akretion.com>
* Raphaël Reverdy <raphael.reverdy@akretion.com>
* Florian da Costa <florian.dacosta@akretion.com>
* Iván Todorovich <ivan.todorovich@druidoo.io>

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/sale-workflow <https://github.com/OCA/sale-workflow/tree/15.0/sale_exception>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
3 changes: 3 additions & 0 deletions sale_exception/__init__.py
@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
from . import models
from . import wizard
24 changes: 24 additions & 0 deletions sale_exception/__manifest__.py
@@ -0,0 +1,24 @@
# Copyright 2011 Akretion, Sodexis
# Copyright 2018 Akretion
# Copyright 2019 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
"name": "Sale Exception",
"summary": "Custom exceptions on sale order",
"version": "16.0.1.0.0",
"category": "Generic Modules/Sale",
"author": "Akretion, "
"Sodexis, "
"Camptocamp, "
"Odoo Community Association (OCA)",
"website": "https://github.com/OCA/sale-workflow",
"depends": ["sale", "base_exception"],
"license": "AGPL-3",
"data": [
"security/ir.model.access.csv",
"data/sale_exception_data.xml",
"wizard/sale_exception_confirm_view.xml",
"views/sale_view.xml",
],
"demo": ["demo/sale_exception_demo.xml"],
}
50 changes: 50 additions & 0 deletions sale_exception/data/sale_exception_data.xml
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo noupdate="1">
<record forcecreate="True" id="ir_cron_test_orders" model="ir.cron">
<field name="name">Test Draft Orders</field>
<field name="active" eval="False" />
<field name="user_id" ref="base.user_root" />
<field name="interval_number">20</field>
<field name="interval_type">minutes</field>
<field name="numbercall">-1</field>
<field eval="False" name="doall" />
<field name="model_id" ref="sale.model_sale_order" />
<field name="state">code</field>
<field name="code">model.test_all_draft_orders()</field>
</record>
<record id="excep_no_zip" model="exception.rule">
<field name="name">No ZIP code on destination</field>
<field name="description">No ZIP code on destination</field>
<field name="sequence">50</field>
<field name="model">sale.order</field>
<field name="code">failed=not self.partner_shipping_id.zip</field>
<field name="active" eval="False" />
</record>
<record id="excep_no_stock" model="exception.rule">
<field name="name">Not Enough Virtual Stock</field>
<field name="description">Not Enough Virtual Stock</field>
<field name="sequence">50</field>
<field name="model">sale.order.line</field>
<field
name="code"
>failed=self.product_id and self.product_id.type == 'product' and self.virtual_available_at_date &lt; self.product_uom_qty</field>
<field name="active" eval="False" />
</record>
<record id="exception_partner_sale_warning" model="exception.rule">
<field name="name">Customer sale warning</field>
<field name="description">The customer has a sale warning in his form</field>
<field name="sequence">40</field>
<field name="model">sale.order</field>
<field name="code">failed=self.partner_id.sale_warn == "warning"</field>
<field name="active" eval="False" />
</record>
<record id="exception_product_sale_warning" model="exception.rule">
<field name="name">Product warning</field>
<field name="description">The product has a warning in his form</field>
<field name="sequence">40</field>
<field name="model">sale.order.line</field>
<field name="code">failed=self.sale_line_warn == "warning"</field>
<field name="active" eval="False" />
</record>
</odoo>
33 changes: 33 additions & 0 deletions sale_exception/demo/sale_exception_demo.xml
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="excep_no_sol" model="exception.rule">
<field name="name">No order lines</field>
<field
name="description"
>At least one order line should be present in the sale</field>
<field name="sequence">50</field>
<field name="model">sale.order</field>
<field name="exception_type">by_domain</field>
<field name="domain">[('order_line', '=', False)]</field>
<field name="active" eval="False" />
</record>
<record id="excep_no_free" model="exception.rule">
<field name="name">No free order</field>
<field name="description">The total can't be 0</field>
<field name="sequence">50</field>
<field name="model">sale.order</field>
<field name="exception_type">by_domain</field>
<field name="domain">[('amount_total', '=', 0)]</field>
<field name="active" eval="False" />
</record>
<record id="excep_no_dumping" model="exception.rule">
<field name="name">No dumping</field>
<field name="description">A product is sold cheaper than his cost.</field>
<field name="sequence">50</field>
<field name="model">sale.order.line</field>
<field
name="code"
>failed = obj.product_id.standard_price != 0 and obj.product_id.standard_price &gt; obj.price_unit</field>
<field name="active" eval="False" />
</record>
</odoo>

0 comments on commit 41aa7bf

Please sign in to comment.