fix: Remove zero-amount payments during POS session validation.

This commit is contained in:
Suherdy Yacob 2026-01-19 15:41:23 +07:00
parent c1b752a990
commit 8a57bbd7bb
13 changed files with 93 additions and 1 deletions

66
.gitignore vendored Normal file
View File

@ -0,0 +1,66 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.pot
*.po
# Odoo specific
*.log
filestore/
session/
.odoo/
# System
.DS_Store
Thumbs.db

18
README.md Normal file
View File

@ -0,0 +1,18 @@
# POS Cash Opening Adjustment
**Version:** 17.0.1.0.0
**Author:** Suherdy Yacob
**Category:** Point of Sale
**License:** LGPL-3
## Summary
Prevent opening cash journal entries and exclude opening float from closing totals while keeping reconciliation data.
## Features
- **Opening Cash Adjustment:** Modifies how opening cash is handled to prevent unwanted journal entries.
- **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).
## Technical Details
### Zero-Amount Payment Fix
The module overrides `_validate_session` in `pos.session`. Before the standard validation process begins, it iterates through all orders in the session and unlinks any payment lines where the amount is considered zero by the session's currency.

0
__init__.py Normal file → Executable file
View File

0
__manifest__.py Normal file → Executable file
View File

0
__pycache__/__init__.cpython-310.pyc Normal file → Executable file
View File

Binary file not shown.

0
models/__init__.py Normal file → Executable file
View File

0
models/__pycache__/__init__.cpython-310.pyc Normal file → Executable file
View File

0
models/__pycache__/pos_session.cpython-310.pyc Normal file → Executable file
View File

8
models/pos_session.py Normal file → Executable file
View File

@ -133,3 +133,11 @@ class PosSession(models.Model):
"amount": expected_total, "amount": expected_total,
}) })
return data return data
def _validate_session(self, balancing_account=False, amount_to_balance=0, bank_payment_method_diffs=None):
for session in self:
for order in session.order_ids:
for payment in order.payment_ids:
if session.currency_id.is_zero(payment.amount):
payment.unlink()
return super(PosSession, self)._validate_session(balancing_account, amount_to_balance, bank_payment_method_diffs)

0
static/src/xml/closing_popup.xml Normal file → Executable file
View File