Ronald Rubi has proposed merging lp:~rr.clearcorp/openerp-ccorp-addons/6.1-account_voucher_reverse into lp:openerp-ccorp-addons.
Requested reviews: CLEARCORP drivers (clearcorp-drivers) For more details, see: https://code.launchpad.net/~rr.clearcorp/openerp-ccorp-addons/6.1-account_voucher_reverse/+merge/115629 [ADD] Add module account_move_reverse -- https://code.launchpad.net/~rr.clearcorp/openerp-ccorp-addons/6.1-account_voucher_reverse/+merge/115629 Your team CLEARCORP development team is subscribed to branch lp:openerp-ccorp-addons.
=== added directory 'account_move_reverse' === added file 'account_move_reverse/__init__.py' --- account_move_reverse/__init__.py 1970-01-01 00:00:00 +0000 +++ account_move_reverse/__init__.py 2012-07-18 22:08:19 +0000 @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Addons modules by CLEARCORP S.A. +# Copyright (C) 2009-TODAY CLEARCORP S.A. (<http://clearcorp.co.cr>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import account_move_reverse \ No newline at end of file === added file 'account_move_reverse/__openerp__.py' --- account_move_reverse/__openerp__.py 1970-01-01 00:00:00 +0000 +++ account_move_reverse/__openerp__.py 2012-07-18 22:08:19 +0000 @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Addons modules by CLEARCORP S.A. +# Copyright (C) 2009-TODAY CLEARCORP S.A. (<http://clearcorp.co.cr>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +{ + "name" : "Account Move Reverse", + "version" : '1.0', + "author" : 'CLEARCORP S.A.', + 'complexity': 'normal', + "description": """ +Module for reverse account move + """, + "category": 'Accounting & Finance', + "sequence": 4, + "website" : "http://clearcorp.co.cr", + "images" : [], + "icon" : False, + "depends" : ["account_voucher"], + "init_xml" : [], + "demo_xml" : [], + "update_xml" : [], + "test" : [], + "auto_install": False, + "application": False, + "installable": True, + 'license': 'AGPL-3', +} === added file 'account_move_reverse/account_move_reverse.py' --- account_move_reverse/account_move_reverse.py 1970-01-01 00:00:00 +0000 +++ account_move_reverse/account_move_reverse.py 2012-07-18 22:08:19 +0000 @@ -0,0 +1,123 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Addons modules by CLEARCORP S.A. +# Copyright (C) 2009-TODAY CLEARCORP S.A. (<http://clearcorp.co.cr>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +from osv import orm, osv, fields + +class account_move(orm.Model): + + _inherit = 'account.move' + + _columns = { + 'move_reverse_id':fields.many2one('account.move','Move Reverse'), + } + + def copy(self, cr, uid, id, default={}, context=None): + default.update({ + 'move_reverse_id':False, + }) + + def button_cancel(self, cr, uid, ids, context=None): + for move in self.browse(cr, uid, ids, context=context): + if not move.journal_id.update_posted: + raise osv.except_osv(_('Error !'), _('You can not modify a posted entry of this journal !\nYou should set the journal to allow cancelling entries if you want to do that.')) + + if move.move_reverse_id: + move_reverse = self.browse(cr, uid, move.move_reverse_id.id, context=context) + + for line_reverse in move_reverse.line_id: + if line_reverse.reconcile_id: + self.pool.get('account.move.reconcile').unlink(cr,uid,[line_reverse.reconcile_id.id],context=context) + cr.execute('UPDATE account_move '\ + 'SET state=%s '\ + 'WHERE id IN %s', ('draft', tuple([move_reverse.id]),)) + self.unlink(cr,uid,[move_reverse.id],context=context) + + result = super(account_move, self).button_cancel(cr, uid, ids, context=context) + return True + + def reverse(self, cr, uid, ids, context=None): + + for move_original_id in ids: + move_original = self.pool.get('account.move').browse(cr, 1, move_original_id, context=context) + + move = { + 'name':'Reverse: ' + move_original.name, + 'ref':move_original.ref, + 'journal_id':move_original.journal_id.id, + 'period_id':move_original.period_id.id, + 'to_check':False, + 'partner_id':move_original.partner_id.id, + 'date':move_original.date, + 'narration':move_original.narration, + 'company_id':move_original.company_id.id, + } + move_id = self.pool.get('account.move').create(cr, uid, move) + + self.pool.get('account.move').write(cr, uid, [move_original.id], {'move_reverse_id' : move_id}) + + move_reconcile_obj = self.pool.get('account.move.reconcile') + + lines = move_original.line_id + for line in lines: + move_line = { + 'name':line.name, + 'debit':line.credit, + 'credit':line.debit, + 'account_id':line.account_id.id, + 'move_id': move_id, + 'amount_currency':line.amount_currency * -1, + 'period_id':line.period_id.id, + 'journal_id':line.journal_id.id, + 'partner_id':line.partner_id.id, + 'currency_id':line.currency_id.id, + 'date_maturity':line.date_maturity, + 'date':line.date, + 'date_created':line.date_created, + 'state':'valid', + 'company_id':line.company_id.id, + } + + line_created_id = self.pool.get('account.move.line').create(cr, uid, move_line) + + if line.reconcile_id: + reconcile = line.reconcile_id + if len(reconcile.line_id) > 2: + self.pool.get('account.move.line').write(cr,uid,reconcile.line_id,{'reconcile_id': False, 'reconcile_partial_id':reconcile.id}) + self.pool.get('account.move.line').write(cr,uid,line.id,{'reconcile_partial_id': False}) + else: + move_reconcile_obj.unlink(cr,uid,[reconcile.id],context=context) + + elif line.reconcile_partial_id: + reconcile = line.reconcile_partial_id + if len(reconcile.line_partial_ids) > 2: + self.pool.get('account.move.line').write(cr,uid,line.id,{'reconcile_partial_id': False }) + else: + move_reconcile_obj.unlink(cr,uid,[reconcile.id],context=context) + + if line.account_id.reconcile: + reconcile_id = self.pool.get('account.move.reconcile').create(cr, uid, {'type': 'Account Reverse'}) + self.pool.get('account.move.line').write(cr,uid,[line.id],{'reconcile_id': reconcile_id}) + self.pool.get('account.move.line').write(cr,uid,[line_created_id],{'reconcile_id': reconcile_id}) + + #Posted move reverse + self.pool.get('account.move').post(cr, 1, [move_id, move_original.id], context={}) + return True === modified file 'account_multicompany_relation/__openerp__.py' --- account_multicompany_relation/__openerp__.py 2012-06-30 22:41:06 +0000 +++ account_multicompany_relation/__openerp__.py 2012-07-18 22:08:19 +0000 @@ -1,8 +1,29 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Addons modules by CLEARCORP S.A. +# Copyright (C) 2009-TODAY CLEARCORP S.A. (<http://clearcorp.co.cr>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## { "name" : "Account Multicompany Relation", "author" : "CLEARCORP S.A", "version" : "0.1", - "depends" : ["account_voucher"], + "depends" : ["account_voucher_reverse"], "init_xml" : [], "update_xml" : [ "account_multicompany_relation.xml" === modified file 'account_multicompany_relation/account_multicompany_relation.py' --- account_multicompany_relation/account_multicompany_relation.py 2012-06-30 22:41:06 +0000 +++ account_multicompany_relation/account_multicompany_relation.py 2012-07-18 22:08:19 +0000 @@ -21,17 +21,19 @@ from osv import orm, fields from copy import copy -class AccountMulticompanyRelation(orm.Model): +class account_multicompany_relation(orm.Model): _name = "account.multicompany.relation" _description = "Account multicompany relation" _columns = { - 'name' : fields.char('Name',size=64,required=True,help='Name for the mirror object relation'), - 'origin_account' : fields.many2one('account.account','Original Account',required=True,help='Indicate the original account where the transaction is taking place'), - 'targ_account' : fields.many2one('account.account','Target Account',required=True,help='Indicate the target account where the transaction of the original account has to be seen, this is an account from another company'), - 'origin_journal' : fields.many2one('account.journal','Original Journal',required=True,help='Indicate the original journal where the transaction is taking place'), - 'targ_journal' : fields.many2one('account.journal','Target Journal',required=True,help='Indicate the original account where the transaction is taking place'), + 'name':fields.char('Name',size=64,required=True,help='Name for the mirror object relation'), + 'origin_account':fields.many2one('account.account','Original Account',required=True,help='Indicate the original account where the transaction is taking place'), + 'targ_account':fields.many2one('account.account','Target Account',required=True,help='Indicate the target account where the transaction of the original account has to be seen, this is an account from another company'), + 'origin_journal':fields.many2one('account.journal','Original Journal',required=True,help='Indicate the original journal where the transaction is taking place'), + 'targ_journal':fields.many2one('account.journal','Target Journal',required=True,help='Indicate the original account where the transaction is taking place'), + 'origin_analytic_account':fields.many2one('account.analytic.account','Original Analytic Account',required=False,help='Indicate the original analytic account where the transaction is taking place'), + 'targ_analytic_account':fields.many2one('account.analytic.account','Target Analytic Account',required=False,help='Indicate the target analytic account where the transaction of the original analytic account has to be seen, this is an analytic account from another company'), } _sql_constraints = [ @@ -41,129 +43,207 @@ 'The name must be unique' ), ( - 'unique_journal_account_origins', - 'unique(origin_account,origin_journal)', - 'A relation exists already with this origin journal and origin account' - ) - ] - - -class AccountVoucher(orm.Model): - - _inherit = 'account.voucher' - - def proforma_voucher(self, cr, uid, ids, context=None): - result = super(AccountVoucher, self).action_move_line_create(cr, uid, ids, context=context) - - # Initialize voucher variables and check if voucher has a move, a journal and an account - # If not, exit and return original result - voucher = self.browse(cr,1,ids,context=context)[0] - if not voucher.move_id: - return result - if voucher and voucher.account_id and voucher.journal_id: - voucher_account = voucher.account_id.id - voucher_journal = voucher.journal_id.id - else: - return result - - # Search for a compliant mirror relation, if none found exit returning the original result - mirror_journal_list = self.pool.get('account.multicompany.relation').search(cr, 1, [('origin_account', '=', voucher_account), ('origin_journal', '=', voucher_journal)], context=context) - if len(mirror_journal_list) > 0: - mirror_journal_id = mirror_journal_list[0] - else: - return result - - # Read mirror relation data and check if mirror origin account is in the voucher move - # If not exit returning the original result - mirror_journal = self.pool.get('account.multicompany.relation').browse(cr, 1, [mirror_journal_id], context=context)[0] - origin_journal = mirror_journal.origin_journal - origin_account = mirror_journal.origin_account - targ_journal = mirror_journal.targ_journal - targ_account = mirror_journal.targ_account - - original_move = voucher.move_id - - if not original_move.line_id: - return result - - list_ = [] - lines = original_move.line_id - for line in lines: - if line.account_id and line.account_id.id == origin_account.id: - list_.append(line) - - if len(list_) != 1: - return result - - #Set period for target move with the correct company - if context == None: - context_copy = {'company_id': targ_account.company_id.id} - else: - context_copy = copy(context) - context_copy.update({'company_id': targ_account.company_id.id}) - periods = self.pool.get('account.period').find(cr, 1, dt=original_move.date, context=context_copy) - if periods: - move_period = periods[0] - - move = { - 'name':'MCR: ' + original_move.name, - 'ref':original_move.ref, - 'journal_id':targ_journal.id, - 'period_id':move_period or False, - 'to_check':False, - 'partner_id':original_move.partner_id.id, - 'date':original_move.date, - 'narration':original_move.narration, - 'company_id':targ_account.company_id.id, - } - move_id = self.pool.get('account.move').create(cr, 1, move) - - move_line_original = list_[0] - - move_line_one = { - 'name':move_line_original.name, - 'debit':move_line_original.credit, - 'credit':move_line_original.debit, - 'account_id':targ_account.id, - 'move_id': move_id, - 'amount_currency':move_line_original.amount_currency * -1, - 'period_id':move_period or False, - 'journal_id':targ_journal.id, - 'partner_id':move_line_original.partner_id.id, - 'currency_id':move_line_original.currency_id.id, - 'date_maturity':move_line_original.date_maturity, - 'date':move_line_original.date, - 'date_created':move_line_original.date_created, - 'state':'valid', - 'company_id':targ_account.company_id.id, - } - - self.pool.get('account.move.line').create(cr, 1, move_line_one) - if move_line_original.debit != 0.0: - move_line_two_account_id = targ_journal.default_credit_account_id - else: - move_line_two_account_id = targ_journal.default_debit_account_id - - move_line_two = { - 'name':move_line_original.name, - 'debit':move_line_original.debit, - 'credit':move_line_original.credit, - 'account_id':move_line_two_account_id.id, - 'move_id': move_id, - 'amount_currency':move_line_original.amount_currency, - 'journal_id':targ_journal.id, - 'period_id':move_period or False, - 'partner_id':move_line_original.partner_id.id, - 'currency_id':move_line_original.currency_id.id, - 'date_maturity':move_line_original.date_maturity, - 'date':move_line_original.date, - 'date_created':move_line_original.date_created, - 'state':'valid', - 'company_id':targ_account.company_id.id, - } - - self.pool.get('account.move.line').create(cr, 1, move_line_two) - - if (targ_journal.entry_posted): - self.pool.get('account.move').post(cr, 1, [move_id], context={}) + 'unique_mirror_relation', + 'unique(origin_account,origin_journal,origin_analytic_account)', + 'A relation exists already' + ) + ] + + def _check_unique_mirror_relation(self, cr, uid, ids, context=None): + exist = False + all_mirrors_ids = self.search(cr, uid, [], context) + all_mirrors = self.browse(cr, uid, all_mirrors_ids, context) + for mirror_id in ids: + mirror = self.browse(cr, uid, mirror_id, context) + if not mirror.origin_analytic_account: + for current_mirror in all_mirrors: + if current_mirror.origin_account.id == mirror.origin_account.id and current_mirror.origin_journal.id == mirror.origin_journal.id: + if not current_mirror.origin_analytic_account: + return False + return True + + _constraints = [ + ( + _check_unique_mirror_relation, + 'A relation exists already', ['origin_analytic_account'] + ) + ] + + +class account_move(orm.Model): + + _inherit = 'account.move' + + _columns = { + 'move_mirror_rel_id':fields.many2one('account.move','Move Multicompany Relation'), + } + + def copy(self, cr, uid, id, default={}, context=None): + default.update({ + 'move_mirror_rel_id':False, + }) + + def button_cancel(self, cr, uid, ids, context=None): + self.pool.get('account.move.reconcile') + for move in self.browse(cr, uid, ids, context=context): + if not move.journal_id.update_posted: + raise osv.except_osv(_('Error !'), _('You can not modify a posted entry of this journal !\nYou should set the journal to allow cancelling entries if you want to do that.')) + + #Set user administrator to run this portion of code + uid = 1 + if move.move_mirror_rel_id: + move_mirror = self.browse(cr, uid, move.move_mirror_rel_id.id, context=context) + if not move_mirror.journal_id.update_posted: + raise osv.except_osv(_('Error !'), _('You can not modify a posted multicompany mirror entry of this journal !\nYou should set the journal to allow cancelling entries if you want to do that.')) + + move_reconcile_obj = self.pool.get('account.move.reconcile') + for line_mirror in move_mirror.line_id: + if line_mirror.reconcile_id: + reconcile = line_mirror.reconcile_id + if len(reconcile.line_id) > 2: + self.pool.get('account.move.line').write(cr,uid,reconcile.line_id,{'reconcile_id': False, 'reconcile_partial_id':reconcile.id}) + self.pool.get('account.move.line').write(cr,uid,line_mirror.id,{'reconcile_partial_id': False}) + else: + move_reconcile_obj.unlink(cr,uid,[reconcile.id],context=context) + + elif line_mirror.reconcile_partial_id: + reconcile = line_mirror.reconcile_partial_id + if len(reconcile.line_partial_ids) > 2: + self.pool.get('account.move.line').write(cr,uid,line_mirror.id,{'reconcile_partial_id': False }) + else: + move_reconcile_obj.unlink(cr,uid,[reconcile.id],context=context) + + cr.execute('UPDATE account_move '\ + 'SET state=%s '\ + 'WHERE id IN %s', ('draft', tuple([move_mirror.id]),)) + self.button_cancel(cr,uid,[move_mirror.id],context=context) + self.unlink(cr,uid,[move_mirror.id],context=context) + + result = super(account_move, self).button_cancel(cr, uid, ids, context=context) + return True + + def post(self, cr, uid, ids, context=None): + result = super(account_move, self).post(cr, uid, ids, context=context) + + for move_id_original in ids: + if self.pool.get('account.move').search(cr, 1, [('move_reverse_id', '=', move_id_original)], context=context): + continue + + original_move = self.pool.get('account.move').browse(cr, 1, move_id_original, context=context) + move_id = False + + move_lines_ids = self.pool.get('account.move.line').search(cr, 1, [('move_id', '=', move_id_original)], context=context) + if move_lines_ids: + lines = self.pool.get('account.move.line').browse(cr, 1, move_lines_ids, context=context) + + mirror_selected = False + + for line in lines: + mirror_selected_list_ids = self.pool.get('account.multicompany.relation').search(cr, 1, [('origin_account', '=', line.account_id.id), ('origin_journal', '=', line.journal_id.id)], context=context) + if len(mirror_selected_list_ids) > 0: + mirror_selected_list = self.pool.get('account.multicompany.relation').browse(cr, 1, mirror_selected_list_ids, context=context) + + for mirror in mirror_selected_list: + if line.account_id and line.account_id.id == mirror.origin_account.id and line.journal_id.id == mirror.origin_journal.id: + if mirror.origin_analytic_account: + if line.analytic_account_id and line.analytic_account_id.id == mirror.origin_analytic_account: + mirror_selected = mirror + break + elif not mirror_selected: + mirror_selected = mirror + + if mirror_selected: + origin_journal = mirror_selected.origin_journal + origin_account = mirror_selected.origin_account + targ_journal = mirror_selected.targ_journal + targ_account = mirror_selected.targ_account + else: + return result + + #Set period for target move with the correct company + if context == None: + context_copy = {'company_id': targ_account.company_id.id} + else: + context_copy = copy(context) + context_copy.update({'company_id': targ_account.company_id.id}) + + periods = self.pool.get('account.period').find(cr, 1, dt=original_move.date, context=context_copy) + if periods: + move_period = periods[0] + + move = { + 'name':'MCR: ' + original_move.name, + 'ref':original_move.ref, + 'journal_id':targ_journal.id, + 'period_id':move_period or False, + 'to_check':False, + 'partner_id':original_move.partner_id.id, + 'date':original_move.date, + 'narration':original_move.narration, + 'company_id':targ_account.company_id.id, + } + move_id = self.pool.get('account.move').create(cr, 1, move) + self.pool.get('account.move').write(cr, uid, [original_move.id], {'move_mirror_rel_id' : move_id}) + + analytic_account_id = '' + if line.analytic_account_id and line.analytic_account_id == mirror_selected.origin_analytic_account: + analytic_account_id = mirror_selected.targ_analytic_account.id + + move_line_one = { + 'name':line.name, + 'debit':line.credit, + 'credit':line.debit, + 'account_id':targ_account.id, + 'move_id': move_id, + 'amount_currency':line.amount_currency * -1, + 'period_id':move_period or False, + 'journal_id':targ_journal.id, + 'partner_id':line.partner_id.id, + 'currency_id':line.currency_id.id, + 'date_maturity':line.date_maturity, + 'date':line.date, + 'date_created':line.date_created, + 'state':'valid', + 'analytic_account_id':analytic_account_id, + 'company_id':targ_account.company_id.id, + } + + self.pool.get('account.move.line').create(cr, 1, move_line_one) + if line.debit != 0.0: + move_line_two_account_id = targ_journal.default_credit_account_id + else: + move_line_two_account_id = targ_journal.default_debit_account_id + + move_line_two = { + 'name':line.name, + 'debit':line.debit, + 'credit':line.credit, + 'account_id':move_line_two_account_id.id, + 'move_id': move_id, + 'amount_currency':line.amount_currency, + 'journal_id':targ_journal.id, + 'period_id':move_period or False, + 'partner_id':line.partner_id.id, + 'currency_id':line.currency_id.id, + 'date_maturity':line.date_maturity, + 'date':line.date, + 'date_created':line.date_created, + 'state':'valid', + 'analytic_account_id':analytic_account_id, + 'company_id':targ_account.company_id.id, + } + self.pool.get('account.move.line').create(cr, 1, move_line_two) + + #Posted mirror + self.pool.get('account.move').post(cr, 1, [move_id], context={}) + if move_id and original_move.move_reverse_id: + self.pool.get('account.move').reverse(cr, 1, [move_id], context={}) + return result + + def unlink(self, cr, uid, ids, context=None, check=True): + for move in self.browse(cr, 1, ids, context=context): + if move.move_mirror_rel_id: + self.pool.get('account.move').button_cancel(cr, 1, [move.move_mirror_rel_id.id]) + result = super(account_move, self).unlink(cr, 1, [move.move_mirror_rel_id.id], context=context, check=check) + result = super(account_move, self).unlink(cr, 1, ids, context=context, check=check) return result === modified file 'account_multicompany_relation/account_multicompany_relation.xml' --- account_multicompany_relation/account_multicompany_relation.xml 2012-06-30 22:41:06 +0000 +++ account_multicompany_relation/account_multicompany_relation.xml 2012-07-18 22:08:19 +0000 @@ -14,6 +14,8 @@ <field name = "targ_account"/> <field name = "origin_journal"/> <field name = "targ_journal"/> + <field name = "origin_analytic_account"/> + <field name = "targ_analytic_account"/> </form> </field> </record> @@ -29,6 +31,8 @@ <field name = "targ_account"/> <field name = "origin_journal"/> <field name = "targ_journal"/> + <field name = "origin_analytic_account"/> + <field name = "targ_analytic_account"/> </tree> </field> </record> === modified file 'account_voucher_reverse/__openerp__.py' --- account_voucher_reverse/__openerp__.py 2012-07-04 22:55:47 +0000 +++ account_voucher_reverse/__openerp__.py 2012-07-18 22:08:19 +0000 @@ -33,7 +33,7 @@ "website" : "http://clearcorp.co.cr", "images" : [], "icon" : False, - "depends" : ["account_voucher"], + "depends" : ["account_move_reverse"], "init_xml" : [], "demo_xml" : [], "update_xml" : [ === modified file 'account_voucher_reverse/account_voucher_reverse.py' --- account_voucher_reverse/account_voucher_reverse.py 2012-07-04 22:55:47 +0000 +++ account_voucher_reverse/account_voucher_reverse.py 2012-07-18 22:08:19 +0000 @@ -42,90 +42,12 @@ } def reverse_voucher(self, cr, uid, ids, context=None): - - self.write(cr, uid, ids, {'state' : 'reverse'}, context=context) - - #To create a move reverse - self.account_voucher_move_reverse(cr, uid, ids, context=context) - - return True - - def account_voucher_move_reverse(self, cr, uid, ids, context=None): - # Initialize voucher variables and check if voucher has a move, a journal and an account - # If not, exit and return original result - voucher = self.browse(cr,uid,ids,context=context)[0] - if not voucher.move_id: - return False - - original_move = voucher.move_id - - if not original_move.line_id: - return False - - move = { - 'name':'Reverse: ' + original_move.name, - 'ref':original_move.ref, - 'journal_id':original_move.journal_id.id, - 'period_id':original_move.period_id.id, - 'to_check':False, - 'partner_id':original_move.partner_id.id, - 'date':original_move.date, - 'narration':original_move.narration, - 'company_id':original_move.company_id.id, - } - move_id = self.pool.get('account.move').create(cr, uid, move) - - move_reconcile_obj = self.pool.get('account.move.reconcile') - - lines = original_move.line_id - for line in lines: - move_line = { - 'name':line.name, - 'debit':line.credit, - 'credit':line.debit, - 'account_id':line.account_id.id, - 'move_id': move_id, - 'amount_currency':line.amount_currency * -1, - 'period_id':line.period_id.id, - 'journal_id':line.journal_id.id, - 'partner_id':line.partner_id.id, - 'currency_id':line.currency_id.id, - 'date_maturity':line.date_maturity, - 'date':line.date, - 'date_created':line.date_created, - 'state':'valid', - 'company_id':line.company_id.id, - } - - line_created_id = self.pool.get('account.move.line').create(cr, uid, move_line) - - if (original_move.journal_id.entry_posted): - self.pool.get('account.move').post(cr, uid, [move_id], context={}) - - if line.reconcile_id: - reconcile = move_reconcile_obj.browse(cr,uid,[line.reconcile_id.id],context=context)[0] - if len(reconcile.line_id) > 2: - self.pool.get('account.move.line').write(cr,uid,line.id,{'reconcile_id': False }) - for line in reconcile.line_id: - self.pool.get('account.move.line').write(cr,uid,line.id,{'reconcile_id': False,'reconcile_partial_id':line.reconcile_id.id}) - else: - move_reconcile_obj.unlink(cr,uid,[line.reconcile_id.id],context=context) - - if line.reconcile_partial_id: - reconcile = move_reconcile_obj.browse(cr,uid,[line.reconcile_partial_id.id],context=context)[0] - if len(reconcile.line_partial_ids) > 2: - self.pool.get('account.move.line').write(cr,uid,line.id,{'reconcile_partial_id': False }) - else: - move_reconcile_obj.unlink(cr,uid,[line.reconcile_partial_id.id],context=context) - - if line.account_id.reconcile: - reconcile_id = self.pool.get('account.move.reconcile').create(cr, uid, {'type': 'Account Reverse'}) - self.pool.get('account.move.line').write(cr,uid,[line.id],{'reconcile_id': reconcile_id}) - self.pool.get('account.move.line').write(cr,uid,[line_created_id],{'reconcile_id': reconcile_id}) - - return True - - + for voucher_id in ids: + voucher = self.pool.get('account.voucher').browse(cr, 1, voucher_id, context=context) + if voucher.move_id: + self.pool.get('account.move').reverse(cr, uid, [voucher.move_id.id], context=context) + self.write(cr, uid, [voucher_id], {'state' : 'reverse'}, context=context) + return {}
_______________________________________________ Mailing list: https://launchpad.net/~clearcorp Post to : [email protected] Unsubscribe : https://launchpad.net/~clearcorp More help : https://help.launchpad.net/ListHelp

