From 72bd05b3c28e6755cca7cc7ee22a0c52252d0793 Mon Sep 17 00:00:00 2001 From: "JMA (OpenERP)" Date: Wed, 12 May 2010 16:11:58 +0530 Subject: [PATCH] [FIX] Account : USer will be notified for unreconciling partial reconcilatins if he tries to cancel the invoice bzr revid: jma@tinyerp.com-20100512104158-uvbap84l2jnzcnsz --- addons/account/account_move_line.py | 3 ++- addons/account/invoice.py | 7 ++++++- addons/account/wizard/account_unreconcile.py | 19 +++++++++++++------ 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index 6b88b0e7862..ff13a426602 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -581,7 +581,8 @@ class account_move_line(osv.osv): if line.reconcile_partial_id: for line2 in line.reconcile_partial_id.line_partial_ids: if not line2.reconcile_id: - merges.append(line2.id) + if line2.id not in merges: + merges.append(line2.id) total += (line2.debit or 0.0) - (line2.credit or 0.0) merges_rec.append(line.reconcile_partial_id.id) else: diff --git a/addons/account/invoice.py b/addons/account/invoice.py index 37de13e5dde..d0b0933983d 100644 --- a/addons/account/invoice.py +++ b/addons/account/invoice.py @@ -922,7 +922,12 @@ class account_invoice(osv.osv): # will be automatically deleted too account_move_obj.unlink(cr, uid, [i['move_id'][0]]) if i['payment_ids']: - self.pool.get('account.move.line').write(cr, uid, i['payment_ids'], {'reconcile_partial_id': False}) + account_move_line_obj = self.pool.get('account.move.line') + pay_ids = account_move_line_obj.browse(cr, uid , i['payment_ids']) + for move_line in pay_ids: + if move_line.reconcile_partial_id and move_line.reconcile_partial_id.line_partial_ids: + raise osv.except_osv(_('Error !'), _('You cannot cancel the Invoice which is Partially Paid! You need to unreconcile concerned payment entries!')) + self.write(cr, uid, ids, {'state':'cancel', 'move_id':False}) self._log_event(cr, uid, ids,-1.0, 'Cancel Invoice') return True diff --git a/addons/account/wizard/account_unreconcile.py b/addons/account/wizard/account_unreconcile.py index d50994a6f28..c1de3294c79 100644 --- a/addons/account/wizard/account_unreconcile.py +++ b/addons/account/wizard/account_unreconcile.py @@ -29,11 +29,17 @@ class account_unreconcile(osv.osv_memory): obj_move_reconcile = self.pool.get('account.move.reconcile') if context is None: context = {} - recs = obj_move_line.read(cr, uid, context['active_ids'], ['reconcile_id',]) - recs = filter(lambda x: x['reconcile_id'], recs) - rec_ids = [rec['reconcile_id'][0] for rec in recs] - if len(rec_ids): - obj_move_reconcile.unlink(cr, uid, rec_ids) + recs = pool.get('account.move.line').read(cr, uid, data['ids'], ['reconcile_id','reconcile_partial_id']) + unlink_ids = [] + full_recs = filter(lambda x: x['reconcile_id'], recs) + rec_ids = [rec['reconcile_id'][0] for rec in full_recs] + part_recs = filter(lambda x: x['reconcile_partial_id'], recs) + part_rec_ids = [rec['reconcile_partial_id'][0] for rec in part_recs] + unlink_ids += rec_ids + unlink_ids += part_rec_ids + + if len(unlink_ids): + pooler.get_pool(cr.dbname).get('account.move.reconcile').unlink(cr, uid, unlink_ids) return {} account_unreconcile() @@ -44,10 +50,11 @@ class account_unreconcile_reconcile(osv.osv_memory): def trans_unrec_reconcile(self, cr, uid, ids, context=None): obj_move_reconcile = self.pool.get('account.move.reconcile') + rec_ids = context['active_ids'] if context is None: context = {} if len(rec_ids): - obj_move_reconcile.unlink(cr, uid, context['active_ids']) + obj_move_reconcile.unlink(cr, uid, rec_ids) return {} account_unreconcile_reconcile()