[PYTHON] +allow to follow non analytic lines 7.0
authorLudovic CHEVALIER <ludovic@beurresarrasin.net>
Wed, 11 May 2022 11:15:56 +0000 (13:15 +0200)
committerLudovic CHEVALIER <ludovic@beurresarrasin.net>
Wed, 11 May 2022 11:15:56 +0000 (13:15 +0200)
account_budget.py [new file with mode: 0644]

diff --git a/account_budget.py b/account_budget.py
new file mode 100644 (file)
index 0000000..187cf29
--- /dev/null
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+# Copyright 2022 L'Heureux Cyclage
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from openerp.osv import osv
+from openerp.osv import orm
+from openerp.osv import fields
+
+
+class crossovered_budget_lines(orm.Model):
+    _inherit = 'crossovered.budget.lines'
+
+    def _prac_amt(self, cr, uid, ids, context=None):
+        """Calculate pratical amount even if there is no analytic account"""
+        res = {}
+        result = 0.0
+        if context is None:
+            context = {}
+        account_obj = self.pool.get('account.account')
+
+        for line in self.browse(cr, uid, ids, context=context):
+            acc_ids = [x.id for x in line.general_budget_id.account_ids]
+            if not acc_ids:
+                raise osv.except_osv(_('Error!'),_("The Budget '%s' has no accounts!") % ustr(line.general_budget_id.name))
+            acc_ids = account_obj._get_children_and_consol(cr, uid, acc_ids, context=context)
+            date_to = line.date_to
+            date_from = line.date_from
+
+            if line.analytic_account_id.id:
+                res = super(crossovered_budget_lines, self)._prac_amt(cr, uid, ids, context)
+            else:
+                cr.execute("SELECT SUM(credit) - SUM(debit) FROM account_move_line WHERE (date "
+                   "between to_date(%s,'yyyy-mm-dd') AND to_date(%s,'yyyy-mm-dd')) AND "
+                   "account_id=ANY(%s)", (date_from, date_to,acc_ids,))
+                result = cr.fetchone()[0]
+                if result is None:
+                    result = 0.00
+                res[line.id] = result
+
+        return res
+