diff --git a/pos_order_to_sale_order/README.rst b/pos_order_to_sale_order/README.rst new file mode 100644 index 0000000000..639e580c04 --- /dev/null +++ b/pos_order_to_sale_order/README.rst @@ -0,0 +1,143 @@ +======================= +PoS Order To Sale Order +======================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:b2a9ab6f859abefbe8336dfd3666fc59661cd7763a3bcbb2f903e4afb77fdf32 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/17.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-17-0/pos-17-0-pos_order_to_sale_order + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/pos&target_branch=17.0 + :alt: Try me on Runboat + +|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. + +**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 + +|image1| + +.. |image1| image:: https://raw.githubusercontent.com/OCA/pos/17.0/pos_order_to_sale_order/static/description/res_config_settings_form.png + +Usage +===== + +- Open your Point of sale +- Create a new order and select products +- Select a customer +- Click on the "Create Order" button + +|image1| + +Four options are available (depending on the PoS settings): + +- **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 Sale Order** A new sale order will be created and + confirmed. the associated picking will be marked as delivered. +- **Create Invoiced Sale Order** A new sale order will be created and + confirmed. the associated picking will be marked as delivered. An + invoice will be created and confirmed. + +|image2| + +.. |image1| image:: https://raw.githubusercontent.com/OCA/pos/17.0/pos_order_to_sale_order/static/description/pos_frontend_button.png +.. |image2| image:: https://raw.githubusercontent.com/OCA/pos/17.0/pos_order_to_sale_order/static/description/pos_frontend_popup.png + +Development +=========== + +- Some prepare functions are available in the ``sale.order`` model and + ``sale.order.line`` models to overload the creation of the sale + order. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* GRAP + +Contributors +------------ + +- Sylvain LE GAL (https://www.twitter.com/legalsylvain) +- Chau Le (chaulb@trobz.com) + +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/__init__.py b/pos_order_to_sale_order/__init__.py new file mode 100644 index 0000000000..0650744f6b --- /dev/null +++ b/pos_order_to_sale_order/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/pos_order_to_sale_order/__manifest__.py b/pos_order_to_sale_order/__manifest__.py new file mode 100644 index 0000000000..1940005a08 --- /dev/null +++ b/pos_order_to_sale_order/__manifest__.py @@ -0,0 +1,29 @@ +# 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": "17.0.1.0.0", + "author": "GRAP,Odoo Community Association (OCA)", + "category": "Point Of Sale", + "license": "AGPL-3", + "depends": ["point_of_sale", "sale_stock"], + "maintainers": ["legalsylvain"], + "development_status": "Production/Stable", + "website": "https://github.com/OCA/pos", + "data": ["views/view_res_config_settings.xml"], + "assets": { + "point_of_sale._assets_pos": [ + "pos_order_to_sale_order/static/src/css/pos.scss", + "pos_order_to_sale_order/static/src/js/CreateOrderButton.esm.js", + "pos_order_to_sale_order/static/src/js/CreateOrderPopup.esm.js", + "pos_order_to_sale_order/static/src/xml/CreateOrderButton.xml", + "pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml", + ], + "web.assets_tests": [ + "pos_order_to_sale_order/static/tests/tours/**/*", + ], + }, + "installable": True, +} diff --git a/pos_order_to_sale_order/i18n/es.po b/pos_order_to_sale_order/i18n/es.po new file mode 100644 index 0000000000..c31aadcdf7 --- /dev/null +++ b/pos_order_to_sale_order/i18n/es.po @@ -0,0 +1,213 @@ +# 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 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-09-02 19:38+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: pos_order_to_sale_order +#: model:ir.model,name:pos_order_to_sale_order.model_res_config_settings +msgid "Config Settings" +msgstr "Ajustes de configuración" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Confirmed Sale Order" +msgstr "Crear pedido de venta confirmado" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_confirmed_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_confirmed_sale_order +msgid "Create Confirmed Sale Orders" +msgstr "Crear pedidos de venta confirmados" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Delivered Sale Order" +msgstr "Crear pedido de venta entregado" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_delivered_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_delivered_sale_order +msgid "Create Delivered Sale Orders" +msgstr "Crear pedidos de venta entregados" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Draft Sale Order" +msgstr "Crear borrador de orden de venta" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_draft_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_draft_sale_order +msgid "Create Draft Sale Orders" +msgstr "Crear borradores de pedidos de venta" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Invoiced Sale Order" +msgstr "Crear pedido de venta facturado" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_invoiced_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_invoiced_sale_order +msgid "Create Invoiced Sale Orders" +msgstr "Crear órdenes de venta facturadas" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderButton.xml:0 +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Order" +msgstr "Crear pedido de venta" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_sale_order +msgid "Create Sale Orders" +msgstr "Crear pedidos de venta" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Discard" +msgstr "Descartar" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_confirmed_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_confirmed_sale_order +msgid "" +"If checked, the cashier will have the possibility to create a confirmed Sale " +"Order, based on the current draft PoS Order." +msgstr "" +"Si se marca, el cajero tendrá la posibilidad de crear un pedido de venta " +"confirmada, basada en el borrador actual de la orden de compra." + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_invoiced_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_invoiced_sale_order +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.\n" +" The Invoice will be generated and confirm.\n" +" Only invoice payment process will be possible." +msgstr "" +"Si está marcada, el cajero tendrá la posibilidad de crear un Pedido de venta " +"confirmado, basado en el borrador de Pedido PoS actual.\n" +"La recogida correspondiente se marcará como entregada.\n" +" La factura se generará y confirmará.\n" +" Sólo será posible el proceso de pago de la factura." + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_delivered_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_delivered_sale_order +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 "" +"Si se marca, el cajero tendrá la posibilidad de crear una orden de venta " +"confirmada, basada en el borrador actual de la orden de compra. La selección " +"correspondiente se marcará como entregada. Solo el proceso de facturas será " +"posible." + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_draft_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_draft_sale_order +msgid "" +"If checked, the cashier will have the possibility to create a draft Sale " +"Order, based on the current draft PoS Order." +msgstr "" +"Si se marca, el cajero tendrá la posibilidad de crear un borrador de un " +"pedido de venta, basado en el borrador actual de la orden de compra." + +#. module: pos_order_to_sale_order +#. odoo-python +#: code:addons/pos_order_to_sale_order/models/sale_order.py:0 +#, python-format +msgid "Point of Sale %s" +msgstr "Punto de venta %s" + +#. module: pos_order_to_sale_order +#: model:ir.model,name:pos_order_to_sale_order.model_pos_config +msgid "Point of Sale Configuration" +msgstr "Configuración del punto de venta" + +#. module: pos_order_to_sale_order +#: model_terms:ir.ui.view,arch_db:pos_order_to_sale_order.view_res_config_settings_form +msgid "Sale Order Creation" +msgstr "Creación de orden de venta" + +#. module: pos_order_to_sale_order +#: model:ir.model,name:pos_order_to_sale_order.model_sale_order +msgid "Sales Order" +msgstr "Órdenes de venta" + +#. module: pos_order_to_sale_order +#: model:ir.model,name:pos_order_to_sale_order.model_sale_order_line +msgid "Sales Order Line" +msgstr "Línea de pedido de venta" + +#, python-format +#~ msgid "Back" +#~ msgstr "Volver" + +#, python-format +#~ msgid "Check your internet connection and try again." +#~ msgstr "Verifique su conexión a Internet e intente nuevamente." + +#, python-format +#~ msgid "Create Sale Order" +#~ msgstr "Crear pedido de venta" + +#, python-format +#~ msgid "Create Sale Order and discard the current PoS Order?" +#~ msgstr "¿Crear pedido de venta y descartar la orden de compra actual?" + +#, python-format +#~ msgid "No customer defined" +#~ msgstr "Ningún cliente definido" + +#~ msgid "Sale Order" +#~ msgstr "Pedido de Venta" + +#~ msgid "Sale Order Creations" +#~ msgstr "Creaciones de pedidos de venta" + +#, python-format +#~ msgid "The order could not be sent" +#~ msgstr "No se pudo enviar el pedido" + +#, python-format +#~ msgid "" +#~ "This operation will permanently discard the current PoS Order and create " +#~ "a Sale Order, based on the current order lines." +#~ msgstr "" +#~ "Esta operación descartará permanentemente el pedido PdV actual y creará " +#~ "un pedido de venta, basado en las líneas de pedido actuales." + +#, python-format +#~ msgid "You should select a customer in order to create a Sale Order." +#~ msgstr "Debe seleccionar un cliente para crear un pedido de venta." 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..d922372e83 --- /dev/null +++ b/pos_order_to_sale_order/i18n/fr.po @@ -0,0 +1,166 @@ +# 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 16.0beta\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-10-07 17:02+0000\n" +"PO-Revision-Date: 2022-10-07 17:02+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" +"Plural-Forms: \n" + +#. module: pos_order_to_sale_order +#: model:ir.model,name:pos_order_to_sale_order.model_res_config_settings +msgid "Config Settings" +msgstr "Paramètres de config" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Confirmed Sale Order" +msgstr "Créer une vente confirmée" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_confirmed_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_confirmed_sale_order +msgid "Create Confirmed Sale Orders" +msgstr "Créer des ventes confirmées" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Delivered Sale Order" +msgstr "Créer une vente livrée" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_delivered_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_delivered_sale_order +msgid "Create Delivered Sale Orders" +msgstr "Créer des ventes livrées" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Draft Sale Order" +msgstr "Créer un devis en brouillon" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_draft_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_draft_sale_order +msgid "Create Draft Sale Orders" +msgstr "Créer des devis" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Invoiced Sale Order" +msgstr "Créer une vente facturée" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_invoiced_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_invoiced_sale_order +msgid "Create Invoiced Sale Orders" +msgstr "Créer des ventes facturées" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderButton.xml:0 +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Order" +msgstr "Créer une vente" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_sale_order +msgid "Create Sale Orders" +msgstr "Créer des ventes" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Discard" +msgstr "Annuler" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_confirmed_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_confirmed_sale_order +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 +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_invoiced_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_invoiced_sale_order +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.\n" +" The Invoice will be generated and confirm.\n" +" Only invoice payment process will be possible." +msgstr "" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_delivered_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_delivered_sale_order +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 +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_draft_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_draft_sale_order +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 +#. odoo-python +#: code:addons/pos_order_to_sale_order/models/sale_order.py:0 +#, 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_pos_config +msgid "Point of Sale Configuration" +msgstr "Paramétrage du point de vente" + +#. module: pos_order_to_sale_order +#: model_terms:ir.ui.view,arch_db:pos_order_to_sale_order.view_res_config_settings_form +msgid "Sale Order Creation" +msgstr "Création de bon de commande" + +#. module: pos_order_to_sale_order +#: model:ir.model,name:pos_order_to_sale_order.model_sale_order +msgid "Sales Order" +msgstr "Bon de commande" + +#. module: pos_order_to_sale_order +#: model:ir.model,name:pos_order_to_sale_order.model_sale_order_line +msgid "Sales Order Line" +msgstr "Ligne de bons de commande" diff --git a/pos_order_to_sale_order/i18n/it.po b/pos_order_to_sale_order/i18n/it.po new file mode 100644 index 0000000000..6b024f6efc --- /dev/null +++ b/pos_order_to_sale_order/i18n/it.po @@ -0,0 +1,171 @@ +# 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 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-10-13 14:40+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: pos_order_to_sale_order +#: model:ir.model,name:pos_order_to_sale_order.model_res_config_settings +msgid "Config Settings" +msgstr "Impostazioni configurazione" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Confirmed Sale Order" +msgstr "Crea ordine di vendita confermato" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_confirmed_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_confirmed_sale_order +msgid "Create Confirmed Sale Orders" +msgstr "Crea ordini di vendita confermati" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Delivered Sale Order" +msgstr "Crea ordine vendita consegnato" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_delivered_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_delivered_sale_order +msgid "Create Delivered Sale Orders" +msgstr "Crea ordini di vendita consegnati" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Draft Sale Order" +msgstr "Crea bozza ordine di vendita" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_draft_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_draft_sale_order +msgid "Create Draft Sale Orders" +msgstr "Crea bozze ordini di vendita" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Invoiced Sale Order" +msgstr "Crea ordine di vendita fatturato" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_invoiced_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_invoiced_sale_order +msgid "Create Invoiced Sale Orders" +msgstr "Crea ordini di vendita fatturati" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderButton.xml:0 +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Order" +msgstr "Crea ordine" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_sale_order +msgid "Create Sale Orders" +msgstr "Crea ordini di vendita" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Discard" +msgstr "Abbandona" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_confirmed_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_confirmed_sale_order +msgid "" +"If checked, the cashier will have the possibility to create a confirmed Sale " +"Order, based on the current draft PoS Order." +msgstr "" +"Se selezionato, il cassiere avrà la possibilità di creare un ordine di " +"vendita confermato in base all'attuale bozza ordine PoS." + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_invoiced_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_invoiced_sale_order +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.\n" +" The Invoice will be generated and confirm.\n" +" Only invoice payment process will be possible." +msgstr "" +"Se selezionato, il cassiere avrà la possibilità di creare un ordine di " +"vendita confermato in base all'attuale bozza ordine PoS.\n" +"Il prelievo collegato verrà impostato a consegnato.\n" +"La fattura verrà generata e confermata.\n" +"Sarà possibile solo attivare il processo di pagamento fattura." + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_delivered_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_delivered_sale_order +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 "" +"Se impostato, il cassiere avrà la possibilità di creare un ordine di vendita " +"confermato, in base all'attuale bozza di ordine PoS.\n" +"Il prelievo associato verrà impostato a consegnato. Sarà possibile solo " +"fatturare." + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_draft_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_draft_sale_order +msgid "" +"If checked, the cashier will have the possibility to create a draft Sale " +"Order, based on the current draft PoS Order." +msgstr "" +"Se impostato, il cassiere avrà la possibilità di creare una bozza di ordine " +"di vendita, in base alla bozza attuale di ordine PoS." + +#. module: pos_order_to_sale_order +#. odoo-python +#: code:addons/pos_order_to_sale_order/models/sale_order.py:0 +#, python-format +msgid "Point of Sale %s" +msgstr "Punto vendita %s" + +#. module: pos_order_to_sale_order +#: model:ir.model,name:pos_order_to_sale_order.model_pos_config +msgid "Point of Sale Configuration" +msgstr "Configurazione punto vendita" + +#. module: pos_order_to_sale_order +#: model_terms:ir.ui.view,arch_db:pos_order_to_sale_order.view_res_config_settings_form +msgid "Sale Order Creation" +msgstr "Creazione ordine di vendita" + +#. module: pos_order_to_sale_order +#: model:ir.model,name:pos_order_to_sale_order.model_sale_order +msgid "Sales Order" +msgstr "Ordine di vendita" + +#. module: pos_order_to_sale_order +#: model:ir.model,name:pos_order_to_sale_order.model_sale_order_line +msgid "Sales Order Line" +msgstr "Riga ordine di vendita" 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..911f42a2d4 --- /dev/null +++ b/pos_order_to_sale_order/i18n/pos_order_to_sale_order.pot @@ -0,0 +1,152 @@ +# 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 16.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 +#: model:ir.model,name:pos_order_to_sale_order.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Confirmed Sale Order" +msgstr "" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_confirmed_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_confirmed_sale_order +msgid "Create Confirmed Sale Orders" +msgstr "" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Delivered Sale Order" +msgstr "" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_delivered_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_delivered_sale_order +msgid "Create Delivered Sale Orders" +msgstr "" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Draft Sale Order" +msgstr "" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_draft_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_draft_sale_order +msgid "Create Draft Sale Orders" +msgstr "" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Invoiced Sale Order" +msgstr "" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_invoiced_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_invoiced_sale_order +msgid "Create Invoiced Sale Orders" +msgstr "" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderButton.xml:0 +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Order" +msgstr "" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_sale_order +msgid "Create Sale Orders" +msgstr "" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Discard" +msgstr "" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_confirmed_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_confirmed_sale_order +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 +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_invoiced_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_invoiced_sale_order +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.\n" +" The Invoice will be generated and confirm.\n" +" Only invoice payment process will be possible." +msgstr "" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_delivered_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_delivered_sale_order +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 +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_draft_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_draft_sale_order +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 +#. odoo-python +#: code:addons/pos_order_to_sale_order/models/sale_order.py:0 +#, python-format +msgid "Point of Sale %s" +msgstr "" + +#. module: pos_order_to_sale_order +#: model:ir.model,name:pos_order_to_sale_order.model_pos_config +msgid "Point of Sale Configuration" +msgstr "" + +#. module: pos_order_to_sale_order +#: model_terms:ir.ui.view,arch_db:pos_order_to_sale_order.view_res_config_settings_form +msgid "Sale Order Creation" +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 +#: model:ir.model,name:pos_order_to_sale_order.model_sale_order_line +msgid "Sales Order Line" +msgstr "" diff --git a/pos_order_to_sale_order/i18n/pt_BR.po b/pos_order_to_sale_order/i18n/pt_BR.po new file mode 100644 index 0000000000..9e4e111a64 --- /dev/null +++ b/pos_order_to_sale_order/i18n/pt_BR.po @@ -0,0 +1,214 @@ +# 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 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-05-23 01:18+0000\n" +"Last-Translator: Rodrigo Macedo \n" +"Language-Team: none\n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: pos_order_to_sale_order +#: model:ir.model,name:pos_order_to_sale_order.model_res_config_settings +msgid "Config Settings" +msgstr "Configurações" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Confirmed Sale Order" +msgstr "Criar ordem de venda confirmada" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_confirmed_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_confirmed_sale_order +msgid "Create Confirmed Sale Orders" +msgstr "Criar Ordem de Venda confirmada" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Delivered Sale Order" +msgstr "Criar Ordem de Venda Entregue" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_delivered_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_delivered_sale_order +msgid "Create Delivered Sale Orders" +msgstr "Criar Ordem de Venda entregue" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Draft Sale Order" +msgstr "Criar Cotação" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_draft_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_draft_sale_order +msgid "Create Draft Sale Orders" +msgstr "Criar Cotação" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Invoiced Sale Order" +msgstr "Criar pedido de venda com fatura" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_invoiced_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_invoiced_sale_order +msgid "Create Invoiced Sale Orders" +msgstr "Criar pedidos de vendas com fatura" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderButton.xml:0 +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Create Order" +msgstr "Criar pedido" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,field_description:pos_order_to_sale_order.field_pos_config__iface_create_sale_order +msgid "Create Sale Orders" +msgstr "Criar Ordem de Venda" + +#. module: pos_order_to_sale_order +#. odoo-javascript +#: code:addons/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml:0 +#, python-format +msgid "Discard" +msgstr "Descartar" + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_confirmed_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_confirmed_sale_order +msgid "" +"If checked, the cashier will have the possibility to create a confirmed Sale " +"Order, based on the current draft PoS Order." +msgstr "" +"Se marcado, o caixa terá a possibilidade de criar um pedido de venda " +"confirmado, com base no atual rascunho do pedido do PDV." + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_invoiced_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_invoiced_sale_order +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.\n" +" The Invoice will be generated and confirm.\n" +" Only invoice payment process will be possible." +msgstr "" +"Se marcada, o caixa terá a possibilidade de criar uma Ordem de venda " +"confirmada, com base no projeto de Ordem PoS atual.\n" +" a coleta correspondente será marcada como entregue.\n" +" A fatura será gerada e confirmada.\n" +" Somente o processo de pagamento de fatura será possível." + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_delivered_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_delivered_sale_order +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 "" +"Se marcado, o caixa terá a possibilidade de criar um pedido de venda " +"confirmado, com base no rascunho do pedido de PDV atual.\n" +" O picking correspondente será marcado como entregue. Somente o processo de " +"faturas será possível." + +#. module: pos_order_to_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_pos_config__iface_create_draft_sale_order +#: model:ir.model.fields,help:pos_order_to_sale_order.field_res_config_settings__pos_iface_create_draft_sale_order +msgid "" +"If checked, the cashier will have the possibility to create a draft Sale " +"Order, based on the current draft PoS Order." +msgstr "" +"Se marcado, o caixa terá a possibilidade de criar um rascunho de pedido de " +"venda, com base no rascunho atual de pedido de PDV." + +#. module: pos_order_to_sale_order +#. odoo-python +#: code:addons/pos_order_to_sale_order/models/sale_order.py:0 +#, python-format +msgid "Point of Sale %s" +msgstr "Ponto de Venda %s" + +#. module: pos_order_to_sale_order +#: model:ir.model,name:pos_order_to_sale_order.model_pos_config +msgid "Point of Sale Configuration" +msgstr "Configuração de Ponto de Venda" + +#. module: pos_order_to_sale_order +#: model_terms:ir.ui.view,arch_db:pos_order_to_sale_order.view_res_config_settings_form +msgid "Sale Order Creation" +msgstr "Criação de pedido de venda" + +#. module: pos_order_to_sale_order +#: model:ir.model,name:pos_order_to_sale_order.model_sale_order +msgid "Sales Order" +msgstr "Pedidos de Vendas" + +#. module: pos_order_to_sale_order +#: model:ir.model,name:pos_order_to_sale_order.model_sale_order_line +msgid "Sales Order Line" +msgstr "Linha da Ordem de Venda" + +#, python-format +#~ msgid "Back" +#~ msgstr "Voltar" + +#, python-format +#~ msgid "Check your internet connection and try again." +#~ msgstr "Verifique sua conexão com a internet e tente novamente." + +#, python-format +#~ msgid "Create Sale Order" +#~ msgstr "Criar Ordem de Venda" + +#, python-format +#~ msgid "Create Sale Order and discard the current PoS Order?" +#~ msgstr "Criar Pedido de Venda e descartar o Pedido de PDV atual?" + +#, python-format +#~ msgid "No customer defined" +#~ msgstr "Defina um Cliente" + +#~ msgid "Sale Order" +#~ msgstr "Ordem de Venda" + +#~ msgid "Sale Order Creations" +#~ msgstr "Criar Ordem de Venda" + +#, python-format +#~ msgid "The order could not be sent" +#~ msgstr "A ordem não pôde ser enviada" + +#, python-format +#~ msgid "" +#~ "This operation will permanently discard the current PoS Order and create " +#~ "a Sale Order, based on the current order lines." +#~ msgstr "" +#~ "Esta operação descartará permanentemente o Pedido PDV atual e criará um " +#~ "Pedido de Venda, com base nas linhas de pedidos atuais." + +#, python-format +#~ msgid "You should select a customer in order to create a Sale Order." +#~ msgstr "Você deve selecionar um cliente para criar um Pedido de Venda." 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..530353694f --- /dev/null +++ b/pos_order_to_sale_order/models/__init__.py @@ -0,0 +1,4 @@ +from . import sale_order +from . import sale_order_line +from . import pos_config +from . import res_config_settings 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..4550447489 --- /dev/null +++ b/pos_order_to_sale_order/models/pos_config.py @@ -0,0 +1,65 @@ +# 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 odoo import api, fields, models + + +class PosConfig(models.Model): + _inherit = "pos.config" + + iface_create_sale_order = fields.Boolean( + string="Create Sale Orders", + compute="_compute_iface_create_sale_order", + store=True, + ) + + 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.", + ) + + iface_create_invoiced_sale_order = fields.Boolean( + string="Create Invoiced 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.\n" + " The Invoice will be generated and confirm.\n" + " Only invoice payment process will be possible.", + ) + + @api.depends( + "iface_create_draft_sale_order", + "iface_create_confirmed_sale_order", + "iface_create_delivered_sale_order", + "iface_create_invoiced_sale_order", + ) + def _compute_iface_create_sale_order(self): + for config in self: + config.iface_create_sale_order = any( + [ + config.iface_create_draft_sale_order, + config.iface_create_confirmed_sale_order, + config.iface_create_delivered_sale_order, + config.iface_create_invoiced_sale_order, + ] + ) diff --git a/pos_order_to_sale_order/models/res_config_settings.py b/pos_order_to_sale_order/models/res_config_settings.py new file mode 100644 index 0000000000..e2c50a278f --- /dev/null +++ b/pos_order_to_sale_order/models/res_config_settings.py @@ -0,0 +1,25 @@ +# 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 odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + pos_iface_create_draft_sale_order = fields.Boolean( + related="pos_config_id.iface_create_draft_sale_order", readonly=False + ) + + pos_iface_create_confirmed_sale_order = fields.Boolean( + related="pos_config_id.iface_create_confirmed_sale_order", readonly=False + ) + + pos_iface_create_delivered_sale_order = fields.Boolean( + related="pos_config_id.iface_create_delivered_sale_order", readonly=False + ) + + pos_iface_create_invoiced_sale_order = fields.Boolean( + related="pos_config_id.iface_create_invoiced_sale_order", readonly=False + ) 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..162d20898a --- /dev/null +++ b/pos_order_to_sale_order/models/sale_order.py @@ -0,0 +1,56 @@ +# 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 odoo import Command, _, api, models + + +class SaleOrder(models.Model): + _inherit = "sale.order" + + @api.model + def _prepare_from_pos(self, order_data): + PosSession = self.env["pos.session"] + session = PosSession.browse(order_data["pos_session_id"]) + SaleOrderLine = self.env["sale.order.line"] + order_lines = [ + Command.create(SaleOrderLine._prepare_from_pos(sequence, line_data[2])) + for sequence, line_data in enumerate(order_data["lines"], start=1) + ] + return { + "partner_id": order_data["partner_id"], + "origin": _("Point of Sale %s") % (session.name), + "client_order_ref": order_data["name"], + "user_id": order_data["user_id"], + "pricelist_id": order_data["pricelist_id"], + "fiscal_position_id": order_data["fiscal_position_id"], + "order_line": order_lines, + } + + @api.model + def create_order_from_pos(self, order_data, action): + # Create Draft Sale order + order_vals = self._prepare_from_pos(order_data) + sale_order = self.with_context( + pos_order_lines_data=[x[2] for x in order_data.get("lines", [])] + ).create(order_vals) + + # Confirm Sale Order + if action in ["confirmed", "delivered", "invoiced"]: + sale_order.action_confirm() + + # mark picking as delivered + if action in ["delivered", "invoiced"]: + # Mark all moves are delivered + for move in sale_order.mapped("picking_ids.move_ids_without_package"): + move.quantity = move.product_uom_qty + sale_order.mapped("picking_ids").button_validate() + + if action in ["invoiced"]: + # Create and confirm invoices + invoices = sale_order._create_invoices() + invoices.action_post() + + return { + "sale_order_id": sale_order.id, + } diff --git a/pos_order_to_sale_order/models/sale_order_line.py b/pos_order_to_sale_order/models/sale_order_line.py new file mode 100644 index 0000000000..b278a390b1 --- /dev/null +++ b/pos_order_to_sale_order/models/sale_order_line.py @@ -0,0 +1,31 @@ +# 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 odoo import api, models + + +class SaleOrderLine(models.Model): + _inherit = "sale.order.line" + + @api.model + def _prepare_from_pos(self, sequence, order_line_data): + return { + "sequence": sequence, + "product_id": order_line_data["product_id"], + "product_uom_qty": order_line_data["qty"], + "discount": order_line_data["discount"], + "price_unit": order_line_data["price_unit"], + "tax_id": order_line_data["tax_ids"], + } + + def _get_sale_order_line_multiline_description_sale(self): + res = super()._get_sale_order_line_multiline_description_sale() + + for sequence, line_data in enumerate( + self.env.context.get("pos_order_lines_data", []), start=1 + ): + if line_data.get("customer_note", False) and self.sequence == sequence: + res += f"\n{line_data.get('customer_note')}" + + return res diff --git a/pos_order_to_sale_order/pyproject.toml b/pos_order_to_sale_order/pyproject.toml new file mode 100644 index 0000000000..4231d0cccb --- /dev/null +++ b/pos_order_to_sale_order/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/pos_order_to_sale_order/readme/CONFIGURE.md b/pos_order_to_sale_order/readme/CONFIGURE.md new file mode 100644 index 0000000000..dc9b0c70c9 --- /dev/null +++ b/pos_order_to_sale_order/readme/CONFIGURE.md @@ -0,0 +1,5 @@ +- Go to Point Of Sale / Configuration / Point of Sale +- Check the box 'Create Sale Orders' +- Select the desired default behaviour + +![](../static/description/res_config_settings_form.png) diff --git a/pos_order_to_sale_order/readme/CONTRIBUTORS.md b/pos_order_to_sale_order/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..28a6753d0c --- /dev/null +++ b/pos_order_to_sale_order/readme/CONTRIBUTORS.md @@ -0,0 +1,2 @@ +- Sylvain LE GAL () +- Chau Le () diff --git a/pos_order_to_sale_order/readme/DESCRIPTION.md b/pos_order_to_sale_order/readme/DESCRIPTION.md new file mode 100644 index 0000000000..b264b23b73 --- /dev/null +++ b/pos_order_to_sale_order/readme/DESCRIPTION.md @@ -0,0 +1,14 @@ +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. diff --git a/pos_order_to_sale_order/readme/DEVELOP.md b/pos_order_to_sale_order/readme/DEVELOP.md new file mode 100644 index 0000000000..88e02ef352 --- /dev/null +++ b/pos_order_to_sale_order/readme/DEVELOP.md @@ -0,0 +1,2 @@ +- Some prepare functions are available in the `sale.order` model and + `sale.order.line` models to overload the creation of the sale order. diff --git a/pos_order_to_sale_order/readme/USAGE.md b/pos_order_to_sale_order/readme/USAGE.md new file mode 100644 index 0000000000..e4c53688a7 --- /dev/null +++ b/pos_order_to_sale_order/readme/USAGE.md @@ -0,0 +1,20 @@ +- Open your Point of sale +- Create a new order and select products +- Select a customer +- Click on the "Create Order" button + +![](../static/description/pos_frontend_button.png) + +Four options are available (depending on the PoS settings): + +- **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 Sale Order** A new sale order will be created and + confirmed. the associated picking will be marked as delivered. +- **Create Invoiced Sale Order** A new sale order will be created and + confirmed. the associated picking will be marked as delivered. An + invoice will be created and confirmed. + +![](../static/description/pos_frontend_popup.png) 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 0000000000..d547d9cb33 Binary files /dev/null and b/pos_order_to_sale_order/static/description/icon.png differ diff --git a/pos_order_to_sale_order/static/description/index.html b/pos_order_to_sale_order/static/description/index.html new file mode 100644 index 0000000000..6b6210a5c8 --- /dev/null +++ b/pos_order_to_sale_order/static/description/index.html @@ -0,0 +1,483 @@ + + + + + +PoS Order To Sale Order + + + +
+

PoS Order To Sale Order

+ + +

Production/Stable License: AGPL-3 OCA/pos Translate me on Weblate Try me on Runboat

+

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.
  • +
+

Table of contents

+ +
+

Configuration

+
    +
  • Go to Point Of Sale / Configuration / Point of Sale
  • +
  • Check the box ‘Create Sale Orders’
  • +
  • Select the desired default behaviour
  • +
+
+https://raw.githubusercontent.com/OCA/pos/16.0/pos_order_to_sale_order/static/description/res_config_settings_form.png +
+
+
+

Usage

+
    +
  • Open your Point of sale
  • +
  • Create a new order and select products
  • +
  • Select a customer
  • +
  • Click on the “Create Order” button
  • +
+
+https://raw.githubusercontent.com/OCA/pos/16.0/pos_order_to_sale_order/static/description/pos_frontend_button.png +
+

Four options are available (depending on the PoS settings):

+
    +
  • 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 Sale Order +A new sale order will be created and confirmed. +the associated picking will be marked as delivered.
  • +
  • Create Invoiced Sale Order +A new sale order will be created and confirmed. +the associated picking will be marked as delivered. +An invoice will be created and confirmed.
  • +
+
+https://raw.githubusercontent.com/OCA/pos/16.0/pos_order_to_sale_order/static/description/pos_frontend_popup.png +
+
+
+

Development

+
    +
  • Some prepare functions are available in the sale.order model and +sale.order.line models to overload the creation of the sale order.
  • +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • GRAP
  • +
+
+ +
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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

+

Current 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/pos_frontend_button.png b/pos_order_to_sale_order/static/description/pos_frontend_button.png new file mode 100644 index 0000000000..8b13e362ea Binary files /dev/null and b/pos_order_to_sale_order/static/description/pos_frontend_button.png differ diff --git a/pos_order_to_sale_order/static/description/pos_frontend_popup.png b/pos_order_to_sale_order/static/description/pos_frontend_popup.png new file mode 100644 index 0000000000..78678212b2 Binary files /dev/null and b/pos_order_to_sale_order/static/description/pos_frontend_popup.png differ diff --git a/pos_order_to_sale_order/static/description/res_config_settings_form.png b/pos_order_to_sale_order/static/description/res_config_settings_form.png new file mode 100644 index 0000000000..2829c8e31b Binary files /dev/null and b/pos_order_to_sale_order/static/description/res_config_settings_form.png differ diff --git a/pos_order_to_sale_order/static/src/css/pos.scss b/pos_order_to_sale_order/static/src/css/pos.scss new file mode 100644 index 0000000000..2b09fe50fb --- /dev/null +++ b/pos_order_to_sale_order/static/src/css/pos.scss @@ -0,0 +1,54 @@ +/* + Copyright (C) 2022-Today GRAP (http://www.grap.coop) + @author Sylvain LE GAL (https://twitter.com/legalsylvain) + License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +*/ + +.pos { + .popup-create-sale-order { + table { + width: 100%; + } + + .button { + height: 40px; + font-size: 14px; + font-weight: bold; + cursor: pointer; + border: 1px solid #e0e2e6; + color: #017e84; + + &.button-sale-order { + margin-top: 10px; + width: 100%; + line-height: 40px; + margin-right: 0; + text-align: left; + + &:last-child { + margin-bottom: 10px; + } + + .icon-containers { + margin-left: 10px; + width: 80px; + display: inline-block; + } + + span { + margin-left: 10px; + } + } + + &.cancel { + width: 110px; + line-height: 40px; + } + } + + .modal-footer { + justify-content: end; + padding: 5.5px 10.5px; + } + } +} diff --git a/pos_order_to_sale_order/static/src/js/CreateOrderButton.esm.js b/pos_order_to_sale_order/static/src/js/CreateOrderButton.esm.js new file mode 100644 index 0000000000..b83a28b8de --- /dev/null +++ b/pos_order_to_sale_order/static/src/js/CreateOrderButton.esm.js @@ -0,0 +1,29 @@ +/** @odoo-module */ + +import {Component} from "@odoo/owl"; +import {CreateOrderPopup} from "./CreateOrderPopup.esm"; +import {ProductScreen} from "@point_of_sale/app/screens/product_screen/product_screen"; +import {useService} from "@web/core/utils/hooks"; + +export class CreateOrderButton extends Component { + setup() { + this.popup = useService("popup"); + } + + onClick() { + this.popup.add(CreateOrderPopup, {zIndex: 1069}); + } +} + +CreateOrderButton.template = "pos_order_to_sale_order.CreateOrderButton"; + +ProductScreen.addControlButton({ + component: CreateOrderButton, + condition: function () { + return ( + this.pos.config.iface_create_sale_order && + this.pos.get_order().get_partner() && + this.pos.get_order().get_orderlines().length !== 0 + ); + }, +}); diff --git a/pos_order_to_sale_order/static/src/js/CreateOrderPopup.esm.js b/pos_order_to_sale_order/static/src/js/CreateOrderPopup.esm.js new file mode 100644 index 0000000000..684e6b98fe --- /dev/null +++ b/pos_order_to_sale_order/static/src/js/CreateOrderPopup.esm.js @@ -0,0 +1,63 @@ +/** @odoo-module */ + +import {AbstractAwaitablePopup} from "@point_of_sale/app/popup/abstract_awaitable_popup"; +import {usePos} from "@point_of_sale/app/store/pos_hook"; +import {useService} from "@web/core/utils/hooks"; + +export class CreateOrderPopup extends AbstractAwaitablePopup { + setup() { + super.setup(); + this.pos = usePos(); + this.ui = useService("ui"); + this.orm = useService("orm"); + this.createOrderClicked = false; + } + + async createDraftSaleOrder() { + await this._actionCreateSaleOrder("draft"); + } + + async createConfirmedSaleOrder() { + await this._actionCreateSaleOrder("confirmed"); + } + + async createDeliveredSaleOrder() { + await this._actionCreateSaleOrder("delivered"); + } + + async createInvoicedSaleOrder() { + await this._actionCreateSaleOrder("invoiced"); + } + + async _actionCreateSaleOrder(order_state) { + // Create Sale Order + await this._createSaleOrder(order_state); + + // Delete current order + const current_order = this.pos.get_order(); + this.pos.removeOrder(current_order); + this.pos.add_new_order(); + + // Close popup + return await super.confirm(); + } + + async _createSaleOrder(order_state) { + const current_order = this.pos.get_order(); + this.ui.block(); + + return await this.orm + .call("sale.order", "create_order_from_pos", [ + current_order.export_as_JSON(), + order_state, + ]) + .catch((error) => { + throw error; + }) + .finally(() => { + this.ui.unblock(); + }); + } +} + +CreateOrderPopup.template = "pos_order_to_sale_order.CreateOrderPopup"; diff --git a/pos_order_to_sale_order/static/src/xml/CreateOrderButton.xml b/pos_order_to_sale_order/static/src/xml/CreateOrderButton.xml new file mode 100644 index 0000000000..df461915a7 --- /dev/null +++ b/pos_order_to_sale_order/static/src/xml/CreateOrderButton.xml @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml b/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml new file mode 100644 index 0000000000..1ebe79bb59 --- /dev/null +++ b/pos_order_to_sale_order/static/src/xml/CreateOrderPopup.xml @@ -0,0 +1,87 @@ + + + + + + + + diff --git a/pos_order_to_sale_order/static/tests/tours/PosOrderToSaleOrderTour.tour.esm.js b/pos_order_to_sale_order/static/tests/tours/PosOrderToSaleOrderTour.tour.esm.js new file mode 100644 index 0000000000..c80ef2163d --- /dev/null +++ b/pos_order_to_sale_order/static/tests/tours/PosOrderToSaleOrderTour.tour.esm.js @@ -0,0 +1,30 @@ +/** @odoo-module **/ +/* + Copyright (C) 2022-Today GRAP (http://www.grap.coop) + @author Sylvain LE GAL (https://twitter.com/legalsylvain) + License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +*/ + +import * as Chrome from "@point_of_sale/../tests/tours/helpers/ChromeTourMethods"; +import * as PosOrderToSaleOrderScreen from "./helpers/PosOrderToSaleOrderMethods.esm"; +import * as ProductScreen from "@point_of_sale/../tests/tours/helpers/ProductScreenTourMethods"; +import {registry} from "@web/core/registry"; + +registry.category("web_tour.tours").add("PosOrderToSaleOrderTour", { + test: true, + url: "/pos/ui", + steps: () => + [ + ProductScreen.confirmOpeningPopup(), + ProductScreen.clickHomeCategory(), + ProductScreen.addOrderline("Whiteboard Pen", "1"), + ProductScreen.addOrderline("Wall Shelf Unit", "1"), + ProductScreen.addCustomerNote("Product Note"), + ProductScreen.clickPartnerButton(), + ProductScreen.clickCustomer("Addison Olson"), + PosOrderToSaleOrderScreen.clickCreateOrderButton(), + PosOrderToSaleOrderScreen.clickCreateInvoicedOrderButton(), + ProductScreen.isShown(), + Chrome.endTour(), + ].flat(), +}); diff --git a/pos_order_to_sale_order/static/tests/tours/helpers/PosOrderToSaleOrderMethods.esm.js b/pos_order_to_sale_order/static/tests/tours/helpers/PosOrderToSaleOrderMethods.esm.js new file mode 100644 index 0000000000..e99b06639c --- /dev/null +++ b/pos_order_to_sale_order/static/tests/tours/helpers/PosOrderToSaleOrderMethods.esm.js @@ -0,0 +1,24 @@ +/** @odoo-module **/ +/* + Copyright 2024 Camptocamp SA (https://www.camptocamp.com). + License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +*/ + +export function clickCreateOrderButton() { + return [ + { + content: "Click on 'Create Order' Button", + trigger: ".control-buttons .control-button:contains('Create Order')", + }, + ]; +} + +export function clickCreateInvoicedOrderButton() { + return [ + { + content: "Click on 'Create invoiced order' Button", + trigger: + ".popup-create-sale-order .button-sale-order span:contains('Create Invoiced Sale Order')", + }, + ]; +} diff --git a/pos_order_to_sale_order/tests/__init__.py b/pos_order_to_sale_order/tests/__init__.py new file mode 100644 index 0000000000..d9b96c4fa5 --- /dev/null +++ b/pos_order_to_sale_order/tests/__init__.py @@ -0,0 +1 @@ +from . import test_module diff --git a/pos_order_to_sale_order/tests/test_module.py b/pos_order_to_sale_order/tests/test_module.py new file mode 100644 index 0000000000..f28b61cb39 --- /dev/null +++ b/pos_order_to_sale_order/tests/test_module.py @@ -0,0 +1,64 @@ +# Copyright (C) 2022-Today GRAP (http://www.grap.coop) +# @author Sylvain LE GAL (https://twitter.com/legalsylvain) +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html + + +from odoo.tests import tagged + +from odoo.addons.point_of_sale.tests.test_frontend import TestPointOfSaleHttpCommon + + +@tagged("post_install", "-at_install") +class TestUi(TestPointOfSaleHttpCommon): + def test_pos_order_to_sale_order(self): + self.main_pos_config.open_ui() + + # Make the test compatible with pos_minimize_menu + if "iface_important_buttons" in self.main_pos_config._fields: + self.main_pos_config.iface_important_buttons = ",".join( + [ + "CreateOrderButton", + "OrderlineCustomerNoteButton", + ] + ) + + before_orders = self.env["sale.order"].search( + [("partner_id", "=", self.env.ref("base.res_partner_address_31").id)], + order="id", + ) + + self.start_tour( + f"/pos/ui?config_id={self.main_pos_config.id}", + "PosOrderToSaleOrderTour", + login="accountman", + ) + + after_orders = self.env["sale.order"].search( + [("partner_id", "=", self.env.ref("base.res_partner_address_31").id)], + order="id", + ) + + self.assertEqual(len(before_orders) + 1, len(after_orders)) + + order = after_orders[-1] + + self.assertEqual(order.amount_total, 5.18, "Total Amount must be equal to 5.18") + self.assertEqual(order.state, "sale", "Order state must be equal to 'sale'") + self.assertEqual( + order.delivery_status, "full", "Delivery status must be equal to 'full'" + ) + self.assertEqual( + order.invoice_status, + "invoiced", + "Invoice status must be equal to 'invoiced'", + ) + self.assertNotIn( + "Product Note", + order.order_line[0].name, + "'Product Note' must contains in sale order line description", + ) + self.assertIn( + "Product Note", + order.order_line[1].name, + "'Product Note' must not contains in sale order line description", + ) diff --git a/pos_order_to_sale_order/views/view_res_config_settings.xml b/pos_order_to_sale_order/views/view_res_config_settings.xml new file mode 100644 index 0000000000..59e66898d6 --- /dev/null +++ b/pos_order_to_sale_order/views/view_res_config_settings.xml @@ -0,0 +1,30 @@ + + + + + res.config.settings + + + + + + + + + + + + + + + + + + + + + + + + +