From c55193994d0421b1d9e80c808a415d1dba7299d6 Mon Sep 17 00:00:00 2001 From: "Purnendu Singh (OpenERP)" Date: Mon, 19 Mar 2012 10:57:15 +0530 Subject: [PATCH] [IMP] sale: improve the logic of open invoice and open delivery oder so they will work for multiple invoices and delivery orders, added set to draft button in sent state bzr revid: psi@tinyerp.com-20120319052715-n7nga0ky12mwwtya --- addons/sale/sale.py | 91 +++++++++++++++++++++------------------ addons/sale/sale_view.xml | 4 +- 2 files changed, 50 insertions(+), 45 deletions(-) diff --git a/addons/sale/sale.py b/addons/sale/sale.py index d19d43a22cf..3b7eff07cbf 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -516,60 +516,65 @@ class sale_order(osv.osv): def action_view_invoice(self, cr, uid, ids, context=None): mod_obj = self.pool.get('ir.model.data') inv_ids = [] + result = {} for so in self.browse(cr, uid, ids, context=context): inv_ids+= [invoice.id for invoice in so.invoice_ids] - - res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_form') - res_id = res and res[1] or False - - return { - 'name': _('Customer Invoices'), - 'view_type': 'form', - 'view_mode': 'form', - 'view_id': [res_id], - 'res_model': 'account.invoice', - 'context': "{'type':'out_invoice', 'journal_type': 'sale'}", - 'type': 'ir.actions.act_window', - 'nodestroy': True, - 'target': 'current', - 'res_id': inv_ids and inv_ids[0] or False, - } + if len(inv_ids)>1: + res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_tree') + result.update({ + 'view_mode': 'tree,form', + 'res_id': inv_ids or False + }) + else: + res = mod_obj.get_object_reference(cr, uid, 'account', 'invoice_form') + result.update({ + 'view_mode': 'form', + 'res_id': inv_ids and inv_ids[0] or False, + }) + res_id = res and res[1] or False, + result.update({ + 'name': _('Cutomer Invoice'), + 'view_type': 'form', + 'view_id': [res_id], + 'res_model': 'account.invoice', + 'context': "{'type':'out_invoice', 'journal_type': 'sale'}", + 'type': 'ir.actions.act_window', + 'nodestroy': True, + 'target': 'current', + }) + return result + def action_view_delivery(self, cr, uid, ids, context=None): mod_obj = self.pool.get('ir.model.data') pick_ids = [] + result = {} for so in self.browse(cr, uid, ids, context=context): pick_ids += [picking.id for picking in so.picking_ids] if len(pick_ids) > 1: res = mod_obj.get_object_reference(cr, uid, 'stock', 'view_picking_out_tree') - res_id = res and res[1] or False, - return { - 'name': _('Delivery Order'), - 'view_type': 'form', - 'view_mode': 'tree', - 'view_id': res_id, - 'res_model': 'stock.picking', - 'context': "{'type':'out'}", - 'type': 'ir.actions.act_window', - 'nodestroy': True, - 'target': 'current', - 'res_id': pick_ids or False, - } - else: + result.update({ + 'view_mode': 'tree,form', + 'res_id': pick_ids or False + }) + else: res = mod_obj.get_object_reference(cr, uid, 'stock', 'view_picking_out_form') - res_id = res and res[1] or False, - return { - 'name': _('Delivery Order'), - 'view_type': 'form', - 'view_mode': 'form', - 'view_id': res_id, - 'res_model': 'stock.picking', - 'context': "{'type':'out'}", - 'type': 'ir.actions.act_window', - 'nodestroy': True, - 'target': 'current', - 'res_id': pick_ids and pick_ids[0] or False, - } + result.update({ + 'view_mode': 'form', + 'res_id': pick_ids and pick_ids[0] or False, + }) + res_id = res and res[1] or False, + result.update({ + 'name': _('Delivery Order'), + 'view_type': 'form', + 'view_id': res_id, + 'res_model': 'stock.picking', + 'context': "{'type':'out'}", + 'type': 'ir.actions.act_window', + 'nodestroy': True, + 'target': 'current', + }) + return result def action_invoice_create(self, cr, uid, ids, grouped=False, states=['confirmed', 'done', 'exception'], date_inv = False, context=None): res = False diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml index 2ad4059cb42..8ff740144e8 100644 --- a/addons/sale/sale_view.xml +++ b/addons/sale/sale_view.xml @@ -203,11 +203,11 @@