415664b965323bd6896f2b92b30e2c6bfa5f97bf
[odoo/odoo.git] / addons / account_test / account_test_data.xml
1 <?xml version="1.0"?>
2 <openerp>
3 <data>
4
5     <record model="accounting.assert.test" id="account_test_01">
6         <field name="sequence">1</field>
7         <field name="name">Test 1: General balance</field>
8         <field name="desc">Check the balance: Debit sum = Credit sum</field>
9         <field name="code_exec"><![CDATA[sql="""SELECT
10 sum(debit)-sum(credit) as balance
11 FROM  account_move_line 
12 """
13 cr.execute(sql)
14 result=[]
15 res= cr.dictfetchall()
16 if res[0]['balance']!=0.0 and res[0]['balance'] is not None:
17   result.append(_('* The difference of the balance is: '))
18   result.append(res)
19 ]]></field>
20     </record>
21
22     <record model="accounting.assert.test" id="account_test_02">
23         <field name="sequence">2</field>
24         <field name="name">Test 2: Opening a fiscal year</field>
25         <!--TODO : bad description of the test, does not really match what the SQL querry does, should adapt description name -->
26         <field name="desc">Check if the balance of the new opened fiscal year matches with last year's balance</field>
27         <field name="code_exec"><![CDATA[result = []
28 cr.execute("select coalesce(sum(debit),0) as debit_new_fyear,coalesce(sum(credit),0) as credit_new_fyear from account_move_line where period_id in (select id from account_period where state='draft' and special order by id desc limit 1);")
29 rec =  cr.dictfetchall()
30 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);")
31 rec2= cr.dictfetchall()
32 if (rec2[0]['credit_last_fyear']-rec[0]['credit_new_fyear']!=0) or (rec2[0]['debit_last_fyear']-rec[0]['debit_new_fyear']!=0) :
33    result.append(_('* New fiscalyear debit and credit are:'))
34    result.append(rec[0])
35    result.append(_('* Last year debit and credit are:'))
36    result.append(rec2[0])
37
38 ]]></field>
39     </record>
40
41     <record model="accounting.assert.test" id="account_test_03">
42         <field name="sequence">3</field>
43         <field name="name">Test 3: Movement lines</field>
44         <field name="desc">Check if movement lines are balanced and have the same date and period</field>
45         <field name="code_exec"><![CDATA[order_columns=['am_date','ml_date','am.period_id','ml.period_id','am.id']
46 sql="""SELECT
47   am.id as move_id,
48   sum(debit)-sum(credit) as balance,
49   am.period_id,
50   ml.period_id,
51   am.date as am_date,
52   ml.date as ml_date
53 FROM account_move am, account_move_line ml
54 WHERE
55   ml.move_id = am.id
56 GROUP BY am.name, am.id, am.state, am.period_id, ml.period_id,am.period_id, ml.period_id,am.date, ml.date
57 HAVING abs(sum(ml.debit-ml.credit)) <> 0 or am.period_id!=ml.period_id or (am.date!=ml.date)
58 """
59 cr.execute(sql)
60 res = cr.dictfetchall()
61 if res:
62     res.insert(0,_('* The test failed for these movement lines:'))
63 result = res
64
65 ]]></field>
66     </record>
67
68     <record model="accounting.assert.test" id="account_test_04">
69         <field name="sequence">4</field>
70         <field name="name">Test 4: Totally reconciled mouvements</field>
71         <field name="desc">Check if the totally reconciled movements are balanced</field>
72         <field name="code_exec"><![CDATA[res = []
73 cr.execute("SELECT distinct reconcile_id from account_move_line where reconcile_id is not null")
74 rec_ids = cr.dictfetchall()
75 for record in rec_ids :
76   cr.execute("SELECT distinct r.name,r.id from account_journal j,account_period p, account_move_reconcile r,account_move m, account_move_line ml where m.journal_id=j.id and m.period_id=p.id and ml.reconcile_id=%s and ml.move_id=m.id and ml.reconcile_id=r.id group by r.id,r.name having sum(ml.debit)-sum(ml.credit)<>0", (record['reconcile_id'],))
77   reconcile_ids=cr.dictfetchall()
78   if reconcile_ids:
79     res.append(', '.join(["Reconcile name: %(name)s, id=%(id)s " % r for r in reconcile_ids]))
80 result = res
81 if result:
82     result.insert(0,_('* The test failed for these reconciled items(id/name):'))
83 ]]></field>
84     </record>
85
86     <record model="accounting.assert.test" id="account_test_05">
87         <field name="sequence">5</field>
88         <field name="name">Test 5.1 : Payable and Receivable accountant lines of reconciled invoices</field>
89         <field name="desc">Check that reconciled invoice for Sales/Purchases has reconciled entries for Payable and Receivable Accounts</field>
90         <field name="code_exec"><![CDATA[res = []
91 cr.execute("SELECT distinct inv.number,inv.id from account_invoice inv, account_move m, account_move_line ml, account_account a where m.id=ml.move_id and ml.account_id=a.id and a.type in ('receivable','payable') and inv.move_id=m.id and ml.reconcile_id is not null;")
92 records= cr.dictfetchall()
93 rec = [r['id'] for r in records]
94 res = reconciled_inv()
95 invoices = set(rec).difference(set(res))
96 groups = group(list(records),'number')
97 result = [rec for rec in records if rec['id'] in invoices]
98 if result:
99     result.insert(0,_('* Invoices that need to be checked: '))
100 ]]></field>
101     </record>
102
103     <record model="accounting.assert.test" id="account_test_05_2">
104         <field name="sequence">6</field>
105         <field name="name">Test 5.2 : Reconcilied invoices and Payable/Receivable accounts</field>
106         <field name="desc">Check that reconciled account moves, that define Payable and Receivable accounts, are belonging to reconciled invoices</field>
107         <field name="code_exec"><![CDATA[res = reconciled_inv()
108 result=[]
109 if res:
110     cr.execute("SELECT distinct inv.number,inv.id from account_invoice inv, account_move_line ml, account_account a, account_move m where m.id=ml.move_id and inv.move_id=m.id and inv.id=inv.move_id and ml.reconcile_id is null and a.type in ('receivable','payable') and ml.account_id=a.id and inv.id in %s",(tuple(res),))
111     records = cr.dictfetchall()
112     groups = group(list(records),'number')
113     result = [rec for rec in records]
114     if result:
115         result.insert(0,_('* Invoices that need to be checked: '))
116 ]]></field>
117     </record>
118
119     <record model="accounting.assert.test" id="account_test_06">
120         <field name="sequence">7</field>
121         <field name="name">Test 6 : Invoices status</field>
122         <field name="desc">Check that paid/reconciled invoices are not in 'Open' state</field>
123         <field name="code_exec"><![CDATA[
124 res = []
125 column_order = ['number','id','name','state']
126 if reconciled_inv():
127   cr.execute("select inv.name,inv.state,inv.id,inv.number from account_invoice inv where inv.state!='paid' and id in %s", (tuple(reconciled_inv()),))
128   res = cr.dictfetchall()
129 result = res
130 if result:
131     result.insert(0,_('* Invoices that need to be checked: '))
132 ]]></field>
133     </record>
134
135
136     <record model="accounting.assert.test" id="account_test_06_1">
137         <field name="sequence">8</field>
138         <field name="name">Test 7: « View  » account type</field>
139         <field name="desc">Check that there's no move for any account with « View » account type</field>
140         <field name="code_exec"><![CDATA[column_order=['name','ref','id','date']
141 sql = "select id, name, ref, date from account_move_line where account_id in (select id from account_account where type = 'view')"
142 cr.execute(sql)
143 result = cr.dictfetchall()
144 if result:
145     result.insert(0,_('* Movement lines that need to be checked: '))
146 ]]></field>
147     </record>
148
149     <record model="accounting.assert.test" id="account_test_07">
150         <field name="sequence">9</field>
151         <field name="name">Test 8 : Closing balance on bank statements</field>
152         <field name="desc">Check on bank statement that the Closing Balance = Starting Balance + sum of statement lines</field>
153         <field name="code_exec"><![CDATA[column_order = ['name','difference']
154 cr.execute("SELECT s.balance_start+sum(m.amount)-s.balance_end_real as difference, s.name from account_bank_statement s inner join account_bank_statement_line m on m.statement_id=s.id group by s.id, s.balance_start, s.balance_end_real,s.name having abs(s.balance_start+sum(m.amount)-s.balance_end_real) > 0.000000001;")
155 result = cr.dictfetchall()
156 if result:
157     result.insert(0,_('* Unbalanced bank statement that need to be checked: '))
158 ]]></field>
159     </record>
160
161     <record model="accounting.assert.test" id="account_test_08">
162         <field name="sequence">10</field>
163         <field name="name">Test 9 : Accounts and partners on account moves</field>
164         <field name="desc">Check that general accounts and partners on account moves are active</field>
165         <field name="code_exec"><![CDATA[column_order=['partner_name','partner_active','account_name','move_line_id','period']
166 res = []
167 cr.execute("SELECT l.id as move_line_id,a.name as account_name,a.code as account_code,r.name as partner_name,r.active as partner_active,p.name as period from account_period p,res_partner r, account_account a,account_move_line l where l.account_id=a.id and l.partner_id=r.id and (not r.active or not a.active) and l.period_id=p.id")
168 res = cr.dictfetchall()
169 result = res
170 if result:
171   result.insert(0,_('* Here is the list of inactive partners and movement lines that are not correct: '))
172 ]]></field>
173     </record>
174 </data>
175 </openerp>