Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
121 changes: 121 additions & 0 deletions pos_scrap_order/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
===============
Pos Scrap Order
===============

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

.. |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-AwesomeFoodCoops%2Fodoo--production-lightgray.png?logo=github
:target: https://github.com/AwesomeFoodCoops/odoo-production/tree/18.0/pos_scrap_order
:alt: AwesomeFoodCoops/odoo-production

|badge1| |badge2| |badge3|

This module allows cashiers to create scrap orders directly from the
Point of Sale screen, without leaving the POS session.

Key features:

- **Scrap from POS**: create scrap orders for all products in the
current order with one click.
- **Scrap list**: view the 50 most recent scrap orders created from POS
sessions.
- **Configurable validation mode**: choose how scrap orders are
validated depending on available stock.

**Table of contents**

.. contents::
:local:

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

Go to **Point of Sale → Configuration → Settings** and locate the
**Scrap Order** section.

Set the **Scrap Order Option** field to one of the following values:

+----------------------------------+----------------------------------+
| Option | Behaviour |
+==================================+==================================+
| **No Scrap Order** | Scrap buttons are hidden in POS. |
| | No scrap order can be created. |
+----------------------------------+----------------------------------+
| **Create and validate for | Creates scrap orders and |
| products with stock only** | validates them only if the |
| *(default)* | product has sufficient on-hand |
| | quantity. |
+----------------------------------+----------------------------------+
| **Always create, validate if has | Always creates scrap orders; |
| stock** | validates them only when stock |
| | is available. |
+----------------------------------+----------------------------------+
| **Always create, validate | Always creates and validates |
| regardless of stock** | scrap orders, even if on-hand |
| | quantity is zero or negative. |
+----------------------------------+----------------------------------+

Usage
=====

**Creating a scrap order from POS**

1. Add at least one product to the current order.
2. Click the **Actions** button (bottom-right area of the POS screen).
3. In the popup, click **Make Scrap Order**.
4. Review the list of products and quantities to be scrapped.
5. Click **Create Scrap Order** to confirm.
6. A confirmation dialog will appear. On success, the screen returns to
the product screen.

**Viewing recent scrap orders**

1. Click the **Actions** button.
2. Click **Scrap List** to display the 50 most recent scrap orders
originating from POS sessions.
3. Click **Make Scrap Order** to navigate to the scrap creation screen.

**Error cases**

- If the order is empty, an error dialog will appear.
- If the option is set to *Create and validate for products with stock
only* and a product has insufficient stock, the scrap operation is
rolled back and an error message is displayed.

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

Bugs are tracked on `GitHub Issues <https://github.com/AwesomeFoodCoops/odoo-production/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/AwesomeFoodCoops/odoo-production/issues/new?body=module:%20pos_scrap_order%0Aversion:%2018.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
-------

* Trobz
* La Louve

Maintainers
-----------

This module is part of the `AwesomeFoodCoops/odoo-production <https://github.com/AwesomeFoodCoops/odoo-production/tree/18.0/pos_scrap_order>`_ project on GitHub.

You are welcome to contribute.
1 change: 1 addition & 0 deletions pos_scrap_order/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
24 changes: 24 additions & 0 deletions pos_scrap_order/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Copyright (C) Nguyen Minh Chien (chien@trobz.com)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

{
"name": "Pos Scrap Order",
"version": "18.0.1.0.0",
"category": "Point Of Sale",
"summary": """Create scrap order from POS screen""",
"author": "Trobz, La Louve",
"website": "https://github.com/AwesomeFoodCoops/odoo-production",
"license": "AGPL-3",
"depends": ["point_of_sale", "stock"],
"data": [
"security/ir.model.access.csv",
"views/pos_config.xml",
],
"installable": True,
"assets": {
"point_of_sale._assets_pos": [
"pos_scrap_order/static/src/css/**/*",
"pos_scrap_order/static/src/app/**/*",
],
},
}
244 changes: 244 additions & 0 deletions pos_scrap_order/i18n/fr.po
Original file line number Diff line number Diff line change
@@ -0,0 +1,244 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * pos_scrap_order
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0+e\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-04-21 10:50+0000\n"
"PO-Revision-Date: 2026-04-21 10:50+0000\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_scrap_order
#. odoo-javascript
#: code:addons/pos_scrap_order/static/src/app/screens/scrap_screen/scrap_screen.xml:0
msgid "ATTENTION"
msgstr "ATTENTION"

#. module: pos_scrap_order
#. odoo-python
#: code:addons/pos_scrap_order/models/pos_order.py:0
msgid "Access Error!"
msgstr "Erreur d'accès!"

#. module: pos_scrap_order
#: model:ir.model.fields.selection,name:pos_scrap_order.selection__pos_config__scrap_order_option__always
msgid "Always create Scrap Order, validate if has stock"
msgstr "Toujours créer la mise au rebut, valider seulement si le produit est en stock"

#. module: pos_scrap_order
#: model:ir.model.fields.selection,name:pos_scrap_order.selection__pos_config__scrap_order_option__force
msgid "Always create Scrap Order, validate regardless of no stock"
msgstr "Toujours créer la mise au rebut, valider même si le produit n'est pas en stock"

#. module: pos_scrap_order
#. odoo-javascript
#: code:addons/pos_scrap_order/static/src/app/screens/scrap_list_screen/scrap_list_screen.xml:0
#: code:addons/pos_scrap_order/static/src/app/screens/scrap_screen/scrap_screen.xml:0
msgid "Back"
msgstr "Retour"

#. module: pos_scrap_order
#: model_terms:ir.ui.view,arch_db:pos_scrap_order.pos_config_view_form_inherit
msgid "Configure how scrap orders are created from the POS screen"
msgstr "Configurer comment les ordres de rebut sont créés depuis l'écran du point de vente"

#. module: pos_scrap_order
#. odoo-javascript
#: code:addons/pos_scrap_order/static/src/app/screens/scrap_list_screen/scrap_list_screen.xml:0
msgid "Create Date"
msgstr "Date de création"

#. module: pos_scrap_order
#. odoo-javascript
#: code:addons/pos_scrap_order/static/src/app/screens/scrap_screen/scrap_screen.xml:0
msgid "Create Scrap Order"
msgstr "Créer la mise au rebut"

#. module: pos_scrap_order
#: model:ir.model.fields.selection,name:pos_scrap_order.selection__pos_config__scrap_order_option__onhand
msgid "Create and validate Scrap Order for product has stock only"
msgstr "Créer et valider la mise au rebut seulement pour les produit en stock"

#. module: pos_scrap_order
#. odoo-python
#: code:addons/pos_scrap_order/models/pos_order.py:0
msgid "Data is incorrect."
msgstr "Les données sont incorrectes."

#. module: pos_scrap_order
#. odoo-python
#: code:addons/pos_scrap_order/models/pos_order.py:0
msgid "Error!"
msgstr "Erreur!"

#. module: pos_scrap_order
#. odoo-javascript
#: code:addons/pos_scrap_order/static/src/app/screens/scrap_list_screen/scrap_list_screen.js:0
#: code:addons/pos_scrap_order/static/src/app/screens/scrap_screen/scrap_screen.js:0
msgid ""
"It seems that you do not have a network connection at the moment. Try again "
"later."
msgstr ""
"Il semble que vous n'ayez pas de connexion réseau pour le moment. Veuillez réessayer plus tard."

#. module: pos_scrap_order
#. odoo-javascript
#: code:addons/pos_scrap_order/static/src/app/overrides/components/scrap_buttons/scrap_buttons.xml:0
msgid "List"
msgstr "Liste"

#. module: pos_scrap_order
#. odoo-javascript
#: code:addons/pos_scrap_order/static/src/app/overrides/components/scrap_buttons/scrap_buttons.xml:0
#: code:addons/pos_scrap_order/static/src/app/screens/scrap_list_screen/scrap_list_screen.xml:0
msgid "Make Scrap Order"
msgstr "Créer un ordre de rebut"

#. module: pos_scrap_order
#. odoo-javascript
#: code:addons/pos_scrap_order/static/src/app/screens/scrap_list_screen/scrap_list_screen.js:0
#: code:addons/pos_scrap_order/static/src/app/screens/scrap_screen/scrap_screen.js:0
msgid "Network Connection Lost"
msgstr "Connexion réseau perdue"

#. module: pos_scrap_order
#. odoo-python
#: code:addons/pos_scrap_order/models/pos_order.py:0
msgid "No Enough Stock!"
msgstr "Stock insuffisant!"

#. module: pos_scrap_order
#: model:ir.model.fields.selection,name:pos_scrap_order.selection__pos_config__scrap_order_option__no
msgid "No Scrap Order"
msgstr "Aucun ordre de rebut"

#. module: pos_scrap_order
#. odoo-javascript
#: code:addons/pos_scrap_order/static/src/app/screens/scrap_screen/scrap_screen.js:0
msgid "Not available"
msgstr "Non disponible"

#. module: pos_scrap_order
#. odoo-javascript
#: code:addons/pos_scrap_order/static/src/app/screens/scrap_list_screen/scrap_list_screen.xml:0
msgid "Origin"
msgstr "Origine"

#. module: pos_scrap_order
#. odoo-python
#: code:addons/pos_scrap_order/models/pos_order.py:0
#: code:addons/pos_scrap_order/models/stock_scrap.py:0
msgid "POS Session: "
msgstr "Session POS:"

#. module: pos_scrap_order
#: model:ir.model,name:pos_scrap_order.model_pos_config
msgid "Point of Sale Configuration"
msgstr "Configuration du point de vente"

#. module: pos_scrap_order
#: model:ir.model,name:pos_scrap_order.model_pos_order
msgid "Point of Sale Orders"
msgstr "Commandes du point de vente"

#. module: pos_scrap_order
#. odoo-javascript
#: code:addons/pos_scrap_order/static/src/app/screens/scrap_list_screen/scrap_list_screen.xml:0
msgid "Product"
msgstr "Produit"

#. module: pos_scrap_order
#. odoo-javascript
#: code:addons/pos_scrap_order/static/src/app/screens/scrap_list_screen/scrap_list_screen.xml:0
msgid "Quantity"
msgstr "Quantité"

#. module: pos_scrap_order
#. odoo-javascript
#: code:addons/pos_scrap_order/static/src/app/screens/scrap_list_screen/scrap_list_screen.xml:0
msgid "Reference"
msgstr "Référence"

#. module: pos_scrap_order
#: model:ir.model,name:pos_scrap_order.model_stock_scrap
msgid "Scrap"
msgstr "Rebut"

#. module: pos_scrap_order
#. odoo-javascript
#: code:addons/pos_scrap_order/static/src/app/screens/scrap_screen/scrap_screen.xml:0
msgid "Scrap Order"
msgstr "Ordre de rebut"

#. module: pos_scrap_order
#: model:ir.model.fields,field_description:pos_scrap_order.field_pos_config__scrap_order_option
#: model_terms:ir.ui.view,arch_db:pos_scrap_order.pos_config_view_form_inherit
msgid "Scrap Order Option"
msgstr "Option d'ordre de rebut"

#. module: pos_scrap_order
#. odoo-javascript
#: code:addons/pos_scrap_order/static/src/app/screens/scrap_list_screen/scrap_list_screen.xml:0
msgid "Scrap Orders"
msgstr "Ordres de rebut"

#. module: pos_scrap_order
#. odoo-python
#: code:addons/pos_scrap_order/models/pos_order.py:0
msgid "Scrap order is disabled."
msgstr "L'ordre de rebut est désactivé."

#. module: pos_scrap_order
#. odoo-python
#: code:addons/pos_scrap_order/models/pos_order.py:0
msgid "Stock data is incorrect. Please contact the administrator."
msgstr "Les données de stock sont incorrectes. Veuillez contacter l'administrateur."

#. module: pos_scrap_order
#. odoo-python
#: code:addons/pos_scrap_order/models/pos_order.py:0
msgid "Successful!"
msgstr "Réussi!"

#. module: pos_scrap_order
#. odoo-python
#: code:addons/pos_scrap_order/models/pos_order.py:0
msgid "The product {} has no enough stock."
msgstr "Le produit {} n'a pas assez de stock."

#. module: pos_scrap_order
#. odoo-python
#: code:addons/pos_scrap_order/models/pos_order.py:0
msgid "The product(s) has been sent to scrap location"
msgstr "Le(s) produit(s) a(ont) été envoyé(s) vers l'emplacement de rebut"

#. module: pos_scrap_order
#. odoo-javascript
#: code:addons/pos_scrap_order/static/src/app/screens/scrap_screen/scrap_screen.xml:0
msgid "This action will move these products below into the scrap location"
msgstr "Cette action va déplacer ces produits ci-dessous vers l'emplacement de rebut"

#. module: pos_scrap_order
#. odoo-javascript
#: code:addons/pos_scrap_order/static/src/app/screens/scrap_screen/scrap_screen.js:0
msgid "This order has been paid or has no line."
msgstr "Cette commande a été payée ou n'a pas de ligne."

#. module: pos_scrap_order
#. odoo-python
#: code:addons/pos_scrap_order/models/pos_order.py:0
msgid "User Error!"
msgstr "Erreur d'utilisateur!"

#. module: pos_scrap_order
#. odoo-python
#: code:addons/pos_scrap_order/models/pos_order.py:0
msgid "You have no right to make the scrap order."
msgstr "Vous n'avez pas le droit de faire un ordre de rebut."
3 changes: 3 additions & 0 deletions pos_scrap_order/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from . import pos_order
from . import pos_config
from . import stock_scrap
Loading
Loading