From d87952984dc6dd64a8dad2f68f646a502a63a932 Mon Sep 17 00:00:00 2001 From: David Vidal Date: Tue, 16 Oct 2018 13:05:00 +0200 Subject: [PATCH] [11.0][ADD] pos_order_mgmt: New module --- pos_order_mgmt/README.rst | 121 ++++++ pos_order_mgmt/__init__.py | 1 + pos_order_mgmt/__manifest__.py | 27 ++ pos_order_mgmt/i18n/es.po | 149 +++++++ pos_order_mgmt/i18n/pos_order_mgmt.pot | 146 +++++++ pos_order_mgmt/models/__init__.py | 2 + pos_order_mgmt/models/pos_config.py | 24 ++ pos_order_mgmt/models/pos_order.py | 116 ++++++ pos_order_mgmt/readme/CONFIGURE.rst | 10 + pos_order_mgmt/readme/CONTRIBUTORS.rst | 2 + pos_order_mgmt/readme/DESCRIPTION.rst | 3 + pos_order_mgmt/readme/ROADMAP.rst | 3 + pos_order_mgmt/readme/USAGE.rst | 19 + pos_order_mgmt/static/description/icon.png | Bin 0 -> 15006 bytes .../static/description/order-mgmt-icon.png | Bin 0 -> 26304 bytes .../static/description/order-mgmt-list.png | Bin 0 -> 39015 bytes pos_order_mgmt/static/src/css/pos.css | 34 ++ pos_order_mgmt/static/src/js/models.js | 46 +++ pos_order_mgmt/static/src/js/widgets.js | 389 ++++++++++++++++++ pos_order_mgmt/static/src/xml/pos.xml | 85 ++++ pos_order_mgmt/views/assets.xml | 13 + pos_order_mgmt/views/view_pos_config.xml | 41 ++ 22 files changed, 1231 insertions(+) create mode 100644 pos_order_mgmt/README.rst create mode 100644 pos_order_mgmt/__init__.py create mode 100644 pos_order_mgmt/__manifest__.py create mode 100644 pos_order_mgmt/i18n/es.po create mode 100644 pos_order_mgmt/i18n/pos_order_mgmt.pot create mode 100644 pos_order_mgmt/models/__init__.py create mode 100644 pos_order_mgmt/models/pos_config.py create mode 100644 pos_order_mgmt/models/pos_order.py create mode 100644 pos_order_mgmt/readme/CONFIGURE.rst create mode 100644 pos_order_mgmt/readme/CONTRIBUTORS.rst create mode 100644 pos_order_mgmt/readme/DESCRIPTION.rst create mode 100644 pos_order_mgmt/readme/ROADMAP.rst create mode 100644 pos_order_mgmt/readme/USAGE.rst create mode 100644 pos_order_mgmt/static/description/icon.png create mode 100644 pos_order_mgmt/static/description/order-mgmt-icon.png create mode 100644 pos_order_mgmt/static/description/order-mgmt-list.png create mode 100644 pos_order_mgmt/static/src/css/pos.css create mode 100644 pos_order_mgmt/static/src/js/models.js create mode 100644 pos_order_mgmt/static/src/js/widgets.js create mode 100644 pos_order_mgmt/static/src/xml/pos.xml create mode 100644 pos_order_mgmt/views/assets.xml create mode 100644 pos_order_mgmt/views/view_pos_config.xml diff --git a/pos_order_mgmt/README.rst b/pos_order_mgmt/README.rst new file mode 100644 index 00000000..6ad8fb7f --- /dev/null +++ b/pos_order_mgmt/README.rst @@ -0,0 +1,121 @@ +============================== +POS Frontend Orders Management +============================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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-OCA%2Fpos-lightgray.png?logo=github + :target: https://github.com/OCA/pos/tree/11.0/pos_order_mgmt + :alt: OCA/pos +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/pos-11-0/pos-11-0-pos_order_mgmt + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/184/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of the PoS frontend allowing to load +already done PoS Orders in order to be able to operate over them, being able to +reprint past tickets or return them. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To configure this module, you need to: + +#. Go to *Point of Sale > Configuration > Point of Sale* and select one of + them. +#. Set *Load Done Orders* on if you want to be able to load past orders in that + PoS. +#. Change *Max Done Orders Quantity To Load* to your desired amount (10 by + default). Please note that the more you load, the more it will take to load + them in the session opening. You can also set it to 0 and you'll just be + able to load them from the order list screen. + +Usage +===== + +Once the PoS is loaded, you'll find a shopping trolley icon (🛒) in the top +bar that grants access to the order list screen. + +.. image:: /pos_order_mgmt/static/description/order-mgmt-icon.png + +There you can find the number of past orders loaded according to your +configuration (see Configuration) as well as the orders you checked out in +the current session: + +.. image:: /pos_order_mgmt/static/description/order-mgmt-list.png + +#. You can see their totals as well as their custumers if registered. +#. You can reprint their tickets clicking on the printer icon (⎙). +#. You can return them pressing on the arrow icon (↶). +#. You have a search input as well that lets you find past tickets by its + reference number. + +NOTE: You'll need your PoS to be online to be able to search or return a past +ticket. + +Known issues / Roadmap +====================== + +* It's possible to return the same order over and over. To avoid so, we should + load and control if there's a returned line id associated with the original + order. That would be a great improvement for future revisions. + +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 +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* David Vidal +* Sylvain LE GAL (https://twitter.com/legalsylvain) + +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_order_mgmt/__init__.py b/pos_order_mgmt/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/pos_order_mgmt/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/pos_order_mgmt/__manifest__.py b/pos_order_mgmt/__manifest__.py new file mode 100644 index 00000000..8ee74902 --- /dev/null +++ b/pos_order_mgmt/__manifest__.py @@ -0,0 +1,27 @@ +# Copyright 2018 GRAP - Sylvain LE GAL +# Copyright 2018 Tecnativa S.L. - David Vidal +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +{ + 'name': 'POS Frontend Orders Management', + 'summary': 'Manage old POS Orders from the frontend', + 'version': '11.0.1.0.0', + 'category': 'Point of Sale', + 'author': 'GRAP, ' + 'Tecnativa, ' + 'Odoo Community Association (OCA)', + 'website': 'https://github.com/OCA/pos', + 'license': 'AGPL-3', + 'depends': [ + 'pos_order_return', + ], + 'data': [ + 'views/assets.xml', + 'views/view_pos_config.xml', + ], + 'qweb': [ + 'static/src/xml/pos.xml' + ], + 'application': False, + 'installable': True, +} diff --git a/pos_order_mgmt/i18n/es.po b/pos_order_mgmt/i18n/es.po new file mode 100644 index 00000000..6e429edd --- /dev/null +++ b/pos_order_mgmt/i18n/es.po @@ -0,0 +1,149 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_order_mgmt +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-10-18 11:15+0000\n" +"PO-Revision-Date: 2018-10-18 11:15+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_order_mgmt +#: model:ir.ui.view,arch_db:pos_order_mgmt.view_pos_config_form +msgid "Allow to load done orders in this POS" +msgstr "Permitir cargar pedidos en este PdV" + +#. module: pos_order_mgmt +#: model:ir.model.fields,help:pos_order_mgmt.field_pos_config_iface_load_done_order +msgid "Allows to load already done orders in the frontend to operate over them, allowing reprint the tickets, return items, etc." +msgstr "Permite cargar pedidos ya realizados desde el PdV para operar sobre ellos: reimprimir tickes, devoluciónes, etc." + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/xml/pos.xml:36 +#, python-format +msgid "Amount Total" +msgstr "Importe Total" + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/xml/pos.xml:17 +#, python-format +msgid "Back" +msgstr "Volver" + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/js/widgets.js:230 +#: code:addons/pos_order_mgmt/static/src/js/widgets.js:258 +#, python-format +msgid "Can not execute this action because the POS is currently offline" +msgstr "No se puede ejecutar esta acción porque el PdV está sin línea en este momento" + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/js/widgets.js:229 +#: code:addons/pos_order_mgmt/static/src/js/widgets.js:257 +#, python-format +msgid "Connection error" +msgstr "Error de conexión" + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/xml/pos.xml:34 +#, python-format +msgid "Customer" +msgstr "Cliente" + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/xml/pos.xml:35 +#, python-format +msgid "Date" +msgstr "Fecha" + +#. module: pos_order_mgmt +#: model:ir.ui.view,arch_db:pos_order_mgmt.view_pos_config_form +msgid "Load Done Order Max Qty." +msgstr "Nº Máximo de Ventas a Cargar" + +#. module: pos_order_mgmt +#: model:ir.model.fields,field_description:pos_order_mgmt.field_pos_config_iface_load_done_order +#: model:ir.ui.view,arch_db:pos_order_mgmt.view_pos_config_form +msgid "Load Done Orders" +msgstr "Cargar Ventas Realizadas" + +#. module: pos_order_mgmt +#: model:ir.model.fields,field_description:pos_order_mgmt.field_pos_config_iface_load_done_order_max_qty +msgid "Max. Done Orders Quantity To Load" +msgstr "Nº Máximo de Ventas Realizadas a Cargar" + +#. module: pos_order_mgmt +#: model:ir.model.fields,help:pos_order_mgmt.field_pos_config_iface_load_done_order_max_qty +msgid "Maximum number of orders to load on the PoS at its init. Set it to 0 to load none (it's still posible to load them by ticket code)." +msgstr "Número máximo de ventas a cargar en el PdV cuando este se inicia. Establézcalo a 0 para no cargar ninguna (es posible cargarlas por referencia del ticket)." + +#. module: pos_order_mgmt +#: model:ir.ui.view,arch_db:pos_order_mgmt.view_pos_config_form +msgid "Maximum number orders to load" +msgstr "Ventas máximas a cargar" + +#. module: pos_order_mgmt +#: model:ir.model,name:pos_order_mgmt.model_pos_order +msgid "Point of Sale Orders" +msgstr "Ventas del Punto de Venta" + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/xml/pos.xml:33 +#, python-format +msgid "Ref." +msgstr "Ref." + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/xml/pos.xml:71 +#, python-format +msgid "Returned order:" +msgstr "Devolución de venta:" + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/xml/pos.xml:21 +#, python-format +msgid "Search Order" +msgstr "Buscar Venta" + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/js/widgets.js:190 +#, python-format +msgid "Unable to load some order lines because the products are not available in the POS cache.\n" +"\n" +"Please check that lines :\n" +"\n" +" * " +msgstr "No fue posible cargar algunas líneas porque los pedidos no están disponibles en la caché del PdV.\n" +"\n" +"Por favor, compruebe estas líneas :\n" +"\n" +" * " + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/js/widgets.js:189 +#, python-format +msgid "Unknown Products" +msgstr "Productos desconocidos" + +#. module: pos_order_mgmt +#: model:ir.model,name:pos_order_mgmt.model_pos_config +msgid "pos.config" +msgstr "" diff --git a/pos_order_mgmt/i18n/pos_order_mgmt.pot b/pos_order_mgmt/i18n/pos_order_mgmt.pot new file mode 100644 index 00000000..1e06ed6e --- /dev/null +++ b/pos_order_mgmt/i18n/pos_order_mgmt.pot @@ -0,0 +1,146 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_order_mgmt +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-10-18 11:15+0000\n" +"PO-Revision-Date: 2018-10-18 11:15+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_order_mgmt +#: model:ir.ui.view,arch_db:pos_order_mgmt.view_pos_config_form +msgid "Allow to load done orders in this POS" +msgstr "" + +#. module: pos_order_mgmt +#: model:ir.model.fields,help:pos_order_mgmt.field_pos_config_iface_load_done_order +msgid "Allows to load already done orders in the frontend to operate over them, allowing reprint the tickets, return items, etc." +msgstr "" + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/xml/pos.xml:36 +#, python-format +msgid "Amount Total" +msgstr "" + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/xml/pos.xml:17 +#, python-format +msgid "Back" +msgstr "" + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/js/widgets.js:230 +#: code:addons/pos_order_mgmt/static/src/js/widgets.js:258 +#, python-format +msgid "Can not execute this action because the POS is currently offline" +msgstr "" + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/js/widgets.js:229 +#: code:addons/pos_order_mgmt/static/src/js/widgets.js:257 +#, python-format +msgid "Connection error" +msgstr "" + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/xml/pos.xml:34 +#, python-format +msgid "Customer" +msgstr "" + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/xml/pos.xml:35 +#, python-format +msgid "Date" +msgstr "" + +#. module: pos_order_mgmt +#: model:ir.ui.view,arch_db:pos_order_mgmt.view_pos_config_form +msgid "Load Done Order Max Qty." +msgstr "" + +#. module: pos_order_mgmt +#: model:ir.model.fields,field_description:pos_order_mgmt.field_pos_config_iface_load_done_order +#: model:ir.ui.view,arch_db:pos_order_mgmt.view_pos_config_form +msgid "Load Done Orders" +msgstr "" + +#. module: pos_order_mgmt +#: model:ir.model.fields,field_description:pos_order_mgmt.field_pos_config_iface_load_done_order_max_qty +msgid "Max. Done Orders Quantity To Load" +msgstr "" + +#. module: pos_order_mgmt +#: model:ir.model.fields,help:pos_order_mgmt.field_pos_config_iface_load_done_order_max_qty +msgid "Maximum number of orders to load on the PoS at its init. Set it to 0 to load none (it's still posible to load them by ticket code)." +msgstr "" + +#. module: pos_order_mgmt +#: model:ir.ui.view,arch_db:pos_order_mgmt.view_pos_config_form +msgid "Maximum number orders to load" +msgstr "" + +#. module: pos_order_mgmt +#: model:ir.model,name:pos_order_mgmt.model_pos_order +msgid "Point of Sale Orders" +msgstr "" + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/xml/pos.xml:33 +#, python-format +msgid "Ref." +msgstr "" + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/xml/pos.xml:71 +#, python-format +msgid "Returned order:" +msgstr "" + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/xml/pos.xml:21 +#, python-format +msgid "Search Order" +msgstr "" + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/js/widgets.js:190 +#, python-format +msgid "Unable to load some order lines because the products are not available in the POS cache.\n" +"\n" +"Please check that lines :\n" +"\n" +" * " +msgstr "" + +#. module: pos_order_mgmt +#. openerp-web +#: code:addons/pos_order_mgmt/static/src/js/widgets.js:189 +#, python-format +msgid "Unknown Products" +msgstr "" + +#. module: pos_order_mgmt +#: model:ir.model,name:pos_order_mgmt.model_pos_config +msgid "pos.config" +msgstr "" + diff --git a/pos_order_mgmt/models/__init__.py b/pos_order_mgmt/models/__init__.py new file mode 100644 index 00000000..234b311e --- /dev/null +++ b/pos_order_mgmt/models/__init__.py @@ -0,0 +1,2 @@ +from . import pos_config +from . import pos_order diff --git a/pos_order_mgmt/models/pos_config.py b/pos_order_mgmt/models/pos_config.py new file mode 100644 index 00000000..4e82aa6f --- /dev/null +++ b/pos_order_mgmt/models/pos_config.py @@ -0,0 +1,24 @@ +# Copyright 2018 GRAP - Sylvain LE GAL +# Copyright 2018 Tecnativa S.L. - David Vidal +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class PosConfig(models.Model): + _inherit = 'pos.config' + + iface_load_done_order = fields.Boolean( + string='Load Done Orders', + default=True, + help='Allows to load already done orders in the frontend to operate ' + 'over them, allowing reprint the tickets, return items, etc.', + ) + iface_load_done_order_max_qty = fields.Integer( + string='Max. Done Orders Quantity To Load', + default=10, + required=True, + help='Maximum number of orders to load on the PoS at its init. ' + 'Set it to 0 to load none (it\'s still posible to load them by ' + 'ticket code).', + ) diff --git a/pos_order_mgmt/models/pos_order.py b/pos_order_mgmt/models/pos_order.py new file mode 100644 index 00000000..c2ae6382 --- /dev/null +++ b/pos_order_mgmt/models/pos_order.py @@ -0,0 +1,116 @@ +# Copyright 2018 GRAP - Sylvain LE GAL +# Copyright 2018 Tecnativa S.L. - David Vidal +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, models + + +class PosOrder(models.Model): + _inherit = 'pos.order' + + @api.model + def _prepare_filter_for_pos(self, pos_session_id): + return [ + ('state', 'in', ['paid', 'done', 'invoiced']), + ] + + @api.model + def _prepare_filter_query_for_pos(self, pos_session_id, query): + return [ + '|', + ('name', 'ilike', query), + ('pos_reference', 'ilike', query), + ] + + @api.model + def _prepare_fields_for_pos_list(self): + return [ + 'name', 'pos_reference', 'partner_id', 'date_order', + 'amount_total', 'amount_paid', 'amount_return', 'session_id', + 'amount_tax', 'statement_ids', 'lines', 'invoice_id', + 'returned_order_id', 'fiscal_position_id' + ] + + @api.model + def search_done_orders_for_pos(self, query, pos_session_id): + session_obj = self.env['pos.session'] + config = session_obj.browse(pos_session_id).config_id + condition = self._prepare_filter_for_pos(pos_session_id) + if not query: + # Search only this POS orders + condition += [('config_id', '=', config.id)] + else: + # Search globally by criteria + condition += self._prepare_filter_query_for_pos(pos_session_id, + query) + fields = self._prepare_fields_for_pos_list() + return self.search_read( + condition, fields, limit=config.iface_load_done_order_max_qty) + + @api.multi + def _prepare_done_order_for_pos(self): + self.ensure_one() + order_lines = [] + payment_lines = [] + for order_line in self.lines: + order_line = self._prepare_done_order_line_for_pos(order_line) + order_lines.append(order_line) + for payment_line in self.statement_ids: + payment_line = self._prepare_done_order_payment_for_pos( + payment_line) + payment_lines.append(payment_line) + return { + 'id': self.id, + 'date_order': self.date_order, + 'pos_reference': self.pos_reference, + 'name': self.name, + 'partner_id': self.partner_id.id, + 'fiscal_position': self.fiscal_position_id.id, + 'line_ids': order_lines, + 'statement_ids': payment_lines, + 'origin_invoice_id': bool(self.invoice_id), + 'returned_order_id': (self.returned_order_id and + self.returned_order_id.pos_reference or + False), + } + + @api.multi + def _prepare_done_order_line_for_pos(self, order_line): + self.ensure_one() + return { + 'product_id': order_line.product_id.id, + 'qty': order_line.qty, + 'price_unit': order_line.price_unit, + 'discount': order_line.discount, + } + + @api.multi + def _prepare_done_order_payment_for_pos(self, payment_line): + self.ensure_one() + return { + 'statement_id': payment_line.statement_id.id, + 'amount': payment_line.amount, + } + + @api.multi + def load_done_order_for_pos(self): + self.ensure_one() + return self._prepare_done_order_for_pos() + + @api.model + def _process_order(self, pos_order): + if (not pos_order.get('return') or + not pos_order.get('returned_order_id')): + return super()._process_order(pos_order) + order = super(PosOrder, + self.with_context(do_not_check_negative_qty=True) + )._process_order(pos_order) + returned_order_id = pos_order.get('returned_order_id') + if isinstance(returned_order_id, int): + order.returned_order_id = self.browse(returned_order_id) + # Only if the order is returned from the browser saved orders. + else: + order.returned_order_id = self.search([ + ('pos_reference', '=', returned_order_id)]) + order.returned_order_id.refund_order_ids |= order + return order diff --git a/pos_order_mgmt/readme/CONFIGURE.rst b/pos_order_mgmt/readme/CONFIGURE.rst new file mode 100644 index 00000000..a62d47bf --- /dev/null +++ b/pos_order_mgmt/readme/CONFIGURE.rst @@ -0,0 +1,10 @@ +To configure this module, you need to: + +#. Go to *Point of Sale > Configuration > Point of Sale* and select one of + them. +#. Set *Load Done Orders* on if you want to be able to load past orders in that + PoS. +#. Change *Max Done Orders Quantity To Load* to your desired amount (10 by + default). Please note that the more you load, the more it will take to load + them in the session opening. You can also set it to 0 and you'll just be + able to load them from the order list screen. diff --git a/pos_order_mgmt/readme/CONTRIBUTORS.rst b/pos_order_mgmt/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..9b6ff1a8 --- /dev/null +++ b/pos_order_mgmt/readme/CONTRIBUTORS.rst @@ -0,0 +1,2 @@ +* David Vidal +* Sylvain LE GAL (https://twitter.com/legalsylvain) diff --git a/pos_order_mgmt/readme/DESCRIPTION.rst b/pos_order_mgmt/readme/DESCRIPTION.rst new file mode 100644 index 00000000..0b3deafb --- /dev/null +++ b/pos_order_mgmt/readme/DESCRIPTION.rst @@ -0,0 +1,3 @@ +This module extends the functionality of the PoS frontend allowing to load +already done PoS Orders in order to be able to operate over them, being able to +reprint past tickets or return them. diff --git a/pos_order_mgmt/readme/ROADMAP.rst b/pos_order_mgmt/readme/ROADMAP.rst new file mode 100644 index 00000000..7fe4e24b --- /dev/null +++ b/pos_order_mgmt/readme/ROADMAP.rst @@ -0,0 +1,3 @@ +* It's possible to return the same order over and over. To avoid so, we should + load and control if there's a returned line id associated with the original + order. That would be a great improvement for future revisions. diff --git a/pos_order_mgmt/readme/USAGE.rst b/pos_order_mgmt/readme/USAGE.rst new file mode 100644 index 00000000..5811a79c --- /dev/null +++ b/pos_order_mgmt/readme/USAGE.rst @@ -0,0 +1,19 @@ +Once the PoS is loaded, you'll find a shopping trolley icon (🛒) in the top +bar that grants access to the order list screen. + +.. image:: /pos_order_mgmt/static/description/order-mgmt-icon.png + +There you can find the number of past orders loaded according to your +configuration (see Configuration) as well as the orders you checked out in +the current session: + +.. image:: /pos_order_mgmt/static/description/order-mgmt-list.png + +#. You can see their totals as well as their custumers if registered. +#. You can reprint their tickets clicking on the printer icon (⎙). +#. You can return them pressing on the arrow icon (↶). +#. You have a search input as well that lets you find past tickets by its + reference number. + +NOTE: You'll need your PoS to be online to be able to search or return a past +ticket. diff --git a/pos_order_mgmt/static/description/icon.png b/pos_order_mgmt/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cafb0ac02d2e816d4311a5a6ca9fad4670ab76e0 GIT binary patch literal 15006 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 literal 0 HcmV?d00001 diff --git a/pos_order_mgmt/static/description/order-mgmt-icon.png b/pos_order_mgmt/static/description/order-mgmt-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e4723efb72da394d39817a6e1d396bbf534a8aca GIT binary patch literal 26304 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 QVMd1-=oz0b)UglyAOFc*i2wiq literal 0 HcmV?d00001 diff --git a/pos_order_mgmt/static/description/order-mgmt-list.png b/pos_order_mgmt/static/description/order-mgmt-list.png new file mode 100644 index 0000000000000000000000000000000000000000..4e2325869bea5b1e9347c0b3271ff0aedd175d85 GIT binary patch literal 39015 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 0) { + // If it is not change + order.add_paymentline(cashregister); + order.selected_paymentline.set_amount(line.amount); + } + } + }); + }); + return order; + }, + + load_order: function (order_id, action) { + this.unknown_products = []; + var self = this; + return this._rpc({ + model: 'pos.order', + method: 'load_done_order_for_pos', + args: [order_id], + }).then(function (order_data) { + self.gui.back(); + var correct_order_print = true; + if (action === 'return') { + order_data.return = true; + } + var order = self._prepare_order_from_order_data(order_data); + // Forbid POS Order loading if some products are unknown + if (self.unknown_products.length > 0) { + self.gui.show_popup('error-traceback', { + 'title': _t('Unknown Products'), + 'body': _t('Unable to load some order lines because the ' + + 'products are not available in the POS cache.\n\n' + + 'Please check that lines :\n\n * ') + self.unknown_products.join("; \n *"), + }); + correct_order_print = false; + } + if (correct_order_print && action === 'print') { + self.action_print(order); + } + if (correct_order_print && action === 'return') { + self.action_return(order); + } + }).fail(function (error, event) { + if (parseInt(error.code, 10) === 200) { + // Business Logic Error, not a connection problem + self.gui.show_popup( + 'error-traceback', { + 'title': error.data.message, + 'body': error.data.debug, + }); + } else { + self.gui.show_popup('error', { + 'title': _t('Connection error'), + 'body': _t('Can not execute this action because the POS is currently offline'), + }); + } + event.preventDefault(); + }); + }, + + // Search Part + search_done_orders: function (query) { + var self = this; + return this._rpc({ + model: 'pos.order', + method: 'search_done_orders_for_pos', + args: [query || '', this.pos.pos_session.id], + }).then(function (result) { + self.orders = result; + }).fail(function (error, event) { + if (parseInt(error.code, 10) === 200) { + // Business Logic Error, not a connection problem + self.gui.show_popup( + 'error-traceback', { + 'title': error.data.message, + 'body': error.data.debug, + } + ); + } else { + self.gui.show_popup('error', { + 'title': _t('Connection error'), + 'body': _t('Can not execute this action because the POS is currently offline'), + }); + } + event.preventDefault(); + }); + }, + + perform_search: function (query) { + var self = this; + this.search_done_orders(query) + .done(function () { + self.render_list(); + }); + }, + + clear_search: function () { + var self = this; + this.search_done_orders() + .done(function () { + self.$('.searchbox input')[0].value = ''; + self.$('.searchbox input').focus(); + self.render_list(); + }); + }, + }); + + gui.define_screen({ + name: 'orderlist', + widget: OrderListScreenWidget, + }); + + var ListOrderButtonWidget = PosBaseWidget.extend({ + template: 'ListOrderButtonWidget', + init: function (parent, options) { + var opts = options || {}; + this._super(parent, opts); + this.action = opts.action; + this.label = opts.label; + }, + + button_click: function () { + this.gui.show_screen('orderlist'); + }, + + renderElement: function () { + var self = this; + this._super(); + this.$el.click(function () { + self.button_click(); + }); + }, + }); + + var widgets = chrome.Chrome.prototype.widgets; + widgets.push({ + 'name': 'list_orders', + 'widget': ListOrderButtonWidget, + 'prepend': '.pos-rightheader', + 'args': { + 'label': 'All Orders', + }, + }); + + return { + ListOrderButtonWidget: ListOrderButtonWidget, + OrderListScreenWidget: OrderListScreenWidget, + }; + +}); diff --git a/pos_order_mgmt/static/src/xml/pos.xml b/pos_order_mgmt/static/src/xml/pos.xml new file mode 100644 index 00000000..f3b7b55c --- /dev/null +++ b/pos_order_mgmt/static/src/xml/pos.xml @@ -0,0 +1,85 @@ + + + + + +
+ +
+
+
+ + +
+
+
+ + + Back + + + + + + +
+
+
+
+
+
+ + + + + + + + + +
Ref.CustomerDateAmount Total +
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + +
+ Returned order: +
+
+
+ + + + +
+ Rectifies: + +
+
+ +
diff --git a/pos_order_mgmt/views/assets.xml b/pos_order_mgmt/views/assets.xml new file mode 100644 index 00000000..126e81c3 --- /dev/null +++ b/pos_order_mgmt/views/assets.xml @@ -0,0 +1,13 @@ + + + +