Browse Source

Forward port pos_customer_required from 9.0

pull/319/head
Santiago J. Said 6 years ago
parent
commit
f37fbb6d16
  1. 92
      pos_customer_required/README.rst
  2. 2
      pos_customer_required/__init__.py
  3. 27
      pos_customer_required/__openerp__.py
  4. 7
      pos_customer_required/demo/pos_config.yml
  5. 111
      pos_customer_required/i18n/ca.po
  6. 112
      pos_customer_required/i18n/fr.po
  7. 104
      pos_customer_required/i18n/nl_NL.po
  8. 96
      pos_customer_required/i18n/pos_customer_required.pot
  9. 4
      pos_customer_required/models/__init__.py
  10. 26
      pos_customer_required/models/pos_config.py
  11. 27
      pos_customer_required/models/pos_make_payment.py
  12. 33
      pos_customer_required/models/pos_order.py
  13. BIN
      pos_customer_required/static/description/frontend_pos_error_message.png
  14. BIN
      pos_customer_required/static/description/icon.png
  15. 58
      pos_customer_required/static/src/js/pos_customer_required.js
  16. 20
      pos_customer_required/static/src/xml/templates.xml
  17. 2
      pos_customer_required/tests/__init__.py
  18. 38
      pos_customer_required/tests/test_pos.py
  19. 38
      pos_customer_required/views/pos_config_view.xml
  20. 27
      pos_customer_required/views/pos_order_view.xml

92
pos_customer_required/README.rst

@ -0,0 +1,92 @@
.. 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
=================================
Point Of Sale - Customer Required
=================================
This module was written to extend the functionality of odoo pos
and allows you to require a customer for each pos order. In the
pos session configuration, you can choose to require the customer for pos
orders.
If a customer is not selected, the pos ui will display an error message.
In the backend the customer field is required when needed.
Two new options are available:
* Customer 'Required before starting the order';
* Customer 'Required before paying';
'Required before starting the order' Option
-------------------------------------------
In the frontend PoS, the default screen is the screen to select customers.
* Users are not allowed to start selling before having selected a customer;
* Users can not 'deselect a customer', only select an other one;
'Required before paying' Option
-------------------------------
In the frontend PoS, the user can start selling, but if the user tries to
make payment and if a customer is not selected, the pos ui will display an
error message.
.. image:: /pos_customer_required/static/description/frontend_pos_error_message.png
Configuration
=============
To configure this module, you need to:
* go to point of sale -> configuration -> point of sales
* select the point of sales you want configure
* search for the "Require Customer" and choose between the following values:
* 'Optional'; (this module has no effect on this PoS config)
* 'Required before paying';
* 'Required before starting the order';
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/9.0
Bug Tracker
===========
Bugs are tracked on `GitHub Issues
<https://github.com/OCA/pos/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.
Credits
=======
Contributors
------------
* Jos De Graeve <Jos.DeGraeve@apertoso.be>
* Sylvain LE GAL <https://twitter.com/legalsylvain>
* Pedro M. Baeza <pedro.baeza@gmail.com> ( reviews & feedback )
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 http://odoo-community.org.

2
pos_customer_required/__init__.py

@ -0,0 +1,2 @@
# -*- coding: utf-8 -*-
from . import models

27
pos_customer_required/__openerp__.py

@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
# Copyright (C) 2004-Today Apertoso NV (<http://www.apertoso.be>)
# Copyright (C) 2016-Today: La Louve (<http://www.lalouve.net/>)
# @author: Jos DE GRAEVE (<Jos.DeGraeve@apertoso.be>)
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html
{
'name': 'Point of Sale Require Customer',
'version': '9.0.1.0.0',
'category': 'Point Of Sale',
'summary': 'Point of Sale Require Customer',
'author': 'Apertoso NV, La Louve, Odoo Community Association (OCA)',
'website': 'http://www.apertoso.be',
'depends': [
'point_of_sale',
],
'data': [
'static/src/xml/templates.xml',
'views/pos_config_view.xml',
'views/pos_order_view.xml',
],
'demo': [
'demo/pos_config.yml',
],
'installable': True,
}

7
pos_customer_required/demo/pos_config.yml

@ -0,0 +1,7 @@
# -*- coding: utf-8 -*-
# Copyright (C) 2016-Today: La Louve (<http://www.lalouve.net/>)
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
- !record {model: pos.config, id: point_of_sale.pos_config_main}:
require_customer: order

111
pos_customer_required/i18n/ca.po

@ -0,0 +1,111 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * pos_customer_required
#
# Translators:
# Marc Tormo i Bochaca <mtbochaca@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-03-28 05:50+0000\n"
"PO-Revision-Date: 2017-03-28 05:50+0000\n"
"Last-Translator: Marc Tormo i Bochaca <mtbochaca@gmail.com>, 2017\n"
"Language-Team: Catalan (https://www.transifex.com/oca/teams/23907/ca/)\n"
"Language: ca\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"
#. module: pos_customer_required
#. openerp-web
#: code:addons/pos_customer_required/static/src/js/pos_customer_required.js:25
#, python-format
msgid "An anonymous order cannot be confirmed"
msgstr "Una comanda anònima no pot ser confirmada "
#. module: pos_customer_required
#: code:addons/pos_customer_required/models/pos_make_payment.py:23
#, python-format
msgid ""
"An anonymous order cannot be confirmed.\n"
"Please select a customer for this order."
msgstr ""
"Una comanda anònima no pot ser confirmada.\n"
"Si us plau seleccioneu un client per a aquesta comanda. "
#. module: pos_customer_required
#: code:addons/pos_customer_required/models/pos_order.py:33
#, python-format
msgid "Customer is required for this order and is missing."
msgstr "En necessari que hi hagi un client per a aquesta comanda i no hi és. "
#. module: pos_customer_required
#: selection:pos.config,require_customer:0
msgid "Optional"
msgstr "Opcional "
#. module: pos_customer_required
#. openerp-web
#: code:addons/pos_customer_required/static/src/js/pos_customer_required.js:26
#, python-format
msgid "Please select a customer for this order."
msgstr "Si us plau seleccioneu un client per a aquesta comanda. "
#. module: pos_customer_required
#: model:ir.model,name:pos_customer_required.model_pos_order
msgid "Point of Sale"
msgstr "Punt de Venda "
#. module: pos_customer_required
#: model:ir.model,name:pos_customer_required.model_pos_make_payment
msgid "Point of Sale Payment"
msgstr "Pagament del Punt de Venda "
#. module: pos_customer_required
#: model:ir.model.fields,field_description:pos_customer_required.field_pos_config_require_customer
msgid "Require Customer"
msgstr "Client Requerit "
#. module: pos_customer_required
#: model:ir.model.fields,field_description:pos_customer_required.field_pos_order_require_customer
msgid "Require customer"
msgstr "Client requerit "
#. module: pos_customer_required
#: model:ir.model.fields,help:pos_customer_required.field_pos_config_require_customer
msgid ""
"Require customer for orders in this point of sale:\n"
"* 'Optional' (customer is optional);\n"
"* 'Required before paying';\n"
"* 'Required before starting the order';"
msgstr ""
"Requerir client per a comandes en aquest punt de venda:\n"
"* 'Opcional' (el client és opcional);\n"
"* 'Requerit abans de pagar';\n"
"* 'Requerit abans d'entrar la comanda';"
#. module: pos_customer_required
#: selection:pos.config,require_customer:0
msgid "Required before paying"
msgstr "Requerit abans de pagar "
#. module: pos_customer_required
#: selection:pos.config,require_customer:0
msgid "Required before starting the order"
msgstr "Requerit abans d'entrar la comanda "
#. module: pos_customer_required
#: model:ir.model.fields,help:pos_customer_required.field_pos_order_require_customer
msgid ""
"True if a customer is required to begin the order.\n"
"See the PoS Config to change this setting"
msgstr ""
"Veritable si un client es demanat per començar la comanda.\n"
"Mireu la configuració del TPV per canviar aquest paràmetre "
#. module: pos_customer_required
#: model:ir.model,name:pos_customer_required.model_pos_config
msgid "pos.config"
msgstr "pos.config"

112
pos_customer_required/i18n/fr.po

@ -0,0 +1,112 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * pos_customer_required
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
# leemannd <denis.leemann@camptocamp.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-12-21 03:45+0000\n"
"PO-Revision-Date: 2016-12-21 03:45+0000\n"
"Last-Translator: leemannd <denis.leemann@camptocamp.com>, 2016\n"
"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: pos_customer_required
#. openerp-web
#: code:addons/pos_customer_required/static/src/js/pos_customer_required.js:25
#, python-format
msgid "An anonymous order cannot be confirmed"
msgstr "Une commande anonyme ne peut pas être confirmée"
#. module: pos_customer_required
#: code:addons/pos_customer_required/models/pos_make_payment.py:23
#, python-format
msgid ""
"An anonymous order cannot be confirmed.\n"
"Please select a customer for this order."
msgstr ""
"Une commande anonyme ne peut pas être confirmée\n"
"Sélectionnez un client pour cette commande."
#. module: pos_customer_required
#: code:addons/pos_customer_required/models/pos_order.py:33
#, python-format
msgid "Customer is required for this order and is missing."
msgstr "Un client est requis et manquant."
#. module: pos_customer_required
#: selection:pos.config,require_customer:0
msgid "Optional"
msgstr "Facultatif"
#. module: pos_customer_required
#. openerp-web
#: code:addons/pos_customer_required/static/src/js/pos_customer_required.js:26
#, python-format
msgid "Please select a customer for this order."
msgstr "Sélectionnez un client pour cette commande."
#. module: pos_customer_required
#: model:ir.model,name:pos_customer_required.model_pos_order
msgid "Point of Sale"
msgstr "Point de vente"
#. module: pos_customer_required
#: model:ir.model,name:pos_customer_required.model_pos_make_payment
msgid "Point of Sale Payment"
msgstr "Paiement du ticket"
#. module: pos_customer_required
#: model:ir.model.fields,field_description:pos_customer_required.field_pos_config_require_customer
msgid "Require Customer"
msgstr "Client requis"
#. module: pos_customer_required
#: model:ir.model.fields,field_description:pos_customer_required.field_pos_order_require_customer
msgid "Require customer"
msgstr "Client requis"
#. module: pos_customer_required
#: model:ir.model.fields,help:pos_customer_required.field_pos_config_require_customer
msgid ""
"Require customer for orders in this point of sale:\n"
"* 'Optional' (customer is optional);\n"
"* 'Required before paying';\n"
"* 'Required before starting the order';"
msgstr ""
"Client requis pour les commandes de ce terminal de point de vente:\n"
"* 'Optionnel' (Le client est optionnel);\n"
"* 'Le client est requis avant le payement';\n"
"* 'Le client est requis avant de commencer la commande';"
#. module: pos_customer_required
#: selection:pos.config,require_customer:0
msgid "Required before paying"
msgstr "Requis avant de payer"
#. module: pos_customer_required
#: selection:pos.config,require_customer:0
msgid "Required before starting the order"
msgstr "Requis avant de commencer la vente"
#. module: pos_customer_required
#: model:ir.model.fields,help:pos_customer_required.field_pos_order_require_customer
msgid ""
"True if a customer is required to begin the order.\n"
"See the PoS Config to change this setting"
msgstr ""
"Vrai si un client est requis pour commencer une vente.\n"
"Voir la configuration du point de vente pour changer ce paramètre."
#. module: pos_customer_required
#: model:ir.model,name:pos_customer_required.model_pos_config
msgid "pos.config"
msgstr "pos.config"

104
pos_customer_required/i18n/nl_NL.po

@ -0,0 +1,104 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * pos_customer_required
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-12-13 19:57+0000\n"
"PO-Revision-Date: 2016-12-13 19:57+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2016\n"
"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/"
"teams/23907/nl_NL/)\n"
"Language: nl_NL\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"
#. module: pos_customer_required
#. openerp-web
#: code:addons/pos_customer_required/static/src/js/pos_customer_required.js:25
#, python-format
msgid "An anonymous order cannot be confirmed"
msgstr "Een anoniem kassa order kan niet worden bevestigd"
#. module: pos_customer_required
#: code:addons/pos_customer_required/models/pos_make_payment.py:23
#, python-format
msgid ""
"An anonymous order cannot be confirmed.\n"
"Please select a customer for this order."
msgstr ""
#. module: pos_customer_required
#: code:addons/pos_customer_required/models/pos_order.py:33
#, python-format
msgid "Customer is required for this order and is missing."
msgstr ""
#. module: pos_customer_required
#: selection:pos.config,require_customer:0
msgid "Optional"
msgstr ""
#. module: pos_customer_required
#. openerp-web
#: code:addons/pos_customer_required/static/src/js/pos_customer_required.js:26
#, python-format
msgid "Please select a customer for this order."
msgstr ""
#. module: pos_customer_required
#: model:ir.model,name:pos_customer_required.model_pos_order
msgid "Point of Sale"
msgstr "Kassa"
#. module: pos_customer_required
#: model:ir.model,name:pos_customer_required.model_pos_make_payment
msgid "Point of Sale Payment"
msgstr ""
#. module: pos_customer_required
#: model:ir.model.fields,field_description:pos_customer_required.field_pos_config_require_customer
msgid "Require Customer"
msgstr ""
#. module: pos_customer_required
#: model:ir.model.fields,field_description:pos_customer_required.field_pos_order_require_customer
msgid "Require customer"
msgstr "Klant verplichten"
#. module: pos_customer_required
#: model:ir.model.fields,help:pos_customer_required.field_pos_config_require_customer
msgid ""
"Require customer for orders in this point of sale:\n"
"* 'Optional' (customer is optional);\n"
"* 'Required before paying';\n"
"* 'Required before starting the order';"
msgstr ""
#. module: pos_customer_required
#: selection:pos.config,require_customer:0
msgid "Required before paying"
msgstr ""
#. module: pos_customer_required
#: selection:pos.config,require_customer:0
msgid "Required before starting the order"
msgstr ""
#. module: pos_customer_required
#: model:ir.model.fields,help:pos_customer_required.field_pos_order_require_customer
msgid ""
"True if a customer is required to begin the order.\n"
"See the PoS Config to change this setting"
msgstr ""
#. module: pos_customer_required
#: model:ir.model,name:pos_customer_required.model_pos_config
msgid "pos.config"
msgstr ""

96
pos_customer_required/i18n/pos_customer_required.pot

@ -0,0 +1,96 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * pos_customer_required
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 9.0c\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_customer_required
#. openerp-web
#: code:addons/pos_customer_required/static/src/js/pos_customer_required.js:25
#, python-format
msgid "An anonymous order cannot be confirmed"
msgstr ""
#. module: pos_customer_required
#: code:addons/pos_customer_required/models/pos_make_payment.py:23
#, python-format
msgid "An anonymous order cannot be confirmed.\n"
"Please select a customer for this order."
msgstr ""
#. module: pos_customer_required
#: code:addons/pos_customer_required/models/pos_order.py:33
#, python-format
msgid "Customer is required for this order and is missing."
msgstr ""
#. module: pos_customer_required
#: selection:pos.config,require_customer:0
msgid "Optional"
msgstr ""
#. module: pos_customer_required
#. openerp-web
#: code:addons/pos_customer_required/static/src/js/pos_customer_required.js:26
#, python-format
msgid "Please select a customer for this order."
msgstr ""
#. module: pos_customer_required
#: model:ir.model,name:pos_customer_required.model_pos_order
msgid "Point of Sale"
msgstr ""
#. module: pos_customer_required
#: model:ir.model,name:pos_customer_required.model_pos_make_payment
msgid "Point of Sale Payment"
msgstr ""
#. module: pos_customer_required
#: model:ir.model.fields,field_description:pos_customer_required.field_pos_config_require_customer
msgid "Require Customer"
msgstr ""
#. module: pos_customer_required
#: model:ir.model.fields,field_description:pos_customer_required.field_pos_order_require_customer
msgid "Require customer"
msgstr ""
#. module: pos_customer_required
#: model:ir.model.fields,help:pos_customer_required.field_pos_config_require_customer
msgid "Require customer for orders in this point of sale:\n"
"* 'Optional' (customer is optional);\n"
"* 'Required before paying';\n"
"* 'Required before starting the order';"
msgstr ""
#. module: pos_customer_required
#: selection:pos.config,require_customer:0
msgid "Required before paying"
msgstr ""
#. module: pos_customer_required
#: selection:pos.config,require_customer:0
msgid "Required before starting the order"
msgstr ""
#. module: pos_customer_required
#: model:ir.model.fields,help:pos_customer_required.field_pos_order_require_customer
msgid "True if a customer is required to begin the order.\n"
"See the PoS Config to change this setting"
msgstr ""
#. module: pos_customer_required
#: model:ir.model,name:pos_customer_required.model_pos_config
msgid "pos.config"
msgstr ""

4
pos_customer_required/models/__init__.py

@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
from . import pos_config
from . import pos_order
from . import pos_make_payment

26
pos_customer_required/models/pos_config.py

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
# Copyright (C) 2004-Today Apertoso NV (<http://www.apertoso.be>)
# Copyright (C) 2016-Today: La Louve (<http://www.lalouve.net/>)
# @author: Jos DE GRAEVE (<Jos.DeGraeve@apertoso.be>)
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp import fields, models
class PosConfig(models.Model):
_inherit = 'pos.config'
_REQUIRE_CUSTOMER_KEYS = [
('no', 'Optional'),
('payment', 'Required before paying'),
('order', 'Required before starting the order'),
]
require_customer = fields.Selection(
selection=_REQUIRE_CUSTOMER_KEYS,
string='Require Customer',
help="Require customer for orders in this point of sale:\n"
"* 'Optional' (customer is optional);\n"
"* 'Required before paying';\n"
"* 'Required before starting the order';")

27
pos_customer_required/models/pos_make_payment.py

@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
# Copyright (C) 2016-Today: La Louve (<http://www.lalouve.net/>)
# @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, _
from openerp.exceptions import UserError
class PosMakePayment(models.TransientModel):
_inherit = 'pos.make.payment'
@api.multi
def check(self):
# Load current order
order_obj = self.env['pos.order']
order = order_obj.browse(self.env.context.get('active_id', False))
# Check if control is required
if not order.partner_id\
and order.session_id.config_id.require_customer != 'no':
raise UserError(_(
"An anonymous order cannot be confirmed.\n"
"Please select a customer for this order."))
return super(PosMakePayment, self).check()

33
pos_customer_required/models/pos_order.py

@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
# Copyright (C) 2004-Today Apertoso NV (<http://www.apertoso.be>)
# Copyright (C) 2016-Today: La Louve (<http://www.lalouve.net/>)
# @author: Jos DE GRAEVE (<Jos.DeGraeve@apertoso.be>)
# @author: Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp import fields, models, exceptions, api
from openerp.tools.translate import _
class PosOrder(models.Model):
_inherit = 'pos.order'
@api.multi
@api.depends('session_id.config_id.require_customer')
def compute_require_customer(self):
for order in self:
order.require_customer = (
order.session_id.config_id.require_customer == 'order')
require_customer = fields.Boolean(
compute='compute_require_customer', string='Require customer',
help="True if a customer is required to begin the order.\n"
"See the PoS Config to change this setting")
@api.one
@api.constrains('partner_id', 'require_customer')
def _check_partner(self):
if (self.session_id.config_id.require_customer == 'order' and
not self.partner_id):
raise exceptions.ValidationError(
_('Customer is required for this order and is missing.'))

BIN
pos_customer_required/static/description/frontend_pos_error_message.png

After

Width: 400  |  Height: 183  |  Size: 6.8 KiB

BIN
pos_customer_required/static/description/icon.png

After

Width: 96  |  Height: 96  |  Size: 4.5 KiB

58
pos_customer_required/static/src/js/pos_customer_required.js

@ -0,0 +1,58 @@
/*
Copyright (C) 2004-Today Apertoso NV (<http://www.apertoso.be>)
Copyright (C) 2016-Today La Louve (<http://www.lalouve.net/>)
@author: Jos DE GRAEVE (<Jos.DeGraeve@apertoso.be>)
@author: Sylvain LE GAL (https://twitter.com/legalsylvain)
The licence is in the file __openerp__.py
*/
odoo.define('pos_customer_required.pos_customer_required', function (require) {
"use strict";
var screens = require('point_of_sale.screens');
var gui = require('point_of_sale.gui');
var core = require('web.core');
var _t = core._t;
screens.PaymentScreenWidget.include({
validate_order: function(options) {
if(this.pos.config.require_customer != 'no'
&& !this.pos.get('selectedOrder').get_client()){
this.gui.show_popup('error',{
'title': _t('An anonymous order cannot be confirmed'),
'body': _t('Please select a customer for this order.'),
});
return;
}
return this._super(options);
}
});
/*
Because of clientlist screen behaviour, it is not possible to simply
use: set_default_screen('clientlist') + remove cancel button on
customer screen.
Instead of,
- we overload the function : show_screen(screen_name,params,refresh),
- and we replace the required screen by the 'clientlist' screen if the
current PoS Order has no Customer.
*/
var _show_screen_ = gui.Gui.prototype.show_screen;
gui.Gui.prototype.show_screen = function(screen_name, params, refresh){
if(this.pos.config.require_customer == 'order'
&& !this.pos.get('selectedOrder').get_client()
&& screen_name != 'clientlist'){
// We call first the original screen, to avoid to break the
// 'previous screen' mecanism
_show_screen_.call(this, screen_name, params, refresh);
screen_name = 'clientlist';
}
_show_screen_.call(this, screen_name, params, refresh);
};
});

20
pos_customer_required/static/src/xml/templates.xml

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2004-Today Apertoso NV (<http://www.apertoso.be>)
Copyright (C) 2016-Today La Louve (<http://www.lalouve.net/>)
@author: Jos DE GRAEVE (<Jos.DeGraeve@apertoso.be>)
@author: Sylvain LE GAL (https://twitter.com/legalsylvain)
The licence is in the file __openerp__.py
-->
<openerp>
<data>
<template id="assets_frontend" inherit_id="point_of_sale.assets">
<xpath expr="." position="inside">
<script type="text/javascript" src="/pos_customer_required/static/src/js/pos_customer_required.js"/>
</xpath>
</template>
</data>
</openerp>

2
pos_customer_required/tests/__init__.py

@ -0,0 +1,2 @@
# -*- coding: utf-8 -*-
from . import test_pos

38
pos_customer_required/tests/test_pos.py

@ -0,0 +1,38 @@
# -*- coding: utf-8 -*-
import openerp.tests.common as common
from openerp import exceptions
class TestPosRequireCustomer(common.TransactionCase):
def setUp(self):
super(TestPosRequireCustomer, self).setUp()
def test_customer_not_required(self):
posconfig = self.env.ref('point_of_sale.pos_config_main')
posconfig.require_customer = 'no'
# Now Create new session and create a
# pos order in this session
pos_session = self.env['pos.session'].create(
{'config_id': posconfig.id})
# should not raise any exception
self.env['pos.order'].create({
'session_id': pos_session.id,
'partner_id': False,
})
def test_customer_is_required(self):
posconfig = self.env.ref('point_of_sale.pos_config_main')
posconfig.require_customer = 'order'
# Now Create new session and create a
# pos order in this session
pos_session = self.env['pos.session'].create(
{'config_id': posconfig.id})
# should raise exceptions.ValidationError
with self.assertRaises(exceptions.ValidationError):
self.env['pos.order'].create({
'session_id': pos_session.id,
'partner_id': False,
})

38
pos_customer_required/views/pos_config_view.xml

@ -0,0 +1,38 @@
<?xml version="1.0"?>
<!--
Copyright (C) 2004-Today Apertoso NV (<http://www.apertoso.be>)
Copyright (C) 2016-Today La Louve (<http://www.lalouve.net/>)
@author: Jos DE GRAEVE (<Jos.DeGraeve@apertoso.be>)
@author: Sylvain LE GAL (https://twitter.com/legalsylvain)
The licence is in the file __openerp__.py
-->
<odoo>
<record model="ir.ui.view" id="view_pos_config_form">
<field name="model">pos.config</field>
<field name="inherit_id" ref="point_of_sale.pos_config_view_form" />
<field name="arch" type="xml">
<div id="posbox_reference" position="after">
<h2>Customer Required</h2>
<div class="row mt16 o_settings_container" id="req_customer">
<div class="col-xs-12 col-md-8 o_setting_box">
<div class="o_setting_right_pane">
<label for="require_customer" string="Customer Identification"/>
<div class="text-muted">
Force customer identification
</div>
<div class="content-group mt16">
<field name="require_customer" />
</div>
</div>
</div>
</div>
</div>
</field>
</record>
</odoo>

27
pos_customer_required/views/pos_order_view.xml

@ -0,0 +1,27 @@
<?xml version="1.0"?>
<!--
Copyright (C) 2004-Today Apertoso NV (<http://www.apertoso.be>)
Copyright (C) 2016-Today La Louve (<http://www.lalouve.net/>)
@author: Jos DE GRAEVE (<Jos.DeGraeve@apertoso.be>)
@author: Sylvain LE GAL (https://twitter.com/legalsylvain)
The licence is in the file __openerp__.py
-->
<odoo>
<record model="ir.ui.view" id="view_pos_order_form">
<field name="model">pos.order</field>
<field name="inherit_id" ref="point_of_sale.view_pos_pos_form"/>
<field name="arch" type="xml">
<xpath expr="//sheet" position="inside">
<field name="require_customer" invisible="1"/>
</xpath>
<xpath expr="//field[@name='partner_id']" position="attributes">
<attribute name="attrs">{'readonly': [('state','=','invoiced')], 'required': [('require_customer','=',True)]}</attribute>
</xpath>
</field>
</record>
</odoo>
Loading…
Cancel
Save