2013-06-26 08:30:39 +00:00
|
|
|
|
|
|
|
function openerp_picking_widgets(instance){
|
|
|
|
var module = instance.stock;
|
|
|
|
|
|
|
|
module.PickingEditorWidget = instance.web.Widget.extend({
|
|
|
|
template: 'PickingEditorWidget',
|
2013-06-26 13:11:31 +00:00
|
|
|
init: function(parent,options){
|
|
|
|
this._super(parent,options);
|
|
|
|
},
|
2013-06-26 08:30:39 +00:00
|
|
|
get_header: function(){
|
2013-06-27 09:58:27 +00:00
|
|
|
var model = this.getParent();
|
|
|
|
return 'Picking: '+model.picking.name;
|
2013-06-26 08:30:39 +00:00
|
|
|
},
|
|
|
|
get_rows: function(){
|
2013-06-26 14:14:21 +00:00
|
|
|
var model = this.getParent();
|
|
|
|
var rows = [];
|
2013-06-27 14:00:54 +00:00
|
|
|
|
2013-06-26 14:14:21 +00:00
|
|
|
_.each( model.movelines, function(moveline){
|
|
|
|
rows.push({
|
|
|
|
cols: { product: moveline.product_id[1],
|
|
|
|
qty: moveline.product_qty,
|
2013-06-27 09:58:27 +00:00
|
|
|
rem: moveline.remaining_qty,
|
2013-06-26 14:14:21 +00:00
|
|
|
uom: moveline.product_uom[1],
|
|
|
|
loc: moveline.location_id[1],
|
|
|
|
stat: moveline.state
|
|
|
|
},
|
|
|
|
classes: (moveline.qty_remaining < 0 ? 'oe_invalid' : '')
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
return rows;
|
2013-06-26 08:30:39 +00:00
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
module.PackageEditorWidget = instance.web.Widget.extend({
|
|
|
|
template: 'PackageEditorWidget',
|
|
|
|
get_header: function(){
|
2013-06-27 12:32:02 +00:00
|
|
|
var model = this.getParent();
|
|
|
|
return model.current_package_id ? 'Current Operations for package: ' + model.current_package_id[1] : 'Current Operations';
|
2013-06-26 08:30:39 +00:00
|
|
|
},
|
|
|
|
get_rows: function(){
|
2013-06-27 09:58:27 +00:00
|
|
|
var model = this.getParent();
|
|
|
|
var rows = [];
|
|
|
|
|
|
|
|
_.each( model.operations, function(op){
|
2013-06-27 12:32:02 +00:00
|
|
|
if(model.current_package_id && op.package_id !== model.current_package_id){
|
|
|
|
return;
|
|
|
|
}
|
2013-06-27 09:58:27 +00:00
|
|
|
rows.push({
|
|
|
|
cols: {
|
|
|
|
product: op.product_id[1],
|
2013-06-27 12:32:02 +00:00
|
|
|
uom: op.product_uom ? product_uom[1] : '',
|
2013-06-27 09:58:27 +00:00
|
|
|
qty: op.product_qty,
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
return rows;
|
2013-06-26 08:30:39 +00:00
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
module.PackageSelectorWidget = instance.web.Widget.extend({
|
|
|
|
template: 'PackageSelectorWidget',
|
|
|
|
get_header: function(){
|
2013-06-27 14:00:54 +00:00
|
|
|
return this._header || 'Packages:';
|
2013-06-26 08:30:39 +00:00
|
|
|
},
|
|
|
|
get_rows: function(){
|
2013-06-27 14:00:54 +00:00
|
|
|
var model = this.getParent();
|
|
|
|
var rows = [];
|
|
|
|
_.each( model.packages, function(pack){
|
|
|
|
rows.push({
|
|
|
|
cols:{ pack: pack.name},
|
|
|
|
id: pack.id
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
return rows;
|
2013-06-26 08:30:39 +00:00
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
module.PickingMainWidget = instance.web.Widget.extend({
|
|
|
|
template: 'PickingMainWidget',
|
2013-06-26 09:20:29 +00:00
|
|
|
init: function(parent,params){
|
|
|
|
this._super(parent,params);
|
2013-06-26 14:14:21 +00:00
|
|
|
var self = this;
|
|
|
|
|
|
|
|
this.picking = null;
|
|
|
|
this.movelines = null;
|
2013-06-27 09:58:27 +00:00
|
|
|
this.operations = null;
|
2013-06-27 12:32:02 +00:00
|
|
|
this.current_package_id = instance.session.user_context.current_package_id;
|
2013-06-26 14:14:21 +00:00
|
|
|
|
|
|
|
window.pickwidget = this;
|
2013-06-26 13:11:31 +00:00
|
|
|
|
|
|
|
console.log('Action params:', params);
|
2013-06-27 12:32:02 +00:00
|
|
|
console.log('Session:',instance.session);
|
2013-06-26 13:11:31 +00:00
|
|
|
|
2013-06-26 14:14:21 +00:00
|
|
|
this.loaded = new instance.web.Model('stock.picking.in')
|
2013-06-26 13:11:31 +00:00
|
|
|
.query()
|
|
|
|
.all()
|
2013-06-26 14:14:21 +00:00
|
|
|
.then(function(picking_in){
|
|
|
|
self.picking = picking_in[0];
|
|
|
|
console.log('Picking In:',picking_in);
|
|
|
|
|
|
|
|
return new instance.web.Model('stock.move').call('read',[self.picking.move_lines, []]);
|
|
|
|
}).then(function(movelines){
|
|
|
|
self.movelines = movelines;
|
|
|
|
console.log('Move Lines:',movelines);
|
2013-06-27 09:58:27 +00:00
|
|
|
|
|
|
|
return new instance.web.Model('stock.pack.operation').call('read',[self.picking.pack_operation_ids, []]);
|
|
|
|
}).then(function(operations){
|
|
|
|
self.operations = operations;
|
|
|
|
console.log('Operations:',self.operations);
|
2013-06-27 14:00:54 +00:00
|
|
|
|
|
|
|
return new instance.web.Model('stock.quant.package').call('read',[self.picking.package_ids, []]);
|
|
|
|
}).then(function(packages){
|
|
|
|
self.packages = packages;
|
|
|
|
console.log('Packages:', self.packages);
|
2013-06-26 13:11:31 +00:00
|
|
|
});
|
2013-06-26 08:30:39 +00:00
|
|
|
|
|
|
|
},
|
|
|
|
start: function(){
|
|
|
|
var self = this;
|
|
|
|
instance.webclient.set_content_full_screen(true);
|
2013-06-27 12:57:08 +00:00
|
|
|
this.connect_barcode_scanner();
|
2013-06-26 08:30:39 +00:00
|
|
|
|
2013-06-26 14:38:15 +00:00
|
|
|
this.$('.js_pick_quit').click(function(){ self.quit(); });
|
2013-06-27 14:15:43 +00:00
|
|
|
this.$('.js_pick_pack').click(function(){ self.pack(); });
|
2013-06-26 14:38:15 +00:00
|
|
|
|
2013-06-26 14:14:21 +00:00
|
|
|
$.when(this.loaded).done(function(){
|
2013-06-27 09:58:27 +00:00
|
|
|
self.picking_editor = new module.PickingEditorWidget(self);
|
|
|
|
self.picking_editor.replace(self.$('.oe_placeholder_picking_editor'));
|
2013-06-26 14:14:21 +00:00
|
|
|
|
2013-06-27 09:58:27 +00:00
|
|
|
self.package_editor = new module.PackageEditorWidget(self);
|
|
|
|
self.package_editor.replace(self.$('.oe_placeholder_package_editor'));
|
2013-06-26 08:30:39 +00:00
|
|
|
|
2013-06-27 09:58:27 +00:00
|
|
|
self.package_selector = new module.PackageSelectorWidget(self);
|
|
|
|
self.package_selector.replace(self.$('.oe_placeholder_package_selector'));
|
2013-06-26 14:14:21 +00:00
|
|
|
});
|
2013-06-26 08:30:39 +00:00
|
|
|
|
|
|
|
|
|
|
|
return this._super();
|
|
|
|
},
|
2013-06-26 14:14:21 +00:00
|
|
|
scan: function(ean){
|
2013-06-27 09:58:27 +00:00
|
|
|
var self = this;
|
2013-06-27 12:57:08 +00:00
|
|
|
console.log('Scan: ',ean);
|
2013-06-26 14:14:21 +00:00
|
|
|
new instance.web.Model('stock.picking')
|
2013-06-27 14:00:54 +00:00
|
|
|
.call('get_barcode_and_return_todo_stuff', [self.picking.id, ean])
|
2013-06-27 09:58:27 +00:00
|
|
|
.then(function(todo){
|
|
|
|
|
|
|
|
_.each(todo.moves_to_update, function(update){
|
|
|
|
if(update[0] === 0){ // create a new line
|
|
|
|
console.log('New line:',update);
|
|
|
|
self.movelines.push(update[2]);
|
|
|
|
|
|
|
|
}else if(update[0] === 1){ // update a line
|
|
|
|
console.log('Update line:',update);
|
|
|
|
for(var i = 0; i < self.movelines.length; i++){
|
|
|
|
if( self.movelines[i].id === update[1]){
|
|
|
|
for(field in update[2]){
|
|
|
|
self.movelines[i][field] = update[2][field];
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}else if(update[0] === 2){ // remove a line
|
|
|
|
console.log('Remove line:',update);
|
|
|
|
for(var i = 0; i < self.movelines.length; i++){
|
|
|
|
if( self.movelines[i].id === update[1] ){
|
|
|
|
self.movelines.splice(i,1);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
2013-06-27 14:00:54 +00:00
|
|
|
return new instance.web.Model('stock.picking.in').call('read',[[self.picking.id],[]])
|
|
|
|
}).then(function(picking){
|
|
|
|
self.picking = picking[0];
|
|
|
|
console.log('New Picking: ',self.picking);
|
|
|
|
|
|
|
|
return new instance.web.Model('stock.pack.operation').call('read',[self.picking.pack_operation_ids, []])
|
|
|
|
}).then(function(operations){
|
|
|
|
console.log('New Operations: ',operations);
|
|
|
|
self.operations = operations;
|
|
|
|
|
|
|
|
return new instance.web.Model('stock.quant.package').call('read',[self.picking.package_ids, []]);
|
|
|
|
}).then(function(packages){
|
|
|
|
console.log('New Packages: ',packages);
|
|
|
|
self.packages = packages;
|
|
|
|
|
|
|
|
self.picking_editor.renderElement();
|
|
|
|
self.package_editor.renderElement();
|
|
|
|
self.package_selector.renderElement();
|
|
|
|
console.log('Updated the UI');
|
2013-06-26 14:14:21 +00:00
|
|
|
});
|
|
|
|
},
|
2013-06-27 14:15:43 +00:00
|
|
|
pack: function(){
|
|
|
|
var self = this;
|
|
|
|
console.log('Pack');
|
|
|
|
new instance.web.Model('stock.picking').call('action_pack',[[self.picking.id]])
|
|
|
|
.then(function(){
|
|
|
|
instance.session.user_context.current_package_id = false;
|
|
|
|
self.current_package_id = instance.session.user_context.current_package_id;
|
|
|
|
console.log('Context Reset');
|
|
|
|
|
2013-06-27 14:21:18 +00:00
|
|
|
return new instance.web.Model('stock.picking.in').call('read',[[self.picking.id],[]])
|
|
|
|
}).then(function(picking){
|
|
|
|
self.picking = picking[0];
|
|
|
|
console.log('New Picking: ',self.picking);
|
|
|
|
|
2013-06-27 14:15:43 +00:00
|
|
|
return new instance.web.Model('stock.pack.operation').call('read',[self.picking.pack_operation_ids, []])
|
|
|
|
}).then(function(operations){
|
|
|
|
console.log('New Operations: ',operations);
|
|
|
|
self.operations = operations;
|
|
|
|
|
|
|
|
return new instance.web.Model('stock.quant.package').call('read',[self.picking.package_ids, []]);
|
|
|
|
}).then(function(packages){
|
|
|
|
console.log('New Packages: ',packages);
|
|
|
|
self.packages = packages;
|
|
|
|
|
|
|
|
self.picking_editor.renderElement();
|
|
|
|
self.package_editor.renderElement();
|
|
|
|
self.package_selector.renderElement();
|
|
|
|
console.log('Updated the UI');
|
|
|
|
});
|
|
|
|
},
|
2013-06-27 12:57:08 +00:00
|
|
|
connect_barcode_scanner: function(){
|
|
|
|
var self =this;
|
|
|
|
var code = [];
|
|
|
|
var timestamp = 0;
|
|
|
|
$('body').delegate('','keyup',function(e){
|
|
|
|
if (e.keyCode >= 48 && e.keyCode < 58){
|
|
|
|
if(timestamp + 30 < new Date().getTime()){
|
|
|
|
code = [];
|
|
|
|
}
|
|
|
|
timestamp = new Date().getTime();
|
|
|
|
code.push(e.keyCode - 48);
|
|
|
|
if(code.length === 13){
|
|
|
|
self.scan(code.join(''));
|
|
|
|
code = [];
|
|
|
|
}
|
|
|
|
}else{
|
|
|
|
code = [];
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
disconnect_barcode_scanner: function(){
|
|
|
|
$('body').undelegate('', 'keyup')
|
|
|
|
},
|
2013-06-26 14:38:15 +00:00
|
|
|
quit: function(){
|
|
|
|
console.log('Quit');
|
2013-06-27 12:57:08 +00:00
|
|
|
disconnect_barcode_scanner();
|
2013-06-26 14:38:15 +00:00
|
|
|
instance.webclient.set_content_full_screen(false);
|
|
|
|
window.location = '/'; // FIXME THIS IS SHIT NIV WILL KILL YOU (BY MULTIPLE FACE-STABBING) IF YOU MERGE THIS IN TRUNK
|
|
|
|
},
|
2013-06-26 08:30:39 +00:00
|
|
|
});
|
|
|
|
}
|