From f6a4f5c05f465bd01c99fc5885848f5484987652 Mon Sep 17 00:00:00 2001 From: Josse Colpaert <jco@odoo.com> Date: Wed, 26 Aug 2015 13:30:14 +0200 Subject: [PATCH] [IMP] stock: pack operation details usability: change gear into pencil, use correct record, split quantities --- addons/stock/stock.py | 30 ++++++++++++++++++++++++++++-- addons/stock/stock_view.xml | 28 +++++++++++++++++----------- 2 files changed, 45 insertions(+), 13 deletions(-) diff --git a/addons/stock/stock.py b/addons/stock/stock.py index 1ad6b363df29..015913458b65 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -4323,6 +4323,15 @@ class stock_pack_operation(osv.osv): 'to_loc': _get_default_to_loc, } + def split_quantities(self, cr, uid, ids, context=None): + for pack in self.browse(cr, uid, ids, context=context): + if pack.product_qty - pack.qty_done > 0.0 and pack.qty_done < pack.product_qty: + pack2 = self.copy(cr, uid, pack.id, default={'qty_done': 0.0, 'product_qty': pack.product_qty - pack.qty_done}, context=context) + self.write(cr, uid, [pack.id], {'product_qty': pack.qty_done}, context=context) + else: + raise UserError(_('The quantity to split should be smaller than the quantity To Do. ')) + return True + def write(self, cr, uid, ids, vals, context=None): vals['fresh_record'] = False context = context or {} @@ -4346,7 +4355,7 @@ class stock_pack_operation(osv.osv): if ops.product_id.tracking == 'serial': for opslot in ops.pack_lot_ids: if opslot.qty not in (1.0, 0.0): - raise UserError(_('You should provide a different Lot for each piece')) + raise UserError(_('You should provide a different serial number for each piece')) def save(self, cr, uid, ids, context=None): for pack in self.browse(cr, uid, ids, context=context): @@ -4371,7 +4380,7 @@ class stock_pack_operation(osv.osv): 'only_create': only_create, 'show_reserved': show_reserved}) return { - 'name': _('Split Lot'), + 'name': _('Lot Details'), 'type': 'ir.actions.act_window', 'view_type': 'form', 'view_mode': 'form', @@ -4383,6 +4392,23 @@ class stock_pack_operation(osv.osv): 'context': ctx, } + def show_details(self, cr, uid, ids, context=None): + data_obj = self.pool['ir.model.data'] + view = data_obj.xmlid_to_res_id(cr, uid, 'stock.view_pack_operation_details_form_save') + pack = self.browse(cr, uid, ids[0], context=context) + return { + 'name': _('Operation Details'), + 'type': 'ir.actions.act_window', + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'stock.pack.operation', + 'views': [(view, 'form')], + 'view_id': view, + 'target': 'new', + 'res_id': pack.id, + 'context': context, + } + class stock_pack_operation_lot(osv.osv): _name = "stock.pack.operation.lot" diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml index 8f33eaf077a8..59552245d4a2 100644 --- a/addons/stock/stock_view.xml +++ b/addons/stock/stock_view.xml @@ -706,13 +706,13 @@ <group name="qty_to"> <group string="Quantities"> <label for="qty_done"/> - <span class="oe_inline"> - <field name="qty_done" nolabel="1" attrs="{'readonly': [('lots_visible','=',True)]}"/> + <div> + <field name="qty_done" nolabel="1" attrs="{'readonly': [('lots_visible','=',True)]}" class="oe_inline"/> / - <field name="product_qty"/> - <field name="product_uom_id" options="{"no_open": True}" groups="product.group_uom"/> - </span> - <!--<button name="split_quantities" class="oe_link" string="Split" type="object"/> TODO--> + <field name="product_qty" class="oe_inline"/> + <field name="product_uom_id" options="{'no_open': True, 'no_create': True}" groups="product.group_uom" class="oe_inline"/> + </div> + </group> <group string="To"> <field name="location_dest_id" domain="[('id', 'child_of', picking_destination_location_id)]" groups="stock.group_locations"/> @@ -726,14 +726,19 @@ <record id="view_pack_operation_details_form_save" model="ir.ui.view"> <field name="name">stock.pack.operation.details.form.save</field> <field name="model">stock.pack.operation</field> + <field name="mode">primary</field> <field name="inherit_id" ref="stock.view_pack_operation_details_form"/> <field eval="15" name="priority"/> <field name="arch" type="xml"> <group name="qty_to" position="after"> <footer> <button name="save" type="object" string="Save" class="oe_highlight"/> + <button string="Discard" special="cancel"/> </footer> </group> + <field name="product_uom_id" position="after"> + <button name="split_quantities" attrs="{'invisible': ['|', ('qty_done', '<=', 0.0), ('product_qty', '<=', 0.0)]}" class="oe_link" string="Split" type="object"/> + </field> </field> </record> @@ -781,6 +786,7 @@ </group> <footer> <button name="save" type="object" string="Save" class="oe_highlight" attrs="{'invisible':[('state','=','done')]}"/> + <button string="Discard" special="cancel"/> </footer> </form> </field> @@ -838,7 +844,7 @@ <field name="recompute_pack_op" invisible="1"/> <field name="pack_operation_ids" invisible="1"/> <field name="pack_operation_product_ids" options="{'reload_on_button': True}" context="{'default_picking_id': id, 'default_location_id': location_id, 'default_location_dest_id': location_dest_id}"> - <tree editable="bottom" decoration-muted="result_package_id" decoration-danger="qty_done>product_qty" decoration-success="qty_done==product_qty and state!='done'"> + <tree editable="bottom" decoration-muted="result_package_id" decoration-danger="qty_done>product_qty" decoration-success="qty_done==product_qty and state!='done' and not result_package_id"> <field name="package_id" groups="stock.group_tracking_lot" invisible="1"/> <field name="product_id" on_change="product_id_change(product_id, product_uom_id, product_qty)" required="1" attrs="{'readonly': [('fresh_record', '=', False)]}"/> <field name="fresh_record" invisible="1"/> @@ -855,7 +861,7 @@ <button name="split_lot" string="Lot Split" type="object" icon="fa-list" groups="stock.group_production_lot" attrs="{'invisible': ['|', ('lots_visible', '=', False), ('state', 'not in', ['confirmed', 'assigned', 'waiting', 'partially_available','done'])]}"/> <field name="product_qty" readonly="1" attrs="{'required': [('product_id', '!=', False)]}"/> - <button name="%(stock.pack_details)d" string="Modify" type="action" icon="STOCK_EXECUTE" + <button name="show_details" string="Modify" type="object" icon="fa-pencil" states="confirmed,assigned,waiting,partially_available"/> </tree> </field> @@ -872,7 +878,7 @@ <field name="qty_done" invisible="1"/> <field name="lots_visible" invisible="1"/> <field name="processed_boolean"/> - <button name="%(stock.pack_details)d" string="Modify" type="action" icon="STOCK_EXECUTE" + <button name="show_details" string="Modify" type="object" icon="fa-pencil" states="confirmed,assigned,waiting,partially_available" groups="base.group_no_one"/> </tree> </field> @@ -1625,7 +1631,7 @@ <group> <field name="code" on_change="onchange_picking_code(code)"/> <field name="return_picking_type_id"/> - <field name="barcode_nomenclature_id"/> + <field name="barcode_nomenclature_id" groups="base.group_no_one"/> </group> </group> <group> @@ -2087,7 +2093,7 @@ <form string="Package"> <sheet> <div class="oe_button_box" name="button_box"> - <button name="unpack" string="Unpack" type="object"/> + <button name="unpack" string="Unpack" type="object" groups="base.group_no_one"/> <button class="oe_stat_button" name="%(action_picking_tree_all)d" string="Package Transfers" type="action" widget="statinfo" icon="fa-dropbox"/> -- GitLab