Merge lp:~julie-w/unifield-server/US-2644 into lp:unifield-server

Proposed by jftempo
Status: Merged
Merged at revision: 5151
Proposed branch: lp:~julie-w/unifield-server/US-2644
Merge into: lp:unifield-server
Diff against target: 978 lines (+480/-68)
11 files modified
bin/addons/account_override/__openerp__.py (+1/-0)
bin/addons/account_override/account_view.xml (+0/-10)
bin/addons/account_override/period.py (+42/-0)
bin/addons/account_override/wizard/__init__.py (+1/-0)
bin/addons/account_override/wizard/integrity_finance_wizard.py (+121/-0)
bin/addons/account_override/wizard/integrity_finance_wizard_view.xml (+63/-0)
bin/addons/board/queries_finance.py (+44/-32)
bin/addons/board/report/integrity.mako (+14/-6)
bin/addons/board/report/integrity_finance.py (+133/-2)
bin/addons/msf_profile/i18n/fr_MF.po (+60/-17)
bin/service/web_services.py (+1/-1)
To merge this branch: bzr merge lp:~julie-w/unifield-server/US-2644
Reviewer Review Type Date Requested Status
UniField Reviewer Team Pending
Review via email: mp+358433@code.launchpad.net
To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'bin/addons/account_override/__openerp__.py'
--- bin/addons/account_override/__openerp__.py 2016-02-04 16:43:13 +0000
+++ bin/addons/account_override/__openerp__.py 2018-11-07 14:15:37 +0000
@@ -43,6 +43,7 @@
43 'wizard/account_chart.xml',43 'wizard/account_chart.xml',
44 'wizard/import_invoice.xml',44 'wizard/import_invoice.xml',
45 'wizard/split_invoice.xml',45 'wizard/split_invoice.xml',
46 'wizard/integrity_finance_wizard_view.xml',
46 'attachment_view.xml'47 'attachment_view.xml'
47 ],48 ],
48 'test': [],49 'test': [],
4950
=== modified file 'bin/addons/account_override/account_view.xml'
--- bin/addons/account_override/account_view.xml 2018-09-06 12:58:16 +0000
+++ bin/addons/account_override/account_view.xml 2018-11-07 14:15:37 +0000
@@ -206,15 +206,5 @@
206 menu="False"206 menu="False"
207 />207 />
208208
209
210 <menuitem
211 name="Entries Data Integrity"
212 action="board.integrity_finance"
213 id="menu_integrity_finance"
214 parent="account.menu_finance_generic_reporting"
215 sequence="100"
216 type="report.xml"
217 />
218
219 </data>209 </data>
220</openerp>210</openerp>
221211
=== modified file 'bin/addons/account_override/period.py'
--- bin/addons/account_override/period.py 2017-12-01 16:19:33 +0000
+++ bin/addons/account_override/period.py 2018-11-07 14:15:37 +0000
@@ -22,6 +22,8 @@
22##############################################################################22##############################################################################
2323
24from osv import osv24from osv import osv
25from tools.translate import _
26
2527
26def get_period_from_date(self, cr, uid, date=False, context=None):28def get_period_from_date(self, cr, uid, date=False, context=None):
27 """29 """
@@ -100,6 +102,42 @@
100 period_id = period_id and get_next_period_id(self, cr, uid, period_id, context=context)102 period_id = period_id and get_next_period_id(self, cr, uid, period_id, context=context)
101 return period_id or False103 return period_id or False
102104
105
106def get_period_range(self, cr, uid, period_from_id, period_to_id, context=None):
107 """
108 Returns the ids of all the periods included between 2 other periods.
109 Special periods 13 to 16 are included, period 0 is excluded.
110 """
111 if context is None:
112 context = {}
113 field_list = ['number', 'fiscalyear_id', 'date_start']
114 initial_period = self.browse(cr, uid, period_from_id, fields_to_fetch=field_list, context=context)
115 final_period = self.browse(cr, uid, period_to_id, fields_to_fetch=field_list, context=context)
116 initial_fy_id = initial_period.fiscalyear_id.id
117 initial_number = initial_period.number
118 final_fy_id = final_period.fiscalyear_id.id
119 final_number = final_period.number
120 same_fy = initial_fy_id == final_fy_id
121 if (final_period.date_start < initial_period.date_start) or \
122 (same_fy and final_period.number < initial_period.number): # e.g. Period 13 2018 precedes Period 14 2018
123 raise osv.except_osv(_('Error'), _("The End period can't precede the Start period."))
124 if same_fy: # all the periods are within the same Fiscal Year
125 period_dom = [
126 ('number', '!=', 0),
127 ('number', '>=', initial_number),
128 ('number', '<=', final_number),
129 ('fiscalyear_id', '=', initial_fy_id)]
130 else:
131 # ex: from Nov. 2018 to Jan. 2019 => Nov 2018 / Dec 2018 / Periods 13->16 2018 / Jan 2019
132 period_dom = [
133 ('number', '!=', 0),
134 '|',
135 '&', ('number', '>=', initial_number), ('fiscalyear_id', '=', initial_fy_id),
136 '&', ('number', '<=', final_number), ('fiscalyear_id', '=', final_fy_id)]
137 period_ids = self.search(cr, uid, period_dom, order='id', context=context)
138 return period_ids
139
140
103class account_period(osv.osv):141class account_period(osv.osv):
104 _name = 'account.period'142 _name = 'account.period'
105 _inherit = 'account.period'143 _inherit = 'account.period'
@@ -116,5 +154,9 @@
116 def get_next_period_id_at_index(self, cr, uid, period_id, index, context=None):154 def get_next_period_id_at_index(self, cr, uid, period_id, index, context=None):
117 return get_next_period_id_at_index(self, cr, uid, period_id, index, context)155 return get_next_period_id_at_index(self, cr, uid, period_id, index, context)
118156
157 def get_period_range(self, cr, uid, period_from_id, period_to_id, context=None):
158 return get_period_range(self, cr, uid, period_from_id, period_to_id, context=context)
159
160
119account_period()161account_period()
120# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:162# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
121163
=== modified file 'bin/addons/account_override/wizard/__init__.py'
--- bin/addons/account_override/wizard/__init__.py 2017-08-02 09:28:06 +0000
+++ bin/addons/account_override/wizard/__init__.py 2018-11-07 14:15:37 +0000
@@ -2,3 +2,4 @@
2import split_invoice2import split_invoice
3import import_invoice3import import_invoice
4import report_paid_invoices4import report_paid_invoices
5import integrity_finance_wizard
56
=== added file 'bin/addons/account_override/wizard/integrity_finance_wizard.py'
--- bin/addons/account_override/wizard/integrity_finance_wizard.py 1970-01-01 00:00:00 +0000
+++ bin/addons/account_override/wizard/integrity_finance_wizard.py 2018-11-07 14:15:37 +0000
@@ -0,0 +1,121 @@
1# -*- coding: utf-8 -*-
2##############################################################################
3#
4# OpenERP, Open Source Management Solution
5# Copyright (C) 2018 TeMPO Consulting, MSF. All Rights Reserved
6#
7# This program is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Affero General Public License as
9# published by the Free Software Foundation, either version 3 of the
10# License, or (at your option) any later version.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Affero General Public License for more details.
16#
17# You should have received a copy of the GNU Affero General Public License
18# along with this program. If not, see <http://www.gnu.org/licenses/>.
19#
20##############################################################################
21
22from osv import fields
23from osv import osv
24from tools.translate import _
25
26from datetime import datetime
27
28
29class integrity_finance_wizard(osv.osv_memory):
30 _name = 'integrity.finance.wizard'
31
32 _columns = {
33 'fiscalyear_id': fields.many2one('account.fiscalyear', 'Fiscal year'),
34 'filter': fields.selection([
35 ('filter_no', 'No Filters'),
36 ('filter_date_doc', 'Document Date'),
37 ('filter_date', 'Posting Date'),
38 ('filter_period', 'Period')
39 ], "Filter by", required=True),
40 'period_from': fields.many2one('account.period', 'Start period'),
41 'period_to': fields.many2one('account.period', 'End period'),
42 'date_from': fields.date("Start date"),
43 'date_to': fields.date("End date"),
44 'instance_ids': fields.many2many('msf.instance', 'integrity_finance_wizard_instance_rel',
45 'wizard_id', 'instance_id',
46 string='Proprietary Instances'),
47 }
48
49 _defaults = {
50 'filter': 'filter_no',
51 }
52
53 def onchange_filter(self, cr, uid, ids, filter, context=None):
54 """
55 Adapts the date/period filter according to the selection made in "Filter by"
56 """
57 res = {}
58 if filter == 'filter_no':
59 res['value'] = {'period_from': False, 'period_to': False, 'date_from': False, 'date_to': False}
60 elif filter in ('filter_date', 'filter_date_doc', ):
61 res['value'] = {'period_from': False, 'period_to': False}
62 elif filter == 'filter_period':
63 res['value'] = {'date_from': False, 'date_to': False}
64 return res
65
66 def onchange_fiscalyear_id(self, cr, uid, ids, fiscalyear_id, context=None):
67 """
68 (Only) if a FY is selected: resets the periods selected and restricts their domain to within the FY
69 """
70 res = {}
71 if fiscalyear_id:
72 res = {
73 'value': {
74 'period_from': False,
75 'period_to': False,
76 },
77 'domain': {
78 'period_from': [('fiscalyear_id', '=', fiscalyear_id)],
79 'period_to': [('fiscalyear_id', '=', fiscalyear_id)],
80 }
81 }
82 return res
83
84 def print_integrity_finance_report(self, cr, uid, ids, context=None):
85 """
86 Prints the "Entries Data Integrity" report
87 """
88 if context is None:
89 context = {}
90 if isinstance(ids, (int, long)):
91 ids = [ids]
92 user_obj = self.pool.get('res.users')
93 wiz = self.browse(cr, uid, ids[0], context=context)
94 data = {
95 'form': {},
96 'context': context,
97 }
98 # store the selected criteria
99 data['form'].update({
100 'fiscalyear_id': wiz.fiscalyear_id and wiz.fiscalyear_id.id or False,
101 'filter': wiz.filter,
102 'period_from': wiz.period_from and wiz.period_from.id or False,
103 'period_to': wiz.period_to and wiz.period_to.id or False,
104 'date_from': wiz.date_from or False,
105 'date_to': wiz.date_to or False,
106 'instance_ids': wiz.instance_ids and [inst.id for inst in wiz.instance_ids],
107 })
108 company = user_obj.browse(cr, uid, uid, fields_to_fetch=['company_id'], context=context).company_id
109 current_instance = company.instance_id and company.instance_id.code or ''
110 current_date = datetime.today().strftime('%Y%m%d')
111 data['target_filename'] = "%s %s %s" % (_('Entries Data Integrity'), current_instance, current_date)
112 return {
113 'type': 'ir.actions.report.xml',
114 'report_name': 'integrity.finance',
115 'datas': data,
116 'context': context,
117 }
118
119
120integrity_finance_wizard()
121# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
0122
=== added file 'bin/addons/account_override/wizard/integrity_finance_wizard_view.xml'
--- bin/addons/account_override/wizard/integrity_finance_wizard_view.xml 1970-01-01 00:00:00 +0000
+++ bin/addons/account_override/wizard/integrity_finance_wizard_view.xml 2018-11-07 14:15:37 +0000
@@ -0,0 +1,63 @@
1<?xml version="1.0" encoding="utf-8"?>
2<openerp>
3 <data>
4
5 <!-- Entries Data Integrity - Wizard -->
6 <record id="integrity_finance_wizard_view" model="ir.ui.view">
7 <field name="name">Entries Data Integrity</field>
8 <field name="model">integrity.finance.wizard</field>
9 <field name="type">form</field>
10 <field name="arch" type="xml">
11 <form>
12 <field name="instance_ids" domain="[('instance_to_display_ids', '=', True)]">
13 <tree noteditable="1">
14 <field name="code"/>
15 <field name="name"/>
16 </tree>
17 </field>
18 <field name="fiscalyear_id" on_change="onchange_fiscalyear_id(fiscalyear_id)"/>
19 <notebook tabpos="up" colspan="4">
20 <page string="Filters" name="filters">
21 <field name="filter" on_change="onchange_filter(filter)" colspan="4"/>
22 <separator string="Dates" colspan="4"/>
23 <field name="date_from" attrs="{'readonly': [('filter', 'not in', ('filter_date', 'filter_date_doc'))],
24 'required': [('filter', 'in', ('filter_date', 'filter_date_doc'))]}" colspan="4"/>
25 <field name="date_to" attrs="{'readonly': [('filter', 'not in', ('filter_date', 'filter_date_doc'))],
26 'required': [('filter', 'in', ('filter_date', 'filter_date_doc'))]}" colspan="4"/>
27 <separator string="Periods" colspan="4"/>
28 <field name="period_from"
29 attrs="{'readonly': [('filter', '!=', 'filter_period')],
30 'required':[('filter', '=', 'filter_period')]}" colspan="4"/>
31 <field name="period_to"
32 attrs="{'readonly': [('filter', '!=', 'filter_period')],
33 'required':[('filter', '=', 'filter_period')]}" colspan="4"/>
34 </page>
35 </notebook>
36 <group colspan="6" col="4">
37 <button icon="gtk-cancel" string="Cancel" special="cancel" colspan="2"/>
38 <button icon="gtk-print" string="Print" name="print_integrity_finance_report" type="object"
39 default_focus="1" colspan="2"/>
40 </group>
41 </form>
42 </field>
43 </record>
44
45 <!-- Entries Data Integrity - Menu Entry -->
46 <record id="action_integrity_finance_report" model="ir.actions.act_window">
47 <field name="name">Entries Data Integrity</field>
48 <field name="res_model">integrity.finance.wizard</field>
49 <field name="type">ir.actions.act_window</field>
50 <field name="view_type">form</field>
51 <field name="view_mode">form</field>
52 <field name="view_id" ref="integrity_finance_wizard_view"/>
53 <field name="target">new</field>
54 </record>
55 <menuitem
56 name="Entries Data Integrity"
57 action="action_integrity_finance_report"
58 id="menu_integrity_finance_report"
59 parent="account.menu_finance_generic_reporting"
60 sequence="100"/>
61
62 </data>
63</openerp>
064
=== modified file 'bin/addons/board/queries_finance.py'
--- bin/addons/board/queries_finance.py 2018-02-19 16:13:36 +0000
+++ bin/addons/board/queries_finance.py 2018-11-07 14:15:37 +0000
@@ -7,6 +7,7 @@
77
8queries = [8queries = [
9 {9 {
10 'ref': 'ji_unbalanced_booking',
10 'title': _('Journal Items that are not balanced in booking currency'),11 'title': _('Journal Items that are not balanced in booking currency'),
11 'headers': [_('Period'), _('Entry Sequence'), _('Difference')],12 'headers': [_('Period'), _('Entry Sequence'), _('Difference')],
12 'query': """select p.name period, m.name, sum(l.credit_currency-l.debit_currency) difference13 'query': """select p.name period, m.name, sum(l.credit_currency-l.debit_currency) difference
@@ -20,12 +21,14 @@
20m.state='posted' and21m.state='posted' and
21m.journal_id = j.id and22m.journal_id = j.id and
22j.type != 'system'23j.type != 'system'
24%s
23group by p.name, m.name, l.move_id, p.date_start25group by p.name, m.name, l.move_id, p.date_start
24having abs(sum(l.credit_currency-l.debit_currency)) > 0.0000126having abs(sum(l.credit_currency-l.debit_currency)) > 0.00001
25order by p.date_start, m.name27order by p.date_start, m.name;
26"""28"""
27 },29 },
28 {30 {
31 'ref': 'ji_unbalanced_fctal',
29 'title': _('Journal Items that are not balanced in functional currency'),32 'title': _('Journal Items that are not balanced in functional currency'),
30 'headers': [_('Period'), _('Entry Sequence'), _('Difference')],33 'headers': [_('Period'), _('Entry Sequence'), _('Difference')],
31 'query': """select p.name period, m.name, sum(l.credit-l.debit) difference34 'query': """select p.name period, m.name, sum(l.credit-l.debit) difference
@@ -39,82 +42,91 @@
39m.state='posted' and42m.state='posted' and
40m.journal_id = j.id and43m.journal_id = j.id and
41j.type != 'system'44j.type != 'system'
45%s
42group by p.name, m.name, l.move_id, p.date_start46group by p.name, m.name, l.move_id, p.date_start
43having abs(sum(l.credit-l.debit)) > 0.0000147having abs(sum(l.credit-l.debit)) > 0.00001
44order by p.date_start, m.name"""48order by p.date_start, m.name;"""
45 },49 },
46 {50 {
51 'ref': 'mismatch_ji_aji_booking',
47 'title': _('P&L Journal Items vs Analytic Journal Items mismatch in booking currency (except FXA and REV)'),52 'title': _('P&L Journal Items vs Analytic Journal Items mismatch in booking currency (except FXA and REV)'),
48 'headers': [_('Period'), _('Entry Sequence'), _('Account Code'), _('JI Book. Amount'), _('AJI Book. Amount'), _('Difference')],53 'headers': [_('Period'), _('Entry Sequence'), _('Account Code'), _('JI Book. Amount'), _('AJI Book. Amount'), _('Difference')],
49 'query': """SELECT54 'query': """SELECT
50account_period.name,55account_period.name,
51account_move.name,56m.name,
52account_account.code,57account_account.code,
53avg(account_move_line.credit_currency-account_move_line.debit_currency) JI,58avg(l.credit_currency - l.debit_currency) JI,
54sum(COALESCE(account_analytic_line.amount_currency, 0)) AJI,59sum(COALESCE(account_analytic_line.amount_currency, 0)) AJI,
55abs(abs(avg(account_move_line.debit_currency-account_move_line.credit_currency)) - abs(sum(COALESCE(account_analytic_line.amount_currency, 0)))) difference60abs(abs(avg(l.debit_currency - l.credit_currency)) - abs(sum(COALESCE(account_analytic_line.amount_currency, 0)))) difference
56FROM61FROM
57account_move_line62account_move_line l
58JOIN account_move ON account_move.id = account_move_line.move_id63JOIN account_move m ON m.id = l.move_id
59JOIN account_account ON account_account.id = account_move_line.account_id64JOIN account_account ON account_account.id = l.account_id
60JOIN account_journal ON account_journal.id = account_move.journal_id65JOIN account_journal ON account_journal.id = m.journal_id
61JOIN account_period ON account_move.period_id = account_period.id66JOIN account_period ON m.period_id = account_period.id
62LEFT JOIN account_analytic_line on account_analytic_line.move_id = account_move_line.id67LEFT JOIN account_analytic_line on account_analytic_line.move_id = l.id
63LEFT JOIN account_analytic_account ON account_analytic_line.account_id = account_analytic_account.id68LEFT JOIN account_analytic_account ON account_analytic_line.account_id = account_analytic_account.id
64WHERE69WHERE
65account_journal.type not in ('system', 'revaluation', 'cur_adj') AND70account_journal.type not in ('system', 'revaluation', 'cur_adj') AND
66account_account.is_analytic_addicted = 't' AND71account_account.is_analytic_addicted = 't' AND
67account_analytic_account.category not in ('FREE1', 'FREE2')72account_analytic_account.category not in ('FREE1', 'FREE2')
68GROUP BY account_period.name, account_move.name, account_move_line.id, account_period.date_start, account_account.code73%s
69HAVING abs(abs(avg(account_move_line.debit_currency-account_move_line.credit_currency)) - abs(sum(COALESCE(account_analytic_line.amount_currency, 0)))) > 0.0000174GROUP BY account_period.name, m.name, l.id, account_period.date_start, account_account.code
70ORDER BY account_period.date_start, account_move.name"""75HAVING abs(abs(avg(l.debit_currency - l.credit_currency)) - abs(sum(COALESCE(account_analytic_line.amount_currency, 0)))) > 0.00001
76ORDER BY account_period.date_start, m.name;"""
71 },77 },
72 {78 {
79 'ref': 'mismatch_ji_aji_fctal',
73 'title': _('P&L Journal Items vs Analytic Journal Items mismatch in functional currency (FXA and REV only)'),80 'title': _('P&L Journal Items vs Analytic Journal Items mismatch in functional currency (FXA and REV only)'),
74 'headers': [_('Period'), _('Entry Sequence'), _('Account Code'), _('JI Func. Amount'), _('AJI Func. Amount'), _('Difference')],81 'headers': [_('Period'), _('Entry Sequence'), _('Account Code'), _('JI Func. Amount'), _('AJI Func. Amount'), _('Difference')],
75 'query': """SELECT82 'query': """SELECT
76account_period.name,83account_period.name,
77account_move.name,84m.name,
78account_account.code,85account_account.code,
79avg(account_move_line.credit-account_move_line.debit) JI,86avg(l.credit - l.debit) JI,
80sum(COALESCE(account_analytic_line.amount, 0)) AJI,87sum(COALESCE(account_analytic_line.amount, 0)) AJI,
81abs(avg(account_move_line.credit-account_move_line.debit) - sum(COALESCE(account_analytic_line.amount, 0))) difference88abs(avg(l.credit - l.debit) - sum(COALESCE(account_analytic_line.amount, 0))) difference
82FROM89FROM
83account_move_line90account_move_line l
84JOIN account_move ON account_move.id = account_move_line.move_id91JOIN account_move m ON m.id = l.move_id
85JOIN account_account ON account_account.id = account_move_line.account_id92JOIN account_account ON account_account.id = l.account_id
86JOIN account_journal ON account_move.journal_id = account_journal.id93JOIN account_journal ON m.journal_id = account_journal.id
87JOIN account_period ON account_period.id = account_move.period_id94JOIN account_period ON account_period.id = m.period_id
88LEFT JOIN account_analytic_line ON account_analytic_line.move_id = account_move_line.id95LEFT JOIN account_analytic_line ON account_analytic_line.move_id = l.id
89LEFT JOIN account_analytic_account ON account_analytic_line.account_id = account_analytic_account.id96LEFT JOIN account_analytic_account ON account_analytic_line.account_id = account_analytic_account.id
90WHERE97WHERE
91account_journal.type in ('revaluation', 'cur_adj') AND98account_journal.type in ('revaluation', 'cur_adj') AND
92account_account.is_analytic_addicted = 't' AND99account_account.is_analytic_addicted = 't' AND
93account_analytic_account.category not in ('FREE1', 'FREE2')100account_analytic_account.category not in ('FREE1', 'FREE2')
94GROUP BY account_period.name, account_move.name, account_move_line.id, account_period.date_start, account_account.code101%s
95HAVING abs(avg(account_move_line.credit-account_move_line.debit) - sum(COALESCE(account_analytic_line.amount, 0))) > 0.00001102GROUP BY account_period.name, m.name, l.id, account_period.date_start, account_account.code
96order by account_period.date_start, account_move.name"""103HAVING abs(avg(l.credit - l.debit) - sum(COALESCE(account_analytic_line.amount, 0))) > 0.00001
104order by account_period.date_start, m.name;"""
97 },105 },
98 {106 {
107 'ref': 'unbalanced_rec_fctal',
99 'title': _('Unbalanced reconciliations in functional currency'),108 'title': _('Unbalanced reconciliations in functional currency'),
100 'headers': [_('Reconcile number'), _('Difference')],109 'headers': [_('Reconcile number'), _('Reconcile date'), _('Difference')],
101 'query': """SELECT rec.name, sum(l.credit-l.debit)110 'query': """SELECT rec.name, 'rec_date', sum(l.credit-l.debit)
102from account_move_line l, account_move_reconcile rec111from account_move_line l, account_move_reconcile rec
103where l.reconcile_id=rec.id112where l.reconcile_id=rec.id
113%s
104group by rec.id, rec.name114group by rec.id, rec.name
105having(abs(sum(l.credit-l.debit)) > 0.0001)115having(abs(sum(l.credit-l.debit)) > 0.0001)
106order by rec.name116order by rec.name;
107"""117"""
108 },118 },
109 {119 {
120 'ref': 'unbalanced_rec_booking',
110 'title': _('Unbalanced reconciliations in booking currency'),121 'title': _('Unbalanced reconciliations in booking currency'),
111 'headers': [_('Reconcile number'), _('Difference')],122 'headers': [_('Reconcile number'), _('Reconcile date'), _('Difference')],
112 'query': """SELECT rec.name, sum(l.credit_currency-l.debit_currency)123 'query': """SELECT rec.name, 'rec_date', sum(l.credit_currency-l.debit_currency)
113from account_move_line l, account_move_reconcile rec124from account_move_line l, account_move_reconcile rec
114where l.reconcile_id=rec.id125where l.reconcile_id=rec.id
126%s
115group by rec.id, rec.name127group by rec.id, rec.name
116having(abs(sum(l.credit_currency-l.debit_currency)) > 0.0001 and count(distinct(l.currency_id))=1)128having(abs(sum(l.credit_currency-l.debit_currency)) > 0.0001 and count(distinct(l.currency_id))=1)
117order by rec.name129order by rec.name;
118"""130"""
119 },131 },
120]132]
121133
=== modified file 'bin/addons/board/report/integrity.mako'
--- bin/addons/board/report/integrity.mako 2016-11-09 16:46:03 +0000
+++ bin/addons/board/report/integrity.mako 2018-11-07 14:15:37 +0000
@@ -93,16 +93,24 @@
93<Cell ss:StyleID="ssH"><Data ss:Type="String">${_t(header)|x}</Data></Cell>93<Cell ss:StyleID="ssH"><Data ss:Type="String">${_t(header)|x}</Data></Cell>
94% endfor94% endfor
95</Row>95</Row>
96% for result in get_results(check.get('query')):96% for result in get_results(check.get('query'), check.get('ref')):
97<Row>97<Row>
98 % for cell in result:98 % for cell in result:
99 <Cell ss:StyleID="ssBorder">99 % if cell == 'rec_date':
100 % if isinstance(cell, (int, float, long)):100 <%
101 <Data ss:Type="Number">${cell}</Data>101 reconcile_ref = result[0]
102 reconcile_date = get_reconcile_date(reconcile_ref)
103 %>
104 % if reconcile_date:
105 <Cell ss:StyleID="sShortDate"><Data ss:Type="DateTime">${reconcile_date|n}T00:00:00.000</Data></Cell>
106 % else:
107 <Cell ss:StyleID="ssBorder"></Cell>
108 % endif
109 % elif isinstance(cell, (int, float, long)):
110 <Cell ss:StyleID="ssBorder"><Data ss:Type="Number">${cell}</Data></Cell>
102 % else:111 % else:
103 <Data ss:Type="String">${cell|x}</Data>112 <Cell ss:StyleID="ssBorder"><Data ss:Type="String">${cell|x}</Data></Cell>
104 % endif113 % endif
105 </Cell>
106 %endfor114 %endfor
107</Row>115</Row>
108% endfor116% endfor
109117
=== modified file 'bin/addons/board/report/integrity_finance.py'
--- bin/addons/board/report/integrity_finance.py 2016-11-02 09:29:48 +0000
+++ bin/addons/board/report/integrity_finance.py 2018-11-07 14:15:37 +0000
@@ -3,31 +3,162 @@
3from report import report_sxw3from report import report_sxw
4from spreadsheet_xml.spreadsheet_xml_write import SpreadsheetReport4from spreadsheet_xml.spreadsheet_xml_write import SpreadsheetReport
5from board import queries_finance5from board import queries_finance
6from osv import osv
6from tools.translate import _7from tools.translate import _
78
89
9class integrity_finance(report_sxw.rml_parse):10class integrity_finance(report_sxw.rml_parse):
10 def __init__(self, cr, uid, name, context):11 def __init__(self, cr, uid, name, context):
11 super(integrity_finance, self).__init__(cr, uid, name, context=context)12 super(integrity_finance, self).__init__(cr, uid, name, context=context)
13 self.sql_additional = "" # to add the criteria from the wizard filters
14 self.sql_params = []
15 self.sql_rec_additional = "" # specific to queries related to reconciliations
16 self.sql_rec_params = []
12 self.localcontext.update({17 self.localcontext.update({
13 'get_title': self.get_title,18 'get_title': self.get_title,
14 'list_checks': self.list_checks,19 'list_checks': self.list_checks,
15 'get_results': self.get_results,20 'get_results': self.get_results,
21 'get_reconcile_date': self.get_reconcile_date,
16 '_t': self._t,22 '_t': self._t,
17 })23 })
1824
25 def set_context(self, objects, data, ids, report_type=None):
26 """
27 Fills in:
28 - self.sql_additional and self.sql_rec_additional with the part of SQL request corresponding to the criteria selected (string)
29 - self.sql_params and self.sql_rec_params with the related parameters (list)
30
31 For reconciliation queries the reconciliation dates must be within the FY/periods/dates selected.
32 For other queries the JI dates are used.
33 """
34 period_obj = self.pool.get('account.period')
35 fy_obj = self.pool.get('account.fiscalyear')
36 if data.get('form', False):
37 # note: the JE id is used and not the JI one to make sure whole entries are retrieved (cf. JI doc dates can differ within a JE)
38 sql_additional_subreq = """
39 AND m.id IN
40 (
41 SELECT DISTINCT (m.id)
42 FROM account_move m, account_move_line l
43 WHERE l.move_id = m.id
44 %s
45 )
46 """
47 sql_rec_additional_subreq = """
48 AND l.reconcile_id IN
49 (
50 SELECT DISTINCT (reconcile_id)
51 FROM account_move_line
52 WHERE reconcile_id IS NOT NULL
53 %s
54 )
55 """
56 # instances
57 instance_ids = data['form'].get('instance_ids', False)
58 if instance_ids:
59 self.sql_additional += " AND l.instance_id IN %s "
60 self.sql_params.append(tuple(instance_ids,))
61 self.sql_rec_additional += " AND instance_id IN %s "
62 self.sql_rec_params.append(tuple(instance_ids,))
63 # FY
64 fiscalyear_id = data['form'].get('fiscalyear_id', False)
65 if fiscalyear_id:
66 self.sql_additional += " AND l.period_id IN (SELECT id FROM account_period WHERE fiscalyear_id = %s) "
67 self.sql_params.append(fiscalyear_id)
68 fiscalyear = fy_obj.browse(self.cr, self.uid, fiscalyear_id, fields_to_fetch=['date_start', 'date_stop'], context=data.get('context', {}))
69 self.sql_rec_additional += " AND reconcile_date >= %s AND reconcile_date <= %s "
70 self.sql_rec_params.append(fiscalyear.date_start)
71 self.sql_rec_params.append(fiscalyear.date_stop)
72 wiz_filter = data['form'].get('filter', '')
73 # periods
74 if wiz_filter == 'filter_period':
75 period_from = data['form'].get('period_from', False)
76 period_to = data['form'].get('period_to', False)
77 if not period_from or not period_to:
78 raise osv.except_osv(_('Error'), _('Either the Start period or the End period is missing.'))
79 else:
80 period_ids = period_obj.get_period_range(self.cr, self.uid, period_from, period_to, context=data.get('context', {}))
81 if not period_ids:
82 raise osv.except_osv(_('Error'), _('No period matches the selected criteria.'))
83 self.sql_additional += " AND l.period_id IN %s "
84 self.sql_params.append(tuple(period_ids,))
85 per_from = period_obj.browse(self.cr, self.uid, period_from, fields_to_fetch=['date_start'], context=data.get('context', {}))
86 per_to = period_obj.browse(self.cr, self.uid, period_to, fields_to_fetch=['date_stop'], context=data.get('context', {}))
87 self.sql_rec_additional += " AND reconcile_date >= %s AND reconcile_date <= %s "
88 self.sql_rec_params.append(per_from.date_start)
89 self.sql_rec_params.append(per_to.date_stop)
90 # dates
91 if wiz_filter in ('filter_date_doc', 'filter_date'):
92 date_from = data['form'].get('date_from', False)
93 date_to = data['form'].get('date_to', False)
94 if not date_from or not date_to:
95 raise osv.except_osv(_('Error'), _('Either the Start date or the End date is missing.'))
96 else:
97 if wiz_filter == 'filter_date_doc':
98 # JI doc dates
99 self.sql_additional += " AND l.document_date >= %s AND l.document_date <= %s "
100 else:
101 # JI posting dates
102 self.sql_additional += " AND l.date >= %s AND l.date <= %s "
103 self.sql_params.append(date_from)
104 self.sql_params.append(date_to)
105 # reconciliation dates
106 self.sql_rec_additional += " AND reconcile_date >= %s AND reconcile_date <= %s "
107 self.sql_rec_params.append(date_from)
108 self.sql_rec_params.append(date_to)
109 # LAST STEP: if the request additional parts aren't empty: add the related subrequests
110 if self.sql_additional:
111 self.sql_additional = sql_additional_subreq % self.sql_additional
112 if self.sql_rec_additional:
113 self.sql_rec_additional = sql_rec_additional_subreq % self.sql_rec_additional
114 return super(integrity_finance, self).set_context(objects, data, ids, report_type=report_type)
115
19 def get_title(self):116 def get_title(self):
20 return _('Entries Data Integrity')117 return _('Entries Data Integrity')
21118
22 def list_checks(self):119 def list_checks(self):
23 return queries_finance.queries120 return queries_finance.queries
24121
25 def get_results(self, sql):122 def get_results(self, sql, query_ref):
26 if not sql:123 if not sql:
27 return []124 return []
28 self.cr.execute(sql)125 # reconciliation queries
126 if query_ref in ('unbalanced_rec_fctal', 'unbalanced_rec_booking'):
127 sql = sql % self.sql_rec_additional
128 if self.sql_rec_params:
129 self.cr.execute(sql, tuple(self.sql_rec_params))
130 else:
131 self.cr.execute(sql)
132 # other queries
133 else:
134 sql = sql % self.sql_additional
135 if self.sql_params:
136 self.cr.execute(sql, tuple(self.sql_params))
137 else:
138 self.cr.execute(sql)
29 return self.cr.fetchall()139 return self.cr.fetchall()
30140
141 def get_reconcile_date(self, reconcile_ref):
142 """
143 Returns the reconcile_date of the reconciliation in parameter (or None if the reconciled entries have no reconcile_date).
144 Note that this date isn't retrieved directly in the original requests as there are old entries for which within a same reconciliation
145 some lines have a reconcile_date and some others haven't any, so to be consistent the results can't be "grouped by" reconcile date.
146 """
147 reconcile_date = None
148 if reconcile_ref:
149 rec_date_sql = """
150 SELECT reconcile_date
151 FROM account_move_line
152 WHERE reconcile_date IS NOT NULL
153 AND reconcile_id = (SELECT id FROM account_move_reconcile WHERE name = %s LIMIT 1)
154 LIMIT 1;
155 """
156 self.cr.execute(rec_date_sql, (reconcile_ref,))
157 rec_date_res = self.cr.fetchone()
158 if rec_date_res:
159 reconcile_date = rec_date_res[0]
160 return reconcile_date
161
31 def _t(self, source):162 def _t(self, source):
32 return _(source)163 return _(source)
33164
34165
=== modified file 'bin/addons/msf_profile/i18n/fr_MF.po'
--- bin/addons/msf_profile/i18n/fr_MF.po 2018-10-30 10:56:14 +0000
+++ bin/addons/msf_profile/i18n/fr_MF.po 2018-11-07 14:15:37 +0000
@@ -10256,7 +10256,7 @@
10256msgid "Back Order of :"10256msgid "Back Order of :"
10257msgstr "Back Order of :"10257msgstr "Back Order of :"
1025810258
10259#. modules: purchase, account, msf_outgoing, financing_contract, register_accounting, sale, product_expiry, stock10259#. modules: purchase, account, msf_outgoing, financing_contract, register_accounting, sale, product_expiry, stock, account_override
10260#: view:account.bank.statement:010260#: view:account.bank.statement:0
10261#: view:account.common.report:010261#: view:account.common.report:0
10262#: view:account.move:010262#: view:account.move:0
@@ -10272,6 +10272,7 @@
10272#: view:stock.move:010272#: view:stock.move:0
10273#: view:stock.picking:010273#: view:stock.picking:0
10274#: view:free.allocation.wizard:010274#: view:free.allocation.wizard:0
10275#: view:integrity.finance.wizard:0
10275msgid "Dates"10276msgid "Dates"
10276msgstr "Dates"10277msgstr "Dates"
1027710278
@@ -10322,7 +10323,7 @@
10322#: code:addons/board/queries_finance.py:4710323#: code:addons/board/queries_finance.py:47
10323#, python-format10324#, python-format
10324msgid "P&L Journal Items vs Analytic Journal Items mismatch in booking currency (except FXA and REV)"10325msgid "P&L Journal Items vs Analytic Journal Items mismatch in booking currency (except FXA and REV)"
10325msgstr "Différence en devise d'enregistrement entre entrées comptables et analytiques (exceptés FAX et REV)"10326msgstr "Différence en devise d'enregistrement entre entrées comptables et analytiques (exceptés FXA et REV)"
1032610327
10327#. modules: sale, msf_supply_doc_export10328#. modules: sale, msf_supply_doc_export
10328#: report:po.follow.up_rml:010329#: report:po.follow.up_rml:0
@@ -17716,7 +17717,7 @@
17716msgid "Create Access"17717msgid "Create Access"
17717msgstr "Créer l'Accès "17718msgstr "Créer l'Accès "
1771817719
17719#. modules: account, base, procurement_request17720#. modules: account, base, procurement_request, account_override
17720#: view:account.common.report:017721#: view:account.common.report:0
17721#: view:ir.actions.act_window:017722#: view:ir.actions.act_window:0
17722#: model:ir.actions.act_window,name:base.actions_ir_filters_view17723#: model:ir.actions.act_window,name:base.actions_ir_filters_view
@@ -17724,6 +17725,7 @@
17724#: model:ir.model,name:base.model_ir_filters17725#: model:ir.model,name:base.model_ir_filters
17725#: model:ir.ui.menu,name:base.menu_ir_filters17726#: model:ir.ui.menu,name:base.menu_ir_filters
17726#: view:sale.order:017727#: view:sale.order:0
17728#: view:integrity.finance.wizard:0
17727msgid "Filters"17729msgid "Filters"
17728msgstr "Filtres"17730msgstr "Filtres"
1772917731
@@ -20061,7 +20063,9 @@
20061msgstr "MANIFESTE DE FRET"20063msgstr "MANIFESTE DE FRET"
2006220064
20063#. modules: account_override, board20065#. modules: account_override, board
20064#: model:ir.ui.menu,name:account_override.menu_integrity_finance20066#: model:ir.actions.act_window,name:account_override.action_integrity_finance_report
20067#: model:ir.ui.menu,name:account_override.menu_integrity_finance_report
20068#: code:addons/account_override/wizard/integrity_finance_wizard.py:111
20065#: code:addons/board/report/integrity_finance.py:2020069#: code:addons/board/report/integrity_finance.py:20
20066#, python-format20070#, python-format
20067msgid "Entries Data Integrity"20071msgid "Entries Data Integrity"
@@ -22622,7 +22626,7 @@
22622msgid "Populate fields order"22626msgid "Populate fields order"
22623msgstr "Remplir les champs commande"22627msgstr "Remplir les champs commande"
2262422628
22625#. modules: account, finance22629#. modules: account, finance, account_override
22626#: field:account.aged.trial.balance,filter:022630#: field:account.aged.trial.balance,filter:0
22627#: field:account.balance.report,filter:022631#: field:account.balance.report,filter:0
22628#: field:account.bs.report,filter:022632#: field:account.bs.report,filter:0
@@ -22639,6 +22643,7 @@
22639#: field:account.report.general.ledger,filter:022643#: field:account.report.general.ledger,filter:0
22640#: field:account.vat.declaration,filter:022644#: field:account.vat.declaration,filter:0
22641#: field:wizard.account.partner.balance.tree,filter:022645#: field:wizard.account.partner.balance.tree,filter:0
22646#: field:integrity.finance.wizard,filter:0
22642msgid "Filter by"22647msgid "Filter by"
22643msgstr "Filtrer par"22648msgstr "Filtrer par"
2264422649
@@ -24255,7 +24260,7 @@
24255msgid "Create Composition List"24260msgid "Create Composition List"
24256msgstr "Créer une Liste de Composition"24261msgstr "Créer une Liste de Composition"
2425724262
24258#. modules: account, res_currency_tables, finance24263#. modules: account, res_currency_tables, finance, account_override
24259#: field:account.common.partner.report,period_from:024264#: field:account.common.partner.report,period_from:0
24260#: field:account.partner.balance,period_from:024265#: field:account.partner.balance,period_from:0
24261#: field:account.partner.ledger,period_from:024266#: field:account.partner.ledger,period_from:0
@@ -24274,6 +24279,7 @@
24274#: field:account.vat.declaration,period_from:024279#: field:account.vat.declaration,period_from:0
24275#: field:wizard.report.currency.table,start_period_id:024280#: field:wizard.report.currency.table,start_period_id:0
24276#: field:wizard.report.rates.table,start_period_id:024281#: field:wizard.report.rates.table,start_period_id:0
24282#: field:integrity.finance.wizard,period_from:0
24277msgid "Start period"24283msgid "Start period"
24278msgstr "Période de début"24284msgstr "Période de début"
2427924285
@@ -25353,6 +25359,7 @@
25353#: report:addons/consumption_calculation/report/product_likely_expire_xls.mako:8625359#: report:addons/consumption_calculation/report/product_likely_expire_xls.mako:86
25354#: report:addons/account/report/free_allocation_report.mako:17125360#: report:addons/account/report/free_allocation_report.mako:171
25355#: field:free.allocation.wizard,period_id:025361#: field:free.allocation.wizard,period_id:0
25362#: selection:integrity.finance.wizard,filter:0
25356#, python-format25363#, python-format
25357msgid "Period"25364msgid "Period"
25358msgstr "Période"25365msgstr "Période"
@@ -27281,11 +27288,12 @@
27281msgid "The number of packages by layer"27288msgid "The number of packages by layer"
27282msgstr "Le nombre de colis par couche"27289msgstr "Le nombre de colis par couche"
2728327290
27284#. modules: account_reconciliation, account27291#. modules: account_reconciliation, account, board
27285#: selection:account.journal.column,field:027292#: selection:account.journal.column,field:0
27286#: field:account.move.line,reconcile_date:027293#: field:account.move.line,reconcile_date:0
27294#: code:addons/board/queries_finance.py:100
27287msgid "Reconcile date"27295msgid "Reconcile date"
27288msgstr "Reconcile date"27296msgstr "Date de lettrage"
2728927297
27290#. module: account27298#. module: account
27291#: report:account.vat.declaration:027299#: report:account.vat.declaration:0
@@ -28368,7 +28376,7 @@
28368msgid "XML Identifier"28376msgid "XML Identifier"
28369msgstr "Identifiant XML"28377msgstr "Identifiant XML"
2837028378
28371#. modules: msf_budget, account, stock_move_tracking, product, sale, stock_forecast, purchase_allocation_report, order_types28379#. modules: msf_budget, account, stock_move_tracking, product, sale, stock_forecast, purchase_allocation_report, order_types, account_override
28372#: view:account.aged.trial.balance:028380#: view:account.aged.trial.balance:0
28373#: view:account.analytic.Journal.report:028381#: view:account.analytic.Journal.report:0
28374#: view:account.analytic.balance:028382#: view:account.analytic.balance:0
@@ -28385,6 +28393,7 @@
28385#: view:wizard.fo.allocation.report:028393#: view:wizard.fo.allocation.report:0
28386#: view:stock.forecast:028394#: view:stock.forecast:0
28387#: view:stock.move.tracking:028395#: view:stock.move.tracking:0
28396#: view:integrity.finance.wizard:0
28388msgid "Print"28397msgid "Print"
28389msgstr "Imprimer"28398msgstr "Imprimer"
2839028399
@@ -29745,10 +29754,11 @@
29745msgid "Fiscal Position Template"29754msgid "Fiscal Position Template"
29746msgstr "Modèle de Position Fiscale"29755msgstr "Modèle de Position Fiscale"
2974729756
29748#. modules: account, finance29757#. modules: account, finance, account_override
29749#: field:account.partner.balance,period_to:029758#: field:account.partner.balance,period_to:0
29750#: field:account.partner.ledger,period_to:029759#: field:account.partner.ledger,period_to:0
29751#: field:wizard.account.partner.balance.tree,period_to:029760#: field:wizard.account.partner.balance.tree,period_to:0
29761#: field:integrity.finance.wizard,period_to:0
29752msgid "End period"29762msgid "End period"
29753msgstr "Période de fin"29763msgstr "Période de fin"
2975429764
@@ -35001,7 +35011,7 @@
35001msgid "Shipment Date:"35011msgid "Shipment Date:"
35002msgstr "Shipment Date:"35012msgstr "Shipment Date:"
3500335013
35004#. modules: sales_followup, sync_client, procurement_request, sale, mission_stock, msf_doc_import, purchase_followup35014#. modules: sales_followup, sync_client, procurement_request, sale, mission_stock, msf_doc_import, purchase_followup, account_override
35005#: field:msr_in_progress,start_date:035015#: field:msr_in_progress,start_date:0
35006#: field:abstract.wizard.import,start_date:035016#: field:abstract.wizard.import,start_date:0
35007#: field:wizard.import.batch,start_date:035017#: field:wizard.import.batch,start_date:0
@@ -35014,6 +35024,7 @@
35014#: field:po.track.changes.wizard,start_date:035024#: field:po.track.changes.wizard,start_date:0
35015#: field:sale.loan.stock.moves,start_date:035025#: field:sale.loan.stock.moves,start_date:0
35016#: field:ir.track.changes.wizard,start_date:035026#: field:ir.track.changes.wizard,start_date:0
35027#: field:integrity.finance.wizard,date_from:0
35017msgid "Start date"35028msgid "Start date"
35018msgstr "Date de début"35029msgstr "Date de début"
3501935030
@@ -41033,7 +41044,7 @@
41033msgid "Name of the batch will be ignored because the batch is 'Internal' so name is created by the system"41044msgid "Name of the batch will be ignored because the batch is 'Internal' so name is created by the system"
41034msgstr "Le nom du batch sera ignoré car le batch est 'Interne' donc son nom sera créé par le système"41045msgstr "Le nom du batch sera ignoré car le batch est 'Interne' donc son nom sera créé par le système"
4103541046
41036#. modules: account, msf_instance, finance, account_mcdb41047#. modules: account, msf_instance, finance, account_mcdb, account_override
41037#: report:account.general.ledger_landscape:041048#: report:account.general.ledger_landscape:0
41038#: report:account.general.ledger_landscape_tb:041049#: report:account.general.ledger_landscape_tb:0
41039#: report:account.partner.balance:041050#: report:account.partner.balance:0
@@ -41058,6 +41069,7 @@
41058#: model:ir.actions.act_window,name:msf_instance.action_msf_instance_tree41069#: model:ir.actions.act_window,name:msf_instance.action_msf_instance_tree
41059#: model:ir.ui.menu,name:msf_instance.menu_action_msf_instance_tree41070#: model:ir.ui.menu,name:msf_instance.menu_action_msf_instance_tree
41060#: view:msf.instance:041071#: view:msf.instance:0
41072#: field:integrity.finance.wizard,instance_ids:0
41061msgid "Proprietary Instances"41073msgid "Proprietary Instances"
41062msgstr "Instances Propriétaires"41074msgstr "Instances Propriétaires"
4106341075
@@ -44422,13 +44434,14 @@
44422msgid "Reordering Mode"44434msgid "Reordering Mode"
44423msgstr "Mode de Réapprovisionnement"44435msgstr "Mode de Réapprovisionnement"
4442444436
44425#. modules: msf_doc_import, sale, sales_followup44437#. modules: msf_doc_import, sale, sales_followups, account_override
44426#: field:abstract.wizard.import,end_date:044438#: field:abstract.wizard.import,end_date:0
44427#: field:wizard.import.batch,end_date:044439#: field:wizard.import.batch,end_date:0
44428#: field:sale.donation.stock.moves,end_date:044440#: field:sale.donation.stock.moves,end_date:0
44429#: field:sale.order.sourcing.progress,end_date:044441#: field:sale.order.sourcing.progress,end_date:0
44430#: field:ir.followup.location.wizard,end_date:044442#: field:ir.followup.location.wizard,end_date:0
44431#: field:sale.followup.multi.wizard,end_date:044443#: field:sale.followup.multi.wizard,end_date:0
44444#: field:integrity.finance.wizard,date_to:0
44432msgid "End date"44445msgid "End date"
44433msgstr "Date de fin"44446msgstr "Date de fin"
4443444447
@@ -51614,7 +51627,7 @@
51614msgid "Donation Line"51627msgid "Donation Line"
51615msgstr "Donation Line"51628msgstr "Donation Line"
5161651629
51617#. module: account51630#. modules: account, account_override
51618#: selection:account.aged.trial.balance,filter:051631#: selection:account.aged.trial.balance,filter:0
51619#: selection:account.balance.report,filter:051632#: selection:account.balance.report,filter:0
51620#: selection:account.bs.report,filter:051633#: selection:account.bs.report,filter:0
@@ -51630,6 +51643,7 @@
51630#: selection:account.print.journal,filter:051643#: selection:account.print.journal,filter:0
51631#: selection:account.report.general.ledger,filter:051644#: selection:account.report.general.ledger,filter:0
51632#: selection:account.vat.declaration,filter:051645#: selection:account.vat.declaration,filter:0
51646#: selection:integrity.finance.wizard,filter:0
51633msgid "No Filters"51647msgid "No Filters"
51634msgstr "Aucun Filtre"51648msgstr "Aucun Filtre"
5163551649
@@ -54842,7 +54856,7 @@
54842msgid "Africa/Timbuktu"54856msgid "Africa/Timbuktu"
54843msgstr "Africa/Timbuktu"54857msgstr "Africa/Timbuktu"
5484454858
54845#. modules: account, finance, account_mcdb, analytic_distribution54859#. modules: account, finance, account_mcdb, analytic_distribution, account_override
54846#: selection:account.aged.trial.balance,filter:054860#: selection:account.aged.trial.balance,filter:0
54847#: selection:account.balance.report,filter:054861#: selection:account.balance.report,filter:0
54848#: selection:account.bs.report,filter:054862#: selection:account.bs.report,filter:0
@@ -54879,6 +54893,7 @@
54879#: selection:wizard.account.partner.balance.tree,filter:054893#: selection:wizard.account.partner.balance.tree,filter:0
54880#: view:account.period.state:054894#: view:account.period.state:0
54881#: view:account.analytic.chart:054895#: view:account.analytic.chart:0
54896#: view:integrity.finance.wizard:0
54882#, python-format54897#, python-format
54883msgid "Periods"54898msgid "Periods"
54884msgstr "Périodes"54899msgstr "Périodes"
@@ -65785,7 +65800,7 @@
65785msgid "PO line to confirm"65800msgid "PO line to confirm"
65786msgstr "PO line to confirm"65801msgstr "PO line to confirm"
6578765802
65788#. modules: account, finance, account_mcdb, register_accounting, account_hq_entries, account_override, analytic, msf_accrual, vertical_integration65803#. modules: account, finance, account_mcdb, register_accounting, account_hq_entries, account_override, analytic, msf_accrual, vertical_integration, board
65789#: field:account.bank.statement.line,date:065804#: field:account.bank.statement.line,date:0
65790#: field:account.invoice,date_invoice:065805#: field:account.invoice,date_invoice:0
65791#: report:combined.journals.report.pdf:065806#: report:combined.journals.report.pdf:0
@@ -65826,6 +65841,7 @@
65826#: report:addons/register_accounting/report/pending_cheque_xls.mako:21865841#: report:addons/register_accounting/report/pending_cheque_xls.mako:218
65827#: report:addons/vertical_integration/report/open_invoices_xls.mako:29165842#: report:addons/vertical_integration/report/open_invoices_xls.mako:291
65828#: field:hq.entries.split,date:065843#: field:hq.entries.split,date:0
65844#: selection:integrity.finance.wizard,filter:0
65829#, python-format65845#, python-format
65830msgid "Posting Date"65846msgid "Posting Date"
65831msgstr "Date de Comptabilisation"65847msgstr "Date de Comptabilisation"
@@ -75641,7 +75657,7 @@
75641msgid "Update Sent Monitor"75657msgid "Update Sent Monitor"
75642msgstr "Surveillance des Mises à jour Envoyées"75658msgstr "Surveillance des Mises à jour Envoyées"
7564375659
75644#. modules: msf_budget, account, account_period_closing_level, finance, vertical_integration, msf_currency_revaluation, analytic_distribution75660#. modules: msf_budget, account, account_period_closing_level, finance, vertical_integration, msf_currency_revaluation, analytic_distribution, account_override
75645#: field:account.aged.trial.balance,fiscalyear_id:075661#: field:account.aged.trial.balance,fiscalyear_id:0
75646#: field:account.balance.report,fiscalyear_id:075662#: field:account.balance.report,fiscalyear_id:0
75647#: field:account.bs.report,fiscalyear_id:075663#: field:account.bs.report,fiscalyear_id:0
@@ -75672,6 +75688,7 @@
75672#: field:ocp.matching.export.wizard,fiscalyear_id:075688#: field:ocp.matching.export.wizard,fiscalyear_id:0
75673#: field:wizard.hq.report.oca,fiscalyear_id:075689#: field:wizard.hq.report.oca,fiscalyear_id:0
75674#: field:wizard.hq.report.ocg,fiscalyear_id:075690#: field:wizard.hq.report.ocg,fiscalyear_id:0
75691#: field:integrity.finance.wizard,fiscalyear_id:0
75675#, python-format75692#, python-format
75676msgid "Fiscal year"75693msgid "Fiscal year"
75677msgstr "Exercice Comptable"75694msgstr "Exercice Comptable"
@@ -97048,6 +97065,7 @@
97048#: selection:account.balance.report,filter:097065#: selection:account.balance.report,filter:0
97049#: selection:account.journal.column,field:097066#: selection:account.journal.column,field:0
97050#: selection:account.report.general.ledger,filter:097067#: selection:account.report.general.ledger,filter:0
97068#: selection:integrity.finance.wizard,filter:0
97051#: code:addons/account/report/common_report_header.py:16697069#: code:addons/account/report/common_report_header.py:166
97052#: report:addons/account_mcdb/report/report_account_analytic_line_free_xls.mako:7897070#: report:addons/account_mcdb/report/report_account_analytic_line_free_xls.mako:78
97053#: report:addons/account_override/report/open_invoices_xls.mako:33097071#: report:addons/account_override/report/open_invoices_xls.mako:330
@@ -97764,6 +97782,7 @@
97764#: view:wizard.import.mapping:097782#: view:wizard.import.mapping:0
97765#: view:automated.export.job:097783#: view:automated.export.job:0
97766#: view:free.allocation.wizard:097784#: view:free.allocation.wizard:0
97785#: view:integrity.finance.wizard:0
97767#, python-format97786#, python-format
97768msgid "Cancel"97787msgid "Cancel"
97769msgstr "Annuler"97788msgstr "Annuler"
@@ -101982,6 +102001,30 @@
101982msgid "Related entries"102001msgid "Related entries"
101983msgstr "Ecritures associées"102002msgstr "Ecritures associées"
101984102003
102004#. module: board
102005#: code:addons/board/report/integrity_finance.py:46
102006#, python-format
102007msgid "Either the Start period or the End period is missing."
102008msgstr "Il manque soit la Période de début soit la Période de fin."
102009
102010#. module: board
102011#: code:addons/board/report/integrity_finance.py:62
102012#, python-format
102013msgid "No period matches the selected criteria."
102014msgstr "Aucune période ne correspond aux critères sélectionnés."
102015
102016#. module: account_override
102017#: code:addons/account_override/period.py:129
102018#, python-format
102019msgid "The End period can't precede the Start period."
102020msgstr "La Période de fin ne peut pas précéder la Période de début."
102021
102022#. module: board
102023#: code:addons/board/report/integrity_finance.py:57
102024#, python-format
102025msgid "Either the Start date or the End date is missing."
102026msgstr "Il manque soit la Date de début soit la Date de fin."
102027
101985#. module: stock102028#. module: stock
101986#: code:addons/stock/physical_inventory.py:938102029#: code:addons/stock/physical_inventory.py:938
101987#, python-format102030#, python-format
101988102031
=== modified file 'bin/service/web_services.py'
--- bin/service/web_services.py 2018-10-05 08:17:24 +0000
+++ bin/service/web_services.py 2018-11-07 14:15:37 +0000
@@ -1104,7 +1104,7 @@
1104 tb_s = "".join(traceback.format_exception(*tb))1104 tb_s = "".join(traceback.format_exception(*tb))
1105 logger = netsvc.Logger()1105 logger = netsvc.Logger()
1106 logger.notifyChannel('web-services', netsvc.LOG_ERROR,1106 logger.notifyChannel('web-services', netsvc.LOG_ERROR,
1107 'Exception: %s\n%s' % (str(exception), tb_s))1107 'Exception: %s\n%s' % (tools.ustr(exception), tb_s))
1108 if hasattr(exception, 'name') and hasattr(exception, 'value'):1108 if hasattr(exception, 'name') and hasattr(exception, 'value'):
1109 self._reports[id]['exception'] = ExceptionWithTraceback(tools.ustr(exception.name), tools.ustr(exception.value))1109 self._reports[id]['exception'] = ExceptionWithTraceback(tools.ustr(exception.name), tools.ustr(exception.value))
1110 else:1110 else:

Subscribers

People subscribed via source and target branches