X-Git-Url: http://git.cyclocoop.org/?p=burette%2Faccount_financial_report_webkit.git;a=blobdiff_plain;f=account_move_line.py;fp=account_move_line.py;h=617908bcca33dfb1edcd55b41c6ed476f245a0d2;hp=0000000000000000000000000000000000000000;hb=cddef38e342c880228694525c45df3f7dd8c2148;hpb=bffd331c220385010fe9abad9e228fc2004a293a diff --git a/account_move_line.py b/account_move_line.py new file mode 100644 index 0000000..617908b --- /dev/null +++ b/account_move_line.py @@ -0,0 +1,85 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Author: Nicolas Bessi. +# Copyright Camptocamp SA 2011 +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp.osv import fields, orm +from openerp.tools.translate import _ + + +class AccountMoveLine(orm.Model): + """Overriding Account move line in order to add last_rec_date. + Last rec date is the date of the last reconciliation (full or partial) account move line""" + _inherit = 'account.move.line' + + def init(self, cr): + ##We do not want to catch error as if sql is not run it will give invalid data + cr.execute("UPDATE account_move_line as acm " + " SET last_rec_date =" + " (SELECT date from account_move_line" + " WHERE reconcile_id = acm.reconcile_id" + " AND reconcile_id IS NOT NULL" + " ORDER BY date DESC LIMIT 1)" + " WHERE last_rec_date is null;") + + cr.execute("UPDATE account_move_line as acm " + " SET last_rec_date =" + " (SELECT date from account_move_line" + " WHERE reconcile_partial_id = acm.reconcile_partial_id" + " AND reconcile_partial_id IS NOT NULL" + " ORDER BY date DESC LIMIT 1)" + " WHERE last_rec_date is null;") + + def _get_move_line_from_line_rec(self, cr, uid, ids, context=None): + moves = [] + for reconcile in self.pool.get('account.move.reconcile').browse(cr, uid, ids, context=context): + for move_line in reconcile.line_partial_ids: + moves.append(move_line.id) + for move_line in reconcile.line_id: + moves.append(move_line.id) + return list(set(moves)) + + def _get_last_rec_date(self, cursor, uid, ids, name, args, context=None): + if not isinstance(ids, list): + ids = [ids] + res = {} + for line in self.browse(cursor, uid, ids, context): + res[line.id] = {'last_rec_date': False} + rec = line.reconcile_id or line.reconcile_partial_id or False + if rec: + # we use cursor in order to gain some perfs + cursor.execute('SELECT date from account_move_line where' + ' reconcile_id = %s OR reconcile_partial_id = %s' + ' ORDER BY date DESC LIMIT 1 ', + (rec.id, rec.id)) + res_set = cursor.fetchone() + if res_set: + res[line.id] = {'last_rec_date': res_set[0]} + return res + + _columns = { + 'last_rec_date': fields.function(_get_last_rec_date, + method=True, + string='Last reconciliation date', + store={'account.move.line': (lambda self, cr, uid, ids, c={}: ids, ['date'], 20), + 'account.move.reconcile': (_get_move_line_from_line_rec, None, 20)}, + type='date', + multi='all', + help="the date of the last reconciliation (full or partial) account move line"), + }