diff --git a/pos_session_pay_invoice/README.rst b/pos_session_pay_invoice/README.rst new file mode 100644 index 0000000000..38153a2b90 --- /dev/null +++ b/pos_session_pay_invoice/README.rst @@ -0,0 +1,110 @@ +======================= +POS Session Pay invoice +======================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:6eac7dbff1f6e08ae835df882a549b193c4d037be692dfd6913960c06245184b + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpos-lightgray.png?logo=github + :target: https://github.com/OCA/pos/tree/16.0/pos_session_pay_invoice + :alt: OCA/pos +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/pos-16-0/pos-16-0-pos_session_pay_invoice + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/pos&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This modules allows to pay an existing Supplier Invoice / Customer Refund, or +to collect payment for an existing Customer Invoice, from within a POS Session. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +#. Go to *Point of Sale / Configuration / Payment Methods* + and ensure that at least one payment method with a journal type "cash" + is created (or create one if it does not exist). + +#. Go to *Point of Sale / Configuration / Settings* + Select a Point of Sale and ensure than in the payment methods section, + at least one payment method has a journal type "cash" + +Usage +===== + +#. Go to *Point of Sale / Dashboard* and create and open or access to an + already open POS Session. +#. Open the POS Session form view on the Backend. +#. Press the button **Pay Supplier** to pay a Supplier Invoice or **Pay Refund** for a Customer + Refund. It will be paid using Cash. +#. Select **Get Payment from Invoice** to receive a payment of an + existing Customer Invoice or a Supplier Refund. You will need to select + a Journal if the POS Config has defined multiple Payment Methods. + +Known issues / Roadmap +====================== + +* Cannot pay invoices in a different currency than that defined in the journal + associated to the payment method used to pay/collect payment. + +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 to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Creu Blanca + +Contributors +~~~~~~~~~~~~ + +* Enric Tobella +* Jordi Ballester +* Tecnativa (https://www.tecnativa.com): + + * Carlos Lopez + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/pos `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/pos_session_pay_invoice/__init__.py b/pos_session_pay_invoice/__init__.py new file mode 100644 index 0000000000..207c81e0de --- /dev/null +++ b/pos_session_pay_invoice/__init__.py @@ -0,0 +1,4 @@ +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +from . import models +from . import wizard diff --git a/pos_session_pay_invoice/__manifest__.py b/pos_session_pay_invoice/__manifest__.py new file mode 100644 index 0000000000..57eef3267e --- /dev/null +++ b/pos_session_pay_invoice/__manifest__.py @@ -0,0 +1,17 @@ +# Copyright (C) 2017 Creu Blanca +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +{ + "name": "POS Session Pay invoice", + "version": "16.0.1.0.0", + "category": "Point Of Sale", + "author": "Creu Blanca, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/pos", + "summary": "Pay and receive invoices from PoS Session", + "license": "LGPL-3", + "depends": ["point_of_sale", "account_cash_invoice"], + "data": [ + "wizard/cash_pay_invoice.xml", + "views/pos_session.xml", + ], +} diff --git a/pos_session_pay_invoice/i18n/es.po b/pos_session_pay_invoice/i18n/es.po new file mode 100644 index 0000000000..60335f57dc --- /dev/null +++ b/pos_session_pay_invoice/i18n/es.po @@ -0,0 +1,227 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_session_pay_invoice +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-03-23 00:46+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.view_pos_session_form +msgid "" +"Get Payment\n" +" from Invoice" +msgstr "" +"Obtener pago\n" +" desde factura" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.view_pos_session_form +msgid "" +"Pay Supplier\n" +" Invoice" +msgstr "" +"Pagar factura\n" +" de proveedor" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.view_pos_session_form +msgid "" +"Pay\n" +" Refund" +msgstr "" +"Pagar\n" +" Rectificativa" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__amount +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__amount +msgid "Amount" +msgstr "Importe" + +#. module: pos_session_pay_invoice +#: code:addons/pos_session_pay_invoice/wizard/cash_invoice_in.py:0 +#, python-format +msgid "Bank Statement was not found" +msgstr "No se encontró el extracto bancario" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.cash_invoice_in_form +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.cash_invoice_out_form +msgid "Cancel" +msgstr "Cancelar" + +#. module: pos_session_pay_invoice +#: model:ir.model,name:pos_session_pay_invoice.model_cash_invoice_in +msgid "Cash invoice in" +msgstr "Factura al contado en" + +#. module: pos_session_pay_invoice +#: model:ir.actions.act_window,name:pos_session_pay_invoice.action_pos_invoice_out +msgid "Collect Payment from Invoice" +msgstr "Cobrar el pago de la factura" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__company_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__company_id +msgid "Company" +msgstr "Compañía" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__create_uid +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__create_date +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__currency_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__currency_id +msgid "Currency" +msgstr "Moneda" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_cash_invoice_in__display_name +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__display_name +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__display_name +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_order__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_cash_invoice_in__id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_order__id +msgid "ID" +msgstr "ID" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__move_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__move_id +msgid "Invoice" +msgstr "Factura" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_cash_invoice_in____last_update +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in____last_update +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out____last_update +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_order____last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__write_uid +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__write_date +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: pos_session_pay_invoice +#: model:ir.actions.act_window,name:pos_session_pay_invoice.action_pos_invoice_in +#: model:ir.actions.act_window,name:pos_session_pay_invoice.action_pos_invoice_in_control +msgid "Pay invoice" +msgstr "Factura de pago" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__payment_method_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__payment_method_id +msgid "Payment Method" +msgstr "Modo de pago" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__payment_method_count +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__payment_method_count +msgid "Payment Method Count" +msgstr "Método de Pago Recuento" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__payment_method_ids +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__payment_method_ids +msgid "Payment methods" +msgstr "Modos de pago" + +#. module: pos_session_pay_invoice +#: model:ir.model,name:pos_session_pay_invoice.model_pos_order +msgid "Point of Sale Orders" +msgstr "Pedidos del punto de venta" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__name +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__name +msgid "Reason" +msgstr "Razón" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.cash_invoice_in_form +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.cash_invoice_out_form +msgid "Register" +msgstr "Registrar" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__session_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__session_id +msgid "Session" +msgstr "Sesión" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.view_pos_config_kanban +msgid "Summary" +msgstr "Resumen" + +#. module: pos_session_pay_invoice +#: code:addons/pos_session_pay_invoice/wizard/cash_invoice_in.py:0 +#, python-format +msgid "There is no cash register for this Pos session" +msgstr "No hay caja registradora para esta sesión de TPV" + +#. module: pos_session_pay_invoice +#: model:ir.model,name:pos_session_pay_invoice.model_pos_box_cash_invoice_in +msgid "pos box cash invoice in" +msgstr "factura de caja en efectivo en" + +#. module: pos_session_pay_invoice +#: model:ir.model,name:pos_session_pay_invoice.model_pos_box_cash_invoice_out +msgid "pos box cash invoice out" +msgstr "caja pdv factura en efectivo" + +#~ msgid "" +#~ "Collect Payment\n" +#~ " from Invoice" +#~ msgstr "" +#~ " Cobrar pago \n" +#~ " de la factura " + +#~ msgid "" +#~ "Pay\n" +#~ " Invoice" +#~ msgstr "" +#~ "Pagado\n" +#~ " Factura" + +#~ msgid "cash.invoice.in" +#~ msgstr "cash.invoice.in" + +#~ msgid "cash.invoice.out" +#~ msgstr "cash.invoice.out" diff --git a/pos_session_pay_invoice/i18n/fr.po b/pos_session_pay_invoice/i18n/fr.po new file mode 100644 index 0000000000..ec5bbca5fc --- /dev/null +++ b/pos_session_pay_invoice/i18n/fr.po @@ -0,0 +1,221 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_session_pay_invoice +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-12-10 15:36+0000\n" +"Last-Translator: Julien Guenat \n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.10\n" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.view_pos_session_form +msgid "" +"Get Payment\n" +" from Invoice" +msgstr "" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.view_pos_session_form +msgid "" +"Pay Supplier\n" +" Invoice" +msgstr "" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.view_pos_session_form +msgid "" +"Pay\n" +" Refund" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__amount +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__amount +msgid "Amount" +msgstr "" + +#. module: pos_session_pay_invoice +#: code:addons/pos_session_pay_invoice/wizard/cash_invoice_in.py:0 +#, python-format +msgid "Bank Statement was not found" +msgstr "Relevé bancaire introuvable" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.cash_invoice_in_form +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.cash_invoice_out_form +msgid "Cancel" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model,name:pos_session_pay_invoice.model_cash_invoice_in +msgid "Cash invoice in" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.actions.act_window,name:pos_session_pay_invoice.action_pos_invoice_out +msgid "Collect Payment from Invoice" +msgstr "Encaisser une facture" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__company_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__company_id +msgid "Company" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__create_uid +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__create_uid +msgid "Created by" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__create_date +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__create_date +msgid "Created on" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__currency_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__currency_id +msgid "Currency" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_cash_invoice_in__display_name +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__display_name +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__display_name +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_order__display_name +msgid "Display Name" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_cash_invoice_in__id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_order__id +msgid "ID" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__move_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__move_id +msgid "Invoice" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_cash_invoice_in____last_update +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in____last_update +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out____last_update +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_order____last_update +msgid "Last Modified on" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__write_uid +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__write_date +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__write_date +msgid "Last Updated on" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.actions.act_window,name:pos_session_pay_invoice.action_pos_invoice_in +#: model:ir.actions.act_window,name:pos_session_pay_invoice.action_pos_invoice_in_control +msgid "Pay invoice" +msgstr "Payer une facture (cash)" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__payment_method_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__payment_method_id +msgid "Payment Method" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__payment_method_count +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__payment_method_count +msgid "Payment Method Count" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__payment_method_ids +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__payment_method_ids +msgid "Payment methods" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model,name:pos_session_pay_invoice.model_pos_order +msgid "Point of Sale Orders" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__name +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__name +msgid "Reason" +msgstr "" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.cash_invoice_in_form +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.cash_invoice_out_form +msgid "Register" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__session_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__session_id +msgid "Session" +msgstr "" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.view_pos_config_kanban +msgid "Summary" +msgstr "Résumé" + +#. module: pos_session_pay_invoice +#: code:addons/pos_session_pay_invoice/wizard/cash_invoice_in.py:0 +#, python-format +msgid "There is no cash register for this Pos session" +msgstr "Il n'y a pas de caisse enregistreuse pour cette session" + +#. module: pos_session_pay_invoice +#: model:ir.model,name:pos_session_pay_invoice.model_pos_box_cash_invoice_in +msgid "pos box cash invoice in" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model,name:pos_session_pay_invoice.model_pos_box_cash_invoice_out +msgid "pos box cash invoice out" +msgstr "" + +#~ msgid "" +#~ "Collect Payment\n" +#~ " from Invoice" +#~ msgstr "" +#~ "Encaisser une\n" +#~ " facture" + +#~ msgid "" +#~ "Pay\n" +#~ " Invoice" +#~ msgstr "" +#~ "Payer une\n" +#~ " facture fournisseur" + +#~ msgid "cash.invoice.in" +#~ msgstr "cash.invoice.in" + +#~ msgid "cash.invoice.out" +#~ msgstr "cash.invoice.out" diff --git a/pos_session_pay_invoice/i18n/it.po b/pos_session_pay_invoice/i18n/it.po new file mode 100644 index 0000000000..8521f4fae7 --- /dev/null +++ b/pos_session_pay_invoice/i18n/it.po @@ -0,0 +1,206 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_session_pay_invoice +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-04-02 11:37+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.view_pos_session_form +msgid "" +"Get Payment\n" +" from Invoice" +msgstr "" +"Ottieni pagamento\n" +" dalla fattura" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.view_pos_session_form +msgid "" +"Pay Supplier\n" +" Invoice" +msgstr "" +"Pagamento fattura\n" +" fornitore" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.view_pos_session_form +msgid "" +"Pay\n" +" Refund" +msgstr "" +"Pagamento\n" +" rimborso" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__amount +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__amount +msgid "Amount" +msgstr "Valore" + +#. module: pos_session_pay_invoice +#: code:addons/pos_session_pay_invoice/wizard/cash_invoice_in.py:0 +#, python-format +msgid "Bank Statement was not found" +msgstr "Non è stato trovato il rendiconto bancario" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.cash_invoice_in_form +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.cash_invoice_out_form +msgid "Cancel" +msgstr "Annulla" + +#. module: pos_session_pay_invoice +#: model:ir.model,name:pos_session_pay_invoice.model_cash_invoice_in +msgid "Cash invoice in" +msgstr "Contanti fattura passiva" + +#. module: pos_session_pay_invoice +#: model:ir.actions.act_window,name:pos_session_pay_invoice.action_pos_invoice_out +msgid "Collect Payment from Invoice" +msgstr "Riscuoti pagamento da fattura" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__company_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__company_id +msgid "Company" +msgstr "Azienda" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__create_uid +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__create_date +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__create_date +msgid "Created on" +msgstr "Creato il" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__currency_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__currency_id +msgid "Currency" +msgstr "Valuta" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_cash_invoice_in__display_name +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__display_name +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__display_name +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_order__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_cash_invoice_in__id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_order__id +msgid "ID" +msgstr "ID" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__move_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__move_id +msgid "Invoice" +msgstr "Fattura" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_cash_invoice_in____last_update +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in____last_update +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out____last_update +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_order____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__write_uid +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__write_uid +msgid "Last Updated by" +msgstr "Ultimo aggiornamento di" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__write_date +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__write_date +msgid "Last Updated on" +msgstr "Ultimo aggiornamento il" + +#. module: pos_session_pay_invoice +#: model:ir.actions.act_window,name:pos_session_pay_invoice.action_pos_invoice_in +#: model:ir.actions.act_window,name:pos_session_pay_invoice.action_pos_invoice_in_control +msgid "Pay invoice" +msgstr "Paga la fattura" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__payment_method_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__payment_method_id +msgid "Payment Method" +msgstr "Metodo di pagamento" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__payment_method_count +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__payment_method_count +msgid "Payment Method Count" +msgstr "Conteggio metodo pagamento" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__payment_method_ids +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__payment_method_ids +msgid "Payment methods" +msgstr "Metodi di pagamento" + +#. module: pos_session_pay_invoice +#: model:ir.model,name:pos_session_pay_invoice.model_pos_order +msgid "Point of Sale Orders" +msgstr "Ordini punto vendita" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__name +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__name +msgid "Reason" +msgstr "Motivo" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.cash_invoice_in_form +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.cash_invoice_out_form +msgid "Register" +msgstr "Registra" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__session_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__session_id +msgid "Session" +msgstr "Sessione" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.view_pos_config_kanban +msgid "Summary" +msgstr "Riepilogo" + +#. module: pos_session_pay_invoice +#: code:addons/pos_session_pay_invoice/wizard/cash_invoice_in.py:0 +#, python-format +msgid "There is no cash register for this Pos session" +msgstr "Non è presente il registratore di cassa per questa sessione POS" + +#. module: pos_session_pay_invoice +#: model:ir.model,name:pos_session_pay_invoice.model_pos_box_cash_invoice_in +msgid "pos box cash invoice in" +msgstr "POS BOX contanti fattura passiva" + +#. module: pos_session_pay_invoice +#: model:ir.model,name:pos_session_pay_invoice.model_pos_box_cash_invoice_out +msgid "pos box cash invoice out" +msgstr "POS BOX fattura attiva contanti" diff --git a/pos_session_pay_invoice/i18n/pos_session_pay_invoice.pot b/pos_session_pay_invoice/i18n/pos_session_pay_invoice.pot new file mode 100644 index 0000000000..1fe945d549 --- /dev/null +++ b/pos_session_pay_invoice/i18n/pos_session_pay_invoice.pot @@ -0,0 +1,197 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_session_pay_invoice +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \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_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.view_pos_session_form +msgid "" +"Get Payment\n" +" from Invoice" +msgstr "" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.view_pos_session_form +msgid "" +"Pay Supplier\n" +" Invoice" +msgstr "" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.view_pos_session_form +msgid "" +"Pay\n" +" Refund" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__amount +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__amount +msgid "Amount" +msgstr "" + +#. module: pos_session_pay_invoice +#: code:addons/pos_session_pay_invoice/wizard/cash_invoice_in.py:0 +#, python-format +msgid "Bank Statement was not found" +msgstr "" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.cash_invoice_in_form +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.cash_invoice_out_form +msgid "Cancel" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model,name:pos_session_pay_invoice.model_cash_invoice_in +msgid "Cash invoice in" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.actions.act_window,name:pos_session_pay_invoice.action_pos_invoice_out +msgid "Collect Payment from Invoice" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__company_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__company_id +msgid "Company" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__create_uid +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__create_uid +msgid "Created by" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__create_date +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__create_date +msgid "Created on" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__currency_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__currency_id +msgid "Currency" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_cash_invoice_in__display_name +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__display_name +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__display_name +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_order__display_name +msgid "Display Name" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_cash_invoice_in__id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_order__id +msgid "ID" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__move_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__move_id +msgid "Invoice" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_cash_invoice_in____last_update +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in____last_update +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out____last_update +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_order____last_update +msgid "Last Modified on" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__write_uid +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__write_date +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__write_date +msgid "Last Updated on" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.actions.act_window,name:pos_session_pay_invoice.action_pos_invoice_in +#: model:ir.actions.act_window,name:pos_session_pay_invoice.action_pos_invoice_in_control +msgid "Pay invoice" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__payment_method_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__payment_method_id +msgid "Payment Method" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__payment_method_count +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__payment_method_count +msgid "Payment Method Count" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__payment_method_ids +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__payment_method_ids +msgid "Payment methods" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model,name:pos_session_pay_invoice.model_pos_order +msgid "Point of Sale Orders" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__name +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__name +msgid "Reason" +msgstr "" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.cash_invoice_in_form +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.cash_invoice_out_form +msgid "Register" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_in__session_id +#: model:ir.model.fields,field_description:pos_session_pay_invoice.field_pos_box_cash_invoice_out__session_id +msgid "Session" +msgstr "" + +#. module: pos_session_pay_invoice +#: model_terms:ir.ui.view,arch_db:pos_session_pay_invoice.view_pos_config_kanban +msgid "Summary" +msgstr "" + +#. module: pos_session_pay_invoice +#: code:addons/pos_session_pay_invoice/wizard/cash_invoice_in.py:0 +#, python-format +msgid "There is no cash register for this Pos session" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model,name:pos_session_pay_invoice.model_pos_box_cash_invoice_in +msgid "pos box cash invoice in" +msgstr "" + +#. module: pos_session_pay_invoice +#: model:ir.model,name:pos_session_pay_invoice.model_pos_box_cash_invoice_out +msgid "pos box cash invoice out" +msgstr "" diff --git a/pos_session_pay_invoice/models/__init__.py b/pos_session_pay_invoice/models/__init__.py new file mode 100644 index 0000000000..f7116e3d45 --- /dev/null +++ b/pos_session_pay_invoice/models/__init__.py @@ -0,0 +1 @@ +from . import pos_session diff --git a/pos_session_pay_invoice/models/pos_session.py b/pos_session_pay_invoice/models/pos_session.py new file mode 100644 index 0000000000..7e46d7d2e6 --- /dev/null +++ b/pos_session_pay_invoice/models/pos_session.py @@ -0,0 +1,35 @@ +from odoo import models + + +class PosSession(models.Model): + _inherit = "pos.session" + + def button_show_wizard_pay_in_invoice(self): + action = self._get_action_wizard_pay_invoice() + action["context"]["pos_pay_invoice_type"] = "vendor" + action["context"]["pos_pay_invoice_domain"] = "in_invoice" + return action + + def button_show_wizard_pay_out_refund(self): + action = self._get_action_wizard_pay_invoice() + action["context"]["pos_pay_invoice_type"] = "vendor" + action["context"]["pos_pay_invoice_domain"] = "out_refund" + return action + + def button_show_wizard_pay_out_invoice(self): + action = self._get_action_wizard_pay_invoice() + action["context"]["pos_pay_invoice_type"] = "customer" + action["context"]["pos_pay_invoice_domain"] = "out_invoice" + return action + + def _get_action_wizard_pay_invoice(self): + cash_journal = self.cash_journal_id + action = self.env["ir.actions.actions"]._for_xml_id( + "pos_session_pay_invoice.action_pos_invoice_in_control" + ) + action["context"] = { + "active_ids": cash_journal.ids, + "active_name": cash_journal._name, + "pos_session_id": self.id, + } + return action diff --git a/pos_session_pay_invoice/readme/CONFIGURE.rst b/pos_session_pay_invoice/readme/CONFIGURE.rst new file mode 100644 index 0000000000..1dea19c5fd --- /dev/null +++ b/pos_session_pay_invoice/readme/CONFIGURE.rst @@ -0,0 +1,7 @@ +#. Go to *Point of Sale / Configuration / Payment Methods* + and ensure that at least one payment method with a journal type "cash" + is created (or create one if it does not exist). + +#. Go to *Point of Sale / Configuration / Settings* + Select a Point of Sale and ensure than in the payment methods section, + at least one payment method has a journal type "cash" diff --git a/pos_session_pay_invoice/readme/CONTRIBUTORS.rst b/pos_session_pay_invoice/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..120a999245 --- /dev/null +++ b/pos_session_pay_invoice/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* Enric Tobella +* Jordi Ballester +* Tecnativa (https://www.tecnativa.com): + + * Carlos Lopez \ No newline at end of file diff --git a/pos_session_pay_invoice/readme/DESCRIPTION.rst b/pos_session_pay_invoice/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..d66c63afa4 --- /dev/null +++ b/pos_session_pay_invoice/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This modules allows to pay an existing Supplier Invoice / Customer Refund, or +to collect payment for an existing Customer Invoice, from within a POS Session. diff --git a/pos_session_pay_invoice/readme/ROADMAP.rst b/pos_session_pay_invoice/readme/ROADMAP.rst new file mode 100644 index 0000000000..83dd2652f0 --- /dev/null +++ b/pos_session_pay_invoice/readme/ROADMAP.rst @@ -0,0 +1,2 @@ +* Cannot pay invoices in a different currency than that defined in the journal + associated to the payment method used to pay/collect payment. diff --git a/pos_session_pay_invoice/readme/USAGE.rst b/pos_session_pay_invoice/readme/USAGE.rst new file mode 100644 index 0000000000..5ecb420da1 --- /dev/null +++ b/pos_session_pay_invoice/readme/USAGE.rst @@ -0,0 +1,8 @@ +#. Go to *Point of Sale / Dashboard* and create and open or access to an + already open POS Session. +#. Open the POS Session form view on the Backend. +#. Press the button **Pay Supplier** to pay a Supplier Invoice or **Pay Refund** for a Customer + Refund. It will be paid using Cash. +#. Select **Get Payment from Invoice** to receive a payment of an + existing Customer Invoice or a Supplier Refund. You will need to select + a Journal if the POS Config has defined multiple Payment Methods. diff --git a/pos_session_pay_invoice/static/description/icon.png b/pos_session_pay_invoice/static/description/icon.png new file mode 100644 index 0000000000..3a0328b516 Binary files /dev/null and b/pos_session_pay_invoice/static/description/icon.png differ diff --git a/pos_session_pay_invoice/static/description/index.html b/pos_session_pay_invoice/static/description/index.html new file mode 100644 index 0000000000..a95dc484b1 --- /dev/null +++ b/pos_session_pay_invoice/static/description/index.html @@ -0,0 +1,463 @@ + + + + + +POS Session Pay invoice + + + +
+

POS Session Pay invoice

+ + +

Beta License: LGPL-3 OCA/pos Translate me on Weblate Try me on Runboat

+

This modules allows to pay an existing Supplier Invoice / Customer Refund, or +to collect payment for an existing Customer Invoice, from within a POS Session.

+

Table of contents

+ +
+

Configuration

+
    +
  1. Go to Point of Sale / Configuration / Payment Methods +and ensure that at least one payment method with a journal type “cash” +is created (or create one if it does not exist).
  2. +
  3. Go to Point of Sale / Configuration / Settings +Select a Point of Sale and ensure than in the payment methods section, +at least one payment method has a journal type “cash”
  4. +
+
+
+

Usage

+
    +
  1. Go to Point of Sale / Dashboard and create and open or access to an +already open POS Session.
  2. +
  3. Open the POS Session form view on the Backend.
  4. +
  5. Press the button Pay Supplier to pay a Supplier Invoice or Pay Refund for a Customer +Refund. It will be paid using Cash.
  6. +
  7. Select Get Payment from Invoice to receive a payment of an +existing Customer Invoice or a Supplier Refund. You will need to select +a Journal if the POS Config has defined multiple Payment Methods.
  8. +
+
+
+

Known issues / Roadmap

+
    +
  • Cannot pay invoices in a different currency than that defined in the journal +associated to the payment method used to pay/collect payment.
  • +
+
+
+

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 to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Creu Blanca
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/pos project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/pos_session_pay_invoice/tests/__init__.py b/pos_session_pay_invoice/tests/__init__.py new file mode 100644 index 0000000000..63055abdf3 --- /dev/null +++ b/pos_session_pay_invoice/tests/__init__.py @@ -0,0 +1,3 @@ +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +from . import test_pay_invoice diff --git a/pos_session_pay_invoice/tests/test_pay_invoice.py b/pos_session_pay_invoice/tests/test_pay_invoice.py new file mode 100644 index 0000000000..b6700181ee --- /dev/null +++ b/pos_session_pay_invoice/tests/test_pay_invoice.py @@ -0,0 +1,127 @@ +# Copyright 2017 Creu Blanca +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +import odoo +from odoo.tests import Form + +from odoo.addons.base.tests.common import DISABLED_MAIL_CONTEXT +from odoo.addons.point_of_sale.tests.common import TestPointOfSaleCommon + + +@odoo.tests.tagged("post_install", "-at_install") +class TestSessionPayInvoice(TestPointOfSaleCommon): + @classmethod + def setUpClass(cls, chart_template_ref=None): + super().setUpClass(chart_template_ref=chart_template_ref) + cls.env = cls.env(context=dict(cls.env.context, **DISABLED_MAIL_CONTEXT)) + cls.pos_config.cash_control = True + cls.invoice_out = cls.env["account.move"].create( + { + "company_id": cls.company.id, + "partner_id": cls.partner1.id, + "date": "2016-03-12", + "invoice_date": "2016-03-12", + "move_type": "out_invoice", + "invoice_line_ids": [ + ( + 0, + 0, + { + "product_id": cls.product3.id, + "name": "Producto de prueba", + "quantity": 1.0, + "price_unit": 100.0, + "tax_ids": [], + }, + ) + ], + } + ) + cls.invoice_out.action_post() + cls.invoice_in = cls.env["account.move"].create( + { + "partner_id": cls.partner4.id, + "company_id": cls.company.id, + "move_type": "in_invoice", + "date": "2016-03-12", + "invoice_date": "2016-03-12", + "invoice_line_ids": [ + ( + 0, + 0, + { + "product_id": cls.product3.id, + "name": "Producto de prueba", + "quantity": 1.0, + "price_unit": 100.0, + "tax_ids": [], + }, + ) + ], + } + ) + cls.invoice_in.action_post() + refund_wizard = ( + cls.env["account.move.reversal"] + .with_context( + active_ids=cls.invoice_out.ids, + active_id=cls.invoice_out.id, + active_model=cls.invoice_out._name, + ) + .create({"journal_id": cls.invoice_out.journal_id.id}) + .reverse_moves() + ) + cls.refund = cls.env[refund_wizard["res_model"]].browse(refund_wizard["res_id"]) + cls.refund.action_post() + + def test_pos_in_invoice(self): + self.assertEqual(self.invoice_in.amount_residual, 100.0) + self.pos_config._action_to_open_ui() + session = self.pos_config.current_session_id + self.assertTrue(session.cash_control) + self.assertTrue(session.cash_journal_id) + session.action_pos_session_open() + wizard_context = session.button_show_wizard_pay_in_invoice()["context"] + cash_in = self.env["cash.pay.invoice"].with_context(**wizard_context) + with Form(cash_in) as form: + form.invoice_id = self.invoice_in + self.assertEqual(form.amount, -100) + cash_in.browse(form.id).action_pay_invoice() + session.action_pos_session_closing_control() + session.invalidate_recordset() + self.invoice_in.invalidate_recordset() + self.invoice_in._compute_amount() + self.assertEqual(self.invoice_in.amount_residual, 0.0) + + def test_pos_out_invoice(self): + self.assertEqual(self.invoice_out.amount_residual, 100.0) + self.pos_config._action_to_open_ui() + session = self.pos_config.current_session_id + wizard_context = session.button_show_wizard_pay_out_invoice()["context"] + cash_out = self.env["cash.pay.invoice"].with_context(**wizard_context) + with Form(cash_out) as form: + form.invoice_id = self.invoice_out + self.assertEqual(form.amount, 100) + form.amount = 75 + cash_out.browse(form.id).action_pay_invoice() + session.action_pos_session_closing_control() + session.invalidate_recordset() + self.invoice_out.invalidate_recordset() + self.invoice_out._compute_amount() + self.assertEqual(self.invoice_out.amount_residual, 25.0) + + def test_pos_invoice_refund(self): + self.assertEqual(self.refund.amount_residual, 100.0) + self.pos_config._action_to_open_ui() + session = self.pos_config.current_session_id + wizard_context = session.button_show_wizard_pay_out_refund()["context"] + cash_out = self.env["cash.pay.invoice"].with_context(**wizard_context) + with Form(cash_out) as form: + form.invoice_id = self.refund + self.assertEqual(form.amount, -100) + cash_out.browse(form.id).action_pay_invoice() + session.action_pos_session_closing_control() + session.invalidate_recordset() + self.invoice_out.invalidate_recordset() + self.refund.invalidate_recordset() + self.assertEqual(self.refund.amount_residual, 0.0) diff --git a/pos_session_pay_invoice/views/pos_session.xml b/pos_session_pay_invoice/views/pos_session.xml new file mode 100644 index 0000000000..3ad2b4a8fa --- /dev/null +++ b/pos_session_pay_invoice/views/pos_session.xml @@ -0,0 +1,63 @@ + + + + pos.config.kanban.view + pos.config + + + + + + + + pos.session.form.view + pos.session + + +
+ + + +
+
+
+
diff --git a/pos_session_pay_invoice/wizard/__init__.py b/pos_session_pay_invoice/wizard/__init__.py new file mode 100644 index 0000000000..5159c1c58c --- /dev/null +++ b/pos_session_pay_invoice/wizard/__init__.py @@ -0,0 +1,2 @@ +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). +from . import cash_pay_invoice diff --git a/pos_session_pay_invoice/wizard/cash_pay_invoice.py b/pos_session_pay_invoice/wizard/cash_pay_invoice.py new file mode 100644 index 0000000000..8d1ce15c20 --- /dev/null +++ b/pos_session_pay_invoice/wizard/cash_pay_invoice.py @@ -0,0 +1,46 @@ +# Copyright (C) 2017 Creu Blanca +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). + +from odoo import api, models + + +class CashPayInvoice(models.TransientModel): + _inherit = "cash.pay.invoice" + + def _compute_invoice_domain(self): + res = super()._compute_invoice_domain() + # Only allow the payment of invoices of the same expected type. + # By default, in the module account_cash_invoice, the allowed types are: + # - Customer: out_invoice, in_refund + # - Vendor: in_invoice, out_refund + # In this module, we will allow the payment of invoices of the same type + # according to the context pos_pay_invoice_domain: + # - Customer: out_invoice + # - Vendor: in_invoice + # - Refund: out_refund + pos_pay_invoice_domain = self.env.context.get("pos_pay_invoice_domain") + if pos_pay_invoice_domain: + for wizard in self: + new_domain = [] + for domain in wizard.invoice_domain: + if domain[0] == "move_type": + new_domain.append(("move_type", "=", pos_pay_invoice_domain)) + else: + new_domain.append(domain) + wizard.invoice_domain = new_domain + return res + + @api.model + def default_get(self, fields_list): + values = super().default_get(fields_list) + if "invoice_type" in fields_list and self.env.context.get( + "pos_pay_invoice_type" + ): + values["invoice_type"] = self.env.context.get("pos_pay_invoice_type") + return values + + def _prepare_statement_line_vals(self): + vals = super()._prepare_statement_line_vals() + if self.env.context.get("pos_session_id"): + vals["pos_session_id"] = self.env.context.get("pos_session_id") + return vals diff --git a/pos_session_pay_invoice/wizard/cash_pay_invoice.xml b/pos_session_pay_invoice/wizard/cash_pay_invoice.xml new file mode 100644 index 0000000000..549c37dc6b --- /dev/null +++ b/pos_session_pay_invoice/wizard/cash_pay_invoice.xml @@ -0,0 +1,28 @@ + + + + cash.pay.invoice + + primary + + + + 1 + 1 + + + + + Pay invoice + cash.pay.invoice + form + + new + + diff --git a/setup/pos_session_pay_invoice/odoo/addons/pos_session_pay_invoice b/setup/pos_session_pay_invoice/odoo/addons/pos_session_pay_invoice new file mode 120000 index 0000000000..9b1b6a9847 --- /dev/null +++ b/setup/pos_session_pay_invoice/odoo/addons/pos_session_pay_invoice @@ -0,0 +1 @@ +../../../../pos_session_pay_invoice \ No newline at end of file diff --git a/setup/pos_session_pay_invoice/setup.py b/setup/pos_session_pay_invoice/setup.py new file mode 100644 index 0000000000..28c57bb640 --- /dev/null +++ b/setup/pos_session_pay_invoice/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)