diff options
| author | Benoit Guillot <benoit.guillot@akretion.com.br> | 2012-08-29 10:39:33 +0200 |
|---|---|---|
| committer | Benoit Guillot <benoit.guillot@akretion.com.br> | 2012-08-29 10:39:33 +0200 |
| commit | 8f1a02e331f3b64d29f2cd9bd600c88d528690d0 (patch) | |
| tree | c3711780e5629c07084a045a495c1f2eeb526220 | |
| parent | 393b477ffe1576e9c034df04b0c92fb35c2d131b (diff) | |
[IMP] add method to prepair refund and add context in the method def refund
bzr revid: benoit.guillot@akretion.com.br-20120829083933-vfi198opk85dj91m
| -rw-r--r-- | addons/account/account_invoice.py | 96 | ||||
| -rw-r--r-- | addons/account/wizard/account_invoice_refund.py | 2 |
2 files changed, 51 insertions, 47 deletions
diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index 7bc9ceaaf61..41524e08bdf 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -1114,7 +1114,7 @@ class account_invoice(osv.osv): ids = self.search(cr, user, [('name',operator,name)] + args, limit=limit, context=context) return self.name_get(cr, user, ids, context) - def _refund_cleanup_lines(self, cr, uid, lines): + def _refund_cleanup_lines(self, cr, uid, lines, context=None): for line in lines: del line['id'] del line['invoice_id'] @@ -1126,60 +1126,64 @@ class account_invoice(osv.osv): line['invoice_line_tax_id'] = [(6,0, line.get('invoice_line_tax_id', [])) ] return map(lambda x: (0,0,x), lines) - def refund(self, cr, uid, ids, date=None, period_id=None, description=None, journal_id=None): - invoices = self.read(cr, uid, ids, ['name', 'type', 'number', 'reference', 'comment', 'date_due', 'partner_id', 'partner_contact', 'partner_insite', 'partner_ref', 'payment_term', 'account_id', 'currency_id', 'invoice_line', 'tax_line', 'journal_id', 'company_id']) + def prepair_refund(self, cr, uid, refund_id, invoice, date=None, period_id=None, description=None, journal_id=None, context=None): obj_invoice_line = self.pool.get('account.invoice.line') obj_invoice_tax = self.pool.get('account.invoice.tax') obj_journal = self.pool.get('account.journal') - new_ids = [] - for invoice in invoices: - del invoice['id'] - - type_dict = { - 'out_invoice': 'out_refund', # Customer Invoice - 'in_invoice': 'in_refund', # Supplier Invoice - 'out_refund': 'out_invoice', # Customer Refund - 'in_refund': 'in_invoice', # Supplier Refund - } + del invoice['id'] - invoice_lines = obj_invoice_line.read(cr, uid, invoice['invoice_line']) - invoice_lines = self._refund_cleanup_lines(cr, uid, invoice_lines) + type_dict = { + 'out_invoice': 'out_refund', # Customer Invoice + 'in_invoice': 'in_refund', # Supplier Invoice + 'out_refund': 'out_invoice', # Customer Refund + 'in_refund': 'in_invoice', # Supplier Refund + } - tax_lines = obj_invoice_tax.read(cr, uid, invoice['tax_line']) - tax_lines = filter(lambda l: l['manual'], tax_lines) - tax_lines = self._refund_cleanup_lines(cr, uid, tax_lines) - if journal_id: - refund_journal_ids = [journal_id] - elif invoice['type'] == 'in_invoice': - refund_journal_ids = obj_journal.search(cr, uid, [('type','=','purchase_refund')]) - else: - refund_journal_ids = obj_journal.search(cr, uid, [('type','=','sale_refund')]) + invoice_lines = obj_invoice_line.read(cr, uid, invoice['invoice_line'], context=context) + invoice_lines = self._refund_cleanup_lines(cr, uid, invoice_lines, context=context) - if not date: - date = time.strftime('%Y-%m-%d') + tax_lines = obj_invoice_tax.read(cr, uid, invoice['tax_line'], context=context) + tax_lines = filter(lambda l: l['manual'], tax_lines) + tax_lines = self._refund_cleanup_lines(cr, uid, tax_lines, context=context) + if journal_id: + refund_journal_ids = [journal_id] + elif invoice['type'] == 'in_invoice': + refund_journal_ids = obj_journal.search(cr, uid, [('type','=','purchase_refund')], context=context) + else: + refund_journal_ids = obj_journal.search(cr, uid, [('type','=','sale_refund')], context=context) + + if not date: + date = time.strftime('%Y-%m-%d') + invoice.update({ + 'type': type_dict[invoice['type']], + 'date_invoice': date, + 'state': 'draft', + 'number': False, + 'invoice_line': invoice_lines, + 'tax_line': tax_lines, + 'journal_id': refund_journal_ids + }) + if period_id: invoice.update({ - 'type': type_dict[invoice['type']], - 'date_invoice': date, - 'state': 'draft', - 'number': False, - 'invoice_line': invoice_lines, - 'tax_line': tax_lines, - 'journal_id': refund_journal_ids + 'period_id': period_id, }) - if period_id: - invoice.update({ - 'period_id': period_id, - }) - if description: - invoice.update({ - 'name': description, - }) - # take the id part of the tuple returned for many2one fields - for field in ('partner_id', 'company_id', - 'account_id', 'currency_id', 'payment_term', 'journal_id'): - invoice[field] = invoice[field] and invoice[field][0] + if description: + invoice.update({ + 'name': description, + }) + # take the id part of the tuple returned for many2one fields + for field in ('partner_id', 'company_id', + 'account_id', 'currency_id', 'payment_term', 'journal_id'): + invoice[field] = invoice[field] and invoice[field][0] + return invoice + + def refund(self, cr, uid, ids, date=None, period_id=None, description=None, journal_id=None, context=None): + invoices = self.read(cr, uid, ids, ['name', 'type', 'number', 'reference', 'comment', 'date_due', 'partner_id', 'partner_contact', 'partner_insite', 'partner_ref', 'payment_term', 'account_id', 'currency_id', 'invoice_line', 'tax_line', 'journal_id', 'company_id'], context=context) + new_ids = [] + for invoice in invoices: + invoice = self.prepair_refund(cr, uid, invoice['id'], invoice, date=date, period_id=period_id, description=description, journal_id=journal_id, context=context) # create the new invoice - new_ids.append(self.create(cr, uid, invoice)) + new_ids.append(self.create(cr, uid, invoice, context=context)) return new_ids diff --git a/addons/account/wizard/account_invoice_refund.py b/addons/account/wizard/account_invoice_refund.py index b7d278b8849..a549f09e00b 100644 --- a/addons/account/wizard/account_invoice_refund.py +++ b/addons/account/wizard/account_invoice_refund.py @@ -146,7 +146,7 @@ class account_invoice_refund(osv.osv_memory): raise osv.except_osv(_('Insufficient Data!'), \ _('No period found on the invoice.')) - refund_id = inv_obj.refund(cr, uid, [inv.id], date, period, description, journal_id) + refund_id = inv_obj.refund(cr, uid, [inv.id], date, period, description, journal_id, context=context) refund = inv_obj.browse(cr, uid, refund_id[0], context=context) inv_obj.write(cr, uid, [refund.id], {'date_due': date, 'check_total': inv.check_total}) |
