Merge lp:~gisce/openerp-spain/imp_speed_closing_fiscal_year into lp:~openerp-spain-team/openerp-spain/5.0

Proposed by Eduard Carreras i Nadal
Status: Merged
Merged at revision: 237
Proposed branch: lp:~gisce/openerp-spain/imp_speed_closing_fiscal_year
Merge into: lp:~openerp-spain-team/openerp-spain/5.0
Diff against target: 123 lines (+32/-16)
1 file modified
l10n_es/l10n_ES_cierre_ejercicio/wizard/wizard_run.py (+32/-16)
To merge this branch: bzr merge lp:~gisce/openerp-spain/imp_speed_closing_fiscal_year
Reviewer Review Type Date Requested Status
Pedro Manuel Baeza Approve
Review via email: mp+170961@code.launchpad.net

Description of the change

Seguramente pocos de la comunidad aún estais usando la versión 5.

En una implantación tenemos una gran cantidad de movimientos y ejecutando el wizard se quedava sin memoria y era un proceso un poco lento.

* Se han cambiado algunos 'browse' por 'read' seleccionando solo los campos necesarios
* Se crean las 'account move line' de una a una y con el flag 'check=False', esto hace que no se valide el 'account move' cada vez que se crea una 'account move line'. Esto solo afecta a los que tienen el diario configurado para que se salte el estado Borrador. Al final de la creación de todas las 'account move line' si el diario está configurado para saltarse el estado Borrador, se llama a la función que haría el 'check=True', pero con la diferencia que solo se llama una sola vez.

To post a comment you must log in.
238. By Eduard Carreras i Nadal

Remove enumerates for debug purposes

Revision history for this message
Jordi Esteve (www.zikzakmedia.com) (jesteve-zikzakmedia) wrote :

Aunque no lo he probado, los cambios propuestos los veo correctos. Yo aceptaría esta propuesta de merge.

PD: Sería interesante aplicar los mismos cambios al asistente de cierre de la v6.0, pues el código es prácticamente el mismo, y esta versión si la usa más gente.

Revision history for this message
Eduard Carreras i Nadal (ecarreras) wrote :

Ok, cuando tenga un momento hago el port a la versión 6 y la propuesta de
merge

2013/6/25 Jordi Esteve (www.zikzakmedia.com) <email address hidden>

> Aunque no lo he probado, los cambios propuestos los veo correctos. Yo
> aceptaría esta propuesta de merge.
>
> PD: Sería interesante aplicar los mismos cambios al asistente de cierre de
> la v6.0, pues el código es prácticamente el mismo, y esta versión si la usa
> más gente.
> --
>
> https://code.launchpad.net/~gisce/openerp-spain/imp_speed_closing_fiscal_year/+merge/170961
> You proposed lp:~gisce/openerp-spain/imp_speed_closing_fiscal_year for
> merging.
>

--
Eduard Carreras i Nadal <email address hidden>
Chief Technology Officer
GPG: http://www.gisce.net/~eduard/ecarreras.asc
Twitter: https://twitter.com/gisce
Tel. 972 911 566 - Fax 972 217 384
GISCE-TI S.L.

Revision history for this message
Pedro Manuel Baeza (pedro.baeza) wrote :

Buenas, Eduard,

¡Muchas gracias por la aportación! Como dice Jordi, estaría bien tener esas prestaciones en versiones superiores. Algo parecido a lo de cambiar el Check=False hice yo en la versión 6.1, por lo que podemos aprovechar esta ocasión para dejar las 3 versiones (5.0, 6.0 y 6.1) con las mismas características y optimización.

Échale un vistazo y nos ponemos de acuerdo para los cambios.

Un saludo.

Revision history for this message
Pedro Manuel Baeza (pedro.baeza) wrote :

He echado un vistazo al código para ver que todo es correcto y ya he realizado el merge, para dejar este MP cerrado después de tanto tiempo.

Un saludo.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'l10n_es/l10n_ES_cierre_ejercicio/wizard/wizard_run.py'
2--- l10n_es/l10n_ES_cierre_ejercicio/wizard/wizard_run.py 2010-06-02 14:40:23 +0000
3+++ l10n_es/l10n_ES_cierre_ejercicio/wizard/wizard_run.py 2013-06-22 19:29:25 +0000
4@@ -129,8 +129,8 @@
5 # If one or more moves where found, raise an exception
6 #
7 if len(account_move_ids):
8- invalid_period_moves = pool.get('account.move').browse(cr, uid, account_move_ids, context)
9- str_invalid_period_moves = '\n'.join(['id: %s, date: %s, number: %s, ref: %s' % (move.id, move.date, move.name, move.ref) for move in invalid_period_moves])
10+ invalid_period_moves = pool.get('account.move').read(cr, uid, account_move_ids, ['id', 'date', 'name', 'ref'], context)
11+ str_invalid_period_moves = '\n'.join(['id: %s, date: %s, number: %s, ref: %s' % (move['id'], move['date'], move['name'], move['ref']) for move in invalid_period_moves])
12 raise wizard.except_wizard(_('Error'), _('One or more moves with invalid period or date found on the fiscal year: \n%s') % str_invalid_period_moves)
13
14 data['process_task_progress'] = 100.0
15@@ -164,8 +164,8 @@
16 # If one or more draft moves where found, raise an exception
17 #
18 if len(account_move_ids):
19- draft_moves = pool.get('account.move').browse(cr, uid, account_move_ids, context)
20- str_draft_moves = '\n'.join(['id: %s, date: %s, number: %s, ref: %s' % (move.id, move.date, move.name, move.ref) for move in draft_moves])
21+ draft_moves = pool.get('account.move').read(cr, uid, account_move_ids, ['id', 'date', 'name', 'ref'], context)
22+ str_draft_moves = '\n'.join(['id: %s, date: %s, number: %s, ref: %s' % (move['id'], move['date'], move['name'], move['ref']) for move in draft_moves])
23 raise wizard.except_wizard(_('Error'), _('One or more draft moves found: \n%s') % str_draft_moves)
24
25 data['process_task_progress'] = 100.0
26@@ -201,10 +201,10 @@
27 unbalanced_moves = []
28 total_accounts = len(account_move_ids)
29 accounts_done = 0
30- for move in pool.get('account.move').browse(cr, uid, account_move_ids, context):
31+ for move in pool.get('account.move').read(cr, uid, account_move_ids, ['line_id'], context):
32 amount = 0
33- for line in move.line_id:
34- amount += (line.debit - line.credit)
35+ for line in pool.get('account.move.line').read(cr, uid, move['line_id'], ['debit', 'credit'], context):
36+ amount += (line['debit'] - line['credit'])
37
38 if abs(amount) > 0.5 * 10 ** -int(config['price_accuracy']):
39 unbalanced_moves.append(move)
40@@ -358,20 +358,20 @@
41 child_ids = pool.get('account.account')._get_children_and_consol(cr, uid, [account_map.source_account_id.id], context)
42
43 # For each children account. (Notice the context filter! the computed balanced is based on this filter)
44- for account in pool.get('account.account').browse(cr, uid, child_ids, context={'fiscalyear': fiscalyear_id, 'periods': period_ids}):
45+ for account in pool.get('account.account').read(cr, uid, child_ids, ['id', 'type', 'balance'], context={'fiscalyear': fiscalyear_id, 'periods': period_ids}):
46 # Check if the children account needs to (and can) be closed
47 # Note: We currently ignore the close_method (account.user_type.close_method)
48 # and always do a balance close.
49- if account.type != 'view':
50+ if account['type'] != 'view':
51 # Compute the balance for the account (uses the previous browse context filter)
52- balance = account.balance
53+ balance = account['balance']
54 # Check if the balance is greater than the limit
55 if abs(balance) >= 0.5 * 10 ** -int(config['price_accuracy']):
56 #
57 # Add a new line to the move
58 #
59 move_lines.append({
60- 'account_id': account.id,
61+ 'account_id': account['id'],
62 'debit': balance<0 and -balance,
63 'credit': balance>0 and balance,
64 'name': description,
65@@ -389,7 +389,7 @@
66 #
67 # Add the dest lines
68 #
69- for dest_account_id in dest_accounts_totals.keys():
70+ for dest_account_id in dest_accounts_totals:
71 balance = dest_accounts_totals[dest_account_id]
72 move_lines.append({
73 'account_id': dest_account_id,
74@@ -405,14 +405,22 @@
75 #
76 # Finally create the account move with all the lines (if needed)
77 #
78- if len(move_lines):
79+ if move_lines:
80+ # Firstly we create the move
81 move_id = pool.get('account.move').create(cr, uid, {
82 'ref': description,
83 'date': date,
84 'period_id': period_id,
85 'journal_id': journal_id,
86- 'line_id': [(0,0,line) for line in move_lines],
87 }, context=context)
88+ for move in move_lines:
89+ move['move_id'] = move_id
90+ pool.get('account.move.line').create(cr, uid, move,
91+ context=context,
92+ check=False)
93+ journal = pool.get('account.journal').read(cr, uid, journal_id, ['name', 'entry_posted'])
94+ if journal['entry_posted']:
95+ pool.get('account.move').button_validate(cr,uid, [move_id],context)
96 else:
97 move_id = None
98 data['process_task_progress'] = 99.0
99@@ -500,14 +508,22 @@
100 #
101 # Finally create the account move with all the lines (if needed)
102 #
103- if len(move_lines):
104+ if move_lines:
105+ # Firstly we create the move
106 move_id = pool.get('account.move').create(cr, uid, {
107 'ref': description,
108 'date': date,
109 'period_id': period_id,
110 'journal_id': journal_id,
111- 'line_id': [(0,0,line) for line in move_lines],
112 }, context=context)
113+ for move in move_lines:
114+ move['move_id'] = move_id
115+ pool.get('account.move.line').create(cr, uid, move,
116+ context=context,
117+ check=False)
118+ journal = pool.get('account.journal').read(cr, uid, journal_id, ['name', 'entry_posted'])
119+ if journal['entry_posted']:
120+ pool.get('account.move').button_validate(cr,uid, [move_id],context)
121 else:
122 move_id = None
123 data['process_task_progress'] = 99.0