Initial commit: OCA Workflow Process packages (456 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:00 +02:00
commit d366e42934
18799 changed files with 1284507 additions and 0 deletions

View file

@ -0,0 +1,47 @@
# Sale Triple Discount
Odoo addon: sale_triple_discount
## Installation
```bash
pip install odoo-bringout-oca-sale-workflow-sale_triple_discount
```
## Dependencies
This addon depends on:
- sale_management
- account_invoice_triple_discount
## Manifest Information
- **Name**: Sale Triple Discount
- **Version**: 16.0.1.0.5
- **Category**: Sales
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/sale-workflow](https://github.com/OCA/sale-workflow) branch 16.0, addon `sale_triple_discount`.
## License
This package maintains the original AGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Reports: doc/REPORTS.md
- Security: doc/SECURITY.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -0,0 +1,32 @@
# Architecture
```mermaid
flowchart TD
U[Users] -->|HTTP| V[Views and QWeb Templates]
V --> C[Controllers]
V --> W[Wizards Transient Models]
C --> M[Models and ORM]
W --> M
M --> R[Reports]
DX[Data XML] --> M
S[Security ACLs and Groups] -. enforces .-> M
subgraph Sale_triple_discount Module - sale_triple_discount
direction LR
M:::layer
W:::layer
C:::layer
V:::layer
R:::layer
S:::layer
DX:::layer
end
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
```
Notes
- Views include tree/form/kanban templates and report templates.
- Controllers provide website/portal routes when present.
- Wizards are UI flows implemented with `models.TransientModel`.
- Data XML loads data/demo records; Security defines groups and access.

View file

@ -0,0 +1,3 @@
# Configuration
Refer to Odoo settings for sale_triple_discount. Configure related models, access rights, and options as needed.

View file

@ -0,0 +1,3 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -0,0 +1,6 @@
# Dependencies
This addon depends on:
- [sale_management](../../odoo-bringout-oca-ocb-sale_management)
- [account_invoice_triple_discount](../../odoo-bringout-oca-account-invoicing-account_invoice_triple_discount)

View file

@ -0,0 +1,4 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon sale_triple_discount or install in UI.

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-sale-workflow-sale_triple_discount"
# or
uv pip install odoo-bringout-oca-sale-workflow-sale_triple_discount"
```

View file

@ -0,0 +1,12 @@
# Models
Detected core models and extensions in sale_triple_discount.
```mermaid
classDiagram
class sale_order_line
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -0,0 +1,6 @@
# Overview
Packaged Odoo addon: sale_triple_discount. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon sale_triple_discount
- License: LGPL-3

View file

@ -0,0 +1,3 @@
# Reports
This module does not define custom reports.

View file

@ -0,0 +1,8 @@
# Security
This module does not define custom security rules or access controls beyond Odoo defaults.
Default Odoo security applies:
- Base user access through standard groups
- Model access inherited from dependencies
- No custom row-level security rules

View file

@ -0,0 +1,5 @@
# Troubleshooting
- Ensure Python and Odoo environment matches repo guidance.
- Check database connectivity and logs if startup fails.
- Validate that dependent addons listed in DEPENDENCIES.md are installed.

View file

@ -0,0 +1,7 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon sale_triple_discount
```

View file

@ -0,0 +1,3 @@
# Wizards
This module does not include UI wizards.

View file

@ -0,0 +1,43 @@
[project]
name = "odoo-bringout-oca-sale-workflow-sale_triple_discount"
version = "16.0.0"
description = "Sale Triple Discount - Manage triple discount on sale order lines"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-sale-workflow-sale_management>=16.0.0",
"odoo-bringout-oca-sale-workflow-account_invoice_triple_discount>=16.0.0",
"requests>=2.25.1"
]
readme = "README.md"
requires-python = ">= 3.11"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]
[project.urls]
homepage = "https://github.com/bringout/0"
repository = "https://github.com/bringout/0"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.metadata]
allow-direct-references = true
[tool.hatch.build.targets.wheel]
packages = ["sale_triple_discount"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]

View file

@ -0,0 +1,128 @@
====================
Sale Triple Discount
====================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:40de001af546b562ff61df9d9a0d66056dfa2d5b67ada49809bd0cc0ca0f21cf
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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/16.0/sale_triple_discount
: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-16-0/sale-workflow-16-0-sale_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/sale-workflow&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module allows to have three discounts on every sale order line.
**Table of contents**
.. contents::
:local:
Configuration
=============
To configure this module, you need to:
* set **Discount on lines** group to be able to see discounts on the lines
Usage
=====
Create a new sale order and add discounts in any of the three discount
fields given.
For multiplicative discounts 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
For additive discounts they will be summed first and then applied. For
example, let's have a three 20% discounts:
Unit price: 600.00 ->
- Disc. 1, 2, 3 = 20% + 20% + 20% -> 60%
- Disc. final = 60% -> Amount = 240.00
You can also use negative values to make a charge instead of a discount:
Unit price: 600.00 ->
- Disc. 1 = 50% -> Amount = 300.00
- Disc. 2 = -5% -> Amount = 315.00
Module allows defining additional discount fields and applying them with
other by adding them to the `_discount_fields` method.
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 to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/sale-workflow/issues/new?body=module:%20sale_triple_discount%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
~~~~~~~
* ADHOC SA
* Agile Business Group
* Tecnativa
Contributors
~~~~~~~~~~~~
* Nicolas Mac Rouillon <@nicomacr>
* Juan José Scarafía <jjs@adhoc.com.ar>
* Alex Comba <alex.comba@agilebg.com>
* David Vidal <david.vidal@tecnativa.com>
* Simone Rubino <simone.rubino@agilebg.com>
* Jacques-Etienne Baudoux (BCIM sprl) <je@bcim.be>
* Pimolnat Suntian <pimolnats@ecosoft.co.th>
* Denis Leemann <denis.leemann@camptocamp.com>
* Manuel Regidor <manuel.regidor@sygel.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/sale-workflow <https://github.com/OCA/sale-workflow/tree/16.0/sale_triple_discount>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

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

View file

@ -0,0 +1,21 @@
# Copyright 2015 ADHOC SA (http://www.adhoc.com.ar)
# Copyright 2017 - 2019 Alex Comba - Agile Business Group
# Copyright 2017 Tecnativa - David Vidal
# Copyright 2018 Jacques-Etienne Baudoux (BCIM sprl) <je@bcim.be>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Sale Triple Discount",
"version": "16.0.1.0.5",
"category": "Sales",
"author": "ADHOC SA, Agile Business Group, Tecnativa, "
"Odoo Community Association (OCA)",
"website": "https://github.com/OCA/sale-workflow",
"license": "AGPL-3",
"summary": "Manage triple discount on sale order lines",
# See setup.py as account_invoice_triple_discount last version is incompatible for now
# Remove orverride when refactor has been done here
"depends": ["sale_management", "account_invoice_triple_discount"],
"data": ["views/sale_order_report.xml", "views/sale_order_view.xml"],
"installable": True,
}

View file

@ -0,0 +1,80 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_triple_discount
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.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: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 2 (%)</span>"
msgstr "<span>Popust 2 (%)</span>"
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 3 (%)</span>"
msgstr "<span>Popust 3 (%)</span>"
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__additive
msgid "Additive"
msgstr "Aditivni"
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount2
msgid "Disc. 2 (%)"
msgstr "Popust 2 (%)"
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount3
msgid "Disc. 3 (%)"
msgstr "Popust 3 (%)"
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount2_limit
msgid "Discount 2 must be lower or equal than 100%."
msgstr "Popust 2 mora biti manji ili jednak 100%%."
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount3_limit
msgid "Discount 3 must be lower or equal than 100%."
msgstr "Popust 3 mora biti manji ili jednak 100%%."
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discounting_type
msgid "Discounting Type"
msgstr "Tip popusta"
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__multiplicative
msgid "Multiplicative"
msgstr "Multiplikativni"
#. module: sale_triple_discount
#. odoo-python
#: code:addons/sale_triple_discount/models/sale_order_line.py:0
#, python-format
msgid "Sale order line %(name)s has unknown discounting type %(dic_type)s"
msgstr "Linija prodajnog naloga %(name)s ima nepoznat tip popusta %(dic_type)s"
#. module: sale_triple_discount
#: model:ir.model,name:sale_triple_discount.model_sale_order_line
msgid "Sales Order Line"
msgstr "Stavka ponude"
#. module: sale_triple_discount
#: model:ir.model.fields,help:sale_triple_discount.field_sale_order_line__discounting_type
msgid ""
"Specifies whether discounts should be additive or multiplicative.\n"
"Additive discounts are summed first and then applied.\n"
"Multiplicative discounts are applied sequentially.\n"
"Multiplicative discounts are default"
msgstr ""

View file

@ -0,0 +1,89 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_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-23 01:52+0000\n"
"PO-Revision-Date: 2017-11-23 01:52+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Catalan (https://www.transifex.com/oca/teams/23907/ca/)\n"
"Language: ca\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: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 2 (%)</span>"
msgstr ""
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 3 (%)</span>"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__additive
msgid "Additive"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount2
msgid "Disc. 2 (%)"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount3
msgid "Disc. 3 (%)"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount2_limit
msgid "Discount 2 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount3_limit
msgid "Discount 3 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discounting_type
msgid "Discounting Type"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__multiplicative
msgid "Multiplicative"
msgstr ""
#. module: sale_triple_discount
#. odoo-python
#: code:addons/sale_triple_discount/models/sale_order_line.py:0
#, python-format
msgid "Sale order line %(name)s has unknown discounting type %(dic_type)s"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model,name:sale_triple_discount.model_sale_order_line
msgid "Sales Order Line"
msgstr "Línia de comanda de vendes"
#. module: sale_triple_discount
#: model:ir.model.fields,help:sale_triple_discount.field_sale_order_line__discounting_type
msgid ""
"Specifies whether discounts should be additive or multiplicative.\n"
"Additive discounts are summed first and then applied.\n"
"Multiplicative discounts are applied sequentially.\n"
"Multiplicative discounts are default"
msgstr ""
#, fuzzy
#~ msgid "Sale Order"
#~ msgstr "Línia de comanda de vendes"

View file

@ -0,0 +1,95 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_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-23 01:52+0000\n"
"PO-Revision-Date: 2024-04-10 15:37+0000\n"
"Last-Translator: jappi00 <jappi2000@ewetel.net>\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"
"X-Generator: Weblate 4.17\n"
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 2 (%)</span>"
msgstr "<span>Rabatt 2 (%)</span>"
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 3 (%)</span>"
msgstr "<span>Rabatt 3 (%)</span>"
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__additive
msgid "Additive"
msgstr "Additiv"
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount2
msgid "Disc. 2 (%)"
msgstr "Rabatt 2 (%)"
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount3
msgid "Disc. 3 (%)"
msgstr "Rabatt 3 (%)"
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount2_limit
msgid "Discount 2 must be lower or equal than 100%."
msgstr "Der Rabatt 2 muss kleiner oder gleich 100% sein."
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount3_limit
msgid "Discount 3 must be lower or equal than 100%."
msgstr "Der Rabatt 3 muss kleiner oder gleich 100% sein."
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discounting_type
msgid "Discounting Type"
msgstr "Rabattierungstyp"
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__multiplicative
msgid "Multiplicative"
msgstr "Multiplikativ"
#. module: sale_triple_discount
#. odoo-python
#: code:addons/sale_triple_discount/models/sale_order_line.py:0
#, python-format
msgid "Sale order line %(name)s has unknown discounting type %(dic_type)s"
msgstr ""
"Verkaufsauftragszeile %(name)s hat unbekannte Rabattierungsart %(dic_type)s"
#. module: sale_triple_discount
#: model:ir.model,name:sale_triple_discount.model_sale_order_line
msgid "Sales Order Line"
msgstr "Auftragsposition"
#. module: sale_triple_discount
#: model:ir.model.fields,help:sale_triple_discount.field_sale_order_line__discounting_type
msgid ""
"Specifies whether discounts should be additive or multiplicative.\n"
"Additive discounts are summed first and then applied.\n"
"Multiplicative discounts are applied sequentially.\n"
"Multiplicative discounts are default"
msgstr ""
"Gibt an, ob Rabatte additiv oder multiplikativ sein sollen.\n"
"Additive Rabatte werden zuerst summiert und dann angewendet.\n"
"Multiplikative Rabatte werden nacheinander angewandt.\n"
"Multiplikative Rabatte sind Standard"
#, fuzzy
#~ msgid "Sale Order"
#~ msgstr "Auftragsposition"

View file

@ -0,0 +1,96 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_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-23 01:52+0000\n"
"PO-Revision-Date: 2023-07-25 12: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: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 2 (%)</span>"
msgstr "<span>Desc. 2 (%)</span>"
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 3 (%)</span>"
msgstr "<span>Desc. 3 (%)</span>"
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__additive
msgid "Additive"
msgstr "Aditivo"
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount2
msgid "Disc. 2 (%)"
msgstr "Descuento. 2 (%)"
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount3
msgid "Disc. 3 (%)"
msgstr "Descuento. 3 (%)"
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount2_limit
msgid "Discount 2 must be lower or equal than 100%."
msgstr "El descuento 2 debe ser menor o igual a 100%."
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount3_limit
msgid "Discount 3 must be lower or equal than 100%."
msgstr "El descuento 3 debe ser menor o igual a 100%."
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discounting_type
msgid "Discounting Type"
msgstr "Tipo de descuento"
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__multiplicative
msgid "Multiplicative"
msgstr "Multiplicativo"
#. module: sale_triple_discount
#. odoo-python
#: code:addons/sale_triple_discount/models/sale_order_line.py:0
#, python-format
msgid "Sale order line %(name)s has unknown discounting type %(dic_type)s"
msgstr ""
"La línea del pedido de venta %(name)s tiene un tipo de descuento desconocido "
"%(dic_type)s"
#. module: sale_triple_discount
#: model:ir.model,name:sale_triple_discount.model_sale_order_line
msgid "Sales Order Line"
msgstr "Línea de pedido de venta"
#. module: sale_triple_discount
#: model:ir.model.fields,help:sale_triple_discount.field_sale_order_line__discounting_type
msgid ""
"Specifies whether discounts should be additive or multiplicative.\n"
"Additive discounts are summed first and then applied.\n"
"Multiplicative discounts are applied sequentially.\n"
"Multiplicative discounts are default"
msgstr ""
"Especifica si los descuentos deben ser aditivos o multiplicativos. \n"
"Los descuentos aditivos primero se suman y luego se aplican. \n"
"Los descuentos multiplicativos se aplican secuencialmente. \n"
"Por defecto, los descuentos son multiplicativos"
#, fuzzy
#~ msgid "Sale Order"
#~ msgstr "Línea de pedido de venta"

View file

@ -0,0 +1,89 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_triple_discount
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2023-02-14 18:22+0000\n"
"Last-Translator: Jesús Alan Ramos Rodríguez <alan.ramos@jarsa.com.mx>\n"
"Language-Team: none\n"
"Language: es_MX\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.14.1\n"
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 2 (%)</span>"
msgstr "<span>Desc. 2 (%)</span>"
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 3 (%)</span>"
msgstr "<span>Desc. 3 (%)</span>"
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__additive
msgid "Additive"
msgstr "Aditivo"
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount2
msgid "Disc. 2 (%)"
msgstr "Desc. 2 (%)"
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount3
msgid "Disc. 3 (%)"
msgstr "Desc. 3 (%)"
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount2_limit
msgid "Discount 2 must be lower or equal than 100%."
msgstr "El descuento 2 debe ser inferior o igual al 100%."
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount3_limit
msgid "Discount 3 must be lower or equal than 100%."
msgstr "El descuento 3 debe ser inferior o igual al 100%."
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discounting_type
msgid "Discounting Type"
msgstr "Tipo de descuento"
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__multiplicative
msgid "Multiplicative"
msgstr "Multiplicativo"
#. module: sale_triple_discount
#. odoo-python
#: code:addons/sale_triple_discount/models/sale_order_line.py:0
#, python-format
msgid "Sale order line %(name)s has unknown discounting type %(dic_type)s"
msgstr ""
"La línea de orden de venta %(name)s tiene un tipo de descuento desconocido "
"%(dic_type)s"
#. module: sale_triple_discount
#: model:ir.model,name:sale_triple_discount.model_sale_order_line
msgid "Sales Order Line"
msgstr "Línea de orden de venta"
#. module: sale_triple_discount
#: model:ir.model.fields,help:sale_triple_discount.field_sale_order_line__discounting_type
msgid ""
"Specifies whether discounts should be additive or multiplicative.\n"
"Additive discounts are summed first and then applied.\n"
"Multiplicative discounts are applied sequentially.\n"
"Multiplicative discounts are default"
msgstr ""
"Especifica si los descuentos deben ser aditivos o multiplicativos.\n"
"Los descuentos adicionales se suman primero y luego se aplican.\n"
"Los descuentos multiplicativos se aplican secuencialmente.\n"
"Los descuentos multiplicativos son predeterminados"

View file

@ -0,0 +1,90 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_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-23 01:52+0000\n"
"PO-Revision-Date: 2017-11-23 01:52+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Spanish (Venezuela) (https://www.transifex.com/oca/"
"teams/23907/es_VE/)\n"
"Language: es_VE\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: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 2 (%)</span>"
msgstr ""
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 3 (%)</span>"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__additive
msgid "Additive"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount2
msgid "Disc. 2 (%)"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount3
msgid "Disc. 3 (%)"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount2_limit
msgid "Discount 2 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount3_limit
msgid "Discount 3 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discounting_type
msgid "Discounting Type"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__multiplicative
msgid "Multiplicative"
msgstr ""
#. module: sale_triple_discount
#. odoo-python
#: code:addons/sale_triple_discount/models/sale_order_line.py:0
#, python-format
msgid "Sale order line %(name)s has unknown discounting type %(dic_type)s"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model,name:sale_triple_discount.model_sale_order_line
msgid "Sales Order Line"
msgstr "Línea de pedido de venta"
#. module: sale_triple_discount
#: model:ir.model.fields,help:sale_triple_discount.field_sale_order_line__discounting_type
msgid ""
"Specifies whether discounts should be additive or multiplicative.\n"
"Additive discounts are summed first and then applied.\n"
"Multiplicative discounts are applied sequentially.\n"
"Multiplicative discounts are default"
msgstr ""
#, fuzzy
#~ msgid "Sale Order"
#~ msgstr "Línea de pedido de venta"

View file

@ -0,0 +1,90 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_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-23 01:52+0000\n"
"PO-Revision-Date: 2025-05-16 10:23+0000\n"
"Last-Translator: MDgrap <michael.duc@grap.coop>\n"
"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n"
"Language: fr\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 5.10.4\n"
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 2 (%)</span>"
msgstr "<span>Remise.2 (%) </span>"
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 3 (%)</span>"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__additive
msgid "Additive"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount2
msgid "Disc. 2 (%)"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount3
msgid "Disc. 3 (%)"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount2_limit
msgid "Discount 2 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount3_limit
msgid "Discount 3 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discounting_type
msgid "Discounting Type"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__multiplicative
msgid "Multiplicative"
msgstr ""
#. module: sale_triple_discount
#. odoo-python
#: code:addons/sale_triple_discount/models/sale_order_line.py:0
#, python-format
msgid "Sale order line %(name)s has unknown discounting type %(dic_type)s"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model,name:sale_triple_discount.model_sale_order_line
msgid "Sales Order Line"
msgstr "Sales Order Line"
#. module: sale_triple_discount
#: model:ir.model.fields,help:sale_triple_discount.field_sale_order_line__discounting_type
msgid ""
"Specifies whether discounts should be additive or multiplicative.\n"
"Additive discounts are summed first and then applied.\n"
"Multiplicative discounts are applied sequentially.\n"
"Multiplicative discounts are default"
msgstr ""
#, fuzzy
#~ msgid "Sale Order"
#~ msgstr "Sales Order Line"

View file

@ -0,0 +1,90 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_triple_discount
#
# Translators:
# Bole <bole@dajmi5.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-23 01:52+0000\n"
"PO-Revision-Date: 2017-11-23 01:52+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>, 2017\n"
"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 2 (%)</span>"
msgstr ""
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 3 (%)</span>"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__additive
msgid "Additive"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount2
msgid "Disc. 2 (%)"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount3
msgid "Disc. 3 (%)"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount2_limit
msgid "Discount 2 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount3_limit
msgid "Discount 3 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discounting_type
msgid "Discounting Type"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__multiplicative
msgid "Multiplicative"
msgstr ""
#. module: sale_triple_discount
#. odoo-python
#: code:addons/sale_triple_discount/models/sale_order_line.py:0
#, python-format
msgid "Sale order line %(name)s has unknown discounting type %(dic_type)s"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model,name:sale_triple_discount.model_sale_order_line
msgid "Sales Order Line"
msgstr "Stavka ponude"
#. module: sale_triple_discount
#: model:ir.model.fields,help:sale_triple_discount.field_sale_order_line__discounting_type
msgid ""
"Specifies whether discounts should be additive or multiplicative.\n"
"Additive discounts are summed first and then applied.\n"
"Multiplicative discounts are applied sequentially.\n"
"Multiplicative discounts are default"
msgstr ""
#, fuzzy
#~ msgid "Sale Order"
#~ msgstr "Stavka ponude"

View file

@ -0,0 +1,108 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_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-23 01:52+0000\n"
"PO-Revision-Date: 2023-12-01 15:35+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n"
"Language: it\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: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 2 (%)</span>"
msgstr "<span>Sconto 2 (%)</span>"
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 3 (%)</span>"
msgstr "<span>Sconto 3 (%)</span>"
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__additive
msgid "Additive"
msgstr "Additivo"
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount2
msgid "Disc. 2 (%)"
msgstr "Sconto 2 (%)"
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount3
msgid "Disc. 3 (%)"
msgstr "Sconto 3 (%)"
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount2_limit
msgid "Discount 2 must be lower or equal than 100%."
msgstr "Lo sconto 2 deve essere inferiore o uguale al 100%."
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount3_limit
msgid "Discount 3 must be lower or equal than 100%."
msgstr "Lo sconto 3 deve essere inferiore o uguale al 100%."
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discounting_type
msgid "Discounting Type"
msgstr "Tipo di sconto"
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__multiplicative
msgid "Multiplicative"
msgstr "Moltiplicativo"
#. module: sale_triple_discount
#. odoo-python
#: code:addons/sale_triple_discount/models/sale_order_line.py:0
#, python-format
msgid "Sale order line %(name)s has unknown discounting type %(dic_type)s"
msgstr ""
"La riga dell'ordine di vendita %(name)s ha un tipo di sconto sconosciuto "
"%(dic_type)s"
#. module: sale_triple_discount
#: model:ir.model,name:sale_triple_discount.model_sale_order_line
msgid "Sales Order Line"
msgstr "Riga ordine di vendita"
#. module: sale_triple_discount
#: model:ir.model.fields,help:sale_triple_discount.field_sale_order_line__discounting_type
msgid ""
"Specifies whether discounts should be additive or multiplicative.\n"
"Additive discounts are summed first and then applied.\n"
"Multiplicative discounts are applied sequentially.\n"
"Multiplicative discounts are default"
msgstr ""
"Specifica se gli sconti debbano essere additivi o moltiplicativi.\n"
"Gli sconti additivi sono prima sommati e poi applicati.\n"
"Gli sconti moltiplicativi sono applicati in sequenza.\n"
"Gli sconti moltiplicativi sono usati come predefiniti"
#~ msgid "Discount 2 must be lower than 100%."
#~ msgstr "Sconto 2 deve essere inferiore al 100%."
#~ msgid "Discount 3 must be lower than 100%."
#~ msgstr "Sconto 3 deve essere inferiore al 100%."
#~ msgid "Discounting type"
#~ msgstr "Tipo sconto"
#~ msgid "Sale Order"
#~ msgstr "Ordine di vendita"
#, python-format
#~ msgid "Sale order line %s has unknown discounting type %s"
#~ msgstr "La riga ordine di vendita %s ha tipo sconto %s sconosciuto"

View file

@ -0,0 +1,97 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_triple_discount
#
# Translators:
# Peter Hageman <hageman.p@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-23 01:52+0000\n"
"PO-Revision-Date: 2018-06-22 17:01+0000\n"
"Last-Translator: Thomas Pot <t.pot@open2bizz.nl>\n"
"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/"
"teams/23907/nl_NL/)\n"
"Language: nl_NL\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 3.0.1\n"
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 2 (%)</span>"
msgstr ""
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 3 (%)</span>"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__additive
msgid "Additive"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount2
msgid "Disc. 2 (%)"
msgstr "Korting 2 (%)"
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount3
msgid "Disc. 3 (%)"
msgstr "Korting 3 (%)"
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount2_limit
msgid "Discount 2 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount3_limit
msgid "Discount 3 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discounting_type
msgid "Discounting Type"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__multiplicative
msgid "Multiplicative"
msgstr ""
#. module: sale_triple_discount
#. odoo-python
#: code:addons/sale_triple_discount/models/sale_order_line.py:0
#, python-format
msgid "Sale order line %(name)s has unknown discounting type %(dic_type)s"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model,name:sale_triple_discount.model_sale_order_line
msgid "Sales Order Line"
msgstr "Verkooporderregel"
#. module: sale_triple_discount
#: model:ir.model.fields,help:sale_triple_discount.field_sale_order_line__discounting_type
msgid ""
"Specifies whether discounts should be additive or multiplicative.\n"
"Additive discounts are summed first and then applied.\n"
"Multiplicative discounts are applied sequentially.\n"
"Multiplicative discounts are default"
msgstr ""
#~ msgid "Discount 2 must be lower than 100%."
#~ msgstr "Korting 2 moet lager zijn dan 100%."
#~ msgid "Discount 3 must be lower than 100%."
#~ msgstr "Korting 3 moet lager zijn dan 100%."
#, fuzzy
#~ msgid "Sale Order"
#~ msgstr "Verkooporderregel"

View file

@ -0,0 +1,98 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_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-23 01:52+0000\n"
"PO-Revision-Date: 2024-05-29 19:38+0000\n"
"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
"translation.odoo-community.org>\n"
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/"
"23907/pt_BR/)\n"
"Language: pt_BR\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: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 2 (%)</span>"
msgstr "<span>Desc. 2 (%)</span>"
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 3 (%)</span>"
msgstr "<span>Desc. 3 (%)</span>"
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__additive
msgid "Additive"
msgstr "Aditivo"
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount2
msgid "Disc. 2 (%)"
msgstr "Desc. 2 (%)"
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount3
msgid "Disc. 3 (%)"
msgstr "Desc. 3 (%)"
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount2_limit
msgid "Discount 2 must be lower or equal than 100%."
msgstr "O desconto 2 deve ser menor ou igual a 100%."
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount3_limit
msgid "Discount 3 must be lower or equal than 100%."
msgstr "O desconto 3 deve ser menor ou igual a 100%."
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discounting_type
msgid "Discounting Type"
msgstr "Tipo de desconto"
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__multiplicative
msgid "Multiplicative"
msgstr "Multiplicativo"
#. module: sale_triple_discount
#. odoo-python
#: code:addons/sale_triple_discount/models/sale_order_line.py:0
#, python-format
msgid "Sale order line %(name)s has unknown discounting type %(dic_type)s"
msgstr ""
"A linha do pedido de venda %(name)s tem tipo de desconto desconhecido "
"%(dic_type)s"
#. module: sale_triple_discount
#: model:ir.model,name:sale_triple_discount.model_sale_order_line
msgid "Sales Order Line"
msgstr "Linha Pedido de Venda"
#. module: sale_triple_discount
#: model:ir.model.fields,help:sale_triple_discount.field_sale_order_line__discounting_type
msgid ""
"Specifies whether discounts should be additive or multiplicative.\n"
"Additive discounts are summed first and then applied.\n"
"Multiplicative discounts are applied sequentially.\n"
"Multiplicative discounts are default"
msgstr ""
"Especifica se os descontos devem ser aditivos ou multiplicativos.\n"
"Os descontos aditivos são somados primeiro e depois aplicados.\n"
"Os descontos multiplicativos são aplicados sequencialmente.\n"
"Descontos multiplicativos são padrão"
#, fuzzy
#~ msgid "Sale Order"
#~ msgstr "Linha Pedido de Venda"

View file

@ -0,0 +1,90 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_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-23 01:52+0000\n"
"PO-Revision-Date: 2017-11-23 01:52+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Romanian (https://www.transifex.com/oca/teams/23907/ro/)\n"
"Language: ro\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
"2:1));\n"
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 2 (%)</span>"
msgstr ""
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 3 (%)</span>"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__additive
msgid "Additive"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount2
msgid "Disc. 2 (%)"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount3
msgid "Disc. 3 (%)"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount2_limit
msgid "Discount 2 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount3_limit
msgid "Discount 3 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discounting_type
msgid "Discounting Type"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__multiplicative
msgid "Multiplicative"
msgstr ""
#. module: sale_triple_discount
#. odoo-python
#: code:addons/sale_triple_discount/models/sale_order_line.py:0
#, python-format
msgid "Sale order line %(name)s has unknown discounting type %(dic_type)s"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model,name:sale_triple_discount.model_sale_order_line
msgid "Sales Order Line"
msgstr "Linie comandă vânzare"
#. module: sale_triple_discount
#: model:ir.model.fields,help:sale_triple_discount.field_sale_order_line__discounting_type
msgid ""
"Specifies whether discounts should be additive or multiplicative.\n"
"Additive discounts are summed first and then applied.\n"
"Multiplicative discounts are applied sequentially.\n"
"Multiplicative discounts are default"
msgstr ""
#, fuzzy
#~ msgid "Sale Order"
#~ msgstr "Linie comandă vânzare"

View file

@ -0,0 +1,80 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_triple_discount
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.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: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 2 (%)</span>"
msgstr ""
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 3 (%)</span>"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__additive
msgid "Additive"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount2
msgid "Disc. 2 (%)"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount3
msgid "Disc. 3 (%)"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount2_limit
msgid "Discount 2 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount3_limit
msgid "Discount 3 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discounting_type
msgid "Discounting Type"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__multiplicative
msgid "Multiplicative"
msgstr ""
#. module: sale_triple_discount
#. odoo-python
#: code:addons/sale_triple_discount/models/sale_order_line.py:0
#, python-format
msgid "Sale order line %(name)s has unknown discounting type %(dic_type)s"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model,name:sale_triple_discount.model_sale_order_line
msgid "Sales Order Line"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,help:sale_triple_discount.field_sale_order_line__discounting_type
msgid ""
"Specifies whether discounts should be additive or multiplicative.\n"
"Additive discounts are summed first and then applied.\n"
"Multiplicative discounts are applied sequentially.\n"
"Multiplicative discounts are default"
msgstr ""

View file

@ -0,0 +1,90 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_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-23 01:52+0000\n"
"PO-Revision-Date: 2017-11-23 01:52+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
"%100==4 ? 2 : 3);\n"
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 2 (%)</span>"
msgstr ""
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 3 (%)</span>"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__additive
msgid "Additive"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount2
msgid "Disc. 2 (%)"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount3
msgid "Disc. 3 (%)"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount2_limit
msgid "Discount 2 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount3_limit
msgid "Discount 3 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discounting_type
msgid "Discounting Type"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__multiplicative
msgid "Multiplicative"
msgstr ""
#. module: sale_triple_discount
#. odoo-python
#: code:addons/sale_triple_discount/models/sale_order_line.py:0
#, python-format
msgid "Sale order line %(name)s has unknown discounting type %(dic_type)s"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model,name:sale_triple_discount.model_sale_order_line
msgid "Sales Order Line"
msgstr "Postavka prodajnega naloga"
#. module: sale_triple_discount
#: model:ir.model.fields,help:sale_triple_discount.field_sale_order_line__discounting_type
msgid ""
"Specifies whether discounts should be additive or multiplicative.\n"
"Additive discounts are summed first and then applied.\n"
"Multiplicative discounts are applied sequentially.\n"
"Multiplicative discounts are default"
msgstr ""
#, fuzzy
#~ msgid "Sale Order"
#~ msgstr "Postavka prodajnega naloga"

View file

@ -0,0 +1,89 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_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-23 01:52+0000\n"
"PO-Revision-Date: 2017-11-23 01:52+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n"
"Language: tr\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: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 2 (%)</span>"
msgstr ""
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 3 (%)</span>"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__additive
msgid "Additive"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount2
msgid "Disc. 2 (%)"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount3
msgid "Disc. 3 (%)"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount2_limit
msgid "Discount 2 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount3_limit
msgid "Discount 3 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discounting_type
msgid "Discounting Type"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__multiplicative
msgid "Multiplicative"
msgstr ""
#. module: sale_triple_discount
#. odoo-python
#: code:addons/sale_triple_discount/models/sale_order_line.py:0
#, python-format
msgid "Sale order line %(name)s has unknown discounting type %(dic_type)s"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model,name:sale_triple_discount.model_sale_order_line
msgid "Sales Order Line"
msgstr "Satış Siparişi Hattı"
#. module: sale_triple_discount
#: model:ir.model.fields,help:sale_triple_discount.field_sale_order_line__discounting_type
msgid ""
"Specifies whether discounts should be additive or multiplicative.\n"
"Additive discounts are summed first and then applied.\n"
"Multiplicative discounts are applied sequentially.\n"
"Multiplicative discounts are default"
msgstr ""
#, fuzzy
#~ msgid "Sale Order"
#~ msgstr "Satış Siparişi Hattı"

View file

@ -0,0 +1,90 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * sale_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-23 01:52+0000\n"
"PO-Revision-Date: 2017-11-23 01:52+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Turkish (Turkey) (https://www.transifex.com/oca/teams/23907/"
"tr_TR/)\n"
"Language: tr_TR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 2 (%)</span>"
msgstr ""
#. module: sale_triple_discount
#: model_terms:ir.ui.view,arch_db:sale_triple_discount.report_saleorder_document_triple_discount
msgid "<span>Disc. 3 (%)</span>"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__additive
msgid "Additive"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount2
msgid "Disc. 2 (%)"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discount3
msgid "Disc. 3 (%)"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount2_limit
msgid "Discount 2 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.constraint,message:sale_triple_discount.constraint_sale_order_line_discount3_limit
msgid "Discount 3 must be lower or equal than 100%."
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields,field_description:sale_triple_discount.field_sale_order_line__discounting_type
msgid "Discounting Type"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model.fields.selection,name:sale_triple_discount.selection__sale_order_line__discounting_type__multiplicative
msgid "Multiplicative"
msgstr ""
#. module: sale_triple_discount
#. odoo-python
#: code:addons/sale_triple_discount/models/sale_order_line.py:0
#, python-format
msgid "Sale order line %(name)s has unknown discounting type %(dic_type)s"
msgstr ""
#. module: sale_triple_discount
#: model:ir.model,name:sale_triple_discount.model_sale_order_line
msgid "Sales Order Line"
msgstr "Sipariş emri satırı "
#. module: sale_triple_discount
#: model:ir.model.fields,help:sale_triple_discount.field_sale_order_line__discounting_type
msgid ""
"Specifies whether discounts should be additive or multiplicative.\n"
"Additive discounts are summed first and then applied.\n"
"Multiplicative discounts are applied sequentially.\n"
"Multiplicative discounts are default"
msgstr ""
#, fuzzy
#~ msgid "Sale Order"
#~ msgstr "Sipariş emri satırı "

View file

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

View file

@ -0,0 +1,141 @@
# Copyright 2015 ADHOC SA (http://www.adhoc.com.ar)
# Copyright 2017 - 2019 Alex Comba - Agile Business Group
# Copyright 2017 Tecnativa - David Vidal
# Copyright 2018 Simone Rubino - Agile Business Group
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from contextlib import contextmanager
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
class SaleOrderLine(models.Model):
_inherit = "sale.order.line"
discount2 = fields.Float(
string="Disc. 2 (%)",
digits="Discount",
default=0.0,
)
discount3 = fields.Float(
string="Disc. 3 (%)",
digits="Discount",
default=0.0,
)
discounting_type = fields.Selection(
selection=[("additive", "Additive"), ("multiplicative", "Multiplicative")],
default="multiplicative",
required=True,
help="Specifies whether discounts should be additive "
"or multiplicative.\nAdditive discounts are summed first and "
"then applied.\nMultiplicative discounts are applied sequentially.\n"
"Multiplicative discounts are default",
)
def _get_final_discount(self):
self.ensure_one()
if self.discounting_type == "additive":
return self._additive_discount()
elif self.discounting_type == "multiplicative":
return self._multiplicative_discount()
else:
raise ValidationError(
_("Sale order line %(name)s has unknown discounting type %(dic_type)s")
% {"name": self.name, "disc_type": self.discounting_type}
)
def _additive_discount(self):
self.ensure_one()
discount = sum(self[x] or 0.0 for x in self._discount_fields())
if discount <= 0:
return 0
elif discount >= 100:
return 100
return discount
def _multiplicative_discount(self):
self.ensure_one()
discounts = [1 - (self[x] or 0.0) / 100 for x in self._discount_fields()]
final_discount = 1
for discount in discounts:
final_discount *= discount
return 100 - final_discount * 100
@api.model
def _discount_fields(self):
return ["discount", "discount2", "discount3"]
@api.depends("discount2", "discount3", "discounting_type")
def _compute_amount(self):
with self._aggregated_discount() as lines:
res = super(SaleOrderLine, lines)._compute_amount()
return res
_sql_constraints = [
(
"discount2_limit",
"CHECK (discount2 <= 100.0)",
"Discount 2 must be lower or equal than 100%.",
),
(
"discount3_limit",
"CHECK (discount3 <= 100.0)",
"Discount 3 must be lower or equal than 100%.",
),
]
def _prepare_invoice_line(self, **kwargs):
"""
Inherit this method to bring
more discount fields to the invoice lines
"""
res = super()._prepare_invoice_line(**kwargs)
res.update({"discount2": self.discount2, "discount3": self.discount3})
return res
@contextmanager
def _aggregated_discount(self):
"""A context manager to temporarily change the discount value on the
records and restore it after the context is exited. It temporarily
changes the discount value to the aggregated discount value so that
methods that depend on the discount value will use the aggregated
discount value instead of the original one.
"""
discount_field = self._fields["discount"]
# Protect discount field from triggering recompute of totals. We don't want
# to invalidate the cache to avoid to flush the records to the database.
# This is safe because we are going to restore the original value at the end
# of the method.
with self.env.protecting([discount_field], self):
old_values = {}
for line in self:
old_values[line.id] = line.discount
aggregated_discount = line._get_final_discount()
line.update({"discount": aggregated_discount})
yield self.with_context(discount_is_aggregated=True)
for line in self:
if line.id not in old_values:
continue
line.with_context(
restoring_triple_discount=True,
).update({"discount": old_values[line.id]})
def _convert_to_tax_base_line_dict(self):
self.ensure_one()
discount = (
self.discount
if self.env.context.get("discount_is_aggregated")
else self._get_final_discount()
)
return self.env["account.tax"]._convert_to_tax_base_line_dict(
self,
partner=self.order_id.partner_id,
currency=self.order_id.currency_id,
product=self.product_id,
taxes=self.tax_id,
price_unit=self.price_unit,
quantity=self.product_uom_qty,
discount=discount,
price_subtotal=self.price_subtotal,
)

View file

@ -0,0 +1,3 @@
To configure this module, you need to:
* set **Discount on lines** group to be able to see discounts on the lines

View file

@ -0,0 +1,9 @@
* Nicolas Mac Rouillon <@nicomacr>
* Juan José Scarafía <jjs@adhoc.com.ar>
* Alex Comba <alex.comba@agilebg.com>
* David Vidal <david.vidal@tecnativa.com>
* Simone Rubino <simone.rubino@agilebg.com>
* Jacques-Etienne Baudoux (BCIM sprl) <je@bcim.be>
* Pimolnat Suntian <pimolnats@ecosoft.co.th>
* Denis Leemann <denis.leemann@camptocamp.com>
* Manuel Regidor <manuel.regidor@sygel.es>

View file

@ -0,0 +1 @@
This module allows to have three discounts on every sale order line.

View file

@ -0,0 +1,31 @@
Create a new sale order and add discounts in any of the three discount
fields given.
For multiplicative discounts 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
For additive discounts they will be summed first and then applied. For
example, let's have a three 20% discounts:
Unit price: 600.00 ->
- Disc. 1, 2, 3 = 20% + 20% + 20% -> 60%
- Disc. final = 60% -> Amount = 240.00
You can also use negative values to make a charge instead of a discount:
Unit price: 600.00 ->
- Disc. 1 = 50% -> Amount = 300.00
- Disc. 2 = -5% -> Amount = 315.00
Module allows defining additional discount fields and applying them with
other by adding them to the `_discount_fields` method.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,477 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>Sale Triple Discount</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="sale-triple-discount">
<h1 class="title">Sale Triple Discount</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:40de001af546b562ff61df9d9a0d66056dfa2d5b67ada49809bd0cc0ca0f21cf
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<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/OCA/sale-workflow/tree/16.0/sale_triple_discount"><img alt="OCA/sale-workflow" src="https://img.shields.io/badge/github-OCA%2Fsale--workflow-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/sale-workflow-16-0/sale-workflow-16-0-sale_triple_discount"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/sale-workflow&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module allows to have three discounts on every sale order line.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-3">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-4">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-5">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-6">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
<p>To configure this module, you need to:</p>
<ul class="simple">
<li>set <strong>Discount on lines</strong> group to be able to see discounts on the lines</li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
<p>Create a new sale order and add discounts in any of the three discount
fields given.</p>
<p>For multiplicative discounts 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, lets divide by two on every discount:</p>
<p>Unit price: 600.00 -&gt;</p>
<blockquote>
<ul class="simple">
<li>Disc. 1 = 50% -&gt; Amount = 300.00</li>
<li>Disc. 2 = 50% -&gt; Amount = 150.00</li>
<li>Disc. 3 = 50% -&gt; Amount = 75.00</li>
</ul>
</blockquote>
<p>For additive discounts they will be summed first and then applied. For
example, lets have a three 20% discounts:</p>
<p>Unit price: 600.00 -&gt;</p>
<blockquote>
<ul class="simple">
<li>Disc. 1, 2, 3 = 20% + 20% + 20% -&gt; 60%</li>
<li>Disc. final = 60% -&gt; Amount = 240.00</li>
</ul>
</blockquote>
<p>You can also use negative values to make a charge instead of a discount:</p>
<p>Unit price: 600.00 -&gt;</p>
<blockquote>
<ul class="simple">
<li>Disc. 1 = 50% -&gt; Amount = 300.00</li>
<li>Disc. 2 = -5% -&gt; Amount = 315.00</li>
</ul>
</blockquote>
<p>Module allows defining additional discount fields and applying them with
other by adding them to the <cite>_discount_fields</cite> method.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/sale-workflow/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/OCA/sale-workflow/issues/new?body=module:%20sale_triple_discount%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-4">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-5">Authors</a></h2>
<ul class="simple">
<li>ADHOC SA</li>
<li>Agile Business Group</li>
<li>Tecnativa</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-6">Contributors</a></h2>
<ul class="simple">
<li>Nicolas Mac Rouillon &lt;&#64;nicomacr&gt;</li>
<li>Juan José Scarafía &lt;<a class="reference external" href="mailto:jjs&#64;adhoc.com.ar">jjs&#64;adhoc.com.ar</a>&gt;</li>
<li>Alex Comba &lt;<a class="reference external" href="mailto:alex.comba&#64;agilebg.com">alex.comba&#64;agilebg.com</a>&gt;</li>
<li>David Vidal &lt;<a class="reference external" href="mailto:david.vidal&#64;tecnativa.com">david.vidal&#64;tecnativa.com</a>&gt;</li>
<li>Simone Rubino &lt;<a class="reference external" href="mailto:simone.rubino&#64;agilebg.com">simone.rubino&#64;agilebg.com</a>&gt;</li>
<li>Jacques-Etienne Baudoux (BCIM sprl) &lt;<a class="reference external" href="mailto:je&#64;bcim.be">je&#64;bcim.be</a>&gt;</li>
<li>Pimolnat Suntian &lt;<a class="reference external" href="mailto:pimolnats&#64;ecosoft.co.th">pimolnats&#64;ecosoft.co.th</a>&gt;</li>
<li>Denis Leemann &lt;<a class="reference external" href="mailto:denis.leemann&#64;camptocamp.com">denis.leemann&#64;camptocamp.com</a>&gt;</li>
<li>Manuel Regidor &lt;<a class="reference external" href="mailto:manuel.regidor&#64;sygel.es">manuel.regidor&#64;sygel.es</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>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.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/sale-workflow/tree/16.0/sale_triple_discount">OCA/sale-workflow</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

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

View file

@ -0,0 +1,210 @@
# Copyright 2017 Tecnativa - David Vidal
# Copyright 2018 Simone Rubino - Agile Business Group
# Copyright 2022 Manuel Regidor - Sygel Technology
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo.tests import common
class TestSaleOrder(common.TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.partner = cls.env["res.partner"].create({"name": "Mr. Odoo"})
cls.product1 = cls.env["product.product"].create(
{"name": "Test Product 1", "type": "service", "invoice_policy": "order"}
)
cls.product2 = cls.env["product.product"].create(
{"name": "Test Product 2", "type": "service", "invoice_policy": "order"}
)
cls.tax = cls.env["account.tax"].create(
{
"name": "TAX 15%",
"amount_type": "percent",
"type_tax_use": "sale",
"amount": 15.0,
}
)
cls.order = cls.env["sale.order"].create({"partner_id": cls.partner.id})
so_line = cls.env["sale.order.line"]
cls.so_line1 = so_line.create(
{
"order_id": cls.order.id,
"product_id": cls.product1.id,
"name": "Line 1",
"product_uom_qty": 1.0,
"tax_id": [(6, 0, [cls.tax.id])],
"price_unit": 600.0,
}
)
cls.so_line2 = so_line.create(
{
"order_id": cls.order.id,
"product_id": cls.product2.id,
"name": "Line 2",
"product_uom_qty": 10.0,
"tax_id": [(6, 0, [cls.tax.id])],
"price_unit": 60.0,
}
)
def test_01_sale_order_classic_discount(self):
"""Tests with single discount"""
self.so_line1.discount = 50.0
self.so_line2.discount = 75.0
self.assertAlmostEqual(self.so_line1.price_subtotal, 300.0)
self.assertAlmostEqual(self.so_line2.price_subtotal, 150.0)
self.assertAlmostEqual(self.order.amount_untaxed, 450.0)
self.assertAlmostEqual(self.order.amount_tax, 67.5)
# Mix taxed and untaxed:
self.so_line1.tax_id = False
self.assertAlmostEqual(self.order.amount_tax, 22.5)
def test_02_sale_order_simple_triple_discount(self):
"""Tests on a single line"""
self.so_line2.unlink()
# Divide by two on every discount:
self.so_line1.discount = 50.0
self.so_line1.discount2 = 50.0
self.so_line1.discount3 = 50.0
self.assertAlmostEqual(self.so_line1.price_subtotal, 75.0)
self.assertAlmostEqual(self.order.amount_untaxed, 75.0)
self.assertAlmostEqual(self.order.amount_tax, 11.25)
# Unset first discount:
self.so_line1.discount = 0.0
self.assertAlmostEqual(self.so_line1.price_subtotal, 150.0)
self.assertAlmostEqual(self.order.amount_untaxed, 150.0)
self.assertAlmostEqual(self.order.amount_tax, 22.5)
# Set a charge instead:
self.so_line1.discount2 = -50.0
self.assertAlmostEqual(self.so_line1.price_subtotal, 450.0)
self.assertAlmostEqual(self.order.amount_untaxed, 450.0)
self.assertAlmostEqual(self.order.amount_tax, 67.5)
# sale tax total (multiplicative)
tax_totals = self.order.tax_totals
self.assertAlmostEqual(
tax_totals["groups_by_subtotal"]["Untaxed Amount"][0]["tax_group_amount"],
67.5,
)
# set discount_type to additive
self.so_line1.discount = 10.0
self.so_line1.discount2 = 10.0
self.so_line1.discount3 = 10.0
self.so_line1.discounting_type = "additive"
self.assertAlmostEqual(self.so_line1.price_subtotal, 420.0)
self.assertAlmostEqual(self.order.amount_untaxed, 420.0)
self.assertAlmostEqual(self.order.amount_tax, 63.0)
# sale tax total (additive)
tax_totals = self.order.tax_totals
self.assertAlmostEqual(
tax_totals["groups_by_subtotal"]["Untaxed Amount"][0]["tax_group_amount"],
63.0,
)
# set discount over 100%
self.so_line1.discount = 30.0
self.so_line1.discount2 = 70.0
self.so_line1.discount3 = 50.0
self.assertAlmostEqual(self.so_line1.price_subtotal, 0.0)
self.assertAlmostEqual(self.order.amount_untaxed, 0.0)
self.assertAlmostEqual(self.order.amount_tax, 0.0)
# set discount_type to multiplicative
self.so_line1.discount = 50.0
self.so_line1.discount2 = 50.0
self.so_line1.discount3 = 50.0
self.so_line1.discounting_type = "multiplicative"
self.assertAlmostEqual(self.so_line1.price_subtotal, 75.0)
self.assertAlmostEqual(self.order.amount_untaxed, 75.0)
self.assertAlmostEqual(self.order.amount_tax, 11.25)
def test_03_sale_order_complex_triple_discount(self):
"""Tests on multiple lines"""
self.so_line1.discount = 50.0
self.so_line1.discount2 = 50.0
self.so_line1.discount3 = 50.0
self.assertAlmostEqual(self.so_line1.price_subtotal, 75.0)
self.assertAlmostEqual(self.order.amount_untaxed, 675.0)
self.assertAlmostEqual(self.order.amount_tax, 101.25)
# additive discount
self.so_line2.discount3 = 50.0
self.assertAlmostEqual(self.so_line2.price_subtotal, 300.0)
self.assertAlmostEqual(self.order.amount_untaxed, 375.0)
self.assertAlmostEqual(self.order.amount_tax, 56.25)
self.so_line2.discounting_type = "additive"
self.so_line2.discount2 = 10.0
self.assertAlmostEqual(self.so_line2.price_subtotal, 240.0)
self.assertAlmostEqual(self.order.amount_untaxed, 315.0)
self.assertAlmostEqual(self.order.amount_tax, 47.25)
# multiplicative discount
self.so_line2.discount2 = 0.0
self.so_line2.discount3 = 50.0
self.assertAlmostEqual(self.so_line2.price_subtotal, 300.0)
self.assertAlmostEqual(self.order.amount_untaxed, 375.0)
self.assertAlmostEqual(self.order.amount_tax, 56.25)
self.so_line2.discounting_type = "multiplicative"
self.so_line2.discount2 = 10.0
self.assertAlmostEqual(self.so_line2.price_subtotal, 270.0)
self.assertAlmostEqual(self.order.amount_untaxed, 345.0)
self.assertAlmostEqual(self.order.amount_tax, 51.75)
def test_04_sale_order_triple_discount_invoicing(self):
"""When a confirmed order is invoiced, the resultant invoice
should inherit the discounts"""
self.so_line1.discount = 50.0
self.so_line1.discount2 = 50.0
self.so_line1.discount3 = 50.0
self.so_line2.discount3 = 50.0
self.order.action_confirm()
if self.order.state == "waiting_approval":
self.order.action_approve()
self.assertAlmostEqual(self.order.state, "approved")
self.order.action_confirm()
self.order._create_invoices()
invoice = self.order.invoice_ids[0]
self.assertAlmostEqual(
self.so_line1.discount, invoice.invoice_line_ids[0].discount
)
self.assertAlmostEqual(
self.so_line1.discount2, invoice.invoice_line_ids[0].discount2
)
self.assertAlmostEqual(
self.so_line1.discount3, invoice.invoice_line_ids[0].discount3
)
self.assertAlmostEqual(
self.so_line1.price_subtotal, invoice.invoice_line_ids[0].price_subtotal
)
self.assertAlmostEqual(
self.so_line2.discount3, invoice.invoice_line_ids[1].discount3
)
self.assertAlmostEqual(
self.so_line2.price_subtotal, invoice.invoice_line_ids[1].price_subtotal
)
self.assertAlmostEqual(self.order.amount_total, invoice.amount_total)
def test_05_round_globally(self):
"""Tests on multiple lines when 'round_globally' is active"""
self.env.user.company_id.tax_calculation_rounding_method = "round_globally"
self.so_line1.discount = 50.0
self.so_line1.discount2 = 50.0
self.so_line1.discount3 = 50.0
self.assertEqual(self.so_line1.price_subtotal, 75.0)
self.assertEqual(self.order.amount_untaxed, 675.0)
self.assertEqual(self.order.amount_tax, 101.25)
self.so_line2.discount3 = 50.0
self.assertEqual(self.so_line2.price_subtotal, 300.0)
self.assertEqual(self.order.amount_untaxed, 375.0)
self.assertEqual(self.order.amount_tax, 56.25)
def test_06_discount_0(self):
self.so_line1.discounting_type = "additive"
self.so_line1.discount = 0.0
self.so_line1.discount2 = 0.0
self.so_line1.discount3 = 0.0
self.so_line2.discounting_type = "additive"
self.so_line2.discount = 0.0
self.so_line2.discount2 = 0.0
self.so_line2.discount3 = 0.0
self.assertAlmostEqual(self.so_line1.price_subtotal, 600.0)
self.assertAlmostEqual(self.so_line2.price_subtotal, 600.0)
self.assertAlmostEqual(self.order.amount_untaxed, 1200.0)
self.assertAlmostEqual(self.order.amount_tax, 180.0)

View file

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<template
id="report_saleorder_document_triple_discount"
inherit_id="sale.report_saleorder_document"
>
<xpath expr="//t[@t-set='display_discount']" position="after">
<t
t-set="display_discount2"
t-value="any([l.discount2 for l in doc.order_line])"
/>
<t
t-set="display_discount3"
t-value="any([l.discount3 for l in doc.order_line])"
/>
</xpath>
<xpath expr="//table/thead/tr/th[@name='th_discount']" position="after">
<th
t-if="display_discount2"
class="text-right"
groups="product.group_discount_per_so_line"
>
<span>Disc. 2 (%)</span>
</th>
<th
t-if="display_discount3"
class="text-right"
groups="product.group_discount_per_so_line"
>
<span>Disc. 3 (%)</span>
</th>
</xpath>
<xpath expr="//table/tbody//tr//td[@t-if='display_discount']" position="after">
<td
t-if="display_discount2"
class="text-right"
groups="product.group_discount_per_so_line"
>
<span t-field="line.discount2" />
</td>
<td
t-if="display_discount3"
class="text-right"
groups="product.group_discount_per_so_line"
>
<span t-field="line.discount3" />
</td>
</xpath>
</template>
</odoo>

View file

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="sale_order_triple_discount_form_view" model="ir.ui.view">
<field name="name">sale.order.triple.discount.form</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form" />
<field name="arch" type="xml">
<xpath
expr="//field[@name='order_line']//tree//field[@name='discount']"
position="after"
>
<field
name="discount2"
optional="show"
groups="product.group_discount_per_so_line"
/>
<field
name="discount3"
optional="show"
groups="product.group_discount_per_so_line"
/>
<field
name="discounting_type"
optional="hide"
groups="product.group_discount_per_so_line"
/>
</xpath>
<xpath
expr="//field[@name='order_line']//form//div[@name='discount']"
position="after"
>
<label for="discount2" groups="product.group_discount_per_so_line" />
<div name="discount2" groups="product.group_discount_per_so_line">
<field name="discount2" class="oe_inline" /> %
</div>
<label for="discount3" groups="product.group_discount_per_so_line" />
<div name="discount3" groups="product.group_discount_per_so_line">
<field name="discount3" class="oe_inline" /> %
</div>
<label
for="discounting_type"
groups="product.group_discount_per_so_line"
/>
<div
name="discounting_type"
groups="product.group_discount_per_so_line"
>
<field name="discounting_type" class="oe_inline" /> %
</div>
</xpath>
</field>
</record>
</odoo>