pos_reverse_downpayment/README.md
2026-02-27 17:58:49 +07:00

45 lines
2.7 KiB
Markdown

# POS Reverse Down Payment
This custom Odoo 17 module implements a special workflow for handling down payments in the Point of Sale (POS) where the cashier creates a sales quotation from the POS UI but leaves the standard products in the cart for printing on the receipt.
## Purpose
The module resolves a few standard Odoo limitations for specific workflows:
1. **Zero-Priced Quotation Products:** Customers can receive a physical POS receipt displaying all ordered standard items (at 0 price) and a "Down Payment" line at normal price.
2. **Quotation Generation:** A backend Quotation (`sale.order`) is automatically created via XML-RPC. Standard products are pushed onto this Quotation with their original prices and taxes.
3. **No Stock Deductions:** Since the standard products remain in the POS cart at $0 price, Odoo normally tries to create zero-value stock moves. This module intercepts these moves (using `is_quotation_line` flag) to ensure stock doesn't get erroneously deducted before the Quotation is confirmed by backend staff.
4. **Kitchen Order Prevention:** Quotation items are prevented from printing in the kitchen display by overriding the `sendChanges` logic (for `pos_preparation_display` and `pos_restaurant`).
5. **Settlement Stability:** Properly resolves Odoo's internal UI when the cashier eventually loads the Quotation and settles the remaining balance.
## Dependencies
- Odoo 17.0
- `point_of_sale`
- `pos_sale`
- `pos_restaurant`
- `pos_preparation_display`
## How it works (Technical Flow)
### 1. POS UI Payment Intercept
When processing a payment (`models.js` `pay()` override), the module checks if:
- Standard products exist.
- A down payment product exists with a positive quantity and price.
If true, it asks the cashier if they want to create a quotation.
### 2. Backend RPC Creation
If approved, it sends the original list of standard products via `create_quotation_from_pos_lines` in `pos_order.py`.
The newly created `sale_order_origin_id` is linked to the down payment line to ensure tracking and eventual invoice settlements match.
### 3. POS Clean Up
The cart's standard items are zero-priced and flagged (`is_quotation_line = true`) so the custom JS won't prompt again during final payment validation.
### 4. Printing & Preparation
- **Kitchen Tickets**: Checks for positive down payments in `sendChanges`. If found, no items go to the kitchen.
- **Stock Moves**: Odoo's `_create_order_picking` natively ignores lines with `is_quotation_line`.
## Installation
Clone or copy this repository into your Odoo custom addons path, update the app list, and install the `pos_reverse_downpayment` module.
No further configurations are required besides the standard Odoo POS Down Payment product settings.