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="{&quot;no_open&quot;: 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', '&lt;=', 0.0), ('product_qty', '&lt;=', 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&gt;product_qty" decoration-success="qty_done==product_qty and state!='done'">
+                                <tree editable="bottom" decoration-muted="result_package_id" decoration-danger="qty_done&gt;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