From 018fdcbfd794c1d04991a2de2e2af18db8392f63 Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Fri, 9 Mar 2018 18:58:09 +0100 Subject: [PATCH 01/71] [8.0] [ADD] pos order to sale order (w/o picking) (#188) * [ADD] new module pos_order_to_sale_order --- pos_order_to_sale_order/README.rst | 135 ++++++++++++++ pos_order_to_sale_order/__init__.py | 2 + pos_order_to_sale_order/__openerp__.py | 26 +++ .../demo/product_template.xml | 19 ++ pos_order_to_sale_order/demo/res_groups.xml | 7 + pos_order_to_sale_order/demo/sale_order.xml | 51 ++++++ .../demo/stock_picking_type.xml | 7 + pos_order_to_sale_order/i18n/fr.po | 168 +++++++++++++++++ pos_order_to_sale_order/models/__init__.py | 3 + pos_order_to_sale_order/models/pos_config.py | 27 +++ pos_order_to_sale_order/models/sale_order.py | 60 ++++++ .../static/description/icon.png | Bin 0 -> 19127 bytes .../static/description/pos_config_form.png | Bin 0 -> 38384 bytes .../pos_create_picking_confirm.png | Bin 0 -> 28607 bytes .../pos_create_picking_option_1.png | Bin 0 -> 20272 bytes .../pos_create_picking_option_2.png | Bin 0 -> 21565 bytes .../pos_create_picking_option_3.png | Bin 0 -> 20484 bytes .../static/src/js/pos_order_to_sale_order.js | 171 ++++++++++++++++++ .../src/xml/pos_order_to_sale_order.xml | 13 ++ .../views/pos_order_to_sale_order.xml | 11 ++ .../views/view_pos_config.xml | 16 ++ 21 files changed, 716 insertions(+) create mode 100644 pos_order_to_sale_order/README.rst create mode 100644 pos_order_to_sale_order/__init__.py create mode 100644 pos_order_to_sale_order/__openerp__.py create mode 100644 pos_order_to_sale_order/demo/product_template.xml create mode 100644 pos_order_to_sale_order/demo/res_groups.xml create mode 100644 pos_order_to_sale_order/demo/sale_order.xml create mode 100644 pos_order_to_sale_order/demo/stock_picking_type.xml create mode 100644 pos_order_to_sale_order/i18n/fr.po create mode 100644 pos_order_to_sale_order/models/__init__.py create mode 100644 pos_order_to_sale_order/models/pos_config.py create mode 100644 pos_order_to_sale_order/models/sale_order.py create mode 100644 pos_order_to_sale_order/static/description/icon.png create mode 100644 pos_order_to_sale_order/static/description/pos_config_form.png create mode 100644 pos_order_to_sale_order/static/description/pos_create_picking_confirm.png create mode 100644 pos_order_to_sale_order/static/description/pos_create_picking_option_1.png create mode 100644 pos_order_to_sale_order/static/description/pos_create_picking_option_2.png create mode 100644 pos_order_to_sale_order/static/description/pos_create_picking_option_3.png create mode 100644 pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js create mode 100644 pos_order_to_sale_order/static/src/xml/pos_order_to_sale_order.xml create mode 100644 pos_order_to_sale_order/views/pos_order_to_sale_order.xml create mode 100644 pos_order_to_sale_order/views/view_pos_config.xml diff --git a/pos_order_to_sale_order/README.rst b/pos_order_to_sale_order/README.rst new file mode 100644 index 0000000000..ad32513413 --- /dev/null +++ b/pos_order_to_sale_order/README.rst @@ -0,0 +1,135 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + + +======================= +POS Order To Sale Order +======================= + + +This module extends the functionality of point of sale to allow sale orders +creation from the Point of Sale. + + +In the POS UI, buttons has been added to create a sale order and discard +the current POS order. + +This module is usefull in many cases, for exemple : + +* take orders with a very simple interface + +* if you have some customers that come every day in your shop, but want to + have a unique invoice at the end of the month. With that module, you can + create a sale order and deliver products every time to keep your stock value + correct, and to create a unique invoice, when you want. + + +Three options are available: + +#. '**Create a draft Order**' + A new sale order in a draft mode will be created that can be changed later. + +.. figure:: static/description/pos_create_picking_option_1.png + :width: 800 px + +#. '**Create a Confirmed Order**' + A new sale order will be created and confirmed. + +.. figure:: static/description/pos_create_picking_option_2.png + :width: 800 px + +#. '**Create Delivered Picking**' (by default) + A new sale order will be created and confirmed. the associated picking + will be marked as delivered. + +.. figure:: static/description/pos_create_picking_option_3.png + :width: 800 px + +Configuration +============= + +To configure this module, you need to: + +#. Go to Point Of Sale / Configuration / Point of Sale +#. Check the box 'Create Sale Orders' +#. Select the desired default behaviour + +.. figure:: static/description/pos_config_form.png + :width: 800 px + +Usage +===== + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/184/8.0 + +Technical Notes +=============== + +* Some hooks are defined in the JS file, to define custom behaviour after + having created the sale order (and the stock picking). + +* Some prepare functions are available in the sale.order model, to overload + the creation of the sale order. + +* You could be interested by another module, pos_sale_order, that completely + alter Point of Sale module, avoiding creating Pos Orders, and creating + allways Sale Orders. + This module is a WIP state, and is available here: + https://github.com/OCA/pos/pull/35 + +Known issues / Roadmap +====================== + +* Because of the poor design of the Odoo Point of Sale, some basic features + are not available by default, like pricelist, fiscal position, etc ... + For that reason, unit price will be recomputed by default, when creating the + sale order, and the unit price of the current bill will not be used. + We could imagine to create an option 'Use Pos Order Unit Price' in a setting. + +For more information about that point, you could check pos_pricelist OCA +module. (same repository). + +.. figure:: static/description/pos_create_picking_confirm.png + :width: 800 px + + +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 smash it by providing detailed and welcomed feedback. + +Credits +======= + +Contributors +------------ + +* Sylvain Le Gal (https://twitter.com/legalsylvain) + +Funders +------- + +The development of this module has been financially supported by: + +* GRAP, Groupement Régional Alimentaire de Proximité (http://www.grap.coop) + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +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. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/pos_order_to_sale_order/__init__.py b/pos_order_to_sale_order/__init__.py new file mode 100644 index 0000000000..a0fdc10fe1 --- /dev/null +++ b/pos_order_to_sale_order/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import models diff --git a/pos_order_to_sale_order/__openerp__.py b/pos_order_to_sale_order/__openerp__.py new file mode 100644 index 0000000000..37c2e153f1 --- /dev/null +++ b/pos_order_to_sale_order/__openerp__.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2017 - 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': 'PoS Order To Sale Order', + 'version': '8.0.1.0.0', + 'author': 'GRAP,Odoo Community Association (OCA)', + 'category': 'Point Of Sale', + 'license': 'AGPL-3', + 'depends': [ + 'point_of_sale', + ], + 'website': 'https://odoo-community.org/', + 'data': [ + 'views/view_pos_config.xml', + 'views/pos_order_to_sale_order.xml', + ], + 'demo': [ + 'demo/res_groups.xml', + ], + 'qweb': [ + 'static/src/xml/pos_order_to_sale_order.xml', + ], +} diff --git a/pos_order_to_sale_order/demo/product_template.xml b/pos_order_to_sale_order/demo/product_template.xml new file mode 100644 index 0000000000..38e35a4c08 --- /dev/null +++ b/pos_order_to_sale_order/demo/product_template.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/pos_order_to_sale_order/demo/res_groups.xml b/pos_order_to_sale_order/demo/res_groups.xml new file mode 100644 index 0000000000..158b505f78 --- /dev/null +++ b/pos_order_to_sale_order/demo/res_groups.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/pos_order_to_sale_order/demo/sale_order.xml b/pos_order_to_sale_order/demo/sale_order.xml new file mode 100644 index 0000000000..d2059c6438 --- /dev/null +++ b/pos_order_to_sale_order/demo/sale_order.xml @@ -0,0 +1,51 @@ + + + + + + picking + + + + + + 5 + + + + + + 3 + + + + + + + + picking + + + + + + 15 + 10 + + + + + + 1 + + + + + + 3 + 555 + + + + + diff --git a/pos_order_to_sale_order/demo/stock_picking_type.xml b/pos_order_to_sale_order/demo/stock_picking_type.xml new file mode 100644 index 0000000000..e4c35380f4 --- /dev/null +++ b/pos_order_to_sale_order/demo/stock_picking_type.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/pos_order_to_sale_order/i18n/fr.po b/pos_order_to_sale_order/i18n/fr.po new file mode 100644 index 0000000000..1f2e93cc9d --- /dev/null +++ b/pos_order_to_sale_order/i18n/fr.po @@ -0,0 +1,168 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_order_to_sale_order +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-06 10:02+0000\n" +"PO-Revision-Date: 2018-01-06 10:02+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_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:112 +#, python-format +msgid "Check your internet connection and try again." +msgstr "Veuillez vérifier votre connexion internet et essayer de nouveau." + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:33 +#, python-format +msgid "Create Confirmed Order" +msgstr "Créer une vente confirmée" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:34 +#, python-format +msgid "Create Confirmed Sale Order and discard the current PoS Order?" +msgstr "Créer une vente confirmée, et supprimer le ticket de caisse en cours ?" + +#. module: pos_order_to_sale_order +#: field:pos.config,iface_create_confirmed_sale_order:0 +msgid "Create Confirmed Sale Orders" +msgstr "Créer des ventes confirmées" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:38 +#, python-format +msgid "Create Delivered Order" +msgstr "Créer une vente livrée" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:39 +#, python-format +msgid "Create Delivered Sale Order and discard the current PoS Order?" +msgstr "Créer une vente livrée, et supprimer le ticket de caisse en cours ?" + +#. module: pos_order_to_sale_order +#: field:pos.config,iface_create_delivered_sale_order:0 +msgid "Create Delivered Sale Orders" +msgstr "Créer des ventes livrées" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:28 +#, python-format +msgid "Create Draft Order" +msgstr "Créer un devis en brouillon" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:29 +#, python-format +msgid "Create Draft Sale Order and discard the current PoS Order?" +msgstr "Créer une vente en brouillon, et supprimer le ticket de caisse en cours ?" + +#. module: pos_order_to_sale_order +#: field:pos.config,iface_create_draft_sale_order:0 +msgid "Create Draft Sale Orders" +msgstr "Créer des ventes en brouillon" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:52 +#, python-format +msgid "Empty Order" +msgstr "Commande vide" + +#. module: pos_order_to_sale_order +#: help:pos.config,iface_create_confirmed_sale_order:0 +msgid "If checked, the cashier will have the possibility to create a confirmed Sale Order, based on the current draft PoS Order." +msgstr "En cochant la case, le caissier aura la possibilité de créer une vente confirmée, à partir du ticket de caisse en cours." + +#. module: pos_order_to_sale_order +#: help:pos.config,iface_create_delivered_sale_order:0 +msgid "If checked, the cashier will have the possibility to create a confirmed sale Order, based on the current draft PoS Order.\n" +" the according picking will be marked as delivered. Only invoices process will be possible." +msgstr "En cochant la case, le caissier aura la possibilité de créer une vente confirmée, à partir du ticket de caisse en cours.\n" +" Le bon de livraison correspondant sera marqué comme livré. Seul le processus de facturation sera possible." + +#. module: pos_order_to_sale_order +#: help:pos.config,iface_create_draft_sale_order:0 +msgid "If checked, the cashier will have the possibility to create a draft Sale Order, based on the current draft PoS Order." +msgstr "En cochant la case, le caissier aura la possibilité de créer une vente en brouillon, à partir du ticket de caisse en cours." + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:60 +#, python-format +msgid "No customer defined" +msgstr "Pas de client défini" + +#. module: pos_order_to_sale_order +#: code:addons/pos_order_to_sale_order/models/sale_order.py:19 +#, python-format +msgid "Point of Sale %s" +msgstr "Point de vente %s" + +#. module: pos_order_to_sale_order +#: model:ir.model,name:pos_order_to_sale_order.model_sale_order +msgid "Sales Order" +msgstr "Commande de ventes" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:111 +#, python-format +msgid "The order could not be sent" +msgstr "La commande n'a pas pu être envoyée" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:53 +#, python-format +msgid "There must be at least one product in your order to create Sale Order." +msgstr "Il doit y avoir au moins un produit dans votre commande pour créer une vente" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:35 +#, python-format +msgid "This operation will permanently discard the current PoS Order and create a confirmed Sale Order, based on the current order lines. Note if you have manually changed unit prices for some products, this changes will not been taken into account in the sale order, and should be done manually on the invoice again." +msgstr "Cette opération va supprimer définitivement le ticket de caisse en cours, et créer une vente confirmée, en se basant sur les lignes du ticket en cours. Remarque : si vous aviez changé le prix unitaire de certains produits, ces changements ne seront pas pris en compte dans la vente, et devront être refait manuellement sur la facture." + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:40 +#, python-format +msgid "This operation will permanently discard the current PoS Order and create a confirmed Sale Order, based on the current order lines. The according picking will be marked as delivered.\n" +" Note if you have manually changed unit prices for some products, this changes will not been taken into account in the sale order, and should be done manually on the invoice again." +msgstr "Cette opération va supprimer définitivement le ticket de caisse en cours, et créer une vente confirmée, en se basant sur les lignes du ticket en cours. Le bone de livraison correspondant sera marqué comme livré. \n" +"Remarque : si vous aviez changé le prix unitaire de certains produits, ces changements ne seront pas pris en compte dans la vente, et devront être refait manuellement sur la facture." + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:30 +#, python-format +msgid "This operation will permanently discard the current PoS Order and create a draft Sale Order, based on the current order lines. Note if you have manually changed unit prices for some products, this changes will not been taken into account in the sale order." +msgstr "Cette opération va supprimer définitivement le ticket de caisse en cours, et créer une vente en brouillon, en se basant sur les lignes du ticket en cours. Remarque : si vous aviez changé le prix unitaire de certains produits, ces changements ne seront pas pris en compte dans la vente." + + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:61 +#, python-format +msgid "You should select a customer in order to create a Sale Order. Please select one by clicking the order tab." +msgstr "Vous devez sélectionner un client, afin de créer une vente. Veuillez en sélectionner un en cliquant sur l'onglet de la commande." + diff --git a/pos_order_to_sale_order/models/__init__.py b/pos_order_to_sale_order/models/__init__.py new file mode 100644 index 0000000000..b0ad68cfdb --- /dev/null +++ b/pos_order_to_sale_order/models/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- +from . import sale_order +from . import pos_config diff --git a/pos_order_to_sale_order/models/pos_config.py b/pos_order_to_sale_order/models/pos_config.py new file mode 100644 index 0000000000..8b7d249fe8 --- /dev/null +++ b/pos_order_to_sale_order/models/pos_config.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2017 - 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 models, fields + + +class PosConfig(models.Model): + _inherit = 'pos.config' + + iface_create_draft_sale_order = fields.Boolean( + string='Create Draft Sale Orders', default=True, + help="If checked, the cashier will have the possibility to create" + " a draft Sale Order, based on the current draft PoS Order.") + + iface_create_confirmed_sale_order = fields.Boolean( + string='Create Confirmed Sale Orders', default=True, + help="If checked, the cashier will have the possibility to create" + " a confirmed Sale Order, based on the current draft PoS Order.") + + iface_create_delivered_sale_order = fields.Boolean( + string='Create Delivered Sale Orders', default=True, + help="If checked, the cashier will have the possibility to create" + " a confirmed sale Order, based on the current draft PoS Order.\n" + " the according picking will be marked as delivered. Only invoices" + " process will be possible.") diff --git a/pos_order_to_sale_order/models/sale_order.py b/pos_order_to_sale_order/models/sale_order.py new file mode 100644 index 0000000000..9939794918 --- /dev/null +++ b/pos_order_to_sale_order/models/sale_order.py @@ -0,0 +1,60 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2017 - 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 models, api, _ + + +class SaleOrder(models.Model): + _inherit = 'sale.order' + + @api.model + def _prepare_order_field_from_pos(self, order_data): + session_obj = self.env['pos.session'] + session = session_obj.browse(order_data['pos_session_id']) + res = self.onchange_partner_id(order_data['partner_id'])['value'] + res.update({ + 'partner_id': order_data['partner_id'] or False, + 'origin': _("Point of Sale %s") % (session.name), + 'client_order_ref': order_data['name'], + 'user_id': order_data['user_id'] or False, + 'order_line': [], + }) + for line_data in order_data['lines']: + res['order_line'].append([ + 0, False, self._prepare_order_line_field_from_pos( + line_data[2], res)]) + return res + + @api.model + def _prepare_order_line_field_from_pos(self, line_data, order_data): + line_obj = self.env['sale.order.line'] + res = line_obj.product_id_change( + order_data['pricelist_id'], line_data['product_id'], + qty=line_data['qty'], partner_id=order_data['partner_id'])['value'] + res.update({ + 'product_id': line_data['product_id'], + 'product_uom_qty': line_data['qty'], + 'discount': line_data['discount'], + }) + return res + + @api.model + def create_order_from_pos(self, order_data): + # Create Draft Sale order + sale_order = self.create( + self._prepare_order_field_from_pos(order_data)) + + # Confirm Sale Order + if order_data['sale_order_state'] in ['confirmed', 'delivered']: + sale_order.action_button_confirm() + + # mark picking as delivered + if order_data['sale_order_state'] == 'delivered': + sale_order.picking_ids.force_assign() + sale_order.picking_ids.do_transfer() + + return { + 'sale_order_id': sale_order.id, + } diff --git a/pos_order_to_sale_order/static/description/icon.png b/pos_order_to_sale_order/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d547d9cb33b6de7e15750707cc6dd319514bdc83 GIT binary patch literal 19127 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 AMgRZ+ literal 0 HcmV?d00001 diff --git a/pos_order_to_sale_order/static/description/pos_config_form.png b/pos_order_to_sale_order/static/description/pos_config_form.png new file mode 100644 index 0000000000000000000000000000000000000000..54076c8272ffc30315af5d9fb4ac3b45e6d0ddbd GIT binary patch literal 38384 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 literal 0 HcmV?d00001 diff --git a/pos_order_to_sale_order/static/description/pos_create_picking_confirm.png b/pos_order_to_sale_order/static/description/pos_create_picking_confirm.png new file mode 100644 index 0000000000000000000000000000000000000000..436e20a77c64685e03e67a4a384b4e44ed7b9a7f GIT binary patch literal 28607 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 literal 0 HcmV?d00001 diff --git a/pos_order_to_sale_order/static/description/pos_create_picking_option_1.png b/pos_order_to_sale_order/static/description/pos_create_picking_option_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b69fa6f10678b0d98a67fc79f3b334ca1c61d0a9 GIT binary patch literal 20272 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 literal 0 HcmV?d00001 diff --git a/pos_order_to_sale_order/static/description/pos_create_picking_option_2.png b/pos_order_to_sale_order/static/description/pos_create_picking_option_2.png new file mode 100644 index 0000000000000000000000000000000000000000..46739f6cf487da1db3be2f78d5b9fba723000b67 GIT binary patch literal 21565 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 Th=~)f`XqX&V+5+X=NS86Ug+#> literal 0 HcmV?d00001 diff --git a/pos_order_to_sale_order/static/description/pos_create_picking_option_3.png b/pos_order_to_sale_order/static/description/pos_create_picking_option_3.png new file mode 100644 index 0000000000000000000000000000000000000000..28c3d02ce86cb8b90a1a54cf6683df7c6f926f07 GIT binary patch literal 20484 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 literal 0 HcmV?d00001 diff --git a/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js b/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js new file mode 100644 index 0000000000..e472f3679c --- /dev/null +++ b/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js @@ -0,0 +1,171 @@ +/****************************************************************************** + Copyright (C) 2017 - 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). + *****************************************************************************/ + +openerp.pos_order_to_sale_order = function(instance, local) { + + "use strict"; + + var module = instance.point_of_sale; + var _t = instance.web._t; + + /************************************************************************* + New Widget CreateSaleOrderButtonWidget: + * On click, check if there is a customer defined, + ask confirmation call server to create sale order, and delete + the current order. + */ + module.CreateSaleOrderButtonWidget = module.PosBaseWidget.extend({ + template: 'CreateSaleOrderButtonWidget', + + init: function(parent, options){ + this._super(parent, options); + this.sale_order_state = options.sale_order_state; + if (this.sale_order_state == 'draft') { + this.display_text = _t("Create Draft Order"); + this.confirmation_message = _t('Create Draft Sale Order and discard the current PoS Order?'); + this.confirmation_comment = _t("This operation will permanently discard the current PoS Order and create a draft Sale Order, based on the current order lines. Note if you have manually changed unit prices for some products, this changes will not been taken into account in the sale order."); + } + else if (options.sale_order_state == 'confirmed') { + this.display_text = _t("Create Confirmed Order"); + this.confirmation_message = _t('Create Confirmed Sale Order and discard the current PoS Order?'); + this.confirmation_comment = _t("This operation will permanently discard the current PoS Order and create a confirmed Sale Order, based on the current order lines. Note if you have manually changed unit prices for some products, this changes will not been taken into account in the sale order, and should be done manually on the invoice again."); + } + else if (options.sale_order_state == 'delivered') { + this.display_text = _t("Create Delivered Order"); + this.confirmation_message = _t('Create Delivered Sale Order and discard the current PoS Order?'); + this.confirmation_comment = _t("This operation will permanently discard the current PoS Order and create a confirmed Sale Order, based on the current order lines. The according picking will be marked as delivered.\n Note if you have manually changed unit prices for some products, this changes will not been taken into account in the sale order, and should be done manually on the invoice again."); + } + }, + + renderElement: function() { + var self = this; + this._super(); + this.$el.click(function(){ + var current_order = self.pos.get('selectedOrder'); + // Prevent empty delivery order + if (current_order.get('orderLines').length == 0){ + self.pos_widget.screen_selector.show_popup('error',{ + 'message': _t('Empty Order'), + 'comment': _t('There must be at least one product in your order to create Sale Order.'), + }); + return; + } + // Check Customer + if (!current_order.get('client')){ + self.pos_widget.screen_selector.show_popup('error',{ + 'message': _t('No customer defined'), + 'comment': _t('You should select a customer in order to create a Sale Order. Please select one by clicking the order tab.'), + }); + return; + } + self.pos.pos_widget.screen_selector.show_popup('confirm', { + message: self.confirmation_message, + comment: self.confirmation_comment, + confirm: function(){ + var SaleOrderModel = new instance.web.Model('sale.order'); + current_order.sale_order_state = self.sale_order_state; + SaleOrderModel.call('create_order_from_pos', [self.prepare_create_sale_order(current_order)] + ).then(function (result) { + self.hook_create_sale_order_success(result); + }).fail(function (error, event){ + self.hook_create_sale_order_error(error, event); + }); + + }, + }); + }); + }, + + // Overload This function to send custom sale order data to server + prepare_create_sale_order: function(order) { + var res = order.export_as_JSON(); + res.sale_order_state = this.sale_order_state; + return res; + }, + + // Overload this function to make custom action after Sale order + // Creation success + hook_create_sale_order_success: function(result) { + this.pos.get('selectedOrder').destroy(); + }, + + // Overload this function to make custom action after Sale order + // Creation fail + hook_create_sale_order_error: function(error, event) { + event.preventDefault(); + if(error.code === 200 ){ + // Business Logic Error, not a connection problem + this.pos_widget.screen_selector.show_popup('error-traceback',{ + message: error.data.message, + comment: error.data.debug, + }); + } + else{ + // connexion problem + this.pos_widget.screen_selector.show_popup('error',{ + message: _t('The order could not be sent'), + comment: _t('Check your internet connection and try again.'), + }); + } + + }, + + }); + + + /************************************************************************* + Extend PosWidget: + * Create new buttons, depending of the configuration + */ + module.PosWidget = module.PosWidget.extend({ + build_widgets: function() { + this._super(); + if (this.pos.config.iface_create_draft_sale_order){ + this.create_draft_sale_order_button = new module.CreateSaleOrderButtonWidget( + this, {'sale_order_state': 'draft'}); + this.create_draft_sale_order_button.appendTo(this.pos_widget.$('ul.orderlines')); + } + if (this.pos.config.iface_create_confirmed_sale_order){ + this.create_confirmed_sale_order_button = new module.CreateSaleOrderButtonWidget( + this, {'sale_order_state': 'confirmed'}); + this.create_confirmed_sale_order_button.appendTo(this.pos_widget.$('ul.orderlines')); + } + if (this.pos.config.iface_create_delivered_sale_order){ + this.create_delivered_sale_order_button = new module.CreateSaleOrderButtonWidget( + this, {'sale_order_state': 'delivered'}); + this.create_delivered_sale_order_button.appendTo(this.pos_widget.$('ul.orderlines')); + } + }, + }); + + + /************************************************************************* + Extend OrderWidget: + Overload renderElement, to display buttons when the order change. + */ + module.OrderWidget = module.OrderWidget.extend({ + renderElement: function(scrollbottom){ + this._super(scrollbottom); + if (this.pos_widget.create_draft_sale_order_button) { + this.pos_widget.create_draft_sale_order_button.appendTo( + this.pos_widget.$('ul.orderlines') + ); + } + if (this.pos_widget.create_confirmed_sale_order_button) { + this.pos_widget.create_confirmed_sale_order_button.appendTo( + this.pos_widget.$('ul.orderlines') + ); + } + if (this.pos_widget.create_delivered_sale_order_button) { + this.pos_widget.create_delivered_sale_order_button.appendTo( + this.pos_widget.$('ul.orderlines') + ); + } + + } + }); + +}; diff --git a/pos_order_to_sale_order/static/src/xml/pos_order_to_sale_order.xml b/pos_order_to_sale_order/static/src/xml/pos_order_to_sale_order.xml new file mode 100644 index 0000000000..8e838f0ea4 --- /dev/null +++ b/pos_order_to_sale_order/static/src/xml/pos_order_to_sale_order.xml @@ -0,0 +1,13 @@ + + diff --git a/pos_order_to_sale_order/views/pos_order_to_sale_order.xml b/pos_order_to_sale_order/views/pos_order_to_sale_order.xml new file mode 100644 index 0000000000..12d5a6209c --- /dev/null +++ b/pos_order_to_sale_order/views/pos_order_to_sale_order.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/pos_order_to_sale_order/views/view_pos_config.xml b/pos_order_to_sale_order/views/view_pos_config.xml new file mode 100644 index 0000000000..b02253e28c --- /dev/null +++ b/pos_order_to_sale_order/views/view_pos_config.xml @@ -0,0 +1,16 @@ + + + + + pos.config + + + + + + + + + + + From 502aa88b3fde07c010e58f962e20781365e61724 Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Fri, 23 Mar 2018 16:52:34 +0100 Subject: [PATCH 02/71] [FIX] taxes was dropped in the sale order lines. [IMP] Remove limitation of this module (price unit loss, and pricelist) if pos_pricelist is installed --- pos_order_to_sale_order/README.rst | 6 +-- pos_order_to_sale_order/i18n/fr.po | 46 +++++++++++-------- pos_order_to_sale_order/models/sale_order.py | 22 +++++++-- .../static/src/js/pos_order_to_sale_order.js | 10 ++-- 4 files changed, 54 insertions(+), 30 deletions(-) diff --git a/pos_order_to_sale_order/README.rst b/pos_order_to_sale_order/README.rst index ad32513413..a8c8e8c154 100644 --- a/pos_order_to_sale_order/README.rst +++ b/pos_order_to_sale_order/README.rst @@ -87,10 +87,10 @@ Known issues / Roadmap are not available by default, like pricelist, fiscal position, etc ... For that reason, unit price will be recomputed by default, when creating the sale order, and the unit price of the current bill will not be used. - We could imagine to create an option 'Use Pos Order Unit Price' in a setting. -For more information about that point, you could check pos_pricelist OCA -module. (same repository). +Note that this problem is fixed if ``pos_pricelist`` is installed. +(same repository) In that cases, the pricelist, the unit prices and the taxes +will be the same in the order, as in the displayed bill. .. figure:: static/description/pos_create_picking_confirm.png :width: 800 px diff --git a/pos_order_to_sale_order/i18n/fr.po b/pos_order_to_sale_order/i18n/fr.po index 1f2e93cc9d..90b13743cb 100644 --- a/pos_order_to_sale_order/i18n/fr.po +++ b/pos_order_to_sale_order/i18n/fr.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 8.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-01-06 10:02+0000\n" -"PO-Revision-Date: 2018-01-06 10:02+0000\n" +"POT-Creation-Date: 2018-03-23 15:48+0000\n" +"PO-Revision-Date: 2018-03-23 15:48+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -17,7 +17,16 @@ msgstr "" #. module: pos_order_to_sale_order #. openerp-web -#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:112 +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:43 +#, python-format +msgid "\n" +"Note if you have manually changed unit prices for some products, this changes will not been taken into account in the sale order." +msgstr "\n" +"Remarque : si vous aviez changé le prix unitaire de certains produits, ces changements ne seront pas pris en compte dans la vente." + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:114 #, python-format msgid "Check your internet connection and try again." msgstr "Veuillez vérifier votre connexion internet et essayer de nouveau." @@ -62,14 +71,14 @@ msgstr "Créer des ventes livrées" #. module: pos_order_to_sale_order #. openerp-web -#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:28 +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:27 #, python-format msgid "Create Draft Order" msgstr "Créer un devis en brouillon" #. module: pos_order_to_sale_order #. openerp-web -#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:29 +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:28 #, python-format msgid "Create Draft Sale Order and discard the current PoS Order?" msgstr "Créer une vente en brouillon, et supprimer le ticket de caisse en cours ?" @@ -81,7 +90,7 @@ msgstr "Créer des ventes en brouillon" #. module: pos_order_to_sale_order #. openerp-web -#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:52 +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:55 #, python-format msgid "Empty Order" msgstr "Commande vide" @@ -105,7 +114,7 @@ msgstr "En cochant la case, le caissier aura la possibilité de créer une vente #. module: pos_order_to_sale_order #. openerp-web -#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:60 +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:63 #, python-format msgid "No customer defined" msgstr "Pas de client défini" @@ -123,14 +132,14 @@ msgstr "Commande de ventes" #. module: pos_order_to_sale_order #. openerp-web -#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:111 +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:113 #, python-format msgid "The order could not be sent" msgstr "La commande n'a pas pu être envoyée" #. module: pos_order_to_sale_order #. openerp-web -#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:53 +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:56 #, python-format msgid "There must be at least one product in your order to create Sale Order." msgstr "Il doit y avoir au moins un produit dans votre commande pour créer une vente" @@ -139,29 +148,26 @@ msgstr "Il doit y avoir au moins un produit dans votre commande pour créer une #. openerp-web #: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:35 #, python-format -msgid "This operation will permanently discard the current PoS Order and create a confirmed Sale Order, based on the current order lines. Note if you have manually changed unit prices for some products, this changes will not been taken into account in the sale order, and should be done manually on the invoice again." -msgstr "Cette opération va supprimer définitivement le ticket de caisse en cours, et créer une vente confirmée, en se basant sur les lignes du ticket en cours. Remarque : si vous aviez changé le prix unitaire de certains produits, ces changements ne seront pas pris en compte dans la vente, et devront être refait manuellement sur la facture." +msgid "This operation will permanently discard the current PoS Order and create a confirmed Sale Order, based on the current order lines." +msgstr "Cette opération va supprimer définitivement le ticket de caisse en cours, et créer une vente confirmée, en se basant sur les lignes du ticket en cours." #. module: pos_order_to_sale_order #. openerp-web #: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:40 #, python-format -msgid "This operation will permanently discard the current PoS Order and create a confirmed Sale Order, based on the current order lines. The according picking will be marked as delivered.\n" -" Note if you have manually changed unit prices for some products, this changes will not been taken into account in the sale order, and should be done manually on the invoice again." -msgstr "Cette opération va supprimer définitivement le ticket de caisse en cours, et créer une vente confirmée, en se basant sur les lignes du ticket en cours. Le bone de livraison correspondant sera marqué comme livré. \n" -"Remarque : si vous aviez changé le prix unitaire de certains produits, ces changements ne seront pas pris en compte dans la vente, et devront être refait manuellement sur la facture." +msgid "This operation will permanently discard the current PoS Order and create a confirmed Sale Order, based on the current order lines. The according picking will be marked as delivered." +msgstr "Cette opération va supprimer définitivement le ticket de caisse en cours, et créer une vente confirmée, en se basant sur les lignes du ticket en cours. Le bone de livraison correspondant sera marqué comme livré." #. module: pos_order_to_sale_order #. openerp-web -#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:30 +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:29 #, python-format -msgid "This operation will permanently discard the current PoS Order and create a draft Sale Order, based on the current order lines. Note if you have manually changed unit prices for some products, this changes will not been taken into account in the sale order." -msgstr "Cette opération va supprimer définitivement le ticket de caisse en cours, et créer une vente en brouillon, en se basant sur les lignes du ticket en cours. Remarque : si vous aviez changé le prix unitaire de certains produits, ces changements ne seront pas pris en compte dans la vente." - +msgid "This operation will permanently discard the current PoS Order and create a draft Sale Order, based on the current order lines." +msgstr "Cette opération va supprimer définitivement le ticket de caisse en cours, et créer une vente en brouillon, en se basant sur les lignes du ticket en cours." #. module: pos_order_to_sale_order #. openerp-web -#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:61 +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:64 #, python-format msgid "You should select a customer in order to create a Sale Order. Please select one by clicking the order tab." msgstr "Vous devez sélectionner un client, afin de créer une vente. Veuillez en sélectionner un en cliquant sur l'onglet de la commande." diff --git a/pos_order_to_sale_order/models/sale_order.py b/pos_order_to_sale_order/models/sale_order.py index 9939794918..b76ae7ba1c 100644 --- a/pos_order_to_sale_order/models/sale_order.py +++ b/pos_order_to_sale_order/models/sale_order.py @@ -21,6 +21,10 @@ def _prepare_order_field_from_pos(self, order_data): 'user_id': order_data['user_id'] or False, 'order_line': [], }) + if self.env.context.get('is_pos_pricelist'): + res.update({ + 'pricelist_id': order_data['pricelist_id'], + }) for line_data in order_data['lines']: res['order_line'].append([ 0, False, self._prepare_order_line_field_from_pos( @@ -28,23 +32,33 @@ def _prepare_order_field_from_pos(self, order_data): return res @api.model - def _prepare_order_line_field_from_pos(self, line_data, order_data): + def _prepare_order_line_field_from_pos(self, line_data, sale_order_data): line_obj = self.env['sale.order.line'] res = line_obj.product_id_change( - order_data['pricelist_id'], line_data['product_id'], - qty=line_data['qty'], partner_id=order_data['partner_id'])['value'] + sale_order_data['pricelist_id'], line_data['product_id'], + qty=line_data['qty'], + partner_id=sale_order_data['partner_id'])['value'] res.update({ 'product_id': line_data['product_id'], 'product_uom_qty': line_data['qty'], 'discount': line_data['discount'], + 'tax_id': [(6, False, res['tax_id'])], }) + if self.env.context.get('is_pos_pricelist'): + res.update({ + 'price_unit': line_data['price_unit'], + 'tax_id': line_data['tax_ids'], + }) return res @api.model def create_order_from_pos(self, order_data): + is_pos_pricelist = len(self.env['ir.module.module'].search( + [('name', '=', 'pos_pricelist'), ('state', '=', 'installed')])) # Create Draft Sale order sale_order = self.create( - self._prepare_order_field_from_pos(order_data)) + self.with_context(is_pos_pricelist=is_pos_pricelist). + _prepare_order_field_from_pos(order_data)) # Confirm Sale Order if order_data['sale_order_state'] in ['confirmed', 'delivered']: diff --git a/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js b/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js index e472f3679c..b0ca7b8300 100644 --- a/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js +++ b/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js @@ -26,17 +26,21 @@ openerp.pos_order_to_sale_order = function(instance, local) { if (this.sale_order_state == 'draft') { this.display_text = _t("Create Draft Order"); this.confirmation_message = _t('Create Draft Sale Order and discard the current PoS Order?'); - this.confirmation_comment = _t("This operation will permanently discard the current PoS Order and create a draft Sale Order, based on the current order lines. Note if you have manually changed unit prices for some products, this changes will not been taken into account in the sale order."); + this.confirmation_comment = _t("This operation will permanently discard the current PoS Order and create a draft Sale Order, based on the current order lines."); + console.log(this); } else if (options.sale_order_state == 'confirmed') { this.display_text = _t("Create Confirmed Order"); this.confirmation_message = _t('Create Confirmed Sale Order and discard the current PoS Order?'); - this.confirmation_comment = _t("This operation will permanently discard the current PoS Order and create a confirmed Sale Order, based on the current order lines. Note if you have manually changed unit prices for some products, this changes will not been taken into account in the sale order, and should be done manually on the invoice again."); + this.confirmation_comment = _t("This operation will permanently discard the current PoS Order and create a confirmed Sale Order, based on the current order lines."); } else if (options.sale_order_state == 'delivered') { this.display_text = _t("Create Delivered Order"); this.confirmation_message = _t('Create Delivered Sale Order and discard the current PoS Order?'); - this.confirmation_comment = _t("This operation will permanently discard the current PoS Order and create a confirmed Sale Order, based on the current order lines. The according picking will be marked as delivered.\n Note if you have manually changed unit prices for some products, this changes will not been taken into account in the sale order, and should be done manually on the invoice again."); + this.confirmation_comment = _t("This operation will permanently discard the current PoS Order and create a confirmed Sale Order, based on the current order lines. The according picking will be marked as delivered."); + } + if (! this.pos.pricelist_engine){ + this.confirmation_comment += _t("\nNote if you have manually changed unit prices for some products, this changes will not been taken into account in the sale order.") } }, From b0509743a3d487d50fd71941e561837ad34ebcf9 Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Fri, 23 Mar 2018 17:01:53 +0100 Subject: [PATCH 03/71] [BUMP] version --- pos_order_to_sale_order/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pos_order_to_sale_order/__openerp__.py b/pos_order_to_sale_order/__openerp__.py index 37c2e153f1..e93e6710e9 100644 --- a/pos_order_to_sale_order/__openerp__.py +++ b/pos_order_to_sale_order/__openerp__.py @@ -5,7 +5,7 @@ { 'name': 'PoS Order To Sale Order', - 'version': '8.0.1.0.0', + 'version': '8.0.2.0.0', 'author': 'GRAP,Odoo Community Association (OCA)', 'category': 'Point Of Sale', 'license': 'AGPL-3', From 90f611bc43385aea493798521855cc75f4dd8dcd Mon Sep 17 00:00:00 2001 From: Quentin Dupont Date: Fri, 30 Mar 2018 12:18:46 +0200 Subject: [PATCH 04/71] =?UTF-8?q?Coquille=20+=20ajout=20(BL)=20pour=20bout?= =?UTF-8?q?ons=20"vente=20livr=C3=A9e"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pos_order_to_sale_order/i18n/fr.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pos_order_to_sale_order/i18n/fr.po b/pos_order_to_sale_order/i18n/fr.po index 90b13743cb..51f41ef5e4 100644 --- a/pos_order_to_sale_order/i18n/fr.po +++ b/pos_order_to_sale_order/i18n/fr.po @@ -55,19 +55,19 @@ msgstr "Créer des ventes confirmées" #: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:38 #, python-format msgid "Create Delivered Order" -msgstr "Créer une vente livrée" +msgstr "Créer une vente livrée (BL)" #. module: pos_order_to_sale_order #. openerp-web #: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:39 #, python-format msgid "Create Delivered Sale Order and discard the current PoS Order?" -msgstr "Créer une vente livrée, et supprimer le ticket de caisse en cours ?" +msgstr "Créer une vente livrée (BL), et supprimer le ticket de caisse en cours ?" #. module: pos_order_to_sale_order #: field:pos.config,iface_create_delivered_sale_order:0 msgid "Create Delivered Sale Orders" -msgstr "Créer des ventes livrées" +msgstr "Créer des ventes livrées (BL)" #. module: pos_order_to_sale_order #. openerp-web @@ -156,7 +156,7 @@ msgstr "Cette opération va supprimer définitivement le ticket de caisse en cou #: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:40 #, python-format msgid "This operation will permanently discard the current PoS Order and create a confirmed Sale Order, based on the current order lines. The according picking will be marked as delivered." -msgstr "Cette opération va supprimer définitivement le ticket de caisse en cours, et créer une vente confirmée, en se basant sur les lignes du ticket en cours. Le bone de livraison correspondant sera marqué comme livré." +msgstr "Cette opération va supprimer définitivement le ticket de caisse en cours, et créer une vente confirmée, en se basant sur les lignes du ticket en cours. Le bon de livraison correspondant sera marqué comme livré." #. module: pos_order_to_sale_order #. openerp-web From 86997d73e9189a7ed38428a805939126680cd95e Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Sat, 28 Apr 2018 13:29:52 +0200 Subject: [PATCH 05/71] [FIX] por_order_to_sale_order: PEP8 --- pos_order_to_sale_order/models/sale_order.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pos_order_to_sale_order/models/sale_order.py b/pos_order_to_sale_order/models/sale_order.py index b76ae7ba1c..4744c21526 100644 --- a/pos_order_to_sale_order/models/sale_order.py +++ b/pos_order_to_sale_order/models/sale_order.py @@ -39,15 +39,15 @@ def _prepare_order_line_field_from_pos(self, line_data, sale_order_data): qty=line_data['qty'], partner_id=sale_order_data['partner_id'])['value'] res.update({ - 'product_id': line_data['product_id'], - 'product_uom_qty': line_data['qty'], - 'discount': line_data['discount'], - 'tax_id': [(6, False, res['tax_id'])], + 'product_id': line_data['product_id'], + 'product_uom_qty': line_data['qty'], + 'discount': line_data['discount'], + 'tax_id': [(6, False, res['tax_id'])], }) if self.env.context.get('is_pos_pricelist'): res.update({ - 'price_unit': line_data['price_unit'], - 'tax_id': line_data['tax_ids'], + 'price_unit': line_data['price_unit'], + 'tax_id': line_data['tax_ids'], }) return res From ae3c9c9d3d24133bce9307e1b25c4585f2441123 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Fri, 22 Jun 2018 08:05:42 +0000 Subject: [PATCH 06/71] [UPD] Update pos_order_to_sale_order.pot --- pos_order_to_sale_order/i18n/fr.po | 89 ++++++--- .../i18n/pos_order_to_sale_order.pot | 170 ++++++++++++++++++ 2 files changed, 234 insertions(+), 25 deletions(-) create mode 100644 pos_order_to_sale_order/i18n/pos_order_to_sale_order.pot diff --git a/pos_order_to_sale_order/i18n/fr.po b/pos_order_to_sale_order/i18n/fr.po index 51f41ef5e4..0f2b1d4fd6 100644 --- a/pos_order_to_sale_order/i18n/fr.po +++ b/pos_order_to_sale_order/i18n/fr.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * pos_order_to_sale_order +# * pos_order_to_sale_order # msgid "" msgstr "" @@ -10,6 +10,7 @@ msgstr "" "PO-Revision-Date: 2018-03-23 15:48+0000\n" "Last-Translator: <>\n" "Language-Team: \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -19,10 +20,14 @@ msgstr "" #. openerp-web #: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:43 #, python-format -msgid "\n" -"Note if you have manually changed unit prices for some products, this changes will not been taken into account in the sale order." -msgstr "\n" -"Remarque : si vous aviez changé le prix unitaire de certains produits, ces changements ne seront pas pris en compte dans la vente." +msgid "" +"\n" +"Note if you have manually changed unit prices for some products, this " +"changes will not been taken into account in the sale order." +msgstr "" +"\n" +"Remarque : si vous aviez changé le prix unitaire de certains produits, ces " +"changements ne seront pas pris en compte dans la vente." #. module: pos_order_to_sale_order #. openerp-web @@ -62,7 +67,8 @@ msgstr "Créer une vente livrée (BL)" #: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:39 #, python-format msgid "Create Delivered Sale Order and discard the current PoS Order?" -msgstr "Créer une vente livrée (BL), et supprimer le ticket de caisse en cours ?" +msgstr "" +"Créer une vente livrée (BL), et supprimer le ticket de caisse en cours ?" #. module: pos_order_to_sale_order #: field:pos.config,iface_create_delivered_sale_order:0 @@ -81,7 +87,8 @@ msgstr "Créer un devis en brouillon" #: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:28 #, python-format msgid "Create Draft Sale Order and discard the current PoS Order?" -msgstr "Créer une vente en brouillon, et supprimer le ticket de caisse en cours ?" +msgstr "" +"Créer une vente en brouillon, et supprimer le ticket de caisse en cours ?" #. module: pos_order_to_sale_order #: field:pos.config,iface_create_draft_sale_order:0 @@ -97,20 +104,34 @@ msgstr "Commande vide" #. module: pos_order_to_sale_order #: help:pos.config,iface_create_confirmed_sale_order:0 -msgid "If checked, the cashier will have the possibility to create a confirmed Sale Order, based on the current draft PoS Order." -msgstr "En cochant la case, le caissier aura la possibilité de créer une vente confirmée, à partir du ticket de caisse en cours." +msgid "" +"If checked, the cashier will have the possibility to create a confirmed Sale " +"Order, based on the current draft PoS Order." +msgstr "" +"En cochant la case, le caissier aura la possibilité de créer une vente " +"confirmée, à partir du ticket de caisse en cours." #. module: pos_order_to_sale_order #: help:pos.config,iface_create_delivered_sale_order:0 -msgid "If checked, the cashier will have the possibility to create a confirmed sale Order, based on the current draft PoS Order.\n" -" the according picking will be marked as delivered. Only invoices process will be possible." -msgstr "En cochant la case, le caissier aura la possibilité de créer une vente confirmée, à partir du ticket de caisse en cours.\n" -" Le bon de livraison correspondant sera marqué comme livré. Seul le processus de facturation sera possible." +msgid "" +"If checked, the cashier will have the possibility to create a confirmed sale " +"Order, based on the current draft PoS Order.\n" +" the according picking will be marked as delivered. Only invoices process " +"will be possible." +msgstr "" +"En cochant la case, le caissier aura la possibilité de créer une vente " +"confirmée, à partir du ticket de caisse en cours.\n" +" Le bon de livraison correspondant sera marqué comme livré. Seul le " +"processus de facturation sera possible." #. module: pos_order_to_sale_order #: help:pos.config,iface_create_draft_sale_order:0 -msgid "If checked, the cashier will have the possibility to create a draft Sale Order, based on the current draft PoS Order." -msgstr "En cochant la case, le caissier aura la possibilité de créer une vente en brouillon, à partir du ticket de caisse en cours." +msgid "" +"If checked, the cashier will have the possibility to create a draft Sale " +"Order, based on the current draft PoS Order." +msgstr "" +"En cochant la case, le caissier aura la possibilité de créer une vente en " +"brouillon, à partir du ticket de caisse en cours." #. module: pos_order_to_sale_order #. openerp-web @@ -142,33 +163,51 @@ msgstr "La commande n'a pas pu être envoyée" #: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:56 #, python-format msgid "There must be at least one product in your order to create Sale Order." -msgstr "Il doit y avoir au moins un produit dans votre commande pour créer une vente" +msgstr "" +"Il doit y avoir au moins un produit dans votre commande pour créer une vente" #. module: pos_order_to_sale_order #. openerp-web #: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:35 #, python-format -msgid "This operation will permanently discard the current PoS Order and create a confirmed Sale Order, based on the current order lines." -msgstr "Cette opération va supprimer définitivement le ticket de caisse en cours, et créer une vente confirmée, en se basant sur les lignes du ticket en cours." +msgid "" +"This operation will permanently discard the current PoS Order and create a " +"confirmed Sale Order, based on the current order lines." +msgstr "" +"Cette opération va supprimer définitivement le ticket de caisse en cours, et " +"créer une vente confirmée, en se basant sur les lignes du ticket en cours." #. module: pos_order_to_sale_order #. openerp-web #: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:40 #, python-format -msgid "This operation will permanently discard the current PoS Order and create a confirmed Sale Order, based on the current order lines. The according picking will be marked as delivered." -msgstr "Cette opération va supprimer définitivement le ticket de caisse en cours, et créer une vente confirmée, en se basant sur les lignes du ticket en cours. Le bon de livraison correspondant sera marqué comme livré." +msgid "" +"This operation will permanently discard the current PoS Order and create a " +"confirmed Sale Order, based on the current order lines. The according " +"picking will be marked as delivered." +msgstr "" +"Cette opération va supprimer définitivement le ticket de caisse en cours, et " +"créer une vente confirmée, en se basant sur les lignes du ticket en cours. " +"Le bon de livraison correspondant sera marqué comme livré." #. module: pos_order_to_sale_order #. openerp-web #: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:29 #, python-format -msgid "This operation will permanently discard the current PoS Order and create a draft Sale Order, based on the current order lines." -msgstr "Cette opération va supprimer définitivement le ticket de caisse en cours, et créer une vente en brouillon, en se basant sur les lignes du ticket en cours." +msgid "" +"This operation will permanently discard the current PoS Order and create a " +"draft Sale Order, based on the current order lines." +msgstr "" +"Cette opération va supprimer définitivement le ticket de caisse en cours, et " +"créer une vente en brouillon, en se basant sur les lignes du ticket en cours." #. module: pos_order_to_sale_order #. openerp-web #: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:64 #, python-format -msgid "You should select a customer in order to create a Sale Order. Please select one by clicking the order tab." -msgstr "Vous devez sélectionner un client, afin de créer une vente. Veuillez en sélectionner un en cliquant sur l'onglet de la commande." - +msgid "" +"You should select a customer in order to create a Sale Order. Please select " +"one by clicking the order tab." +msgstr "" +"Vous devez sélectionner un client, afin de créer une vente. Veuillez en " +"sélectionner un en cliquant sur l'onglet de la commande." diff --git a/pos_order_to_sale_order/i18n/pos_order_to_sale_order.pot b/pos_order_to_sale_order/i18n/pos_order_to_sale_order.pot new file mode 100644 index 0000000000..b33cb07e20 --- /dev/null +++ b/pos_order_to_sale_order/i18n/pos_order_to_sale_order.pot @@ -0,0 +1,170 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * pos_order_to_sale_order +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.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_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:43 +#, python-format +msgid "\n" +"Note if you have manually changed unit prices for some products, this changes will not been taken into account in the sale order." +msgstr "" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:114 +#, python-format +msgid "Check your internet connection and try again." +msgstr "" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:33 +#, python-format +msgid "Create Confirmed Order" +msgstr "" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:34 +#, python-format +msgid "Create Confirmed Sale Order and discard the current PoS Order?" +msgstr "" + +#. module: pos_order_to_sale_order +#: field:pos.config,iface_create_confirmed_sale_order:0 +msgid "Create Confirmed Sale Orders" +msgstr "" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:38 +#, python-format +msgid "Create Delivered Order" +msgstr "" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:39 +#, python-format +msgid "Create Delivered Sale Order and discard the current PoS Order?" +msgstr "" + +#. module: pos_order_to_sale_order +#: field:pos.config,iface_create_delivered_sale_order:0 +msgid "Create Delivered Sale Orders" +msgstr "" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:27 +#, python-format +msgid "Create Draft Order" +msgstr "" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:28 +#, python-format +msgid "Create Draft Sale Order and discard the current PoS Order?" +msgstr "" + +#. module: pos_order_to_sale_order +#: field:pos.config,iface_create_draft_sale_order:0 +msgid "Create Draft Sale Orders" +msgstr "" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:55 +#, python-format +msgid "Empty Order" +msgstr "" + +#. module: pos_order_to_sale_order +#: help:pos.config,iface_create_confirmed_sale_order:0 +msgid "If checked, the cashier will have the possibility to create a confirmed Sale Order, based on the current draft PoS Order." +msgstr "" + +#. module: pos_order_to_sale_order +#: help:pos.config,iface_create_delivered_sale_order:0 +msgid "If checked, the cashier will have the possibility to create a confirmed sale Order, based on the current draft PoS Order.\n" +" the according picking will be marked as delivered. Only invoices process will be possible." +msgstr "" + +#. module: pos_order_to_sale_order +#: help:pos.config,iface_create_draft_sale_order:0 +msgid "If checked, the cashier will have the possibility to create a draft Sale Order, based on the current draft PoS Order." +msgstr "" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:63 +#, python-format +msgid "No customer defined" +msgstr "" + +#. module: pos_order_to_sale_order +#: code:addons/pos_order_to_sale_order/models/sale_order.py:19 +#, python-format +msgid "Point of Sale %s" +msgstr "" + +#. module: pos_order_to_sale_order +#: model:ir.model,name:pos_order_to_sale_order.model_sale_order +msgid "Sales Order" +msgstr "" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:113 +#, python-format +msgid "The order could not be sent" +msgstr "" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:56 +#, python-format +msgid "There must be at least one product in your order to create Sale Order." +msgstr "" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:35 +#, python-format +msgid "This operation will permanently discard the current PoS Order and create a confirmed Sale Order, based on the current order lines." +msgstr "" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:40 +#, python-format +msgid "This operation will permanently discard the current PoS Order and create a confirmed Sale Order, based on the current order lines. The according picking will be marked as delivered." +msgstr "" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:29 +#, python-format +msgid "This operation will permanently discard the current PoS Order and create a draft Sale Order, based on the current order lines." +msgstr "" + +#. module: pos_order_to_sale_order +#. openerp-web +#: code:addons/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js:64 +#, python-format +msgid "You should select a customer in order to create a Sale Order. Please select one by clicking the order tab." +msgstr "" + From 9c824c4dc35e713a45a0c3405e581be327df4602 Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Tue, 11 Dec 2018 13:32:24 +0100 Subject: [PATCH 07/71] [FIX] do not allow to create sale order several times; [FIX] Remove console.log ; [IMP] Do not import js files in backend [IMP] apply new readme structure [FIX] remove useless demo file [FIX] some pylint issues [REF] add maintainers and developpment status --- pos_order_to_sale_order/README.rst | 146 ++----------- pos_order_to_sale_order/__openerp__.py | 4 +- .../demo/product_template.xml | 19 -- pos_order_to_sale_order/demo/sale_order.xml | 51 ----- .../demo/stock_picking_type.xml | 7 - pos_order_to_sale_order/readme/CONFIGURE.rst | 8 + .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 52 +++++ pos_order_to_sale_order/readme/ROADMAP.rst | 11 + .../src/css/pos_order_to_sale_order.css | 12 ++ .../static/src/js/pos_order_to_sale_order.js | 200 +++++++++++------- .../views/pos_order_to_sale_order.xml | 5 +- 12 files changed, 232 insertions(+), 284 deletions(-) delete mode 100644 pos_order_to_sale_order/demo/product_template.xml delete mode 100644 pos_order_to_sale_order/demo/sale_order.xml delete mode 100644 pos_order_to_sale_order/demo/stock_picking_type.xml create mode 100644 pos_order_to_sale_order/readme/CONFIGURE.rst create mode 100644 pos_order_to_sale_order/readme/CONTRIBUTORS.rst create mode 100644 pos_order_to_sale_order/readme/DESCRIPTION.rst create mode 100644 pos_order_to_sale_order/readme/ROADMAP.rst create mode 100644 pos_order_to_sale_order/static/src/css/pos_order_to_sale_order.css diff --git a/pos_order_to_sale_order/README.rst b/pos_order_to_sale_order/README.rst index a8c8e8c154..21cd7854d5 100644 --- a/pos_order_to_sale_order/README.rst +++ b/pos_order_to_sale_order/README.rst @@ -1,135 +1,21 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html - :alt: License: AGPL-3 +**This file is going to be generated by oca-gen-addon-readme.** +*Manual changes will be overwritten.* -======================= -POS Order To Sale Order -======================= +Please provide content in the ``readme`` directory: +* **DESCRIPTION.rst** (required) +* INSTALL.rst (optional) +* CONFIGURE.rst (optional) +* **USAGE.rst** (optional, highly recommended) +* DEVELOP.rst (optional) +* ROADMAP.rst (optional) +* HISTORY.rst (optional, recommended) +* **CONTRIBUTORS.rst** (optional, highly recommended) +* CREDITS.rst (optional) -This module extends the functionality of point of sale to allow sale orders -creation from the Point of Sale. +Content of this README will also be drawn from the addon manifest, +from keys such as name, authors, maintainers, development_status, +and license. - -In the POS UI, buttons has been added to create a sale order and discard -the current POS order. - -This module is usefull in many cases, for exemple : - -* take orders with a very simple interface - -* if you have some customers that come every day in your shop, but want to - have a unique invoice at the end of the month. With that module, you can - create a sale order and deliver products every time to keep your stock value - correct, and to create a unique invoice, when you want. - - -Three options are available: - -#. '**Create a draft Order**' - A new sale order in a draft mode will be created that can be changed later. - -.. figure:: static/description/pos_create_picking_option_1.png - :width: 800 px - -#. '**Create a Confirmed Order**' - A new sale order will be created and confirmed. - -.. figure:: static/description/pos_create_picking_option_2.png - :width: 800 px - -#. '**Create Delivered Picking**' (by default) - A new sale order will be created and confirmed. the associated picking - will be marked as delivered. - -.. figure:: static/description/pos_create_picking_option_3.png - :width: 800 px - -Configuration -============= - -To configure this module, you need to: - -#. Go to Point Of Sale / Configuration / Point of Sale -#. Check the box 'Create Sale Orders' -#. Select the desired default behaviour - -.. figure:: static/description/pos_config_form.png - :width: 800 px - -Usage -===== - -.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/184/8.0 - -Technical Notes -=============== - -* Some hooks are defined in the JS file, to define custom behaviour after - having created the sale order (and the stock picking). - -* Some prepare functions are available in the sale.order model, to overload - the creation of the sale order. - -* You could be interested by another module, pos_sale_order, that completely - alter Point of Sale module, avoiding creating Pos Orders, and creating - allways Sale Orders. - This module is a WIP state, and is available here: - https://github.com/OCA/pos/pull/35 - -Known issues / Roadmap -====================== - -* Because of the poor design of the Odoo Point of Sale, some basic features - are not available by default, like pricelist, fiscal position, etc ... - For that reason, unit price will be recomputed by default, when creating the - sale order, and the unit price of the current bill will not be used. - -Note that this problem is fixed if ``pos_pricelist`` is installed. -(same repository) In that cases, the pricelist, the unit prices and the taxes -will be the same in the order, as in the displayed bill. - -.. figure:: static/description/pos_create_picking_confirm.png - :width: 800 px - - -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 smash it by providing detailed and welcomed feedback. - -Credits -======= - -Contributors ------------- - -* Sylvain Le Gal (https://twitter.com/legalsylvain) - -Funders -------- - -The development of this module has been financially supported by: - -* GRAP, Groupement Régional Alimentaire de Proximité (http://www.grap.coop) - -Maintainer ----------- - -.. image:: https://odoo-community.org/logo.png - :alt: Odoo Community Association - :target: https://odoo-community.org - -This module is maintained by the OCA. - -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. - -To contribute to this module, please visit https://odoo-community.org. +A good, one sentence summary in the manifest is also highly recommended. diff --git a/pos_order_to_sale_order/__openerp__.py b/pos_order_to_sale_order/__openerp__.py index e93e6710e9..1fbeb326fc 100644 --- a/pos_order_to_sale_order/__openerp__.py +++ b/pos_order_to_sale_order/__openerp__.py @@ -5,13 +5,15 @@ { 'name': 'PoS Order To Sale Order', - 'version': '8.0.2.0.0', + 'version': '8.0.3.0.0', 'author': 'GRAP,Odoo Community Association (OCA)', 'category': 'Point Of Sale', 'license': 'AGPL-3', 'depends': [ 'point_of_sale', ], + 'maintainers': ['legalsylvain'], + 'development_status': "Production/Stable", 'website': 'https://odoo-community.org/', 'data': [ 'views/view_pos_config.xml', diff --git a/pos_order_to_sale_order/demo/product_template.xml b/pos_order_to_sale_order/demo/product_template.xml deleted file mode 100644 index 38e35a4c08..0000000000 --- a/pos_order_to_sale_order/demo/product_template.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/pos_order_to_sale_order/demo/sale_order.xml b/pos_order_to_sale_order/demo/sale_order.xml deleted file mode 100644 index d2059c6438..0000000000 --- a/pos_order_to_sale_order/demo/sale_order.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - picking - - - - - - 5 - - - - - - 3 - - - - - - - - picking - - - - - - 15 - 10 - - - - - - 1 - - - - - - 3 - 555 - - - - - diff --git a/pos_order_to_sale_order/demo/stock_picking_type.xml b/pos_order_to_sale_order/demo/stock_picking_type.xml deleted file mode 100644 index e4c35380f4..0000000000 --- a/pos_order_to_sale_order/demo/stock_picking_type.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/pos_order_to_sale_order/readme/CONFIGURE.rst b/pos_order_to_sale_order/readme/CONFIGURE.rst new file mode 100644 index 0000000000..f77b481517 --- /dev/null +++ b/pos_order_to_sale_order/readme/CONFIGURE.rst @@ -0,0 +1,8 @@ +To configure this module, you need to: + +* Go to Point Of Sale / Configuration / Point of Sale +* Check the box 'Create Sale Orders' +* Select the desired default behaviour + +.. figure:: ../static/description/pos_config_form.png + :width: 800 px diff --git a/pos_order_to_sale_order/readme/CONTRIBUTORS.rst b/pos_order_to_sale_order/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..e1525ce042 --- /dev/null +++ b/pos_order_to_sale_order/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Sylvain LE GAL (https://www.twitter.com/legalsylvain) diff --git a/pos_order_to_sale_order/readme/DESCRIPTION.rst b/pos_order_to_sale_order/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..993e779e2a --- /dev/null +++ b/pos_order_to_sale_order/readme/DESCRIPTION.rst @@ -0,0 +1,52 @@ +This module extends the functionality of point of sale to allow sale orders +creation from the Point of Sale. + + +In the POS UI, buttons has been added to create a sale order and discard +the current POS order. + +This module is usefull in many cases, for exemple : + +* take orders with a very simple interface + +* if you have some customers that come every day in your shop, but want to + have a unique invoice at the end of the month. With that module, you can + create a sale order and deliver products every time to keep your stock value + correct, and to create a unique invoice, when you want. + + +Three options are available: + +* **Create a draft Order** + A new sale order in a draft mode will be created that can be changed later. + +.. figure:: ../static/description/pos_create_picking_option_1.png + :width: 800 px + +* **Create a Confirmed Order** + A new sale order will be created and confirmed. + +.. figure:: ../static/description/pos_create_picking_option_2.png + :width: 800 px + +* **Create Delivered Picking** (by default) + A new sale order will be created and confirmed. the associated picking + will be marked as delivered. + +.. figure:: ../static/description/pos_create_picking_option_3.png + :width: 800 px + + +**Technical Notes** + +* Some hooks are defined in the JS file, to define custom behaviour after + having created the sale order (and the stock picking). + +* Some prepare functions are available in the sale.order model, to overload + the creation of the sale order. + +* You could be interested by another module, pos_sale_order, that completely + alter Point of Sale module, avoiding creating Pos Orders, and creating + allways Sale Orders. + This module is a WIP state, and is available here: + https://github.com/OCA/pos/pull/35 diff --git a/pos_order_to_sale_order/readme/ROADMAP.rst b/pos_order_to_sale_order/readme/ROADMAP.rst new file mode 100644 index 0000000000..ed6dd416ea --- /dev/null +++ b/pos_order_to_sale_order/readme/ROADMAP.rst @@ -0,0 +1,11 @@ +* Because of the poor design of the Odoo Point of Sale, some basic features + are not available by default, like pricelist, fiscal position, etc ... + For that reason, unit price will be recomputed by default, when creating the + sale order, and the unit price of the current bill will not be used. + +Note that this problem is fixed if ``pos_pricelist`` is installed. +(same repository) In that cases, the pricelist, the unit prices and the taxes +will be the same in the order, as in the displayed bill. + +.. figure:: ../static/description/pos_create_picking_confirm.png + :width: 800 px diff --git a/pos_order_to_sale_order/static/src/css/pos_order_to_sale_order.css b/pos_order_to_sale_order/static/src/css/pos_order_to_sale_order.css new file mode 100644 index 0000000000..11d8de8f71 --- /dev/null +++ b/pos_order_to_sale_order/static/src/css/pos_order_to_sale_order.css @@ -0,0 +1,12 @@ +/* + Copyright (C) 2018 - 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). +*/ + +/*Redefine here, the style defined in web module (base.css), because this file +is not loaded in the point of sale.*/ +.blockUI.blockOverlay { + background-color: black; + opacity: 0.6; +} diff --git a/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js b/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js index b0ca7b8300..62bcdead0a 100644 --- a/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js +++ b/pos_order_to_sale_order/static/src/js/pos_order_to_sale_order.js @@ -1,157 +1,207 @@ -/****************************************************************************** +/* *************************************************************************** Copyright (C) 2017 - 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). - *****************************************************************************/ +**************************************************************************** */ -openerp.pos_order_to_sale_order = function(instance, local) { +openerp.pos_order_to_sale_order = function (instance) { "use strict"; var module = instance.point_of_sale; var _t = instance.web._t; - /************************************************************************* - New Widget CreateSaleOrderButtonWidget: - * On click, check if there is a customer defined, - ask confirmation call server to create sale order, and delete - the current order. - */ + /* ************************************************************************ + New Widget CreateSaleOrderButtonWidget + ************************************************************************ */ module.CreateSaleOrderButtonWidget = module.PosBaseWidget.extend({ template: 'CreateSaleOrderButtonWidget', - init: function(parent, options){ + /** + * Define all the confirmation messages. + */ + init: function (parent, options) { this._super(parent, options); this.sale_order_state = options.sale_order_state; - if (this.sale_order_state == 'draft') { + if (this.sale_order_state === 'draft') { this.display_text = _t("Create Draft Order"); - this.confirmation_message = _t('Create Draft Sale Order and discard the current PoS Order?'); - this.confirmation_comment = _t("This operation will permanently discard the current PoS Order and create a draft Sale Order, based on the current order lines."); - console.log(this); - } - else if (options.sale_order_state == 'confirmed') { + this.confirmation_message = _t( + 'Create Draft Sale Order and discard the current' + + ' PoS Order?'); + this.confirmation_comment = _t( + "This operation will permanently discard the current PoS" + + " Order and create a draft Sale Order, based on the" + + " current order lines."); + } else if (options.sale_order_state === 'confirmed') { this.display_text = _t("Create Confirmed Order"); - this.confirmation_message = _t('Create Confirmed Sale Order and discard the current PoS Order?'); - this.confirmation_comment = _t("This operation will permanently discard the current PoS Order and create a confirmed Sale Order, based on the current order lines."); - } - else if (options.sale_order_state == 'delivered') { + this.confirmation_message = _t( + 'Create Confirmed Sale Order and discard the current' + + ' PoS Order?'); + this.confirmation_comment = _t( + "This operation will permanently discard the current PoS" + + " Order and create a confirmed Sale Order, based on the" + + " current order lines."); + } else if (options.sale_order_state === 'delivered') { this.display_text = _t("Create Delivered Order"); - this.confirmation_message = _t('Create Delivered Sale Order and discard the current PoS Order?'); - this.confirmation_comment = _t("This operation will permanently discard the current PoS Order and create a confirmed Sale Order, based on the current order lines. The according picking will be marked as delivered."); + this.confirmation_message = _t( + 'Create Delivered Sale Order and discard the current' + + ' PoS Order?'); + this.confirmation_comment = _t( + "This operation will permanently discard the current PoS" + + " Order and create a confirmed Sale Order, based on the" + + " current order lines. The according picking will be" + + " marked as delivered."); } - if (! this.pos.pricelist_engine){ - this.confirmation_comment += _t("\nNote if you have manually changed unit prices for some products, this changes will not been taken into account in the sale order.") + if (! this.pos.pricelist_engine) { + this.confirmation_comment += _t( + "\nNote if you have manually changed unit prices for" + + " some products, this changes will not been taken into" + + " account in the sale order.") } }, - renderElement: function() { + /** + * Define onclick function when the button to create sale order is + * clicked. + * - On click, check if there is a customer defined, + * - ask confirmation call server to create sale order, and delete + * the current order. + */ + renderElement: function () { var self = this; this._super(); - this.$el.click(function(){ + this.$el.click(function () { var current_order = self.pos.get('selectedOrder'); // Prevent empty delivery order - if (current_order.get('orderLines').length == 0){ - self.pos_widget.screen_selector.show_popup('error',{ + if (current_order.get('orderLines').length === 0) { + self.pos_widget.screen_selector.show_popup('error', { 'message': _t('Empty Order'), - 'comment': _t('There must be at least one product in your order to create Sale Order.'), + 'comment': _t( + 'There must be at least one product in your' + + ' order to create Sale Order.'), }); return; } // Check Customer - if (!current_order.get('client')){ - self.pos_widget.screen_selector.show_popup('error',{ + if (!current_order.get('client')) { + self.pos_widget.screen_selector.show_popup('error', { 'message': _t('No customer defined'), - 'comment': _t('You should select a customer in order to create a Sale Order. Please select one by clicking the order tab.'), + 'comment': _t( + 'You should select a customer in order to create' + + ' a Sale Order. Please select one by clicking' + + ' the order tab.'), }); return; } self.pos.pos_widget.screen_selector.show_popup('confirm', { message: self.confirmation_message, comment: self.confirmation_comment, - confirm: function(){ - var SaleOrderModel = new instance.web.Model('sale.order'); + confirm: function () { + var SaleOrderModel = + new instance.web.Model('sale.order'); current_order.sale_order_state = self.sale_order_state; - SaleOrderModel.call('create_order_from_pos', [self.prepare_create_sale_order(current_order)] + instance.web.blockUI(); + SaleOrderModel.call('create_order_from_pos', [ + self.prepare_create_sale_order(current_order)] ).then(function (result) { + instance.web.unblockUI(); self.hook_create_sale_order_success(result); - }).fail(function (error, event){ + }).fail(function (error, event) { + instance.web.unblockUI(); self.hook_create_sale_order_error(error, event); }); - }, }); }); }, - // Overload This function to send custom sale order data to server - prepare_create_sale_order: function(order) { + /** + * Overloadable function to send custom sale order data to server + */ + prepare_create_sale_order: function (order) { var res = order.export_as_JSON(); res.sale_order_state = this.sale_order_state; return res; }, - // Overload this function to make custom action after Sale order - // Creation success - hook_create_sale_order_success: function(result) { + /** + * Overloadable function to make custom action after Sale order + * Creation succeeded + */ + hook_create_sale_order_success: function (result) { this.pos.get('selectedOrder').destroy(); }, - // Overload this function to make custom action after Sale order - // Creation fail - hook_create_sale_order_error: function(error, event) { + /** + * Overloadable function to make custom action after Sale order + * Creation failed + */ + hook_create_sale_order_error: function (error, event) { event.preventDefault(); - if(error.code === 200 ){ + if (error.code === 200) { // Business Logic Error, not a connection problem - this.pos_widget.screen_selector.show_popup('error-traceback',{ + this.pos_widget.screen_selector.show_popup('error-traceback', { message: error.data.message, comment: error.data.debug, }); - } - else{ - // connexion problem - this.pos_widget.screen_selector.show_popup('error',{ + } else { + // Connexion problem + this.pos_widget.screen_selector.show_popup('error', { message: _t('The order could not be sent'), - comment: _t('Check your internet connection and try again.'), + comment: _t( + 'Check your internet connection and try again.'), }); } - }, }); - /************************************************************************* + /* ************************************************************************ Extend PosWidget: - * Create new buttons, depending of the configuration - */ + ************************************************************************ */ module.PosWidget = module.PosWidget.extend({ - build_widgets: function() { + + /** + * Overload build_widgets(), to create new buttons, depending of the + * configuration + */ + build_widgets: function () { this._super(); - if (this.pos.config.iface_create_draft_sale_order){ - this.create_draft_sale_order_button = new module.CreateSaleOrderButtonWidget( - this, {'sale_order_state': 'draft'}); - this.create_draft_sale_order_button.appendTo(this.pos_widget.$('ul.orderlines')); + if (this.pos.config.iface_create_draft_sale_order) { + this.create_draft_sale_order_button = + new module.CreateSaleOrderButtonWidget( + this, {'sale_order_state': 'draft'}); + this.create_draft_sale_order_button.appendTo( + this.pos_widget.$('ul.orderlines')); } - if (this.pos.config.iface_create_confirmed_sale_order){ - this.create_confirmed_sale_order_button = new module.CreateSaleOrderButtonWidget( - this, {'sale_order_state': 'confirmed'}); - this.create_confirmed_sale_order_button.appendTo(this.pos_widget.$('ul.orderlines')); + if (this.pos.config.iface_create_confirmed_sale_order) { + this.create_confirmed_sale_order_button = + new module.CreateSaleOrderButtonWidget( + this, {'sale_order_state': 'confirmed'}); + this.create_confirmed_sale_order_button.appendTo( + this.pos_widget.$('ul.orderlines')); } - if (this.pos.config.iface_create_delivered_sale_order){ - this.create_delivered_sale_order_button = new module.CreateSaleOrderButtonWidget( - this, {'sale_order_state': 'delivered'}); - this.create_delivered_sale_order_button.appendTo(this.pos_widget.$('ul.orderlines')); + if (this.pos.config.iface_create_delivered_sale_order) { + this.create_delivered_sale_order_button = + new module.CreateSaleOrderButtonWidget( + this, {'sale_order_state': 'delivered'}); + this.create_delivered_sale_order_button.appendTo( + this.pos_widget.$('ul.orderlines')); } }, }); - /************************************************************************* - Extend OrderWidget: - Overload renderElement, to display buttons when the order change. - */ + /* ************************************************************************ + Extend OrderWidget + ************************************************************************ */ module.OrderWidget = module.OrderWidget.extend({ - renderElement: function(scrollbottom){ + + /** + * Overload renderElement(), to display buttons when the order change. + */ + renderElement: function (scrollbottom) { this._super(scrollbottom); if (this.pos_widget.create_draft_sale_order_button) { this.pos_widget.create_draft_sale_order_button.appendTo( @@ -169,7 +219,7 @@ openerp.pos_order_to_sale_order = function(instance, local) { ); } - } + }, }); }; diff --git a/pos_order_to_sale_order/views/pos_order_to_sale_order.xml b/pos_order_to_sale_order/views/pos_order_to_sale_order.xml index 12d5a6209c..5c8992ba6c 100644 --- a/pos_order_to_sale_order/views/pos_order_to_sale_order.xml +++ b/pos_order_to_sale_order/views/pos_order_to_sale_order.xml @@ -2,10 +2,13 @@ - diff --git a/pos_order_to_sale_order/views/view_pos_config.xml b/pos_order_to_sale_order/views/view_pos_config.xml index ce9e559e9c..da0dfdebdc 100644 --- a/pos_order_to_sale_order/views/view_pos_config.xml +++ b/pos_order_to_sale_order/views/view_pos_config.xml @@ -41,26 +41,3 @@ - - - - - - From dc7f8a29e59fcaf2940059fbde4a6fe39478e52b Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sat, 4 Jul 2020 08:31:08 +0000 Subject: [PATCH 14/71] [UPD] Update pos_order_to_sale_order.pot --- .../i18n/pos_order_to_sale_order.pot | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/pos_order_to_sale_order/i18n/pos_order_to_sale_order.pot b/pos_order_to_sale_order/i18n/pos_order_to_sale_order.pot index 1ec9191cea..031f9cb95f 100644 --- a/pos_order_to_sale_order/i18n/pos_order_to_sale_order.pot +++ b/pos_order_to_sale_order/i18n/pos_order_to_sale_order.pot @@ -1,13 +1,11 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * pos_order_to_sale_order +# * pos_order_to_sale_order # msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-01-19 23:45+0000\n" -"PO-Revision-Date: 2020-01-19 23:45+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -24,7 +22,7 @@ msgstr "" #. module: pos_order_to_sale_order #. openerp-web -#: code:addons/pos_order_to_sale_order/static/src/js/screens.js:148 +#: code:addons/pos_order_to_sale_order/static/src/js/screens.js:146 #, python-format msgid "Check your internet connection and try again." msgstr "" @@ -75,7 +73,7 @@ msgstr "" #. module: pos_order_to_sale_order #. openerp-web -#: code:addons/pos_order_to_sale_order/static/src/js/screens.js:100 +#: code:addons/pos_order_to_sale_order/static/src/js/screens.js:98 #, python-format msgid "Create Sale Order and discard the current PoS Order?" msgstr "" @@ -136,14 +134,14 @@ msgstr "" #. module: pos_order_to_sale_order #. openerp-web -#: code:addons/pos_order_to_sale_order/static/src/js/screens.js:147 +#: code:addons/pos_order_to_sale_order/static/src/js/screens.js:145 #, python-format msgid "The order could not be sent" msgstr "" #. module: pos_order_to_sale_order #. openerp-web -#: code:addons/pos_order_to_sale_order/static/src/js/screens.js:103 +#: code:addons/pos_order_to_sale_order/static/src/js/screens.js:101 #, python-format msgid "This operation will permanently discard the current PoS Order and create a Sale Order, based on the current order lines." msgstr "" @@ -154,3 +152,4 @@ msgstr "" #, python-format msgid "You should select a customer in order to create a Sale Order." msgstr "" + From 6c55f5aa750113ce81ee37c632fd235507643b26 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sat, 4 Jul 2020 08:36:54 +0000 Subject: [PATCH 15/71] [UPD] README.rst --- pos_order_to_sale_order/README.rst | 131 ++++++++++++++++++ .../static/description/index.html | 79 ++++------- 2 files changed, 161 insertions(+), 49 deletions(-) diff --git a/pos_order_to_sale_order/README.rst b/pos_order_to_sale_order/README.rst index 03c108e37f..0e1a7587b2 100644 --- a/pos_order_to_sale_order/README.rst +++ b/pos_order_to_sale_order/README.rst @@ -6,3 +6,134 @@ PoS Order To Sale Order !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png + :target: https://odoo-community.org/page/development-status + :alt: Production/Stable +.. |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/12.0/pos_order_to_sale_order + :alt: OCA/pos +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/pos-12-0/pos-12-0-pos_order_to_sale_order + :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/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of point of sale to allow sale orders +creation from the Point of Sale. + +In the POS UI, button has been added to create a sale order and discard +the current POS order. + +This module is usefull in many cases, for exemple : + +* take orders with a very simple interface + +* if you have some customers that come every day in your shop, but want to + have a unique invoice at the end of the month. With that module, you can + create a sale order and deliver products every time to keep your stock value + correct, and to create a unique invoice, when you want. + +**Technical Notes** + +* Some hooks are defined in the JS file, to define custom behaviour after + having created the sale order. + +* Some prepare functions are available in the ``sale.order`` model and + ``sale.order.line`` models to overload the creation of the sale order. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +* Go to Point Of Sale / Configuration / Point of Sale +* Check the box 'Create Sale Orders' +* Select the desired default behaviour + +.. figure:: https://raw.githubusercontent.com/OCA/pos/12.0/pos_order_to_sale_order/static/description/pos_config_form.png + :width: 800 px + +Usage +===== + +* Open your Point of sale +* create a new order and select products +* select a customer + +* then, click on the "Create Sale Order" button + +.. figure:: https://raw.githubusercontent.com/OCA/pos/12.0/pos_order_to_sale_order/static/description/pos_frontend_order.png + :width: 800 px + +Three options are available: + +* **Create a draft Order** + A new sale order in a draft mode will be created that can be changed later. + +* **Create a Confirmed Order** + A new sale order will be created and confirmed. + +* **Create Delivered Picking** (by default) + A new sale order will be created and confirmed. the associated picking + will be marked as delivered. + +.. figure:: https://raw.githubusercontent.com/OCA/pos/12.0/pos_order_to_sale_order/static/description/pos_frontend_buttons.png + :width: 800 px + +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 (https://www.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. + +.. |maintainer-legalsylvain| image:: https://github.com/legalsylvain.png?size=40px + :target: https://github.com/legalsylvain + :alt: legalsylvain + +Current `maintainer `__: + +|maintainer-legalsylvain| + +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_to_sale_order/static/description/index.html b/pos_order_to_sale_order/static/description/index.html index 1c635449fc..af77d78920 100644 --- a/pos_order_to_sale_order/static/description/index.html +++ b/pos_order_to_sale_order/static/description/index.html @@ -3,7 +3,7 @@ - + PoS Order To Sale Order