2.7 KiB
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:
- 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.
- 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. - 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_lineflag) to ensure stock doesn't get erroneously deducted before the Quotation is confirmed by backend staff. - Kitchen Order Prevention: Quotation items are prevented from printing in the kitchen display by overriding the
sendChangeslogic (forpos_preparation_displayandpos_restaurant). - 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_salepos_salepos_restaurantpos_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_pickingnatively ignores lines withis_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.