summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorJosse Colpaert <jco@odoo.com>2015-09-21 11:56:47 +0200
committerJosse Colpaert <jco@odoo.com>2015-09-25 12:00:29 +0200
commit9a42baa7e21f52a7d3879d6427b68a82e37f96bb (patch)
tree1a81cfda85a8500b382a8f6f39ce0da82c3826df /addons
parent5eb681bd037eb059f6d1250cc338183226b4e9bf (diff)
[IMP] stock: on picking form inverse done and to do fields on operations and lots input
Also check for plus sign only to be visible when necessary, which makes quantity unnecessary when handling serial numbers
Diffstat (limited to 'addons')
-rw-r--r--addons/stock/stock.py21
-rw-r--r--addons/stock/stock_view.xml12
2 files changed, 20 insertions, 13 deletions
diff --git a/addons/stock/stock.py b/addons/stock/stock.py
index d6ca16fd275..4ad9658bf26 100644
--- a/addons/stock/stock.py
+++ b/addons/stock/stock.py
@@ -4358,8 +4358,8 @@ class stock_pack_operation(osv.osv):
'product_id': fields.many2one('product.product', 'Product', ondelete="CASCADE"), # 1
'product_uom_id': fields.many2one('product.uom', 'Unit of Measure'),
'product_qty': fields.float('To Do', digits_compute=dp.get_precision('Product Unit of Measure'), required=True),
- 'qty_done': fields.float('Processed', digits_compute=dp.get_precision('Product Unit of Measure')),
- 'processed_boolean': fields.function(_get_bool, fnct_inv=_set_processed_qty, type='boolean', string='Processed'),
+ 'qty_done': fields.float('Done', digits_compute=dp.get_precision('Product Unit of Measure')),
+ 'processed_boolean': fields.function(_get_bool, fnct_inv=_set_processed_qty, type='boolean', string='Done'),
'package_id': fields.many2one('stock.quant.package', 'Source Package'), # 2
'pack_lot_ids': fields.one2many('stock.pack.operation.lot', 'operation_id', 'Lots Used'),
'result_package_id': fields.many2one('stock.quant.package', 'Destination Package', help="If set, the operations are packed into this package", required=False, ondelete='cascade'),
@@ -4486,23 +4486,28 @@ class stock_pack_operation_lot(osv.osv):
_name = "stock.pack.operation.lot"
_description = "Specifies lot/serial number for pack operations that need it"
- def _get_processed(self, cr, uid, ids, field_name, arg, context=None):
+ def _get_plus(self, cr, uid, ids, field_name, arg, context=None):
res = {}
for packlot in self.browse(cr, uid, ids, context=context):
- res[packlot.id] = (packlot.qty > 0.0)
+ if packlot.operation_id.product_id.tracking == 'serial':
+ res[packlot.id] = (packlot.qty == 0.0)
+ else:
+ res[packlot.id] = (packlot.qty_todo == 0.0) or (packlot.qty < packlot.qty_todo)
return res
_columns = {
'operation_id': fields.many2one('stock.pack.operation'),
- 'qty': fields.float('Quantity'),
+ 'qty': fields.float('Done'),
'lot_id': fields.many2one('stock.production.lot', 'Lot/Serial Number'),
'lot_name': fields.char('Lot Name'),
- 'qty_todo': fields.float('Quantity'),
- 'processed': fields.function(_get_processed, type='boolean', store={'stock.pack.operation.lot': (lambda self, cr, uid, ids ,c={}:ids, ['qty'], 10)}),
+ 'qty_todo': fields.float('To Do'),
+ 'plus_visible': fields.function(_get_plus, type='boolean'),
}
_defaults = {
'qty': lambda cr, uid, ids, c: 1.0,
+ 'qty_todo': lambda cr, uid, ids, c: 0.0,
+ 'plus_visible': True,
}
def _check_lot(self, cr, uid, ids, context=None):
@@ -4525,12 +4530,14 @@ class stock_pack_operation_lot(osv.osv):
def do_plus(self, cr, uid, ids, context=None):
for packlot in self.browse(cr, uid, ids, context=context):
self.write(cr, uid, [packlot.id], {'qty': packlot.qty + 1}, context=context)
+ self.pool['stock.pack.operation'].write(cr, uid, [packlot.operation_id.id], {'qty_done': packlot.operation_id.qty_done + 1}, context=context)
pack = self.browse(cr, uid, ids[0], context=context).operation_id.id
return self.pool['stock.pack.operation'].split_lot(cr, uid, [pack], context=context)
def do_minus(self, cr, uid, ids, context=None):
for packlot in self.browse(cr, uid, ids, context=context):
self.write(cr, uid, [packlot.id], {'qty': packlot.qty - 1}, context=context)
+ self.pool['stock.pack.operation'].write(cr, uid, [packlot.operation_id.id], {'qty_done': packlot.operation_id.qty_done - 1}, context=context)
pack = self.browse(cr, uid, ids[0], context=context).operation_id.id
return self.pool['stock.pack.operation'].split_lot(cr, uid, [pack], context=context)
diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml
index 64c2393f7c5..ddb813d6db5 100644
--- a/addons/stock/stock_view.xml
+++ b/addons/stock/stock_view.xml
@@ -757,16 +757,16 @@
</group>
<group>
<field name="pack_lot_ids" nolabel="1" attrs="{'readonly': [('state', '=', 'done')]}">
- <tree editable="bottom" decoration-success="qty_todo==qty">
+ <tree editable="bottom" decoration-success="qty_todo==qty" decoration-danger="(qty_todo &gt; 0) and (qty&gt;qty_todo)">
<field name="lot_name" invisible="not context.get('only_create', False)"/>
<field name="lot_id" invisible="context.get('only_create', False)"
domain="[('product_id','=', parent.product_id)]"
context="{'product_id': parent.product_id}"/>
- <field name="qty" invisible="context.get('serial') and context.get('only_create')"/>
+ <field name="qty_todo" invisible="not context.get('show_reserved') or context.get('serial')" readonly="1"/>
+ <field name="qty" invisible="context.get('serial')"/>
<button name="do_minus" type="object" icon="fa-minus-square" attrs="{'invisible': [('qty', '&lt;=', 0.99)]}" invisible="not context.get('show_reserved')"/>
- <button name="do_plus" type="object" icon="fa-plus-square" invisible="not context.get('show_reserved')"/>
- <field name="qty_todo" invisible="not context.get('show_reserved') or context.get('serial')" readonly="1" string="To Do"/>
- <field name="processed" invisible="1"/>
+ <button name="do_plus" type="object" icon="fa-plus-square" attrs="{'invisible': [('plus_visible', '=', False)]}" invisible="not context.get('show_reserved')"/>
+ <field name="plus_visible" invisible="1"/>
</tree>
</field>
</group>
@@ -843,10 +843,10 @@
<field name="to_loc" groups="stock.group_locations,stock.group_tracking_lot"/>
<field name="result_package_id" groups="stock.group_tracking_lot" context="{'location_id': location_dest_id}" invisible="1"/>
<field name="state" invisible="1"/>
+ <field name="product_qty" readonly="1" attrs="{'required': [('product_id', '!=', False)]}"/>
<field name="qty_done" attrs="{'readonly': [('lots_visible', '=', True)]}"/>
<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="show_details" string="Modify" type="object" icon="fa-pencil" groups="stock.group_locations"
states="confirmed,assigned,waiting,partially_available"/>
</tree>