From 149800235092a70d8694bd1836d68c8f67d759b2 Mon Sep 17 00:00:00 2001
From: "Quentin (OpenERP)"
Date: Tue, 23 Oct 2012 13:13:01 +0200
Subject: [PATCH 01/12] [ADD] account_test
bzr revid: qdp-launchpad@openerp.com-20121023111301-c41qvtxm1l5p0nq0
---
addons/account_test/__init__.py | 2 +
addons/account_test/__terp__.py | 42 +++
addons/account_test/account_test.py | 65 +++++
addons/account_test/account_test_data.xml | 175 ++++++++++++
addons/account_test/account_test_demo.xml | 29 ++
addons/account_test/account_test_report.xml | 14 +
addons/account_test/account_test_view.xml | 56 ++++
addons/account_test/i18n/fr_FR.po | 264 ++++++++++++++++++
addons/account_test/report/__init__.py | 1 +
addons/account_test/report/account_test.rml | 78 ++++++
.../report/account_test_report.py | 105 +++++++
.../account_test/security/ir.model.access.csv | 3 +
12 files changed, 834 insertions(+)
create mode 100644 addons/account_test/__init__.py
create mode 100644 addons/account_test/__terp__.py
create mode 100644 addons/account_test/account_test.py
create mode 100644 addons/account_test/account_test_data.xml
create mode 100644 addons/account_test/account_test_demo.xml
create mode 100644 addons/account_test/account_test_report.xml
create mode 100644 addons/account_test/account_test_view.xml
create mode 100644 addons/account_test/i18n/fr_FR.po
create mode 100644 addons/account_test/report/__init__.py
create mode 100644 addons/account_test/report/account_test.rml
create mode 100644 addons/account_test/report/account_test_report.py
create mode 100644 addons/account_test/security/ir.model.access.csv
diff --git a/addons/account_test/__init__.py b/addons/account_test/__init__.py
new file mode 100644
index 00000000000..106682f4a12
--- /dev/null
+++ b/addons/account_test/__init__.py
@@ -0,0 +1,2 @@
+import account_test
+import report
diff --git a/addons/account_test/__terp__.py b/addons/account_test/__terp__.py
new file mode 100644
index 00000000000..5578f0339ae
--- /dev/null
+++ b/addons/account_test/__terp__.py
@@ -0,0 +1,42 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (c) 2011 CCI Connect asbl (http://www.cciconnect.be) All Rights Reserved.
+# Philmer
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+{
+ "name" : "OpenERP",
+ "version" : "1.0",
+ "author" : "OpenERP",
+ "category" : "Test accounting",
+ "website": "http://www.openerp.com",
+ "description": "Asserts on accounting",
+ "depends" : ["account"],
+ "update_xml" : [
+ "account_test_view.xml",
+ "account_test_report.xml",
+ "security/ir.model.access.csv",
+ "account_test_data.xml",
+ ],
+ 'demo_xml': [
+ "account_test_demo.xml",
+ ],
+ "active": False,
+ "installable": True
+}
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/account_test/account_test.py b/addons/account_test/account_test.py
new file mode 100644
index 00000000000..069ba6601e4
--- /dev/null
+++ b/addons/account_test/account_test.py
@@ -0,0 +1,65 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# Copyright (c) 2005-2006 TINY SPRL. (http://tiny.be) All Rights Reserved.
+#
+# $Id: product_expiry.py 4304 2006-10-25 09:54:51Z ged $
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# 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 2
+# 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+from osv import fields,osv
+import pooler
+import netsvc
+import time
+from xml import dom
+
+
+CODE_EXEC_DEFAULT = '''\
+res = []
+cr.execute("select id, code from account_journal")
+for record in cr.dictfetchall():
+ res.append(record['code'])
+result = res
+'''
+
+class accounting_assert_test(osv.osv):
+ _name = "accounting.assert.test"
+ _order = "sequence"
+
+ _columns = {
+ 'name': fields.char('Test Name', size=256, required=True, select=True, translate=True),
+ 'desc': fields.text('Test Description', select=True, translate=True),
+ 'code_exec': fields.text('Python code or SQL query', required=True),
+ 'active': fields.boolean('Active'),
+ 'sequence': fields.integer('Sequence'),
+ }
+
+ _defaults = {
+ 'code_exec': lambda *a: CODE_EXEC_DEFAULT,
+ 'active': lambda *a: True,
+ 'sequence': lambda *a: 10,
+ }
+
+accounting_assert_test()
+
diff --git a/addons/account_test/account_test_data.xml b/addons/account_test/account_test_data.xml
new file mode 100644
index 00000000000..453d8184b9e
--- /dev/null
+++ b/addons/account_test/account_test_data.xml
@@ -0,0 +1,175 @@
+
+
+
+
+
+ 1
+ Test 1: General balance
+ Check the balance: Debit sum = Credit sum
+
+
+
+
+ 2
+ Test 2: Opening a fiscal year
+ Check if the balance of the new opened fiscal year matches with last year's balance
+
+
+
+
+ 3
+ Test 3: Movement lines
+ Check if movement lines are balanced and have the same date and period
+ 0 or am.period_id!=ml.period_id or (am.date!=ml.date)
+"""
+cr.execute(sql)
+res = cr.dictfetchall()
+if res:
+ res.insert(0,_('* The test failed for these movement lines:'))
+ result = res
+
+]]>
+
+
+
+ 4
+ Test 4: Totally reconciled mouvements
+ Check if the totally reconciled movements are balanced
+ 0", (record['reconcile_id'],))
+ reconcile_ids=cr.dictfetchall()
+ if reconcile_ids:
+ res.append(', '.join(["Reconcile name: %(name)s, id=%(id)s " % r for r in reconcile_ids]))
+result = res
+if result:
+ res.insert(0,_('* The test failed for these reconciled items(id/name):'))
+]]>
+
+
+
+ 5
+ Test 5.1 : Payable and Receivable accountant lines of reconciled invoices
+ Check that reconciled invoice for Sales/Purchases has reconciled entries for Payable and Receivable Accounts
+
+
+
+
+
+ 6
+ Test 5.2 : Reconcilied invoices and Payable/Receivable accounts
+ Check that reconciled account moves, that define Payable and Receivable accounts, are belonging to reconciled invoices
+
+
+
+
+ 7
+ Test 6 : Invoices status
+ Check that paid/reconciled invoices are not in 'Open' state
+
+
+
+
+
+ 8
+ Test 7: « View » account type
+ Check that there's no move for any account with « View » account type
+
+
+
+
+ 9
+ Test 8 : Closing balance on bank statements
+ Check on bank statement that the Closing Balance = Starting Balance + sum of statement lines
+ 0.000000001;")
+result = cr.dictfetchall()
+if result:
+ result.insert(0,_('* Unbalanced bank statement that need to be checked: '))
+]]>
+
+
+
+ 10
+ Test 9 : Accounts and partners on account moves
+ Check that general accounts and partners on account moves are active
+
+
+
+
diff --git a/addons/account_test/account_test_demo.xml b/addons/account_test/account_test_demo.xml
new file mode 100644
index 00000000000..d10182f61b8
--- /dev/null
+++ b/addons/account_test/account_test_demo.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+ Test 1
+ Test 1
+
+ 0"""
+cr.execute(sql)
+result = cr.dictfetchall()
+]]>
+
+
+
+
diff --git a/addons/account_test/account_test_report.xml b/addons/account_test/account_test_report.xml
new file mode 100644
index 00000000000..480507b6072
--- /dev/null
+++ b/addons/account_test/account_test_report.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
diff --git a/addons/account_test/account_test_view.xml b/addons/account_test/account_test_view.xml
new file mode 100644
index 00000000000..8351cb0687a
--- /dev/null
+++ b/addons/account_test/account_test_view.xml
@@ -0,0 +1,56 @@
+
+
+
+
+
+ Tests
+ accounting.assert.test
+ tree
+
+
+
+
+
+
+
+
+
+
+ Tests
+ accounting.assert.test
+ form
+
+
+
+
+
+
+ Accounting Tests
+ accounting.assert.test
+ tree,form
+
+
+
+
+
+
diff --git a/addons/account_test/i18n/fr_FR.po b/addons/account_test/i18n/fr_FR.po
new file mode 100644
index 00000000000..6266ff9fa54
--- /dev/null
+++ b/addons/account_test/i18n/fr_FR.po
@@ -0,0 +1,264 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * account_test
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 5.0.16\n"
+"Report-Msgid-Bugs-To: support@openerp.com\n"
+"POT-Creation-Date: 2011-11-13 15:05:26+0000\n"
+"PO-Revision-Date: 2011-11-13 15:05:26+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: account_test
+#: field:accounting.assert.test,desc:0
+msgid "Test Description"
+msgstr "Test Description"
+
+#. module: account_test
+#: constraint:ir.model:0
+msgid "The Object name must start with x_ and not contain any special character !"
+msgstr "Le nom de l'object doit commencer par x_ et ne doit pas contenir de caractères spéciaux !"
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_02
+msgid "Test 2: Opening a fiscal year"
+msgstr "Test 2: Ouverture d'une année fiscale"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_03
+msgid "Check if movement lines are balanced and have the same date and period"
+msgstr "Vérifier que les lignes d'un même mouvement sont balancées, avec la même période et la même date"
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_09_1
+msgid "Test 9.1 : Gap in Invoices sequence"
+msgstr "Test 9: Trous dans la numérotation des factures"
+
+#. module: account_test
+#: model:ir.actions.report.xml,name:account_test.account_assert_test_report
+msgid "Accounting Tests"
+msgstr "Tests Comptables"
+
+#. module: account_test
+#: field:accounting.assert.test,name:0
+msgid "Test Name"
+msgstr "Nom du test"
+
+#. module: account_test
+#: constraint:ir.actions.act_window:0
+msgid "Invalid model name in the action definition."
+msgstr "Modèle non valide pour le définition de l'action"
+
+#. module: account_test
+#: field:accounting.assert.test,code_exec:0
+msgid "Python code or SQL query"
+msgstr "Code Python ou requête SQL"
+
+#. module: account_test
+#: rml:account.test.assert.print:0
+msgid "Accouting tests on"
+msgstr "Tests comptables sur"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_06
+msgid "Check that paid/reconciled invoices are not in 'Open' state"
+msgstr "Vérifier que les factures paid/reconcilied ne sont pas 'open'"
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_11_2
+msgid "Test 11.2: Analytical moves"
+msgstr "Test 11.2: Lignes analytiques"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_09_2
+msgid "Check that there's no gap in Bank Stetement sequence"
+msgstr "Test 9: Trous dans la numérotation des extraits de comptes"
+
+#. module: account_test
+#: view:accounting.assert.test:0
+msgid "Tests"
+msgstr "Tests"
+
+#. module: account_test
+#: view:accounting.assert.test:0
+msgid "Expression to evaluate"
+msgstr "Expression à évaluer"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_06_1
+msgid "Check that there's no move for any account with « View » account type"
+msgstr "Vérifier qu'il n'y a pas de mouvements sur des comptes de type 'vue'"
+
+#. module: account_test
+#: model:ir.actions.act_window,name:account_test.action_accounting_assert
+#: model:ir.ui.menu,name:account_test.menu_action_license
+msgid "Accounting Tests"
+msgstr "Tests Comptables"
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_09_2
+msgid "Test 9.2 : Gap in Bank Statement sequence"
+msgstr "Test 9.2 : Trous dans la numérotation des extraits de comptes"
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_01
+msgid "Test 1: General balance"
+msgstr "Test 1: Balance Générale"
+
+#. module: account_test
+#: model:ir.module.module,description:account_test.module_meta_information
+msgid "Asserts on accounting"
+msgstr "Asserts on accounting"
+
+#. module: account_test
+#: code:addons/account_test/report/account_test_report.py:0
+#, python-format
+msgid "The test was passed successfully"
+msgstr "Le test est passé avec succès"
+
+#. module: account_test
+#: field:accounting.assert.test,active:0
+msgid "Active"
+msgstr "Active"
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_06
+msgid "Test 6 : Invoices status"
+msgstr "Test 6: vérifier les factures"
+
+#. module: account_test
+#: model:ir.model,name:account_test.model_accounting_assert_test
+msgid "accounting.assert.test"
+msgstr "accounting.assert.test"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_05_2
+msgid "Check that reconciled account moves, that define Payable and Receivable accounts, are belonging to reconciled invoices"
+msgstr "Vérifier que les lignes de factures d'achat/vente réconciliées ont des écritures pour les comptes payables et recevables réconciliées"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_11_2
+msgid "Check that amounts by analytical plan are equals to the amount of account move line"
+msgstr "Vérifier que les montants par plan analytique sont égaux au montant de la ligne du mouvement comptable"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_11_1
+msgid "Check that each account move line has at least 3 analytical moves"
+msgstr "Vérifier que chaque ligne d'un mouvement comptable a au moins 3 lignes analytiques"
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_07
+msgid "Test 8 : Closing balance on bank statements"
+msgstr "Test 8 : Vérification des lignes financières des extraits de comptes"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_07
+msgid "Check on bank statement that the Closing Balance = Starting Balance + sum of statement lines"
+msgstr "Vérifier que le solde de fin est égal au solde de début + la somme des mouvements"
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_05
+msgid "Test 5.1 : Payable and Receivable lines accounts of reconciled invoices"
+msgstr "Test 5.1 : Vérification des lignes des comptes payables et recevables des factures réconciliées"
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_03
+msgid "Test 3: Movement lines"
+msgstr "Test 3: Mouvements comptables"
+
+#. module: account_test
+#: constraint:ir.ui.view:0
+msgid "Invalid XML for View Architecture!"
+msgstr "XML Invalide pour cette vue"
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_11_1
+msgid "Test 11.1: Analytical moves"
+msgstr "Test 11.1: Mouvements analytiques"
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_05_2
+msgid "Test 5.2 : Reconcilied invoices and Payable/Receivable accounts"
+msgstr "Test 5.2 : Factures réconciliées et les lignes des comptes payables et recevables non réconciliées "
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_15
+msgid "Test 15 : Analytical moves for Analytic multi plan"
+msgstr "Test 15 : Mouvements analytiques"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_15
+msgid "Check that analytic accounts used on lines are present in analytic sections of different plans"
+msgstr "Vérifier que les centres de coûts présents dans les lignes sont bien présents dans les sections analytiques des différents plans"
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_04
+msgid "Test 4: Totally reconciled mouvements"
+msgstr "Test 4: Vérification des reconcile complets"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_04
+msgid "Check if the totally reconciled movements are balanced"
+msgstr "Vérification des reconcile complets"
+
+#. module: account_test
+#: field:accounting.assert.test,sequence:0
+msgid "Sequence"
+msgstr "Séquence"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_02
+msgid "Check if the balance of the new opened fiscal year matches with last year's balance"
+msgstr "Vérifier que l'ouverture d'une année fiscale correspond au solde de l'année passée"
+
+#. module: account_test
+#: view:accounting.assert.test:0
+msgid "Python Code"
+msgstr "Code Python"
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_08
+msgid "Test 9 : Accounts and partners on account moves"
+msgstr "Test 9 : Comptes et partenaires sur les mouvements comptables"
+
+#. module: account_test
+#: model:accounting.assert.test,name:account_test.account_test_06_1
+msgid "Test 7: « View » account type"
+msgstr "Test 7: mouvements sur comptes type 'vue'"
+
+#. module: account_test
+#: model:ir.module.module,shortdesc:account_test.module_meta_information
+msgid "OpenERP"
+msgstr "OpenERP"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_05
+msgid "Check that reconciled invoice for Sales/Purchases has reconciled entries for Payable and Receivable Accounts"
+msgstr "Vérifier que les factures réconcilées ont des écritures comptables sur les comptes payables ou recevables réconciliées"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_09_1
+msgid "Check that there's no gap in invoices sequence"
+msgstr "Vérifier que les factures n'ont pas de trous dans leur numérotation"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_01
+msgid "Check the balance: Debit sum = Credit sum"
+msgstr "Vérifier la balance générale: somme débit = somme crédit"
+
+#. module: account_test
+#: model:accounting.assert.test,desc:account_test.account_test_14
+msgid "Check that general accounts and partners on account moves are active"
+msgstr "Vérifier que les comptes généraux ainsi que les partenaires renseignés sur les mouvements comptables sont actifs"
+
+#. module: account_test
+#: view:accounting.assert.test:0
+msgid "Code Help"
+msgstr "Code Help"
+
diff --git a/addons/account_test/report/__init__.py b/addons/account_test/report/__init__.py
new file mode 100644
index 00000000000..21a4929330b
--- /dev/null
+++ b/addons/account_test/report/__init__.py
@@ -0,0 +1 @@
+import account_test_report
diff --git a/addons/account_test/report/account_test.rml b/addons/account_test/report/account_test.rml
new file mode 100644
index 00000000000..1efa12fd5cb
--- /dev/null
+++ b/addons/account_test/report/account_test.rml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Accouting tests on [[ datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") ]]
+
+
+
+
+ [[repeatIn(objects,'o')]]
+
+
+ |
+ [[ o.name ]]
+ |
+
+
+ |
+ [[ o.desc or '' ]]
+ |
+
+
+
+
+ |
+ [[ repeatIn(execute_code(o.code_exec), 'test_result') ]]
+ [[ test_result ]]
+ |
+
+
+
+
+
+
+
+
+
diff --git a/addons/account_test/report/account_test_report.py b/addons/account_test/report/account_test_report.py
new file mode 100644
index 00000000000..79a52611756
--- /dev/null
+++ b/addons/account_test/report/account_test_report.py
@@ -0,0 +1,105 @@
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2009 Tiny SPRL (). All Rights Reserved
+# $Id$
+#
+# 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 .
+#
+##############################################################################
+
+import datetime
+import time
+import re
+from report import report_sxw
+from itertools import groupby
+from operator import itemgetter
+from tools.translate import _
+#
+# Use period and Journal for selection or resources
+#
+class report_assert_account(report_sxw.rml_parse):
+ def __init__(self, cr, uid, name, context):
+ super(report_assert_account, self).__init__(cr, uid, name, context=context)
+ self.localcontext.update( {
+ 'time': time,
+ 'datetime': datetime,
+ 'execute_code': self.execute_code,
+ })
+
+ def execute_code(self, code_exec):
+ def group(lst, col):
+ return dict((k, [v for v in itr]) for k, itr in groupby(sorted(lst, key=lambda x: x[col]), itemgetter(col)))
+
+ def sort_by_intified_num(a, b):
+ if a is None:
+ return -1
+ elif b is None:
+ return 1
+ else:
+ #if a is not None and b is not None:
+ return cmp(int(a), int(b))
+
+ def reconciled_inv():
+ reconciled_inv_ids = self.pool.get('account.invoice').search(self.cr, self.uid, [('reconciled','=',True)])
+ return reconciled_inv_ids
+
+
+ def get_parent(acc_id):
+ acc_an_id = self.pool.get('account.analytic.account').browse(self.cr, self.uid, acc_id).parent_id
+ while acc_an_id.parent_id:
+ acc_an_id = acc_an_id.parent_id
+ return acc_an_id.id
+
+ def order_columns(item, cols=None):
+ if cols is None:
+ cols = item.keys()
+ return [(col, item.get(col)) for col in cols if col in item.keys()]
+
+ localdict = {
+ 'cr': self.cr,
+ '_': _,
+ 'reconciled_inv' : reconciled_inv,
+ 'group' : group,
+ 'get_parent' : get_parent,
+ 'now': datetime.datetime.now(),
+ 'result': None,
+ 'column_order': None,
+ }
+
+ exec code_exec in localdict
+
+ result = localdict['result']
+ column_order = localdict.get('column_order', None)
+
+ if not isinstance(result, (tuple, list, set)):
+ result = [result]
+
+ if not result:
+ result = [_('The test was passed successfully')]
+ elif all([isinstance(x, dict) for x in result]):
+ result = [', '.join(["%s: %s" % (k, v) for k, v in order_columns(rec, column_order)]) for rec in result]
+ else:
+ def _format(a):
+ if isinstance(a, dict):
+ return ', '.join(["%s: %s" % (tup[0], tup[1]) for tup in order_columns(a, column_order)])
+ else:
+ return a
+ result = [_format(rec) for rec in result]
+
+ return result
+
+report_sxw.report_sxw('report.account.test.assert.print', 'accounting.assert.test', 'addons/account_test/report/account_test.rml', parser=report_assert_account, header=False)
+
diff --git a/addons/account_test/security/ir.model.access.csv b/addons/account_test/security/ir.model.access.csv
new file mode 100644
index 00000000000..fb90ba43825
--- /dev/null
+++ b/addons/account_test/security/ir.model.access.csv
@@ -0,0 +1,3 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_accounting_assert_test","accounting.assert.test","model_accounting_assert_test",base.group_system,1,1,1,1
+"access_accounting_assert_test","accounting.assert.test","model_accounting_assert_test",account.group_account_manager,1,0,0,0
From 5815b2c2e4be4f915ec892cb808334e9c37e9125 Mon Sep 17 00:00:00 2001
From: "Bharat Devnani (OpenERP)"
Date: Thu, 1 Nov 2012 13:02:08 +0530
Subject: [PATCH 02/12] [IMP] made compatible to version 7.0
bzr revid: bde@tinyerp.com-20121101073208-i1s4m2jca2qvraik
---
.../{__terp__.py => __openerp__.py} | 0
addons/account_test/account_test_view.xml | 76 +++++++++----------
2 files changed, 38 insertions(+), 38 deletions(-)
rename addons/account_test/{__terp__.py => __openerp__.py} (100%)
diff --git a/addons/account_test/__terp__.py b/addons/account_test/__openerp__.py
similarity index 100%
rename from addons/account_test/__terp__.py
rename to addons/account_test/__openerp__.py
diff --git a/addons/account_test/account_test_view.xml b/addons/account_test/account_test_view.xml
index 8351cb0687a..5f0d7f45090 100644
--- a/addons/account_test/account_test_view.xml
+++ b/addons/account_test/account_test_view.xml
@@ -2,10 +2,9 @@
-
- Tests
- accounting.assert.test
- tree
+
+ Tests
+ accounting.assert.test
@@ -14,43 +13,44 @@
-
-
- Tests
- accounting.assert.test
- form
+
+
+ Tests
+ accounting.assert.test
-
+
+
+ Accounting Tests
+ accounting.assert.test
+ tree,form
+
+
+
-
- Accounting Tests
- accounting.assert.test
- tree,form
-
-
-
-
-
+
From d73ccce5ba6c15e1a93b3da4f8478b77ea58ee35 Mon Sep 17 00:00:00 2001
From: "Bharat Devnani (OpenERP)"
Date: Thu, 1 Nov 2012 15:15:56 +0530
Subject: [PATCH 03/12] [IMP] improved module according to version 7
conventions
bzr revid: bde@tinyerp.com-20121101094556-s05h6ymbrxdgjfk1
---
addons/account_test/__openerp__.py | 31 ++++++++++-----------
addons/account_test/account_test_view.xml | 33 ++++++++++++++---------
2 files changed, 37 insertions(+), 27 deletions(-)
diff --git a/addons/account_test/__openerp__.py b/addons/account_test/__openerp__.py
index 5578f0339ae..13328cddcb4 100644
--- a/addons/account_test/__openerp__.py
+++ b/addons/account_test/__openerp__.py
@@ -20,23 +20,24 @@
#
##############################################################################
{
- "name" : "OpenERP",
- "version" : "1.0",
- "author" : "OpenERP",
- "category" : "Test accounting",
- "website": "http://www.openerp.com",
- "description": "Asserts on accounting",
- "depends" : ["account"],
- "update_xml" : [
- "account_test_view.xml",
- "account_test_report.xml",
- "security/ir.model.access.csv",
- "account_test_data.xml",
+ 'name' : 'Accounting Consistency Tests',
+ 'version' : '1.0',
+ 'author' : 'OpenERP',
+ 'category' : 'Test accounting',
+ 'website': 'http://www.openerp.com',
+ 'description': """Asserts on accounting
+ =====================""",
+ 'depends' : ['account'],
+ 'data' : [
+ 'security/ir.model.access.csv',
+ 'account_test_view.xml',
+ 'account_test_report.xml',
+ 'account_test_data.xml',
],
'demo_xml': [
- "account_test_demo.xml",
+ 'account_test_demo.xml',
],
- "active": False,
- "installable": True
+ 'active': False,
+ 'installable': True
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/account_test/account_test_view.xml b/addons/account_test/account_test_view.xml
index 5f0d7f45090..c6fc0c8294b 100644
--- a/addons/account_test/account_test_view.xml
+++ b/addons/account_test/account_test_view.xml
@@ -22,23 +22,32 @@
+
-
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+Example:
+sql = 'select id, name, ref, date from account_move_line where account_id in
+(select id from account_account where type = 'view')'
+cr.execute(sql)
+result = cr.dictfetchall()
+
+
+
+
From f3377ee338daf8863ef1e0add8dc1f9eb7fc1c27 Mon Sep 17 00:00:00 2001
From: "Pinakin Nayi (OpenERP)"
Date: Fri, 9 Nov 2012 12:09:12 +0530
Subject: [PATCH 04/12] [IMP] improve module
bzr revid: pna@tinyerp.com-20121109063912-7g5jy22j3fx2vxu8
---
addons/account_test/__openerp__.py | 2 +-
addons/account_test/account_test_view.xml | 7 ++++++-
addons/account_test/report/__init__.py | 2 ++
addons/account_test/report/account_test_report.py | 1 +
addons/account_test/security/ir.model.access.csv | 2 +-
5 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/addons/account_test/__openerp__.py b/addons/account_test/__openerp__.py
index 13328cddcb4..b755d4aa872 100644
--- a/addons/account_test/__openerp__.py
+++ b/addons/account_test/__openerp__.py
@@ -34,7 +34,7 @@
'account_test_report.xml',
'account_test_data.xml',
],
- 'demo_xml': [
+ 'demo': [
'account_test_demo.xml',
],
'active': False,
diff --git a/addons/account_test/account_test_view.xml b/addons/account_test/account_test_view.xml
index c6fc0c8294b..bcedebf0eeb 100644
--- a/addons/account_test/account_test_view.xml
+++ b/addons/account_test/account_test_view.xml
@@ -29,7 +29,7 @@
-
+
@@ -57,6 +57,11 @@ result = cr.dictfetchall()
Accounting Tests
accounting.assert.test
tree,form
+
+
+ Click to create Accounting Test.
+
+
diff --git a/addons/account_test/report/__init__.py b/addons/account_test/report/__init__.py
index 21a4929330b..0e4fbf07082 100644
--- a/addons/account_test/report/__init__.py
+++ b/addons/account_test/report/__init__.py
@@ -1 +1,3 @@
import account_test_report
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/account_test/report/account_test_report.py b/addons/account_test/report/account_test_report.py
index 79a52611756..66d5043412f 100644
--- a/addons/account_test/report/account_test_report.py
+++ b/addons/account_test/report/account_test_report.py
@@ -103,3 +103,4 @@ class report_assert_account(report_sxw.rml_parse):
report_sxw.report_sxw('report.account.test.assert.print', 'accounting.assert.test', 'addons/account_test/report/account_test.rml', parser=report_assert_account, header=False)
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/account_test/security/ir.model.access.csv b/addons/account_test/security/ir.model.access.csv
index fb90ba43825..95f2336f80b 100644
--- a/addons/account_test/security/ir.model.access.csv
+++ b/addons/account_test/security/ir.model.access.csv
@@ -1,3 +1,3 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
"access_accounting_assert_test","accounting.assert.test","model_accounting_assert_test",base.group_system,1,1,1,1
-"access_accounting_assert_test","accounting.assert.test","model_accounting_assert_test",account.group_account_manager,1,0,0,0
+"access_accounting_assert_test_manager","accounting.assert.test","model_accounting_assert_test",account.group_account_manager,1,0,0,0
From 87d7129447683964bcd0baada807829506d5ed6f Mon Sep 17 00:00:00 2001
From: "Bharat Devnani (OpenERP)"
Date: Mon, 19 Nov 2012 11:53:46 +0530
Subject: [PATCH 05/12] [IMP] improved description in __openerp__.py
bzr revid: bde@tinyerp.com-20121119062346-no2y4123ravq2abu
---
addons/account_test/__openerp__.py | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/addons/account_test/__openerp__.py b/addons/account_test/__openerp__.py
index b755d4aa872..c3261797c26 100644
--- a/addons/account_test/__openerp__.py
+++ b/addons/account_test/__openerp__.py
@@ -25,8 +25,15 @@
'author' : 'OpenERP',
'category' : 'Test accounting',
'website': 'http://www.openerp.com',
- 'description': """Asserts on accounting
- =====================""",
+ 'description': """
+Asserts on accounting.
+======================
+With this module you can manually check consistencies and inconsistencies of accounting module.
+
+How to perform Consistency Tests:
+---------------------------------
+Reporting/Accounting/Accounting Tests
+""",
'depends' : ['account'],
'data' : [
'security/ir.model.access.csv',
From 4bf8dbc14d31c54ce13709cb822d635278ae31de Mon Sep 17 00:00:00 2001
From: "Bharat Devnani (OpenERP)"
Date: Mon, 19 Nov 2012 14:19:42 +0530
Subject: [PATCH 06/12] [IMP] improved module description
bzr revid: bde@tinyerp.com-20121119084942-fa7ctfz7wd9pd2zm
---
addons/account_test/__openerp__.py | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/addons/account_test/__openerp__.py b/addons/account_test/__openerp__.py
index c3261797c26..ae65eb4b4c8 100644
--- a/addons/account_test/__openerp__.py
+++ b/addons/account_test/__openerp__.py
@@ -28,11 +28,7 @@
'description': """
Asserts on accounting.
======================
-With this module you can manually check consistencies and inconsistencies of accounting module.
-
-How to perform Consistency Tests:
----------------------------------
-Reporting/Accounting/Accounting Tests
+With this module you can manually check consistencies and inconsistencies of accounting module from menu Reporting/Accounting/Accounting Tests.
""",
'depends' : ['account'],
'data' : [
From 982223b577a9f3db01a2a993247f244f6fec92b7 Mon Sep 17 00:00:00 2001
From: "Bharat Devnani (OpenERP)"
Date: Mon, 19 Nov 2012 14:26:36 +0530
Subject: [PATCH 07/12] [IMP] changed module category
bzr revid: bde@tinyerp.com-20121119085636-a9otys3xhcth94yj
---
addons/account_test/__openerp__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/addons/account_test/__openerp__.py b/addons/account_test/__openerp__.py
index ae65eb4b4c8..3e98734fe72 100644
--- a/addons/account_test/__openerp__.py
+++ b/addons/account_test/__openerp__.py
@@ -23,7 +23,7 @@
'name' : 'Accounting Consistency Tests',
'version' : '1.0',
'author' : 'OpenERP',
- 'category' : 'Test accounting',
+ 'category' : 'Accounting & Finance',
'website': 'http://www.openerp.com',
'description': """
Asserts on accounting.
From d9c266eeb4be9d31a27055ae907e0788f054585c Mon Sep 17 00:00:00 2001
From: Cedric Snauwaert
Date: Tue, 20 Nov 2012 17:29:30 +0100
Subject: [PATCH 08/12] [FIX]some minor corrections and TODO comments
bzr revid: csn@openerp.com-20121120162930-hwj1ilshe99uvyau
---
addons/account_test/account_test.py | 6 +++---
addons/account_test/account_test_data.xml | 21 ++++++++++---------
addons/account_test/account_test_view.xml | 2 ++
.../report/account_test_report.py | 3 ++-
4 files changed, 18 insertions(+), 14 deletions(-)
diff --git a/addons/account_test/account_test.py b/addons/account_test/account_test.py
index 069ba6601e4..dc7442b1247 100644
--- a/addons/account_test/account_test.py
+++ b/addons/account_test/account_test.py
@@ -56,9 +56,9 @@ class accounting_assert_test(osv.osv):
}
_defaults = {
- 'code_exec': lambda *a: CODE_EXEC_DEFAULT,
- 'active': lambda *a: True,
- 'sequence': lambda *a: 10,
+ 'code_exec': CODE_EXEC_DEFAULT,
+ 'active': True,
+ 'sequence': 10,
}
accounting_assert_test()
diff --git a/addons/account_test/account_test_data.xml b/addons/account_test/account_test_data.xml
index 453d8184b9e..5b82fb82350 100644
--- a/addons/account_test/account_test_data.xml
+++ b/addons/account_test/account_test_data.xml
@@ -30,7 +30,7 @@ cr.execute("select coalesce(sum(debit),0) as debit_new_fyear,coalesce(sum(credit
rec = cr.dictfetchall()
cr.execute("select coalesce(sum(debit),0) as debit_last_fyear,coalesce(sum(credit),0) as credit_last_fyear from account_move_line where period_id in (select period_id from account_fiscalyear where state='done' order by id desc limit 1);")
rec2= cr.dictfetchall()
-if (rec2[0]['credit_last_fyear']-rec[0]['credit_new_fyear']!=0) or (rec2[0]['dedit_last_fyear']-rec[0]['dedit_new_fyear']!=0) :
+if (rec2[0]['credit_last_fyear']-rec[0]['credit_new_fyear']!=0) or (rec2[0]['debit_last_fyear']-rec[0]['debit_new_fyear']!=0) :
res.append(rec[0])
res.insert(0,_('* New fiscalyear debit and credit are:'))
res.append(rec2[0])
@@ -61,7 +61,7 @@ cr.execute(sql)
res = cr.dictfetchall()
if res:
res.insert(0,_('* The test failed for these movement lines:'))
- result = res
+result = res
]]>
@@ -80,7 +80,7 @@ for record in rec_ids :
res.append(', '.join(["Reconcile name: %(name)s, id=%(id)s " % r for r in reconcile_ids]))
result = res
if result:
- res.insert(0,_('* The test failed for these reconciled items(id/name):'))
+ result.insert(0,_('* The test failed for these reconciled items(id/name):'))
]]>
@@ -101,18 +101,19 @@ if result:
]]>
-
6
Test 5.2 : Reconcilied invoices and Payable/Receivable accounts
Check that reconciled account moves, that define Payable and Receivable accounts, are belonging to reconciled invoices
diff --git a/addons/account_test/account_test_view.xml b/addons/account_test/account_test_view.xml
index bcedebf0eeb..ea8572554ed 100644
--- a/addons/account_test/account_test_view.xml
+++ b/addons/account_test/account_test_view.xml
@@ -38,6 +38,8 @@
+
Example:
sql = 'select id, name, ref, date from account_move_line where account_id in
diff --git a/addons/account_test/report/account_test_report.py b/addons/account_test/report/account_test_report.py
index 66d5043412f..5c274773cd4 100644
--- a/addons/account_test/report/account_test_report.py
+++ b/addons/account_test/report/account_test_report.py
@@ -43,6 +43,7 @@ class report_assert_account(report_sxw.rml_parse):
def group(lst, col):
return dict((k, [v for v in itr]) for k, itr in groupby(sorted(lst, key=lambda x: x[col]), itemgetter(col)))
+ #TODO what is this method used for, name unclear and doesn't seem to be used
def sort_by_intified_num(a, b):
if a is None:
return -1
@@ -56,7 +57,6 @@ class report_assert_account(report_sxw.rml_parse):
reconciled_inv_ids = self.pool.get('account.invoice').search(self.cr, self.uid, [('reconciled','=',True)])
return reconciled_inv_ids
-
def get_parent(acc_id):
acc_an_id = self.pool.get('account.analytic.account').browse(self.cr, self.uid, acc_id).parent_id
while acc_an_id.parent_id:
@@ -89,6 +89,7 @@ class report_assert_account(report_sxw.rml_parse):
if not result:
result = [_('The test was passed successfully')]
+ #TODO: not sure this condition is needed, it is only a subcategory of the final else
elif all([isinstance(x, dict) for x in result]):
result = [', '.join(["%s: %s" % (k, v) for k, v in order_columns(rec, column_order)]) for rec in result]
else:
From 3b3c32f58f4900508b7dc730f0c1453c43bac84e Mon Sep 17 00:00:00 2001
From: Cedric Snauwaert
Date: Wed, 21 Nov 2012 15:06:43 +0100
Subject: [PATCH 09/12] [REF]some minor changes in code and add list of TODO in
commentaries
bzr revid: csn@openerp.com-20121121140643-5aary4uc9hp6xuk2
---
addons/account_test/account_test_data.xml | 21 ++++++++++-----------
addons/account_test/account_test_demo.xml | 1 +
addons/account_test/account_test_view.xml | 3 ++-
3 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/addons/account_test/account_test_data.xml b/addons/account_test/account_test_data.xml
index 5b82fb82350..415664b9653 100644
--- a/addons/account_test/account_test_data.xml
+++ b/addons/account_test/account_test_data.xml
@@ -11,31 +11,30 @@ sum(debit)-sum(credit) as balance
FROM account_move_line
"""
cr.execute(sql)
-result= cr.dictfetchall()
-cr.execute(sql)
result=[]
res= cr.dictfetchall()
-if res[0]['balance']!=0.0:
- result=res
- result.insert(0,_('* The difference of the balance is: '))
+if res[0]['balance']!=0.0 and res[0]['balance'] is not None:
+ result.append(_('* The difference of the balance is: '))
+ result.append(res)
]]>
2
Test 2: Opening a fiscal year
+
Check if the balance of the new opened fiscal year matches with last year's balance
-
diff --git a/addons/account_test/account_test_demo.xml b/addons/account_test/account_test_demo.xml
index d10182f61b8..a342040683b 100644
--- a/addons/account_test/account_test_demo.xml
+++ b/addons/account_test/account_test_demo.xml
@@ -3,6 +3,7 @@
+
Test 1
Test 1
diff --git a/addons/account_test/account_test_view.xml b/addons/account_test/account_test_view.xml
index ea8572554ed..848d04c7188 100644
--- a/addons/account_test/account_test_view.xml
+++ b/addons/account_test/account_test_view.xml
@@ -39,7 +39,8 @@
+ we won't see the result of the tests good or bad, give detail on function that can be used, like
+ 'group(a,b)' 'reconciled_inv()' 'get_parent(a)' 'now()' ... -->
Example:
sql = 'select id, name, ref, date from account_move_line where account_id in
From 7722389ade0b6c2b55c11f321b726c0d854075e3 Mon Sep 17 00:00:00 2001
From: "Bharat Devnani (OpenERP)"
Date: Tue, 27 Nov 2012 15:19:11 +0530
Subject: [PATCH 10/12] [IMP] improved description of consistency test, code
help and removed unused functions and condition
bzr revid: bde@tinyerp.com-20121127094911-rnidlbk1obfc48tm
---
addons/account_test/account_test_data.xml | 3 +--
addons/account_test/account_test_demo.xml | 6 +++---
addons/account_test/account_test_view.xml | 12 +++++++++---
addons/account_test/report/account_test_report.py | 14 --------------
4 files changed, 13 insertions(+), 22 deletions(-)
diff --git a/addons/account_test/account_test_data.xml b/addons/account_test/account_test_data.xml
index 415664b9653..2a23c1196f9 100644
--- a/addons/account_test/account_test_data.xml
+++ b/addons/account_test/account_test_data.xml
@@ -22,8 +22,7 @@ if res[0]['balance']!=0.0 and res[0]['balance'] is not None:
2
Test 2: Opening a fiscal year
-
- Check if the balance of the new opened fiscal year matches with last year's balance
+ Displays the debit and credit amount, of closed and newly created fiscal year, if the balance of current and newly created fiscal year mismatch
-
- Test 1
- Test 1
+ 11
+ Test 11: Consistency check between Account Move and Account Move Line
+ Checks id of 'account_move' = move_id of 'account_move_line', and state of 'account_move_line' is valid, and having sum(debit-credit) != 0
-
+You can write a query in order to create Consistency Test and you will get the result of the test
+in PDF format which can be accessed by Menu Reporting -> Accounting Tests, then select the test
+and print the report from Print button in header area.
+
+You can also use the following functions:
+
+get_parent(acc_id) : return parent id of analytic account(acc_id)
+reconciled_inv() : returns ids of records which are reconciled
+
Example:
sql = 'select id, name, ref, date from account_move_line where account_id in
(select id from account_account where type = 'view')'
diff --git a/addons/account_test/report/account_test_report.py b/addons/account_test/report/account_test_report.py
index 5c274773cd4..f8ba7a47f65 100644
--- a/addons/account_test/report/account_test_report.py
+++ b/addons/account_test/report/account_test_report.py
@@ -43,16 +43,6 @@ class report_assert_account(report_sxw.rml_parse):
def group(lst, col):
return dict((k, [v for v in itr]) for k, itr in groupby(sorted(lst, key=lambda x: x[col]), itemgetter(col)))
- #TODO what is this method used for, name unclear and doesn't seem to be used
- def sort_by_intified_num(a, b):
- if a is None:
- return -1
- elif b is None:
- return 1
- else:
- #if a is not None and b is not None:
- return cmp(int(a), int(b))
-
def reconciled_inv():
reconciled_inv_ids = self.pool.get('account.invoice').search(self.cr, self.uid, [('reconciled','=',True)])
return reconciled_inv_ids
@@ -86,12 +76,8 @@ class report_assert_account(report_sxw.rml_parse):
if not isinstance(result, (tuple, list, set)):
result = [result]
-
if not result:
result = [_('The test was passed successfully')]
- #TODO: not sure this condition is needed, it is only a subcategory of the final else
- elif all([isinstance(x, dict) for x in result]):
- result = [', '.join(["%s: %s" % (k, v) for k, v in order_columns(rec, column_order)]) for rec in result]
else:
def _format(a):
if isinstance(a, dict):
From 2d123cbdc6fc22aa56e2f5a53a4022e0f5aa8e8d Mon Sep 17 00:00:00 2001
From: Cedric Snauwaert
Date: Tue, 27 Nov 2012 15:03:59 +0100
Subject: [PATCH 11/12] [REF]remove some unused lines and add some tips message
bzr revid: csn@openerp.com-20121127140359-pvf025717k4m2wsu
---
addons/account_test/__openerp__.py | 7 +++---
addons/account_test/account_test_data.xml | 4 +--
addons/account_test/account_test_demo.xml | 30 -----------------------
addons/account_test/account_test_view.xml | 16 ++++++------
4 files changed, 13 insertions(+), 44 deletions(-)
delete mode 100644 addons/account_test/account_test_demo.xml
diff --git a/addons/account_test/__openerp__.py b/addons/account_test/__openerp__.py
index 3e98734fe72..cfd4007fed0 100644
--- a/addons/account_test/__openerp__.py
+++ b/addons/account_test/__openerp__.py
@@ -29,6 +29,10 @@
Asserts on accounting.
======================
With this module you can manually check consistencies and inconsistencies of accounting module from menu Reporting/Accounting/Accounting Tests.
+
+You can write a query in order to create Consistency Test and you will get the result of the test
+in PDF format which can be accessed by Menu Reporting -> Accounting Tests, then select the test
+and print the report from Print button in header area.
""",
'depends' : ['account'],
'data' : [
@@ -37,9 +41,6 @@ With this module you can manually check consistencies and inconsistencies of acc
'account_test_report.xml',
'account_test_data.xml',
],
- 'demo': [
- 'account_test_demo.xml',
- ],
'active': False,
'installable': True
}
diff --git a/addons/account_test/account_test_data.xml b/addons/account_test/account_test_data.xml
index 2a23c1196f9..4970bef6a0d 100644
--- a/addons/account_test/account_test_data.xml
+++ b/addons/account_test/account_test_data.xml
@@ -22,7 +22,7 @@ if res[0]['balance']!=0.0 and res[0]['balance'] is not None:
2
Test 2: Opening a fiscal year
- Displays the debit and credit amount, of closed and newly created fiscal year, if the balance of current and newly created fiscal year mismatch
+ Check if the balance of the new opened fiscal year matches with last year's balance
-
-
-
-
- 11
- Test 11: Consistency check between Account Move and Account Move Line
- Checks id of 'account_move' = move_id of 'account_move_line', and state of 'account_move_line' is valid, and having sum(debit-credit) != 0
-
- 0"""
-cr.execute(sql)
-result = cr.dictfetchall()
-]]>
-
-
-
-
diff --git a/addons/account_test/account_test_view.xml b/addons/account_test/account_test_view.xml
index 46f02d81d3b..1faca55c4d6 100644
--- a/addons/account_test/account_test_view.xml
+++ b/addons/account_test/account_test_view.xml
@@ -39,15 +39,15 @@
-You can write a query in order to create Consistency Test and you will get the result of the test
-in PDF format which can be accessed by Menu Reporting -> Accounting Tests, then select the test
-and print the report from Print button in header area.
+Code should always return a result value. If result is an empty list, it means that
+the test is succesful. Otherwise it will print what is inside result.
+Code must be python with correct indentation (if needed).
+Here is a list of function that you can use in your test :
+ - group(lst, col) :
+ - reconciled_inv() : return the list of all reconciled invoices
+ - get_parent(acc_id) : get parent analytical account
+ - now() : return current datetime
-You can also use the following functions:
-
-get_parent(acc_id) : return parent id of analytic account(acc_id)
-reconciled_inv() : returns ids of records which are reconciled
-
Example:
sql = 'select id, name, ref, date from account_move_line where account_id in
(select id from account_account where type = 'view')'
From d3e2629631a4ef7d428e125d3c40fd5965f75c20 Mon Sep 17 00:00:00 2001
From: "Quentin (OpenERP)"
Date: Thu, 6 Dec 2012 16:09:03 +0100
Subject: [PATCH 12/12] [REF] account_test: refactoring
bzr revid: qdp-launchpad@openerp.com-20121206150903-cl19tda7r00xt1u4
---
addons/account_test/account_test.py | 2 +-
addons/account_test/account_test_view.xml | 36 +++++++------
.../report/account_test_report.py | 50 ++++++++-----------
.../account_test/security/ir.model.access.csv | 2 +-
4 files changed, 45 insertions(+), 45 deletions(-)
diff --git a/addons/account_test/account_test.py b/addons/account_test/account_test.py
index dc7442b1247..bf925e8236a 100644
--- a/addons/account_test/account_test.py
+++ b/addons/account_test/account_test.py
@@ -50,7 +50,7 @@ class accounting_assert_test(osv.osv):
_columns = {
'name': fields.char('Test Name', size=256, required=True, select=True, translate=True),
'desc': fields.text('Test Description', select=True, translate=True),
- 'code_exec': fields.text('Python code or SQL query', required=True),
+ 'code_exec': fields.text('Python code', required=True),
'active': fields.boolean('Active'),
'sequence': fields.integer('Sequence'),
}
diff --git a/addons/account_test/account_test_view.xml b/addons/account_test/account_test_view.xml
index 1faca55c4d6..43a67edcc6c 100644
--- a/addons/account_test/account_test_view.xml
+++ b/addons/account_test/account_test_view.xml
@@ -13,7 +13,7 @@
-
+
Tests
accounting.assert.test
@@ -39,20 +39,26 @@
-Code should always return a result value. If result is an empty list, it means that
-the test is succesful. Otherwise it will print what is inside result.
-Code must be python with correct indentation (if needed).
-Here is a list of function that you can use in your test :
- - group(lst, col) :
- - reconciled_inv() : return the list of all reconciled invoices
- - get_parent(acc_id) : get parent analytical account
- - now() : return current datetime
+Code should always set a variable named `result` with the result of your test, that can be a list or
+a dictionary. If `result` is an empty list, it means that the test was succesful. Otherwise it will
+try to translate and print what is inside `result`.
+
+If the result of your test is a dictionary, you can set a variable named `column_order` to choose in
+what order you want to print `result`'s content.
+
+Should you need them, you can also use the following variables into your code:
+ * cr: cursor to the database
+ * uid: ID of the current user
+
+In any ways, the code must be legal python statements with correct indentation (if needed).
Example:
-sql = 'select id, name, ref, date from account_move_line where account_id in
-(select id from account_account where type = 'view')'
-cr.execute(sql)
-result = cr.dictfetchall()
+ sql = '''SELECT id, name, ref, date
+ FROM account_move_line
+ WHERE account_id IN (SELECT id FROM account_account WHERE type = 'view')
+ '''
+ cr.execute(sql)
+ result = cr.dictfetchall()
@@ -61,7 +67,7 @@ result = cr.dictfetchall()
-
+
Accounting Tests
accounting.assert.test
@@ -72,7 +78,7 @@ result = cr.dictfetchall()
-
+
diff --git a/addons/account_test/report/account_test_report.py b/addons/account_test/report/account_test_report.py
index f8ba7a47f65..ab683e18688 100644
--- a/addons/account_test/report/account_test_report.py
+++ b/addons/account_test/report/account_test_report.py
@@ -22,10 +22,7 @@
import datetime
import time
-import re
from report import report_sxw
-from itertools import groupby
-from operator import itemgetter
from tools.translate import _
#
# Use period and Journal for selection or resources
@@ -40,37 +37,34 @@ class report_assert_account(report_sxw.rml_parse):
})
def execute_code(self, code_exec):
- def group(lst, col):
- return dict((k, [v for v in itr]) for k, itr in groupby(sorted(lst, key=lambda x: x[col]), itemgetter(col)))
-
def reconciled_inv():
- reconciled_inv_ids = self.pool.get('account.invoice').search(self.cr, self.uid, [('reconciled','=',True)])
- return reconciled_inv_ids
-
- def get_parent(acc_id):
- acc_an_id = self.pool.get('account.analytic.account').browse(self.cr, self.uid, acc_id).parent_id
- while acc_an_id.parent_id:
- acc_an_id = acc_an_id.parent_id
- return acc_an_id.id
+ """
+ returns the list of invoices that are set as reconciled = True
+ """
+ return self.pool.get('account.invoice').search(self.cr, self.uid, [('reconciled','=',True)])
def order_columns(item, cols=None):
+ """
+ This function is used to display a dictionary as a string, with its columns in the order chosen.
+
+ :param item: dict
+ :param cols: list of field names
+ :returns: a list of tuples (fieldname: value) in a similar way that would dict.items() do except that the
+ returned values are following the order given by cols
+ :rtype: [(key, value)]
+ """
if cols is None:
cols = item.keys()
return [(col, item.get(col)) for col in cols if col in item.keys()]
localdict = {
'cr': self.cr,
- '_': _,
- 'reconciled_inv' : reconciled_inv,
- 'group' : group,
- 'get_parent' : get_parent,
- 'now': datetime.datetime.now(),
- 'result': None,
- 'column_order': None,
+ 'uid': self.uid,
+ 'reconciled_inv': reconciled_inv, #specific function used in different tests
+ 'result': None, #used to store the result of the test
+ 'column_order': None, #used to choose the display order of columns (in case you are returning a list of dict)
}
-
exec code_exec in localdict
-
result = localdict['result']
column_order = localdict.get('column_order', None)
@@ -79,12 +73,12 @@ class report_assert_account(report_sxw.rml_parse):
if not result:
result = [_('The test was passed successfully')]
else:
- def _format(a):
- if isinstance(a, dict):
- return ', '.join(["%s: %s" % (tup[0], tup[1]) for tup in order_columns(a, column_order)])
+ def _format(item):
+ if isinstance(item, dict):
+ return ', '.join(["%s: %s" % (tup[0], tup[1]) for tup in order_columns(item, column_order)])
else:
- return a
- result = [_format(rec) for rec in result]
+ return item
+ result = [_(_format(rec)) for rec in result]
return result
diff --git a/addons/account_test/security/ir.model.access.csv b/addons/account_test/security/ir.model.access.csv
index 95f2336f80b..cf7e93b6baa 100644
--- a/addons/account_test/security/ir.model.access.csv
+++ b/addons/account_test/security/ir.model.access.csv
@@ -1,3 +1,3 @@
"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_accounting_assert_test","accounting.assert.test","model_accounting_assert_test",base.group_system,1,1,1,1
+"access_accounting_assert_test","accounting.assert.test","model_accounting_assert_test",base.group_system,1,0,0,1
"access_accounting_assert_test_manager","accounting.assert.test","model_accounting_assert_test",account.group_account_manager,1,0,0,0