Merge lp:~unifield-team/unifield-addons/UF_1711 into lp:unifield-addons
- UF_1711
- Merge into trunk
Proposed by
jftempo
Status: | Needs review |
---|---|
Proposed branch: | lp:~unifield-team/unifield-addons/UF_1711 |
Merge into: | lp:unifield-addons |
Diff against target: |
874 lines (+514/-39) 9 files modified
account/account.py (+40/-6) account/account_report.xml (+11/-0) account/report/__init__.py (+1/-0) account/report/account_profit_horizontal.rml (+11/-9) account/report/account_profit_loss.py (+74/-12) account/report/account_profit_loss.rml (+6/-6) account/report/profit_loss_xls.mako (+347/-0) account/wizard/account_report_profit_loss.py (+19/-6) account/wizard/account_report_profit_loss_view.xml (+5/-0) |
To merge this branch: | bzr merge lp:~unifield-team/unifield-addons/UF_1711 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
UniField Dev Team | Pending | ||
Review via email: mp+193558@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Unmerged revisions
- 4599. By Sean Carroll <sean@sean-msf>
-
UF_1711: [IMP] Mods to xls report
- 4598. By Sean Carroll <sean@sean-msf>
-
UF_1711: [IMP] Added XLS report
- 4597. By Sean Carroll <sean@sean-msf>
-
UF_1711: [WIP] WIP added profit_
loss_xls. mako - 4596. By Sean Carroll <sean@sean-msf>
-
UF_1711: [WIP] WIP commit for JF.
- 4595. By Sean Carroll
-
UF-1711: [FIX] removed debugging info
- 4594. By Sean Carroll
-
UF_1711: [IMP] added code to convert currencies at account line move level
- 4593. By Sean Carroll
-
UF-1711: [IMP] Added currency selection and conversion for P&L
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'account/account.py' |
2 | --- account/account.py 2013-09-30 15:03:30 +0000 |
3 | +++ account/account.py 2013-11-27 20:02:46 +0000 |
4 | @@ -227,6 +227,8 @@ |
5 | |
6 | def __compute(self, cr, uid, ids, field_names, arg=None, context=None, |
7 | query='', query_params=()): |
8 | + # Jira-1711: Added cnvt_currency to context. If it exists then balances will be converted |
9 | + # TODO This method needs review during refactoring. |
10 | """ compute the balance, debit and/or credit for the provided |
11 | account ids |
12 | Arguments: |
13 | @@ -268,12 +270,13 @@ |
14 | # INNER JOIN (VALUES (id1), (id2), (id3), ...) AS tmp (id) |
15 | # ON l.account_id = tmp.id |
16 | # or make _get_children_and_consol return a query and join on that |
17 | - request = ("SELECT l.account_id as id, " +\ |
18 | + # Jira 1711 - added posting_date and document_date to query |
19 | + request = ("SELECT l.account_id as id, l.currency_id as currency_id, l.date as posting_date, l.document_date as document_date, " +\ |
20 | ', '.join(map(mapping.__getitem__, field_names)) + |
21 | " FROM account_move_line l" \ |
22 | " WHERE l.account_id IN %s " \ |
23 | + filters + |
24 | - " GROUP BY l.account_id") |
25 | + " GROUP BY l.account_id, l.currency_id, l.date, l.document_date") |
26 | params = (tuple(children_and_consolidated),) + query_params |
27 | cr.execute(request, params) |
28 | self.logger.notifyChannel('addons.'+self._name, netsvc.LOG_DEBUG, |
29 | @@ -281,6 +284,23 @@ |
30 | |
31 | for res in cr.dictfetchall(): |
32 | accounts[res['id']] = res |
33 | + |
34 | + # If the 'cnvt_to_curr' context variable is set with a currency id, then convert to this currency |
35 | + if context['cnvt_to_curr']: |
36 | + functional_currency_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.currency_id.id |
37 | + for account,dct in accounts.items(): |
38 | + if dct[field_names[0]] == 0.0: |
39 | + pass |
40 | + else: |
41 | + date_context = {'date': dct['posting_date']} |
42 | + converted_amount = self.pool.get('res.currency').compute(cr, |
43 | + uid, |
44 | + functional_currency_id, |
45 | + context['cnvt_to_curr'], |
46 | + dct[field_names[0]] or 0.0, |
47 | + round=True, |
48 | + context=date_context) |
49 | + accounts[account][field_names[0]] = converted_amount |
50 | |
51 | # consolidate accounts with direct children |
52 | children_and_consolidated.reverse() |
53 | @@ -300,16 +320,30 @@ |
54 | brs.pop(0) |
55 | for fn in field_names: |
56 | sums.setdefault(current.id, {})[fn] = accounts.get(current.id, {}).get(fn, 0.0) |
57 | + #sums.setdefault(current.id, {})['posting_date'] = accounts.get(current.id, {}).get('posting_date') |
58 | for child in current.child_id: |
59 | - if child.company_id.currency_id.id == current.company_id.currency_id.id: |
60 | - sums[current.id][fn] += sums[child.id][fn] |
61 | - else: |
62 | - sums[current.id][fn] += currency_obj.compute(cr, uid, child.company_id.currency_id.id, current.company_id.currency_id.id, sums[child.id][fn], context=context) |
63 | + # Jira 1711 - if 'cnvt_to_curr' is in the context it is used to convert sums earlier in this method |
64 | + if context['cnvt_to_curr']: |
65 | + pass |
66 | + else: |
67 | + if child.company_id.currency_id.id == current.company_id.currency_id.id: |
68 | + sums[current.id][fn] += sums[child.id][fn] |
69 | + else: |
70 | + sums[current.id][fn] += currency_obj.compute(cr, uid, child.company_id.currency_id.id, current.company_id.currency_id.id, sums[child.id][fn], context=context) |
71 | res = {} |
72 | null_result = dict((fn, 0.0) for fn in field_names) |
73 | for id in ids: |
74 | res[id] = sums.get(id, null_result) |
75 | return res |
76 | + |
77 | + #def get_converted_account_line(self, cr, uid, from_currency, to_currency, amount, posting_date): |
78 | + # db_pool = pooler.get_pool(self.cr.dbname)# |
79 | + |
80 | + # rate_pool = db_pool.get('res.currency_rate') |
81 | + # from_rate = rate_pool.browse(cr, uid, from_currency, context=None) |
82 | + # to_rate = rate_pool.browse(cr, uid, to_currency, context=None) |
83 | + # return amount * (from_rate / to_rate) |
84 | + |
85 | |
86 | def _get_company_currency(self, cr, uid, ids, field_name, arg, context=None): |
87 | result = {} |
88 | |
89 | === modified file 'account/account_report.xml' |
90 | --- account/account_report.xml 2011-01-18 18:01:02 +0000 |
91 | +++ account/account_report.xml 2013-11-27 20:02:46 +0000 |
92 | @@ -11,6 +11,17 @@ |
93 | <report auto="False" id="account_general_journal" model="account.journal.period" name="account.general.journal" rml="account/report/account_general_journal.rml" string="General Journal" header="False"/> |
94 | <report auto="False" id="account_journal" model="account.journal.period" name="account.journal.period.print" rml="account/report/account_journal.rml" string="Journal" header="False"/> |
95 | <report auto="False" id="account_overdue" model="res.partner" name="account.overdue" rml="account/report/account_print_overdue.rml" string="Overdue Payments"/> |
96 | + |
97 | + <report id="pl_account_xls" |
98 | + name="pl.account_xls" |
99 | + model="account.account" |
100 | + file="account/report/profit_loss_xls.mako" |
101 | + report_type="webkit" |
102 | + string="Account Balance (xls)" |
103 | + auto="False" |
104 | + menu="False" |
105 | + /> |
106 | + |
107 | <report |
108 | auto="False" |
109 | id="account_invoices" |
110 | |
111 | === modified file 'account/report/__init__.py' |
112 | --- account/report/__init__.py 2011-01-14 00:11:01 +0000 |
113 | +++ account/report/__init__.py 2013-11-27 20:02:46 +0000 |
114 | @@ -42,5 +42,6 @@ |
115 | import account_balance_sheet |
116 | import account_profit_loss |
117 | |
118 | + |
119 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
120 | |
121 | |
122 | === modified file 'account/report/account_profit_horizontal.rml' |
123 | --- account/report/account_profit_horizontal.rml 2011-06-29 05:29:28 +0000 |
124 | +++ account/report/account_profit_horizontal.rml 2013-11-27 20:02:46 +0000 |
125 | @@ -148,9 +148,10 @@ |
126 | <font color="white"> </font> |
127 | </para> |
128 | <para style="P2">[[ get_data(data) or removeParentNode('para')]]</para> |
129 | - <blockTable colWidths="250.0,100.0,150.0,120.0,150.0" style="Table2_header"> |
130 | + <blockTable colWidths="200.0,50.0,100.0,150.0,120.0,150.0" style="Table2_header"> |
131 | <tr> |
132 | <td><para style="terp_tblheader_General_Centre">Chart of Account </para></td> |
133 | + <td><para style="terp_tblheader_General_Centre">Currency</para></td> |
134 | <td><para style="terp_tblheader_General_Centre">Fiscal Year</para></td> |
135 | <td><para style="terp_tblheader_General_Centre">Filter By [[ get_filter(data)!='No Filter' and get_filter(data) ]]</para></td> |
136 | <td><para style="terp_tblheader_General_Centre">Display Account</para></td> |
137 | @@ -158,6 +159,7 @@ |
138 | </tr> |
139 | <tr> |
140 | <td><para style="terp_default_Centre_8">[[ get_account(data) or removeParentNode('para') ]]</para></td> |
141 | + <td><para style="terp_default_Centre_8">[[ get_currency(data).name ]]</para></td> |
142 | <td><para style="terp_default_Centre_8">[[ get_fiscalyear(data) or '' ]]</para></td> |
143 | <td><para style="terp_default_Centre_8">[[ get_filter(data)=='No Filter' and get_filter(data) or removeParentNode('para') ]] </para> |
144 | <blockTable colWidths="70.0,70.0" style="Table3">[[ get_filter(data)=='Date' or removeParentNode('blockTable') ]] |
145 | @@ -213,7 +215,7 @@ |
146 | <td> |
147 | <para style="terp_default_9"> |
148 | |
149 | - <font face="Times-Roman">[[ repeatIn(get_lines(),'a' ) ]] </font>[[ a['code'] ]]<font>[[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]]</font> |
150 | + <font face="Times-Roman">[[ repeatIn(get_lines(data),'a' ) ]] </font>[[ a['code'] ]]<font>[[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]]</font> |
151 | </para> |
152 | </td> |
153 | <td> |
154 | @@ -222,7 +224,7 @@ |
155 | </para> |
156 | </td> |
157 | <td> |
158 | - <para style="terp_default_Right_9"><font>[[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]]</font><font>[[ formatLang(abs(a['balance'])) ]] [[ company.currency_id.symbol ]]</font></para> |
159 | + <para style="terp_default_Right_9"><font>[[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]]</font><font>[[ formatLang(abs(a['balance'])) ]]</font></para> |
160 | </td> |
161 | <td> |
162 | <para style="terp_default_9"> |
163 | @@ -235,7 +237,7 @@ |
164 | </para> |
165 | </td> |
166 | <td> |
167 | - <para style="terp_default_Right_9"><font>[[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]]</font><font>[[(a['code1'] and a['name1']) and formatLang(abs(a['balance1'])) or removeParentNode('font') ]] [[ company.currency_id.symbol ]]</font></para> |
168 | + <para style="terp_default_Right_9"><font>[[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]]</font><font>[[(a['code1'] and a['name1']) and formatLang(abs(a['balance1'])) or removeParentNode('font') ]]</font></para> |
169 | </td> |
170 | </tr> |
171 | </blockTable> |
172 | @@ -248,7 +250,7 @@ |
173 | <para style="terp_default_Bold_9">[[ final_result()['type'] == 'Net Profit' and final_result()['type'] or '' ]]</para> |
174 | </td> |
175 | <td> |
176 | - <para style="terp_default_Right_9_Bold">[[ final_result()['balance'] and final_result()['type'] == 'Net Profit' and formatLang(abs(final_result()['balance'])) ]] [[ company.currency_id.symbol ]]</para> |
177 | + <para style="terp_default_Right_9_Bold"> [[ final_result()['balance'] and final_result()['type'] == 'Net Profit' and formatLang(abs(final_result()['balance'])) ]] </para> |
178 | </td> |
179 | <td> |
180 | <para style="terp_default_Bold_9"></para> |
181 | @@ -257,9 +259,9 @@ |
182 | <para style="terp_default_Bold_9">[[ final_result()['type'] == 'Net Loss' and final_result()['type'] or '' ]]</para> |
183 | </td> |
184 | <td> |
185 | - <para style="terp_default_Right_9_Bold">[[ final_result()['balance'] and final_result()['type'] == 'Net Loss' and formatLang(abs(final_result()['balance'])) ]] [[ final_result()['balance'] and final_result()['type'] == 'Net Loss' and company.currency_id.symbol ]]</para> |
186 | + <para style="terp_default_Right_9_Bold">[[ final_result()['balance'] and final_result()['type'] == 'Net Loss' and formatLang(abs(final_result()['balance'])) ]] [[ final_result()['balance'] and final_result()['type'] == 'Net Loss' and '' ]]</para> |
187 | </td> |
188 | - </tr> |
189 | + </tr>t |
190 | </blockTable> |
191 | |
192 | <blockTable colWidths="290.16,100.32,290.16,100.32" style="Table_Net_Profit_Loss"> |
193 | @@ -268,13 +270,13 @@ |
194 | <para style="terp_default_Bold_9">Total:</para> |
195 | </td> |
196 | <td> |
197 | - <para style="terp_default_Right_9_Bold"><u>[[ formatLang(abs(sum_dr())) ]] [[ company.currency_id.symbol ]]</u></para> |
198 | + <para style="terp_default_Right_9_Bold"><u>[[ get_currency(data).name ]] [[ formatLang(abs(sum_dr())) ]] </u></para> |
199 | </td> |
200 | <td> |
201 | <para style="terp_default_Bold_9">Total:</para> |
202 | </td> |
203 | <td> |
204 | - <para style="terp_default_Right_9_Bold"><u>[[ formatLang(abs(sum_cr())) ]] [[ company.currency_id.symbol ]]</u></para> |
205 | + <para style="terp_default_Right_9_Bold"><u>[[ get_currency(data).name ]] [[ formatLang(abs(sum_cr())) ]] </u></para> |
206 | </td> |
207 | </tr> |
208 | </blockTable> |
209 | |
210 | === modified file 'account/report/account_profit_horizontal.sxw' |
211 | Binary files account/report/account_profit_horizontal.sxw 2011-06-29 05:29:28 +0000 and account/report/account_profit_horizontal.sxw 2013-11-27 20:02:46 +0000 differ |
212 | === modified file 'account/report/account_profit_loss.py' |
213 | --- account/report/account_profit_loss.py 2011-06-29 05:29:28 +0000 |
214 | +++ account/report/account_profit_loss.py 2013-11-27 20:02:46 +0000 |
215 | @@ -21,8 +21,14 @@ |
216 | import time |
217 | import pooler |
218 | from report import report_sxw |
219 | +from report_webkit.webkit_report import WebKitParser |
220 | +from spreadsheet_xml.spreadsheet_xml_write import SpreadsheetReport |
221 | from common_report_header import common_report_header |
222 | from tools.translate import _ |
223 | +from osv import osv |
224 | +import cgi |
225 | + |
226 | + |
227 | |
228 | class report_pl_account_horizontal(report_sxw.rml_parse, common_report_header): |
229 | |
230 | @@ -34,10 +40,13 @@ |
231 | self.result = {} |
232 | self.result_temp = [] |
233 | self.localcontext.update( { |
234 | + 'currency_sum_dr': self.currency_sum_dr, |
235 | + 'currency_sum_cr': self.currency_sum_cr, |
236 | 'time': time, |
237 | 'get_lines': self.get_lines, |
238 | 'get_lines_another': self.get_lines_another, |
239 | 'get_currency': self._get_currency, |
240 | + 'get_display_account': self.get_display_account, |
241 | 'get_data': self.get_data, |
242 | 'sum_dr': self.sum_dr, |
243 | 'sum_cr': self.sum_cr, |
244 | @@ -53,6 +62,7 @@ |
245 | 'get_end_date':self._get_end_date, |
246 | 'get_company':self._get_company, |
247 | 'get_target_move': self._get_target_move, |
248 | + 'get_currency': self.get_currency, |
249 | }) |
250 | self.context = context |
251 | |
252 | @@ -78,17 +88,47 @@ |
253 | if self.res_pl['type'] == _('Net Loss'): |
254 | self.result_sum_cr += self.res_pl['balance'] |
255 | return self.result_sum_cr |
256 | - |
257 | + |
258 | + def currency_sum_dr(self,data): |
259 | + output = self.get_currency(data).name + ' ' + str(self.result_sum_dr) |
260 | + print 'sfc: ', output |
261 | + return output |
262 | + |
263 | + def currency_sum_cr(self,data): |
264 | + return self.get_currency(data).name + ' ' + str(self.result_sum_cr) |
265 | + |
266 | + |
267 | + def get_currency(self,data): |
268 | + cr, uid = self.cr, self.uid |
269 | + ctx = self.context.copy() |
270 | + db_pool = pooler.get_pool(self.cr.dbname) |
271 | + currency_pool = db_pool.get('res.currency') |
272 | + |
273 | + currency_id = data['form']['currency_id'] |
274 | + currency = currency_pool.browse(cr, uid, currency_id, context=ctx) |
275 | + |
276 | + return currency |
277 | + |
278 | + def get_display_account(self,data): |
279 | + display_account = 'With balance is not equal to 0' |
280 | + if data['form']['display_account']=='bal_all': |
281 | + display_account = 'All' |
282 | + if data['form']['display_account']=='bal_movement': |
283 | + display_account = 'With movements' |
284 | + return display_account |
285 | + |
286 | def get_data(self, data): |
287 | cr, uid = self.cr, self.uid |
288 | db_pool = pooler.get_pool(self.cr.dbname) |
289 | |
290 | account_pool = db_pool.get('account.account') |
291 | currency_pool = db_pool.get('res.currency') |
292 | + res_currency_obj = self.pool.get('res.currency') |
293 | |
294 | types = [ |
295 | 'expense', |
296 | 'income' |
297 | + |
298 | ] |
299 | |
300 | ctx = self.context.copy() |
301 | @@ -99,26 +139,38 @@ |
302 | elif data['form']['filter'] == 'filter_date': |
303 | ctx['date_from'] = data['form'].get('date_from', False) |
304 | ctx['date_to'] = data['form'].get('date_to', False) |
305 | - |
306 | + |
307 | + |
308 | cal_list = {} |
309 | account_id = data['form'].get('chart_account_id', False) |
310 | account_ids = account_pool._get_children_and_consol(cr, uid, account_id, context=ctx) |
311 | accounts = account_pool.browse(cr, uid, account_ids, context=ctx) |
312 | + |
313 | + rpt_currency_id = data['form']['currency_id'] |
314 | + rpt_currency = currency_pool.browse(cr, uid, rpt_currency_id, context=ctx) |
315 | + ctx['cnvt_to_curr'] = rpt_currency_id |
316 | + |
317 | |
318 | for typ in types: |
319 | accounts_temp = [] |
320 | for account in accounts: |
321 | if (account.user_type.report_type) and (account.user_type.report_type == typ): |
322 | currency = account.currency_id and account.currency_id or account.company_id.currency_id |
323 | - if typ == 'expense' and account.type <> 'view' and (account.debit <> account.credit): |
324 | - self.result_sum_dr += abs(account.debit - account.credit) |
325 | - if typ == 'income' and account.type <> 'view' and (account.debit <> account.credit): |
326 | - self.result_sum_cr += abs(account.debit - account.credit) |
327 | + |
328 | + # if currency == rpt_currency: |
329 | + account_debit = account.debit |
330 | + account_credit = account.credit |
331 | + account_balance = account.balance |
332 | + |
333 | + if typ == 'expense' and account.type <> 'view' and (account_debit <> account_credit): |
334 | + self.result_sum_dr += abs(account_debit - account_credit) |
335 | + if typ == 'income' and account.type <> 'view' and (account_debit <> account_credit): |
336 | + self.result_sum_cr += abs(account_debit - account_credit) |
337 | if data['form']['display_account'] == 'bal_movement': |
338 | - if (not currency_pool.is_zero(self.cr, self.uid, currency, account.credit)) or (not currency_pool.is_zero(self.cr, self.uid, currency, account.debit)) or (not currency_pool.is_zero(self.cr, self.uid, currency, account.balance)): |
339 | + if (not currency_pool.is_zero(self.cr, self.uid, currency, account_credit)) or (not currency_pool.is_zero(self.cr, self.uid, currency, account_debit)) or (not currency_pool.is_zero(self.cr, self.uid, currency, account_balance)): |
340 | accounts_temp.append(account) |
341 | elif data['form']['display_account'] == 'bal_solde': |
342 | - if not currency_pool.is_zero(self.cr, self.uid, currency, account.balance): |
343 | + if not currency_pool.is_zero(self.cr, self.uid, currency, account_balance): |
344 | accounts_temp.append(account) |
345 | else: |
346 | accounts_temp.append(account) |
347 | @@ -172,16 +224,26 @@ |
348 | self.result_temp.append(temp) |
349 | return None |
350 | |
351 | - def get_lines(self): |
352 | + def get_lines(self,data): |
353 | + if data['form']['export_format'] == 'xls': |
354 | + for row in self.result_temp: |
355 | + for key in ('name', 'name1'): |
356 | + if key not in row: |
357 | + continue |
358 | + row[key] = cgi.escape(row[key]) |
359 | return self.result_temp |
360 | + |
361 | + |
362 | |
363 | def get_lines_another(self, group): |
364 | return self.result.get(group, []) |
365 | - |
366 | + |
367 | + |
368 | + |
369 | + |
370 | report_sxw.report_sxw('report.pl.account.horizontal', 'account.account', |
371 | 'addons/account/report/account_profit_horizontal.rml',parser=report_pl_account_horizontal, header='internal landscape') |
372 | |
373 | -report_sxw.report_sxw('report.pl.account', 'account.account', |
374 | - 'addons/account/report/account_profit_loss.rml',parser=report_pl_account_horizontal, header='internal') |
375 | +SpreadsheetReport('report.pl.account_xls','account.account','addons/account/report/profit_loss_xls.mako',parser=report_pl_account_horizontal) |
376 | |
377 | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
378 | |
379 | === modified file 'account/report/account_profit_loss.rml' |
380 | --- account/report/account_profit_loss.rml 2011-06-29 05:29:28 +0000 |
381 | +++ account/report/account_profit_loss.rml 2013-11-27 20:02:46 +0000 |
382 | @@ -219,7 +219,7 @@ |
383 | </para> |
384 | </td> |
385 | <td> |
386 | - <para style="terp_default_Right_9"><font>[[ a.level<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]]</font><font>[[ formatLang(abs(a.balance)) ]] [[ company.currency_id.symbol ]]</font></para> |
387 | + <para style="terp_default_Right_9"><font>[[ a.level<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]]</font><font>[[ formatLang(abs(a.balance)) ]] [[ currency_id.symbol ]]</font></para> |
388 | </td> |
389 | </tr> |
390 | </blockTable> |
391 | @@ -232,7 +232,7 @@ |
392 | <para style="terp_default_Bold_9">[[ final_result()['type'] == 'Net Profit' and final_result()['type'] or removeParentNode('blockTable') ]]</para> |
393 | </td> |
394 | <td> |
395 | - <para style="terp_default_Right_9_Bold">[[ final_result()['balance'] and final_result()['type'] == 'Net Profit' and formatLang(abs(final_result()['balance'])) ]] [[ final_result()['balance'] and final_result()['type'] == 'Net Profit' and company.currency_id.symbol ]]</para> |
396 | + <para style="terp_default_Right_9_Bold">[[ final_result()['balance'] and final_result()['type'] == 'Net Profit' and formatLang(abs(final_result()['balance'])) ]] [[ final_result()['balance'] and final_result()['type'] == 'Net Profit' and currency_id.symbol ]]</para> |
397 | </td> |
398 | </tr> |
399 | </blockTable> |
400 | @@ -242,7 +242,7 @@ |
401 | <para style="terp_default_Bold_9">Total:</para> |
402 | </td> |
403 | <td> |
404 | - <para style="terp_default_Right_9_Bold"><u>[[ formatLang(abs(sum_dr())) ]] [[ company.currency_id.symbol ]]</u></para> |
405 | + <para style="terp_default_Right_9_Bold"><u>[[ formatLang(abs(sum_dr())) ]] [[ currency.symbol ]]</u></para> |
406 | </td> |
407 | </tr> |
408 | </blockTable> |
409 | @@ -274,7 +274,7 @@ |
410 | </para> |
411 | </td> |
412 | <td> |
413 | - <para style="terp_default_Right_9"><font>[[ a.level<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]]</font><font>[[ formatLang(abs(a.balance)) ]] [[ company.currency_id.symbol ]]</font></para> |
414 | + <para style="terp_default_Right_9"><font>[[ a.level<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]]</font><font>[[ formatLang(abs(a.balance)) ]] [[ currency_id.symbol ]]</font></para> |
415 | </td> |
416 | </tr> |
417 | </blockTable> |
418 | @@ -287,7 +287,7 @@ |
419 | <para style="terp_default_Bold_9">[[ final_result()['type'] == 'Net Loss' and final_result()['type'] or removeParentNode('blockTable') ]]</para> |
420 | </td> |
421 | <td> |
422 | - <para style="terp_default_Right_9_Bold">[[ final_result()['balance'] and final_result()['type'] == 'Net Loss' and formatLang(abs(final_result()['balance'])) ]] [[ final_result()['balance'] and final_result()['type'] == 'Net Loss' and company.currency_id.symbol ]]</para> |
423 | + <para style="terp_default_Right_9_Bold">[[ final_result()['balance'] and final_result()['type'] == 'Net Loss' and formatLang(abs(final_result()['balance'])) ]] [[ final_result()['balance'] and final_result()['type'] == 'Net Loss' and currency_id.symbol ]]</para> |
424 | </td> |
425 | </tr> |
426 | </blockTable> |
427 | @@ -297,7 +297,7 @@ |
428 | <para style="terp_default_Bold_9">Total:</para> |
429 | </td> |
430 | <td> |
431 | - <para style="terp_default_Right_9_Bold"><u>[[ formatLang(abs(sum_cr())) ]] [[ company.currency_id.symbol ]]</u></para> |
432 | + <para style="terp_default_Right_9_Bold"><u>[[ formatLang(abs(sum_cr())) ]] [[ currency_id.symbol ]]</u></para> |
433 | </td> |
434 | </tr> |
435 | </blockTable> |
436 | |
437 | === modified file 'account/report/account_profit_loss.sxw' |
438 | Binary files account/report/account_profit_loss.sxw 2011-06-29 05:29:28 +0000 and account/report/account_profit_loss.sxw 2013-11-27 20:02:46 +0000 differ |
439 | === added file 'account/report/profit_loss_xls.mako' |
440 | --- account/report/profit_loss_xls.mako 1970-01-01 00:00:00 +0000 |
441 | +++ account/report/profit_loss_xls.mako 2013-11-27 20:02:46 +0000 |
442 | @@ -0,0 +1,347 @@ |
443 | +<?xml version="1.0"?> |
444 | +<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" |
445 | + xmlns:o="urn:schemas-microsoft-com:office:office" |
446 | + xmlns:x="urn:schemas-microsoft-com:office:excel" |
447 | + xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" |
448 | + xmlns:html="http://www.w3.org/TR/REC-html40"> |
449 | + <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"> |
450 | + <Author>MSFUser</Author> |
451 | + <LastAuthor>Sean Carroll</LastAuthor> |
452 | + <Revision>0</Revision> |
453 | + <TotalTime>0</TotalTime> |
454 | + <Created>2012-06-18T15:46:09Z</Created> |
455 | + <Version>14.0</Version> |
456 | + </DocumentProperties> |
457 | + <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office"> |
458 | + <AllowPNG/> |
459 | + </OfficeDocumentSettings> |
460 | + <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"> |
461 | + <WindowHeight>7820</WindowHeight> |
462 | + <WindowWidth>21540</WindowWidth> |
463 | + <WindowTopX>0</WindowTopX> |
464 | + <WindowTopY>0</WindowTopY> |
465 | + <TabRatio>385</TabRatio> |
466 | + <ProtectStructure>False</ProtectStructure> |
467 | + <ProtectWindows>False</ProtectWindows> |
468 | + </ExcelWorkbook> |
469 | + <Styles> |
470 | + <Style ss:ID="Default" ss:Name="Normal"> |
471 | + <Alignment ss:Vertical="Bottom"/> |
472 | + <Borders/> |
473 | + <Font x:Family="Swiss"/> |
474 | + <Interior/> |
475 | + <NumberFormat/> |
476 | + <Protection/> |
477 | + </Style> |
478 | + <Style ss:ID="s35"> |
479 | + <Alignment ss:Vertical="Bottom"/> |
480 | + <Font ss:FontName="Lohit Hindi" x:Family="Swiss"/> |
481 | + <Interior/> |
482 | + <NumberFormat/> |
483 | + <Protection ss:Protected="0"/> |
484 | + </Style> |
485 | + <Style ss:ID="s36" ss:Parent="s35"> |
486 | + <Borders> |
487 | + <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="2"/> |
488 | + <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/> |
489 | + <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/> |
490 | + <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="2"/> |
491 | + </Borders> |
492 | + <Font x:Family="Swiss" ss:Bold="1"/> |
493 | + </Style> |
494 | + <Style ss:ID="s37" ss:Parent="s35"> |
495 | + <Borders> |
496 | + <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="2"/> |
497 | + <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/> |
498 | + <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/> |
499 | + <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="2"/> |
500 | + </Borders> |
501 | + <Font x:Family="Swiss"/> |
502 | + </Style> |
503 | + <Style ss:ID="s38" ss:Parent="s35"> |
504 | + <Font x:Family="Swiss"/> |
505 | + </Style> |
506 | + <Style ss:ID="s39" ss:Parent="s35"> |
507 | + <Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/> |
508 | + <Borders> |
509 | + <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="2"/> |
510 | + <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/> |
511 | + <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/> |
512 | + <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="2"/> |
513 | + </Borders> |
514 | + <Font x:Family="Swiss"/> |
515 | + <NumberFormat ss:Format="d\-m\-yy"/> |
516 | + </Style> |
517 | + <Style ss:ID="s40" ss:Parent="s35"> |
518 | + <Borders> |
519 | + <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="2"/> |
520 | + <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/> |
521 | + <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/> |
522 | + <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="2"/> |
523 | + </Borders> |
524 | + <Font x:Family="Swiss"/> |
525 | + <NumberFormat ss:Format="Standard"/> |
526 | + </Style> |
527 | + <Style ss:ID="s41" ss:Parent="s35"> |
528 | + <Alignment ss:Vertical="Center" ss:WrapText="1"/> |
529 | + <Borders> |
530 | + <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="3"/> |
531 | + <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="3"/> |
532 | + <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/> |
533 | + <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="3"/> |
534 | + </Borders> |
535 | + <Font x:Family="Swiss" ss:Color="#FFFFFF" ss:Bold="1"/> |
536 | + <Interior ss:Color="#DD0806" ss:Pattern="Solid"/> |
537 | + </Style> |
538 | + <Style ss:ID="s42" ss:Parent="s35"> |
539 | + <Alignment ss:Vertical="Center" ss:WrapText="1"/> |
540 | + <Borders> |
541 | + <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="3"/> |
542 | + <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/> |
543 | + <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/> |
544 | + <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="3"/> |
545 | + </Borders> |
546 | + <Font x:Family="Swiss" ss:Color="#FFFFFF" ss:Bold="1"/> |
547 | + <Interior ss:Color="#DD0806" ss:Pattern="Solid"/> |
548 | + </Style> |
549 | + <Style ss:ID="s44" ss:Parent="s35"> |
550 | + <Borders> |
551 | + <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="2"/> |
552 | + <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="3"/> |
553 | + <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/> |
554 | + </Borders> |
555 | + <Font x:Family="Swiss"/> |
556 | + <Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/> |
557 | + </Style> |
558 | + <Style ss:ID="s45" ss:Parent="s35"> |
559 | + <Borders> |
560 | + <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="2"/> |
561 | + <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/> |
562 | + <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/> |
563 | + </Borders> |
564 | + <Font x:Family="Swiss"/> |
565 | + </Style> |
566 | + <Style ss:ID="s46" ss:Parent="s35"> |
567 | + <Borders> |
568 | + <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="2"/> |
569 | + <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/> |
570 | + <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/> |
571 | + </Borders> |
572 | + <Font x:Family="Swiss"/> |
573 | + <NumberFormat ss:Format="Standard"/> |
574 | + </Style> |
575 | + <Style ss:ID="s47" ss:Parent="s35"> |
576 | + <Borders> |
577 | + <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="2"/> |
578 | + <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/> |
579 | + <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/> |
580 | + </Borders> |
581 | + <Font x:Family="Swiss"/> |
582 | + <Interior ss:Color="#FFFFFF" ss:Pattern="Solid"/> |
583 | + <NumberFormat ss:Format="Standard"/> |
584 | + </Style> |
585 | + <Style ss:ID="s48" ss:Parent="s35"> |
586 | + <Borders> |
587 | + <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="2"/> |
588 | + <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="2"/> |
589 | + <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="2"/> |
590 | + </Borders> |
591 | + <Font x:Family="Swiss"/> |
592 | + <NumberFormat ss:Format="0.0\%"/> |
593 | + </Style> |
594 | + <Style ss:ID="s91"> |
595 | + <Font x:Family="Swiss" ss:Bold="1"/> |
596 | + </Style> |
597 | + <Style ss:ID="s92"> |
598 | + <Borders> |
599 | + <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/> |
600 | + </Borders> |
601 | + </Style> |
602 | + <Style ss:ID="s93"> |
603 | + <Borders> |
604 | + <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/> |
605 | + </Borders> |
606 | + <Font x:Family="Swiss" ss:Bold="1"/> |
607 | + </Style> |
608 | + </Styles> |
609 | + <Worksheet ss:Name="Profit and Loss"> |
610 | + <Table ss:ExpandedColumnCount="7" x:FullColumns="1" |
611 | + x:FullRows="1" ss:DefaultColumnWidth="53" ss:DefaultRowHeight="12"> |
612 | + <Column ss:Width="99"/> |
613 | + <Column ss:Width="70"/> |
614 | + <Column ss:Width="57"/> |
615 | + <Column ss:Width="59"/> |
616 | + <Column ss:Width="60"/> |
617 | + <Column ss:AutoFitWidth="0" ss:Width="101"/> |
618 | + <Row ss:Height="13"> |
619 | + <Cell ss:StyleID="s36"><Data ss:Type="String">PROFIT AND LOSS</Data></Cell> |
620 | + <Cell ss:StyleID="s37"/> |
621 | + <Cell ss:StyleID="s38"/> |
622 | + <Cell ss:StyleID="s38"/> |
623 | + <Cell ss:StyleID="s38"/> |
624 | + <Cell ss:StyleID="s38"/> |
625 | + <Cell ss:StyleID="s38"/> |
626 | + </Row> |
627 | + <Row ss:Height="13"> |
628 | + <Cell ss:StyleID="s45"><Data ss:Type="String">Report date:</Data></Cell> |
629 | + <Cell ss:StyleID="s45"><Data ss:Type="String">${time.strftime('%Y-%m-%d')|n}</Data></Cell> |
630 | + <Cell ss:StyleID="s38"/> |
631 | + <Cell ss:StyleID="s38"/> |
632 | + <Cell ss:StyleID="s38"/> |
633 | + <Cell ss:StyleID="s38"/> |
634 | + <Cell ss:StyleID="s38"/> |
635 | + </Row> |
636 | + <Row ss:Index="4" ss:Height="13"> |
637 | + <Cell ss:StyleID="s45"><Data ss:Type="String">Chart of Accounts:</Data></Cell> |
638 | + <Cell ss:StyleID="s45"><Data ss:Type="String">${get_account(data)}</Data></Cell> |
639 | + <Cell ss:StyleID="s38"/> |
640 | + <Cell ss:StyleID="s38"/> |
641 | + <Cell ss:StyleID="s38"/> |
642 | + <Cell ss:StyleID="s38"/> |
643 | + <Cell ss:StyleID="s38"/> |
644 | + </Row> |
645 | + <Row ss:Height="13"> |
646 | + <Cell ss:StyleID="s45"><Data ss:Type="String">Currency:</Data></Cell> |
647 | + <Cell ss:StyleID="s45"><Data ss:Type="String">${get_currency(data).name}</Data></Cell> |
648 | + <Cell ss:StyleID="s38"/> |
649 | + <Cell ss:StyleID="s38"/> |
650 | + <Cell ss:StyleID="s38"/> |
651 | + <Cell ss:StyleID="s38"/> |
652 | + <Cell ss:StyleID="s38"/> |
653 | + </Row> |
654 | + <Row ss:Height="13"> |
655 | + <Cell ss:StyleID="s45"><Data ss:Type="String">Fiscal Year:</Data></Cell> |
656 | + <Cell ss:StyleID="s45"><Data ss:Type="String">${get_fiscalyear(data) or ''}</Data></Cell> |
657 | + <Cell ss:StyleID="s38"/> |
658 | + <Cell ss:StyleID="s38"/> |
659 | + <Cell ss:StyleID="s38"/> |
660 | + <Cell ss:StyleID="s38"/> |
661 | + <Cell ss:StyleID="s38"/> |
662 | + </Row> |
663 | + <Row ss:Height="13"> |
664 | + <Cell ss:StyleID="s45"><Data ss:Type="String">Filter</Data></Cell> |
665 | + <Cell ss:StyleID="s45"><Data ss:Type="String">${get_filter(data) or 'No Filter'}</Data></Cell> |
666 | + <Cell ss:StyleID="s38"/> |
667 | + <Cell ss:StyleID="s38"/> |
668 | + <Cell ss:StyleID="s38"/> |
669 | + <Cell ss:StyleID="s38"/> |
670 | + <Cell ss:StyleID="s38"/> |
671 | + </Row> |
672 | + <Row ss:Height="13"> |
673 | + <Cell ss:StyleID="s45"><Data ss:Type="String">Display Account:</Data></Cell> |
674 | + <Cell ss:StyleID="s45"><Data ss:Type="String">${get_display_account(data)}</Data></Cell> |
675 | + <Cell ss:StyleID="s38"/> |
676 | + <Cell ss:StyleID="s38"/> |
677 | + <Cell ss:StyleID="s38"/> |
678 | + <Cell ss:StyleID="s38"/> |
679 | + <Cell ss:StyleID="s38"/> |
680 | + </Row> |
681 | + <Row ss:Height="13"> |
682 | + <Cell ss:StyleID="s45"><Data ss:Type="String">Target:</Data></Cell> |
683 | + <Cell ss:StyleID="s45"><Data ss:Type="String">${get_target_move(data) or ''}</Data></Cell> |
684 | + <Cell ss:StyleID="s38"/> |
685 | + <Cell ss:StyleID="s38"/> |
686 | + <Cell ss:StyleID="s38"/> |
687 | + <Cell ss:StyleID="s38"/> |
688 | + <Cell ss:StyleID="s38"/> |
689 | + </Row> |
690 | + <Row ss:AutoFitHeight="0" ss:Height="13"> |
691 | + <Cell ss:StyleID="s45"><Data ss:Type="String"></Data></Cell> |
692 | + <Cell ss:StyleID="s38"/> |
693 | + <Cell ss:StyleID="s38"/> |
694 | + <Cell ss:StyleID="s38"/> |
695 | + <Cell ss:StyleID="s38"/> |
696 | + <Cell ss:StyleID="s38"/> |
697 | + <Cell ss:StyleID="s38"/> |
698 | + </Row> |
699 | + <Row ss:AutoFitHeight="0" ss:Height="27"> |
700 | + <Cell ss:StyleID="s41"><Data ss:Type="String">Code</Data></Cell> |
701 | + <Cell ss:StyleID="s42"><Data ss:Type="String">Particular</Data></Cell> |
702 | + <Cell ss:StyleID="s42"><Data ss:Type="String">Balance</Data></Cell> |
703 | + <Cell ss:StyleID="s41"><Data ss:Type="String">Code</Data></Cell> |
704 | + <Cell ss:StyleID="s42"><Data ss:Type="String">Particular</Data></Cell> |
705 | + <Cell ss:StyleID="s42"><Data ss:Type="String">Balance</Data></Cell> |
706 | + <Cell ss:StyleID="s38"/> |
707 | + </Row> |
708 | + |
709 | +<% |
710 | +get_data(data) |
711 | +rows = get_lines(data) |
712 | +fin = final_result() |
713 | +%> |
714 | +% for row in rows: |
715 | + <Row ss:Height="14"> |
716 | + <Cell ss:StyleID="s45"><Data ss:Type="String">${row['code'] or ''}</Data></Cell> |
717 | + <Cell ss:StyleID="s45"><Data ss:Type="String">${row['name'] or ''}</Data></Cell> |
718 | + <Cell ss:StyleID="s46"><Data ss:Type="String">${row['balance'] or ''}</Data></Cell> |
719 | + <Cell ss:StyleID="s45"><Data ss:Type="String">${row['code1'] or ''}</Data></Cell> |
720 | + <Cell ss:StyleID="s45"><Data ss:Type="String">${row['name1'] or ''}</Data></Cell> |
721 | + <Cell ss:StyleID="s46"><Data ss:Type="String">${row['balance1'] or ''}</Data></Cell> |
722 | +</Row> |
723 | +% endfor |
724 | + |
725 | + <Row> |
726 | + <Cell ss:Index="2" ss:StyleID="s91"/> |
727 | + <Cell ss:StyleID="s91"/> |
728 | + <Cell ss:StyleID="s91"/> |
729 | + <Cell ss:StyleID="s91"/> |
730 | + <Cell ss:StyleID="s91"/> |
731 | + </Row> |
732 | + |
733 | + <Row ss:Height="14"> |
734 | + <Cell ss:StyleID="s45"><Data ss:Type="String"></Data></Cell> |
735 | + <Cell ss:StyleID="s45"><Data ss:Type="String">${fin['type'] if fin['type'] == 'Net Profit' else ''}</Data></Cell> |
736 | + <Cell ss:StyleID="s46"><Data ss:Type="String">${fin['balance'] if fin['type'] == 'Net Profit' else ''}</Data></Cell> |
737 | + <Cell ss:StyleID="s45"><Data ss:Type="String"></Data></Cell> |
738 | + <Cell ss:StyleID="s45"><Data ss:Type="String">${fin['type'] if fin['type'] == 'Net Loss' else ''}</Data></Cell> |
739 | + <Cell ss:StyleID="s46"><Data ss:Type="String">${fin['balance'] if fin['type'] == 'Net Loss' else ''}</Data></Cell> |
740 | +</Row> |
741 | + |
742 | + <Row> |
743 | + <Cell ss:Index="2" ss:StyleID="s91"/> |
744 | + <Cell ss:StyleID="s91"/> |
745 | + <Cell ss:StyleID="s91"/> |
746 | + <Cell ss:StyleID="s91"/> |
747 | + <Cell ss:StyleID="s91"/> |
748 | + </Row> |
749 | + <Row> |
750 | + <Cell ss:StyleID="s92"/> |
751 | + <Cell ss:StyleID="s93"><Data ss:Type="String">Total</Data></Cell> |
752 | + <Cell ss:StyleID="s93"><Data ss:Type="String">${currency_sum_dr(data)}</Data></Cell> |
753 | + <Cell ss:StyleID="s93"/> |
754 | + <Cell ss:StyleID="s93"><Data ss:Type="String">Total</Data></Cell> |
755 | + <Cell ss:StyleID="s93"><Data ss:Type="String">${currency_sum_cr(data)}</Data></Cell> |
756 | + </Row> |
757 | + </Table> |
758 | + <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> |
759 | + <PageSetup> |
760 | + <Layout x:StartPageNumber="1"/> |
761 | + <Header x:Margin="0.78749999999999998" |
762 | + x:Data="&C&"Times New Roman,Regular"&12&A"/> |
763 | + <Footer x:Margin="0.78749999999999998" |
764 | + x:Data="&C&"Times New Roman,Regular"&12Page &P"/> |
765 | + <PageMargins x:Bottom="1.05277777777778" x:Left="0.78749999999999998" |
766 | + x:Right="0.78749999999999998" x:Top="1.05277777777778"/> |
767 | + </PageSetup> |
768 | + <Print> |
769 | + <ValidPrinterInfo/> |
770 | + <PaperSizeIndex>9</PaperSizeIndex> |
771 | + <HorizontalResolution>-4</HorizontalResolution> |
772 | + <VerticalResolution>-4</VerticalResolution> |
773 | + </Print> |
774 | + <Zoom>125</Zoom> |
775 | + <PageLayoutZoom>125</PageLayoutZoom> |
776 | + <Selected/> |
777 | + <Panes> |
778 | + <Pane> |
779 | + <Number>3</Number> |
780 | + <ActiveRow>18</ActiveRow> |
781 | + <ActiveCol>9</ActiveCol> |
782 | + <RangeSelection>R18C10:R19C10</RangeSelection> |
783 | + </Pane> |
784 | + </Panes> |
785 | + <ProtectObjects>False</ProtectObjects> |
786 | + <ProtectScenarios>False</ProtectScenarios> |
787 | + </WorksheetOptions> |
788 | + </Worksheet> |
789 | +</Workbook> |
790 | |
791 | === modified file 'account/wizard/account_report_profit_loss.py' |
792 | --- account/wizard/account_report_profit_loss.py 2011-01-14 00:11:01 +0000 |
793 | +++ account/wizard/account_report_profit_loss.py 2013-11-27 20:02:46 +0000 |
794 | @@ -20,6 +20,9 @@ |
795 | ############################################################################## |
796 | |
797 | from osv import osv, fields |
798 | +import pooler |
799 | +import time |
800 | + |
801 | |
802 | class account_pl_report(osv.osv_memory): |
803 | """ |
804 | @@ -30,31 +33,41 @@ |
805 | _description = "Account Profit And Loss Report" |
806 | _columns = { |
807 | 'display_type': fields.boolean("Landscape Mode"), |
808 | + 'currency_id': fields.many2one('res.currency', required=True, readonly=False, string='Currency'), |
809 | + 'export_format': fields.selection([('xls', 'Excel'), ('pdf', 'PDF')], string="Export format", required=True), |
810 | } |
811 | |
812 | _defaults = { |
813 | 'display_type': True, |
814 | 'journal_ids': [], |
815 | - 'target_move': False |
816 | + 'target_move': False, |
817 | + 'export_format': lambda *a: 'pdf', |
818 | + 'currency_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.currency_id.id, |
819 | } |
820 | + |
821 | + |
822 | |
823 | def _print_report(self, cr, uid, ids, data, context=None): |
824 | if context is None: |
825 | context = {} |
826 | data = self.pre_print_report(cr, uid, ids, data, context=context) |
827 | - data['form'].update(self.read(cr, uid, ids, ['display_type'])[0]) |
828 | - if data['form']['display_type']: |
829 | + #data = {'code': 'code1', 'particular': 'particular1', 'bal': 'bal1'} |
830 | + |
831 | + |
832 | + data['form'].update(self.read(cr, uid, ids, ['display_type', 'currency_id','export_format'])[0]) |
833 | + if data['form']['export_format'] == 'pdf': |
834 | return { |
835 | 'type': 'ir.actions.report.xml', |
836 | 'report_name': 'pl.account.horizontal', |
837 | 'datas': data, |
838 | } |
839 | - else: |
840 | + if data['form']['export_format'] == 'xls': |
841 | return { |
842 | - 'type': 'ir.actions.report.xml', |
843 | - 'report_name': 'pl.account', |
844 | + 'type': 'ir.actions.report.xml', |
845 | + 'report_name': 'pl.account_xls', |
846 | 'datas': data, |
847 | } |
848 | + |
849 | |
850 | account_pl_report() |
851 | |
852 | |
853 | === modified file 'account/wizard/account_report_profit_loss_view.xml' |
854 | --- account/wizard/account_report_profit_loss_view.xml 2011-01-14 00:11:01 +0000 |
855 | +++ account/wizard/account_report_profit_loss_view.xml 2013-11-27 20:02:46 +0000 |
856 | @@ -22,6 +22,8 @@ |
857 | <xpath expr="//field[@name='fiscalyear_id']" position="after"> |
858 | <field name="display_account"/> |
859 | <field name="display_type"/> |
860 | + <field name="export_format"/> |
861 | + <field name="currency_id"/> |
862 | </xpath> |
863 | </data> |
864 | </field> |
865 | @@ -36,6 +38,9 @@ |
866 | <field name="view_id" ref="account_pl_report_view"/> |
867 | <field name="target">new</field> |
868 | </record> |
869 | + |
870 | + |
871 | + |
872 | |
873 | <menuitem |
874 | parent="account.menu_finance_legal_statement" |