[WIP]add blink on line when scanning with barcode scanner and search is case insensitive
authorCedric Snauwaert <csn@openerp.com>
Wed, 19 Mar 2014 10:07:58 +0000 (11:07 +0100)
committerCedric Snauwaert <csn@openerp.com>
Wed, 19 Mar 2014 10:07:58 +0000 (11:07 +0100)
bzr revid: csn@openerp.com-20140319100758-u768tsufdgjig61r

addons/stock/controllers/main.py
addons/stock/static/src/css/barcode.css
addons/stock/static/src/js/widgets.js
addons/stock/static/src/xml/picking.xml

index b3975e2..cc6997e 100644 (file)
@@ -78,8 +78,8 @@ class BarcodeController(http.Controller):
                      wc.show_application = function(){
                          wc.action_manager.do_action("%s", {additional_context: %s});
                      };
-                     wc.do_push_state = function(){};
                      wc.appendTo($(document.body));
                      """ % (action, additional_context)
+                     # wc.do_push_state = function(){};
         }
         return r
index dc3d2c3..8a75ea4 100644 (file)
     -webkit-animation-name: blinker;
     -webkit-animation-duration: 1s;
     -webkit-animation-timing-function: linear;
-    -webkit-animation-iteration-count: 1;
+    -webkit-animation-iteration-count: 2;
 
     -moz-animation-name: blinker;
     -moz-animation-duration: 1s;
     -moz-animation-timing-function: linear;
-    -moz-animation-iteration-count: 1;
+    -moz-animation-iteration-count: 2;
 
     animation-name: blinker;
     animation-duration: 1s;
     animation-timing-function: linear;
-    animation-iteration-count: 1;
+    animation-iteration-count: 2;
 }
 
 @-moz-keyframes blinker {  
index 3e68e6a..db0ecbf 100644 (file)
@@ -1,4 +1,3 @@
-
 function openerp_picking_widgets(instance){
 
     var module = instance.stock;
@@ -28,6 +27,11 @@ function openerp_picking_widgets(instance){
             this._super(parent,options);
             this.rows = [];
             this.search_filter = "";
+            jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) {
+                return function( elem ) {
+                    return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
+                };
+            });
         },
         get_rows: function(){
             var model = this.getParent();
@@ -160,21 +164,6 @@ function openerp_picking_widgets(instance){
                 var pack_id = parseInt(this.attributes.getNamedItem('pack_id').value);
                 self.getParent().print_package(pack_id);
             });
-            this.$('.js_pick_drop_down').click(function(){
-                //check if parent is a container, if yes find all operation inside package
-                var op_id = parseInt($(this).parent().parent().parent().parent().parent().attr('data-id'));
-                if ($(this).parent().parent().parent().parent().parent()[0].classList.contains('container_head')){
-                    op_ids = []
-                    _.each(self.$('.js_pack_op_line[container-id='+op_id+']'),function(element){
-                        op_ids.push(parseInt(element.attributes.getNamedItem('data-id').value));
-                    });
-                    self.getParent().drop_down(op_ids);
-                }
-                else{
-                    self.getParent().drop_down([op_id]);
-                }
-                
-            });
             this.$('.js_submit_value').submit(function(event){
                 var op_id = parseInt(this.attributes.getNamedItem('data-id').value);
                 var value = parseInt(event.srcElement[0].value);
@@ -197,10 +186,10 @@ function openerp_picking_widgets(instance){
                 processed = ":not(.processed)";
             }
             if (query !== '') {
-                this.$('.js_loc:not(.js_loc:contains('+query+'))').removeClass('info');
-                this.$('.js_loc:contains('+query+')').addClass('info');
-                this.$('.js_pack_op_line'+processed+':not(.js_pack_op_line:has(.js_loc:contains('+query+')))').addClass('hidden');
-                this.$('.js_pack_op_line'+processed+':has(.js_loc:contains('+query+'))').removeClass('hidden');
+                this.$('.js_loc:not(.js_loc:Contains('+query+'))').removeClass('info');
+                this.$('.js_loc:Contains('+query+')').addClass('info');
+                this.$('.js_pack_op_line'+processed+':not(.js_pack_op_line:has(.js_loc:Contains('+query+')))').addClass('hidden');
+                this.$('.js_pack_op_line'+processed+':has(.js_loc:Contains('+query+'))').removeClass('hidden');
             }
             //if no query specified, then show everything
             if (query === '') {
@@ -225,11 +214,21 @@ function openerp_picking_widgets(instance){
             //return only those visible with rem qty > 0 and container empty
             return _.intersection(pack_op_ids, list);
         },
+        remove_blink: function(){
+            this.$('.js_pack_op_line.blink_me').removeClass('blink_me');
+        },
+        blink: function(op_id){
+            console.log('blink: '+op_id);
+            this.$('.js_pack_op_line[data-id="'+op_id+'"]').addClass('blink_me');
+        },
     });
 
     module.PickingMenuWidget = module.MobileWidget.extend({
         template: 'PickingMenuWidget',
         init: function(parent, params){
+            $(window).bind('hashchange', function(){
+                console.log($.bbq.getState());
+            });
             this._super(parent,params);
             var self = this;
 
@@ -381,7 +380,6 @@ function openerp_picking_widgets(instance){
         init: function(parent,params){
             $(window).bind('hashchange', function(){
                 console.log($.bbq.getState());
-                console.log('test');
             });
             this._super(parent,params);
             var self = this;
@@ -541,7 +539,7 @@ function openerp_picking_widgets(instance){
         },
         on_searchbox: function(query){
             var self = this;
-            self.picking_editor.on_searchbox(query);
+            self.picking_editor.on_searchbox(query.toUpperCase());
         },
         // reloads the data from the provided picking and refresh the ui. 
         // (if no picking_id is provided, gets the first picking in the db)
@@ -553,6 +551,7 @@ function openerp_picking_widgets(instance){
             }
             return this.load(picking_id)
                 .then(function(){
+                    self.picking_editor.remove_blink();
                     self.picking_editor.renderElement();
                     // self.$('#js_select')[0].value = "ToDo";
 
@@ -608,7 +607,9 @@ function openerp_picking_widgets(instance){
                     }
                     console.log(result.operation_id);
                     if (result.operation_id !== false){
-                        return self.refresh_ui(self.picking.id);
+                        self.refresh_ui(self.picking.id).then(function(){
+                            return self.picking_editor.blink(result.operation_id);
+                        });
                     }
                 });
         },
@@ -697,10 +698,10 @@ function openerp_picking_widgets(instance){
             for(var i = 0; i < this.pickings.length; i++){
                 if(this.pickings[i] === this.picking.id){
                     if(i < this.pickings.length -1){
-                        window.location = '/barcode/web/?picking_type_id='+this.picking_type_id+'&picking_id='+this.pickings[i+1];
-                        return;
-                        // this.refresh_ui(this.pickings[i+1]);
+                        // window.location = '/barcode/web/?picking_type_id='+this.picking_type_id+'&picking_id='+this.pickings[i+1];
                         // return;
+                        this.refresh_ui(this.pickings[i+1]);
+                        return;
                     }
                 }
             }
@@ -709,8 +710,8 @@ function openerp_picking_widgets(instance){
             for(var i = 0; i < this.pickings.length; i++){
                 if(this.pickings[i] === this.picking.id){
                     if(i > 0){
-                        window.location = '/barcode/web/?picking_type_id='+this.picking_type_id+'&picking_id='+this.pickings[i-1];
-                        // this.refresh_ui(this.pickings[i-1]);
+                        // window.location = '/barcode/web/?picking_type_id='+this.picking_type_id+'&picking_id='+this.pickings[i-1];
+                        this.refresh_ui(this.pickings[i-1]);
                         return;
                     }
                 }
index 561d5fd..52164d1 100644 (file)
                             </td>
                             <td class='text-center js_row_qty'>
                                 <t t-if="row.cols.qty &amp;&amp; row.cols.processed == 'false' &amp;&amp; !row.cols.container">
-                                <div class="input-group">
-                                <span class="input-group-addon"><a class="js_minus" t-att-op-id='row.cols.product_id' href="#"><i class="fa fa-minus"></i></a></span>
-                                <form class="js_submit_value" t-att-data-id="row.cols.id">
-                                <input type="text" class="form-control text-center js_qty" t-att-placeholder="row.cols.rem + '/' + row.cols.qty" t-att-data-id="row.cols.id"></input>
-                                <input type="submit" class="hidden"></input>
-                                </form>
-                                <!-- <div class="form-control"> 
-                                    <t t-esc="row.cols.rem"/> / <t t-esc="row.cols.qty" />
-                                </div> -->
-                                <span class="input-group-addon"><a class="js_plus" t-att-op-id='row.cols.product_id' href="#"><i class="fa fa-plus"></i></a></span>
-                                </div>
-                                <div>
-                                    <t t-esc="row.cols.uom" />
-                                </div>
+                                    <div class="input-group">
+                                        <span class="input-group-addon js_minus" t-att-op-id='row.cols.product_id'><a href="#"><i class="fa fa-minus"></i></a></span>
+                                        <form class="js_submit_value" t-att-data-id="row.cols.id">
+                                            <input type="text" class="form-control text-center js_qty" t-att-placeholder="row.cols.rem + '/' + row.cols.qty" t-att-data-id="row.cols.id"></input>
+                                            <input type="submit" class="hidden"></input>
+                                        </form>
+                                        <span class="input-group-addon js_plus" t-att-op-id='row.cols.product_id'><a href="#"><i class="fa fa-plus"></i></a></span>
+                                    </div>
+                                    <div>
+                                        <t t-esc="row.cols.uom" />
+                                    </div>
                                 </t>
                                 <t t-if="row.cols.qty &amp;&amp; (row.cols.processed == 'true' || row.cols.container)">
                                     <t t-esc="row.cols.rem" /> / <t t-esc="row.cols.qty" /> <t t-esc="row.cols.uom" />
                                 <t t-if="row.cols.lot" ><span> : <t t-esc="row.cols.lot" /></span></t>
                             </td>
                             <td class="js_loc"> <t t-esc="row.cols.dest" /> 
-                                    <div class="pull-right btn-group">
+                                <div class="pull-right btn-group">
                                     <button type="button" class="btn btn-default dropdown-toggle fa fa-bars" data-toggle="dropdown">
                                      <span class="caret"></span>
                                     </button>
                                         <t t-if="!row.cols.lot &amp;&amp; row.cols.product_id">
                                             <li><a class="js_create_lot" t-att-product_id="row.cols.id" href="#">Create Lot</a></li>
                                         </t>
+                                        <t t-if="!row.cols.head_container">
+                                            <li><a class="js_change_src" t-att-pack_id="row.cols.id" href="#">Change source location</a></li>
+                                            <li><a class="js_change_dst" t-att-pack_id="row.cols.id" href="#">Change destination location</a></li>
+                                        </t>
                                         <t t-if="row.cols.head_container">
                                             <li><a class="js_delete_pack" t-att-pack_id="row.cols.id" href="#">Remove from package</a></li>
                                             <li><a class="js_print_pack" t-att-pack_id="row.cols.id" href="#">Print package label</a></li>
                                         </t>
                                     </ul>
-                                    </div>
+                                </div>
                             </td>
                         </tr>
                     </t>