[IMP/FIX] stock: fixed issues related to date_done field on stock.picking, improved kanban view of picking types

bzr revid: qdp-launchpad@openerp.com-20140106143002-401y636tboeohw31
This commit is contained in:
Quentin (OpenERP) 2014-01-06 15:30:02 +01:00
parent 066ddf883e
commit 4f9da8b85f
2 changed files with 57 additions and 26 deletions

View File

@ -774,6 +774,7 @@ class stock_picking(osv.osv):
if not default.get('backorder_id'):
default['backorder_id'] = False
default['pack_operation_ids'] = []
default['date_done'] = False
return super(stock_picking, self).copy(cr, uid, id, default, context)
def do_print_delivery(self, cr, uid, ids, context=None):
@ -907,7 +908,7 @@ class stock_picking(osv.osv):
move_obj = self.pool.get("stock.move")
move_obj.write(cr, uid, backorder_move_ids, {'picking_id': backorder_id}, context=context)
self.pool.get("stock.picking").action_confirm(cr, uid, [picking.id], context=context)
self.write(cr, uid, [picking.id], {'date_done': time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)}, context=context)
self.action_confirm(cr, uid, [backorder_id], context=context)
return backorder_id
return False
@ -1655,7 +1656,6 @@ class stock_move(osv.osv):
'company_id': move.company_id and move.company_id.id or False,
'move_type': move.group_id and move.group_id.move_type or 'one',
'partner_id': move.group_id and move.group_id.partner_id and move.group_id.partner_id.id or False,
'date_done': move.date_expected,
'picking_type_id': move.picking_type_id and move.picking_type_id.id or False,
}
pick = pick_obj.create(cr, uid, values, context=context)
@ -1783,6 +1783,7 @@ class stock_move(osv.osv):
@return:
"""
context = context or {}
picking_obj = self.pool.get("stock.picking")
quant_obj = self.pool.get("stock.quant")
pack_op_obj = self.pool.get("stock.pack.operation")
todo = [move.id for move in self.browse(cr, uid, ids, context=context) if move.state == "draft"]
@ -1829,6 +1830,13 @@ class stock_move(osv.osv):
procurement_ids.append(move.procurement_id.id)
self.write(cr, uid, ids, {'state': 'done', 'date': time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)}, context=context)
self.pool.get('procurement.order').check(cr, uid, procurement_ids, context=context)
#check picking state to set the date_done is needed
done_picking = []
for picking in picking_obj.browse(cr, uid, list(pickings), context=context):
if picking.state == 'done' and not picking.date_done:
done_picking.append(picking.id)
if done_picking:
picking_obj.write(cr, uid, done_picking, {'date_done': time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)}, context=context)
return True
def unlink(self, cr, uid, ids, context=None):
@ -3496,7 +3504,26 @@ class stock_picking_type(osv.osv):
section_result[-month_delta.months + 2]['value'] = groupby.get(value_field, 0)
return section_result
def _get_picking_data(self, cr, uid, ids, field_name, arg, context=None):
def _get_tristate_values(self, cr, uid, ids, field_name, arg, context=None):
picking_obj = self.pool.get('stock.picking')
res = dict.fromkeys(ids, [])
for picking_type_id in ids:
#get last 10 pickings of this type
picking_ids = picking_obj.search(cr, uid, [('picking_type_id', '=', picking_type_id), ('state', '=', 'done')], order='date_done desc', limit=10, context=context)
tristates = []
for picking in picking_obj.browse(cr, uid, picking_ids, context=context):
if picking.date_done > picking.date:
tristates.insert(0, {'tooltip': picking.name + _(': Late'), 'value': -1})
elif picking.backorder_id:
tristates.insert(0, {'tooltip': picking.name + _(': Backorder exists'), 'value': 0})
else:
tristates.insert(0, {'tooltip': picking.name + _(': OK'), 'value': 1})
res[picking_type_id] = tristates
return res
def _get_monthly_pickings(self, cr, uid, ids, field_name, arg, context=None):
obj = self.pool.get('stock.picking')
res = dict.fromkeys(ids, False)
month_begin = date.today().replace(day=1)
@ -3505,7 +3532,7 @@ class stock_picking_type(osv.osv):
for id in ids:
created_domain = [
('picking_type_id', '=', id),
('state', '=', 'assigned'),
('state', '=', 'done'),
('date', '>=', groupby_begin),
('date', '<', groupby_end),
]
@ -3516,7 +3543,7 @@ class stock_picking_type(osv.osv):
obj = self.pool.get('stock.picking')
domains = {
'count_picking_draft': [('state', '=', 'draft')],
'count_picking_waiting': [('state','in', ('confirmed', 'waiting'))],
'count_picking_waiting': [('state','=', 'confirmed')],
'count_picking_ready': [('state','=','assigned')],
'count_picking': [('state','in',('assigned','waiting','confirmed'))],
'count_picking_late': [('min_date','<', time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)), ('state','in',('assigned','waiting','confirmed'))],
@ -3621,9 +3648,12 @@ class stock_picking_type(osv.osv):
'active': fields.boolean('Active'),
# Statistics for the kanban view
'weekly_picking': fields.function(_get_picking_data,
'monthly_picking': fields.function(_get_monthly_pickings,
type='string',
string='Scheduled pickings per week'),
string='Done Pickings per Month'),
'last_done_picking': fields.function(_get_tristate_values,
type='string',
string='Last 10 Done Pickings'),
'count_picking_draft': fields.function(_get_picking_count,
type='integer', multi='_get_picking_count'),

View File

@ -842,7 +842,7 @@
<field name="name" string="Picking List" filter_domain="['|',('name','ilike', self),('origin','ilike',self)]"/>
<filter icon="terp-check" name="draft" string="Draft" domain="[('state','=','draft')]" help="Draft Moves"/>
<filter icon="terp-check" name="available" string="Ready" domain="[('state','=','assigned')]" help="Assigned Moves"/>
<filter icon="terp-check" name="waiting" string="Waiting" domain="[('state','in', ('waiting', 'confirmed'))]" help="Waiting Moves"/>
<filter icon="terp-check" name="waiting" string="Waiting Availability" domain="[('state','=', 'confirmed')]" help="Waiting Moves"/>
<filter icon="terp-camera_test" name="confirmed" string="Confirmed" domain="[('state','in', ('confirmed', 'waiting', 'assigned'))]" help="Confirmed Moves"/>
<filter icon="terp-dialog-close" name="done" string="Done" domain="[('state','=','done')]" help="Pickings already processed"/>
<separator/>
@ -878,8 +878,8 @@
<field name="search_view_id" ref="view_picking_internal_search"/>
</record>
<record id="action_picking_tree_draft" model="ir.actions.act_window">
<field name="name">Draft Transfers</field>
<record id="action_picking_tree_done" model="ir.actions.act_window">
<field name="name">Done Transfers</field>
<field name="res_model">stock.picking</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
@ -889,7 +889,7 @@
'search_default_picking_type_id': [active_id],
'default_picking_type_id': active_id,
'contact_display': 'partner_address',
'search_default_draft': 1,
'search_default_done': 1,
}
</field>
<field name="search_view_id" ref="view_picking_internal_search"/>
@ -912,8 +912,8 @@
<field name="search_view_id" ref="view_picking_internal_search"/>
</record>
<record id="action_picking_tree_ready_grouped" model="ir.actions.act_window">
<field name="name">Ready Transfers</field>
<record id="action_picking_tree_done_grouped" model="ir.actions.act_window">
<field name="name">Done Transfers by Date</field>
<field name="res_model">stock.picking</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
@ -923,7 +923,7 @@
'search_default_picking_type_id': [active_id],
'default_picking_type_id': active_id,
'contact_display': 'partner_address',
'search_default_available': 1,
'search_default_done': 1,
'group_by': ['date'],
}
</field>
@ -931,7 +931,7 @@
</record>
<record id="action_picking_tree_waiting" model="ir.actions.act_window">
<field name="name">Waiting Transfers</field>
<field name="name">Waiting Availability Transfers</field>
<field name="res_model">stock.picking</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
@ -1436,7 +1436,7 @@
<field name="name">stock.picking.type.kanban</field>
<field name="model">stock.picking.type</field>
<field name="arch" type="xml">
<kanban version="7.0" class="oe_background_grey" create="1">
<kanban version="7.0" class="oe_background_grey" create="0">
<field name="complete_name"/>
<field name="color"/>
<field name="count_picking_ready"/>
@ -1468,27 +1468,28 @@
</a>
</div>
<div class="oe_items_list oe_kanban_ellipsis">
<div>
<a name="%(action_picking_tree)d" type="action">All Operations</a>
</div>
<div>
<a name="%(action_picking_tree_ready)d" type="action">
<field name="count_picking_ready"/> Ready
</a>
<t t-if="record.count_picking_ready.raw_value &gt; 0">
<a name="%(action_picking_tree_ready_grouped)d" type="action" class="oe_sparkline_bar_link">
<field name="weekly_picking" widget="sparkline_bar">Monthly Ready Operations</field>
<a name="%(action_picking_tree_done)d" type="action" class="oe_sparkline_bar_link">
<field name="last_done_picking" widget="sparkline_bar" options="{'type': 'tristate', 'colorMap': {'0': 'orange', '-1': 'red', '1': 'green'}}">Last 10 Done Operations</field>
</a>
</t>
</div>
<div t-if="record.count_picking_waiting.raw_value &gt; 0">
<a name="%(action_picking_tree_waiting)d" type="action">
<field name="count_picking_waiting"/> Waiting
<field name="count_picking_waiting"/> Waiting Availability
</a>
</div>
<div>
<a name="%(action_picking_tree)d" type="action">All Operations</a>
<!--<a name="%(action_picking_tree_done_grouped)d" type="action" class="oe_sparkline_bar_link">
<field name="monthly_picking" widget="sparkline_bar">Monthly Done Operations</field>
</a>-->
</div>
</div>
<div class="oe_picking_type_gauge">
<field name="rate_picking_late" widget="gauge" style="width:150px; height: 110px;" options="{'levelcolors': ['#a9d70b', '#f9c802', '#ff0000']}">Late (%%)</field>
<field name="rate_picking_late" widget="gauge" style="width:150px; height: 110px;" options="{'levelcolors': ['#a9d70b', '#f9c802', '#ff0000'], 'action_jump': '%(action_picking_tree_late)d'}">Late (%%)</field>
<field name="rate_picking_backorders" widget="gauge" style="width:150px; height: 110px;">Backorders (%%)</field>
<div class="oe_gauge_labels">
<div class="oe_gauge_label_column">
@ -1517,7 +1518,7 @@
<field name="res_model">stock.picking.type</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_mode">kanban</field>
<field name="view_mode">kanban,form</field>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to create a new picking type.