clearcorp team mailing list archive
-
clearcorp team
-
Mailing list archive
-
Message #00247
lp:~rr.clearcorp/openerp-ccorp-addons/6.1-multicompany_relation into lp:openerp-ccorp-addons
Ronald Rubi has proposed merging lp:~rr.clearcorp/openerp-ccorp-addons/6.1-multicompany_relation 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-multicompany_relation/+merge/116382
[FIX] Fix account_multicompany_relation, analytic_account
--
https://code.launchpad.net/~rr.clearcorp/openerp-ccorp-addons/6.1-multicompany_relation/+merge/116382
Your team CLEARCORP development team is subscribed to branch lp:openerp-ccorp-addons.
=== modified file 'account_multicompany_relation/account_multicompany_relation.py'
--- account_multicompany_relation/account_multicompany_relation.py 2012-07-19 22:57:59 +0000
+++ account_multicompany_relation/account_multicompany_relation.py 2012-07-23 21:39:19 +0000
@@ -43,30 +43,23 @@
'unique(name)',
'The name must be unique'
),
- (
- '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
+ for relation in self.browse(cr, uid, ids, context=context):
+ relation_ids = self.search(cr, uid, [('origin_account','=',relation.origin_account.id),
+ ('origin_journal','=',relation.origin_journal.id),
+ ('origin_analytic_account','=',relation.origin_analytic_account.id)], context=context)
+ if len(relation_ids) >= 2:
+ return False
+ elif len(relation_ids) == 1 and not relation_ids[0] == relation.id:
+ return False
return True
_constraints = [
(
_check_unique_mirror_relation,
- 'A relation exists already', ['origin_analytic_account']
+ 'The same relation already exists', ['origin_account','origin_journal','origin_analytic_account']
)
]
@@ -136,95 +129,107 @@
result = super(AccountMove, 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):
+ account_move_obj = self.pool.get('account.move')
+ account_move_line_obj = self.pool.get('account.move.line')
+ account_multicompany_relation_obj = self.pool.get('account.multicompany.relation')
+ #Continue if this is a reversion move
+ if account_move_obj.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)
-
+
+ original_move = account_move_obj.browse(cr, 1, move_id_original, context=context)
if original_move.line_id:
mirror_selected = False
-
for line in original_move.line_id:
if line.move_mirror_rel_id:
if original_move.move_reverse_id:
- self.pool.get('account.move').reverse(cr, 1, [line.move_mirror_rel_id.id], context={})
+ account_move_obj.reverse(cr, 1, [line.move_mirror_rel_id.id], context={})
continue
- 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)
+
+ #Get parent accounts for line account
+ parent_account_ids = []
+ parent_account = line.account_id
+ while parent_account:
+ parent_account_ids.append(parent_account.id)
+ parent_account = parent_account.parent_id
+ analytic_account_id = line.analytic_account_id and line.analytic_account_id.id or False
+ mirror_selected_list_ids = account_multicompany_relation_obj.search(cr, 1, [('origin_account', 'in', parent_account_ids), ('origin_journal', '=', line.journal_id.id), ('origin_analytic_account', '=', analytic_account_id)], context=context)
move_id = False
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_list = account_multicompany_relation_obj.browse(cr, 1, mirror_selected_list_ids, context=context)
+
+ mirror_selected = False
+
+ if len(mirror_selected_list) == 1:
+ mirror_selected = mirror_selected_list[0]
+ else:
+ mirror_index = -1
+ for mirror in mirror_selected_list:
+ if mirror_index < 0 or parent_account_ids.index(mirror.origin_account.id) < mirror_index:
+ mirror_index = parent_account_ids.index(mirror.origin_account.id)
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
-
+ continue
+
#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.line').write(cr, uid, [line.id], {'move_mirror_rel_id' : move_id})
+ '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 = account_move_obj.create(cr, 1, move)
+ self.pool.get('account.move.line').write(cr, 1, [line.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)
+ '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,
+ }
+
+ account_move_line_obj.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,
@@ -243,12 +248,12 @@
'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)
-
+ account_move_line_obj.create(cr, 1, move_line_two)
+
#Posted mirror
- self.pool.get('account.move').post(cr, 1, [move_id], context={})
+ account_move_obj.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={})
+ account_move_obj.reverse(cr, 1, [move_id], context={})
return result
def unlink(self, cr, uid, ids, context=None, check=True):
Follow ups