Modification : gère point_of_sale.patch dans ce module.
[burette/pos_membership.git] / static / src / js / widgets.js
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;
9 },
10 renderElement: function(){
11 // NOTE: returns the url of the partner thumbnail
12 //console.log("[pos_membership] [PartnerWidget] [renderElement]");
13 this._super();
14 this.$('img').replaceWith(this.pos_widget.image_cache.get_image(this.model.get_image_url()));
15 var self = this;
16 $("a", this.$el).click(function(e){
17 if(self.click_partner_action){
18 self.click_partner_action(self.model);
19 }
20 });
21 },
22 });
23 module.PartnerSearchWidget = module.PosBaseWidget.extend({
24 template: 'PartnerSearchWidget',
25 init: function(parent, options){
26 var self = this;
27 this._super(parent,options);
28 },
29 get_image_url: function(partner){
30 return instance.session.url('/web/binary/image', {model: 'res.partner', field: 'image', id: partner.id});
31 },
32 renderElement: function(){
33 //console.log("[pos_membership] [PartnerSearchWidget] [renderElement]");
34 var self = this;
35 this._super();
36 this.filter();
37 },
38 filter: function(category){
39 var self = this;
40
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);
44
45 this.$('.searchbox input').keyup(function(){
46 query = $(this).val();
47 if(query){
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");
53 self.query = query;
54 self.$('.search-create').fadeIn();
55 //}else{
56 // self.$('.search-create').fadeOut();
57 //}
58 self.$('.search-clear').fadeIn();
59 }
60 else{
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();
65 }
66 });
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();
74 });
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');
84 });
85 },
86 });
87 module.PartnerListWidget = module.ScreenWidget.extend({
88 template:'PartnerListWidget',
89 init: function(parent, options) {
90 //console.log("[pos_membership] [PartnerListWidget] [init]");
91 var self = this;
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;
100
101 this.pos.get('partners').bind('reset', function(){
102 //console.log("[pos_membership] [PartnerListWidget] [bind] [reset]");
103 self.renderElement();
104 });
105 },
106 renderElement: function() {
107 //console.log("[pos_membership] [PartnerListWidget] [renderElement]");
108 var self = this;
109 this._super();
110
111 // free subwidgets memory from previous renders
112 for(var i = 0, len = this.partnerwidgets.length; i < len; i++){
113 this.partnerwidgets[i].destroy();
114 }
115 this.partnerwidgets = [];
116 if(this.scrollbar){
117 this.scrollbar.destroy();
118 }
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, {
123 model: partners[i],
124 click_partner_action: this.click_partner_action,
125 });
126 this.partnerwidgets.push(partner);
127 partner.appendTo(this.$('.partner-list'));
128 }
129 this.scrollbar = new module.ScrollbarWidget(this,{
130 target_widget: this,
131 target_selector: '.partner-list-scroller',
132 on_show: function(){
133 self.$('.partner-list-scroller').css({'padding-right':'62px'},100);
134 },
135 on_hide: function(){
136 self.$('.partner-list-scroller').css({'padding-right':'0px'},100);
137 },
138 });
139
140 this.scrollbar.replace(this.$('.placeholder-ScrollbarWidget'));
141 },
142 });
143 module.PosWidget = module.PosWidget.extend({
144 build_widgets: function() {
145 var self = this;
146
147 // -------- Screens ---------
148
149 // BEGIN pos_membership
150 this.partner_screen = new module.PartnerScreenWidget(this,{});
151 this.partner_screen.appendTo($('#rightpane'));
152 // END pos_membership
153
154 this.product_screen = new module.ProductScreenWidget(this,{});
155 this.product_screen.appendTo($('#rightpane'));
156
157 this.receipt_screen = new module.ReceiptScreenWidget(this, {});
158 this.receipt_screen.appendTo($('#rightpane'));
159
160 this.payment_screen = new module.PaymentScreenWidget(this, {});
161 this.payment_screen.appendTo($('#rightpane'));
162
163 // BEGIN pos_membership
164 this.partner_create_screen = new module.PartnerCreateScreenWidget(this, {});
165 this.partner_create_screen.appendTo($('#rightpane'));
166 // END pos_membership
167
168 this.welcome_screen = new module.WelcomeScreenWidget(this,{});
169 this.welcome_screen.appendTo($('#rightpane'));
170
171 this.client_payment_screen = new module.ClientPaymentScreenWidget(this, {});
172 this.client_payment_screen.appendTo($('#rightpane'));
173
174 this.scale_invite_screen = new module.ScaleInviteScreenWidget(this, {});
175 this.scale_invite_screen.appendTo($('#rightpane'));
176
177 this.scale_screen = new module.ScaleScreenWidget(this,{});
178 this.scale_screen.appendTo($('#rightpane'));
179
180 // -------- Popups ---------
181
182 this.help_popup = new module.HelpPopupWidget(this, {});
183 this.help_popup.appendTo($('.point-of-sale'));
184
185 this.error_popup = new module.ErrorPopupWidget(this, {});
186 this.error_popup.appendTo($('.point-of-sale'));
187
188 this.error_product_popup = new module.ProductErrorPopupWidget(this, {});
189 this.error_product_popup.appendTo($('.point-of-sale'));
190
191 this.error_session_popup = new module.ErrorSessionPopupWidget(this, {});
192 this.error_session_popup.appendTo($('.point-of-sale'));
193
194 this.choose_receipt_popup = new module.ChooseReceiptPopupWidget(this, {});
195 this.choose_receipt_popup.appendTo($('.point-of-sale'));
196
197 this.error_negative_price_popup = new module.ErrorNegativePricePopupWidget(this, {});
198 this.error_negative_price_popup.appendTo($('.point-of-sale'));
199
200 // -------- Misc ---------
201
202 this.notification = new module.SynchNotificationWidget(this,{});
203 this.notification.appendTo(this.$('#rightheader'));
204
205 this.username = new module.UsernameWidget(this,{});
206 this.username.replace(this.$('.placeholder-UsernameWidget'));
207
208 this.action_bar = new module.ActionBarWidget(this);
209 this.action_bar.appendTo($(".point-of-sale #rightpane"));
210
211 this.left_action_bar = new module.ActionBarWidget(this);
212 this.left_action_bar.appendTo($(".point-of-sale #leftpane"));
213
214 this.paypad = new module.PaypadWidget(this, {});
215 this.paypad.replace($('#placeholder-PaypadWidget'));
216
217 this.numpad = new module.NumpadWidget(this);
218 this.numpad.replace($('#placeholder-NumpadWidget'));
219
220 this.order_widget = new module.OrderWidget(this, {});
221 this.order_widget.replace($('#placeholder-OrderWidget'));
222
223 this.onscreen_keyboard = new module.OnscreenKeyboardWidget(this, {
224 'keyboard_model': 'simple'
225 });
226 this.onscreen_keyboard.appendTo($(".point-of-sale #content"));
227
228 this.close_button = new module.HeaderButtonWidget(this,{
229 label:'Close',
230 action: function(){ self.try_close(); },
231 });
232 this.close_button.appendTo(this.$('#rightheader'));
233
234 this.client_button = new module.HeaderButtonWidget(this,{
235 label:'Self-Checkout',
236 action: function(){ self.screen_selector.set_user_mode('client'); },
237 });
238 this.client_button.appendTo(this.$('#rightheader'));
239
240
241 // -------- Screen Selector ---------
242
243 this.screen_selector = new module.ScreenSelector({
244 pos: this.pos,
245 screen_set:{
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
257 },
258 popup_set:{
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,
265 },
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',
271 });
272
273 if(this.pos.debug){
274 this.debug_widget = new module.DebugWidget(this);
275 this.debug_widget.appendTo(this.$('#content'));
276 }
277 },
278 });
279 }