diff --git a/addons/stock/__openerp__.py b/addons/stock/__openerp__.py index b3d7e30f1ce..a4acc026d7e 100644 --- a/addons/stock/__openerp__.py +++ b/addons/stock/__openerp__.py @@ -98,7 +98,15 @@ Dashboard / Reports for Warehouse Management will include: 'installable': True, 'application': True, 'auto_install': False, - 'css': [ 'static/src/css/stock.css' ], + 'css': [ + 'static/src/css/picking.css', + 'static/src/css/stock.css', + ], + 'js': [ + 'static/src/js/widgets.js', + 'static/src/js/main.js', + ], + 'qweb':['static/src/xml/picking.xml'], } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/stock/static/src/css/picking.css b/addons/stock/static/src/css/picking.css new file mode 100644 index 00000000000..6df9459278b --- /dev/null +++ b/addons/stock/static/src/css/picking.css @@ -0,0 +1,134 @@ + +/* ----------------------- * + * PICKING WIDGET LAYOUT * + * ----------------------- */ + +.oe_pick_widget { + position: absolute; + top: 0px; right: 0px; bottom: 0px; left: 0px; + color: #444444; + background: #686868; + text-shadow: none; + font-family: 'Lato'; +} +.oe_pick_widget .oe_pick_layout { + width: 100%; + height: 100%; +} + +.oe_pick_widget .oe_pick_header{ + background: #454343; + background-image: linear-gradient(#646060,#262626); +} +.oe_pick_widget .oe_pick_body_cont{ + height: 100%; +} +.oe_pick_widget .oe_pick_body{ + width: 100%; + height: 100%; + background-color: white; + background: url('/web/static/src/img/form_sheetbg.png'); + box-shadow: 0px 9px 5px -5px rgba(0, 0, 0, 0.16) inset; + overflow: hidden; + overflow-y: auto; +} +.oe_pick_widget .oe_pick_app{ + width: 600px; + background: white; + margin: 40px auto; + padding: 20px; + border: solid 1px rgb(228, 228, 255); + box-shadow: 0px 2px 3px rgba(114, 114, 175, 0.11); +} +.oe_pick_widget .oe_pick_toolbar{ + width: 600px; + margin: auto; + text-align: center; +} +.oe_pick_widget .oe_pick_button{ + display: inline-block; + min-width: 120px; + padding: 5px; + font-size: 18px; + border-radius: 3px; + margin: 10px 5px; + text-align: center; + line-height: 30px; + background: linear-gradient(#b2b3d7, #7f82ac); + color: #273072; + border: 1px solid #353A7E; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(255, 255, 255, 0.8) inset; + cursor: pointer; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5); +} +.oe_pick_widget .oe_pick_right_toolbar{ + float: right; +} +.oe_pick_widget .oe_pick_right_toolbar .oe_pick_button{ + margin-right: 10px; +} +.oe_pick_widget .oe_pick_col_small{ width: 60px; } +.oe_pick_widget .oe_pick_col_medium{ width: 100px; } +.oe_pick_widget .oe_pick_col_big{ width: 200px; } +.oe_pick_widget .oe_pick_col_expand{ width: 100%; } +.oe_pick_widget .oe_centeralign{ text-align: center; } + +.oe_pick_widget .oe_invalid{ + background: rgb(255, 226, 226); + color: rgb(168, 6, 6); +} + +/* ----------------------- * + * PICKING TABLES * + * ----------------------- */ + +.oe_pick_widget .oe_pick_list{ + margin: 0px 0px 20px 0px; + padding: 5px; +} + +.oe_pick_widget .oe_pick_list_header{ + font-size: 20px; + margin-bottom: 5px; +} +.oe_pick_widget .oe_pick_list_table{ + background: whitesmoke; + width: 100%; + table-layout: fixed; + font-size: 16px; + border-radius: 3px; + +} +.oe_pick_widget .oe_pick_list_table tbody tr:nth-child(odd){ + background: rgb(250,250,250); +} +.oe_pick_widget .oe_pick_list_table td, +.oe_pick_widget .oe_pick_list_table th { + padding: 5px; + overflow: hidden; + text-overflow: ellipsis; +} +.oe_pick_widget .oe_pick_list_table thead{ + background: rgb(224, 225, 235); + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.oe_pick_widget .oe_pick_list_table th { + background: none; + border: none; + font-weight: bold; +} +.oe_pick_widget .oe_row_button{ + display: inline-block; + background: rgb(255, 255, 255); + width: 16px; + height: 16px; + line-height: 14px; + color: rgb(102, 98, 133); + font-weight: bold; + border-radius: 9px; + border: solid 1px rgba(0, 0, 0, 0.09); + cursor: pointer; +} + + diff --git a/addons/stock/static/src/js/main.js b/addons/stock/static/src/js/main.js new file mode 100644 index 00000000000..ca345c5e6b1 --- /dev/null +++ b/addons/stock/static/src/js/main.js @@ -0,0 +1,14 @@ +console.log('Executing picking module'); + +openerp.stock = function(instance){ + + console.log('Loading stock picking module'); + + instance.stock = instance.stock || {}; + + openerp_picking_widgets(instance); + + instance.web.client_actions.add('stock.ui', 'instance.stock.PickingMainWidget'); +}; + + diff --git a/addons/stock/static/src/js/widgets.js b/addons/stock/static/src/js/widgets.js new file mode 100644 index 00000000000..7792939c780 --- /dev/null +++ b/addons/stock/static/src/js/widgets.js @@ -0,0 +1,124 @@ + +function openerp_picking_widgets(instance){ + var module = instance.stock; + + module.PickingEditorWidget = instance.web.Widget.extend({ + template: 'PickingEditorWidget', + init: function(parent,options){ + this._super(parent,options); + }, + get_header: function(){ + return this._header || 'Picking: INTERNAL/00112'; + }, + get_rows: function(){ + var model = this.getParent(); + var rows = []; + console.log('Parent:', this.getParent()); + + _.each( model.movelines, function(moveline){ + console.log('Moveline:',moveline); + rows.push({ + cols: { product: moveline.product_id[1], + qty: moveline.product_qty, + rem: moveline.qty_remaining, + uom: moveline.product_uom[1], + loc: moveline.location_id[1], + stat: moveline.state + }, + classes: (moveline.qty_remaining < 0 ? 'oe_invalid' : '') + }); + }); + + return rows; + }, + }); + + module.PackageEditorWidget = instance.web.Widget.extend({ + template: 'PackageEditorWidget', + get_header: function(){ + return this._header || 'Package: 032 '; + }, + get_rows: function(){ + return this._rows || [ + { cols: { product:'abc', qty:1, uom: 5, }, }, + { cols: { product:'dec', qty:2, uom: 5, }, classes: '' }, + { cols: { product:'qcr', qty:4, uom: 5, }, }, + ]; + }, + }); + + module.PackageSelectorWidget = instance.web.Widget.extend({ + template: 'PackageSelectorWidget', + get_header: function(){ + return this._header || 'Package Selector'; + }, + get_rows: function(){ + return this._rows || [ + { cols: { pack:'abc', qty:12 }, }, + { cols: { pack:'def', qty:500 }, classes: '' }, + { cols: { pack:'ghi', qty:1 }, }, + ]; + }, + }); + + module.PickingMainWidget = instance.web.Widget.extend({ + template: 'PickingMainWidget', + init: function(parent,params){ + this._super(parent,params); + var self = this; + + this.picking = null; + this.movelines = null; + + window.pickwidget = this; + + console.log('Action params:', params); + + this.loaded = new instance.web.Model('stock.picking.in') + .query() + .all() + .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); + }); + + }, + start: function(){ + var self = this; + instance.webclient.set_content_full_screen(true); + + this.$('.js_pick_quit').click(function(){ self.quit(); }); + + $.when(this.loaded).done(function(){ + var picking_editor = new module.PickingEditorWidget(self); + picking_editor.replace(self.$('.oe_placeholder_picking_editor')); + + var package_editor = new module.PackageEditorWidget(self); + package_editor.replace(self.$('.oe_placeholder_package_editor')); + + var package_selector = new module.PackageSelectorWidget(self); + package_selector.replace(self.$('.oe_placeholder_package_selector')); + }); + + + return this._super(); + }, + scan: function(ean){ + new instance.web.Model('stock.picking') + .call('get_barcode_and_return_todo_stuff', [this.picking.id, ean]) + .then(function(results){ + console.log('STUFF TODO:', arguments); + }); + }, + quit: function(){ + console.log('Quit'); + 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 + }, + }); +} diff --git a/addons/stock/static/src/xml/picking.xml b/addons/stock/static/src/xml/picking.xml new file mode 100644 index 00000000000..9af59a67661 --- /dev/null +++ b/addons/stock/static/src/xml/picking.xml @@ -0,0 +1,193 @@ + + + + +
+
+ +
+ +
+
+
+ + + + + + + + +
+ +
+
+ + + + + + + + + + + + + + + +
+
+
+
+ ● +
+
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProductQtyRemUoMLocationStatus
+
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
ProductQtyUoM
+
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Package Qty
+ -
+
+
+ + +
+ + + + + + + +
+ +
+
Quit
+
+ +
+
Pack
+ +
Done
+
+ + +
+
+
+ +
+
+
+ +
+
+
+
+
+ +