diff --git a/addons/stock/wizard/stock_invoice_onshipping.py b/addons/stock/wizard/stock_invoice_onshipping.py index cb6dd79a632..d841c7cb37a 100644 --- a/addons/stock/wizard/stock_invoice_onshipping.py +++ b/addons/stock/wizard/stock_invoice_onshipping.py @@ -29,90 +29,67 @@ class stock_invoice_onshipping(osv.osv_memory): _columns = { 'journal_id': fields.many2one('account.journal', 'Destination Journal', required=True), 'group': fields.boolean("Group by partner"), - 'type': fields.selection([('out_invoice', 'Customer Invoice'), - ('in_invoice', 'Supplier Invoice'), - ('out_refund', 'Customer Refund'), - ('in_refund', 'Supplier Refund')] , 'Type', required=True), 'invoice_date': fields.date('Invoiced date'), } - + def view_init(self, cr, uid, fields_list, context=None): if context is None: context = {} - res= super(stock_invoice_onshipping, self).view_init(cr, uid, fields_list, context=context) - pick_obj=self.pool.get('stock.picking') - count=0 - for pick in pick_obj.browse(cr, uid,context.get('active_ids', False)): + res = super(stock_invoice_onshipping, self).view_init(cr, uid, fields_list, context=context) + pick_obj = self.pool.get('stock.picking') + count = 0 + active_ids = context.get('active_ids',[]) + for pick in pick_obj.browse(cr, uid, active_ids): if pick.invoice_state != '2binvoiced': - count=count+1 - if len(context.get('active_ids'))==1 and count==1: - raise osv.except_osv(_('Warning !'),'This picking list does not require invoicing.') - if len(context.get('active_ids'))==count: - raise osv.except_osv(_('Warning !'),'None of these picking lists require invoicing.') + count += 1 + if len(active_ids) == 1 and count: + raise osv.except_osv(_('Warning !'), _('This picking list does not require invoicing.')) + if len(active_ids) == count: + raise osv.except_osv(_('Warning !'), _('None of these picking lists require invoicing.')) return res - - def _get_type(self, cr, uid, context=None): - """ To get invoice type. - @param self: The object pointer. - @param cr: A database cursor - @param uid: ID of the user currently logged in - @param ids: The ID or list of IDs if we want more than one - @param context: A standard dictionary - @return: Invoice type - """ + + def _get_type(self, pick): + src_usage = dest_usage = None + pick_type = None + if pick.invoice_state=='2binvoiced': + if pick.move_lines: + src_usage = pick.move_lines[0].location_id.usage + dest_usage = pick.move_lines[0].location_dest_id.usage + if pick.type == 'out' and dest_usage == 'supplier': + pick_type = 'in_refund' + elif pick.type == 'out' and dest_usage == 'customer': + pick_type = 'out_invoice' + elif pick.type == 'in' and src_usage == 'supplier': + pick_type = 'in_invoice' + elif pick.type == 'in' and src_usage == 'customer': + pick_type = 'out_refund' + else: + pick_type = 'out_invoice' + return pick_type + + def create_invoice(self, cr, uid, ids, context=None): if context is None: context = {} - picking_obj = self.pool.get('stock.picking') - src_usage = dest_usage = None - for pick in picking_obj.browse(cr, uid, context['active_ids'], context=context): - if pick.invoice_state=='2binvoiced': - if pick.move_lines: - src_usage = pick.move_lines[0].location_id.usage - dest_usage = pick.move_lines[0].location_dest_id.usage - if pick.type == 'out' and dest_usage == 'supplier': - type = 'in_refund' - elif pick.type == 'out' and dest_usage == 'customer': - type = 'out_invoice' - elif pick.type == 'in' and src_usage == 'supplier': - type = 'in_invoice' - elif pick.type == 'in' and src_usage == 'customer': - type = 'out_refund' - else: - type = 'out_invoice' - return type - - _defaults = { - 'type': _get_type, - } - - def create_invoice(self, cr, uid, ids, context): - """ To create invoice - @param self: The object pointer. - @param cr: A database cursor - @param uid: ID of the user currently logged in - @param ids: the ID or list of IDs if we want more than one - @param context: A standard dictionary - @return: Invoice ids - """ result = [] picking_obj = self.pool.get('stock.picking') - mod_obj = self.pool.get('ir.model.data') - act_obj = self.pool.get('ir.actions.act_window') - for onshipdata_obj in self.read(cr, uid, ids, ['journal_id', 'group', 'type', 'invoice_date']): - if context.get('new_picking', False): - onshipdata_obj[id] = onshipdata_obj.new_picking - onshipdata_obj[ids] = onshipdata_obj.new_picking + onshipdata_obj = self.read(cr, uid, ids[0], ['journal_id', 'group', 'invoice_date']) + if context.get('new_picking', False): + onshipdata_obj['id'] = onshipdata_obj.new_picking + onshipdata_obj[ids] = onshipdata_obj.new_picking - type = onshipdata_obj['type'] - context['date_inv'] = onshipdata_obj['invoice_date'] - res = picking_obj.action_invoice_create(cr, uid,context['active_ids'], - journal_id = onshipdata_obj['journal_id'], - group=onshipdata_obj['group'], - type=type, - context=context) - invoice_ids = res.values() - if not invoice_ids: - raise osv.except_osv(_('Error'), _('Invoice is not created')) + context['date_inv'] = onshipdata_obj['invoice_date'] + invoice_ids = [] + for picking in picking_obj.browse(cr, uid, context.get('active_ids', []), context=context): + if picking.invoice_state == '2binvoiced': + res = picking_obj.action_invoice_create(cr, uid, [picking.id], + journal_id = onshipdata_obj['journal_id'], + group=onshipdata_obj['group'], + type=self._get_type(picking), + context=context) + invoice_ids.extend(res.values()) + + if not invoice_ids: + raise osv.except_osv(_('Error'), _('No invoice were created')) return { 'domain': "[('id','in', ["+','.join(map(str,invoice_ids))+"])]", @@ -120,7 +97,6 @@ class stock_invoice_onshipping(osv.osv_memory): 'view_type': 'form', 'view_mode': 'tree,form', 'res_model': 'account.invoice', - 'views': False, 'context': context, 'type': 'ir.actions.act_window', } diff --git a/addons/stock/wizard/stock_invoice_onshipping_view.xml b/addons/stock/wizard/stock_invoice_onshipping_view.xml index 2a660905c8c..6a4cfec5fca 100644 --- a/addons/stock/wizard/stock_invoice_onshipping_view.xml +++ b/addons/stock/wizard/stock_invoice_onshipping_view.xml @@ -6,18 +6,16 @@ stock.invoice.onshipping form -
- + + - - - +