Browse Source
Merge pull request #3 from grap/7.0-pos_select_customer
Merge pull request #3 from grap/7.0-pos_select_customer
[ADD] 7.0 'pos_select_customer' to select customer in Front End POSpull/14/head
Sylvain LE GAL
10 years ago
7 changed files with 752 additions and 0 deletions
-
22pos_select_customer/__init__.py
-
76pos_select_customer/__openerp__.py
-
74pos_select_customer/i18n/fr.po
-
168pos_select_customer/static/src/css/psc.css
-
BINpos_select_customer/static/src/img/icon.png
-
309pos_select_customer/static/src/js/psc.js
-
103pos_select_customer/static/src/xml/psc.xml
@ -0,0 +1,22 @@ |
|||
# -*- encoding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Point Of Sale - Select Customer module for OpenERP |
|||
# Copyright (C) 2013-2014 GRAP (http://www.grap.coop) |
|||
# @author Julien WESTE |
|||
# @author Sylvain LE GAL (https://twitter.com/legalsylvain) |
|||
# |
|||
# This program is free software: you can redistribute it and/or modify |
|||
# it under the terms of the GNU Affero General Public License as |
|||
# published by the Free Software Foundation, either version 3 of the |
|||
# License, or (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU Affero General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU Affero General Public License |
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
@ -0,0 +1,76 @@ |
|||
# -*- encoding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Point Of Sale - Select Customer module for OpenERP |
|||
# Copyright (C) 2014 GRAP (http://www.grap.coop) |
|||
# @author Julien WESTE |
|||
# @author Sylvain LE GAL (https://twitter.com/legalsylvain) |
|||
# |
|||
# This program is free software: you can redistribute it and/or modify |
|||
# it under the terms of the GNU Affero General Public License as |
|||
# published by the Free Software Foundation, either version 3 of the |
|||
# License, or (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU Affero General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU Affero General Public License |
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
|
|||
{ |
|||
'name': 'Point Of Sale - Select Customers', |
|||
'summary': 'Allow users to select a customer in Front End Point Of Sale', |
|||
'version': '0.1', |
|||
'category': 'Point Of Sale', |
|||
'description': """ |
|||
Allow users to select a customer in Front End Point Of Sale |
|||
=========================================================== |
|||
|
|||
Functionality: |
|||
-------------- |
|||
* Allow user to set a customer to a pos order in front end views; |
|||
|
|||
Possible improvements and fix: |
|||
------------------------------ |
|||
* This module displays all the customers. That can be long to display |
|||
if there are a lot of customers in database; Display only 80 could be a |
|||
solution; |
|||
* Images of customers are loaded each time; Similar behaviour as |
|||
products image management (with cache) could be developped; |
|||
|
|||
NON Covered features: |
|||
--------------------- |
|||
* Possibility to create customers in front end views; |
|||
* Possibility to change price if customer has a list price different as |
|||
the default list price; (Big stuff); |
|||
* Possibility to see if the partner has not the default price list; |
|||
* Possibility to invoice in front-end views; |
|||
|
|||
Copyright, Authors and Licence: |
|||
------------------------------- |
|||
* Copyright: 2014, GRAP: Groupement Régional Alimentaire de Proximité; |
|||
* Author: |
|||
* Julien WESTE; |
|||
* Sylvain LE GAL (https://twitter.com/legalsylvain); |
|||
* Licence: AGPL-3 (http://www.gnu.org/licenses/);""", |
|||
'author': 'GRAP', |
|||
'website': 'http://www.grap.coop', |
|||
'license': 'AGPL-3', |
|||
'depends': [ |
|||
'point_of_sale', |
|||
'pos_second_header', |
|||
], |
|||
'qweb': [ |
|||
'static/src/xml/psc.xml', |
|||
], |
|||
'js': [ |
|||
'static/src/js/psc.js', |
|||
], |
|||
'css': [ |
|||
'static/src/css/psc.css', |
|||
], |
|||
} |
@ -0,0 +1,74 @@ |
|||
# -*- encoding: utf-8 -*- |
|||
############################################################################## |
|||
# |
|||
# Point Of Sale - Select Customer module for OpenERP |
|||
# Copyright (C) 2013-2014 GRAP (http://www.grap.coop) |
|||
# @author Julien WESTE |
|||
# @author Sylvain LE GAL (https://twitter.com/legalsylvain) |
|||
# |
|||
# This program is free software: you can redistribute it and/or modify |
|||
# it under the terms of the GNU Affero General Public License as |
|||
# published by the Free Software Foundation, either version 3 of the |
|||
# License, or (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU Affero General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU Affero General Public License |
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################## |
|||
# Translation of OpenERP Server. |
|||
# This file contains the translation of the following modules: |
|||
# * pos_select_customer |
|||
# |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: OpenERP Server 7.0\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"POT-Creation-Date: 2014-04-16 16:31+0000\n" |
|||
"PO-Revision-Date: 2014-04-16 16:31+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_select_customer |
|||
#. openerp-web |
|||
#: code:addons/pos_select_customer/static/src/xml/psc.xml:48 |
|||
#, python-format |
|||
msgid "Cancel" |
|||
msgstr "Annuler" |
|||
|
|||
#. module: pos_select_customer |
|||
#. openerp-web |
|||
#: code:addons/pos_select_customer/static/src/js/psc.js:57 |
|||
#, python-format |
|||
msgid "Customer" |
|||
msgstr "Client" |
|||
|
|||
#. module: pos_select_customer |
|||
#. openerp-web |
|||
#: code:addons/pos_select_customer/static/src/xml/psc.xml:41 |
|||
#, python-format |
|||
msgid "Customer Selection" |
|||
msgstr "Sélection d'un client" |
|||
|
|||
#. module: pos_select_customer |
|||
#. openerp-web |
|||
#: code:addons/pos_select_customer/static/src/js/psc.js:68 |
|||
#, python-format |
|||
msgid "Del." |
|||
msgstr "Suppr." |
|||
|
|||
#. module: pos_select_customer |
|||
#. openerp-web |
|||
#: code:addons/pos_select_customer/static/src/xml/psc.xml:45 |
|||
#, python-format |
|||
msgid "Search Customers" |
|||
msgstr "Rechercher des clients" |
|||
|
@ -0,0 +1,168 @@ |
|||
/****************************************************************************** |
|||
Point Of Sale - Select Customer module for OpenERP |
|||
Copyright (C) 2014 GRAP (http://www.grap.coop) |
|||
@author Julien WESTE |
|||
@author Sylvain LE GAL (https://twitter.com/legalsylvain) |
|||
|
|||
This program is free software: you can redistribute it and/or modify |
|||
it under the terms of the GNU Affero General Public License as |
|||
published by the Free Software Foundation, either version 3 of the |
|||
License, or (at your option) any later version. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU Affero General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU Affero General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
******************************************************************************/ |
|||
|
|||
/* ********* Current customer name ********* */ |
|||
|
|||
.point-of-sale #rightheader #customer-name{ |
|||
width:200px; |
|||
} |
|||
.point-of-sale #rightheader #remove-customer-button{ |
|||
width:80px; |
|||
} |
|||
|
|||
/* ********* Customer PopUp ********* */ |
|||
.point-of-sale .modal-dialog .popup-select-customer{ |
|||
margin-left:0; |
|||
margin-top:0; |
|||
left:5%; |
|||
width: 90%; |
|||
top:5%; |
|||
height:90%; |
|||
} |
|||
.point-of-sale .modal-dialog .popup-select-customer .customer-header{ |
|||
height:65px; |
|||
} |
|||
|
|||
.point-of-sale .modal-dialog .popup-select-customer #customer-title{ |
|||
/* text-align:left;*/ |
|||
} |
|||
.point-of-sale .modal-dialog .popup-select-customer .customer-searchbox{ |
|||
float:left; |
|||
top: 20px; |
|||
position: absolute; |
|||
left: 10px; |
|||
} |
|||
.point-of-sale .modal-dialog .popup-select-customer #customer-cancel{ |
|||
top: 0px; |
|||
position: absolute; |
|||
right: 10px; |
|||
} |
|||
/* ********* Customer List ********* */ |
|||
|
|||
.point-of-sale .customer-list { |
|||
padding:10px !important; |
|||
} |
|||
|
|||
.point-of-sale .customer-list-container { |
|||
position:absolute; |
|||
top:70px; |
|||
bottom:0px; |
|||
left:0px; |
|||
right:0px; |
|||
} |
|||
|
|||
.point-of-sale .customer-list-scroller{ |
|||
-webkit-box-sizing: border-box; |
|||
-moz-box-sizing: border-box; |
|||
-ms-box-sizing: border-box; |
|||
box-sizing: border-box; |
|||
width:100%; |
|||
height:100%; |
|||
overflow: hidden; |
|||
} |
|||
|
|||
/* ********* Customer Scrollbar ********* */ |
|||
/* Fix incorrect display of buttons.*/ |
|||
/* TODO: found why it is necessary and remove top,bottom and left values*/ |
|||
.point-of-sale .customer-list-container .scrollbar .up-button{ |
|||
top: -10px; |
|||
left: -5px; |
|||
} |
|||
.point-of-sale .customer-list-container .scrollbar .down-button { |
|||
left: -5px; |
|||
bottom: -5px; |
|||
} |
|||
|
|||
/* ********* Customer Item ********* */ |
|||
|
|||
.point-of-sale .customer { |
|||
position:relative; |
|||
vertical-align: top; |
|||
display: inline-block; |
|||
font-size: 11px; |
|||
margin: 5px !important; |
|||
width: 200px; |
|||
height:110px; |
|||
background:#fff; |
|||
border: 1px solid #fff; |
|||
border-radius: 3px; |
|||
overflow: hidden; |
|||
-webkit-box-shadow: 0px 2px 0px #dad8e4, 0px 1px 8px #636480; |
|||
-moz-box-shadow: 0px 2px 0px #dad8e4, 0px 1px 8px #636480; |
|||
box-shadow: 0px 2px 0px #dad8e4, 0px 1px 8px #636480; |
|||
} |
|||
|
|||
.point-of-sale .customer .customer-name, |
|||
.point-of-sale .customer .customer-email, |
|||
.point-of-sale .customer .customer-address, |
|||
.point-of-sale .customer .customer-phone, |
|||
.point-of-sale .customer .customer-mobile{ |
|||
position: absolute; |
|||
-webkit-box-sizing: border-box; |
|||
-moz-box-sizing: border-box; |
|||
-ms-box-sizing: border-box; |
|||
box-sizing: border-box; |
|||
|
|||
text-align:left; |
|||
overflow: hidden; |
|||
text-overflow: ellipsis; |
|||
background: -webkit-linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1)); |
|||
background: -moz-linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1)); |
|||
background: -ms-linear-gradient(-90deg,rgba(255,255,255,0),rgba(255,255,255,1), rgba(255,255,255,1)); |
|||
padding: 3px; |
|||
} |
|||
.point-of-sale .customer .customer-name{ |
|||
font-size: 13px; |
|||
width:100%; |
|||
top:0px; |
|||
height: 20px; |
|||
} |
|||
.point-of-sale .customer .customer-email{ |
|||
width:100%; |
|||
top:24px; |
|||
height: 16px; |
|||
} |
|||
.point-of-sale .customer .customer-img { |
|||
position: absolute; |
|||
top: 44px; |
|||
left: 0px; |
|||
width: 64px; |
|||
height: 64px; |
|||
background: white; |
|||
text-align: center; |
|||
} |
|||
.point-of-sale .customer .customer-address{ |
|||
width:135px; |
|||
top:44px; |
|||
left: 65px; |
|||
height: 32px; |
|||
} |
|||
.point-of-sale .customer .customer-phone{ |
|||
width:135px; |
|||
top:76px; |
|||
left: 65px; |
|||
height: 16px; |
|||
} |
|||
.point-of-sale .customer .customer-mobile{ |
|||
width:135px; |
|||
top:92px; |
|||
left: 65px; |
|||
height: 16px; |
|||
} |
After Width: 64 | Height: 64 | Size: 3.6 KiB |
@ -0,0 +1,309 @@ |
|||
/****************************************************************************** |
|||
Point Of Sale - Select Customer module for OpenERP |
|||
Copyright (C) 2014 GRAP (http://www.grap.coop)
|
|||
@author Julien WESTE |
|||
@author Sylvain LE GAL (https://twitter.com/legalsylvain)
|
|||
|
|||
This program is free software: you can redistribute it and/or modify |
|||
it under the terms of the GNU Affero General Public License as |
|||
published by the Free Software Foundation, either version 3 of the |
|||
License, or (at your option) any later version. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU Affero General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU Affero General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
******************************************************************************/ |
|||
|
|||
openerp.pos_select_customer = function (instance) { |
|||
module = instance.point_of_sale; |
|||
_t = instance.web._t; |
|||
|
|||
/************************************************************************* |
|||
Define : CustomerOrderWidget that display the name of the customer |
|||
of the current pos order and display button to select of remove it. |
|||
*/ |
|||
module.CustomerOrderWidget = module.PosBaseWidget.extend({ |
|||
template: 'CustomerOrderWidget', |
|||
|
|||
/* Overload Section */ |
|||
init: function(parent, options){ |
|||
this._super(parent,options); |
|||
this.pos.bind('change:selectedOrder', this.refresh, this); |
|||
}, |
|||
|
|||
start: function(){ |
|||
this._super(); |
|||
this._build_widgets(); |
|||
}, |
|||
|
|||
/* Custom Section */ |
|||
refresh: function(){ |
|||
this.renderElement(); |
|||
this._build_widgets(); |
|||
}, |
|||
|
|||
_build_widgets: function(){ |
|||
// Create a button to open the customer popup
|
|||
this.select_customer_button = new module.HeaderButtonWidget(this,{ |
|||
label:_t('Customer'), |
|||
action: function(){ |
|||
self.screen_selector.show_popup('select-customer'); |
|||
}, |
|||
}); |
|||
this.select_customer_button.replace($('.placeholder-SelectCustomerButton')); |
|||
this.select_customer_button.renderElement(); |
|||
|
|||
if (this.get_name() !== ''){ |
|||
// Create a button to remove the current customer
|
|||
this.remove_customer_button = new module.HeaderButtonWidget(this,{ |
|||
label:_t('Del.'), |
|||
action: function(){ |
|||
this.pos.get('selectedOrder').set_client(undefined); |
|||
this.pos_widget.customer_order.refresh(); |
|||
this.hide(); |
|||
}, |
|||
}); |
|||
this.remove_customer_button.replace($('.placeholder-RemoveCustomerButton')); |
|||
this.remove_customer_button.renderElement(); |
|||
} |
|||
}, |
|||
|
|||
get_name: function(){ |
|||
customer = this.pos.get('selectedOrder').get_client(); |
|||
if(customer){ |
|||
return customer.name; |
|||
}else{ |
|||
return ""; |
|||
} |
|||
}, |
|||
}); |
|||
|
|||
/************************************************************************* |
|||
Define : CustomerWidget that display a customer |
|||
*/ |
|||
module.CustomerWidget = module.PosBaseWidget.extend({ |
|||
template: 'CustomerWidget', |
|||
|
|||
/* Overload Section */ |
|||
init: function(parent, options) { |
|||
this._super(parent,options); |
|||
this.model = options.model; |
|||
}, |
|||
|
|||
renderElement: function() { |
|||
this._super(); |
|||
this.$('img').replaceWith(this.pos_widget.image_cache.get_image(this.model.get_image_small_url())); |
|||
var self = this; |
|||
$("a", this.$el).click(function(e){ |
|||
self.pos.get('selectedOrder').set_client(self.model.toJSON()); |
|||
self.pos_widget.customer_order.refresh(); |
|||
self.pos_widget.screen_selector.set_current_screen('products'); |
|||
}); |
|||
}, |
|||
}); |
|||
|
|||
/************************************************************************* |
|||
Define : CustomerListScreenWidget that display a list of customers. |
|||
*/ |
|||
module.CustomerListScreenWidget = module.ScreenWidget.extend({ |
|||
template:'CustomerListScreenWidget', |
|||
|
|||
init: function(parent, options) { |
|||
this._super(parent,options); |
|||
this.customer_list = []; |
|||
}, |
|||
|
|||
start: function() { |
|||
this._super(); |
|||
var self = this; |
|||
}, |
|||
|
|||
renderElement: function() { |
|||
this._super(); |
|||
var self = this; |
|||
// Delete old customers widget and display refreshed customers list
|
|||
for(var i = 0, len = this.customer_list.length; i < len; i++){ |
|||
this.customer_list[i].destroy(); |
|||
} |
|||
this.customer_list = []; |
|||
var customers = this.pos.get('customer_list_filter') || []; |
|||
for(var i = 0, len = customers.models.length; i < len; i++){ |
|||
var customer = new module.CustomerWidget(this, { |
|||
model: customers.models[i], |
|||
click_product_action: this.click_product_action, |
|||
}); |
|||
this.customer_list.push(customer); |
|||
customer.appendTo(this.$('.customer-list')); |
|||
} |
|||
|
|||
// Delete old scrollbar widget and display refreshed scrollbar
|
|||
if(this.scrollbar){ |
|||
this.scrollbar.destroy(); |
|||
} |
|||
this.scrollbar = new module.ScrollbarWidget(this,{ |
|||
target_widget: this, |
|||
target_selector: '.customer-list-scroller', |
|||
on_show: function(){ |
|||
self.$('.customer-list-scroller').css({'padding-right':'62px'},100); |
|||
}, |
|||
on_hide: function(){ |
|||
self.$('.customer-list-scroller').css({'padding-right':'0px'},100); |
|||
}, |
|||
}); |
|||
this.scrollbar.replace(this.$('.placeholder-ScrollbarWidget')); |
|||
}, |
|||
}), |
|||
|
|||
/************************************************************************* |
|||
Define : SelectCustomerPopupWidget that display a pop up to search |
|||
and select customers. |
|||
*/ |
|||
module.SelectCustomerPopupWidget = module.PopUpWidget.extend({ |
|||
template:'SelectCustomerPopupWidget', |
|||
|
|||
start: function(){ |
|||
this._super(); |
|||
var self = this; |
|||
this.customer_list_widget = new module.CustomerListScreenWidget(this,{}); |
|||
}, |
|||
|
|||
show: function(){ |
|||
this._super(); |
|||
var self = this; |
|||
this.reset_customers(); |
|||
this.customer_list_widget.replace($('.placeholder-CustomerListScreenWidget')); |
|||
this.$('#customer-cancel').off('click').click(function(){ |
|||
self.pos_widget.screen_selector.set_current_screen('products'); |
|||
}); |
|||
// filter customers according to the search string
|
|||
this.$('.customer-searchbox input').keyup(function(event){ |
|||
pattern = $(this).val().toLowerCase(); |
|||
if(pattern){ |
|||
var customers = self.pos.get('customer_list').search_customer(pattern); |
|||
self.pos.set({'customer_list_filter' : customers}); |
|||
self.$('.customer-search-clear').fadeIn(); |
|||
self.customer_list_widget.renderElement(); |
|||
} |
|||
else{ |
|||
self.reset_customers(); |
|||
} |
|||
}); |
|||
//reset the search when clicking on reset
|
|||
this.$('.customer-search-clear').click(function(){ |
|||
self.reset_customers(); |
|||
}); |
|||
}, |
|||
|
|||
reset_customers: function(){ |
|||
this.pos.set({'customer_list_filter' : this.pos.get('customer_list')}); |
|||
this.$('.customer-search-clear').fadeOut(); |
|||
this.customer_list_widget.renderElement(); |
|||
this.$('.customer-searchbox input').val('').focus(); |
|||
}, |
|||
|
|||
}); |
|||
|
|||
|
|||
/************************************************************************* |
|||
Overload : PosWidget to include button in PosOrderHeaderWidget widget |
|||
to select or unselect customers |
|||
*/ |
|||
module.PosWidget = module.PosWidget.extend({ |
|||
|
|||
build_widgets: function(){ |
|||
this._super(); |
|||
var self = this; |
|||
|
|||
// Add a widget to manage customer
|
|||
this.customer_order = new module.CustomerOrderWidget(this,{}); |
|||
this.customer_order.appendTo(this.$('#pos_order_header')); |
|||
|
|||
// create a pop up 'select-customer' to search and select customers
|
|||
this.select_customer_popup = new module.SelectCustomerPopupWidget(this, {}); |
|||
this.select_customer_popup.appendTo($('.point-of-sale')); |
|||
this.select_customer_popup.hide(); |
|||
this.screen_selector.popup_set['select-customer'] = this.select_customer_popup; |
|||
|
|||
}, |
|||
}); |
|||
|
|||
/************************************************************************* |
|||
Define : New Model 'Customer' |
|||
*/ |
|||
module.Customer = Backbone.Model.extend({ |
|||
get_image_small_url: function(){ |
|||
return instance.session.url('/web/binary/image', {model: 'res.partner', field: 'image_small', id: this.get('id')}); |
|||
}, |
|||
}); |
|||
|
|||
module.CustomerCollection = Backbone.Collection.extend({ |
|||
model: module.Customer, |
|||
|
|||
search_customer: function(pattern){ |
|||
res = new module.CustomerCollection(); |
|||
var reg = RegExp(pattern,"i"); |
|||
for(var i = 0, len = this.models.length; i < len; i++){ |
|||
res_reg = reg.exec(this.models[i].attributes.name); |
|||
if (res_reg){ |
|||
res.push(this.models[i]); |
|||
} |
|||
} |
|||
return res; |
|||
}, |
|||
}); |
|||
|
|||
/* |
|||
Overload: PosModel.initialize() to define two new lists. |
|||
'customer_list' are the list of all customers available; |
|||
'customer_list_filter' are a sub-list according to the current filter |
|||
selection. |
|||
*/ |
|||
var _initialize_ = module.PosModel.prototype.initialize; |
|||
module.PosModel.prototype.initialize = function(session, attributes){ |
|||
_initialize_.call(this, session, attributes); |
|||
this.set({ |
|||
'customer_list': new module.CustomerCollection(), |
|||
'customer_list_filter': new module.CustomerCollection(), |
|||
}); |
|||
}; |
|||
|
|||
/* |
|||
Overload: PosModel.load_server_data() function to get in memory |
|||
customers. |
|||
The function will load all usefull informations even if any |
|||
informations won't be used in this module, to allow further modules |
|||
to use them. |
|||
*/ |
|||
var _load_server_data_ = module.PosModel.prototype.load_server_data; |
|||
module.PosModel.prototype.load_server_data = function(){ |
|||
var self = this; |
|||
var load_def = _load_server_data_.call(self).done(self.load_customers_data()); |
|||
return load_def; |
|||
}, |
|||
|
|||
module.PosModel = module.PosModel.extend({ |
|||
load_customers_data: function(){ |
|||
var self = this; |
|||
var loaded = self.fetch( |
|||
'res.partner', |
|||
['name','display_name','title','function','type', |
|||
'parent_id','is_company', |
|||
'lang','company_id','ean13','color', |
|||
'contact_address','street','street2','city','zip','state_id','country_id', |
|||
'property_product_pricelist','vat','debit_limit','credit_limit', |
|||
'email','website','fax','phone','mobile',], |
|||
[['customer', '=', true]]) |
|||
.then(function(customers){ |
|||
console.log(customers); |
|||
self.set({'customer_list' : new module.CustomerCollection(customers)}); |
|||
self.set({'customer_list_filter' : new module.CustomerCollection(customers)}); |
|||
}); |
|||
return loaded; |
|||
}, |
|||
}); |
|||
}; |
|||
|
@ -0,0 +1,103 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!-- ********************************************************************** --> |
|||
<!--Point Of Sale - Select Customer module for OpenERP --> |
|||
<!--Copyright (C) 2014 GRAP (http://www.grap.coop) --> |
|||
<!--@author Julien WESTE --> |
|||
<!--@author Sylvain LE GAL (https://twitter.com/legalsylvain) --> |
|||
|
|||
<!--This program is free software: you can redistribute it and/or modify --> |
|||
<!--it under the terms of the GNU Affero General Public License as --> |
|||
<!--published by the Free Software Foundation, either version 3 of the --> |
|||
<!--License, or (at your option) any later version. --> |
|||
|
|||
<!--This program is distributed in the hope that it will be useful, --> |
|||
<!--but WITHOUT ANY WARRANTY; without even the implied warranty of --> |
|||
<!--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --> |
|||
<!--GNU Affero General Public License for more details. --> |
|||
|
|||
<!--You should have received a copy of the GNU Affero General Public License--> |
|||
<!--along with this program. If not, see <http://www.gnu.org/licenses/>. --> |
|||
<!-- ********************************************************************** --> |
|||
<templates id="template" xml:space="preserve"> |
|||
|
|||
<t t-name="CustomerOrderWidget"> |
|||
<div class="extra-label"> |
|||
<span class="placeholder-SelectCustomerButton" /> |
|||
</div> |
|||
<div id="customer-name" class="extra-label"> |
|||
<div class="extra-text"> |
|||
<t t-esc="widget.get_name()" /> |
|||
</div> |
|||
</div> |
|||
<div id="remove-customer-button" class="extra-label"> |
|||
<span class="placeholder-RemoveCustomerButton" /> |
|||
</div> |
|||
</t> |
|||
|
|||
<t t-name="SelectCustomerPopupWidget"> |
|||
<div class="modal-dialog"> |
|||
<div class="popup popup-select-customer"> |
|||
<div class="customer-header"> |
|||
<div id="customer-title"> |
|||
Customer Selection |
|||
</div> |
|||
<div class="customer-searchbox"> |
|||
<input placeholder="Search Customers" /> |
|||
<img class="customer-search-clear" src="/point_of_sale/static/src/img/search_reset.gif" /> |
|||
</div> |
|||
<div id="customer-cancel" class="button"> |
|||
Cancel |
|||
</div> |
|||
</div> |
|||
<div class="content-container"> |
|||
<span class="placeholder-CustomerListScreenWidget" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</t> |
|||
|
|||
<t t-name="CustomerListScreenWidget"> |
|||
<div class='customer-list-container'> |
|||
<div class="customer-list-scroller"> |
|||
<ol id="customer-screen-ol" class="customer-list"> |
|||
</ol> |
|||
</div> |
|||
<div class="shadow-top"></div> |
|||
<span class="placeholder-ScrollbarWidget" /> |
|||
</div> |
|||
</t> |
|||
|
|||
<t t-name="CustomerWidget"> |
|||
<li class='customer'> |
|||
<a href="#"> |
|||
<div class="customer-img"> |
|||
<img sr='' /> |
|||
</div> |
|||
<div class="customer-name"> |
|||
<t t-esc="widget.model.get('name')"/> |
|||
</div> |
|||
<div class="customer-email"> |
|||
<t t-if="widget.model.get('email')"> |
|||
<t t-esc="widget.model.get('email')"/> |
|||
</t> |
|||
</div> |
|||
<div class="customer-address"> |
|||
<t t-if="widget.model.get('contact_address')"> |
|||
<t t-esc="widget.model.get('contact_address')"/> |
|||
</t> |
|||
</div> |
|||
<div class="customer-phone"> |
|||
<t t-if="widget.model.get('phone')"> |
|||
<t t-esc="widget.model.get('phone')"/> |
|||
</t> |
|||
</div> |
|||
<div class="customer-mobile"> |
|||
<t t-if="widget.model.get('mobile')"> |
|||
<t t-esc="widget.model.get('mobile')"/> |
|||
</t> |
|||
</div> |
|||
</a> |
|||
</li> |
|||
</t> |
|||
|
|||
</templates> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue