Initial commit: OCA Technical packages (595 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:03 +02:00
commit 2cc02aac6e
24950 changed files with 2318079 additions and 0 deletions

View file

@ -0,0 +1,46 @@
# PoS Order - Change Policy
Odoo addon: pos_payment_method_change_policy
## Installation
```bash
pip install odoo-bringout-oca-pos-pos_payment_method_change_policy
```
## Dependencies
This addon depends on:
- point_of_sale
## Manifest Information
- **Name**: PoS Order - Change Policy
- **Version**: 16.0.1.0.0
- **Category**: Point Of Sale
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/pos](https://github.com/OCA/pos) branch 16.0, addon `pos_payment_method_change_policy`.
## 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 Pos_payment_method_change_policy Module - pos_payment_method_change_policy
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 pos_payment_method_change_policy. 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:
- [point_of_sale](../../odoo-bringout-oca-ocb-point_of_sale)

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

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-pos-pos_payment_method_change_policy"
# or
uv pip install odoo-bringout-oca-pos-pos_payment_method_change_policy"
```

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,140 @@
=========================
PoS Order - Change Policy
=========================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:cc274cc1eb92e238f44e229799bbddf365ee2c8550cfe52d38b211cf5504cb80
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpos-lightgray.png?logo=github
:target: https://github.com/OCA/pos/tree/16.0/pos_payment_method_change_policy
:alt: OCA/pos
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/pos-16-0/pos-16-0-pos_payment_method_change_policy
: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/pos&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module improves the 'Change' feature in Odoo Point of Sale,
when a customer pays more that the amount of the PoS Order:
.. figure:: https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/cash_1_payment_screen.png
By default, a "Change" line is added on the receipt:
.. figure:: https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/cash_2_bill.png
from an accounting point of view, it adds a second payment line in 'Cash' method
with a negative amount corresponding to the surplus:
.. figure:: https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/cash_3_back_office.png
In some countries and for some payment methods, this is not the right way to proceed.
This module adds extra "Change Policy" option to manage differently the giving of change.
**Table of contents**
.. contents::
:local:
Configuration
=============
**Exceptional Profit Product**
* Create a dedicated 'No change' Product.
The type of the product should be 'Service' and the product should available in PoS.
Generally, no VAT is applied on such product.
* Go to the payment method form.
* set 'Change Option' as 'Exceptional Profit Product'
* set the new product in the 'Change Product field'
.. figure:: https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/payment_screen_profit_policy.png
Usage
=====
**Exceptional Profit Product**
A dedicated warning will be displayed:
.. figure:: https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/profit_policy_1_payment_screen.png
By default, a new sale order line is added on the receipt:
.. figure:: https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/profit_policy_2_bill.png
So, from an accounting point of view, it adds a new line that will
impact a profit and loss account:
.. figure:: https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/profit_policy_3_back_office.png
Known issues / Roadmap
======================
* Implement the ability to print a voucher.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/pos/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/pos/issues/new?body=module:%20pos_payment_method_change_policy%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
~~~~~~~
* GRAP
Contributors
~~~~~~~~~~~~
* Sylvain LE GAL (https://twitter.com/legalsylvain)
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.
.. |maintainer-legalsylvain| image:: https://github.com/legalsylvain.png?size=40px
:target: https://github.com/legalsylvain
:alt: legalsylvain
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-legalsylvain|
This module is part of the `OCA/pos <https://github.com/OCA/pos/tree/16.0/pos_payment_method_change_policy>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1,26 @@
# Copyright (C) 2023 - Today: GRAP (http://www.grap.coop)
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
"name": "PoS Order - Change Policy",
"summary": "Adds alternative way to handle Change in Point of Sale.",
"version": "16.0.1.0.0",
"category": "Point Of Sale",
"author": "GRAP,Odoo Community Association (OCA)",
"maintainers": ["legalsylvain"],
"website": "https://github.com/OCA/pos",
"license": "AGPL-3",
"depends": ["point_of_sale"],
"data": ["views/view_pos_payment_method.xml"],
"demo": ["demo/product_product.xml"],
"assets": {
"point_of_sale.assets": [
"pos_payment_method_change_policy/static/src/xml/PaymentScreen.xml",
"pos_payment_method_change_policy/static/src/scss/style.scss",
"pos_payment_method_change_policy/static/src/js/models.esm.js",
"pos_payment_method_change_policy/static/src/js/PaymentScreen.esm.js",
],
},
"installable": True,
}

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright (C) 2023 - Today: GRAP (http://www.grap.coop)
@author Sylvain LE GAL (https://twitter.com/legalsylvain)
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-->
<odoo>
<record id="profit_product" model="product.product">
<field name="name">No Change Product</field>
<field name="type">service</field>
<field name="available_in_pos" eval="True" />
<field name="taxes_id" eval="[(6, 0, [])]" />
</record>
</odoo>

View file

@ -0,0 +1,113 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * pos_payment_method_change_policy
#
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: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/js/PaymentScreen.esm.js:0
#, python-format
msgid ""
"\n"
"Then, reload your Point of Sale."
msgstr ""
#. module: pos_payment_method_change_policy
#: model:ir.model.fields.selection,name:pos_payment_method_change_policy.selection__pos_payment_method__change_policy__cash
msgid "Cash"
msgstr "Gotovina"
#. module: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/xml/PaymentScreen.xml:0
#, python-format
msgid "Change"
msgstr "Promjeni"
#. module: pos_payment_method_change_policy
#: model:ir.model.fields,field_description:pos_payment_method_change_policy.field_pos_payment_method__change_policy
msgid "Change Policy"
msgstr "Politika promjene"
#. module: pos_payment_method_change_policy
#: model:ir.model.fields,field_description:pos_payment_method_change_policy.field_pos_payment_method__change_product_id
msgid "Change Product"
msgstr "Proizvod promjene"
#. module: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/xml/PaymentScreen.xml:0
#, python-format
msgid "Customer Loss"
msgstr "Gubitak kupca"
#. module: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/js/PaymentScreen.esm.js:0
#, python-format
msgid "Error: Unavailable Product."
msgstr "Greška: Proizvod nije dostupan."
#. module: pos_payment_method_change_policy
#: model:ir.model.fields.selection,name:pos_payment_method_change_policy.selection__pos_payment_method__change_policy__profit_product
msgid "Exceptional Profit Product"
msgstr "Proizvod izuzetne dobiti"
#. module: pos_payment_method_change_policy
#: model:ir.model.fields,help:pos_payment_method_change_policy.field_pos_payment_method__change_policy
msgid ""
"Method of managing the giving of change.\n"
" * 'Cash': (Default). the cashier will give back money in cash method.\n"
" * 'Exceptional Profit Product': an extra PoS Order Line will be added in the PoS Order of the surplus amount. This will be an exceptional gain for the seller, and a loss for the customer."
msgstr ""
#. module: pos_payment_method_change_policy
#: model:product.template,name:pos_payment_method_change_policy.profit_product_product_template
msgid "No Change Product"
msgstr "Proizvod bez kusura"
#. module: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/js/PaymentScreen.esm.js:0
#, python-format
msgid ""
"Please make the following product\n"
"available in the point of sale : \n"
"\n"
msgstr ""
#. module: pos_payment_method_change_policy
#: model:ir.model,name:pos_payment_method_change_policy.model_pos_payment_method
msgid "Point of Sale Payment Methods"
msgstr "Načini plaćanja na prodajnom mjestu"
#. module: pos_payment_method_change_policy
#: model:ir.model,name:pos_payment_method_change_policy.model_pos_session
msgid "Point of Sale Session"
msgstr "Sesija POS-a"
#. module: pos_payment_method_change_policy
#. odoo-python
#: code:addons/pos_payment_method_change_policy/models/pos_payment_method.py:0
#, python-format
msgid ""
"The field 'Change Product' is required if the 'Change policy' is set to "
"'Exceptional Profit Product'."
msgstr ""
#. module: pos_payment_method_change_policy
#: model:ir.model.fields,help:pos_payment_method_change_policy.field_pos_payment_method__change_product_id
msgid ""
"This product will be used if customer pays more that the amount of the "
"receipt, to add an extra order line when confirming order."
msgstr ""

View file

@ -0,0 +1,134 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * pos_payment_method_change_policy
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-11-23 14:47+0000\n"
"PO-Revision-Date: 2023-11-23 14:47+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/js/PaymentScreen.esm.js:0
#, python-format
msgid ""
"\n"
"Then, reload your Point of Sale."
msgstr ""
"\n"
"Puis, relancer votre caisse."
#. module: pos_payment_method_change_policy
#: model:ir.model.fields.selection,name:pos_payment_method_change_policy.selection__pos_payment_method__change_policy__cash
msgid "Cash"
msgstr "Espèce"
#. module: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/xml/PaymentScreen.xml:0
#, python-format
msgid "Change"
msgstr "Rendu de monnaie"
#. module: pos_payment_method_change_policy
#: model:ir.model.fields,field_description:pos_payment_method_change_policy.field_pos_payment_method__change_policy
msgid "Change Policy"
msgstr "Politique de rendu de monnaie"
#. module: pos_payment_method_change_policy
#: model:ir.model.fields,field_description:pos_payment_method_change_policy.field_pos_payment_method__change_product_id
msgid "Change Product"
msgstr "Article de rendu de monnaie"
#. module: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/xml/PaymentScreen.xml:0
#, python-format
msgid "Customer Loss"
msgstr "Perte client"
#. module: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/js/PaymentScreen.esm.js:0
#, python-format
msgid "Error: Unavailable Product."
msgstr "Erreur: Article indisponible."
#. module: pos_payment_method_change_policy
#: model:ir.model.fields.selection,name:pos_payment_method_change_policy.selection__pos_payment_method__change_policy__profit_product
msgid "Exceptional Profit Product"
msgstr "Article de gain exceptionnel"
#. module: pos_payment_method_change_policy
#: model:ir.model.fields,help:pos_payment_method_change_policy.field_pos_payment_method__change_policy
#, fuzzy
msgid ""
"Method of managing the giving of change.\n"
" * 'Cash': (Default). the cashier will give back money in cash method.\n"
" * 'Exceptional Profit Product': an extra PoS Order Line will be added in "
"the PoS Order of the surplus amount. This will be an exceptional gain for "
"the seller, and a loss for the customer."
msgstr ""
"Politique de gestion du rendu de monnaie.\n"
" * 'Espèce': (Par défaut). Le caissier va rendre la monnaie en espèce.\n"
" * 'Exceptional Profit Product': Une nouvelle ligne de vente sera ajouté à "
"la vente en caisse, d'un montant correspondant au surplus. Cela va rajouter "
"un gain exceptionnel pour le vendeur, et une perte pour le client."
#. module: pos_payment_method_change_policy
#: model:product.template,name:pos_payment_method_change_policy.profit_product_product_template
msgid "No Change Product"
msgstr "Article 'Pas de rendu de monnaie'"
#. module: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/js/PaymentScreen.esm.js:0
#, python-format
msgid ""
"Please make the following product\n"
"available in the point of sale : \n"
"\n"
msgstr ""
"Veuillez rendre l'article suivant\n"
" disponible dans le point de vente : \n"
"\n"
#. module: pos_payment_method_change_policy
#: model:ir.model,name:pos_payment_method_change_policy.model_pos_payment_method
msgid "Point of Sale Payment Methods"
msgstr "Modes de paiement du point de vente"
#. module: pos_payment_method_change_policy
#: model:ir.model,name:pos_payment_method_change_policy.model_pos_session
msgid "Point of Sale Session"
msgstr "Session du point de vente"
#. module: pos_payment_method_change_policy
#. odoo-python
#: code:addons/pos_payment_method_change_policy/models/pos_payment_method.py:0
#, python-format
msgid ""
"The field 'Change Product' is required if the 'Change policy' is set to "
"'Exceptional Profit Product'."
msgstr ""
"Le champ 'Article de rendu de monnaie' est obligatoire, si la 'Politique de "
"rendu de monnaie' est mise à 'Article de gain exceptionnel'."
#. module: pos_payment_method_change_policy
#: model:ir.model.fields,help:pos_payment_method_change_policy.field_pos_payment_method__change_product_id
msgid ""
"This product will be used if customer pays more that the amount of the "
"receipt, to add an extra order line when confirming order."
msgstr ""
"Cet article sera utilisé si le client paye plus que le montant de la vente, "
"pour ajouter un ligne de ticket supplémentaire lors de la confirmation de la "
"vente."

View file

@ -0,0 +1,131 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * pos_payment_method_change_policy
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-07-22 16:06+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\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: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/js/PaymentScreen.esm.js:0
#, python-format
msgid ""
"\n"
"Then, reload your Point of Sale."
msgstr ""
"\n"
"Quindi, ricaricare il punto vendita."
#. module: pos_payment_method_change_policy
#: model:ir.model.fields.selection,name:pos_payment_method_change_policy.selection__pos_payment_method__change_policy__cash
msgid "Cash"
msgstr "Contanti"
#. module: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/xml/PaymentScreen.xml:0
#, python-format
msgid "Change"
msgstr "Cambio"
#. module: pos_payment_method_change_policy
#: model:ir.model.fields,field_description:pos_payment_method_change_policy.field_pos_payment_method__change_policy
msgid "Change Policy"
msgstr "Politica cambio"
#. module: pos_payment_method_change_policy
#: model:ir.model.fields,field_description:pos_payment_method_change_policy.field_pos_payment_method__change_product_id
msgid "Change Product"
msgstr "Prodotto cambio"
#. module: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/xml/PaymentScreen.xml:0
#, python-format
msgid "Customer Loss"
msgstr "Perdita cliente"
#. module: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/js/PaymentScreen.esm.js:0
#, python-format
msgid "Error: Unavailable Product."
msgstr "Errore: prodotto non disponibile."
#. module: pos_payment_method_change_policy
#: model:ir.model.fields.selection,name:pos_payment_method_change_policy.selection__pos_payment_method__change_policy__profit_product
msgid "Exceptional Profit Product"
msgstr "Prodotto con profitto eccezionale"
#. module: pos_payment_method_change_policy
#: model:ir.model.fields,help:pos_payment_method_change_policy.field_pos_payment_method__change_policy
msgid ""
"Method of managing the giving of change.\n"
" * 'Cash': (Default). the cashier will give back money in cash method.\n"
" * 'Exceptional Profit Product': an extra PoS Order Line will be added in the PoS Order of the surplus amount. This will be an exceptional gain for the seller, and a loss for the customer."
msgstr ""
"Metodo per gestire il resto del cambio.\n"
" * 'Contanti' (predefinito): il cassiere restituirà denaro con il metodo "
"contanti.\n"
" * 'Prodotto con profitto eccezionale': verrà aggiunta una riga ordine POS "
"aggiuntiva per il valore del surplus. Questo sarà un guadagno eccezionale "
"per il venditore e un perdita per il cliente."
#. module: pos_payment_method_change_policy
#: model:product.template,name:pos_payment_method_change_policy.profit_product_product_template
msgid "No Change Product"
msgstr "Nessun prodotto cambio"
#. module: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/js/PaymentScreen.esm.js:0
#, python-format
msgid ""
"Please make the following product\n"
"available in the point of sale : \n"
"\n"
msgstr ""
"Rendere il seguente prodotto\n"
"disponibile nel punto vendita: \n"
"\n"
#. module: pos_payment_method_change_policy
#: model:ir.model,name:pos_payment_method_change_policy.model_pos_payment_method
msgid "Point of Sale Payment Methods"
msgstr "Metodi di pagamento punto vendita"
#. module: pos_payment_method_change_policy
#: model:ir.model,name:pos_payment_method_change_policy.model_pos_session
msgid "Point of Sale Session"
msgstr "Sessione punto vendita"
#. module: pos_payment_method_change_policy
#. odoo-python
#: code:addons/pos_payment_method_change_policy/models/pos_payment_method.py:0
#, python-format
msgid ""
"The field 'Change Product' is required if the 'Change policy' is set to "
"'Exceptional Profit Product'."
msgstr ""
"Il campo 'Prodotto cambio' è richiesto se la 'Politica cambio' è impostata a "
"'Prodotto profitto eccezionale'."
#. module: pos_payment_method_change_policy
#: model:ir.model.fields,help:pos_payment_method_change_policy.field_pos_payment_method__change_product_id
msgid ""
"This product will be used if customer pays more that the amount of the "
"receipt, to add an extra order line when confirming order."
msgstr ""
"Questo prodotto verrà utilizzato se il cliente paga più del valore della "
"ricevuta, per aggiungere una riga ordine extra alla conferma dell'ordine."

View file

@ -0,0 +1,113 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * pos_payment_method_change_policy
#
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: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/js/PaymentScreen.esm.js:0
#, python-format
msgid ""
"\n"
"Then, reload your Point of Sale."
msgstr ""
#. module: pos_payment_method_change_policy
#: model:ir.model.fields.selection,name:pos_payment_method_change_policy.selection__pos_payment_method__change_policy__cash
msgid "Cash"
msgstr ""
#. module: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/xml/PaymentScreen.xml:0
#, python-format
msgid "Change"
msgstr ""
#. module: pos_payment_method_change_policy
#: model:ir.model.fields,field_description:pos_payment_method_change_policy.field_pos_payment_method__change_policy
msgid "Change Policy"
msgstr ""
#. module: pos_payment_method_change_policy
#: model:ir.model.fields,field_description:pos_payment_method_change_policy.field_pos_payment_method__change_product_id
msgid "Change Product"
msgstr ""
#. module: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/xml/PaymentScreen.xml:0
#, python-format
msgid "Customer Loss"
msgstr ""
#. module: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/js/PaymentScreen.esm.js:0
#, python-format
msgid "Error: Unavailable Product."
msgstr ""
#. module: pos_payment_method_change_policy
#: model:ir.model.fields.selection,name:pos_payment_method_change_policy.selection__pos_payment_method__change_policy__profit_product
msgid "Exceptional Profit Product"
msgstr ""
#. module: pos_payment_method_change_policy
#: model:ir.model.fields,help:pos_payment_method_change_policy.field_pos_payment_method__change_policy
msgid ""
"Method of managing the giving of change.\n"
" * 'Cash': (Default). the cashier will give back money in cash method.\n"
" * 'Exceptional Profit Product': an extra PoS Order Line will be added in the PoS Order of the surplus amount. This will be an exceptional gain for the seller, and a loss for the customer."
msgstr ""
#. module: pos_payment_method_change_policy
#: model:product.template,name:pos_payment_method_change_policy.profit_product_product_template
msgid "No Change Product"
msgstr ""
#. module: pos_payment_method_change_policy
#. odoo-javascript
#: code:addons/pos_payment_method_change_policy/static/src/js/PaymentScreen.esm.js:0
#, python-format
msgid ""
"Please make the following product\n"
"available in the point of sale : \n"
"\n"
msgstr ""
#. module: pos_payment_method_change_policy
#: model:ir.model,name:pos_payment_method_change_policy.model_pos_payment_method
msgid "Point of Sale Payment Methods"
msgstr ""
#. module: pos_payment_method_change_policy
#: model:ir.model,name:pos_payment_method_change_policy.model_pos_session
msgid "Point of Sale Session"
msgstr ""
#. module: pos_payment_method_change_policy
#. odoo-python
#: code:addons/pos_payment_method_change_policy/models/pos_payment_method.py:0
#, python-format
msgid ""
"The field 'Change Product' is required if the 'Change policy' is set to "
"'Exceptional Profit Product'."
msgstr ""
#. module: pos_payment_method_change_policy
#: model:ir.model.fields,help:pos_payment_method_change_policy.field_pos_payment_method__change_product_id
msgid ""
"This product will be used if customer pays more that the amount of the "
"receipt, to add an extra order line when confirming order."
msgstr ""

View file

@ -0,0 +1,2 @@
from . import pos_payment_method
from . import pos_session

View file

@ -0,0 +1,47 @@
# Copyright (C) 2023 - Today: GRAP (http://www.grap.coop)
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
class PosPaymentMethod(models.Model):
_inherit = "pos.payment.method"
change_product_id = fields.Many2one(
comodel_name="product.product",
domain=[("type", "=", "service"), ("available_in_pos", "=", True)],
help="This product will be used if customer"
" pays more that the amount of the receipt,"
" to add an extra order line when confirming"
" order.",
)
change_policy = fields.Selection(
selection=[
("cash", "Cash"),
("profit_product", "Exceptional Profit Product"),
],
required=True,
default="cash",
help="Method of managing the giving of change.\n"
" * 'Cash': (Default). the cashier will give back"
" money in cash method.\n"
" * 'Exceptional Profit Product': an extra PoS Order Line will"
" be added in the PoS Order of the surplus amount."
" This will be an exceptional gain for the seller,"
" and a loss for the customer.",
)
@api.constrains("change_policy", "change_product_id")
def check_change_product_id(self):
if self.filtered(
lambda x: x.change_policy == "profit_product" and not x.change_product_id
):
raise ValidationError(
_(
"The field 'Change Product' is required"
" if the 'Change policy' is set to 'Exceptional Profit Product'."
)
)

View file

@ -0,0 +1,14 @@
# Copyright (C) 2023 - Today: GRAP (http://www.grap.coop)
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import models
class PosSession(models.Model):
_inherit = "pos.session"
def _loader_params_pos_payment_method(self):
res = super()._loader_params_pos_payment_method()
res["search_params"]["fields"] += ["change_policy", "change_product_id"]
return res

View file

@ -0,0 +1,13 @@
**Exceptional Profit Product**
* Create a dedicated 'No change' Product.
The type of the product should be 'Service' and the product should available in PoS.
Generally, no VAT is applied on such product.
* Go to the payment method form.
* set 'Change Option' as 'Exceptional Profit Product'
* set the new product in the 'Change Product field'
.. figure:: ../static/description/payment_screen_profit_policy.png

View file

@ -0,0 +1 @@
* Sylvain LE GAL (https://twitter.com/legalsylvain)

View file

@ -0,0 +1,17 @@
This module improves the 'Change' feature in Odoo Point of Sale,
when a customer pays more that the amount of the PoS Order:
.. figure:: ../static/description/cash_1_payment_screen.png
By default, a "Change" line is added on the receipt:
.. figure:: ../static/description/cash_2_bill.png
from an accounting point of view, it adds a second payment line in 'Cash' method
with a negative amount corresponding to the surplus:
.. figure:: ../static/description/cash_3_back_office.png
In some countries and for some payment methods, this is not the right way to proceed.
This module adds extra "Change Policy" option to manage differently the giving of change.

View file

@ -0,0 +1 @@
* Implement the ability to print a voucher.

View file

@ -0,0 +1,14 @@
**Exceptional Profit Product**
A dedicated warning will be displayed:
.. figure:: ../static/description/profit_policy_1_payment_screen.png
By default, a new sale order line is added on the receipt:
.. figure:: ../static/description/profit_policy_2_bill.png
So, from an accounting point of view, it adds a new line that will
impact a profit and loss account:
.. figure:: ../static/description/profit_policy_3_back_office.png

View file

@ -0,0 +1,479 @@
<?xml version="1.0" encoding="utf-8"?>
<!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>PoS Order - Change Policy</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
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: grey; } /* 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 {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="pos-order-change-policy">
<h1 class="title">PoS Order - Change Policy</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:cc274cc1eb92e238f44e229799bbddf365ee2c8550cfe52d38b211cf5504cb80
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/pos/tree/16.0/pos_payment_method_change_policy"><img alt="OCA/pos" src="https://img.shields.io/badge/github-OCA%2Fpos-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/pos-16-0/pos-16-0-pos_payment_method_change_policy"><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/pos&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 improves the Change feature in Odoo Point of Sale,
when a customer pays more that the amount of the PoS Order:</p>
<div class="figure">
<img alt="https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/cash_1_payment_screen.png" src="https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/cash_1_payment_screen.png" />
</div>
<p>By default, a “Change” line is added on the receipt:</p>
<div class="figure">
<img alt="https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/cash_2_bill.png" src="https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/cash_2_bill.png" />
</div>
<p>from an accounting point of view, it adds a second payment line in Cash method
with a negative amount corresponding to the surplus:</p>
<div class="figure">
<img alt="https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/cash_3_back_office.png" src="https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/cash_3_back_office.png" />
</div>
<p>In some countries and for some payment methods, this is not the right way to proceed.</p>
<p>This module adds extra “Change Policy” option to manage differently the giving of change.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
<li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-3">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-4">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-5">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-6">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-7">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-8">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
<p><strong>Exceptional Profit Product</strong></p>
<ul class="simple">
<li>Create a dedicated No change Product.
The type of the product should be Service and the product should available in PoS.
Generally, no VAT is applied on such product.</li>
<li>Go to the payment method form.</li>
<li>set Change Option as Exceptional Profit Product</li>
<li>set the new product in the Change Product field</li>
</ul>
<div class="figure">
<img alt="https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/payment_screen_profit_policy.png" src="https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/payment_screen_profit_policy.png" />
</div>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
<p><strong>Exceptional Profit Product</strong></p>
<p>A dedicated warning will be displayed:</p>
<div class="figure">
<img alt="https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/profit_policy_1_payment_screen.png" src="https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/profit_policy_1_payment_screen.png" />
</div>
<p>By default, a new sale order line is added on the receipt:</p>
<div class="figure">
<img alt="https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/profit_policy_2_bill.png" src="https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/profit_policy_2_bill.png" />
</div>
<p>So, from an accounting point of view, it adds a new line that will
impact a profit and loss account:</p>
<div class="figure">
<img alt="https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/profit_policy_3_back_office.png" src="https://raw.githubusercontent.com/OCA/pos/16.0/pos_payment_method_change_policy/static/description/profit_policy_3_back_office.png" />
</div>
</div>
<div class="section" id="known-issues-roadmap">
<h1><a class="toc-backref" href="#toc-entry-3">Known issues / Roadmap</a></h1>
<ul class="simple">
<li>Implement the ability to print a voucher.</li>
</ul>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-4">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/pos/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/pos/issues/new?body=module:%20pos_payment_method_change_policy%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-5">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-6">Authors</a></h2>
<ul class="simple">
<li>GRAP</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-7">Contributors</a></h2>
<ul class="simple">
<li>Sylvain LE GAL (<a class="reference external" href="https://twitter.com/legalsylvain">https://twitter.com/legalsylvain</a>)</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-8">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/legalsylvain"><img alt="legalsylvain" src="https://github.com/legalsylvain.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/pos/tree/16.0/pos_payment_method_change_policy">OCA/pos</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,52 @@
/** @odoo-module **/
// Copyright (C) 2023 - Today: GRAP (http://www.grap.coop)
// @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
// License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import PaymentScreen from "point_of_sale.PaymentScreen";
import Registries from "point_of_sale.Registries";
export const OverloadPaymentScreen = (OriginalPaymentScreen) =>
class extends OriginalPaymentScreen {
async _finalizeValidation() {
// Skip if there is no change
if (this.currentOrder.get_change() > 0.0) {
var paymentMethod =
this.currentOrder.get_payment_method_of_change_policy();
// Skip if there is no payment line
if (paymentMethod) {
if (paymentMethod.change_policy === "profit_product") {
console.log(paymentMethod.change_product_id);
var profit_product = this.env.pos.db.get_product_by_id(
paymentMethod.change_product_id[0]
);
// Raise an error if the configured product is not available
// in the Point of sale.
if (!profit_product) {
this.showPopup("ErrorPopup", {
title: this.env._t("Error: Unavailable Product."),
body:
this.env._t(
"Please make the following product\navailable in the point of sale : \n\n"
) +
paymentMethod.change_product_id[1] +
this.env._t("\nThen, reload your Point of Sale."),
});
return;
}
this.currentOrder.add_product(profit_product, {
quantity: 1,
price: this.currentOrder.get_change(),
lst_price: this.currentOrder.get_change(),
extras: {price_automatically_set: true},
});
}
}
}
return super._finalizeValidation(...arguments);
}
};
Registries.Component.extend(PaymentScreen, OverloadPaymentScreen);

View file

@ -0,0 +1,36 @@
/** @odoo-module **/
// Copyright (C) 2023 - Today: GRAP (http://www.grap.coop)
// @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
// License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import {Order} from "point_of_sale.models";
import Registries from "point_of_sale.Registries";
// /////////////////////////////
// Overload models.Order
// /////////////////////////////
const OverloadOrder = (OriginalOrder) =>
class extends OriginalOrder {
get_payment_method_of_change_policy() {
for (var paymentId in this.get_paymentlines()) {
var paymentLine = this.get_paymentlines()[paymentId];
if (paymentLine.payment_method.change_policy === "profit_product") {
return paymentLine.payment_method;
}
}
if (this.paymentlines) {
return this.paymentlines[0].payment_method;
}
}
get_change_policy() {
var paymentMethod = this.get_payment_method_of_change_policy();
if (paymentMethod) {
return paymentMethod.change_policy;
}
return "cash";
}
};
Registries.Model.extend(Order, OverloadOrder);

View file

@ -0,0 +1,11 @@
/*
Copyright (C) 2023-Today GRAP (http://www.grap.coop)
@author Sylvain LE GAL (https://twitter.com/legalsylvain)
License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
*/
.pos .label-warning {
background-color: orange;
padding: 3px 7px 3px 7px;
border-radius: 50rem !important;
}

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright (C) 2023 - Today: GRAP (http://www.grap.coop)
@author: Sylvain LE GAL (https://twitter.com/legalsylvain)
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-->
<templates id="template" xml:space="preserve">
<t t-inherit="point_of_sale.PaymentScreenStatus" t-inherit-mode="extension">
<xpath expr="//div[hasclass('payment-status-change')]" position="attributes">
<attribute name="t-if">props.order.get_change()</attribute>
</xpath>
<xpath
expr="//div[hasclass('payment-status-change')]/span[hasclass('label')]"
position="replace"
>
<span
class="label"
t-if="props.order.get_change_policy() === 'cash'"
>Change</span>
<span
class="label label-warning"
t-if="props.order.get_change_policy() === 'profit_product'"
>Customer Loss</span>
</xpath>
</t>
</templates>

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright (C) 2023 - Today: GRAP (http://www.grap.coop)
@author Sylvain LE GAL (https://twitter.com/legalsylvain)
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-->
<odoo>
<record id="view_pos_payment_method_form" model="ir.ui.view">
<field name="model">pos.payment.method</field>
<field name="inherit_id" ref="point_of_sale.pos_payment_method_view_form" />
<field name="arch" type="xml">
<field name="journal_id" position="after">
<field name="change_policy" />
<field
name="change_product_id"
attrs="{
'required': [('change_policy', '=', 'profit_product')],
'invisible': [('change_policy', '!=', 'profit_product')],
}"
/>
</field>
</field>
</record>
</odoo>

View file

@ -0,0 +1,42 @@
[project]
name = "odoo-bringout-oca-pos-pos_payment_method_change_policy"
version = "16.0.0"
description = "PoS Order - Change Policy - Adds alternative way to handle Change in Point of Sale."
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ocb-point_of_sale>=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 = ["pos_payment_method_change_policy"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]