Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
b377e94
[ADD] purchase_triple_discount: New module
chienandalu Jul 18, 2017
4afbe9b
[FIX] purchase_triple_discount: Correct view inheritance
pedrobaeza Oct 11, 2017
8348441
[MIG] purchase_triple_discount: Migration to 11.0
chienandalu Aug 5, 2019
f66a706
[MIG] purchase_triple_discount
legalsylvain Aug 8, 2019
b916157
[IMP] inheritance between purchase_discount and purchase_triple_disco…
legalsylvain Aug 9, 2019
d73229a
[IMP] purchase*_discount: Several improvements:
pedrobaeza Aug 9, 2019
3164c4e
Added translation using Weblate (Chinese (Simplified))
liweijie0812 Sep 2, 2019
12271f1
Translated using Weblate (Chinese (Simplified))
liweijie0812 Sep 2, 2019
879d356
[FIX] purchase_triple_discount: Missing return raises error
HviorForgeFlow Oct 18, 2019
baf0017
Translated using Weblate (Italian)
francesco-ooops Feb 26, 2020
500f0e2
[FIX] purchase_triple_discount: bad display of discounts 2 and 3 in s…
legalsylvain Jun 15, 2020
1322047
Translated using Weblate (Slovenian)
sysadminmatmoz Aug 12, 2020
8bfa2c8
Translated using Weblate (Portuguese (Brazil))
marcelsavegnago Sep 25, 2020
f2dd45e
Translated using Weblate (Slovenian)
sysadminmatmoz Feb 24, 2021
689b1ab
[IMP] purchase_triple_discount: black, isort, prettier
ChrisOForgeFlow Jan 3, 2022
f42d36d
[14.0][MIG] purchase_triple_discount
ChrisOForgeFlow Jan 3, 2022
d37f962
[FIX] purchase_triple_discount: decimal_precision is obsolete
MiquelRForgeFlow May 3, 2022
8bb52d6
[IMP] purchase_triple_discount: Display discount2 and discount3 field…
ao-landoo Oct 4, 2022
5f47232
[MIG] purchase_triple_discount: Migration to 15.0
ramiadavid May 22, 2022
f9ac171
[MIG] purchase_triple_discount: Migration to 16.0
ramiadavid Oct 27, 2022
eb8bf3a
Translated using Weblate (Italian)
francesco-ooops May 15, 2023
a1f54d1
Translated using Weblate (Spanish)
Ivorra78 Jul 17, 2023
0af6263
Translated using Weblate (Italian)
mymage Dec 20, 2023
30e6f71
Translated using Weblate (Portuguese (Brazil))
May 29, 2024
371b665
[IMP] purchase_discount/purchase_triple_discount: Use core hook
pedrobaeza Aug 12, 2024
8d1f8a5
[IMP] purchase_triple_discount: pre-commit auto fixes
Borruso Mar 6, 2025
dc19302
[MIG] purchase_triple_discount: Migration to 18.0
Borruso Mar 6, 2025
a0cf435
[FIX] purchase_triple_discount: restore default_supplierinfo_discount(s)
stenext Oct 8, 2025
e07e6f8
[UPD] Update purchase_triple_discount.pot
Dec 1, 2025
514fca6
[BOT] post-merge updates
OCA-git-bot Dec 1, 2025
85f8c0d
[IMP] purchase_triple_discount: pre-commit auto fixes
Vicent-S73 Jan 28, 2026
6448bec
[MIG] purchase_triple_discount: Migration to 19.0
Vicent-S73 Jan 28, 2026
e0b1328
[DON'T MERGE] test-requirements.txt
Vicent-S73 Jan 28, 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
123 changes: 123 additions & 0 deletions purchase_triple_discount/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association

==============================
Purchase Order Triple Discount
==============================

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

.. |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-OCA%2Fpurchase--workflow-lightgray.png?logo=github
:target: https://github.com/OCA/purchase-workflow/tree/19.0/purchase_triple_discount
: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-19-0/purchase-workflow-19-0-purchase_triple_discount
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/purchase-workflow&target_branch=19.0
:alt: Try me on Runboat

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

This module allows to have three successive discounts on every purchase
order line.

**Table of contents**

.. contents::
:local:

Usage
=====

Create a new purchase order and add discounts in any of the three
discount fields given. They go in order of precedence so discount 2 will
be calculated over discount 1 and discount 3 over the result of discount
2. For example, let's divide by two on every discount:

Unit price: 600.00 ->

- Disc. 1 = 50% -> Amount = 300.00
- Disc. 2 = 50% -> Amount = 150.00
- Disc. 3 = 50% -> Amount = 75.00

You can also use negative values to charge instead of discount:

Unit price: 600.00 ->

- Disc. 1 = 50% -> Amount = 300.00
- Disc. 2 = -5% -> Amount = 315.00

- When the purchase order is validated, the discounts will be added to
the corresponding vendor pricelist.
- Vendor pricelists can be edited as well with their corresponding new
second and third discounts.
- A default second or third discount can be set in every vendor *Sale &
Purchases* tab.

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

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

* Tecnativa
* GRAP

Contributors
------------

- `Tecnativa <https://www.tecnativa.com>`__:

- David Vidal
- Pedro M. Baeza

- Sylvain LE GAL (https://twitter.com/legalsylvain)

- `ForgeFlow S.L. <https://www.forgeflow.com>`__:

- Christopher Ormaza <chris.ormaza@forgeflow.com>

- `Studio73 S.L. <https://www.studio73.es>`__:

- Vicent Castells <vicent@studio73.es>

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 <https://github.com/OCA/purchase-workflow/tree/19.0/purchase_triple_discount>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
2 changes: 2 additions & 0 deletions purchase_triple_discount/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import models
from .hooks import post_init_hook
22 changes: 22 additions & 0 deletions purchase_triple_discount/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Copyright 2017 Tecnativa - David Vidal
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Purchase Order Triple Discount",
"version": "19.0.1.0.0",
"category": "Purchase Management",
"author": "Tecnativa,GRAP,Odoo Community Association (OCA)",
"website": "https://github.com/OCA/purchase-workflow",
"license": "AGPL-3",
"summary": "Manage triple discount on purchase order lines",
"depends": [
"purchase",
"account_invoice_triple_discount",
],
"data": [
"views/product_supplierinfo_view.xml",
"views/purchase_view.xml",
"views/res_partner_view.xml",
],
"post_init_hook": "post_init_hook",
"installable": True,
}
28 changes: 28 additions & 0 deletions purchase_triple_discount/hooks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
def post_init_hook(env):
env.cr.execute(
"""
UPDATE purchase_order_line upd
SET discount1=pol.discount
FROM (SELECT *
FROM purchase_order_line
WHERE discount IS NOT NULL
AND discount1 IS NULL
AND discount2 IS NULL
AND discount3 IS NULL) as pol
WHERE upd.id = pol.id
"""
)

env.cr.execute(
"""
UPDATE product_supplierinfo upd
SET discount1=psi.discount
FROM (SELECT *
FROM product_supplierinfo
WHERE discount IS NOT NULL
AND discount1 IS NULL
AND discount2 IS NULL
AND discount3 IS NULL) as psi
WHERE upd.id = psi.id
"""
)
104 changes: 104 additions & 0 deletions purchase_triple_discount/i18n/de.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_triple_discount
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-24 07:53+0000\n"
"PO-Revision-Date: 2017-11-24 07:53+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. module: purchase_triple_discount
#: model_terms:ir.ui.view,arch_db:purchase_triple_discount.report_purchaseorder_document_triple_discount
msgid "<strong>Disc. 2 (%)</strong>"
msgstr ""

#. module: purchase_triple_discount
#: model_terms:ir.ui.view,arch_db:purchase_triple_discount.report_purchaseorder_document_triple_discount
msgid "<strong>Disc. 3 (%)</strong>"
msgstr ""

#. module: purchase_triple_discount
#: model:ir.model,name:purchase_triple_discount.model_res_partner
msgid "Contact"
msgstr ""

#. module: purchase_triple_discount
#: model:ir.model.fields,field_description:purchase_triple_discount.field_res_partner__default_supplierinfo_discount2
#: model:ir.model.fields,field_description:purchase_triple_discount.field_res_users__default_supplierinfo_discount2
msgid "Default Supplier Discount 2 (%)"
msgstr ""

#. module: purchase_triple_discount
#: model:ir.model.fields,field_description:purchase_triple_discount.field_res_partner__default_supplierinfo_discount3
#: model:ir.model.fields,field_description:purchase_triple_discount.field_res_users__default_supplierinfo_discount3
msgid "Default Supplier Discount 3 (%)"
msgstr ""

#. module: purchase_triple_discount
#: model:ir.model.fields,field_description:purchase_triple_discount.field_purchase_order_line__discount2
msgid "Disc. 2 (%)"
msgstr ""

#. module: purchase_triple_discount
#: model:ir.model.fields,field_description:purchase_triple_discount.field_purchase_order_line__discount3
msgid "Disc. 3 (%)"
msgstr ""

#. module: purchase_triple_discount
#: model:ir.model.fields,field_description:purchase_triple_discount.field_product_supplierinfo__discount2
#: model:ir.model.fields,field_description:purchase_triple_discount.field_purchase_report__discount2
msgid "Discount 2 (%)"
msgstr ""

#. module: purchase_triple_discount
#: model:ir.model.constraint,message:purchase_triple_discount.constraint_purchase_order_line_discount2_limit
msgid "Discount 2 must be lower than 100%."
msgstr ""

#. module: purchase_triple_discount
#: model:ir.model.fields,field_description:purchase_triple_discount.field_product_supplierinfo__discount3
#: model:ir.model.fields,field_description:purchase_triple_discount.field_purchase_report__discount3
msgid "Discount 3 (%)"
msgstr ""

#. module: purchase_triple_discount
#: model:ir.model.constraint,message:purchase_triple_discount.constraint_purchase_order_line_discount3_limit
msgid "Discount 3 must be lower than 100%."
msgstr ""

#. module: purchase_triple_discount
#: model:ir.model,name:purchase_triple_discount.model_purchase_order_line
msgid "Purchase Order Line"
msgstr "Bestellposition"

#. module: purchase_triple_discount
#: model:ir.model,name:purchase_triple_discount.model_purchase_report
#, fuzzy
msgid "Purchase Report"
msgstr "Bestellposition"

#. module: purchase_triple_discount
#: model:ir.model,name:purchase_triple_discount.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr ""

#. module: purchase_triple_discount
#: model:ir.model.fields,help:purchase_triple_discount.field_res_partner__default_supplierinfo_discount2
#: model:ir.model.fields,help:purchase_triple_discount.field_res_partner__default_supplierinfo_discount3
#: model:ir.model.fields,help:purchase_triple_discount.field_res_users__default_supplierinfo_discount2
#: model:ir.model.fields,help:purchase_triple_discount.field_res_users__default_supplierinfo_discount3
msgid ""
"This value will be used as the default one, for each new supplierinfo line "
"depending on that supplier."
msgstr ""
106 changes: 106 additions & 0 deletions purchase_triple_discount/i18n/es.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_triple_discount
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-24 07:53+0000\n"
"PO-Revision-Date: 2023-07-17 20:10+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"

#. module: purchase_triple_discount
#: model_terms:ir.ui.view,arch_db:purchase_triple_discount.report_purchaseorder_document_triple_discount
msgid "<strong>Disc. 2 (%)</strong>"
msgstr "<strong>Descuento. 2 (%)</strong>"

#. module: purchase_triple_discount
#: model_terms:ir.ui.view,arch_db:purchase_triple_discount.report_purchaseorder_document_triple_discount
msgid "<strong>Disc. 3 (%)</strong>"
msgstr "<strong>Descuento. 3 (%)</strong>"

#. module: purchase_triple_discount
#: model:ir.model,name:purchase_triple_discount.model_res_partner
msgid "Contact"
msgstr "Contacto"

#. module: purchase_triple_discount
#: model:ir.model.fields,field_description:purchase_triple_discount.field_res_partner__default_supplierinfo_discount2
#: model:ir.model.fields,field_description:purchase_triple_discount.field_res_users__default_supplierinfo_discount2
msgid "Default Supplier Discount 2 (%)"
msgstr "Descuento por defecto al proveedor 2 (%)"

#. module: purchase_triple_discount
#: model:ir.model.fields,field_description:purchase_triple_discount.field_res_partner__default_supplierinfo_discount3
#: model:ir.model.fields,field_description:purchase_triple_discount.field_res_users__default_supplierinfo_discount3
msgid "Default Supplier Discount 3 (%)"
msgstr "Descuento por defecto al proveedor 3 (%)"

#. module: purchase_triple_discount
#: model:ir.model.fields,field_description:purchase_triple_discount.field_purchase_order_line__discount2
msgid "Disc. 2 (%)"
msgstr "Descuento. 2 (%)"

#. module: purchase_triple_discount
#: model:ir.model.fields,field_description:purchase_triple_discount.field_purchase_order_line__discount3
msgid "Disc. 3 (%)"
msgstr "Descuento. 3 (%)"

#. module: purchase_triple_discount
#: model:ir.model.fields,field_description:purchase_triple_discount.field_product_supplierinfo__discount2
#: model:ir.model.fields,field_description:purchase_triple_discount.field_purchase_report__discount2
msgid "Discount 2 (%)"
msgstr "Descuento 2 (%)"

#. module: purchase_triple_discount
#: model:ir.model.constraint,message:purchase_triple_discount.constraint_purchase_order_line_discount2_limit
msgid "Discount 2 must be lower than 100%."
msgstr "El descuento 2 debe ser inferior al 100%."

#. module: purchase_triple_discount
#: model:ir.model.fields,field_description:purchase_triple_discount.field_product_supplierinfo__discount3
#: model:ir.model.fields,field_description:purchase_triple_discount.field_purchase_report__discount3
msgid "Discount 3 (%)"
msgstr "Descuento 3 (%)"

#. module: purchase_triple_discount
#: model:ir.model.constraint,message:purchase_triple_discount.constraint_purchase_order_line_discount3_limit
msgid "Discount 3 must be lower than 100%."
msgstr "El descuento 3 debe ser inferior al 100%."

#. module: purchase_triple_discount
#: model:ir.model,name:purchase_triple_discount.model_purchase_order_line
msgid "Purchase Order Line"
msgstr "Línea orden de compra"

#. module: purchase_triple_discount
#: model:ir.model,name:purchase_triple_discount.model_purchase_report
msgid "Purchase Report"
msgstr "Informe de compra"

#. module: purchase_triple_discount
#: model:ir.model,name:purchase_triple_discount.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr "Lista de precios para proveedores"

#. module: purchase_triple_discount
#: model:ir.model.fields,help:purchase_triple_discount.field_res_partner__default_supplierinfo_discount2
#: model:ir.model.fields,help:purchase_triple_discount.field_res_partner__default_supplierinfo_discount3
#: model:ir.model.fields,help:purchase_triple_discount.field_res_users__default_supplierinfo_discount2
#: model:ir.model.fields,help:purchase_triple_discount.field_res_users__default_supplierinfo_discount3
msgid ""
"This value will be used as the default one, for each new supplierinfo line "
"depending on that supplier."
msgstr ""
"Este valor se utilizará como valor por defecto, para cada nueva línea de "
"información del proveedor que dependa de ese proveedor."
Loading
Loading