template: 'PickingEditorWidget',
init: function(parent,options){
this._super(parent,options);
+ var self = this;
this.rows = [];
this.search_filter = "";
jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) {
};
});
},
+ get_header: function(){
+ return this.getParent().get_header();
+ },
get_location: function(){
var model = this.getParent();
var locations = [];
head_container: true,
processed: packopline.processed,
},
- classes: ('active container_head ') + (packopline.processed === "true" ? 'processed hidden ':''),
+ classes: ('success container_head ') + (packopline.processed === "true" ? 'processed hidden ':''),
});
pack_created.push(packopline.result_package_id[0]);
}
head_container: false,
processed: packopline.processed,
},
- classes: ((packopline.product_qty <= packopline.qty_done) ? 'active ' : '') + (packopline.result_package_id[1] !== undefined ? 'in_container_hidden ' : '') + (packopline.processed === "true" ? 'processed hidden ':''),
+ classes: ((packopline.product_qty <= packopline.qty_done) ? 'success ' : '') + (packopline.result_package_id[1] !== undefined ? 'in_container_hidden ' : '') + (packopline.processed === "true" ? 'processed hidden ':''),
});
});
//sort element by things to do, then things done, then grouped by packages
renderElement: function(){
var self = this;
this._super();
+ this.$('.js_pick_done').click(function(){ self.getParent().done(); });
+ this.$('.js_pick_print').click(function(){ self.getParent().print_picking(); });
+ this.$('.oe_pick_app_header').text(self.get_header());
+ this.$('.oe_searchbox').keyup(function(event){
+ self.on_searchbox($(this).val());
+ });
+ this.$('.js_pick_pack').click(function(){ self.getParent().pack(); });
+ this.$('.js_drop_down').click(function(){ self.getParent().drop_down();});
+ this.$('.js_clear_search').click(function(){
+ self.on_searchbox('');
+ self.$('.oe_searchbox').val('');
+ });
this.$('#js_select').change(function(){
- var selection = $(this)[0].value
+ var selection = self.$('#js_select option:selected').attr('value');
if (selection === "ToDo"){
self.getParent().$('.js_pick_pack').removeClass('hidden')
self.getParent().$('.js_drop_down').removeClass('hidden')
self.on_searchbox(self.search_filter);
});
this.$('.js_plus').click(function(){
- var id = parseInt($(this).attr('op-id'));
+ var id = $(this).data('product-id');
self.getParent().scan_product_id(id,true);
});
this.$('.js_minus').click(function(){
- var id = parseInt($(this).attr('op-id'));
+ var id = $(this).data('product-id');
self.getParent().scan_product_id(id,false);
});
this.$('.js_unfold').click(function(){
- var op_id = $(this).parent()[0].attributes.getNamedItem('data-id').value;
+ var op_id = $(this).parent().data('id');
var line = $(this).parent();
//select all js_pack_op_line with class in_container_hidden and correct container-id
- select = self.$('.js_pack_op_line.in_container_hidden[container-id='+op_id+']')
+ select = self.$('.js_pack_op_line.in_container_hidden[data-container-id='+op_id+']')
if (select.length > 0){
//we unfold
line.addClass('warning');
else{
//we fold
line.removeClass('warning');
- select = self.$('.js_pack_op_line.in_container[container-id='+op_id+']')
+ select = self.$('.js_pack_op_line.in_container[data-container-id='+op_id+']')
select.removeClass('in_container');
select.addClass('in_container_hidden');
}
});
this.$('.js_create_lot').click(function(){
- var op_id = this.attributes.getNamedItem('product_id').value;
+ var op_id = $(this).parents("[data-id]:first").data('id');
self.getParent().create_lot(op_id);
});
this.$('.js_delete_pack').click(function(){
- var pack_id = parseInt(this.attributes.getNamedItem('pack_id').value);
+ var pack_id = $(this).parents("[data-id]:first").data('id');
self.getParent().delete_package_op(pack_id);
});
this.$('.js_print_pack').click(function(){
- var pack_id = parseInt(this.attributes.getNamedItem('pack_id').value);
+ var pack_id = $(this).parents("[data-id]:first").data('id');
+ // $(this).parents("[data-id]:first").data('id')
self.getParent().print_package(pack_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);
+ var op_id = $(this).parents("[data-id]:first").data('id');
+ var value = parseInt($("input", this).val());
if (value>=0){
self.getParent().set_operation_quantity(value, op_id);
}
- self.$('.js_qty[data-id='+op_id+']')[0].value = "";
+ $("input", this).val("");
});
this.$('.js_qty').blur(function(){
this.value = "";
});
this.$('.js_change_src').click(function(){
- var op_id = $(this)[0].attributes.getNamedItem('op_id').value;
+ var op_id = $(this).parents("[data-id]:first").data('id');//data('op_id');
self.$('#js_loc_select').addClass('source');
- self.$('#js_loc_select').attr('op_id',op_id);
+ self.$('#js_loc_select').data('op-id',op_id);
self.$el.siblings('#js_LocationChooseModal').modal();
});
this.$('.js_change_dst').click(function(){
- var op_id = $(this)[0].attributes.getNamedItem('op_id').value;
- self.$('#js_loc_select').attr('op_id',op_id);
+ var op_id = $(this).parents("[data-id]:first").data('id');
+ self.$('#js_loc_select').data('op-id',op_id);
+ self.$el.siblings('#js_LocationChooseModal').modal();
+ });
+ this.$('.js_pack_change_dst').click(function(){
+ var op_id = $(this).parents("[data-id]:first").data('id');
+ self.$('#js_loc_select').addClass('pack');
+ self.$('#js_loc_select').data('op-id',op_id);
self.$el.siblings('#js_LocationChooseModal').modal();
});
this.$('.js_validate_location').click(function(){
//get current selection
var select_dom_element = self.$('#js_loc_select');
- var selected = self.$('#js_loc_select option:selected')[0].attributes.getNamedItem('loc_id').value;
+ var loc_id = self.$('#js_loc_select option:selected').data('loc-id');
var src_dst = false;
- var op_id = parseInt(select_dom_element[0].attributes.getNamedItem('op_id').value);
- if (select_dom_element[0].classList.contains('source')){
+ var op_id = select_dom_element.data('op-id');
+ if (select_dom_element.hasClass('pack')){
+ select_dom_element.removeClass('source');
+ op_ids = [];
+ self.$('.js_pack_op_line[data-container-id='+op_id+']').each(function(){
+ op_ids.push($(this).data('id'));
+ });
+ op_id = op_ids;
+ }
+ else if (select_dom_element.hasClass('source')){
src_dst = true;
select_dom_element.removeClass('source');
}
- if (selected === "false"){
+ if (loc_id === false){
//close window
self.$el.siblings('#js_LocationChooseModal').modal('hide');
}
else{
- loc_id = parseInt(selected);
self.$el.siblings('#js_LocationChooseModal').modal('hide');
- self.getParent().change_location(op_id, loc_id, src_dst);
+ self.getParent().change_location(op_id, parseInt(loc_id), src_dst);
}
});
//hide line that has no location matching the query and highlight location that match the query
this.search_filter = query;
var processed = ".processed";
- if (this.$('#js_select')[0].value == "ToDo"){
+ if (this.$('#js_select option:selected').attr('value') == "ToDo"){
processed = ":not(.processed)";
}
if (query !== '') {
//get ids of visible on the screen
pack_op_ids = []
this.$('.js_pack_op_line:not(.processed):not(.js_pack_op_line.hidden):not(.container_head)').each(function(){
- cur_id = this.attributes.getNamedItem('data-id').value;
+ cur_id = $(this).data('id');
pack_op_ids.push(parseInt(cur_id));
});
//get list of element in this.rows where rem > 0 and container is empty is specified
blink: function(op_id){
this.$('.js_pack_op_line[data-id="'+op_id+'"]').addClass('blink_me');
},
+ check_done: function(){
+ var model = this.getParent();
+ var self = this;
+ var done = true;
+ _.each( model.packoplines, function(packopline){
+ if (packopline.processed === "false"){
+ done = false;
+ return done;
+ }
+ });
+ return done;
+ }
});
module.PickingMenuWidget = module.MobileWidget.extend({
self.scan(ean);
});
-
this.$('.js_pick_quit').click(function(){ self.quit(); });
- this.$('.js_pick_pack').click(function(){ self.pack(); });
- this.$('.js_drop_down').click(function(){ self.drop_down();});
- this.$('.js_pick_done').click(function(){ self.done(); });
- this.$('.js_pick_print').click(function(){ self.print_picking(); });
this.$('.js_pick_prev').click(function(){ self.picking_prev(); });
this.$('.js_pick_next').click(function(){ self.picking_next(); });
this.$('.js_pick_menu').click(function(){ self.menu(); });
- this.$('.oe_searchbox').keyup(function(event){
- self.on_searchbox($(this).val());
- });
- this.$('.js_clear_search').click(function(){
- self.on_searchbox('');
- self.$('.oe_searchbox').val('');
- });
this.hotkey_handler = function(event){
if(event.keyCode === 37 ){ // Left Arrow
self.$('.js_pick_next').removeClass('disabled');
}
- self.$('.oe_pick_app_header').text(self.get_header());
-
}).fail(function(error) {console.log(error);});
},
.then(function(){
self.picking_editor.remove_blink();
self.picking_editor.renderElement();
- // self.$('#js_select')[0].value = "ToDo";
if( self.picking.id === self.pickings[0]){
self.$('.js_pick_prev').addClass('disabled');
}else{
self.$('.js_pick_next').removeClass('disabled');
}
- self.$('.oe_pick_app_header').text(self.get_header());
if (remove_search_filter){
self.$('.oe_searchbox').val('');
self.on_searchbox('');
if (result.filter_loc !== false){
//check if we have receive a location as answer
if (result.filter_loc !== undefined){
- var modal_loc_hidden = self.$('#js_LocationChooseModal')[0].attributes.getNamedItem('aria-hidden').value;
+ var modal_loc_hidden = self.$('#js_LocationChooseModal').attr('aria-hidden');
if (modal_loc_hidden === "false"){
- var line = self.$('#js_LocationChooseModal .js_loc_option[loc_id='+result.filter_loc_id+']').attr('selected','selected');
+ var line = self.$('#js_LocationChooseModal .js_loc_option[data-loc-id='+result.filter_loc_id+']').attr('selected','selected');
}
else{
self.$('.oe_searchbox').val(result.filter_loc);
new instance.web.Model('stock.pack.operation')
.call('action_drop_down', [pack_op_ids])
.then(function(){
- return self.refresh_ui(self.picking.id);
+ return self.refresh_ui(self.picking.id).then(function(){
+ if (self.picking_editor.check_done()){
+ return self.done();
+ }
+ });
});
}
},
<div class="modal-body">
<p>Scan a location or select it in the list below</p>
<select id="js_loc_select" class="form-control">
- <option class="js_loc_option" loc_id="false"></option>
+ <option class="js_loc_option" data-loc-id="false"></option>
<t t-foreach="widget.get_location()" t-as="loc">
- <option class="js_loc_option" t-att-loc_id="loc.id"><t t-esc="loc.name"/></option>
+ <option class="js_loc_option" t-att-data-loc-id="loc.id"><t t-esc="loc.name"/></option>
</t>
</select>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
- <button type="button" class="btn btn-primary js_validate_location">Ok</button>
+ <button type="button" class="btn btn-primary js_validate_location">Change Location</button>
</div>
</div>
</div>
</div>
+ <div class="row">
+ <div>
+ <div class="col-sm-4 col-xs-6">
+ <h2 class="oe_pick_app_header" />
+ </div>
+ <div class="col-sm-8 col-xs⁻6 text-right">
+
+ <button type="button" class='btn btn-default js_pick_done'> Create backorder </button>
+ <button type="button" class='btn btn-default js_pick_print'> Print </button>
+
+ </div>
+ </div>
+ </div>
-
- <div>
- <h3><strong>Operations
- <select id="js_select">
- <option id="js_select_todo">ToDo</option>
- <option id="js_select_processed">Processed</option>
- </select>
- </strong></h3>
+ <div class="row">
+ <div>
+ <div class="col-md-3 col-sm-4 col-xs-6">
+ <h3><strong>
+ <select id="js_select" class="form-control">
+ <option value="ToDo" id="js_select_todo">Operations ToDo</option>
+ <option value="Processed" id="js_select_processed">Operations Processed</option>
+ </select>
+ </strong>
+ </h3>
+ </div>
+ <div class="col-md-3 col-sm-4 col-xs-6">
+ <h2>
+ <div class="input-group">
+ <input type="text" class="form-control oe_searchbox" placeholder="Filter by location..."/>
+ <span class="input-group-btn">
+ <button class="btn btn-danger js_clear_search" type="button">x</button>
+ </span>
+ </div>
+ </h2>
+ </div>
+ <div class="col-md-6 col-sm-4 col-xs-12 text-right">
+ <h3>
+ <button type="button" class='btn btn-danger js_drop_down'> Process </button>
+ <button type="button" class='btn btn-default js_pick_pack'> Put in Pack </button>
+ </h3>
+ </div>
+ </div>
</div>
-
- <div>
-
+
+ <div>
<table class='table table-condensed js_op_table_todo'>
<thead>
<tr>
<th class="text-left">Product</th>
- <th class='text-center' width="200">Quantity</th>
+ <th class='text-center' width="150">Scanned</th>
+ <th class='text-center'>Todo</th>
<th>From</th>
<th>To</th>
</tr>
<tbody>
<t t-foreach="widget.get_rows()" t-as="row">
- <tr t-att-class="row.classes + 'js_pack_op_line'" t-att-data-id="row.cols.id" t-att-container-id="row.cols.container_id">
+ <tr t-att-class="row.classes + 'js_pack_op_line'" t-att-data-id="row.cols.id" t-att-data-container-id="row.cols.container_id">
<td t-att-class="!row.cols.head_container && row.cols.container ? 'text-center' : 'text-left' + row.cols.head_container ? ' js_unfold' : ''">
<t t-if="!row.cols.head_container && row.cols.container"><span class="fa fa-level-up fa-rotate-90"></span></t>
<t t-esc="row.cols.product" />
<td class='text-center js_row_qty'>
<t t-if="row.cols.qty && row.cols.processed == 'false' && !row.cols.container">
<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>
+ <span class="input-group-addon js_minus" t-att-data-product-id='row.cols.product_id'><a href="#"><i class="fa fa-minus"></i></a></span>
+ <form class="js_submit_value">
+ <input type="text" class="form-control text-center js_qty" t-att-placeholder="row.cols.rem"></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" />
+ <span class="input-group-addon js_plus" t-att-data-product-id='row.cols.product_id'><a href="#"><i class="fa fa-plus"></i></a></span>
</div>
</t>
<t t-if="row.cols.qty && (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-esc="row.cols.rem" />
</t>
-
+ </td>
+ <td class="text-center">
+ <t t-esc="row.cols.qty"/> <t t-esc="row.cols.uom" />
</td>
<td class="js_loc">
<t t-esc="row.cols.loc" />
</button>
<ul class="dropdown-menu" role="menu">
<t t-if="!row.cols.lot && row.cols.product_id">
- <li><a class="js_create_lot" t-att-product_id="row.cols.id" href="#">Create Lot</a></li>
+ <li><a class="js_create_lot" href="#">Create Lot</a></li>
</t>
- <t t-if="!row.cols.head_container">
- <li><a class="js_change_src" t-att-op_id="row.cols.id" href="#">Change source location</a></li>
- <li><a class="js_change_dst" t-att-op_id="row.cols.id" href="#">Change destination location</a></li>
+ <t t-if="!row.cols.head_container && !row.cols.container">
+ <li><a class="js_change_src" href="#">Change source location</a></li>
+ <li><a class="js_change_dst" 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>
+ <li><a class="js_pack_change_dst" href="#">Change destination location</a></li>
+ <li class="divider"></li>
+ <li><a class="js_delete_pack" href="#">Remove from package</a></li>
+ <li><a class="js_print_pack" href="#">Print package label</a></li>
</t>
</ul>
</div>
<t t-name="PickingMenuWidget">
<div class="navbar navbar-inverse navbar-static-top" role="navigation">
<div class="container">
- <!-- <div class="navbar-header navbar-form"> -->
<div class="navbar-header navbar-form navbar-left">
<input type='text' class="oe_searchbox form-control pull-left" placeholder='Search'/>
</div>
<div class="navbar-header navbar-form navbar-right">
- <!-- <div class='form-group'> -->
- <button type="button" class="btn btn-danger js_pick_quit pull-right">Quit</button>
+ <button type="button" class="btn btn-danger js_pick_quit pull-right">Quit</button>
</div>
</div>
- <!-- </div> -->
</div>
<div class="container">
<t t-name="PickingMainWidget">
<div class="navbar navbar-inverse navbar-static-top" role="navigation">
<div class="container">
+ <div class="navbar-left">
+ <button type="button" class="btn btn-primary navbar-btn js_pick_menu">Menu</button>
+ </div>
<div class="navbar-right">
<button type="button" class="btn btn-default navbar-btn js_pick_prev">< Previous</button>
<button type="button" class="btn btn-default navbar-btn js_pick_next">Next ></button>
-
- </div>
- <div class="navbar-header">
- <button type="button" class="btn btn-primary navbar-btn js_pick_menu">Menu</button>
</div>
</div>
</div>
<div class="container">
- <div class="row">
- <div class="col-md-12">
- <div class="pull-right">
- <button type="button" class='btn btn-danger js_pick_done'> Done </button>
- <button type="button" class='btn btn-info js_pick_print'> Print </button>
- </div>
- <h2 class="oe_pick_app_header" t-esc='widget.get_header()' />
- <div class="input-group col-md-2">
- <input type="text" class="form-control oe_searchbox" placeholder="Filter by location..."/>
- <span class="input-group-btn">
- <button class="btn btn-danger js_clear_search" type="button">x</button>
- </span>
- </div>
- <button type="button" class='btn btn-default js_pick_pack pull-right'> Put in Pack </button>
- <button type="button" class='btn btn-default js_drop_down pull-right'> Process </button>
- <div class='oe_placeholder_picking_editor'/>
- </div>
- </div>
+ <div class='oe_placeholder_picking_editor'/>
</div>
</t>