From 6e6e2aab73eee4945ac061fc903d73c333bf4014 Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Mon, 27 Apr 2020 08:07:47 +0200 Subject: [PATCH 1/6] [ADD][8.0] pos_change_payment. (from github.com/grap/grap-odoo-incubator) --- pos_change_payment/README.rst | 91 ++++++++++ pos_change_payment/__init__.py | 6 + pos_change_payment/__openerp__.py | 23 +++ pos_change_payment/i18n/fr.po | 168 ++++++++++++++++++ pos_change_payment/models/__init__.py | 9 + .../models/account_bank_statement_line.py | 66 +++++++ .../models/pos_change_payments_wizard.py | 72 ++++++++ .../models/pos_change_payments_wizard_line.py | 25 +++ pos_change_payment/models/pos_make_payment.py | 25 +++ pos_change_payment/models/pos_order.py | 57 ++++++ .../models/pos_switch_journal_wizard.py | 78 ++++++++ pos_change_payment/readme/CONTRIBUTORS.rst | 2 + pos_change_payment/readme/DESCRIPTION.rst | 34 ++++ .../static/description/icon.png | Bin 0 -> 8789 bytes .../description/pos_order_change_payments.png | Bin 0 -> 28772 bytes .../description/pos_order_switch_payment.png | Bin 0 -> 26321 bytes pos_change_payment/tests/__init__.py | 2 + pos_change_payment/tests/test_module.py | 157 ++++++++++++++++ pos_change_payment/views/action.xml | 26 +++ .../views/view_account_bank_statement.xml | 21 +++ .../views/view_pos_change_payments_wizard.xml | 36 ++++ pos_change_payment/views/view_pos_order.xml | 30 ++++ .../views/view_pos_switch_journal_wizard.xml | 29 +++ 23 files changed, 957 insertions(+) create mode 100644 pos_change_payment/README.rst create mode 100644 pos_change_payment/__init__.py create mode 100644 pos_change_payment/__openerp__.py create mode 100644 pos_change_payment/i18n/fr.po create mode 100644 pos_change_payment/models/__init__.py create mode 100644 pos_change_payment/models/account_bank_statement_line.py create mode 100644 pos_change_payment/models/pos_change_payments_wizard.py create mode 100644 pos_change_payment/models/pos_change_payments_wizard_line.py create mode 100644 pos_change_payment/models/pos_make_payment.py create mode 100644 pos_change_payment/models/pos_order.py create mode 100644 pos_change_payment/models/pos_switch_journal_wizard.py create mode 100644 pos_change_payment/readme/CONTRIBUTORS.rst create mode 100644 pos_change_payment/readme/DESCRIPTION.rst create mode 100644 pos_change_payment/static/description/icon.png create mode 100644 pos_change_payment/static/description/pos_order_change_payments.png create mode 100644 pos_change_payment/static/description/pos_order_switch_payment.png create mode 100644 pos_change_payment/tests/__init__.py create mode 100644 pos_change_payment/tests/test_module.py create mode 100644 pos_change_payment/views/action.xml create mode 100644 pos_change_payment/views/view_account_bank_statement.xml create mode 100644 pos_change_payment/views/view_pos_change_payments_wizard.xml create mode 100644 pos_change_payment/views/view_pos_order.xml create mode 100644 pos_change_payment/views/view_pos_switch_journal_wizard.xml diff --git a/pos_change_payment/README.rst b/pos_change_payment/README.rst new file mode 100644 index 00000000..c71d715e --- /dev/null +++ b/pos_change_payment/README.rst @@ -0,0 +1,91 @@ +=============================== +Point Of Sale - Payments Change +=============================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-grap%2Fgrap--odoo--incubator-lightgray.png?logo=github + :target: https://github.com/grap/grap-odoo-incubator/tree/8.0/pos_change_payment + :alt: grap/grap-odoo-incubator + +|badge1| |badge2| |badge3| + +Improve payment changes when user did a mistake and disable some actions on +Point of Sale Bank Statement Line + +* Add the possibility to switch a payment (account.bank.statement.line) + of an order from a journal to another. This feature is usefull when + the user realized that he did a mistake, during the close of the session, + or just after he marked the order as paid + (Only if entries has not been generated) + +.. figure:: https://raw.githubusercontent.com/grap/grap-odoo-incubator/8.0/pos_change_payment/static/description/pos_order_switch_payment.png + +* Add the possibility to change all payments (method and amount) of a POS + (Only if entries has not been generated) + +.. figure:: https://raw.githubusercontent.com/grap/grap-odoo-incubator/8.0/pos_change_payment/static/description/pos_order_change_payments.png + +Bug Fixes / Improvement +~~~~~~~~~~~~~~~~~~~~~~~ + +* In the pos.payment wizard, display only the payment methods defined in + the current POS session + +* Disable the possibility to edit / delete a bank statement line on a POS + Order that has generated his entries, except using the wizard of this + module. This will prevent the generation of bad account move during + the close of the session; (mainly unbalanced moves) + +* All the cash payment are merged into a single one statement line. This + feature is usefull if the user use OpenERP as a calculator, writing + for a payment: + +1. Payment 1/ Cash 50 €; +2. Payment 2/ Cash -3,56 €; +3. With this module, the final statement line is a single line Payment 1/ Cash 46,44 € + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* GRAP + +Contributors +~~~~~~~~~~~~ + +* Sylvain LE GAL +* Julien WESTE + +Maintainers +~~~~~~~~~~~ + +This module is part of the `grap/grap-odoo-incubator `_ project on GitHub. + +You are welcome to contribute. diff --git a/pos_change_payment/__init__.py b/pos_change_payment/__init__.py new file mode 100644 index 00000000..1ff6b9e1 --- /dev/null +++ b/pos_change_payment/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2015-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 . import models diff --git a/pos_change_payment/__openerp__.py b/pos_change_payment/__openerp__.py new file mode 100644 index 00000000..f9bc6956 --- /dev/null +++ b/pos_change_payment/__openerp__.py @@ -0,0 +1,23 @@ +# coding: utf-8 +# Copyright (C) 2013 - 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 - Payments Change', + 'version': '8.0.1.0.0', + 'category': 'Point Of Sale', + 'author': 'GRAP', + 'website': 'http://www.grap.coop', + 'license': 'AGPL-3', + 'depends': [ + 'point_of_sale', + ], + 'data': [ + 'views/action.xml', + 'views/view_account_bank_statement.xml', + 'views/view_pos_change_payments_wizard.xml', + 'views/view_pos_order.xml', + 'views/view_pos_switch_journal_wizard.xml', + ], + 'installable': True, +} diff --git a/pos_change_payment/i18n/fr.po b/pos_change_payment/i18n/fr.po new file mode 100644 index 00000000..2a1d7bac --- /dev/null +++ b/pos_change_payment/i18n/fr.po @@ -0,0 +1,168 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * pos_change_payment +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-04-01 14:25+0000\n" +"PO-Revision-Date: 2015-04-01 14:25+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: pos_change_payment +#: field:pos.change.payments.wizard.line,amount:0 +#: field:pos.switch.journal.wizard,amount:0 +msgid "Amount" +msgstr "Montant" + +#. module: pos_change_payment +#: code:_description:0 +#: model:ir.model,name:pos_change_payment.model_account_bank_statement_line +#, python-format +msgid "Bank Statement Line" +msgstr "Ligne de relevé de banque" + +#. module: pos_change_payment +#: view:pos.change.payments.wizard:0 +#: view:pos.switch.journal.wizard:0 +msgid "Cancel" +msgstr "Annuler" + +#. module: pos_change_payment +#: model:ir.actions.act_window,name:pos_change_payment.action_pos_change_payments_wizard +#: view:pos.change.payments.wizard:0 +#: view:pos.order:0 +msgid "Change Payments" +msgstr "Changer les paiements" + +#. module: pos_change_payment +#: code:addons/pos_change_payment/model/pos_change_payments_wizard.py:77 +#, python-format +msgid "Differences between the two values for the POS Order '%s':\n" +"\n" +" * Total of all the new payments %s;\n" +" * Total of the POS Order %s;\n" +"\n" +"Please change the payments." +msgstr "Différences entre les deux valeurs pour la vente '%s':\n" +"\n" +" * Total des nouveaux paiements %s;\n" +" * Total de la vente %s;\n" +"\n" +"Veuillez changer les paiements." + +#. module: pos_change_payment +#: code:addons/pos_change_payment/model/account_bank_statement_line.py:78 +#: code:addons/pos_change_payment/model/pos_change_payments_wizard.py:36 +#: code:addons/pos_change_payment/model/pos_change_payments_wizard.py:72 +#: code:addons/pos_change_payment/model/pos_order.py:76 +#: code:addons/pos_change_payment/model/pos_switch_journal_wizard.py:64 +#, python-format +msgid "Error!" +msgstr "Erreur !" + +#. module: pos_change_payment +#: code:addons/pos_change_payment/model/pos_change_payments_wizard.py:36 +#: code:addons/pos_change_payment/model/pos_switch_journal_wizard.py:64 +#, python-format +msgid "Incorrect Call!" +msgstr "Appel incorrect !" + +#. module: pos_change_payment +#: code:_description:0 +#: model:ir.model,name:pos_change_payment.model_account_journal +#: field:pos.change.payments.wizard.line,journal_id:0 +#, python-format +msgid "Journal" +msgstr "Journal" + +#. module: pos_change_payment +#: field:pos.switch.journal.wizard,new_statement_id:0 +msgid "New Journal" +msgstr "Nouveau journal" + +#. module: pos_change_payment +#: field:pos.switch.journal.wizard,old_journal_id:0 +msgid "Old Journal" +msgstr "Ancien journal" + +#. module: pos_change_payment +#: field:pos.change.payments.wizard,order_id:0 +msgid "POS Order" +msgstr "Vente" + +#. module: pos_change_payment +#: view:pos.order:0 +msgid "Payment" +msgstr "Paiement" + +#. module: pos_change_payment +#: view:pos.change.payments.wizard:0 +msgid "Payment Lines" +msgstr "Lignes de paiement" + +#. module: pos_change_payment +#: code:_description:0 +#: model:ir.model,name:pos_change_payment.model_pos_order +#, python-format +msgid "Point of Sale" +msgstr "Point de Vente" + +#. module: pos_change_payment +#: code:_description:0 +#: model:ir.model,name:pos_change_payment.model_pos_make_payment +#, python-format +msgid "Point of Sale Payment" +msgstr "Paiement du ticket" + +#. module: pos_change_payment +#: field:pos.switch.journal.wizard,statement_line_id:0 +msgid "Statement" +msgstr "Relevé bancaire" + +#. module: pos_change_payment +#: view:account.bank.statement:0 +#: model:ir.actions.act_window,name:pos_change_payment.action_pos_switch_journal_wizard +#: view:pos.order:0 +#: view:pos.switch.journal.wizard:0 +msgid "Switch Journal" +msgstr "Changer de Journal" + +#. module: pos_change_payment +#: field:pos.change.payments.wizard,amount_total:0 +msgid "Total" +msgstr "Total" + +#. module: pos_change_payment +#: field:pos.change.payments.wizard,line_ids:0 +msgid "Wizard Lines" +msgstr "Lignes" + +#. module: pos_change_payment +#: field:pos.change.payments.wizard.line,wizard_id:0 +msgid "Wizard Ref" +msgstr "Référence" + +#. module: pos_change_payment +#: code:addons/pos_change_payment/model/account_bank_statement_line.py:79 +#, python-format +msgid "You can not change payments of POS by this way. Please use the regular wizard in POS view!" +msgstr "Vous ne pouvez pas changer les paiements de cette vente de cette façon. Veuillez utiliser l'interface prévue à cet effet dans la vue de la vente !" + +#. module: pos_change_payment +#: code:addons/pos_change_payment/model/pos_order.py:78 +#, python-format +msgid "You can not change payments of the POS '%s' because the associated session '%s' has been closed!" +msgstr "Vous ne pouvez pas changer les paiements de la Vente '%s' car la session associée '%s' a été clôturé !" + +#. module: pos_change_payment +#: view:pos.change.payments.wizard:0 +#: view:pos.switch.journal.wizard:0 +msgid "or" +msgstr "ou" diff --git a/pos_change_payment/models/__init__.py b/pos_change_payment/models/__init__.py new file mode 100644 index 00000000..4b15774d --- /dev/null +++ b/pos_change_payment/models/__init__.py @@ -0,0 +1,9 @@ +# coding: utf-8 + +from . import pos_order +from . import account_bank_statement_line +from . import pos_make_payment + +from . import pos_switch_journal_wizard +from . import pos_change_payments_wizard +from . import pos_change_payments_wizard_line diff --git a/pos_change_payment/models/account_bank_statement_line.py b/pos_change_payment/models/account_bank_statement_line.py new file mode 100644 index 00000000..b668e6db --- /dev/null +++ b/pos_change_payment/models/account_bank_statement_line.py @@ -0,0 +1,66 @@ +# coding: utf-8 +# Copyright (C) 2015-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 openerp import _, api, models +from openerp.exceptions import ValidationError + + +class AccountBankStatementLine(models.Model): + _inherit = 'account.bank.statement.line' + + _POS_PAYMENT_ALLOW_WRITE = [ + 'sequence', 'journal_entry_id', + ] + + # Private Function Section + @api.multi + def _check_allow_change_pos_payment(self, vals): + """Allow or block change of account bank statement line, linked to + a non draft POS Order. + * if 'change_pos_payment' is in the context, changes are allowed; + * otherwise: + * allow write of some fields only; + * forbid deletion;""" + values = vals.copy() if vals else {} + check_pos_order = False + + if values: + # Allow some write + for key in self._POS_PAYMENT_ALLOW_WRITE: + if key in values: + del values[key] + if not values: + return + + # Allow changes, if user use the wizard + if self._context.get('change_pos_payment', False): + check_pos_order = True + + for statement_line in self: + order = statement_line.pos_statement_id + if order: + if order.state != 'draft': + if check_pos_order: + order._allow_change_payments() + else: + if values.keys() == ['partner_id']: + order._allow_change_payments() + else: + raise ValidationError(_( + "You can not change payments of POS by this" + " way. Please use the regular wizard in POS" + " view!")) + + # Overload Section + @api.multi + def write(self, vals): + self._check_allow_change_pos_payment(vals) + return super(AccountBankStatementLine, self).write(vals) + + @api.multi + def unlink(self): + self._check_allow_change_pos_payment(None) + return super(AccountBankStatementLine, self).unlink() diff --git a/pos_change_payment/models/pos_change_payments_wizard.py b/pos_change_payment/models/pos_change_payments_wizard.py new file mode 100644 index 00000000..a34ef4b1 --- /dev/null +++ b/pos_change_payment/models/pos_change_payments_wizard.py @@ -0,0 +1,72 @@ +# coding: utf-8 +# Copyright (C) 2015-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 openerp import _, api, fields, models +from openerp.exceptions import Warning as UserError + + +class PosChangePaymentsWizard(models.TransientModel): + _name = 'pos.change.payments.wizard' + + # Column Section + order_id = fields.Many2one( + comodel_name='pos.order', string='Order', readonly=True) + + session_id = fields.Many2one( + comodel_name='pos.session', string='Session', readonly=True) + + line_ids = fields.One2many( + comodel_name='pos.change.payments.wizard.line', + inverse_name='wizard_id', string='Payment Lines') + + amount_total = fields.Float(string='Total', readonly=True) + + # View Section + @api.model + def default_get(self, fields): + order_obj = self.env['pos.order'] + res = super(PosChangePaymentsWizard, self).default_get(fields) + order = order_obj.browse(self._context.get('active_id')) + res.update({'order_id': order.id}) + res.update({'session_id': order.session_id.id}) + res.update({'amount_total': order.amount_total}) + return res + + # View section + @api.multi + def button_change_payments(self): + self.ensure_one() + order = self.order_id + + # Check if the total is correct + total = 0 + for line in self.line_ids: + total += line.amount + if total != self.amount_total: + raise UserError(_( + "Differences between the two values for the POS" + " Order '%s':\n\n" + " * Total of all the new payments %s;\n" + " * Total of the POS Order %s;\n\n" + "Please change the payments." % ( + order.name, total, order.amount_total))) + + # Check if change payments is allowed + order._allow_change_payments() + + # Remove old statements + order.statement_ids.with_context(change_pos_payment=True).unlink() + + # Create new payment + for line in self.line_ids: + order.add_payment_v8({ + 'journal': line.new_journal_id.id, + 'amount': line.amount, + }) + + return { + 'type': 'ir.actions.client', + 'tag': 'reload', + } diff --git a/pos_change_payment/models/pos_change_payments_wizard_line.py b/pos_change_payment/models/pos_change_payments_wizard_line.py new file mode 100644 index 00000000..b9f62f41 --- /dev/null +++ b/pos_change_payment/models/pos_change_payments_wizard_line.py @@ -0,0 +1,25 @@ +# coding: utf-8 +# Copyright (C) 2015 - 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 openerp import api, fields, models + + +class PosChangePaymentsWizardLine(models.TransientModel): + _name = 'pos.change.payments.wizard.line' + + wizard_id = fields.Many2one( + comodel_name='pos.change.payments.wizard', ondelete='cascade') + + new_journal_id = fields.Many2one( + comodel_name='account.journal', string='Journal', required=True, + domain=lambda s: s._domain_new_journal_id()) + + amount = fields.Float(string='Amount', required=True) + + @api.model + def _domain_new_journal_id(self): + PosOrder = self.env['pos.order'] + order = PosOrder.browse(self.env.context.get('active_id')) + return [('id', 'in', order.session_id.journal_ids.ids)] diff --git a/pos_change_payment/models/pos_make_payment.py b/pos_change_payment/models/pos_make_payment.py new file mode 100644 index 00000000..85b605af --- /dev/null +++ b/pos_change_payment/models/pos_make_payment.py @@ -0,0 +1,25 @@ +# coding: utf-8 +# Copyright (C) 2015-Today GRAP (http://www.grap.coop) +# @author Julien WESTE +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import api, models, fields + + +class PosMakePayment(models.TransientModel): + _inherit = 'pos.make.payment' + + # # Column Section (Overload) + journal_id = fields.Many2one( + default=False, + domain=lambda s: s._domain_journal_id()) + + @api.model + def _domain_journal_id(self): + session_obj = self.env['pos.session'] + if self.env.context.get('pos_session_id', False): + session = session_obj.browse( + int(self._context.get('pos_session_id'))) + return [('id', 'in', session.journal_ids.ids)] + return [] diff --git a/pos_change_payment/models/pos_order.py b/pos_change_payment/models/pos_order.py new file mode 100644 index 00000000..e1c32ee0 --- /dev/null +++ b/pos_change_payment/models/pos_order.py @@ -0,0 +1,57 @@ +# coding: utf-8 +# Copyright (C) 2015 - Today: GRAP (http://www.grap.coop) +# @author: Julien WESTE +# @author: Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from openerp import _, api, models +from openerp.exceptions import Warning as UserError + + +class PosOrder(models.Model): + _inherit = 'pos.order' + + # Overload Section + @api.multi + def action_paid(self): + """ Merge all cash statement line of the Order""" + self._merge_cash_payment() + return super(PosOrder, self).action_paid() + + @api.multi + def add_payment_v8(self, data): + """Hack to call old api. TODO-V10 : remove me.""" + for order in self: + self.pool['pos.order'].add_payment( + self._cr, self._uid, order.id, data, context=self._context) + return True + + # Private Function Section + @api.multi + def _merge_cash_payment(self): + for order in self: + cash_statements = order.statement_ids.filtered( + lambda x: x.journal_id.type == 'cash') + if len(cash_statements) < 2: + continue + + main_statement = cash_statements[0] + cash_total = sum(cash_statements.mapped('amount')) + + # Unlink all statements except one + cash_statements.filtered( + lambda x: x.id != main_statement.id).unlink() + main_statement.write({'amount': cash_total}) + + @api.multi + def _allow_change_payments(self): + """Return True if the user can change the payment of a POS, depending + of the state of the current session.""" + closed_orders = self.filtered( + lambda x: x.session_id.state == 'closed') + if len(closed_orders): + raise UserError(_( + "You can not change payments of the POS '%s' because" + " the associated session '%s' has been closed!" % ( + ', '.join(closed_orders.mapped('name')), + ', '.join(closed_orders.mapped('session_id.name'))))) diff --git a/pos_change_payment/models/pos_switch_journal_wizard.py b/pos_change_payment/models/pos_switch_journal_wizard.py new file mode 100644 index 00000000..ec9cb277 --- /dev/null +++ b/pos_change_payment/models/pos_switch_journal_wizard.py @@ -0,0 +1,78 @@ +# coding: utf-8 +# Copyright (C) 2015 - 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 openerp import api, fields, models + + +class PosSwitchJournalWizard(models.TransientModel): + _name = 'pos.switch.journal.wizard' + + order_id = fields.Many2one( + comodel_name='pos.order', string='PoS Order', + required=True, readonly=True) + + statement_line_id = fields.Many2one( + comodel_name='account.bank.statement.line', string='Statement', + required=True, readonly=True) + + old_journal_id = fields.Many2one( + comodel_name='account.journal', string='Old Journal', + required=True, readonly=True) + + new_journal_id = fields.Many2one( + comodel_name='account.journal', string='New Journal', + required=True, domain=lambda s: s._domain_new_journal_id()) + + amount = fields.Float(string='Amount', readonly=True) + + @api.model + def _domain_new_journal_id(self): + AccountBankStatementLine = self.env['account.bank.statement.line'] + statement_line = AccountBankStatementLine.browse( + self.env.context.get('active_id')) + return [( + 'id', 'in', + statement_line.pos_statement_id.session_id.journal_ids.ids)] + + @api.model + def default_get(self, fields): + AccountBankStatementLine = self.env['account.bank.statement.line'] + res = super(PosSwitchJournalWizard, self).default_get(fields) + statement_line = AccountBankStatementLine.browse( + self.env.context.get('active_id')) + res.update({'statement_line_id': statement_line.id}) + res.update({'order_id': statement_line.pos_statement_id.id}) + res.update({'old_journal_id': statement_line.journal_id.id}) + res.update({'amount': statement_line.amount}) + return res + + # Action section + @api.multi + def button_switch_journal(self): + self.ensure_one() + # Check if changing payment is allowed + self.order_id._allow_change_payments() + + # TODO (FIXME) when upstream is fixed. + # We do 2 write, one in the old statement, one in the new, with + # 'amount' value each time to recompute all the functional fields + # of the Account Bank Statements + amount = self.amount + self.statement_line_id.with_context(change_pos_payment=True).write({ + 'amount': 0.0, + }) + + # Change statement of the statement line + new_statement = self.order_id.session_id.statement_ids.filtered( + lambda x: x.journal_id == self.new_journal_id)[0] + self.statement_line_id.with_context(change_pos_payment=True).write({ + 'amount': amount, + 'statement_id': new_statement.id, + }) + + return { + 'type': 'ir.actions.client', + 'tag': 'reload', + } diff --git a/pos_change_payment/readme/CONTRIBUTORS.rst b/pos_change_payment/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..7754037b --- /dev/null +++ b/pos_change_payment/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* Sylvain LE GAL +* Julien WESTE diff --git a/pos_change_payment/readme/DESCRIPTION.rst b/pos_change_payment/readme/DESCRIPTION.rst new file mode 100644 index 00000000..9d62db1c --- /dev/null +++ b/pos_change_payment/readme/DESCRIPTION.rst @@ -0,0 +1,34 @@ +Improve payment changes when user did a mistake and disable some actions on +Point of Sale Bank Statement Line + +* Add the possibility to switch a payment (account.bank.statement.line) + of an order from a journal to another. This feature is usefull when + the user realized that he did a mistake, during the close of the session, + or just after he marked the order as paid + (Only if entries has not been generated) + +.. figure:: ../static/description/pos_order_switch_payment.png + +* Add the possibility to change all payments (method and amount) of a POS + (Only if entries has not been generated) + +.. figure:: ../static/description/pos_order_change_payments.png + +Bug Fixes / Improvement +~~~~~~~~~~~~~~~~~~~~~~~ + +* In the pos.payment wizard, display only the payment methods defined in + the current POS session + +* Disable the possibility to edit / delete a bank statement line on a POS + Order that has generated his entries, except using the wizard of this + module. This will prevent the generation of bad account move during + the close of the session; (mainly unbalanced moves) + +* All the cash payment are merged into a single one statement line. This + feature is usefull if the user use OpenERP as a calculator, writing + for a payment: + +1. Payment 1/ Cash 50 €; +2. Payment 2/ Cash -3,56 €; +3. With this module, the final statement line is a single line Payment 1/ Cash 46,44 € diff --git a/pos_change_payment/static/description/icon.png b/pos_change_payment/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c5d87de7540b61674744383f0208047ebbae0d05 GIT binary patch literal 8789 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 L1|nT8X&mxDwZ;V6 literal 0 HcmV?d00001 diff --git a/pos_change_payment/static/description/pos_order_change_payments.png b/pos_change_payment/static/description/pos_order_change_payments.png new file mode 100644 index 0000000000000000000000000000000000000000..ff32d529c590a8a6b2b88742d8fbf19a2f682f09 GIT binary patch literal 28772 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%0AOTmfJpA=tRS-=wN%b21HbR zTOFR3_-Xg0 z>`o@adfOq-I67+7SAjsknj-l(^~^D~Qz!e`XbY4NiG?QIgDlmfd0a2lMDV>&Y~?bJ zXzxH|!&;3Mfgj@rUnEb7YIq|mso-kWdEDSUlAf-Y7;440A?u)cIeD^!Bs4supB_jw zYYC8_mM9szpvRECD^Z3qPbHv)<|FD3b)KrtJ{6#HRt%f;v1;>$Bvsd8 zWO~~{V?c1|CHR9!!DqQ!D7);fLD6#7&34ilo% zl8-9YkoD|*6^uU~>2AlP)MvRtA4mgVnn+LJ zgS(;;*0>-&4Xm>!53c@m zM3GiVbpVvwSzF^m?FG!k`h={lXmRq%4W8JIT$oo{9@cnONy}Yh*?B9?${Qt?pk{7p zzyoj?mD5jO(b+D-fV7m z3jbt4K_~ueZdsUYs-o564XaqiUzm?qq8_?~{0TCSMqbbDW|>KRbu7lYH1<@V$VcXe zVrxA~(qIMXewfOZ#&lPyF(=939?q^+=_zsOb>=@FSi29drjX%JBQ7XtrL*^o9m-B_hd?EUn^AXZ1Y>#}Y*j1fTj%p@-cZ54m(|@^t;t%5+ zPRVgtdJJ<0Ze7xBpHVD+Ey3RA@h~e~0vh|IYC2tna+2k${@}MG@$AxaI-1pj9sU4r zE{DQA20LqV#U~{uJP=4s0j!9G833B$JPn!)aUbANql(7E-#F>cmTH?Z*lLXwZ3#wb zNx;!U;~uaW!8D&&;z9B%F($T&88HWO{^>tH$Z%t&j&L@)d&ncRI9fF#T`M5#Wt%n7 z>P-+$3D$3e|E8~VFDx~4=E}sS@_;fOVx%im?}}cMQ!<0p;e=9>{pj%s1I2LdKJNIMg01nsk+?bjQ_5`K zkKjB*qMiCy6D3SWKjZn|uJi9>iW+vrMtMI{x#|y`tIfIs2{w!duuHP`gajiV8ZN+GczpW zh=`V2N9Np6#=r8C6T|)f-Sl7Q!S~HC@hvJ`3s1U;;fw8R=W}z9e$sldGO|aJ26+uO z*`wB+pVrX}e(O7&Q1Z01^!f_}k4NHBhyopR=joW1mk*-SH~yL71dke6!0rA5chDvl zVW+l0kH=$V{T`0SPKiI zvSzEwDbUPot0J^g(OQrYCs8_NTB`w++E5;=-KA@)1V^|=PcN&i!kiqEavZ&n)Z}R% zA4EyupfjpJ1zMd|RT2^t0mM-O@>ISOR;gBmJ~L2ia>yCb^ebtx8gn<8EdCu(w8Rlj zQ@asSW23<|*x88mR4egJ_}N&ThkivK=}TB<9;qo~8pR{cWmtBGF5y3;V;6<|1m)2= zeqs3O4x}{>_1s_)U8zZ$Hav)KK&%(d8GX>CI*r*A=V#vF$Na-9ee>80nv@+zyg}~= zG>$+1IGj)spc3H17-N5GH~}4$RbTWm@W-@bCyqfNj>tNQA~q}BXCT!dnocV796Hb( zD_5G%#Dw8hgpjmMAnpcQ#TechkleNd+md z#jFM@dQk0P4rlD9okgzBH-=Z-5tVDKo~KK^Sn!dBo(7V1aC)}yVv8l?6v+u94Y{SArngBdir@Po3Ch3c zj6!{U^GLNFzv_3M4aiH#ysj@;5x=N=NGBaL>@-H6_a$oMYkxi^_;oA+NbvYHSkh z@md#<9k9@MLJzKgkomW!%h6nrSgb&ohcU}C$G7By9D3UzSaO6|ogq@%1$1y$E85{w zTH;&{HL~`UEkafg7)UT0Kr`^kvo9x9XATc?>JyLViHPxZCPvbX>2;nV_+LT?M(!C_ zcm#~^VHDd5S!xV);7~j(@)dDJALNBp#$DP0SmmTrr_2vqtkdcwGkBz@IGppc0S{CQ6cY9S7%tj=3r5QSCYo!4?=vXoh znC|iH%ET+15G%;R@!H7g8_~km*Loy_HhHnv)vvqasgh4qqx&(6dQpzFS>~D515VcT zg))_VGfd`m7^yi~rG_1gXDY_}I;nK7CKrPg@f{MjF3= z7PBpb8ExwzpSAi>%|{bANMVcbv;TJhRg4h73I)ot`%Vdjj09D15+aQdQoQLaB;Qqe z!*&sPG5W(a-Sh#GZBUS!;^;UGSUTA1``{ESI+3$z})+;fS2Am^@ zzU7?!T7OSY$(L+=&cB8(&R4dGVkWlfuD2;YpN&6MU?IR`^2|znIpJ@EQHfSp;&U_k zLk-35U4QZYd&a022*Qm&6qqV*FZ{=Uw}7zdFcN<~s&Whs;(z~t5I<}`%;5E#+AW&Q zC1Z5??hb?NP_?q{4VPO(BMk7Eh@s_W){fGdq{=Ew$9k_cOs1Bo1c^@h?qgqD^W*8@ zIiY2hcoynw^3Pb+P7(1HOTcONXAIb;X7tn(5{)K9qzbd^Qe*U_(N4kB!H5-wuXS4aHW)WDJYIU z5|gjm5Ds3NSS3Djd~{ut?>03GB0aZNIl^KZJNph^V4*Hl!In?l z_DncgDP69_qmrbB`FSXqTXi1r;j+J-9^D_Mq@O2jg_7yR5nO1uMSiHO#OjI)eOcK2 z{}@~RJXvI;u1YnI>yTYSy4S;_>a*e2Hi48)kn1SF-n8 znRUAVr={x-WV7qyw8~qvr5f9-N^NS?-m5mXS5SLzLX1*-7PX00dsU4ZK~a0fOi(md zV(;DX@%H=w-us+;&bjx@`+IKe6!PGCO5;!s3#=bM+BcmcZI=H4630-XmE2ZW>Dz}{ zSkgY+;Izmf$xp9~!0t1gg2(&bx)e#y2UTkrFs|F^vPS1U-Npf4B<7+_6ZdUf?)$n!8b!*UR-tEWMaaVuVKO54_X3L4k3Mjsf z$tk~!#olSTpn)(-9c~P@ib%Y*X5VuOXt0>)@b}}xMMgiH@Yv>S@!1;!mw8`tqgN4e zL+`sHW8D=ool*v(^I@&q_)XJ3R@U;rCbda-VC;5dO;+&EPPMV8CzKK)NI#b**UBGu z4bCf4c6XZo_axNik?w~1eGlkXR$pC75iJPs%=cd1iR{>zc>M^0HHBfMuc91r=Dr!J zDs^GTT=#=~bE%82sBOe}!jn@VHhnwAs%`H7R+gCcj_7ioB>P@$fA$^xv*-j2-u7fB zTI!Od^Uu(Qh-beRtGv8Oau1k1!=~%B=J%s&PFot+HWO+=C+%mR&M)NDcJwsB(|N8?O)t)tUJqdUOxSxthekrU~;KZn1D~@s#u@5NBPBJG1y>Z zYcRUsN6N9vdF6xBi4ddg-!ee=OaEM`L65*H(JG-1IZ}oGt)8X$Yp^R9^gW@ewzDQr zau+ScGE-FQbP{mMfboZPnE$iu{Ns~o256{X?DSN5Y$SKEB($yB_F|$z7a10thpb6( z94M^eEODjHQ)|ia%T`AfWCA9;fXl$_hXR_)hJNJF2;ZMPT;>(~q#je;{)F^Pz=UJf z9#1r7C#_r!ZcEQAzMD!5s6;R=3PN|gh`UH3zNsGJ+gOwy5Lv$AIkt|P5+B7?g!ByN zLRN!a9x`ov?Pa**8~W`kb%jH+)M8c&CoOl(_Gdejn2hT;;o>QQZDR^Kn2w0yNam*7 z=@Cn`b8xhEuf!Go(>k4Lp9{n5k;6DY<^XBY+C+z+Gu4|#)zHi8tA$` z?b+~kEo3%A%$B@U50`O}OOo=pdi4xPF%@^r`E4Wy|THaq~=ls`YJaWo_q_nUNQDV!&jQacRJiQtp(N`0^3@l%#JFm7fIO07HFk z7-M_=f_E?wl3vI6`<*2&9^7mRJ6vAq3~J0TcBXKC#ZU8Wg1DLBv^$oYSSBZLmE9V? zbF=a(k?pS`lJw0TYflQH|20<26r|9gqNeO9?-7=ulEg4JB;4hZ@ZS?=xzMUVisDOF zTn@98CVWlwjwNQ@Df9tdt+}GC^A|*(C8mS1)QRiKD!5PE+Nvivnzt!5ulTuxzGX~i zE$$dxy+~XN61bf&pLG6d&{}oP?#f}H*jO4jllNeT_A@V<3Wc_UV4Hxh z_rTms@|lQe$6mAM{g6n*=IRG#Qi@utn$Fj_Y66jr{$I2je&Gsd%{gA$MvmXDgP2JDn z`pq2L;yu!8+6;;g2a`tK>4-%W7eSE^MXyTZg+kT1mxrocgG;_b!;(jr4-N@@4|8{& z#&)yG*Yj{sKR?ScBC;0f>RVtoG65m#dE@xxI>7gSpiot#6_ab?v(|XO6nnoZ&}r^< z^L{+3m;<%QnM8JUA||@Nt=K&6XVCZg4JVh5+6=($86I=TyM)X@j#5+Ml<0mNbL|@B zQX3oSW`>~UeMRia9?ETQ?OKSLJOIf)(aLv3BKR7Wc755;{p#=_VrDtQTg3?0#({ z=4nR{QEFDd9+MpQF$QlmEL3-+ET< z(V5P8HGR&1{uMFt#FgM7B=$_eD>lH1q7Qg3n@H3n1@|WGG2fgl##%!qx}=T2N*>Jj zpOD)#5=txGqmovr9|hTKUhaCU0zEi27DeJ3SbDULOK8>Xv+Y6)Z862PS3n>8YtR2SJprtoI+c2$?}O$Bttj1Y zjY|`u5XSS^Y(7)PSTTL9rGgQ9s%JIpcXk(s-mXIE+__?4JG+R)rs(I|Mn*9u_F&yZ zezjPm(FNP?=T_*Fdxw+QBL38Mg=jAB50!9SeO*CziTyXLK~kxRJ5UDFsm{*s618lq z2*-#AKxjdBW+s@6;zdf`eHByY=Tqloa(1$BVSBZ}_VDk^klv$pRO4H4_>;)A0|(O= z^)AYPQ3@g(?x^lIOB7^Kx%k47q}vYTq#)co6$-GkUHigS*F;uZeJEjB1t;A-SCZ7C zsUj8EZ&KnjQNXFQGh=*ce8CB20|@i;dGMy$%|K!BxVX58H%fn(?k<#L^DDS6sGSh; zNA4$@=wJA(I0MdzEk?-)tlm?)H-Du%S-^FbCY zv)-pKdi1Ioatmq;;MHF9I=a0)aTyCygb9aieo1-yZ2l{5zW=iO7hKnM(|#QfV~Y=O zH%O_K`+rO|5oLhQAqJ9fqp$6GPPa$cBc(f&AQmr)EEpcMPr? zPq9PkheCu5m>d!A+L1019n9}0VgVQLs|Az)AC(Ce>dtoW_v8B=Mi_@?^{(2D}eMY`QkN*ohg{pch*5oDV+1GmUgC;_OWgY;3 z31}gpIvFs3bA!`vaHl9jCJk$_(SiQDZqp0TI+tj|)wo&Qztf+@M*+|>FY*ZXqr&wM zy2pECpYWqIydxE#A*yzZII%fEdX22UuDx*u9VZ+9Xq{0gkq zrhZj^OSc<{g)So;>)yi1UbI>fFA{bxPk*&thql`}fBMhekLpneMY7BirX@*p&BF)0 z!wDX>3{bw2-4`Tebg<@z66vvn)XLFJ%Ao~91_E%{D5#d{9Ws{Cu}&s8^(%m@Apce8 zZ@fG!jQKrgR%DyO-HyW8{E-FYLw=x%3NJNbMQ+0{^en`BqcimCCp7H_Dry2GIS`&0bX>;(#KSiTe9`CQ_uN`sQ2OtRrbto)USj2!%Pkf-*& zsvSnS8xesXlPnU_g8l%xZ=uKPX`|VSGc~5s0WR)XR;aauY^|b;#p!aP9CfMgdow4+e#d#T*;MxZ$P6}DQ`nw>H%_8c+f2iAK4ys&Ir?6AfBeC%KFQIm(ls_zp64ZN6O zt~EgoE=^2TonDx~;G|Q*CQ1JMC{jN5>zvc;sgC=rh?KxTDbe!LcMx)H%g^s{{!UM# z(o*7LfNPfQDfK@I{E@?0;78&rvVufC`6U%GBgC{{+e}zmxyak~MsS{~G4e5f%o-Ys zFl>K$SHcZ@5*_Q40EDhrLB0ca#p@zM6u?f_800WM!q3NK+ z9{KBQmqzVuyJaZ_+~}U(n?F_k;Qbp&Ega#IL|TESEQ#g{LFPZbf+*ePS^i--TfPZv zhw-W{68|LeR=YIj?z&^R(#zlS;4$S7DlgZh9{^NI!o_BIsygIp%>C^Ks_&V};mBbi zz_b%S3)qK>vhT+D2AOjlk(ew2LKknBU%^#&K*yqgg4z$g%h-%+qiK%cyEd7D1ZVsu{h`yWhpM%ig=Hv~`XaZ1-hfu18y=yYf%RbDUyAXFbINffA4z z+r>MyL*t-Ii>yIf8^b2lL&Hp~YuJ&rknK8p zms)&RFy~pq91Y+|Uorvu{7=%e@lbU*z3j~N?I+>#S4@14c9KEQC}|0Qd6w3lA%l^p z^KV7>iSe0lBzZ+kLLBi@>*;NKDkWzFiRF8y`M0I1VML4yk7j?iU$QR+T$(3VF%n!ETutQ(Om!yOaPT?|2*?RS$YJK8BET4l)}Xm>=`))LB(= z?0;N@=jpSo!>{_wSdiCt%wKQ+vS!WnJT_C2Sxh zZYwX^!O!*HOBzhAvdF<}U3nFTFjm27x2t8MI-@e~To3ZNfT^(yPVslOL9%k^8rn9D zj?_mK4^vl{I>P5QO26F{GohOtOeFPx)A*4##i_o-&5K*aL2b%@wYFLj+vKOQ9zMum z%`anVGX1O(m{n1M?<0=k$=1&QSq1eC0lFu+r z-&Q-a4UR8R8Ksycmse}O7%>~nCq*){hnirMA6go~gtJA0s=n$Ef8<8cLyoZwBJf50cSCb#6mWEFau?8GGpA~xz@cj9* zm1OV3B*w&FUE<^KQf))6?rVk<)}WOX;STG zAeO>2fO(-KulJ*GXP?73WIdD}xbA93o|K#tU+adqKm<$J8fF#WIZYJ}kCXV=e5rwQ zLp9eR-qilCZV_cs+a36=ow$~v3fS&29I>T-2ySX$*Y8-)l^%y=YPMz5OZ*9U4&te3 zI$UyOHvl@7o)0R%{@R{ML=a>?+wCAG?+6Ne7M7! zn%E%~PvklZvdpcwtKX7u>jkU1c%&F_Lz#|5+a>#x>`19v%d<;PW9ahrstXR1z-6>P zRE9mZrQ`95$OGqMeMGqKyI%8wy5L_ z&FHmc#T^!bQ5y$gBMxIC|1)c=&*K)Sf4rO79brD5YKJgeG^h(} z2p}X?XF2cW4PgF0r>XO(7b)jHuZ0+`nak5|3cxdhcbI>!1CNnb#0-D+>ny6+`EIpl z)0I{1)Upi>T~Ecqux;j=W_+=5O%KsZ7nvZV6j8xgacHG+8((n6n!s*WB0&dR4`?WbQEH9y(jUkerw6 z4bEZld3DC9{_lCAAu# z&hLWeh1UT%UL+Cr=FJt4w|=7`(Lj@!%4VGL8dJpN@WGBj^xj$WWY1H{V$j)Qw7+P>T7s3JmPzP@-LM%ceg7c9vN;S^3clvqSZ!XT>q}6`yHHF<@ zbWUt{o+nv^mKhQMc7$412!4ei0LjYsqBxf%bY|L#v!~tjm5-T?Dfk)rqH7^BG%WOK z``7H$i(xN*dF*UjMolvj)P;fbK&o(}cYb52ch!`zQPkR*98;FL|~5@vp~DaQm^EWRZh-1W{>I~n7v4aehRZ))TtUXDX&1N`z4d@aoVn1 zYnO9j&usn#HfEE8={@%8WEA!sKkpmK_s;T*BnpvhFaB(bcXWGZ19QJ{)A1J1p4ETi zq_6KsK%Zcj#azbRwFqojnxmi-l&%HzKs3@184o(npVLj@O#O@Yd3tiG`4F3ME5a(G zhUlOC64cbXD?Mzpvho7il9~}i+goD3gV^eB8W&>-4FmhA$BBbqg0>ty|&1Q@)?HL3XurCm% zE3%S930thF>|3XjLT6upTLe~oNGEmoCo%G={gN`6JWr9hp+ns|=FYOo@TX%QhcM`M z=jx!sgqjU57vq{#Uvy5@r8Nd50L!whPHnLInr<~Sc_WJGp%FWD!Wp<3Ef}=hp^{y8 zn&z(F<7VYDU_;91r;KjTFv@E7PiIty+!JUboVPV}_B@^v;!tn#~bxHJl-&O9TWdE_^22OO8 zw7iQ6Rx=AuIl;C>RE=BQ5Sa728oNK6KNhaS%P@zw24FaR(tbRC` zZmQzrzvwcfW?s7skMAPfRbk|p)6vzcpVErM>WHC&&ft$tjWP2rCO8x!1EY6>#hs{= zjv|0VO7@yZH+h%CCxRgFtw2@Nop7$AmNE^86Z+3PH94L}Z}4?T@?NJ?)&`Cn*N&kw z??jT^7j5g!q$Y@++nonLK1E3$jRngx)YeG`usL7TD|O%&djbxZY}qg2*~`c48lo)T zUs5C+@a8Tq*4sF%77czTdZr&7=IB;EoDj13B~`l&1dbGmp4RDx=d&gL5KBoBl2Lty zQ~lbndzHC34vrR6opT2PibwtG76`RXisDKZ@TPE66-)1+Y6cA!7Ou$sKLRv2zB!L6 zJyQ)zMScgo6S!rJd6U>nne~a;gV4{p!m zI=_L$D1P6!_a$ZXcW5j4C9-a_ba4$15Zw>dL(C^huHpAByFFDDVc6<@`Hb3hoMMcV zR{!`?P!!Qx9`&9xJm*gUZk{{gD>`HtG=z}rGLv4=75U27HbJt5Xq|w4uCajBxBtR< zW`4tS?gA@sZ0^VWKAcQ-^vn1rM%dL2*WSUb=7#nU_~uOqg!)HXZqK15uG^XGq^7Uo z678K;l6&{Fa!DS{=`mnaHDn6)#A0Mxr2>(jh1p3AmJJBJF{!U}W(i9*enCQ2VyGW~ zbdCA58O2C3)57Oaomv3;P?#^AD!QN>r?INCn7n;g^L~VGYI=_*+Dm{*=NS<$GKN}el2k;4wwvOW>czL&)I>CZt zP-xliM4-fo)Q8W%Od6)ATOHRknT;ISq`y=5pk%dlp~b~S+l}1=1Li;r1`VgBxE`d` z6u)rUeNIM+l-o&uTbt=9h`pA8fml5rm!F`3Yr{>=d;EjiHhKG%MM52yCS5%8@X4j zC?Cws78aL;T0A)c!L}F5wne&VMZfCm@Z+?bJ9D;yWL2^`v6 zykousPn7NXUdHZgqK9T`L|IeO_7oIBlFAstq3P3B*zPH_7q%B;*M9oFD^sQNfP3~xCTf<^@ID*CxtUVOPw1_>_M>n+e;cQL>0;Zb?atDGA^+g~(`*9PBO{bS zY)c3K{M{{u6^uBlTe7_fzzOUKq&Cm0GpoF%X&r9V&+dLyS&?7Cb_MRyU-jvCzT0~A zSrap#Dp~YB{I=Y&6910$Y5`Z0lBrR0n2P&Xhib<8WUaZ_^Q_YtAZDHXi;UL+50NbK z(EVsW$01?xCj?M#QF(ry1m zCfqGT2VnHcyD_fa^xcImGhLNdW?B()_>UwQ}VIM z|8n~;&9txHlM;u&P58)3!1U~In~&T|RZcxTXW_XF4K(XYl;dw2xA0Mzh~qm8G8u!q z&f70ZfBP#YLSG&{W>`_uBL{9Q0`4dY6T-53Tm0n3JKjWs|HEPnNv#>(z5Up@Doy-< z3R~}AJzI?j`A;Gv(rQ*z{$DBYUGXMn!oi + + + + + + Switch Journal + pos.switch.journal.wizard + form + form + new + + + + Change Payments + pos.change.payments.wizard + form + form + new + + + diff --git a/pos_change_payment/views/view_account_bank_statement.xml b/pos_change_payment/views/view_account_bank_statement.xml new file mode 100644 index 00000000..6256b9da --- /dev/null +++ b/pos_change_payment/views/view_account_bank_statement.xml @@ -0,0 +1,21 @@ + + + + + + + account.bank.statement + + + + + + + + + - - -