Modification : gère point_of_sale.patch dans ce module.
[burette/pos_membership.git] / static / src / js / widgets.js
diff --git a/static/src/js/widgets.js b/static/src/js/widgets.js
new file mode 100644 (file)
index 0000000..a123afb
--- /dev/null
@@ -0,0 +1,279 @@
+function openerp_pos_membership_widgets(instance, module){
+       module.PartnerWidget = module.PosBaseWidget.extend({
+               template: 'PartnerWidget',
+               init: function(parent, options){
+                       this._super(parent,options);
+                       this.model = options.model;
+                       this.next_screen = options.next_screen; //when a partner is clicked, this screen is set
+                       this.click_partner_action = options.click_partner_action; 
+                },
+               renderElement: function(){
+                // NOTE: returns the url of the partner thumbnail
+                       //console.log("[pos_membership] [PartnerWidget] [renderElement]");
+                       this._super();
+                       this.$('img').replaceWith(this.pos_widget.image_cache.get_image(this.model.get_image_url()));
+                       var self = this;
+                       $("a", this.$el).click(function(e){
+                               if(self.click_partner_action){
+                                       self.click_partner_action(self.model);
+                                }
+                        });
+                },
+        });
+       module.PartnerSearchWidget = module.PosBaseWidget.extend({
+               template: 'PartnerSearchWidget',
+               init: function(parent, options){
+                       var self = this;
+                       this._super(parent,options);
+                },
+               get_image_url: function(partner){
+                       return instance.session.url('/web/binary/image', {model: 'res.partner', field: 'image', id: partner.id});
+                },
+               renderElement: function(){
+                       //console.log("[pos_membership] [PartnerSearchWidget] [renderElement]");
+                       var self = this;
+                       this._super();
+                       this.filter();
+                },
+               filter: function(category){
+                       var self = this;
+                       
+                       var partners = self.pos.db.get_partner_list();
+                       //console.log("[pos_membership] [PartnerSearchWidget] [filter] partners=",partners);
+                       self.pos.get('partners').reset(partners);
+                       
+                       this.$('.searchbox input').keyup(function(){
+                               query = $(this).val();
+                               if(query){
+                                       //console.log("[pos_membership] [PartnerSearchWidget] [filter]: query:", query);
+                                       var partners = self.pos.db.search_partner(query);
+                                       self.pos.get('partners').reset(partners);
+                                       //if(partners.length == 0) {
+                                               //console.log("[pos_membership] [PartnerSearchWidget] [filter]: no result");
+                                               self.query = query;
+                                               self.$('.search-create').fadeIn();
+                                       //}else{
+                                       //      self.$('.search-create').fadeOut();
+                                       //}
+                                       self.$('.search-clear').fadeIn();
+                                }
+                               else{
+                                       var partners = self.pos.db.get_partner_list();
+                                       self.pos.get('partners').reset(partners);
+                                       self.$('.search-clear').fadeOut();
+                                       self.$('.search-create').fadeOut();
+                                }
+                        });
+                       this.$('.searchbox input').click(function(){}); //Why ???
+                       this.$('.search-clear').click(function(){
+                               var partners = self.pos.db.get_partner_list();
+                               self.pos.get('partners').reset(partners);
+                               self.$('.searchbox input').val('').focus();
+                               self.$('.search-clear').fadeOut();
+                               self.$('.search-create').fadeOut();
+                        });
+                       this.$('.search-create').click(function(){
+                               var partners = self.pos.db.get_partner_list();
+                               self.pos.get('partners').reset(partners);
+                               self.$('.searchbox input').val('').focus();
+                               self.$('.search-clear').fadeOut();
+                               self.$('.search-create').fadeOut();
+                               //console.log("[pos_membership] [PartnerSearchWidget] [filter] [search-create] query=",self.query);
+                               self.pos.add_new_partner({name:self.query});
+                               self.pos_widget.screen_selector.set_current_screen('partner_create');
+                        });
+                },
+        });
+       module.PartnerListWidget = module.ScreenWidget.extend({
+               template:'PartnerListWidget',
+               init: function(parent, options) {
+                       //console.log("[pos_membership] [PartnerListWidget] [init]");
+                       var self = this;
+                       this._super(parent, options);
+                       this.model = options.model;
+                       this.partnerwidgets = [];
+                       this.weight = options.weight || 0;
+                       this.show_scale = options.show_scale || false;
+                       this.next_screen = options.next_screen || false;
+                       this.back_screen = options.back_screen || false;
+                       this.click_partner_action = options.click_partner_action;
+                       
+                       this.pos.get('partners').bind('reset', function(){
+                               //console.log("[pos_membership] [PartnerListWidget] [bind] [reset]");
+                               self.renderElement();
+                        });
+                },
+               renderElement: function() {
+                       //console.log("[pos_membership] [PartnerListWidget] [renderElement]");
+                       var self = this;
+                       this._super();
+                       
+                       // free subwidgets memory from previous renders
+                       for(var i = 0, len = this.partnerwidgets.length; i < len; i++){
+                               this.partnerwidgets[i].destroy();
+                        }
+                       this.partnerwidgets = []; 
+                       if(this.scrollbar){
+                               this.scrollbar.destroy();
+                        }
+                       var partners = this.pos.get('partners').models || [];
+                       for(var i = 0, len = partners.length; i < len; i++){
+                               //console.log("[pos_membership] [PartnerListWidget] [renderElement]: partners[i].get('name')=",partners[i].get('name'));
+                               var partner = new module.PartnerWidget(self, {
+                                       model: partners[i],
+                                       click_partner_action: this.click_partner_action,
+                                });
+                               this.partnerwidgets.push(partner);
+                               partner.appendTo(this.$('.partner-list'));
+                        }
+                       this.scrollbar = new module.ScrollbarWidget(this,{
+                               target_widget: this,
+                               target_selector: '.partner-list-scroller',
+                               on_show: function(){
+                                       self.$('.partner-list-scroller').css({'padding-right':'62px'},100);
+                                },
+                               on_hide: function(){
+                                       self.$('.partner-list-scroller').css({'padding-right':'0px'},100);
+                                },
+                        });
+                       
+                       this.scrollbar.replace(this.$('.placeholder-ScrollbarWidget'));
+                },
+        });
+       module.PosWidget = module.PosWidget.extend({
+               build_widgets: function() {
+                       var self = this;
+                       
+                       // --------  Screens ---------
+                       
+                       // BEGIN pos_membership
+                       this.partner_screen = new module.PartnerScreenWidget(this,{});
+                       this.partner_screen.appendTo($('#rightpane'));
+                       // END pos_membership
+                       
+                       this.product_screen = new module.ProductScreenWidget(this,{});
+                       this.product_screen.appendTo($('#rightpane'));
+                       
+                       this.receipt_screen = new module.ReceiptScreenWidget(this, {});
+                       this.receipt_screen.appendTo($('#rightpane'));
+                       
+                       this.payment_screen = new module.PaymentScreenWidget(this, {});
+                       this.payment_screen.appendTo($('#rightpane'));
+                       
+                       // BEGIN pos_membership
+                       this.partner_create_screen = new module.PartnerCreateScreenWidget(this, {});
+                       this.partner_create_screen.appendTo($('#rightpane'));
+                       // END pos_membership
+                       
+                       this.welcome_screen = new module.WelcomeScreenWidget(this,{});
+                       this.welcome_screen.appendTo($('#rightpane'));
+                       
+                       this.client_payment_screen = new module.ClientPaymentScreenWidget(this, {});
+                       this.client_payment_screen.appendTo($('#rightpane'));
+                       
+                       this.scale_invite_screen = new module.ScaleInviteScreenWidget(this, {});
+                       this.scale_invite_screen.appendTo($('#rightpane'));
+                       
+                       this.scale_screen = new module.ScaleScreenWidget(this,{});
+                       this.scale_screen.appendTo($('#rightpane'));
+                       
+                       // --------  Popups ---------
+                       
+                       this.help_popup = new module.HelpPopupWidget(this, {});
+                       this.help_popup.appendTo($('.point-of-sale'));
+                       
+                       this.error_popup = new module.ErrorPopupWidget(this, {});
+                       this.error_popup.appendTo($('.point-of-sale'));
+                       
+                       this.error_product_popup = new module.ProductErrorPopupWidget(this, {});
+                       this.error_product_popup.appendTo($('.point-of-sale'));
+                       
+                       this.error_session_popup = new module.ErrorSessionPopupWidget(this, {});
+                       this.error_session_popup.appendTo($('.point-of-sale'));
+                       
+                       this.choose_receipt_popup = new module.ChooseReceiptPopupWidget(this, {});
+                       this.choose_receipt_popup.appendTo($('.point-of-sale'));
+                       
+                       this.error_negative_price_popup = new module.ErrorNegativePricePopupWidget(this, {});
+                       this.error_negative_price_popup.appendTo($('.point-of-sale'));
+                       
+                       // --------  Misc ---------
+                       
+                       this.notification = new module.SynchNotificationWidget(this,{});
+                       this.notification.appendTo(this.$('#rightheader'));
+                       
+                       this.username   = new module.UsernameWidget(this,{});
+                       this.username.replace(this.$('.placeholder-UsernameWidget'));
+                       
+                       this.action_bar = new module.ActionBarWidget(this);
+                       this.action_bar.appendTo($(".point-of-sale #rightpane"));
+                       
+                       this.left_action_bar = new module.ActionBarWidget(this);
+                       this.left_action_bar.appendTo($(".point-of-sale #leftpane"));
+                       
+                       this.paypad = new module.PaypadWidget(this, {});
+                       this.paypad.replace($('#placeholder-PaypadWidget'));
+                       
+                       this.numpad = new module.NumpadWidget(this);
+                       this.numpad.replace($('#placeholder-NumpadWidget'));
+                       
+                       this.order_widget = new module.OrderWidget(this, {});
+                       this.order_widget.replace($('#placeholder-OrderWidget'));
+                       
+                       this.onscreen_keyboard = new module.OnscreenKeyboardWidget(this, {
+                               'keyboard_model': 'simple'
+                        });
+                       this.onscreen_keyboard.appendTo($(".point-of-sale #content")); 
+                       
+                       this.close_button = new module.HeaderButtonWidget(this,{
+                               label:'Close',
+                               action: function(){ self.try_close(); },
+                        });
+                       this.close_button.appendTo(this.$('#rightheader'));
+                       
+                       this.client_button = new module.HeaderButtonWidget(this,{
+                               label:'Self-Checkout',
+                               action: function(){ self.screen_selector.set_user_mode('client'); },
+                        });
+                       this.client_button.appendTo(this.$('#rightheader'));
+                       
+                       
+                       // --------  Screen Selector ---------
+                       
+                       this.screen_selector = new module.ScreenSelector({
+                               pos: this.pos,
+                               screen_set:{
+                                       'products': this.product_screen,
+                                       'payment' : this.payment_screen,
+                                       'client_payment' : this.client_payment_screen,
+                                       'scale_invite' : this.scale_invite_screen,
+                                       'scale':    this.scale_screen,
+                                       'receipt' : this.receipt_screen,
+                                       'welcome' : this.welcome_screen,
+                                       // BEGIN pos_membership
+                                       'partner' : this.partner_screen,
+                                       'partner_create' : this.partner_create_screen,
+                                       // END pos_membership
+                                },
+                               popup_set:{
+                                       'help': this.help_popup,
+                                       'error': this.error_popup,
+                                       'error-product': this.error_product_popup,
+                                       'error-session': this.error_session_popup,
+                                       'error-negative-price': this.error_negative_price_popup,
+                                       'choose-receipt': this.choose_receipt_popup,
+                                },
+                               default_client_screen: 'welcome',
+                               // BEGIN pos_membership
+                               default_cashier_screen: 'partner',
+                               // END pos_membership
+                               default_mode: this.pos.iface_self_checkout ?  'client' : 'cashier',
+                        });
+                       
+                       if(this.pos.debug){
+                               this.debug_widget = new module.DebugWidget(this);
+                               this.debug_widget.appendTo(this.$('#content'));
+                        }
+                },
+        });
+ }