diff --git a/addons/hr/hr_department.py b/addons/hr/hr_department.py index 596bb80032e..825059bd46b 100644 --- a/addons/hr/hr_department.py +++ b/addons/hr/hr_department.py @@ -131,7 +131,7 @@ class res_users(osv.osv): parent_ids = map(lambda x: x['manager_id'][0], data_dept) cr.execute('SELECT res.user_id FROM hr_employee AS emp JOIN resource_resource AS res ON res.id=emp.resource_id \ WHERE emp.id IN %s', (tuple(parent_ids),)) - parent_ids = [x[0] for x in cr.fetchall()] + parent_ids = [x[0] for x in cr.fetchall() if x[0]] result[user_id] = parent_ids return result diff --git a/addons/project/report/project_report.py b/addons/project/report/project_report.py index 06ad777069e..f0cfb181f4a 100644 --- a/addons/project/report/project_report.py +++ b/addons/project/report/project_report.py @@ -41,7 +41,7 @@ class report_project_task_user(osv.osv): 'hours_effective': fields.float('Effective Hours', readonly=True), 'hours_delay': fields.float('Avg. Plan.-Eff.', readonly=True), 'remaining_hours': fields.float('Remaining Hours', readonly=True), - 'progress': fields.float('Progress', readonly=True), + 'progress': fields.float('Progress', readonly=True, group_operator='avg'), 'total_hours': fields.float('Total Hours', readonly=True), 'closing_days': fields.float('Days to Close', digits=(16,2), readonly=True, group_operator="avg", help="Number of Days to close the task"), diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml index 533c035d7ac..81834ebbdbf 100644 --- a/addons/purchase/purchase_view.xml +++ b/addons/purchase/purchase_view.xml @@ -301,15 +301,16 @@ purchase.order.line.form2 purchase.order.line form +
- + - + diff --git a/addons/purchase/stock.py b/addons/purchase/stock.py index 245da72cad8..49a28e352b2 100644 --- a/addons/purchase/stock.py +++ b/addons/purchase/stock.py @@ -40,7 +40,7 @@ class stock_picking(osv.osv): _inherit = 'stock.picking' _columns = { 'purchase_id': fields.many2one('purchase.order', 'Purchase Order', - ondelete='set null', select=True, readonly=True), + ondelete='set null', select=True), } _defaults = { 'purchase_id': lambda *a: False, diff --git a/addons/purchase/stock_view.xml b/addons/purchase/stock_view.xml index 867f48f6fe0..a991b79d0e9 100644 --- a/addons/purchase/stock_view.xml +++ b/addons/purchase/stock_view.xml @@ -19,7 +19,32 @@ id="act_purchase_order_2_stock_picking" name="Picking" res_model="stock.picking" - src_model="purchase.order"/> - + src_model="purchase.order" + context="{'contact_display': 'partner'}" /> + + + + tree + + + + + + form + + + + + + Incoming Picking Inherited + stock.picking + form + + + + + + + diff --git a/addons/sale/stock.py b/addons/sale/stock.py index d8df1901024..39260e759b4 100644 --- a/addons/sale/stock.py +++ b/addons/sale/stock.py @@ -35,7 +35,7 @@ stock_move() class stock_picking(osv.osv): _inherit = 'stock.picking' _columns = { - 'sale_id': fields.many2one('sale.order', 'Sale Order', ondelete='set null', select=True, readonly=True), + 'sale_id': fields.many2one('sale.order', 'Sale Order', ondelete='set null', select=True), } _defaults = { 'sale_id': False diff --git a/addons/sale/stock_view.xml b/addons/sale/stock_view.xml index 2e9e7e0b66e..73df12db523 100644 --- a/addons/sale/stock_view.xml +++ b/addons/sale/stock_view.xml @@ -12,5 +12,20 @@ + + + + + Outgoing picking Inherited + stock.picking + form + + + + + + + + diff --git a/addons/stock/wizard/stock_return_picking.py b/addons/stock/wizard/stock_return_picking.py index af422b63dd5..e1aa0dc4e13 100644 --- a/addons/stock/wizard/stock_return_picking.py +++ b/addons/stock/wizard/stock_return_picking.py @@ -30,27 +30,31 @@ class stock_return_picking(osv.osv_memory): _description = 'Return Picking' def default_get(self, cr, uid, fields, context): - """ + """ To get default values for the object. @param self: The object pointer. @param cr: A database cursor @param uid: ID of the user currently logged in - @param fields: List of fields for which we want default values - @param context: A standard dictionary - @return: A dictionary which of fields with values. - """ + @param fields: List of fields for which we want default values + @param context: A standard dictionary + @return: A dictionary with default values for all field in ``fields`` + """ res = super(stock_return_picking, self).default_get(cr, uid, fields, context=context) record_id = context and context.get('active_id', False) or False pick_obj = self.pool.get('stock.picking') pick = pick_obj.browse(cr, uid, record_id) - for m in [line for line in pick.move_lines]: - res['return%s'%(m.id)] = m.product_qty - if pick.invoice_state=='invoiced': - res['invoice_state'] = '2binvoiced' - else: - res['invoice_state'] = 'none' + if pick: + if 'invoice_state' in fields: + if pick.invoice_state=='invoiced': + res['invoice_state'] = '2binvoiced' + else: + res['invoice_state'] = 'none' + for line in pick.move_lines: + return_id = 'return%s'%(line.id) + if return_id in fields: + res[return_id] = line.product_qty return res - + def view_init(self, cr, uid, fields_list, context=None): """ Creates view dynamically and adding fields at runtime.