Sylvain LE GAL
8 years ago
committed by
Pedro M. Baeza
21 changed files with 568 additions and 1 deletions
-
2.travis.yml
-
92pos_customer_required/README.rst
-
2pos_customer_required/__init__.py
-
27pos_customer_required/__openerp__.py
-
7pos_customer_required/demo/pos_config.yml
-
71pos_customer_required/i18n/fr.po
-
72pos_customer_required/i18n/nl_NL.po
-
19pos_customer_required/migrations/9.0.1.0.0/post-migration.py
-
18pos_customer_required/migrations/9.0.1.0.0/pre-migration.py
-
4pos_customer_required/models/__init__.py
-
26pos_customer_required/models/pos_config.py
-
27pos_customer_required/models/pos_make_payment.py
-
33pos_customer_required/models/pos_order.py
-
BINpos_customer_required/static/description/frontend_pos_error_message.png
-
BINpos_customer_required/static/description/icon.png
-
58pos_customer_required/static/src/js/pos_customer_required.js
-
20pos_customer_required/static/src/xml/templates.xml
-
2pos_customer_required/tests/__init__.py
-
38pos_customer_required/tests/test_pos.py
-
24pos_customer_required/views/pos_config_view.xml
-
27pos_customer_required/views/pos_order_view.xml
@ -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. |
@ -0,0 +1,2 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from . import models |
@ -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, |
|||
} |
@ -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 |
@ -0,0 +1,71 @@ |
|||
# 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" |
|||
"POT-Creation-Date: 2016-04-03 23:56+0000\n" |
|||
"PO-Revision-Date: 2016-04-03 23:56+0000\n" |
|||
"Last-Translator: <>\n" |
|||
"Language-Team: \n" |
|||
"MIME-Version: 1.0\n" |
|||
"Content-Type: text/plain; charset=UTF-8\n" |
|||
"Content-Transfer-Encoding: \n" |
|||
"Plural-Forms: \n" |
|||
|
|||
#. module: pos_customer_required |
|||
#: selection:pos.config,require_customer:0 |
|||
msgid "Optional" |
|||
msgstr "Facultatif" |
|||
|
|||
#. 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);* 'Required before paying';* 'Required before starting the order';" |
|||
msgstr "Client requis pour vendre dans le point de vente:\n" |
|||
"* 'Optional' (le client est facultatif);\n* 'Requis avant de payer';\n* 'Requis avant de commencer la vente';" |
|||
|
|||
#. 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" |
|||
|
@ -0,0 +1,72 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * pos_customer_required |
|||
# |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 8.0\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"POT-Creation-Date: 2015-06-02 15:04+0100\n" |
|||
"PO-Revision-Date: 2015-06-02 15:04+0100\n" |
|||
"Last-Translator: <>\n" |
|||
"Language-Team: \n" |
|||
"Language: nl_NL\n" |
|||
"MIME-Version: 1.0\n" |
|||
"Content-Type: text/plain; charset=UTF-8\n" |
|||
"Content-Transfer-Encoding: 8bit\n" |
|||
"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
|||
"X-Generator: Poedit 1.8\n" |
|||
|
|||
#. module: pos_customer_required |
|||
#. openerp-web |
|||
#: code:addons/pos_customer_required/static/src/js/pos_customer_required.js:16 |
|||
#, python-format |
|||
msgid "An anonymous order cannot be confirmed" |
|||
msgstr "Een anoniem kassa order kan niet worden bevestigd" |
|||
|
|||
#. module: pos_customer_required |
|||
#: view:pos.config:pos_customer_required.view_pos_config_form |
|||
msgid "Customer" |
|||
msgstr "Klant" |
|||
|
|||
#. module: pos_customer_required |
|||
#: code:addons/pos_customer_required/pos.py:45 |
|||
#, python-format |
|||
msgid "Customer is required for this order and is missing" |
|||
msgstr "Klant is vereist voor deze order en ontbreekt" |
|||
|
|||
#. module: pos_customer_required |
|||
#. openerp-web |
|||
#: code:addons/pos_customer_required/static/src/js/pos_customer_required.js:17 |
|||
#, python-format |
|||
msgid "" |
|||
"Please select a client for this order. This can be done by clicking the " |
|||
"order tab" |
|||
msgstr "" |
|||
"Selecteer een klant voor dit order. Dit kan gedaan worden door te klikken op " |
|||
"de tab bestelling" |
|||
|
|||
#. module: pos_customer_required |
|||
#: model:ir.model,name:pos_customer_required.model_pos_order |
|||
msgid "Point of Sale" |
|||
msgstr "Kassa" |
|||
|
|||
#. module: pos_customer_required |
|||
#: field:pos.config,require_customer:0 |
|||
msgid "Require customer" |
|||
msgstr "Klant verplichten" |
|||
|
|||
#. module: pos_customer_required |
|||
#: help:pos.config,require_customer:0 |
|||
msgid "Require customer for orders in this point of sale" |
|||
msgstr "Klant verplichten voor kassa orders in deze kassa." |
|||
|
|||
#. module: pos_customer_required |
|||
#: view:pos.order:pos_customer_required.view_pos_pos_form_inherit |
|||
msgid "" |
|||
"{'readonly': [('state','=','invoiced')], 'required': " |
|||
"[('require_customer','=',True)]}" |
|||
msgstr "" |
|||
|
|||
#~ msgid "Require customer for pos orders in the frontend" |
|||
#~ msgstr "Klant verplichten voor kassa orders in deze kassa." |
@ -0,0 +1,19 @@ |
|||
# -*- 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 openupgradelib import openupgrade |
|||
|
|||
|
|||
BOOLEAN_TO_SELECTION = [ |
|||
('false', 'no'), |
|||
('true', 'order'), |
|||
] |
|||
|
|||
|
|||
@openupgrade.migrate() |
|||
def migrate(cr, installed_version): |
|||
openupgrade.map_values( |
|||
cr, openupgrade.get_legacy_name('require_customer'), |
|||
'require_customer', BOOLEAN_TO_SELECTION, table='pos_config') |
@ -0,0 +1,18 @@ |
|||
# -*- 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 openupgradelib import openupgrade |
|||
|
|||
|
|||
column_renames = { |
|||
'pos_config': [ |
|||
('require_customer', None), |
|||
] |
|||
} |
|||
|
|||
|
|||
@openupgrade.migrate() |
|||
def migrate(cr, version): |
|||
openupgrade.rename_columns(cr, column_renames) |
@ -0,0 +1,4 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from . import pos_config |
|||
from . import pos_order |
|||
from . import pos_make_payment |
@ -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';") |
@ -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() |
@ -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.')) |
After Width: 400 | Height: 183 | Size: 6.8 KiB |
After Width: 96 | Height: 96 | Size: 4.5 KiB |
@ -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); |
|||
}; |
|||
|
|||
}); |
@ -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> |
@ -0,0 +1,2 @@ |
|||
# -*- coding: utf-8 -*- |
|||
from . import test_pos |
@ -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, |
|||
}) |
@ -0,0 +1,24 @@ |
|||
<?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.view_pos_config_form" /> |
|||
<field name="arch" type="xml"> |
|||
<field name="iface_tax_included" position="after"> |
|||
<field name="require_customer" /> |
|||
</field> |
|||
</field> |
|||
</record> |
|||
|
|||
</odoo> |
@ -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> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue