From 6a1c148b8d87e048fe30e58003ba06e1f5100972 Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Mon, 23 Nov 2020 13:44:58 +0100 Subject: [PATCH 1/2] [ADD] new module pos_cash_control_multiple_config to handle correctly cash control in a multi point of sale context --- pos_cash_control_multiple_config/README.rst | 8 +++++ pos_cash_control_multiple_config/__init__.py | 1 + .../__manifest__.py | 18 +++++++++++ .../models/__init__.py | 2 ++ .../models/account_bank_statement.py | 31 +++++++++++++++++++ .../models/pos_session.py | 16 ++++++++++ .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 12 +++++++ 8 files changed, 89 insertions(+) create mode 100644 pos_cash_control_multiple_config/README.rst create mode 100644 pos_cash_control_multiple_config/__init__.py create mode 100644 pos_cash_control_multiple_config/__manifest__.py create mode 100644 pos_cash_control_multiple_config/models/__init__.py create mode 100644 pos_cash_control_multiple_config/models/account_bank_statement.py create mode 100644 pos_cash_control_multiple_config/models/pos_session.py create mode 100644 pos_cash_control_multiple_config/readme/CONTRIBUTORS.rst create mode 100644 pos_cash_control_multiple_config/readme/DESCRIPTION.rst diff --git a/pos_cash_control_multiple_config/README.rst b/pos_cash_control_multiple_config/README.rst new file mode 100644 index 0000000000..34301032ea --- /dev/null +++ b/pos_cash_control_multiple_config/README.rst @@ -0,0 +1,8 @@ +======================================= +Point Of Sale - Correct Opening Balance +======================================= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/pos_cash_control_multiple_config/__init__.py b/pos_cash_control_multiple_config/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/pos_cash_control_multiple_config/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/pos_cash_control_multiple_config/__manifest__.py b/pos_cash_control_multiple_config/__manifest__.py new file mode 100644 index 0000000000..0c0b79cd84 --- /dev/null +++ b/pos_cash_control_multiple_config/__manifest__.py @@ -0,0 +1,18 @@ +# Copyright (C) 2020 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + "name": "Point Of Sale - Correct Opening Balance", + "summary": "Handle correctly opening balance in a multi point of sale" + " context with Cash control enabled.", + "version": "12.0.1.0.1", + "category": "Point of Sale", + "author": "GRAP, Odoo Community Association (OCA)", + "website": "http://www.grap.coop", + "license": "AGPL-3", + "depends": [ + "point_of_sale", + ], + "installable": True, +} diff --git a/pos_cash_control_multiple_config/models/__init__.py b/pos_cash_control_multiple_config/models/__init__.py new file mode 100644 index 0000000000..c3ede92432 --- /dev/null +++ b/pos_cash_control_multiple_config/models/__init__.py @@ -0,0 +1,2 @@ +from . import account_bank_statement +from . import pos_session diff --git a/pos_cash_control_multiple_config/models/account_bank_statement.py b/pos_cash_control_multiple_config/models/account_bank_statement.py new file mode 100644 index 0000000000..988b403803 --- /dev/null +++ b/pos_cash_control_multiple_config/models/account_bank_statement.py @@ -0,0 +1,31 @@ +# Copyright (C) 2020 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, models + + +class AccountBankStatement(models.Model): + _inherit = "account.bank.statement" + + @api.multi + def _get_opening_balance(self, journal_id): + PosSession = self.env["pos.session"] + pos_config_id = self.env.context.get("pos_config_id") + if self.env.context.get("pos_config_id"): + sessions = PosSession.search( + [('config_id', '=', pos_config_id)], + order="start_at desc", limit=1) + if not sessions: + # it is the first time the pos config is opened. + # returning 0 + return 0 + else: + last_valid_statement = False + for old_statement in sessions.mapped('statement_ids'): + if old_statement.journal_id.id == journal_id: + last_valid_statement = old_statement + if last_valid_statement: + return last_valid_statement.balance_end + + return super()._get_opening_balance(journal_id) diff --git a/pos_cash_control_multiple_config/models/pos_session.py b/pos_cash_control_multiple_config/models/pos_session.py new file mode 100644 index 0000000000..4c0bd37791 --- /dev/null +++ b/pos_cash_control_multiple_config/models/pos_session.py @@ -0,0 +1,16 @@ +# Copyright (C) 2020 - Today: GRAP (http://www.grap.coop) +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, models + + +class PosSession(models.Model): + _inherit = "pos.session" + + @api.model + def create(self, values): + pos_config_id = values.get('config_id')\ + or self.env.context.get('default_config_id') + return super(PosSession, self.with_context( + pos_config_id=pos_config_id)).create(values) diff --git a/pos_cash_control_multiple_config/readme/CONTRIBUTORS.rst b/pos_cash_control_multiple_config/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..9f76a75bc1 --- /dev/null +++ b/pos_cash_control_multiple_config/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Sylvain LE GAL diff --git a/pos_cash_control_multiple_config/readme/DESCRIPTION.rst b/pos_cash_control_multiple_config/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..ccb6bb2b7e --- /dev/null +++ b/pos_cash_control_multiple_config/readme/DESCRIPTION.rst @@ -0,0 +1,12 @@ +This module extends the functionality of the point of sale fixing +cash control in a multi pos config context. + +By default, in Odoo, if we have two Point of Sale (``pos.config``) with cash control +enabled on each Point of sale, the opening balance will be bad, when opening many +session. + +This module fixes that bug. + +Ref : + +https://github.com/odoo/odoo/issues/62147 From d58736ae400b0154aad662c26ec498aa910edaaa Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Thu, 10 Dec 2020 23:58:11 +0100 Subject: [PATCH 2/2] [IMP] description and algorithm --- pos_cash_control_multiple_config/__manifest__.py | 2 +- .../models/account_bank_statement.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pos_cash_control_multiple_config/__manifest__.py b/pos_cash_control_multiple_config/__manifest__.py index 0c0b79cd84..217fb65eb9 100644 --- a/pos_cash_control_multiple_config/__manifest__.py +++ b/pos_cash_control_multiple_config/__manifest__.py @@ -9,7 +9,7 @@ "version": "12.0.1.0.1", "category": "Point of Sale", "author": "GRAP, Odoo Community Association (OCA)", - "website": "http://www.grap.coop", + "website": "https://github.com/OCA/pos", "license": "AGPL-3", "depends": [ "point_of_sale", diff --git a/pos_cash_control_multiple_config/models/account_bank_statement.py b/pos_cash_control_multiple_config/models/account_bank_statement.py index 988b403803..425c0a79db 100644 --- a/pos_cash_control_multiple_config/models/account_bank_statement.py +++ b/pos_cash_control_multiple_config/models/account_bank_statement.py @@ -12,7 +12,7 @@ class AccountBankStatement(models.Model): def _get_opening_balance(self, journal_id): PosSession = self.env["pos.session"] pos_config_id = self.env.context.get("pos_config_id") - if self.env.context.get("pos_config_id"): + if pos_config_id: sessions = PosSession.search( [('config_id', '=', pos_config_id)], order="start_at desc", limit=1) @@ -26,6 +26,6 @@ def _get_opening_balance(self, journal_id): if old_statement.journal_id.id == journal_id: last_valid_statement = old_statement if last_valid_statement: - return last_valid_statement.balance_end + return last_valid_statement.balance_end_real return super()._get_opening_balance(journal_id)