[MODULE] +v1.1.0 from https://www.odoo.com/apps/7.0/account_financial_report_webkit/
[burette/account_financial_report_webkit.git] / account_move_line.py
diff --git a/account_move_line.py b/account_move_line.py
new file mode 100644 (file)
index 0000000..617908b
--- /dev/null
@@ -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 <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+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"),
+                }