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,46 @@
# Purchase order lines with discounts
Odoo addon: purchase_discount
## Installation
```bash
pip install odoo-bringout-oca-purchase-workflow-purchase_discount
```
## Dependencies
This addon depends on:
- purchase_stock
## Manifest Information
- **Name**: Purchase order lines with discounts
- **Version**: 16.0.2.0.3
- **Category**: Purchase Management
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/purchase-workflow](https://github.com/OCA/purchase-workflow) branch 16.0, addon `purchase_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 Purchase_discount Module - purchase_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 purchase_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,5 @@
# Dependencies
This addon depends on:
- [purchase_stock](../../odoo-bringout-oca-ocb-purchase_stock)

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 purchase_discount or install in UI.

View file

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

View file

@ -0,0 +1,15 @@
# Models
Detected core models and extensions in purchase_discount.
```mermaid
classDiagram
class product_supplierinfo
class purchase_order
class purchase_order_line
class res_partner
```
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: purchase_discount. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon purchase_discount
- License: LGPL-3

View file

@ -0,0 +1,25 @@
# Reports
Report definitions and templates in purchase_discount.
```mermaid
classDiagram
class PurchaseReport
Model <|-- PurchaseReport
```
## Available Reports
No named reports found in XML files.
## Report Files
- **__init__.py** (Python logic)
- **purchase_report.py** (Python logic)
## Notes
- Named reports above are accessible through Odoo's reporting menu
- Python files define report logic and data processing
- XML files contain report templates, definitions, and formatting
- Reports are integrated with Odoo's printing and email systems

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 purchase_discount
```

View file

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

View file

@ -0,0 +1,141 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association
===================================
Purchase order lines with discounts
===================================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:c81456deae3988fb4a367ed008e8bf96d21bbbb562fc9c7bb226fa016426b2b9
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpurchase--workflow-lightgray.png?logo=github
:target: https://github.com/OCA/purchase-workflow/tree/16.0/purchase_discount
:alt: OCA/purchase-workflow
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/purchase-workflow-16-0/purchase-workflow-16-0-purchase_discount
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/purchase-workflow&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module allows to define a discount per line in the purchase orders. This
discount can be also negative, interpreting it as an increment.
It also modifies the purchase order report to include the discount field in it.
This module allows to input a discount in the supplier info form, and propagate
it to purchase order lines:
* The discount appears explicitly in purchase orders instead of being directly
discounted in price.
* You can set prices and discounts on the same screen.
.. image:: https://raw.githubusercontent.com/OCA/purchase-workflow/16.0/purchase_discount/static/description/product_supplierinfo_form.png
* A new field default_supplierinfo_discount is added on res.partner model.
This value will be used as the default one, on each supplierinfo of that
supplier.
.. image:: https://raw.githubusercontent.com/OCA/purchase-workflow/16.0/purchase_discount/static/description/res_partner_company_form.png
Note: this setting is a new 'company' setting, unavailable for related
partners, as accounting-related Settings.
.. image:: https://raw.githubusercontent.com/OCA/purchase-workflow/16.0/purchase_discount/static/description/res_partner_individual_form.png
**Table of contents**
.. contents::
:local:
Usage
=====
Go to **Purchase > Products**, open one product, and edit or add a record on
the **Vendors** section of the **Purchase** tab. You will see in the prices
section in the down part a new column called **Discount (%)**. You can enter
here the desired discount for that quantity.
When you make a purchase order for that supplier and that product, discount
will be put automatically.
Known issues / Roadmap
======================
With this module, the *price_unit* field of purchase order line stores the gross price instead of the net price, which is a change in the meaning of
this field. So this module breaks all the other modules that use the *price_unit* field with it's native meaning.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/purchase-workflow/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/purchase-workflow/issues/new?body=module:%20purchase_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
~~~~~~~
* Tiny
* Acysos S.L.
* Tecnativa
* ACSONE SA/NV
* GRAP
Contributors
~~~~~~~~~~~~
* OpenERP S.A.
* Ignacio Ibeas <ignacio@acysos.com>
* Pedro M. Baeza <pedro.baeza@tecnativa.com>
* Jonathan Nemry <jonathan.nemry@acsone.eu>
* Sylvain LE GAL (https://twitter.com/legalsylvain)
* Stefan Rijnhart <stefan@opener.amsterdam>
* `Tecnativa <https://www.tecnativa.com>`_:
* Pedro M. Baeza
* Vicent Cubells <vicent.cubells@tecnativa.com>
* Sudhir Arya <sudhir@erpharbor.com>
* Lorenzo Battistini <https://github.com/eLBati>
* Luisa Miguéns <luisa.miguens@solvos.es>
* Vishnu Vanneri <vanneri.odoodev@gmail.com>
* Moaad Bourhim <moaad.bourhim@gmail.com>
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
This module is part of the `OCA/purchase-workflow <https://github.com/OCA/purchase-workflow/tree/16.0/purchase_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,2 @@
from . import models
from . import report

View file

@ -0,0 +1,26 @@
# © 2004-2009 Tiny SPRL (<http://tiny.be>).
# © 2014-2017 Tecnativa - Pedro M. Baeza
# © 2016 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
{
"name": "Purchase order lines with discounts",
"author": "Tiny, "
"Acysos S.L., "
"Tecnativa, "
"ACSONE SA/NV,"
"GRAP,"
"Odoo Community Association (OCA)",
"version": "16.0.2.0.3",
"category": "Purchase Management",
"website": "https://github.com/OCA/purchase-workflow",
"depends": ["purchase_stock"],
"data": [
"views/purchase_discount_view.xml",
"views/report_purchaseorder.xml",
"views/product_supplierinfo_view.xml",
"views/res_partner_view.xml",
],
"license": "AGPL-3",
"installable": True,
"images": ["images/purchase_discount.png"],
}

View file

@ -0,0 +1,89 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_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: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.report_purchaseorder_document
msgid "<strong>Disc. (%)</strong>"
msgstr "<strong>Pop. (%)</strong>"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_res_partner
msgid "Contact"
msgstr "Kontakt"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_users__default_supplierinfo_discount
msgid "Default Supplier Discount (%)"
msgstr "Standardni popust dobavljača (%)"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_product_supplierinfo__discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_order_line__discount
msgid "Discount (%)"
msgstr "Popust (%)"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_purchase_order_line_discount_limit
msgid "Discount must be lower than 100%."
msgstr "Popust mora biti manji od 100%."
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "Discount-related settings are managed on"
msgstr "Postavke vezane za popust se upravljaju na"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order
msgid "Purchase Order"
msgstr "Nalog za nabavu"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order_line
msgid "Purchase Order Line"
msgstr "Stavka naloga za nabavu"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_report
msgid "Purchase Report"
msgstr "Izvještaj o nabavkama"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr "Cjenik dobavljača"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_product_supplierinfo_discount_limit
msgid "Supplier discount must be lower than 100%."
msgstr "Popust dobavljača mora biti manji od 100%."
#. module: purchase_discount
#: model:ir.model.fields,help:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,help:purchase_discount.field_res_users__default_supplierinfo_discount
msgid ""
"This value will be used as the default one, for each new supplierinfo line "
"depending on that supplier."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_report__discount
msgid "Total discount"
msgstr "Ukupni popust"
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "the parent company"
msgstr "nadređena kompanija"

View file

@ -0,0 +1,103 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_discount
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-02-23 17:50+0000\n"
"PO-Revision-Date: 2020-07-22 12:19+0000\n"
"Last-Translator: c2cdidier <didier.donze@camptocamp.com>\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 3.10\n"
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.report_purchaseorder_document
msgid "<strong>Disc. (%)</strong>"
msgstr "<strong>Rabatt (%)</strong>"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_res_partner
msgid "Contact"
msgstr "Kontakt"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_users__default_supplierinfo_discount
msgid "Default Supplier Discount (%)"
msgstr "Standardlieferantenrabatt (%)"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_product_supplierinfo__discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_order_line__discount
msgid "Discount (%)"
msgstr "Rabatt (%)"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_purchase_order_line_discount_limit
msgid "Discount must be lower than 100%."
msgstr "Der Rabatt muss kleiner als 100% sein."
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "Discount-related settings are managed on"
msgstr "Rabatt-bezogene Einstellungen werden verwaltet auf"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order
msgid "Purchase Order"
msgstr "Bestellung"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order_line
msgid "Purchase Order Line"
msgstr "Bestellposition"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_report
msgid "Purchase Report"
msgstr "Einkaufsbericht"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr "Lieferanten Preisliste"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_product_supplierinfo_discount_limit
msgid "Supplier discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,help:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,help:purchase_discount.field_res_users__default_supplierinfo_discount
msgid ""
"This value will be used as the default one, for each new supplierinfo line "
"depending on that supplier."
msgstr ""
"Dieser Wert wird als Standardwert für jede neue Lieferanten-Info-Zeile in "
"Zusammenhang mit diesem Lieferanten verwendet."
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_report__discount
msgid "Total discount"
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "the parent company"
msgstr "Die Muttergesellschaft"
#~ msgid "Stock Move"
#~ msgstr "Lagerbewegung"
#~ msgid "Stock Rule"
#~ msgstr "Lagerregel"

View file

@ -0,0 +1,95 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_discount
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-02-23 17:50+0000\n"
"PO-Revision-Date: 2018-02-23 17:50+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2018\n"
"Language-Team: Greek (Greece) (https://www.transifex.com/oca/teams/23907/"
"el_GR/)\n"
"Language: el_GR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.report_purchaseorder_document
msgid "<strong>Disc. (%)</strong>"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_res_partner
msgid "Contact"
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_users__default_supplierinfo_discount
msgid "Default Supplier Discount (%)"
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_product_supplierinfo__discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_order_line__discount
msgid "Discount (%)"
msgstr "Έκπτωση (%)"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_purchase_order_line_discount_limit
msgid "Discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "Discount-related settings are managed on"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order
msgid "Purchase Order"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order_line
msgid "Purchase Order Line"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_report
msgid "Purchase Report"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr ""
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_product_supplierinfo_discount_limit
msgid "Supplier discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,help:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,help:purchase_discount.field_res_users__default_supplierinfo_discount
msgid ""
"This value will be used as the default one, for each new supplierinfo line "
"depending on that supplier."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_report__discount
msgid "Total discount"
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "the parent company"
msgstr ""

View file

@ -0,0 +1,100 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_discount
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-02-23 17:50+0000\n"
"PO-Revision-Date: 2023-07-20 18:09+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.report_purchaseorder_document
msgid "<strong>Disc. (%)</strong>"
msgstr "<strong>Desc. (%)</strong>"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_res_partner
msgid "Contact"
msgstr "Contacto"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_users__default_supplierinfo_discount
msgid "Default Supplier Discount (%)"
msgstr "Descuento por defecto del proveedor (%)"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_product_supplierinfo__discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_order_line__discount
msgid "Discount (%)"
msgstr "(%) Descuento"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_purchase_order_line_discount_limit
msgid "Discount must be lower than 100%."
msgstr "El descuento debe ser menor al 100%."
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "Discount-related settings are managed on"
msgstr "Los ajustes relacionados con los descuentos se gestionan en"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order
msgid "Purchase Order"
msgstr "Pedido de compra"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order_line
msgid "Purchase Order Line"
msgstr "Línea de pedido de compra"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_report
msgid "Purchase Report"
msgstr "Informe de Compras"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr "Lista de precios de proveedores"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_product_supplierinfo_discount_limit
msgid "Supplier discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,help:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,help:purchase_discount.field_res_users__default_supplierinfo_discount
msgid ""
"This value will be used as the default one, for each new supplierinfo line "
"depending on that supplier."
msgstr ""
"Este valor se utilizará como valor por defecto, para cada nueva línea de "
"información del proveedor que dependa de ese proveedor."
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_report__discount
msgid "Total discount"
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "the parent company"
msgstr "la compañía parental"
#~ msgid "Stock Move"
#~ msgstr "movimiento de existencias"

View file

@ -0,0 +1,97 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_discount
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-02-23 17:50+0000\n"
"PO-Revision-Date: 2018-02-23 17:50+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2018\n"
"Language-Team: Spanish (Mexico) (https://www.transifex.com/oca/teams/23907/"
"es_MX/)\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"
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.report_purchaseorder_document
msgid "<strong>Disc. (%)</strong>"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_res_partner
msgid "Contact"
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_users__default_supplierinfo_discount
msgid "Default Supplier Discount (%)"
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_product_supplierinfo__discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_order_line__discount
msgid "Discount (%)"
msgstr ""
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_purchase_order_line_discount_limit
msgid "Discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "Discount-related settings are managed on"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order
#, fuzzy
msgid "Purchase Order"
msgstr "Línea de orden de compra"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order_line
msgid "Purchase Order Line"
msgstr "Línea de orden de compra"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_report
#, fuzzy
msgid "Purchase Report"
msgstr "Línea de orden de compra"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr ""
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_product_supplierinfo_discount_limit
msgid "Supplier discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,help:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,help:purchase_discount.field_res_users__default_supplierinfo_discount
msgid ""
"This value will be used as the default one, for each new supplierinfo line "
"depending on that supplier."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_report__discount
msgid "Total discount"
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "the parent company"
msgstr ""

View file

@ -0,0 +1,107 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_discount
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2018
# Quentin THEURET <odoo@kerpeo.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-02-23 17:50+0000\n"
"PO-Revision-Date: 2023-11-02 12:36+0000\n"
"Last-Translator: Alexis de Lattre <alexis@via.ecp.fr>\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 4.17\n"
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.report_purchaseorder_document
msgid "<strong>Disc. (%)</strong>"
msgstr "<strong>Rem. (%)</strong>"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_res_partner
msgid "Contact"
msgstr "Contact"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_users__default_supplierinfo_discount
msgid "Default Supplier Discount (%)"
msgstr "Remise fournisseur par défaut (%)"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_product_supplierinfo__discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_order_line__discount
msgid "Discount (%)"
msgstr "Remise (%)"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_purchase_order_line_discount_limit
msgid "Discount must be lower than 100%."
msgstr "La remise doit être inférieure à 100%."
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "Discount-related settings are managed on"
msgstr "La configuration des remises se fait sur"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order
msgid "Purchase Order"
msgstr "Commandes fournisseur"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order_line
msgid "Purchase Order Line"
msgstr "Ligne de commande fournisseur"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_report
msgid "Purchase Report"
msgstr "Rapport des commandes fournisseur"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr "Liste de prix fournisseur"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_product_supplierinfo_discount_limit
msgid "Supplier discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,help:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,help:purchase_discount.field_res_users__default_supplierinfo_discount
msgid ""
"This value will be used as the default one, for each new supplierinfo line "
"depending on that supplier."
msgstr ""
"Cette valeur sera utilisée comme valeur par défaut pour chaque nouvelle "
"information fournisseur de ce fournisseur."
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_report__discount
msgid "Total discount"
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "the parent company"
msgstr "la société parente"
#~ msgid "Stock Move"
#~ msgstr "Mouvement de stock"
#~ msgid "Stock Rule"
#~ msgstr "Règle de stock"
#~ msgid "Invoice"
#~ msgstr "Facture"

View file

@ -0,0 +1,99 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_discount
#
# Translators:
# leemannd <leemannd@gmail.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-29 16:07+0000\n"
"PO-Revision-Date: 2016-11-29 16:07+0000\n"
"Last-Translator: leemannd <leemannd@gmail.com>, 2016\n"
"Language-Team: French (Switzerland) (https://www.transifex.com/oca/"
"teams/23907/fr_CH/)\n"
"Language: fr_CH\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.report_purchaseorder_document
msgid "<strong>Disc. (%)</strong>"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_res_partner
msgid "Contact"
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_users__default_supplierinfo_discount
msgid "Default Supplier Discount (%)"
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_product_supplierinfo__discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_order_line__discount
msgid "Discount (%)"
msgstr ""
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_purchase_order_line_discount_limit
msgid "Discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "Discount-related settings are managed on"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order
msgid "Purchase Order"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order_line
msgid "Purchase Order Line"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_report
msgid "Purchase Report"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr ""
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_product_supplierinfo_discount_limit
msgid "Supplier discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,help:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,help:purchase_discount.field_res_users__default_supplierinfo_discount
msgid ""
"This value will be used as the default one, for each new supplierinfo line "
"depending on that supplier."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_report__discount
msgid "Total discount"
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "the parent company"
msgstr ""
#, fuzzy
#~ msgid "Invoice"
#~ msgstr "Ligne de facture"

View file

@ -0,0 +1,97 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_discount
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2021-04-11 17:46+0000\n"
"Last-Translator: Yves Le Doeuff <yld@alliasys.fr>\n"
"Language-Team: none\n"
"Language: fr_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 4.3.2\n"
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.report_purchaseorder_document
msgid "<strong>Disc. (%)</strong>"
msgstr "<strong>Remise (%)</strong>"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_res_partner
msgid "Contact"
msgstr "Contact"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_users__default_supplierinfo_discount
msgid "Default Supplier Discount (%)"
msgstr "Remise fournisseur par défaut (%)"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_product_supplierinfo__discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_order_line__discount
msgid "Discount (%)"
msgstr "Remise (%)"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_purchase_order_line_discount_limit
msgid "Discount must be lower than 100%."
msgstr "La remise doit être inférieure à 100%."
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "Discount-related settings are managed on"
msgstr "Paramètres des remises sont gérés sur"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order
msgid "Purchase Order"
msgstr "Commandes d'achat"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order_line
msgid "Purchase Order Line"
msgstr "Ligne de commande d'achat"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_report
msgid "Purchase Report"
msgstr "Rapport des commandes"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr "Liste de prix fournisseur"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_product_supplierinfo_discount_limit
msgid "Supplier discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,help:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,help:purchase_discount.field_res_users__default_supplierinfo_discount
msgid ""
"This value will be used as the default one, for each new supplierinfo line "
"depending on that supplier."
msgstr ""
"Cette valeur sera utilisée comme valeur par défaut pour chaque nouvelle "
"information fournisseur de ce fournisseur."
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_report__discount
msgid "Total discount"
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "the parent company"
msgstr "Société parente"
#~ msgid "Stock Move"
#~ msgstr "Mouvement de stock"

View file

@ -0,0 +1,100 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_discount
#
# Translators:
# Bole <bole@dajmi5.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-25 03:39+0000\n"
"PO-Revision-Date: 2025-02-24 17:06+0000\n"
"Last-Translator: uvid-gordana <gordana@uvid.hr>\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"
"X-Generator: Weblate 5.6.2\n"
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.report_purchaseorder_document
msgid "<strong>Disc. (%)</strong>"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_res_partner
msgid "Contact"
msgstr "Kontakt"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_users__default_supplierinfo_discount
msgid "Default Supplier Discount (%)"
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_product_supplierinfo__discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_order_line__discount
msgid "Discount (%)"
msgstr "Popust (%)"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_purchase_order_line_discount_limit
msgid "Discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "Discount-related settings are managed on"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order
msgid "Purchase Order"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order_line
msgid "Purchase Order Line"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_report
msgid "Purchase Report"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr ""
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_product_supplierinfo_discount_limit
msgid "Supplier discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,help:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,help:purchase_discount.field_res_users__default_supplierinfo_discount
msgid ""
"This value will be used as the default one, for each new supplierinfo line "
"depending on that supplier."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_report__discount
msgid "Total discount"
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "the parent company"
msgstr ""
#, fuzzy
#~ msgid "Invoice"
#~ msgstr "Stavka računa"

View file

@ -0,0 +1,103 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_discount
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-02-23 17:50+0000\n"
"PO-Revision-Date: 2025-06-23 11:25+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 5.10.4\n"
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.report_purchaseorder_document
msgid "<strong>Disc. (%)</strong>"
msgstr "<strong>Sc. (%)</strong>"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_res_partner
msgid "Contact"
msgstr "Contatto"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_users__default_supplierinfo_discount
msgid "Default Supplier Discount (%)"
msgstr "Sconto Default Fornitore (%)"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_product_supplierinfo__discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_order_line__discount
msgid "Discount (%)"
msgstr "Sconto (%)"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_purchase_order_line_discount_limit
msgid "Discount must be lower than 100%."
msgstr "Lo sconto deve essere minore del 100%."
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "Discount-related settings are managed on"
msgstr "Le opzioni sugli sconti sono gestite su"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order
msgid "Purchase Order"
msgstr "Ordine di acquisto"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order_line
msgid "Purchase Order Line"
msgstr "Riga ordine di acquisto"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_report
msgid "Purchase Report"
msgstr "Resoconto di acquisto"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr "Listino prezzi fornitore"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_product_supplierinfo_discount_limit
msgid "Supplier discount must be lower than 100%."
msgstr "Lo sconto fornitore deve essere inferiore al 100%."
#. module: purchase_discount
#: model:ir.model.fields,help:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,help:purchase_discount.field_res_users__default_supplierinfo_discount
msgid ""
"This value will be used as the default one, for each new supplierinfo line "
"depending on that supplier."
msgstr ""
"Questo valore sarà usato come default, per ogni nuova riga fornitore "
"dipendente da quel fornitore."
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_report__discount
msgid "Total discount"
msgstr "Sconto totale"
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "the parent company"
msgstr "l'azienda madre"
#~ msgid "Stock Move"
#~ msgstr "Movimento di magazzino"
#~ msgid "Stock Rule"
#~ msgstr "Regola Stock"

View file

@ -0,0 +1,90 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_discount
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: 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"
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.report_purchaseorder_document
msgid "<strong>Disc. (%)</strong>"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_res_partner
msgid "Contact"
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_users__default_supplierinfo_discount
msgid "Default Supplier Discount (%)"
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_product_supplierinfo__discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_order_line__discount
msgid "Discount (%)"
msgstr ""
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_purchase_order_line_discount_limit
msgid "Discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "Discount-related settings are managed on"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order
msgid "Purchase Order"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order_line
msgid "Purchase Order Line"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_report
msgid "Purchase Report"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr ""
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_product_supplierinfo_discount_limit
msgid "Supplier discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,help:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,help:purchase_discount.field_res_users__default_supplierinfo_discount
msgid ""
"This value will be used as the default one, for each new supplierinfo line "
"depending on that supplier."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_report__discount
msgid "Total discount"
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "the parent company"
msgstr ""

View file

@ -0,0 +1,102 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_discount
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-02-23 17:50+0000\n"
"PO-Revision-Date: 2024-05-29 18:36+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: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.report_purchaseorder_document
msgid "<strong>Disc. (%)</strong>"
msgstr "<strong>Desc. (%)</strong>"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_res_partner
msgid "Contact"
msgstr "Contato"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_users__default_supplierinfo_discount
msgid "Default Supplier Discount (%)"
msgstr "Desconto padrão do fornecedor (%)"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_product_supplierinfo__discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_order_line__discount
msgid "Discount (%)"
msgstr "Desconto (%)"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_purchase_order_line_discount_limit
msgid "Discount must be lower than 100%."
msgstr "O desconto deve ser inferior a 100%."
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "Discount-related settings are managed on"
msgstr "As configurações relacionadas a descontos são gerenciadas em"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order
msgid "Purchase Order"
msgstr "Pedido de Compra"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order_line
msgid "Purchase Order Line"
msgstr "Linha do Pedido de Compra"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_report
msgid "Purchase Report"
msgstr "Relatório de Compra"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr "Lista de preços do fornecedor"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_product_supplierinfo_discount_limit
msgid "Supplier discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,help:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,help:purchase_discount.field_res_users__default_supplierinfo_discount
msgid ""
"This value will be used as the default one, for each new supplierinfo line "
"depending on that supplier."
msgstr ""
"Este valor será usado como padrão, para cada nova linha de informações do "
"fornecedor dependendo desse fornecedor."
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_report__discount
msgid "Total discount"
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "the parent company"
msgstr "A empresa matriz"
#~ msgid "Stock Move"
#~ msgstr "Movimentação de estoque"

View file

@ -0,0 +1,99 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_discount
#
# Translators:
# Pedro Castro Silva <pedrocs@sossia.pt>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-12-03 04:07+0000\n"
"PO-Revision-Date: 2016-12-03 04:07+0000\n"
"Last-Translator: Pedro Castro Silva <pedrocs@sossia.pt>, 2016\n"
"Language-Team: Portuguese (Portugal) (https://www.transifex.com/oca/"
"teams/23907/pt_PT/)\n"
"Language: pt_PT\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.report_purchaseorder_document
msgid "<strong>Disc. (%)</strong>"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_res_partner
msgid "Contact"
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_users__default_supplierinfo_discount
msgid "Default Supplier Discount (%)"
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_product_supplierinfo__discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_order_line__discount
msgid "Discount (%)"
msgstr ""
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_purchase_order_line_discount_limit
msgid "Discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "Discount-related settings are managed on"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order
msgid "Purchase Order"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order_line
msgid "Purchase Order Line"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_report
msgid "Purchase Report"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr ""
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_product_supplierinfo_discount_limit
msgid "Supplier discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,help:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,help:purchase_discount.field_res_users__default_supplierinfo_discount
msgid ""
"This value will be used as the default one, for each new supplierinfo line "
"depending on that supplier."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_report__discount
msgid "Total discount"
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "the parent company"
msgstr ""
#, fuzzy
#~ msgid "Invoice"
#~ msgstr "Linha da Fatura"

View file

@ -0,0 +1,89 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_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: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.report_purchaseorder_document
msgid "<strong>Disc. (%)</strong>"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_res_partner
msgid "Contact"
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_users__default_supplierinfo_discount
msgid "Default Supplier Discount (%)"
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_product_supplierinfo__discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_order_line__discount
msgid "Discount (%)"
msgstr ""
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_purchase_order_line_discount_limit
msgid "Discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "Discount-related settings are managed on"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order
msgid "Purchase Order"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order_line
msgid "Purchase Order Line"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_report
msgid "Purchase Report"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr ""
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_product_supplierinfo_discount_limit
msgid "Supplier discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,help:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,help:purchase_discount.field_res_users__default_supplierinfo_discount
msgid ""
"This value will be used as the default one, for each new supplierinfo line "
"depending on that supplier."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_report__discount
msgid "Total discount"
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "the parent company"
msgstr ""

View file

@ -0,0 +1,97 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_discount
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-25 03:39+0000\n"
"PO-Revision-Date: 2016-11-25 03:39+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2016\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: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.report_purchaseorder_document
msgid "<strong>Disc. (%)</strong>"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_res_partner
msgid "Contact"
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_users__default_supplierinfo_discount
msgid "Default Supplier Discount (%)"
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_product_supplierinfo__discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_order_line__discount
msgid "Discount (%)"
msgstr ""
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_purchase_order_line_discount_limit
msgid "Discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "Discount-related settings are managed on"
msgstr ""
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order
#, fuzzy
msgid "Purchase Order"
msgstr "Postavka nabavnega naloga"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order_line
msgid "Purchase Order Line"
msgstr "Postavka nabavnega naloga"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_report
#, fuzzy
msgid "Purchase Report"
msgstr "Postavka nabavnega naloga"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr ""
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_product_supplierinfo_discount_limit
msgid "Supplier discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,help:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,help:purchase_discount.field_res_users__default_supplierinfo_discount
msgid ""
"This value will be used as the default one, for each new supplierinfo line "
"depending on that supplier."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_report__discount
msgid "Total discount"
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "the parent company"
msgstr ""

View file

@ -0,0 +1,94 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_discount
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-04-15 10:24+0000\n"
"Last-Translator: Betül Öğmen <betulo@eska.biz>\n"
"Language-Team: none\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"
"X-Generator: Weblate 5.10.4\n"
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.report_purchaseorder_document
msgid "<strong>Disc. (%)</strong>"
msgstr "<strong>İnd. (%)</strong>"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_res_partner
msgid "Contact"
msgstr "Kontak"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_users__default_supplierinfo_discount
msgid "Default Supplier Discount (%)"
msgstr "Varsayılan Tedarikçi İndirimi (%)"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_product_supplierinfo__discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_order_line__discount
msgid "Discount (%)"
msgstr "İndirim (%)"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_purchase_order_line_discount_limit
msgid "Discount must be lower than 100%."
msgstr "İndirim %100'den düşük olmalıdır."
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "Discount-related settings are managed on"
msgstr "İndirimle ilgili ayarlar bundan yönetilir"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order
msgid "Purchase Order"
msgstr "Satın Alma Siparişi"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order_line
msgid "Purchase Order Line"
msgstr "Satın Alma Sipariş Satırı"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_report
msgid "Purchase Report"
msgstr "Satın Alma Raporu"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr "Tedarikçi Fiyat Listesi"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_product_supplierinfo_discount_limit
msgid "Supplier discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,help:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,help:purchase_discount.field_res_users__default_supplierinfo_discount
msgid ""
"This value will be used as the default one, for each new supplierinfo line "
"depending on that supplier."
msgstr ""
"Bu değer, bu tedarikçiye bağlı her yeni tedarikçi bilgisi satırı için "
"varsayılan olarak kullanılacaktır."
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_report__discount
msgid "Total discount"
msgstr "Toplam indirim"
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "the parent company"
msgstr "ana şirket"

View file

@ -0,0 +1,101 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * purchase_discount
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2019-09-01 16:00+0000\n"
"Last-Translator: 黎伟杰 <674416404@qq.com>\n"
"Language-Team: none\n"
"Language: zh_CN\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"
"X-Generator: Weblate 3.8\n"
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.report_purchaseorder_document
msgid "<strong>Disc. (%)</strong>"
msgstr "<strong>折扣(%)</strong>"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_res_partner
msgid "Contact"
msgstr "联系人"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,field_description:purchase_discount.field_res_users__default_supplierinfo_discount
msgid "Default Supplier Discount (%)"
msgstr "默认供应商折扣 (%)"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_product_supplierinfo__discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_order_line__discount
msgid "Discount (%)"
msgstr "折扣(%)"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_purchase_order_line_discount_limit
msgid "Discount must be lower than 100%."
msgstr "折扣必须低于100。"
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "Discount-related settings are managed on"
msgstr "与折扣相关的设置进行管理"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order
msgid "Purchase Order"
msgstr "采购订单"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_order_line
msgid "Purchase Order Line"
msgstr "采购订单行"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_purchase_report
msgid "Purchase Report"
msgstr "采购报告"
#. module: purchase_discount
#: model:ir.model,name:purchase_discount.model_product_supplierinfo
msgid "Supplier Pricelist"
msgstr "供应商价格表"
#. module: purchase_discount
#: model:ir.model.constraint,message:purchase_discount.constraint_product_supplierinfo_discount_limit
msgid "Supplier discount must be lower than 100%."
msgstr ""
#. module: purchase_discount
#: model:ir.model.fields,help:purchase_discount.field_res_partner__default_supplierinfo_discount
#: model:ir.model.fields,help:purchase_discount.field_res_users__default_supplierinfo_discount
msgid ""
"This value will be used as the default one, for each new supplierinfo line "
"depending on that supplier."
msgstr "根据供应商的不同,此值将用作每个新供应商信息行的默认值。"
#. module: purchase_discount
#: model:ir.model.fields,field_description:purchase_discount.field_purchase_report__discount
msgid "Total discount"
msgstr ""
#. module: purchase_discount
#: model_terms:ir.ui.view,arch_db:purchase_discount.res_partner_form_view
msgid "the parent company"
msgstr "上级公司"
#~ msgid "Stock Move"
#~ msgstr "库存移动"
#~ msgid "Stock Rule"
#~ msgstr "库存规则"
#~ msgid "Invoice"
#~ msgstr "发票"

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

View file

@ -0,0 +1,3 @@
from . import purchase_order
from . import product_supplierinfo
from . import res_partner

View file

@ -0,0 +1,52 @@
# Copyright 2016 ACSONE SA/NV (<http://acsone.eu>)
# Copyright 2014-2019 Tecnativa - Pedro M. Baeza
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
from odoo import api, fields, models
class ProductSupplierInfo(models.Model):
_inherit = "product.supplierinfo"
discount = fields.Float(
string="Discount (%)",
digits="Discount",
compute="_compute_discount",
store=True,
readonly=False,
)
@api.depends("partner_id")
def _compute_discount(self):
"""Apply the default supplier discount of the selected supplier"""
for record in self:
record.discount = record.partner_id.default_supplierinfo_discount
_sql_constraints = [
(
"discount_limit",
"CHECK (discount <= 100.0)",
"Supplier discount must be lower than 100%.",
)
]
@api.model
def _get_po_to_supplierinfo_synced_fields(self):
"""Overwrite this method for adding other fields to be synchronized
with product.supplierinfo.
"""
return ["discount"]
@api.model_create_multi
def create(self, vals_list):
"""Insert discount (or others) from context from purchase.order's
_add_supplier_to_product method"""
for vals in vals_list:
product_tmpl_id = vals.get("product_tmpl_id")
po_line_map = self.env.context.get("po_line_map", {})
if product_tmpl_id in po_line_map:
po_line = po_line_map[product_tmpl_id]
for field in self._get_po_to_supplierinfo_synced_fields():
if not vals.get(field):
vals[field] = po_line[field]
return super().create(vals_list)

View file

@ -0,0 +1,136 @@
# Copyright 2004-2009 Tiny SPRL (<http://tiny.be>).
# Copyright 2016 ACSONE SA/NV (<http://acsone.eu>)
# Copyright 2015-2019 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
class PurchaseOrder(models.Model):
_inherit = "purchase.order"
def _add_supplier_to_product(self):
"""Insert a mapping of products to PO lines to be picked up
in supplierinfo's create()"""
self.ensure_one()
po_line_map = {
line.product_id.product_tmpl_id.id: line for line in self.order_line
}
return super(
PurchaseOrder, self.with_context(po_line_map=po_line_map)
)._add_supplier_to_product()
class PurchaseOrderLine(models.Model):
_inherit = "purchase.order.line"
# adding discount to depends
@api.depends("discount")
def _compute_amount(self):
return super()._compute_amount()
def _convert_to_tax_base_line_dict(self):
# Inject the new price_unit with discount if there's any. There's an specific
# value in the dictionary for the discount, but we need to include it in the
# price unit for the stock move price unit valuation to be correct
vals = super()._convert_to_tax_base_line_dict()
vals["price_unit"] = self._get_discounted_price_unit()
return vals
discount = fields.Float(string="Discount (%)", digits="Discount")
_sql_constraints = [
(
"discount_limit",
"CHECK (discount <= 100.0)",
"Discount must be lower than 100%.",
)
]
def _get_discounted_price_unit(self):
"""Inheritable method for getting the unit price after applying
discount(s).
:rtype: float
:return: Unit price after discount(s).
"""
self.ensure_one()
if self.discount:
return self.price_unit * (1 - self.discount / 100)
return self.price_unit
def _compute_price_unit_and_date_planned_and_name(self):
"""Get also the discount from the seller. Unfortunately, this requires to
select again the seller to be used, as there isn't any hook to use the already
selected one.
"""
res = super()._compute_price_unit_and_date_planned_and_name()
for line in self.filtered("product_id"):
seller = line.product_id._select_seller(
partner_id=line.partner_id,
quantity=line.product_qty,
date=line.order_id.date_order
and line.order_id.date_order.date()
or fields.Date.context_today(line),
uom_id=line.product_uom,
params={"order_id": line.order_id},
)
line._apply_value_from_seller(seller)
return res
@api.model
def _apply_value_from_seller(self, seller):
"""Overload this function to prepare other data from seller,
like in purchase_triple_discount module"""
if not seller:
return
self.discount = seller.discount
def _prepare_account_move_line(self, move=False):
vals = super()._prepare_account_move_line(move)
if self.env["account.move.line"]._fields.get("discount1", False):
# OCA/account_invoice_triple_discount is installed
vals["discount1"] = self.discount
else:
vals["discount"] = self.discount
return vals
@api.model
def _prepare_purchase_order_line(
self, product_id, product_qty, product_uom, company_id, supplier, po
):
"""Apply the discount to the created purchase order"""
res = super()._prepare_purchase_order_line(
product_id, product_qty, product_uom, company_id, supplier, po
)
partner = supplier.partner_id
uom_po_qty = product_uom._compute_quantity(product_qty, product_id.uom_po_id)
seller = product_id.with_company(company_id)._select_seller(
partner_id=partner,
quantity=uom_po_qty,
date=po.date_order and po.date_order.date(),
uom_id=product_id.uom_po_id,
)
res.update(self._prepare_purchase_order_line_from_seller(seller))
return res
@api.model
def _prepare_purchase_order_line_from_seller(self, seller):
"""Overload this function to prepare other data from seller,
like in purchase_triple_discount module"""
if not seller:
return {}
return {"discount": seller.discount}
def write(self, vals):
res = super().write(vals)
if "discount" in vals or "price_unit" in vals:
for line in self.filtered(lambda l: l.order_id.state == "purchase"):
# Avoid updating kit components' stock.move
moves = line.move_ids.filtered(
lambda s: s.state not in ("cancel", "done")
and s.product_id == line.product_id
)
moves.write({"price_unit": line._get_discounted_price_unit()})
return res

View file

@ -0,0 +1,16 @@
# Copyright 2016 GRAP (http://www.grap.coop)
# Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
from odoo import fields, models
class ResPartner(models.Model):
_inherit = "res.partner"
default_supplierinfo_discount = fields.Float(
string="Default Supplier Discount (%)",
digits="Discount",
help="This value will be used as the default one, for each new"
" supplierinfo line depending on that supplier.",
)

View file

@ -0,0 +1,16 @@
* OpenERP S.A.
* Ignacio Ibeas <ignacio@acysos.com>
* Pedro M. Baeza <pedro.baeza@tecnativa.com>
* Jonathan Nemry <jonathan.nemry@acsone.eu>
* Sylvain LE GAL (https://twitter.com/legalsylvain)
* Stefan Rijnhart <stefan@opener.amsterdam>
* `Tecnativa <https://www.tecnativa.com>`_:
* Pedro M. Baeza
* Vicent Cubells <vicent.cubells@tecnativa.com>
* Sudhir Arya <sudhir@erpharbor.com>
* Lorenzo Battistini <https://github.com/eLBati>
* Luisa Miguéns <luisa.miguens@solvos.es>
* Vishnu Vanneri <vanneri.odoodev@gmail.com>
* Moaad Bourhim <moaad.bourhim@gmail.com>

View file

@ -0,0 +1,26 @@
This module allows to define a discount per line in the purchase orders. This
discount can be also negative, interpreting it as an increment.
It also modifies the purchase order report to include the discount field in it.
This module allows to input a discount in the supplier info form, and propagate
it to purchase order lines:
* The discount appears explicitly in purchase orders instead of being directly
discounted in price.
* You can set prices and discounts on the same screen.
.. image:: ../static/description/product_supplierinfo_form.png
* A new field default_supplierinfo_discount is added on res.partner model.
This value will be used as the default one, on each supplierinfo of that
supplier.
.. image:: ../static/description/res_partner_company_form.png
Note: this setting is a new 'company' setting, unavailable for related
partners, as accounting-related Settings.
.. image:: ../static/description/res_partner_individual_form.png

View file

@ -0,0 +1,2 @@
With this module, the *price_unit* field of purchase order line stores the gross price instead of the net price, which is a change in the meaning of
this field. So this module breaks all the other modules that use the *price_unit* field with it's native meaning.

View file

@ -0,0 +1,7 @@
Go to **Purchase > Products**, open one product, and edit or add a record on
the **Vendors** section of the **Purchase** tab. You will see in the prices
section in the down part a new column called **Discount (%)**. You can enter
here the desired discount for that quantity.
When you make a purchase order for that supplier and that product, discount
will be put automatically.

View file

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

View file

@ -0,0 +1,34 @@
# Copyright 2017 Akretion (Alexis de Lattre <alexis.delattre@akretion.com>)
# Copyright 2017-2019 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class PurchaseReport(models.Model):
_inherit = "purchase.report"
discount = fields.Float(
string="Discount (%)", digits="Discount", group_operator="avg"
)
def _select(self):
res = super()._select()
# There are 3 matches
res = res.replace("l.price_unit", self._get_discounted_price_unit_exp())
res += ", l.discount AS discount"
return res
def _group_by(self):
res = super()._group_by()
res += ", l.discount"
return res
def _get_discounted_price_unit_exp(self):
"""Inheritable method for getting the SQL expression used for
calculating the unit price with discount(s).
:rtype: str
:return: SQL expression for discounted unit price.
"""
return "(1.0 - COALESCE(l.discount, 0.0) / 100.0) * l.price_unit"

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 250 KiB

View file

@ -0,0 +1,483 @@
<!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>README.rst</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">
<a class="reference external image-reference" href="https://odoo-community.org/get-involved?utm_source=readme">
<img alt="Odoo Community Association" src="https://odoo-community.org/readme-banner-image" />
</a>
<div class="section" id="purchase-order-lines-with-discounts">
<h1>Purchase order lines with discounts</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:c81456deae3988fb4a367ed008e8bf96d21bbbb562fc9c7bb226fa016426b2b9
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/purchase-workflow/tree/16.0/purchase_discount"><img alt="OCA/purchase-workflow" src="https://img.shields.io/badge/github-OCA%2Fpurchase--workflow-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/purchase-workflow-16-0/purchase-workflow-16-0-purchase_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/purchase-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 define a discount per line in the purchase orders. This
discount can be also negative, interpreting it as an increment.</p>
<p>It also modifies the purchase order report to include the discount field in it.</p>
<p>This module allows to input a discount in the supplier info form, and propagate
it to purchase order lines:</p>
<ul class="simple">
<li>The discount appears explicitly in purchase orders instead of being directly
discounted in price.</li>
<li>You can set prices and discounts on the same screen.</li>
</ul>
<img alt="https://raw.githubusercontent.com/OCA/purchase-workflow/16.0/purchase_discount/static/description/product_supplierinfo_form.png" src="https://raw.githubusercontent.com/OCA/purchase-workflow/16.0/purchase_discount/static/description/product_supplierinfo_form.png" />
<ul class="simple">
<li>A new field default_supplierinfo_discount is added on res.partner model.
This value will be used as the default one, on each supplierinfo of that
supplier.</li>
</ul>
<img alt="https://raw.githubusercontent.com/OCA/purchase-workflow/16.0/purchase_discount/static/description/res_partner_company_form.png" src="https://raw.githubusercontent.com/OCA/purchase-workflow/16.0/purchase_discount/static/description/res_partner_company_form.png" />
<p>Note: this setting is a new company setting, unavailable for related
partners, as accounting-related Settings.</p>
<img alt="https://raw.githubusercontent.com/OCA/purchase-workflow/16.0/purchase_discount/static/description/res_partner_individual_form.png" src="https://raw.githubusercontent.com/OCA/purchase-workflow/16.0/purchase_discount/static/description/res_partner_individual_form.png" />
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="toc-entry-1">Usage</a></li>
<li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-2">Known issues / Roadmap</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="usage">
<h2><a class="toc-backref" href="#toc-entry-1">Usage</a></h2>
<p>Go to <strong>Purchase &gt; Products</strong>, open one product, and edit or add a record on
the <strong>Vendors</strong> section of the <strong>Purchase</strong> tab. You will see in the prices
section in the down part a new column called <strong>Discount (%)</strong>. You can enter
here the desired discount for that quantity.</p>
<p>When you make a purchase order for that supplier and that product, discount
will be put automatically.</p>
</div>
<div class="section" id="known-issues-roadmap">
<h2><a class="toc-backref" href="#toc-entry-2">Known issues / Roadmap</a></h2>
<p>With this module, the <em>price_unit</em> field of purchase order line stores the gross price instead of the net price, which is a change in the meaning of
this field. So this module breaks all the other modules that use the <em>price_unit</em> field with its native meaning.</p>
</div>
<div class="section" id="bug-tracker">
<h2><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h2>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/purchase-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/purchase-workflow/issues/new?body=module:%20purchase_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">
<h2><a class="toc-backref" href="#toc-entry-4">Credits</a></h2>
<div class="section" id="authors">
<h3><a class="toc-backref" href="#toc-entry-5">Authors</a></h3>
<ul class="simple">
<li>Tiny</li>
<li>Acysos S.L.</li>
<li>Tecnativa</li>
<li>ACSONE SA/NV</li>
<li>GRAP</li>
</ul>
</div>
<div class="section" id="contributors">
<h3><a class="toc-backref" href="#toc-entry-6">Contributors</a></h3>
<ul class="simple">
<li>OpenERP S.A.</li>
<li>Ignacio Ibeas &lt;<a class="reference external" href="mailto:ignacio&#64;acysos.com">ignacio&#64;acysos.com</a>&gt;</li>
<li>Pedro M. Baeza &lt;<a class="reference external" href="mailto:pedro.baeza&#64;tecnativa.com">pedro.baeza&#64;tecnativa.com</a>&gt;</li>
<li>Jonathan Nemry &lt;<a class="reference external" href="mailto:jonathan.nemry&#64;acsone.eu">jonathan.nemry&#64;acsone.eu</a>&gt;</li>
<li>Sylvain LE GAL (<a class="reference external" href="https://twitter.com/legalsylvain">https://twitter.com/legalsylvain</a>)</li>
<li>Stefan Rijnhart &lt;<a class="reference external" href="mailto:stefan&#64;opener.amsterdam">stefan&#64;opener.amsterdam</a>&gt;</li>
<li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
<li>Pedro M. Baeza</li>
<li>Vicent Cubells &lt;<a class="reference external" href="mailto:vicent.cubells&#64;tecnativa.com">vicent.cubells&#64;tecnativa.com</a>&gt;</li>
</ul>
</li>
<li>Sudhir Arya &lt;<a class="reference external" href="mailto:sudhir&#64;erpharbor.com">sudhir&#64;erpharbor.com</a>&gt;</li>
<li>Lorenzo Battistini &lt;<a class="reference external" href="https://github.com/eLBati">https://github.com/eLBati</a>&gt;</li>
<li>Luisa Miguéns &lt;<a class="reference external" href="mailto:luisa.miguens&#64;solvos.es">luisa.miguens&#64;solvos.es</a>&gt;</li>
<li>Vishnu Vanneri &lt;<a class="reference external" href="mailto:vanneri.odoodev&#64;gmail.com">vanneri.odoodev&#64;gmail.com</a>&gt;</li>
<li>Moaad Bourhim &lt;<a class="reference external" href="mailto:moaad.bourhim&#64;gmail.com">moaad.bourhim&#64;gmail.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h3><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h3>
<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/purchase-workflow/tree/16.0/purchase_discount">OCA/purchase-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>
</div>
</body>
</html>

View file

@ -0,0 +1,4 @@
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
from . import test_product_supplierinfo_discount
from . import test_purchase_discount

View file

@ -0,0 +1,171 @@
# Copyright 2018 GRAP - Sylvain Legal
# Copyright 2019 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields
from odoo.tests.common import Form, TransactionCase
from odoo.addons.base.tests.common import DISABLED_MAIL_CONTEXT
class TestProductSupplierinfoDiscount(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env = cls.env(context=dict(cls.env.context, **DISABLED_MAIL_CONTEXT))
cls.supplierinfo_model = cls.env["product.supplierinfo"]
cls.purchase_order_line_model = cls.env["purchase.order.line"]
cls.partner_1 = cls.env.ref("base.res_partner_1")
cls.partner_3 = cls.env.ref("base.res_partner_3")
cls.product = cls.env.ref("product.product_product_6")
cls.supplierinfo = cls.supplierinfo_model.create(
{
"min_qty": 0.0,
"partner_id": cls.partner_3.id,
"product_tmpl_id": cls.product.product_tmpl_id.id,
"discount": 10,
}
)
cls.supplierinfo2 = cls.supplierinfo_model.create(
{
"min_qty": 10.0,
"partner_id": cls.partner_3.id,
"product_tmpl_id": cls.product.product_tmpl_id.id,
"discount": 20,
}
)
cls.purchase_order = cls.env["purchase.order"].create(
{"partner_id": cls.partner_3.id}
)
cls.po_line_1 = cls.purchase_order_line_model.create(
{
"order_id": cls.purchase_order.id,
"product_id": cls.product.id,
"date_planned": fields.Datetime.now(),
"name": "Test",
"product_qty": 1.0,
"product_uom": cls.env.ref("uom.product_uom_categ_unit").id,
"price_unit": 10.0,
}
)
def test_001_purchase_order_partner_3_qty_1(self):
purchase_form = Form(self.purchase_order)
with purchase_form.order_line.edit(0) as line:
line.product_qty = 1.0
self.assertEqual(
line.discount,
10,
"Incorrect discount for product 6 with partner 3 and qty 1: "
"Should be 10%",
)
def test_002_purchase_order_partner_3_qty_10(self):
purchase_form = Form(self.purchase_order)
with purchase_form.order_line.edit(0) as line:
line.product_qty = 10.0
self.assertEqual(
line.discount,
20.0,
"Incorrect discount for product 6 with partner 3 and qty 10: "
"Should be 20%",
)
def test_003_purchase_order_partner_1_qty_1(self):
purchase_form = Form(self.purchase_order)
purchase_form.partner_id = self.partner_1
with purchase_form.order_line.edit(0) as line:
line.product_qty = 1
self.assertEqual(
line.discount,
0.0,
"Incorrect discount for product 6 with partner 1 and qty 1",
)
def test_004_prepare_purchase_order_line(self):
res = self.purchase_order_line_model._prepare_purchase_order_line(
self.product,
50,
self.env.ref("uom.product_uom_unit"),
self.env.ref("base.main_company"),
self.supplierinfo,
self.purchase_order,
)
self.assertTrue(res.get("discount"), "Should have a discount key")
def test_005_default_supplierinfo_discount(self):
# Create an original supplierinfo
supplierinfo = self.supplierinfo_model.create(
{
"min_qty": 0.0,
"partner_id": self.partner_3.id,
"product_tmpl_id": self.product.product_tmpl_id.id,
"discount": 10,
}
)
# Change the partner and raise onchange function
self.partner_1.default_supplierinfo_discount = 15
with Form(supplierinfo) as supplierinfo_form:
supplierinfo_form.partner_id = self.partner_1
self.assertEqual(
supplierinfo_form.discount,
15,
"Incorrect discount for supplierinfo "
" after changing partner that has default discount defined.",
)
def test_006_supplierinfo_from_purchaseorder(self):
"""Include discount when creating new sellers for a product"""
partner = self.env.ref("base.res_partner_3")
product = self.env.ref("product.product_product_8")
self.assertFalse(
self.supplierinfo_model.search(
[
("partner_id", "=", partner.id),
("product_tmpl_id", "=", product.product_tmpl_id.id),
]
)
)
order = self.env["purchase.order"].create({"partner_id": partner.id})
self.purchase_order_line_model.create(
{
"date_planned": fields.Datetime.now(),
"discount": 40,
"name": product.name,
"price_unit": 10.0,
"product_id": product.id,
"product_qty": 1.0,
"product_uom": product.uom_po_id.id,
"order_id": order.id,
}
)
order.button_confirm()
seller = self.supplierinfo_model.search(
[
("partner_id", "=", partner.id),
("product_tmpl_id", "=", product.product_tmpl_id.id),
]
)
self.assertTrue(seller)
self.assertEqual(seller.discount, 40)
def test_007_change_price_unit_autoupdate_stock_move(self):
partner = self.env.ref("base.res_partner_3")
product = self.env.ref("product.product_product_8")
order = self.env["purchase.order"].create({"partner_id": partner.id})
self.purchase_order_line_model.create(
{
"date_planned": fields.Datetime.now(),
"discount": 40,
"name": product.name,
"price_unit": 10.0,
"product_id": product.id,
"product_qty": 1.0,
"product_uom": product.uom_po_id.id,
"order_id": order.id,
}
)
order.button_confirm()
self.assertEqual(order.order_line.move_ids.price_unit, 6)
order.order_line.price_unit = 100
self.assertEqual(order.order_line.move_ids.price_unit, 60)

View file

@ -0,0 +1,210 @@
# Copyright 2016 ACSONE SA/NV (<http://acsone.eu>)
# Copyright 2015-2019 Tecnativa - Pedro M. Baeza
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields
from odoo.tests.common import Form, TransactionCase
from odoo.addons.base.tests.common import DISABLED_MAIL_CONTEXT
class TestPurchaseOrder(TransactionCase):
@classmethod
def setUpClass(cls):
super(TestPurchaseOrder, cls).setUpClass()
cls.env = cls.env(context=dict(cls.env.context, **DISABLED_MAIL_CONTEXT))
cls.categ_cost_average = cls.env["product.category"].create(
{"name": "Average cost method category", "property_cost_method": "average"}
)
product_obj = cls.env["product.product"]
cls.product_1 = product_obj.create(
{"name": "Test product 1", "categ_id": cls.categ_cost_average.id}
)
cls.product_2 = product_obj.create({"name": "Test product 2"})
po_model = cls.env["purchase.order.line"]
currency_rate_model = cls.env["res.currency.rate"]
# Set the Exchange rate for the currency of the company to 1
# to avoid issues with rates
latest_currency_rate_line = currency_rate_model.search(
[
("currency_id", "=", cls.env.user.company_id.currency_id.id),
("name", "=", fields.Date.today()),
],
limit=1,
)
if latest_currency_rate_line and latest_currency_rate_line.rate != 1.0:
latest_currency_rate_line.rate = 1.0
elif not latest_currency_rate_line:
currency_rate_model.create(
{
"currency_id": cls.env.user.company_id.currency_id.id,
"rate": 1.00,
"name": fields.Date.today(),
}
)
cls.purchase_order = cls.env["purchase.order"].create(
{"partner_id": cls.env.ref("base.res_partner_3").id}
)
cls.po_line_1 = po_model.create(
{
"order_id": cls.purchase_order.id,
"product_id": cls.product_1.id,
"date_planned": fields.Datetime.now(),
"name": "Test",
"product_qty": 1.0,
"product_uom": cls.product_1.uom_id.id,
"discount": 50.0,
"price_unit": 10.0,
"taxes_id": [],
}
)
cls.account = cls.env["account.account"].create(
{
"name": "Test account",
"code": "TEST",
"account_type": "expense",
}
)
cls.tax = cls.env["account.tax"].create(
{
"name": "Sample tax 15%",
"amount_type": "percent",
"type_tax_use": "purchase",
"amount": 15.0,
"invoice_repartition_line_ids": [
(0, 0, {"factor_percent": 100, "repartition_type": "base"}),
(
0,
0,
{
"factor_percent": 100,
"repartition_type": "tax",
"account_id": cls.account.id,
},
),
],
}
)
cls.po_line_2 = po_model.create(
{
"order_id": cls.purchase_order.id,
"product_id": cls.product_2.id,
"date_planned": fields.Datetime.now(),
"name": "Test",
"product_qty": 10.0,
"product_uom": cls.product_2.uom_id.id,
"discount": 30,
"taxes_id": [(6, 0, [cls.tax.id])],
"price_unit": 230.0,
}
)
cls.po_line_3 = po_model.create(
{
"order_id": cls.purchase_order.id,
"product_id": cls.product_2.id,
"date_planned": fields.Datetime.now(),
"name": "Test",
"product_qty": 1.0,
"product_uom": cls.product_2.uom_id.id,
"discount": 0,
"taxes_id": [(6, 0, [cls.tax.id])],
"price_unit": 10.0,
}
)
cls.po_line_4 = po_model.create(
{
"order_id": cls.purchase_order.id,
"display_type": "line_section",
"name": "Test Section",
"product_qty": 0.0,
"product_uom_qty": 0.0,
}
)
def test_purchase_order_vals(self):
self.assertEqual(self.po_line_1.price_subtotal, 5.0)
self.assertEqual(self.po_line_2.price_subtotal, 1610.0)
self.assertEqual(self.po_line_3.price_subtotal, 10.0)
self.assertEqual(self.purchase_order.amount_untaxed, 1625.0)
self.assertEqual(self.purchase_order.amount_tax, 243)
# Change price to launch a recalculation of totals
self.po_line_1.discount = 60
self.assertEqual(self.po_line_1.price_subtotal, 4.0)
self.assertEqual(self.purchase_order.amount_untaxed, 1624.0)
self.assertEqual(self.purchase_order.amount_tax, 243)
def test_move_price_unit(self):
self.purchase_order.button_confirm()
picking = self.purchase_order.picking_ids
moves = picking.move_ids
move1 = moves.filtered(lambda x: x.purchase_line_id == self.po_line_1)
self.assertEqual(move1.price_unit, 5)
move2 = moves.filtered(lambda x: x.purchase_line_id == self.po_line_2)
self.assertEqual(move2.price_unit, 161)
move3 = moves.filtered(lambda x: x.purchase_line_id == self.po_line_3)
self.assertEqual(move3.price_unit, 10)
# Confirm the picking to see the cost price
move1.move_line_ids.qty_done = 1
picking._action_done()
self.assertAlmostEqual(self.product_1.standard_price, 5.0)
# Check data in PO remains the same - This is due to the hack
self.assertAlmostEqual(self.po_line_1.price_unit, 10.0)
self.assertAlmostEqual(self.po_line_1.discount, 50.0)
def test_move_price_unit_discount_sync(self):
self.purchase_order.button_confirm()
picking = self.purchase_order.picking_ids
moves = picking.move_ids
self.po_line_1.discount = 25
self.po_line_2.discount = 50
self.po_line_3.discount = 10
move1 = moves.filtered(lambda x: x.purchase_line_id == self.po_line_1)
self.assertEqual(move1.price_unit, 7.5)
move2 = moves.filtered(lambda x: x.purchase_line_id == self.po_line_2)
self.assertEqual(move2.price_unit, 115.0)
move3 = moves.filtered(lambda x: x.purchase_line_id == self.po_line_3)
self.assertEqual(move3.price_unit, 9.0)
self.po_line_1.price_unit = 1000
self.po_line_2.price_unit = 500
self.po_line_3.price_unit = 250
move1 = moves.filtered(lambda x: x.purchase_line_id == self.po_line_1)
self.assertEqual(move1.price_unit, 750.0)
move2 = moves.filtered(lambda x: x.purchase_line_id == self.po_line_2)
self.assertEqual(move2.price_unit, 250.0)
move3 = moves.filtered(lambda x: x.purchase_line_id == self.po_line_3)
self.assertEqual(move3.price_unit, 225.0)
def test_report_price_unit(self):
rec = self.env["purchase.report"].search(
[("product_id", "=", self.product_1.id)]
)
self.assertEqual(rec.price_total, 5)
self.assertEqual(rec.discount, 50)
def test_no_product(self):
purchase_form = Form(self.purchase_order)
with purchase_form.order_line.edit(3) as line:
line.product_qty = 0.0
self.assertEqual(self.po_line_4.discount, 0.0)
def test_invoice(self):
invoice = self.env["account.move"].new(
{
"move_type": "out_invoice",
"partner_id": self.env.ref("base.res_partner_3").id,
"purchase_id": self.purchase_order.id,
}
)
invoice._onchange_purchase_auto_complete()
line = invoice.invoice_line_ids.filtered(
lambda x: x.purchase_line_id == self.po_line_1
)
self.assertAlmostEqual(line.discount, 50)
line = invoice.invoice_line_ids.filtered(
lambda x: x.purchase_line_id == self.po_line_2
)
self.assertAlmostEqual(line.discount, 30)
line = invoice.invoice_line_ids.filtered(
lambda x: x.purchase_line_id == self.po_line_3
)
self.assertAlmostEqual(line.discount, 0)

View file

@ -0,0 +1,20 @@
<odoo>
<record model="ir.ui.view" id="product_supplierinfo_form_view">
<field name="model">product.supplierinfo</field>
<field name="inherit_id" ref="product.product_supplierinfo_form_view" />
<field name="arch" type="xml">
<xpath expr="//div[field[@name='price']]" position="after">
<field name="discount" />
</xpath>
</field>
</record>
<record model="ir.ui.view" id="product_supplierinfo_tree_view">
<field name="model">product.supplierinfo</field>
<field name="inherit_id" ref="product.product_supplierinfo_tree_view" />
<field name="arch" type="xml">
<field name="price" position="after">
<field name="discount" />
</field>
</field>
</record>
</odoo>

View file

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record model="ir.ui.view" id="purchase_order_line_form2">
<field name="name">purchase_discount.order.line.form2</field>
<field name="model">purchase.order.line</field>
<field name="inherit_id" ref="purchase.purchase_order_line_form2" />
<field name="arch" type="xml">
<field name="price_unit" position="after">
<field name="discount" optional="show" />
</field>
</field>
</record>
<record model="ir.ui.view" id="purchase_order_line_tree">
<field name="name">purchase_discount.order.line.tree</field>
<field name="model">purchase.order.line</field>
<field name="inherit_id" ref="purchase.purchase_order_line_tree" />
<field name="arch" type="xml">
<field name="price_unit" position="after">
<field name="discount" optional="show" />
</field>
</field>
</record>
<record model="ir.ui.view" id="purchase_order_form">
<field name="name">purchase_discount.purchase.order.form</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.purchase_order_form" />
<field name="arch" type="xml">
<xpath
expr="//field[@name='order_line']/tree/field[@name='price_unit']"
position="after"
>
<field
name="discount"
optional="show"
attrs="{'readonly': [('qty_invoiced', '!=', 0)]}"
/>
</xpath>
<xpath
expr="//field[@name='order_line']/form//field[@name='price_unit']"
position="after"
>
<field
name="discount"
optional="show"
attrs="{'readonly': [('qty_invoiced', '!=', 0)]}"
/>
</xpath>
</field>
</record>
<record model="ir.ui.view" id="purchase_history_tree">
<field name="name">purchase_discount.history.tree</field>
<field name="model">purchase.order.line</field>
<field name="inherit_id" ref="purchase.purchase_history_tree" />
<field name="arch" type="xml">
<field name="price_unit" position="after">
<field name="discount" />
</field>
</field>
</record>
</odoo>

View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<template
id="report_purchaseorder_document"
inherit_id="purchase.report_purchaseorder_document"
>
<xpath expr="//table[1]/thead/tr//th[last()]" position="before">
<th name="th_discount" class="text-right">
<strong>Disc. (%)</strong>
</th>
</xpath>
<xpath expr="//td[span[@t-field='line.price_subtotal']]" position="before">
<td class="text-right">
<span t-field="line.discount" />
</td>
</xpath>
</template>
</odoo>

View file

@ -0,0 +1,26 @@
<odoo>
<record model="ir.ui.view" id="res_partner_form_view">
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form" />
<field name="arch" type="xml">
<xpath expr="//group[@name='purchase']" position="inside">
<field
name="default_supplierinfo_discount"
attrs="{'invisible': [('is_company', '=', False), ('parent_id', '!=', False)]}"
/>
<div
name="supplierinfo_discount_disabled"
colspan="2"
attrs="{'invisible': ['|',('is_company', '=', True), ('parent_id', '=', False)]}"
>
<p>Discount-related settings are managed on <button
name="open_commercial_entity"
type="object"
string="the parent company"
class="oe_link"
/></p>
</div>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,42 @@
[project]
name = "odoo-bringout-oca-purchase-workflow-purchase_discount"
version = "16.0.0"
description = "Purchase order lines with discounts - Odoo addon"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-purchase-workflow-purchase_stock>=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 = ["purchase_discount"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]