1 function openerp_pos_membership_widgets(instance
, module
){
2 module
.PartnerWidget
= module
.PosBaseWidget
.extend({
3 template
: 'PartnerWidget',
4 init: function(parent
, options
){
5 this._super(parent
,options
);
6 this.model
= options
.model
;
7 this.next_screen
= options
.next_screen
; //when a partner is clicked, this screen is set
8 this.click_partner_action
= options
.click_partner_action
;
10 renderElement: function(){
11 // NOTE: returns the url of the partner thumbnail
12 //console.log("[pos_membership] [PartnerWidget] [renderElement]");
14 this.$('img').replaceWith(this.pos_widget
.image_cache
.get_image(this.model
.get_image_url()));
16 $("a", this.$el
).click(function(e
){
17 if(self
.click_partner_action
){
18 self
.click_partner_action(self
.model
);
23 module
.PartnerSearchWidget
= module
.PosBaseWidget
.extend({
24 template
: 'PartnerSearchWidget',
25 init: function(parent
, options
){
27 this._super(parent
,options
);
29 get_image_url: function(partner
){
30 return instance
.session
.url('/web/binary/image', {model
: 'res.partner', field
: 'image', id
: partner
.id
});
32 renderElement: function(){
33 //console.log("[pos_membership] [PartnerSearchWidget] [renderElement]");
38 filter: function(category
){
41 var partners
= self
.pos
.db
.get_partner_list();
42 //console.log("[pos_membership] [PartnerSearchWidget] [filter] partners=",partners);
43 self
.pos
.get('partners').reset(partners
);
45 this.$('.searchbox input').keyup(function(){
46 query
= $(this).val();
48 //console.log("[pos_membership] [PartnerSearchWidget] [filter]: query:", query);
49 var partners
= self
.pos
.db
.search_partner(query
);
50 self
.pos
.get('partners').reset(partners
);
51 //if(partners.length == 0) {
52 //console.log("[pos_membership] [PartnerSearchWidget] [filter]: no result");
54 self
.$('.search-create').fadeIn();
56 // self.$('.search-create').fadeOut();
58 self
.$('.search-clear').fadeIn();
61 var partners
= self
.pos
.db
.get_partner_list();
62 self
.pos
.get('partners').reset(partners
);
63 self
.$('.search-clear').fadeOut();
64 self
.$('.search-create').fadeOut();
67 this.$('.searchbox input').click(function(){}); //Why ???
68 this.$('.search-clear').click(function(){
69 var partners
= self
.pos
.db
.get_partner_list();
70 self
.pos
.get('partners').reset(partners
);
71 self
.$('.searchbox input').val('').focus();
72 self
.$('.search-clear').fadeOut();
73 self
.$('.search-create').fadeOut();
75 this.$('.search-create').click(function(){
76 var partners
= self
.pos
.db
.get_partner_list();
77 self
.pos
.get('partners').reset(partners
);
78 self
.$('.searchbox input').val('').focus();
79 self
.$('.search-clear').fadeOut();
80 self
.$('.search-create').fadeOut();
81 //console.log("[pos_membership] [PartnerSearchWidget] [filter] [search-create] query=",self.query);
82 self
.pos
.add_new_partner({name
:self
.query
});
83 self
.pos_widget
.screen_selector
.set_current_screen('partner_create');
87 module
.PartnerListWidget
= module
.ScreenWidget
.extend({
88 template
:'PartnerListWidget',
89 init: function(parent
, options
) {
90 //console.log("[pos_membership] [PartnerListWidget] [init]");
92 this._super(parent
, options
);
93 this.model
= options
.model
;
94 this.partnerwidgets
= [];
95 this.weight
= options
.weight
|| 0;
96 this.show_scale
= options
.show_scale
|| false;
97 this.next_screen
= options
.next_screen
|| false;
98 this.back_screen
= options
.back_screen
|| false;
99 this.click_partner_action
= options
.click_partner_action
;
101 this.pos
.get('partners').bind('reset', function(){
102 //console.log("[pos_membership] [PartnerListWidget] [bind] [reset]");
103 self
.renderElement();
106 renderElement: function() {
107 //console.log("[pos_membership] [PartnerListWidget] [renderElement]");
111 // free subwidgets memory from previous renders
112 for(var i
= 0, len
= this.partnerwidgets
.length
; i
< len
; i
++){
113 this.partnerwidgets
[i
].destroy();
115 this.partnerwidgets
= [];
117 this.scrollbar
.destroy();
119 var partners
= this.pos
.get('partners').models
|| [];
120 for(var i
= 0, len
= partners
.length
; i
< len
; i
++){
121 //console.log("[pos_membership] [PartnerListWidget] [renderElement]: partners[i].get('name')=",partners[i].get('name'));
122 var partner
= new module
.PartnerWidget(self
, {
124 click_partner_action
: this.click_partner_action
,
126 this.partnerwidgets
.push(partner
);
127 partner
.appendTo(this.$('.partner-list'));
129 this.scrollbar
= new module
.ScrollbarWidget(this,{
131 target_selector
: '.partner-list-scroller',
133 self
.$('.partner-list-scroller').css({'padding-right':'62px'},100);
136 self
.$('.partner-list-scroller').css({'padding-right':'0px'},100);
140 this.scrollbar
.replace(this.$('.placeholder-ScrollbarWidget'));
143 module
.PosWidget
= module
.PosWidget
.extend({
144 build_widgets: function() {
147 // -------- Screens ---------
149 // BEGIN pos_membership
150 this.partner_screen
= new module
.PartnerScreenWidget(this,{});
151 this.partner_screen
.appendTo($('#rightpane'));
152 // END pos_membership
154 this.product_screen
= new module
.ProductScreenWidget(this,{});
155 this.product_screen
.appendTo($('#rightpane'));
157 this.receipt_screen
= new module
.ReceiptScreenWidget(this, {});
158 this.receipt_screen
.appendTo($('#rightpane'));
160 this.payment_screen
= new module
.PaymentScreenWidget(this, {});
161 this.payment_screen
.appendTo($('#rightpane'));
163 // BEGIN pos_membership
164 this.partner_create_screen
= new module
.PartnerCreateScreenWidget(this, {});
165 this.partner_create_screen
.appendTo($('#rightpane'));
166 // END pos_membership
168 this.welcome_screen
= new module
.WelcomeScreenWidget(this,{});
169 this.welcome_screen
.appendTo($('#rightpane'));
171 this.client_payment_screen
= new module
.ClientPaymentScreenWidget(this, {});
172 this.client_payment_screen
.appendTo($('#rightpane'));
174 this.scale_invite_screen
= new module
.ScaleInviteScreenWidget(this, {});
175 this.scale_invite_screen
.appendTo($('#rightpane'));
177 this.scale_screen
= new module
.ScaleScreenWidget(this,{});
178 this.scale_screen
.appendTo($('#rightpane'));
180 // -------- Popups ---------
182 this.help_popup
= new module
.HelpPopupWidget(this, {});
183 this.help_popup
.appendTo($('.point-of-sale'));
185 this.error_popup
= new module
.ErrorPopupWidget(this, {});
186 this.error_popup
.appendTo($('.point-of-sale'));
188 this.error_product_popup
= new module
.ProductErrorPopupWidget(this, {});
189 this.error_product_popup
.appendTo($('.point-of-sale'));
191 this.error_session_popup
= new module
.ErrorSessionPopupWidget(this, {});
192 this.error_session_popup
.appendTo($('.point-of-sale'));
194 this.choose_receipt_popup
= new module
.ChooseReceiptPopupWidget(this, {});
195 this.choose_receipt_popup
.appendTo($('.point-of-sale'));
197 this.error_negative_price_popup
= new module
.ErrorNegativePricePopupWidget(this, {});
198 this.error_negative_price_popup
.appendTo($('.point-of-sale'));
200 // -------- Misc ---------
202 this.notification
= new module
.SynchNotificationWidget(this,{});
203 this.notification
.appendTo(this.$('#rightheader'));
205 this.username
= new module
.UsernameWidget(this,{});
206 this.username
.replace(this.$('.placeholder-UsernameWidget'));
208 this.action_bar
= new module
.ActionBarWidget(this);
209 this.action_bar
.appendTo($(".point-of-sale #rightpane"));
211 this.left_action_bar
= new module
.ActionBarWidget(this);
212 this.left_action_bar
.appendTo($(".point-of-sale #leftpane"));
214 this.paypad
= new module
.PaypadWidget(this, {});
215 this.paypad
.replace($('#placeholder-PaypadWidget'));
217 this.numpad
= new module
.NumpadWidget(this);
218 this.numpad
.replace($('#placeholder-NumpadWidget'));
220 this.order_widget
= new module
.OrderWidget(this, {});
221 this.order_widget
.replace($('#placeholder-OrderWidget'));
223 this.onscreen_keyboard
= new module
.OnscreenKeyboardWidget(this, {
224 'keyboard_model': 'simple'
226 this.onscreen_keyboard
.appendTo($(".point-of-sale #content"));
228 this.close_button
= new module
.HeaderButtonWidget(this,{
230 action: function(){ self
.try_close(); },
232 this.close_button
.appendTo(this.$('#rightheader'));
234 this.client_button
= new module
.HeaderButtonWidget(this,{
235 label
:'Self-Checkout',
236 action: function(){ self
.screen_selector
.set_user_mode('client'); },
238 this.client_button
.appendTo(this.$('#rightheader'));
241 // -------- Screen Selector ---------
243 this.screen_selector
= new module
.ScreenSelector({
246 'products': this.product_screen
,
247 'payment' : this.payment_screen
,
248 'client_payment' : this.client_payment_screen
,
249 'scale_invite' : this.scale_invite_screen
,
250 'scale': this.scale_screen
,
251 'receipt' : this.receipt_screen
,
252 'welcome' : this.welcome_screen
,
253 // BEGIN pos_membership
254 'partner' : this.partner_screen
,
255 'partner_create' : this.partner_create_screen
,
256 // END pos_membership
259 'help': this.help_popup
,
260 'error': this.error_popup
,
261 'error-product': this.error_product_popup
,
262 'error-session': this.error_session_popup
,
263 'error-negative-price': this.error_negative_price_popup
,
264 'choose-receipt': this.choose_receipt_popup
,
266 default_client_screen
: 'welcome',
267 // BEGIN pos_membership
268 default_cashier_screen
: 'partner',
269 // END pos_membership
270 default_mode
: this.pos
.iface_self_checkout
? 'client' : 'cashier',
274 this.debug_widget
= new module
.DebugWidget(this);
275 this.debug_widget
.appendTo(this.$('#content'));