feat: Automatically adjust negative cash closing differences to prevent loss journal entries and increment module version.

This commit is contained in:
Suherdy Yacob 2026-02-03 16:46:08 +07:00
parent 8a57bbd7bb
commit d2cac42d47
10 changed files with 20 additions and 2 deletions

5
.gitignore vendored
View File

@ -64,3 +64,8 @@ session/
# System # System
.DS_Store .DS_Store
Thumbs.db Thumbs.db
# Editors
.vscode/
.idea/
*.swp

View File

@ -1,6 +1,6 @@
# POS Cash Opening Adjustment # POS Cash Opening Adjustment
**Version:** 17.0.1.0.0 **Version:** 17.0.1.1.0
**Author:** Suherdy Yacob **Author:** Suherdy Yacob
**Category:** Point of Sale **Category:** Point of Sale
**License:** LGPL-3 **License:** LGPL-3
@ -12,6 +12,7 @@ Prevent opening cash journal entries and exclude opening float from closing tota
- **Opening Cash Adjustment:** Modifies how opening cash is handled to prevent unwanted journal entries. - **Opening Cash Adjustment:** Modifies how opening cash is handled to prevent unwanted journal entries.
- **Closing Totals:** Excludes opening float from closing totals calculation. - **Closing Totals:** Excludes opening float from closing totals calculation.
- **Zero-Amount Payment Cleanup:** Automatically removes `pos.payment` lines with `0.00` amount during session verification. This prevents the creation of "Difference at closing PoS session" journal items triggered by empty payments (e.g. from 100% discount or external payment edge cases). - **Zero-Amount Payment Cleanup:** Automatically removes `pos.payment` lines with `0.00` amount during session verification. This prevents the creation of "Difference at closing PoS session" journal items triggered by empty payments (e.g. from 100% discount or external payment edge cases).
- **Negative Cash Closing Adjustment:** Automatically overrides the cashier's input to match the expected closing balance if a negative difference is detected, logging the action in the chatter and preventing a loss journal entry.
## Technical Details ## Technical Details
### Zero-Amount Payment Fix ### Zero-Amount Payment Fix

View File

@ -1,7 +1,7 @@
{ {
"name": "POS Cash Opening Adjustment", "name": "POS Cash Opening Adjustment",
"summary": "Prevent opening cash journal entries and exclude opening float from closing totals while keeping reconciliation data.", "summary": "Prevent opening cash journal entries and exclude opening float from closing totals while keeping reconciliation data.",
"version": "17.0.1.0.0", "version": "17.0.1.1.0",
"category": "Point of Sale", "category": "Point of Sale",
"author": "Suherdy Yacob", "author": "Suherdy Yacob",
"depends": ["point_of_sale"], "depends": ["point_of_sale"],

Binary file not shown.

Binary file not shown.

View File

@ -136,6 +136,18 @@ class PosSession(models.Model):
def _validate_session(self, balancing_account=False, amount_to_balance=0, bank_payment_method_diffs=None): def _validate_session(self, balancing_account=False, amount_to_balance=0, bank_payment_method_diffs=None):
for session in self: for session in self:
if session.config_id.cash_control:
difference = session.cash_register_balance_end_real - session.cash_register_balance_end
if session.currency_id.compare_amounts(difference, 0.0) < 0:
session.message_post(body="Auto-adjustment: Cashier input %s overridden to expected %s to suppress negative difference of %s." % (
session.currency_id.format(session.cash_register_balance_end_real),
session.currency_id.format(session.cash_register_balance_end),
session.currency_id.format(difference)
))
session.write({'cash_register_balance_end_real': session.cash_register_balance_end})
if amount_to_balance:
amount_to_balance -= difference
for order in session.order_ids: for order in session.order_ids:
for payment in order.payment_ids: for payment in order.payment_ids:
if session.currency_id.is_zero(payment.amount): if session.currency_id.is_zero(payment.amount):