diff --git a/addons/account/__openerp__.py b/addons/account/__openerp__.py index 1b378e15e93..d1726d164b6 100644 --- a/addons/account/__openerp__.py +++ b/addons/account/__openerp__.py @@ -98,6 +98,7 @@ module named account_voucher. 'wizard/account_reconcile_view.xml', 'wizard/account_reconcile_partner_process_view.xml', 'wizard/account_automatic_reconcile_view.xml', + 'wizard/account_financial_report_view.xml', 'project/wizard/project_account_analytic_line_view.xml', 'account_end_fy.xml', 'account_invoice_view.xml', diff --git a/addons/account/account.py b/addons/account/account.py index 1412cc9b61f..38ed96d4aac 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -139,7 +139,7 @@ class account_account_type(osv.osv): 'Balance' will generally be used for cash accounts. 'Detail' will copy each existing journal item of the previous year, even the reconciled ones. 'Unreconciled' will copy only the journal items that were unreconciled on the first day of the new fiscal year."""), - 'sign': fields.selection([(-1, 'Negative'), (1, 'Positive')], 'Sign on Reports', required=True, help='Allows you to change the sign of the balance amount displayed in the reports, so that you can see positive figures instead of negative ones in expenses accounts.'), + 'sign': fields.selection([(-1, 'Reverse balance sign'), (1, 'Preserve balance sign')], 'Sign on Reports', required=True, help='For accounts that are typically more debited than credited and that you would like to print as negative amounts in your reports, you should reverse the sign of the balance; e.g.: Expense account. The same applies for accounts that are typically more credited than debited and that you would like to print as positive amounts in your reports; e.g.: Income account.'), 'report_type':fields.selection([ ('none','/'), ('income','Profit & Loss (Income Accounts)'), @@ -2637,7 +2637,88 @@ class account_fiscal_position_account_template(osv.osv): account_fiscal_position_account_template() - # Multi charts of Accounts wizard +# --------------------------------------------------------- +# Account Financial Report +# --------------------------------------------------------- + +class account_financial_report(osv.osv): + _name = "account.financial.report" + _description = "Account Report" + + def _get_level(self, cr, uid, ids, field_name, arg, context=None): + res = {} + for report in self.browse(cr, uid, ids, context=context): + level = 0 + if report.parent_id: + level = report.parent_id.level + 1 + res[report.id] = level + return res + + def _get_children_by_order(self, cr, uid, ids, context=None): + res = [] + for id in ids: + res.append(id) + ids2 = self.search(cr, uid, [('parent_id', '=', id)], order='sequence ASC', context=context) + res += self._get_children_by_order(cr, uid, ids2, context=context) + return res + + def _get_balance(self, cr, uid, ids, name, args, context=None): + res = {} + res_all = {} + for report in self.browse(cr, uid, ids, context=context): + balance = 0.0 + if report.id in res_all: + balance = res_all[report.id] + elif report.type == 'accounts': + # it's the sum of balance of the linked accounts + for a in report.account_ids: + balance += a.balance + elif report.type == 'account_report' and report.account_report_id: + # it's the amount of the linked report + res2 = self._get_balance(cr, uid, [report.account_report_id.id], 'balance', False, context=context) + res_all.update(res2) + for key, value in res2.items(): + balance += value + elif report.type == 'sum': + # it's the sum of balance of the children of this account.report + #for child in report.children_ids: + res2 = self._get_balance(cr, uid, [rec.id for rec in report.children_ids], 'balance', False, context=context) + res_all.update(res2) + for key, value in res2.items(): + balance += value + res[report.id] = balance + res_all[report.id] = balance + return res + + _columns = { + 'name': fields.char('Report Name', size=128, required=True), + 'parent_id': fields.many2one('account.financial.report', 'Parent'), + 'children_ids': fields.one2many('account.financial.report', 'parent_id', 'Account Report'), + 'sequence': fields.integer('Sequence'), + 'note': fields.text('Notes'), + 'balance': fields.function(_get_balance, 'Balance'), + 'level': fields.function(_get_level, string='Level', store=True, type='integer'), + 'type': fields.selection([ + ('sum','View'), + ('accounts','Accounts'), + ('account_type','Account Type'), + ('account_report','Report Value'), + ],'Type'), + 'account_ids': fields.many2many('account.account', 'account_account_financial_report', 'report_line_id', 'account_id', 'Accounts'), + 'display_detail': fields.boolean('Display details', help='Display every account with its balance instead of the sum.'), + 'account_report_id': fields.many2one('account.financial.report', 'Report Value'), + 'account_type_ids': fields.many2many('account.account.type', 'account_account_financial_report_type', 'report_id', 'account_type_id', 'Account Types'), + } + + _defaults = { + 'type': 'sum', + } + +account_financial_report() + +# --------------------------------------------------------- +# Account generation from template wizards +# --------------------------------------------------------- class wizard_multi_charts_accounts(osv.osv_memory): """ diff --git a/addons/account/account_menuitem.xml b/addons/account/account_menuitem.xml index 062e1f6382b..89538603ae7 100644 --- a/addons/account/account_menuitem.xml +++ b/addons/account/account_menuitem.xml @@ -30,6 +30,7 @@ + + @@ -2703,5 +2704,113 @@ action = pool.get('res.config').next(cr, uid, [], context) parent="menu_finance_payables" action="base.action_partner_supplier_form" sequence="100"/> + + + + account.financial.report.form + account.financial.report + form + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + account.financial.report.tree + account.financial.report + tree + + + + + + + + + + + + account.financial.report.search + account.financial.report + search + + + + + + + + + + + + + + + + + + + Financial Reports + ir.actions.act_window + account.financial.report + form + tree,form + + + Makes a generic system to draw financial reports easily. + + + + + + account.report.hierarchy + account.financial.report + tree + children_ids + + + + + + + + + + + Financial Reports Hierarchy + account.financial.report + tree + + [('parent_id','=',False)] + + + + diff --git a/addons/account/i18n/ar.po b/addons/account/i18n/ar.po index c0c60f617c3..d8dcf40a2d3 100644 --- a/addons/account/i18n/ar.po +++ b/addons/account/i18n/ar.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2011-09-05 23:09+0000\n" +"PO-Revision-Date: 2011-09-22 02:55+0000\n" "Last-Translator: Majed Majbour \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-09-17 04:55+0000\n" -"X-Generator: Launchpad (build 13955)\n" +"X-Launchpad-Export-Date: 2011-09-22 04:48+0000\n" +"X-Generator: Launchpad (build 13996)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -48,7 +48,7 @@ msgstr "" #. module: account #: field:account.installer.modules,account_voucher:0 msgid "Voucher Management" -msgstr "" +msgstr "إدارة القسائم" #. module: account #: view:account.account:0 @@ -68,7 +68,7 @@ msgstr "متبقي" #: code:addons/account/invoice.py:785 #, python-format msgid "Please define sequence on invoice journal" -msgstr "" +msgstr "يرجى تحديد تسلسل على الفاتورة" #. module: account #: constraint:account.period:0 @@ -134,7 +134,7 @@ msgstr "المدخلات المحاسبية -" #: code:addons/account/account.py:1291 #, python-format msgid "You can not delete posted movement: \"%s\"!" -msgstr "" +msgstr "لا يمكنك حذف حركة تم ترحيلها: \"%s\"!" #. module: account #: report:account.invoice:0 @@ -173,6 +173,8 @@ msgid "" "If the active field is set to False, it will allow you to hide the payment " "term without removing it." msgstr "" +"إذا تم تعيين الحقل النشط إلى خطأ ، فإنه سيسمح لك بإخفاء مدة السداد دون " +"إزالتها." #. module: account #: code:addons/account/invoice.py:1421 diff --git a/addons/account/partner.py b/addons/account/partner.py index 6ff3879889c..36fd88183f2 100644 --- a/addons/account/partner.py +++ b/addons/account/partner.py @@ -28,12 +28,17 @@ class account_fiscal_position(osv.osv): _description = 'Fiscal Position' _columns = { 'name': fields.char('Fiscal Position', size=64, required=True), + 'active': fields.boolean('Active', help="By unchecking the active field, you may hide a fiscal position without deleting it."), 'company_id': fields.many2one('res.company', 'Company'), 'account_ids': fields.one2many('account.fiscal.position.account', 'position_id', 'Account Mapping'), 'tax_ids': fields.one2many('account.fiscal.position.tax', 'position_id', 'Tax Mapping'), 'note': fields.text('Notes', translate=True), } + _defaults = { + 'active': True, + } + def map_tax(self, cr, uid, fposition_id, taxes, context=None): if not taxes: return [] diff --git a/addons/account/partner_view.xml b/addons/account/partner_view.xml index fbee97875ae..706fa4683cb 100644 --- a/addons/account/partner_view.xml +++ b/addons/account/partner_view.xml @@ -8,8 +8,11 @@ form
- - + + + + + diff --git a/addons/account/report/__init__.py b/addons/account/report/__init__.py index 7c09027f3ca..c9e49c2e02d 100644 --- a/addons/account/report/__init__.py +++ b/addons/account/report/__init__.py @@ -42,6 +42,7 @@ import account_analytic_entries_report import account_balance_sheet import account_profit_loss import account_treasury_report +import account_financial_report # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/report/account_aged_partner_balance.rml b/addons/account/report/account_aged_partner_balance.rml index ace66af0584..fb79ab0d199 100644 --- a/addons/account/report/account_aged_partner_balance.rml +++ b/addons/account/report/account_aged_partner_balance.rml @@ -196,25 +196,25 @@ Account Total - [[ formatLang(get_direction('6')) ]] [[ company.currency_id.symbol ]] + [[ formatLang(get_direction('6'), currency_obj=company.currency_id) ]] - [[ formatLang(get_for_period('4')) ]] [[ company.currency_id.symbol ]] + [[ formatLang(get_for_period('4'), currency_obj=company.currency_id) ]] - [[ formatLang(get_for_period('3')) ]] [[ company.currency_id.symbol ]] + [[ formatLang(get_for_period('3'), currency_obj=company.currency_id) ]] - [[ formatLang(get_for_period('2')) ]] [[ company.currency_id.symbol ]] + [[ formatLang(get_for_period('2'), currency_obj=company.currency_id) ]] - [[ formatLang(get_for_period('1')) ]] [[ company.currency_id.symbol ]] + [[ formatLang(get_for_period('1'), currency_obj=company.currency_id) ]] - [[ formatLang(get_for_period('0')) ]] [[ company.currency_id.symbol ]] + [[ formatLang(get_for_period('0'), currency_obj=company.currency_id) ]] - [[ formatLang(get_total('5')) ]] [[ company.currency_id.symbol ]] + [[ formatLang(get_total('5'), currency_obj=company.currency_id) ]] @@ -224,25 +224,25 @@ [[ partner['name'] ]] - [[ formatLang(partner['direction']) ]] [[ company.currency_id.symbol ]] + [[ formatLang(partner['direction'], currency_obj=company.currency_id) ]] - [[ formatLang(partner['4'])]] [[ company.currency_id.symbol ]] + [[ formatLang(partner['4'], currency_obj=company.currency_id) ]] - [[ formatLang(partner['3'])]] [[ company.currency_id.symbol ]] + [[ formatLang(partner['3'], currency_obj=company.currency_id) ]] - [[ formatLang(partner['2']) ]] [[ company.currency_id.symbol ]] + [[ formatLang(partner['2'], currency_obj=company.currency_id) ]] - [[ formatLang(partner['1']) ]] [[ company.currency_id.symbol ]] + [[ formatLang(partner['1'], currency_obj=company.currency_id) ]] - [[ formatLang(partner['0']) ]] [[ company.currency_id.symbol ]] + [[ formatLang(partner['0'], currency_obj=company.currency_id) ]] - [[ formatLang(partner['total']) ]] [[ company.currency_id.symbol ]] + [[ formatLang(partner['total'], currency_obj=company.currency_id) ]] @@ -251,25 +251,25 @@ [[ not_partner['name'] ]] - [[ formatLang(not_partner['direction']) ]] [[ company.currency_id.symbol ]] + [[ formatLang(not_partner['direction'], currency_obj=company.currency_id) ]] - [[ formatLang(not_partner['4'])]] [[ company.currency_id.symbol ]] + [[ formatLang(not_partner['4'], currency_obj=company.currency_id) ]] - [[ formatLang(not_partner['3'])]] [[ company.currency_id.symbol ]] + [[ formatLang(not_partner['3'], currency_obj=company.currency_id) ]] - [[ formatLang(not_partner['2']) ]] [[ company.currency_id.symbol ]] + [[ formatLang(not_partner['2'], currency_obj=company.currency_id) ]] - [[ formatLang(not_partner['1']) ]] [[ company.currency_id.symbol ]] + [[ formatLang(not_partner['1'], currency_obj=company.currency_id) ]] - [[ formatLang(not_partner['0']) ]] [[ company.currency_id.symbol ]] + [[ formatLang(not_partner['0'], currency_obj=company.currency_id) ]] - [[ formatLang(not_partner['total']) ]] [[ company.currency_id.symbol ]] + [[ formatLang(not_partner['total'], currency_obj=company.currency_id) ]] diff --git a/addons/account/report/account_balance.rml b/addons/account/report/account_balance.rml index fac964eb46d..b7e729a738e 100644 --- a/addons/account/report/account_balance.rml +++ b/addons/account/report/account_balance.rml @@ -296,7 +296,7 @@ [[ (a['type']<>'view' and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font') ]][[ '..'*(a['level']-1) ]][[ a['name'] ]] [[ (a['type']<>'view' and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font') ]][[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['debit']) ]][[ a['type']<>'view' and removeParentNode('font') ]] [[formatLang(a['debit']) ]] [[ (a['type']<>'view' and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font')]][[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['credit']) ]][[ a['type']<>'view' and removeParentNode('font') ]] [[ formatLang(a['credit']) ]] - [[ (a['type']<>'view' and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font') ]][[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['balance']) ]] [[ company.currency_id.symbol ]][[ a['type']<>'view' and removeParentNode('font') ]] [[ formatLang(a['balance']) ]] [[ company.currency_id.symbol ]] + [[ (a['type']<>'view' and setTag('para','para',{'fontName':"Helvetica"})) or removeParentNode('font') ]][[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['balance'], currency_obj=company.currency_id) ]][[ a['type']<>'view' and removeParentNode('font') ]] [[ formatLang(a['balance'], currency = company.currency_id) ]] diff --git a/addons/account/report/account_balance_sheet.py b/addons/account/report/account_balance_sheet.py index b1e51e6fc46..ce9e3c51f06 100644 --- a/addons/account/report/account_balance_sheet.py +++ b/addons/account/report/account_balance_sheet.py @@ -136,7 +136,7 @@ class report_balancesheet_horizontal(report_sxw.rml_parse, common_report_header) 'code': account.code, 'name': account.name, 'level': account.level, - 'balance':account.balance, + 'balance': account.balance != 0 and account.balance * account.user_type.sign or account.balance, 'type': account.type, } currency = account.currency_id and account.currency_id or account.company_id.currency_id diff --git a/addons/account/report/account_balance_sheet.rml b/addons/account/report/account_balance_sheet.rml index 8b9f6d1b5a3..11b37af6abe 100644 --- a/addons/account/report/account_balance_sheet.rml +++ b/addons/account/report/account_balance_sheet.rml @@ -240,8 +240,8 @@ [[ setTag('tr','tr',{'style': 'Table'+str(min(3,a['level']))}) ]] [[ (a['type'] =='view' and a['level'] >= 3) and setTag('para','para',{'style': 'terp_level_3_code_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(3,a['level']))+'_code'}) ]][[ a['code'] ]] [[ (a['type'] =='view' and a['level'] >= 3) and setTag('para','para',{'style': 'terp_level_'+str(min(3,a['level']))+'_name_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(4,a['level']))+'_name'}) ]][[ a['name'] ]] - [[ (a['level'] <>2) or removeParentNode('td') ]][[ (a['type'] =='view' and a['level'] >= 3) and setTag('para','para',{'style': 'terp_level_3_balance_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(3,a['level']))+'_balance'}) ]][[ formatLang(a['balance']) ]] [[company.currency_id.symbol ]] - [[ a['level'] == 2 or removeParentNode('td') ]][[ formatLang(a['balance']) ]] [[company.currency_id.symbol ]] + [[ (a['level'] <>2) or removeParentNode('td') ]][[ (a['type'] =='view' and a['level'] >= 3) and setTag('para','para',{'style': 'terp_level_3_balance_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(3,a['level']))+'_balance'}) ]][[ formatLang(a['balance'], currency = company.currency_id) ]] + [[ a['level'] == 2 or removeParentNode('td') ]][[ formatLang(a['balance'], currency = company.currency_id) ]] @@ -250,7 +250,7 @@ Balance: - [[ formatLang(sum_cr()) ]] [[ company.currency_id.symbol ]] + [[ formatLang(sum_cr(), currency = company.currency_id) ]] @@ -282,8 +282,8 @@ [[ setTag('tr','tr',{'style': 'Table'+str(min(3,a['level']))}) ]] [[ (a['type'] =='view' and a['level'] >= 3) and setTag('para','para',{'style': 'terp_level_3_code_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(3,a['level']))+'_code'}) ]][[ a['code'] ]] [[ (a['type'] =='view' and a['level'] >= 3) and setTag('para','para',{'style': 'terp_level_'+str(min(3,a['level']))+'_name_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(4,a['level']))+'_name'}) ]][[ a['name'] ]] - [[ (a['level'] <>2) or removeParentNode('td') ]][[ (a['type'] =='view' and a['level'] >= 3) and setTag('para','para',{'style': 'terp_level_3_balance_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(3,a['level']))+'_balance'}) ]][[ formatLang(a['balance']) ]] [[company.currency_id.symbol ]] - [[ a['level'] == 2 or removeParentNode('td') ]][[ formatLang(a['balance']) ]] [[company.currency_id.symbol ]] + [[ (a['level'] <>2) or removeParentNode('td') ]][[ (a['type'] =='view' and a['level'] >= 3) and setTag('para','para',{'style': 'terp_level_3_balance_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(3,a['level']))+'_balance'}) ]][[ formatLang(a['balance'], currency = company.currency_id) ]] + [[ a['level'] == 2 or removeParentNode('td') ]][[ formatLang(a['balance'], currency = company.currency_id) ]] @@ -292,7 +292,7 @@ Balance: - [[ formatLang(sum_dr()) ]] [[ company.currency_id.symbol ]] + [[ formatLang(sum_dr(), currency = company.currency_id) ]] diff --git a/addons/account/report/account_balance_sheet_horizontal.rml b/addons/account/report/account_balance_sheet_horizontal.rml index 0ecc907e0b4..ce442b7b136 100644 --- a/addons/account/report/account_balance_sheet_horizontal.rml +++ b/addons/account/report/account_balance_sheet_horizontal.rml @@ -207,7 +207,7 @@ - [[ a['level1']<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]][[ formatLang(a['balance1']) ]] [[ company.currency_id.symbol ]] + [[ a['level1']<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]][[ formatLang(a['balance1'], currency_obj=company.currency_id) ]] @@ -224,7 +224,7 @@ [[ ( a['level']<4 or a['name']=='Net Profit') and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]] - [[(a['code'] and a['name']) and formatLang(a['balance']) or removeParentNode('font')]] [[ company.currency_id.symbol ]] + [[(a['code'] and a['name']) and formatLang(a['balance'], currency_obj=company.currency_id) or removeParentNode('font')]] @@ -235,13 +235,13 @@ Balance: - [[ formatLang(sum_cr()) ]] [[ company.currency_id.symbol ]] + [[ formatLang(sum_cr(), currency_obj=company.currency_id) ) ]] Balance: - [[ formatLang(sum_dr()) ]] [[ company.currency_id.symbol ]] + [[ formatLang(sum_dr(), currency_obj=company.currency_id) ) ]] diff --git a/addons/account/report/account_central_journal.rml b/addons/account/report/account_central_journal.rml index fe064132cbc..534baf05abe 100644 --- a/addons/account/report/account_central_journal.rml +++ b/addons/account/report/account_central_journal.rml @@ -298,7 +298,7 @@ [[ formatLang( sum_debit(o.period_id.id, o.journal_id.id)) ]] [[ formatLang( sum_credit(o.period_id.id, o.journal_id.id)) ]] - [[ formatLang( sum_credit(o.period_id.id, o.journal_id.id)-sum_debit(o.period_id.id, o.journal_id.id) ) ]] [[ company.currency_id.symbol ]] + [[ formatLang( sum_credit(o.period_id.id, o.journal_id.id)-sum_debit(o.period_id.id, o.journal_id.id), currency_obj=company.currency_id ) ]] [[ display_currency(data) or removeParentNode('blockTable') ]] @@ -307,7 +307,7 @@ [[ formatLang( sum_debit(o.period_id.id, o.journal_id.id)) ]] [[ formatLang( sum_credit(o.period_id.id, o.journal_id.id)) ]] - [[ formatLang( sum_credit(o.period_id.id, o.journal_id.id)-sum_debit(o.period_id.id, o.journal_id.id) ) ]] [[ company.currency_id.symbol ]] + [[ formatLang( sum_credit(o.period_id.id, o.journal_id.id)-sum_debit(o.period_id.id, o.journal_id.id), currency_obj=company.currency_id ) ]] @@ -319,7 +319,7 @@ [[ line['name'] ]] [[ formatLang(line['debit']) ]] [[ formatLang(line['credit'])]] - [[ formatLang(line['credit']-line['debit']) ]] [[ company.currency_id.symbol ]] + [[ formatLang(line['credit']-line['debit'], currency_obj=company.currency_id ) ]] [[ display_currency(data) or removeParentNode('blockTable') ]] @@ -328,7 +328,7 @@ [[ line['name'] ]] [[ formatLang(line['debit']) ]] [[ formatLang(line['credit'])]] - [[ formatLang(line['credit']-line['debit']) ]] [[ company.currency_id.symbol ]] + [[ formatLang(line['credit']-line['debit'], currency_obj=company.currency_id ) ]] [[ (line['currency_id']==None or line['amount_currency']==None) and removeParentNode('font') ]] [[ formatLang(line['amount_currency'] ) ]] [[ line['currency_code'] or '' ]] diff --git a/addons/account/report/account_financial_report.py b/addons/account/report/account_financial_report.py new file mode 100644 index 00000000000..6b42bb1875d --- /dev/null +++ b/addons/account/report/account_financial_report.py @@ -0,0 +1,94 @@ +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2009 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +import time + +from report import report_sxw +from common_report_header import common_report_header +from tools.translate import _ + +class report_account_common(report_sxw.rml_parse, common_report_header): + + def __init__(self, cr, uid, name, context=None): + super(report_account_common, self).__init__(cr, uid, name, context=context) + self.localcontext.update( { + 'get_lines': self.get_lines, + 'time': time, + 'get_fiscalyear': self._get_fiscalyear, + 'get_account': self._get_account, + 'get_start_period': self.get_start_period, + 'get_end_period': self.get_end_period, + 'get_filter': self._get_filter, + 'get_start_date':self._get_start_date, + 'get_end_date':self._get_end_date, + }) + self.context = context + + def set_context(self, objects, data, ids, report_type=None): + new_ids = ids + if (data['model'] == 'ir.ui.menu'): + new_ids = 'chart_account_id' in data['form'] and [data['form']['chart_account_id']] or [] + objects = self.pool.get('account.account').browse(self.cr, self.uid, new_ids) + return super(report_account_common, self).set_context(objects, data, new_ids, report_type=report_type) + + def get_lines(self, data): + lines = [] + account_obj = self.pool.get('account.account') + currency_obj = self.pool.get('res.currency') + ids2 = self.pool.get('account.financial.report')._get_children_by_order(self.cr, self.uid, [data['form']['account_report_id'][0]], context=data['form']['used_context']) + for report in self.pool.get('account.financial.report').browse(self.cr, self.uid, ids2, context=data['form']['used_context']): + vals = { + 'name': report.name, + 'balance': report.balance, + 'type': 'report', + 'level': report.level, + } + if data['form']['enable_filter']: + vals['balance_cmp'] = self.pool.get('account.financial.report').browse(self.cr, self.uid, report.id, context=data['form']['comparison_context']).balance + lines.append(vals) + account_ids = [] + if report.type == 'accounts' and report.display_detail and report.account_ids: + account_ids = account_obj._get_children_and_consol(self.cr, self.uid, [x.id for x in report.account_ids]) + elif report.type == 'account_type' and report.account_type_ids: + account_ids = account_obj.search(self.cr, self.uid, [('user_type','in', [x.id for x in report.account_type_ids])]) + if account_ids: + for account in account_obj.browse(self.cr, self.uid, account_ids, context=data['form']['used_context']): + if account.type != 'view': + flag = False + vals = { + 'name': account.code + ' ' + account.name, + 'balance': account.balance != 0 and account.balance * account.user_type.sign or account.balance, + 'type': 'account', + 'level': 6, + 'account_type': account.type, + } + if not currency_obj.is_zero(self.cr, self.uid, account.company_id.currency_id, vals['balance']): + flag = True + if data['form']['enable_filter']: + vals['balance_cmp'] = account_obj.browse(self.cr, self.uid, account.id, context=data['form']['comparison_context']).balance + if not currency_obj.is_zero(self.cr, self.uid, account.company_id.currency_id, vals['balance_cmp']): + flag = True + if flag: + lines.append(vals) + return lines + +report_sxw.report_sxw('report.account.financial.report', 'account.financial.report', + 'addons/account/report/account_financial_report.rml', parser=report_account_common, header='internal') + diff --git a/addons/account/report/account_financial_report.rml b/addons/account/report/account_financial_report.rml new file mode 100644 index 00000000000..8dd92335266 --- /dev/null +++ b/addons/account/report/account_financial_report.rml @@ -0,0 +1,272 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [[ data['form']['account_report_id'][1] ]] + + + + + + + + + + Chart of Account + Fiscal Year + Filter By [[ get_filter(data)!='No Filter' and get_filter(data) ]] + + + [[ get_account(data) or removeParentNode('para') ]] + [[ get_fiscalyear(data) or '' ]] + [[ get_filter(data)=='No Filter' and get_filter(data) or removeParentNode('para') ]] + [[ get_filter(data)=='Date' or removeParentNode('blockTable') ]] + + Start Date + End Date + + + [[ formatLang(get_start_date(data),date=True) ]] + [[ formatLang(get_end_date(data),date=True) ]] + + + [[ get_filter(data)=='Periods' or removeParentNode('blockTable') ]] + + Start Period + End Period + + + [[ get_start_period(data) or removeParentNode('para') ]] + [[ get_end_period(data) or removeParentNode('para') ]] + + + + + + + + + + + + + [[ data['form']['enable_filter'] == 0 or removeParentNode('blockTable') ]] + + + Name + + + Balance + + + + [[ repeatIn(get_lines(data), 'a') ]] + [[ (a.get('level') <> 0) or removeParentNode('tr') ]] + [[ setTag('tr','tr',{'style': 'Table'+str(min(3,'level' in a and a.get('level') or 1))}) ]] + [[ setTag('para','para',{'style': 'terp_level_'+str(min(6,a['level']))+'_name'}) ]] [[ a.get('name') ]] + [[ a.get('level') == 4 or removeParentNode('td') ]][[ setTag('para','para',{'style': 'terp_level_'+str(min(6,a['level']))+'_balance'}) ]][[ formatLang(a.get('balance'))]] [[company.currency_id.symbol]] + [[ a.get('level') <> 4 or removeParentNode('td') ]][[ setTag('para','para',{'style': 'terp_level_'+str(min(6,a['level']))+'_balance'}) ]][[ formatLang(a.get('balance'))]] [[company.currency_id.symbol]] + + + + + + + [[ data['form']['enable_filter'] == 1 or removeParentNode('blockTable') ]] + + + Name + + + Balance + + + [[ data['form']['label_filter'] ]] + + + + [[ repeatIn(get_lines(data), 'a') ]] + [[ (a.get('level') <> 0) or removeParentNode('tr') ]] + [[ setTag('tr','tr',{'style': 'Table'+str(min(3,'level' in a and a.get('level') or 1))}) ]] + [[ setTag('para','para',{'style': 'terp_level_'+str(min(6,a['level']))+'_name'}) ]] [[ a.get('name') ]] + [[ a.get('level') == 4 or removeParentNode('td') ]][[ setTag('para','para',{'style': 'terp_level_'+str(min(6,a['level']))+'_balance'}) ]][[ formatLang(a.get('balance'))]] [[company.currency_id.symbol]] + [[ a.get('level') <> 4 or removeParentNode('td') ]][[ setTag('para','para',{'style': 'terp_level_'+str(min(6,a['level']))+'_balance'}) ]][[ formatLang(a.get('balance'))]] [[company.currency_id.symbol]] + [[ a.get('level') == 4 or removeParentNode('td') ]][[ setTag('para','para',{'style': 'terp_level_'+str(min(6,a['level']))+'_balance'}) ]][[ formatLang(a.get('balance_cmp'))]] [[company.currency_id.symbol]] + [[ a.get('level') <> 4 or removeParentNode('td') ]][[ setTag('para','para',{'style': 'terp_level_'+str(min(6,a['level']))+'_balance'}) ]][[ formatLang(a.get('balance_cmp'))]] [[company.currency_id.symbol]] + + + + + + + diff --git a/addons/account/report/account_general_journal.rml b/addons/account/report/account_general_journal.rml index 6424a24f8aa..5ca6e828e49 100644 --- a/addons/account/report/account_general_journal.rml +++ b/addons/account/report/account_general_journal.rml @@ -273,7 +273,7 @@ [[ formatLang(sum_debit()) ]] [[ formatLang( sum_credit()) ]] - [[ formatLang( sum_debit()- sum_credit()) ]] [[ company.currency_id.symbol ]] + [[ formatLang( sum_debit()- sum_credit(), currency_obj=company.currency_id) ]] [[ display_currency(data) or removeParentNode('blockTable') ]] @@ -290,7 +290,7 @@ [[ formatLang(sum_debit()) ]] [[ formatLang( sum_credit()) ]] - [[ formatLang( sum_credit()- sum_debit()) ]] [[ company.currency_id.symbol ]] + [[ formatLang( sum_credit()- sum_debit(), currency_obj=company.currency_id) ]] @@ -311,7 +311,7 @@ [[ formatLang(sum_credit_period(o.id)) ]] - [[ formatLang(sum_credit_period(o.id)-sum_debit_period(o.id)) ]] [[ company.currency_id.symbol ]] + [[ formatLang(sum_credit_period(o.id)-sum_debit_period(o.id), currency_obj=company.currency_id) ]] @@ -337,7 +337,7 @@ [[ formatLang(sum_credit_period(o.id)) ]] - [[ formatLang(sum_credit_period(o.id)-sum_debit_period(o.id)) ]] [[ company.currency_id.symbol ]] + [[ formatLang(sum_credit_period(o.id)-sum_debit_period(o.id), currency_obj=company.currency_id) ]] @@ -358,7 +358,7 @@ [[ formatLang(line['credit']) ]] - [[ formatLang(line['credit']-line['debit'] ) ]] [[ company.currency_id.symbol ]] + [[ formatLang(line['credit']-line['debit'], currency_obj=company.currency_id ) ]] @@ -371,7 +371,7 @@ [[ line['name'] ]] [[ formatLang(line['debit'] )]] [[ formatLang(line['credit']) ]] - [[ formatLang(line['credit']-line['debit'] ) ]] [[ company.currency_id.symbol ]] + [[ formatLang(line['credit']-line['debit'], currency_obj=company.currency_id ) ]] [[ (line['currency_id']==None or line['amount_currency']==None) and removeParentNode('font') ]] [[ formatLang(line['amount_currency'] ) ]] [[ line['currency_code'] or '' ]] diff --git a/addons/account/report/account_general_ledger.rml b/addons/account/report/account_general_ledger.rml index 7a8454d714a..d19afed52aa 100644 --- a/addons/account/report/account_general_ledger.rml +++ b/addons/account/report/account_general_ledger.rml @@ -476,10 +476,10 @@ [[ formatLang(sum_credit_account(o), digits=get_digits(dp='Account')) ]] - [[ formatLang(sum_balance_account(o), digits=get_digits(dp='Account')) ]] [[ company.currency_id.symbol ]] + [[ formatLang(sum_balance_account(o), digits=get_digits(dp='Account'),currency_obj=company.currency_id) ]] - [[ o.currency_id and formatLang(sum_currency_amount_account(o), digits=get_digits(dp='Account')) + o.currency_id.symbol or '' ]] + [[ o.currency_id and formatLang(sum_currency_amount_account(o), digits=get_digits(dp='Account'),currency_obj=o.currency_id) or '' ]] @@ -515,7 +515,7 @@ [[ formatLang(line['credit'], digits=get_digits(dp='Account')) ]] - [[ formatLang(line['progress'], digits=get_digits(dp='Account')) ]] [[ company.currency_id.symbol ]] + [[ formatLang(line['progress'], digits=get_digits(dp='Account'),currency_obj=company.currency_id) ]] [[ (line.has_key('currency_id') and line['currency_id']==None or line['amount_currency']==None) and removeParentNode('font') ]] [[ formatLang(line['amount_currency'])]] [[ line['currency_code'] or '']] @@ -572,7 +572,7 @@ [[ formatLang(sum_credit_account(o), digits=get_digits(dp='Account')) ]] - [[ formatLang(sum_balance_account(o), digits=get_digits(dp='Account')) ]] [[ company.currency_id.symbol ]] + [[ formatLang(sum_balance_account(o), digits=get_digits(dp='Account'),currency_obj=company.currency_id) ]] @@ -608,7 +608,7 @@ [[ formatLang(line['credit'], digits=get_digits(dp='Account')) ]] - [[ formatLang(line['progress'], digits=get_digits(dp='Account')) ]] [[ company.currency_id.symbol ]] + [[ formatLang(line['progress'], digits=get_digits(dp='Account'),currency_obj=company.currency_id) ]] diff --git a/addons/account/report/account_general_ledger_landscape.rml b/addons/account/report/account_general_ledger_landscape.rml index 96a78b5fd9b..7495d889b52 100644 --- a/addons/account/report/account_general_ledger_landscape.rml +++ b/addons/account/report/account_general_ledger_landscape.rml @@ -505,10 +505,10 @@ [[ formatLang(sum_credit_account(o), digits=get_digits(dp='Account')) ]] - [[ formatLang(sum_balance_account(o), digits=get_digits(dp='Account')) ]] [[ company.currency_id.symbol ]] + [[ formatLang(sum_balance_account(o), digits=get_digits(dp='Account'), currency = company.currency_id) ]] - [[ o.currency_id and formatLang(sum_currency_amount_account(o), digits=get_digits(dp='Account')) + o.currency_id.symbol or '' ]] + [[ o.currency_id and formatLang(sum_currency_amount_account(o), digits=get_digits(dp='Account'),currency_obj=o.currency_id) or '' ]] @@ -547,7 +547,7 @@ [[ formatLang(line['credit'], digits=get_digits(dp='Account')) ]] - [[ formatLang(line['progress'], digits=get_digits(dp='Account')) ]] [[ company.currency_id.symbol ]] + [[ formatLang(line['progress'], digits=get_digits(dp='Account'), currency_obj=company.currency_id) ]] [[ (line.has_key('currency_id') and line['currency_id']==None or line['amount_currency']==None) and removeParentNode('font') ]] [[ formatLang(line['amount_currency'])]] [[ line['currency_code'] or '']] @@ -607,7 +607,7 @@ [[ formatLang(sum_credit_account(o), digits=get_digits(dp='Account')) ]] - [[ formatLang(sum_balance_account(o), digits=get_digits(dp='Account')) ]] [[ company.currency_id.symbol ]] + [[ formatLang(sum_balance_account(o), digits=get_digits(dp='Account'), currency_obj=company.currency_id) ]] @@ -646,7 +646,7 @@ [[ formatLang(line['credit'], digits=get_digits(dp='Account')) ]] - [[ formatLang(line['progress'], digits=get_digits(dp='Account')) ]] [[ company.currency_id.symbol ]] + [[ formatLang(line['progress'], digits=get_digits(dp='Account'),currency_obj=company.currency_id) ]] diff --git a/addons/account/report/account_journal.rml b/addons/account/report/account_journal.rml index 3825eb58d76..76bf1bb4bfa 100644 --- a/addons/account/report/account_journal.rml +++ b/addons/account/report/account_journal.rml @@ -247,8 +247,8 @@ - [[ formatLang(sum_debit(o.period_id.id, o.journal_id.id)) ]] [[ company.currency_id.symbol ]] - [[ formatLang(sum_credit(o.period_id.id, o.journal_id.id)) ]] [[ company.currency_id.symbol ]] + [[ formatLang(sum_debit(o.period_id.id, o.journal_id.id), currency_obj=company.currency_id) ]] + [[ formatLang(sum_credit(o.period_id.id, o.journal_id.id), currency_obj=company.currency_id) ]] [[lines(o.period_id.id, o.journal_id.id) or removeParentNode('story') ]] @@ -258,8 +258,8 @@ [[ line.account_id.code ]] [[ line.partner_id and strip_name(line.partner_id.name,17) ]] [[ strip_name(line.name,27) ]] - [[ formatLang(line.debit) ]] [[ company.currency_id.symbol ]] - [[ formatLang(line.credit) ]] [[ company.currency_id.symbol ]] + [[ formatLang(line.debit, currency_obj=company.currency_id) ]] + [[ formatLang(line.credit, currency_obj=company.currency_id) ]] @@ -282,8 +282,8 @@ - [[ formatLang(sum_debit(o.period_id.id, o.journal_id.id)) ]] [[ company.currency_id.symbol ]] - [[ formatLang(sum_credit(o.period_id.id, o.journal_id.id)) ]] [[ company.currency_id.symbol ]] + [[ formatLang(sum_debit(o.period_id.id, o.journal_id.id), currency_obj=company.currency_id) ]] + [[ formatLang(sum_credit(o.period_id.id, o.journal_id.id), currency_obj=company.currency_id) ]] @@ -295,9 +295,9 @@ [[ line.account_id.code ]] [[ line.partner_id and strip_name(line.partner_id.name,15) ]] [[ strip_name(line.name,17) ]] - [[ formatLang(line.debit) ]] [[ company.currency_id.symbol ]] - [[ formatLang(line.credit) ]] [[ company.currency_id.symbol ]] - [[ line.currency_id and formatLang(line.amount_currency) or '' ]] [[ line.currency_id.symbol or '']] + [[ formatLang(line.debit, currency_obj=company.currency_id) ]] + [[ formatLang(line.credit, currency_obj=company.currency_id) ]] + [[ line.currency_id and formatLang(line.amount_currency, currency_obj=line.currency_id) or '' ]] diff --git a/addons/account/report/account_partner_balance.rml b/addons/account/report/account_partner_balance.rml index baf43435a44..8953aa8d1cf 100644 --- a/addons/account/report/account_partner_balance.rml +++ b/addons/account/report/account_partner_balance.rml @@ -241,16 +241,16 @@ [[ formatLang(sum_debit()) ]] [[ formatLang(sum_credit()) ]] - [[ formatLang((sum_debit()-sum_credit())) ]] [[ company.currency_id.symbol ]] - [[ formatLang(sum_litige()) ]] [[ company.currency_id.symbol ]] + [[ formatLang((sum_debit()-sum_credit()), currency_obj=company.currency_id) ]] + [[ formatLang(sum_litige(), currency_obj=company.currency_id) ]] [[ repeatIn(lines(), 'a') ]][[ (a['type']==3 and setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ a['ref'] ]] [[ a['type']==3 and a['code'] ]] [[ (a['type']==3 and setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ a['name'] ]] [[ (a['type']==3 and setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ formatLang(a['debit']) ]] [[ (a['type']==3 and setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ formatLang(a['credit']) ]] - [[ (a['type']==3 and setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ formatLang(a['balance']) ]] [[ company.currency_id.symbol ]] - [[ (a['type']==3 and setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ formatLang(a['enlitige'] or 0.0) ]] [[ company.currency_id.symbol ]] + [[ (a['type']==3 and setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ formatLang(a['balance'], currency_obj=company.currency_id) ]] + [[ (a['type']==3 and setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ formatLang(a['enlitige'] or 0.0, currency_obj=company.currency_id) ]] diff --git a/addons/account/report/account_partner_ledger.rml b/addons/account/report/account_partner_ledger.rml index b1fc8ae712f..11d9f6eff1b 100644 --- a/addons/account/report/account_partner_ledger.rml +++ b/addons/account/report/account_partner_ledger.rml @@ -477,7 +477,7 @@ [[ formatLang((sum_credit_partner(p))) ]] - [[ formatLang((sum_debit_partner(p) - sum_credit_partner(p))) ]] [[ company.currency_id.symbol ]] + [[ formatLang((sum_debit_partner(p) - sum_credit_partner(p)), currency_obj=company.currency_id) ]] @@ -497,7 +497,7 @@ [[ formatLang(get_intial_balance(p)[0][1]) ]] - [[ formatLang(get_intial_balance(p)[0][2]) ]] [[ company.currency_id.symbol ]] + [[ formatLang(get_intial_balance(p)[0][2], currency_obj=company.currency_id) ]] @@ -528,7 +528,7 @@ [[ formatLang((line['credit'])) ]] - [[ formatLang((line['progress'])) ]] [[ company.currency_id.symbol ]] + [[ formatLang((line['progress']), currency_obj=company.currency_id) ]] @@ -581,7 +581,7 @@ [[ formatLang((sum_credit_partner(p))) ]] - [[ formatLang((sum_debit_partner(p) - sum_credit_partner(p))) ]] [[ company.currency_id.symbol ]] + [[ formatLang((sum_debit_partner(p) - sum_credit_partner(p)), currency_obj=company.currency_id) ]] @@ -604,7 +604,7 @@ [[ formatLang(get_intial_balance(p)[0][1]) ]] - [[ formatLang(get_intial_balance(p)[0][2]) ]] [[ company.currency_id.symbol ]] + [[ formatLang(get_intial_balance(p)[0][2], currency_obj=company.currency_id) ]] @@ -640,7 +640,7 @@ [[ formatLang((line['credit'])) ]] - [[ formatLang((line['progress'])) ]] [[ company.currency_id.symbol ]] + [[ formatLang((line['progress']), currency_obj=company.currency_id) ]] diff --git a/addons/account/report/account_partner_ledger_other.rml b/addons/account/report/account_partner_ledger_other.rml index 7c134270c5c..54842096496 100644 --- a/addons/account/report/account_partner_ledger_other.rml +++ b/addons/account/report/account_partner_ledger_other.rml @@ -482,7 +482,7 @@ [[ formatLang((sum_credit_partner(p))) ]] - [[ formatLang((sum_debit_partner(p) - sum_credit_partner(p))) ]] [[ company.currency_id.symbol ]] + [[ formatLang((sum_debit_partner(p) - sum_credit_partner(p)), currency_obj=company.currency_id) ]] @@ -502,7 +502,7 @@ [[ formatLang(get_intial_balance(p)[0][1]) ]] - [[ formatLang(get_intial_balance(p)[0][2]) ]] [[ company.currency_id.symbol ]] + [[ formatLang(get_intial_balance(p)[0][2], currency_obj=company.currency_id) ]] @@ -533,7 +533,7 @@ [[ formatLang((line['credit'])) ]] - [[ formatLang((line['progress'])) ]] [[ company.currency_id.symbol ]] + [[ formatLang((line['progress']), currency_obj=company.currency_id) ]] @@ -590,7 +590,7 @@ [[ formatLang((sum_credit_partner(p))) ]] - [[ formatLang((sum_debit_partner(p) - sum_credit_partner(p))) ]] [[ company.currency_id.symbol ]] + [[ formatLang((sum_debit_partner(p) - sum_credit_partner(p)), currency_obj=company.currency_id) ]] @@ -613,7 +613,7 @@ [[ formatLang(get_intial_balance(p)[0][1]) ]] - [[ formatLang(get_intial_balance(p)[0][2]) ]] [[ company.currency_id.symbol ]] + [[ formatLang(get_intial_balance(p)[0][2], currency_obj=company.currency_id) ]] @@ -649,7 +649,7 @@ [[ formatLang((line['credit'])) ]] - [[ formatLang((line['progress'])) ]] [[ company.currency_id.symbol ]] + [[ formatLang((line['progress']), currency_obj=company.currency_id) ]] diff --git a/addons/account/report/account_print_invoice.rml b/addons/account/report/account_print_invoice.rml index 0350fbf7379..db8f752a56d 100644 --- a/addons/account/report/account_print_invoice.rml +++ b/addons/account/report/account_print_invoice.rml @@ -263,7 +263,7 @@ [[ formatLang(l.discount, dp='Account') ]] - [[ formatLang(l.price_subtotal, dp='Account') ]] [[ o.currency_id.symbol ]] + [[ formatLang(l.price_subtotal, dp='Account', currency_obj=o.currency_id) ]] @@ -309,7 +309,7 @@ Net Total: - [[ formatLang(o.amount_untaxed, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]] + [[ formatLang(o.amount_untaxed, digits=get_digits(dp='Account'), currency_obj=o.currency_id) ]] @@ -322,7 +322,7 @@ Taxes: - [[ formatLang(o.amount_tax, dp='Account') ]] [[ o.currency_id.symbol ]] + [[ formatLang(o.amount_tax, dp='Account', currency_obj=o.currency_id) ]] @@ -335,7 +335,7 @@ Total: - [[ formatLang(o.amount_total, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]] + [[ formatLang(o.amount_total, digits=get_digits(dp='Account'), currency_obj=o.currency_id) ]] @@ -368,10 +368,10 @@ [[ t.name ]] - [[ formatLang(t.base, dp='Account') ]] [[ o.currency_id.symbol ]] + [[ formatLang(t.base, dp='Account', currency_obj=o.currency_id) ]] - [[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]] [[ formatLang(t.amount, digits=get_digits(dp='Account')) ]] [[ o.currency_id.symbol ]] + [[ (t.tax_code_id and t.tax_code_id.notprintable) and removeParentNode('blockTable') or '' ]] [[ formatLang(t.amount, digits=get_digits(dp='Account'), currency_obj=o.currency_id) ]] diff --git a/addons/account/report/account_print_overdue.rml b/addons/account/report/account_print_overdue.rml index 0797d544f9b..25ccad25377 100644 --- a/addons/account/report/account_print_overdue.rml +++ b/addons/account/report/account_print_overdue.rml @@ -219,7 +219,7 @@ [[ (line['account_id']['type'] == 'receivable' and formatLang(line['credit']) or 0) or (line['account_id']['type'] == 'payable' and formatLang(line['debit'] * -1) or 0) ]] - [[ formatLang((line['date_maturity'] < time.strftime('%Y-%m-%d'))) and formatLang(line['debit'] - line['credit']) ]] [[ company.currency_id.symbol ]] + [[ formatLang((line['date_maturity'] < time.strftime('%Y-%m-%d'))) and formatLang(line['debit'] - line['credit'], currency_obj=company.currency_id) ] [[ line['blocked'] and 'X' or '' ]] @@ -244,7 +244,7 @@ [[ formatLang((reduce(lambda x, y: x + ((y['account_id']['type'] == 'receivable' and y['credit'] or 0) or (y['account_id']['type'] == 'payable' and y['debit'] * -1 or 0)), getLines(o), 0))) ]] - [[ formatLang((reduce(lambda x, y: x + (y['debit'] - y['credit']), filter(lambda x: x['date_maturity'] < time.strftime('%Y-%m-%d'), getLines(o)), 0))) ]] [[ company.currency_id.symbol ]] + [[ formatLang((reduce(lambda x, y: x + (y['debit'] - y['credit']), filter(lambda x: x['date_maturity'] < time.strftime('%Y-%m-%d'), getLines(o)), 0)), currency_obj=company.currency_id) ]] @@ -264,7 +264,7 @@ Balance : - [[ formatLang((reduce(lambda x, y: x +(y['debit'] - y['credit']), getLines(o), 0))) ]] [[ company.currency_id.symbol ]] + [[ formatLang((reduce(lambda x, y: x +(y['debit'] - y['credit']), getLines(o), 0)), currency_obj=company.currency_id) ]] @@ -279,10 +279,10 @@ - Total amount due: [[ formatLang((reduce(lambda x, y: x + (y['debit'] - y['credit']), getLines(o), 0))) ]] [[ company.currency_id.symbol ]]. + Total amount due: [[ formatLang((reduce(lambda x, y: x + (y['debit'] - y['credit']), getLines(o), 0)), currency_obj=company.currency_id) ]]. - \ No newline at end of file + diff --git a/addons/account/report/account_profit_horizontal.rml b/addons/account/report/account_profit_horizontal.rml index bf19d0b61fc..e4ed9139fa0 100644 --- a/addons/account/report/account_profit_horizontal.rml +++ b/addons/account/report/account_profit_horizontal.rml @@ -221,7 +221,7 @@ - [[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]][[ formatLang(abs(a['balance'])) ]] [[ company.currency_id.symbol ]] + [[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]][[ formatLang(abs(a['balance']), currency_obj=company.currency_id) ]] @@ -234,7 +234,7 @@ - [[ a['level1']<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]][[(a['code1'] and a['name1']) and formatLang(abs(a['balance1'])) or removeParentNode('font') ]] [[ company.currency_id.symbol ]] + [[ a['level']<4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]][[(a['code1'] and a['name1']) and formatLang(abs(a['balance1']), currency_obj=company.currency_id) or removeParentNode('font') ]] @@ -247,7 +247,7 @@ [[ final_result()['type'] == 'Net Profit' and final_result()['type'] or '' ]] - [[ final_result()['balance'] and final_result()['type'] == 'Net Profit' and formatLang(abs(final_result()['balance'])) ]] [[ company.currency_id.symbol ]] + [[ final_result()['balance'] and final_result()['type'] == 'Net Profit' and formatLang(abs(final_result()['balance']), currency_obj=company.currency_id) ]] @@ -256,7 +256,7 @@ [[ final_result()['type'] == 'Net Loss' and final_result()['type'] or '' ]] - [[ 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 ]] + [[ final_result()['balance'] and final_result()['type'] == 'Net Loss' and formatLang(abs(final_result()['balance']), currency_obj=company.currency_id) ]] @@ -267,13 +267,13 @@ Total: - [[ formatLang(abs(sum_dr())) ]] [[ company.currency_id.symbol ]] + [[ formatLang(abs(sum_dr()), currency_obj=company.currency_id) ]] Total: - [[ formatLang(abs(sum_cr())) ]] [[ company.currency_id.symbol ]] + [[ formatLang(abs(sum_cr()), currency_obj=company.currency_id) ]] diff --git a/addons/account/report/account_profit_loss.py b/addons/account/report/account_profit_loss.py index 4c8896ee630..27182cdbd21 100644 --- a/addons/account/report/account_profit_loss.py +++ b/addons/account/report/account_profit_loss.py @@ -141,11 +141,15 @@ class report_pl_account_horizontal(report_sxw.rml_parse, common_report_header): 'code': cal_list['expense'][i].code, 'name': cal_list['expense'][i].name, 'level': cal_list['expense'][i].level, - 'balance':cal_list['expense'][i].balance, + 'balance': cal_list['expense'][i].balance != 0 and \ + cal_list['expense'][i].balance * cal_list['expense'][i].user_type.sign or \ + cal_list['expense'][i].balance, 'code1': cal_list['income'][i].code, 'name1': cal_list['income'][i].name, 'level1': cal_list['income'][i].level, - 'balance1':cal_list['income'][i].balance, + 'balance1': cal_list['income'][i].balance != 0 and \ + cal_list['income'][i].balance * cal_list['income'][i].user_type.sign or \ + cal_list['income'][i].balance, } self.result_temp.append(temp) else: @@ -158,7 +162,9 @@ class report_pl_account_horizontal(report_sxw.rml_parse, common_report_header): 'code1': cal_list['income'][i].code, 'name1': cal_list['income'][i].name, 'level1': cal_list['income'][i].level, - 'balance1':cal_list['income'][i].balance, + 'balance1': cal_list['income'][i].balance != 0 and \ + cal_list['income'][i].balance * cal_list['income'][i].user_type.sign \ + or cal_list['income'][i].balance, } self.result_temp.append(temp) if i < len(cal_list['expense']): @@ -166,7 +172,9 @@ class report_pl_account_horizontal(report_sxw.rml_parse, common_report_header): 'code': cal_list['expense'][i].code, 'name': cal_list['expense'][i].name, 'level': cal_list['expense'][i].level, - 'balance':cal_list['expense'][i].balance, + 'balance': cal_list['expense'][i].balance != 0 and \ + cal_list['expense'][i].balance * cal_list['expense'][i].user_type.sign \ + or cal_list['expense'][i].balance, 'code1': '', 'name1': '', 'level1': False, diff --git a/addons/account/report/account_profit_loss.rml b/addons/account/report/account_profit_loss.rml index f0c549e7412..362381be6a8 100644 --- a/addons/account/report/account_profit_loss.rml +++ b/addons/account/report/account_profit_loss.rml @@ -228,8 +228,8 @@ [[ setTag('tr','tr',{'style': 'Table'+str(min(3,a.level))}) ]] [[ (a.type =='view' and a.level >= 3) and setTag('para','para',{'style': 'terp_level_3_code_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(3,a.level))+'_code'}) ]][[ a.code ]] [[ (a.type =='view' and a.level >= 3) and setTag('para','para',{'style': 'terp_level_'+str(min(3,a.level))+'_name_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(4,a.level))+'_name'}) ]][[ a.name ]] - [[ (a.level <>2) or removeParentNode('td') ]][[ (a.type =='view' and a.level >= 3) and setTag('para','para',{'style': 'terp_level_3_balance_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(3,a.level))+'_balance'}) ]][[ formatLang(a.balance) ]] [[company.currency_id.symbol ]] - [[ a.level == 2 or removeParentNode('td') ]][[ formatLang(a.balance) ]] [[company.currency_id.symbol ]] + [[ (a.level <>2) or removeParentNode('td') ]][[ (a.type =='view' and a.level >= 3) and setTag('para','para',{'style': 'terp_level_3_balance_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(3,a.level))+'_balance'}) ]][[ formatLang(a.balance * a.user_type.sign, currency_obj=company.currency_id.symbol) + [[ a.level == 2 or removeParentNode('td') ]][[ formatLang(a.balance * a.user_type.sign, currency_obj=company.currency_id) ]] @@ -241,7 +241,7 @@ [[ final_result()['type'] == 'Net Profit' and final_result()['type'] or removeParentNode('blockTable') ]] - [[ final_result()['balance'] and final_result()['type'] == 'Net Profit' and formatLang(final_result()['balance']) ]] [[ final_result()['balance'] and final_result()['type'] == 'Net Profit' and company.currency_id.symbol ]] + [[ final_result()['balance'] and final_result()['type'] == 'Net Profit' and formatLang(final_result()['balance'], currency_obj=company.currency_id) ]] @@ -251,7 +251,7 @@ Total: - [[ formatLang(sum_dr()) ]] [[ company.currency_id.symbol ]] + [[ formatLang(sum_dr(), currency_obj=company.currency_id) ]] @@ -277,8 +277,8 @@ [[ setTag('tr','tr',{'style': 'Table'+str(min(3,a.level))}) ]] [[ (a.type =='view' and a.level >= 3) and setTag('para','para',{'style': 'terp_level_3_code_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(3,a.level))+'_code'}) ]][[ a.code ]] [[ (a.type =='view' and a.level >= 3) and setTag('para','para',{'style': 'terp_level_'+str(min(3,a.level))+'_name_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(4,a.level))+'_name'}) ]][[ a.name ]] - [[ (a.level <>2) or removeParentNode('td') ]][[ (a.type =='view' and a.level >= 3) and setTag('para','para',{'style': 'terp_level_3_balance_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(3,a.level))+'_balance'}) ]][[ formatLang(a.balance) ]] [[company.currency_id.symbol ]] - [[ a.level == 2 or removeParentNode('td') ]][[ formatLang(a.balance) ]] [[company.currency_id.symbol ]] + [[ (a.level <>2) or removeParentNode('td') ]][[ (a.type =='view' and a.level >= 3) and setTag('para','para',{'style': 'terp_level_3_balance_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(3,a.level))+'_balance'}) ]][[ formatLang(a.balance * a.user_type.sign, currency_obj=company.currency_id) ]] + [[ a.level == 2 or removeParentNode('td') ]][[ formatLang(a.balance * a.user_type.sign, currency_obj=company.currency_id) ]] @@ -290,7 +290,7 @@ [[ final_result()['type'] == 'Net Loss' and final_result()['type'] or removeParentNode('blockTable') ]] - [[ final_result()['balance'] and final_result()['type'] == 'Net Loss' and formatLang(final_result()['balance']) ]] [[ final_result()['balance'] and final_result()['type'] == 'Net Loss' and company.currency_id.symbol ]] + [[ final_result()['balance'] and final_result()['type'] == 'Net Loss' and formatLang(final_result()['balance'], currency_obj=company.currency_id) ]] @@ -300,7 +300,7 @@ Total: - [[ formatLang(sum_cr()) ]] [[ company.currency_id.symbol ]] + [[ formatLang(sum_cr(), currency_obj=company.currency_id) ]] diff --git a/addons/account/report/account_tax_code.rml b/addons/account/report/account_tax_code.rml index 7489ac72a39..10a7c76a821 100644 --- a/addons/account/report/account_tax_code.rml +++ b/addons/account/report/account_tax_code.rml @@ -129,10 +129,10 @@ [[ line['name'] ]] - [[ formatLang(line['debit']) ]] [[ company.currency_id.symbol]] + [[ formatLang(line['debit'], currency_obj=company.currency_id) ]] - [[ formatLang(line['credit']) ]] [[ company.currency_id.symbol]] + [[ formatLang(line['credit'], currency_obj=company.currency_id) ]] @@ -141,4 +141,4 @@ - \ No newline at end of file + diff --git a/addons/account/report/account_tax_report.rml b/addons/account/report/account_tax_report.rml index de4aa415fef..f489ee1143e 100644 --- a/addons/account/report/account_tax_report.rml +++ b/addons/account/report/account_tax_report.rml @@ -153,7 +153,7 @@ [[ repeatIn(get_lines(data['form']['based_on'], data['form']['company_id']), 'o') ]][[ (o['level']) ]] [[ (len(o['level'])<5 and setTag('para','para',{'fontName':'Helvetica-Bold'})) or removeParentNode('font') ]][[ o['code'] ]] [[ o['name'] ]] [[ len(o['level'])<5 and setTag('para','para',{'fontName':"Helvetica-Bold"}) or removeParentNode('font')]][[ o['type']=='view' and removeParentNode('font') ]][[ formatLang(o['debit']) ]][[ o['type']<>'view' and removeParentNode('font') ]][[ formatLang(o['debit']) ]] [[ len(o['level'])<5 and setTag('para','para',{'fontName':"Helvetica-Bold"}) or removeParentNode('font')]][[ o['type']=='view' and removeParentNode('font') ]][[ formatLang(o['credit']) ]][[ o['type']<>'view' and removeParentNode('font') ]][[ formatLang(o['credit'])]] - [[ len(o['level'])<5 and setTag('para','para',{'fontName':"Helvetica-Bold"}) or removeParentNode('font')]][[ o['type']=='view' and removeParentNode('font') ]][[ formatLang(o['tax_amount']) ]] [[ company.currency_id.symbol ]][[ o['type']<>'view' and removeParentNode('font') ]][[ formatLang(o['tax_amount']) ]] [[ company.currency_id.symbol ]] + [[ len(o['level'])<5 and setTag('para','para',{'fontName':"Helvetica-Bold"}) or removeParentNode('font')]][[ o['type']=='view' and removeParentNode('font') ]][[ formatLang(o['tax_amount'], currency_obj=company.currency_id) ]][[ o['type']<>'view' and removeParentNode('font') ]][[ formatLang(o['tax_amount'], currency_obj=company.currency_id) ]] diff --git a/addons/account/security/ir.model.access.csv b/addons/account/security/ir.model.access.csv index cd945a2248d..79e4dbb0c03 100644 --- a/addons/account/security/ir.model.access.csv +++ b/addons/account/security/ir.model.access.csv @@ -67,6 +67,7 @@ "access_account_fiscalyear_employee","account.fiscalyear employee","model_account_fiscalyear","base.group_user",1,0,0,0 "access_res_currency_account_manager","res.currency account manager","base.model_res_currency","group_account_manager",1,1,1,1 "access_res_currency_rate_account_manager","res.currency.rate account manager","base.model_res_currency_rate","group_account_manager",1,1,1,1 +"access_res_currency_rate_type_account_manager","res.currency.rate.type account manager","base.model_res_currency_rate_type","group_account_manager",1,1,1,1 "access_account_invoice_user","account.invoice user","model_account_invoice","base.group_user",1,0,0,0 "access_account_invoice_user","account.invoice.line user","model_account_invoice_line","base.group_user",1,0,0,0 "access_account_payment_term_partner_manager","account.payment.term partner manager","model_account_payment_term","base.group_user",1,0,0,0 @@ -127,4 +128,7 @@ "access_account_sequence_fiscal_year_sale_user","account.sequence.fiscalyear.sale.user","model_account_sequence_fiscalyear","base.group_sale_salesman",1,1,1,0 "access_account_sequence_fiscal_year_sale_manager","account.sequence.fiscalyear.sale.manager","model_account_sequence_fiscalyear","base.group_sale_manager",1,1,1,1 "access_account_treasury_report_manager","account.treasury.report.manager","model_account_treasury_report","account.group_account_manager",1,0,0,0 +"access_account_financial_report","account.financial.report","model_account_financial_report","account.group_account_user",1,1,1,1 +"access_account_financial_report_invoice","account.financial.report invoice","model_account_financial_report","account.group_account_invoice",1,0,0,0 +"access_account_financial_report_manager","account.financial.report","model_account_financial_report","account.group_account_manager",1,1,1,1 diff --git a/addons/account/wizard/__init__.py b/addons/account/wizard/__init__.py index caed6fc3977..d82eff62142 100644 --- a/addons/account/wizard/__init__.py +++ b/addons/account/wizard/__init__.py @@ -47,6 +47,7 @@ import account_open_closed_fiscalyear import account_invoice_state import account_chart import account_tax_chart +import account_financial_report #TODO: remove this file no moe used # also remove related view fiel diff --git a/addons/account/wizard/account_financial_report.py b/addons/account/wizard/account_financial_report.py new file mode 100644 index 00000000000..de9cae3a00c --- /dev/null +++ b/addons/account/wizard/account_financial_report.py @@ -0,0 +1,86 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from osv import fields, osv + +class accounting_report(osv.osv_memory): + _name = "accounting.report" + _inherit = "account.common.report" + _description = "Accounting Report" + + _columns = { + 'enable_filter': fields.boolean('Enable Comparison'), + 'account_report_id': fields.many2one('account.financial.report', 'Account Reports', required=True), + 'label_filter': fields.char('Column Label', size=32, help="This label will be displayed on report to show the balance computed for the given comparison filter."), + 'fiscalyear_id_cmp': fields.many2one('account.fiscalyear', 'Fiscal Year', help='Keep empty for all open fiscal year'), + 'filter_cmp': fields.selection([('filter_no', 'No Filters'), ('filter_date', 'Date'), ('filter_period', 'Periods')], "Filter by", required=True), + 'period_from_cmp': fields.many2one('account.period', 'Start Period'), + 'period_to_cmp': fields.many2one('account.period', 'End Period'), + 'date_from_cmp': fields.date("Start Date"), + 'date_to_cmp': fields.date("End Date"), + } + + _defaults = { + 'filter_cmp': 'filter_no', + 'target_move': 'posted', + } + + def _build_comparison_context(self, cr, uid, ids, data, context=None): + if context is None: + context = {} + result = {} + result['fiscalyear'] = 'fiscalyear_id_cmp' in data['form'] and data['form']['fiscalyear_id_cmp'] or False + result['journal_ids'] = 'journal_ids' in data['form'] and data['form']['journal_ids'] or False + result['chart_account_id'] = 'chart_account_id' in data['form'] and data['form']['chart_account_id'] or False + if data['form']['filter_cmp'] == 'filter_date': + result['date_from'] = data['form']['date_from_cmp'] + result['date_to'] = data['form']['date_to_cmp'] + elif data['form']['filter_cmp'] == 'filter_period': + if not data['form']['period_from_cmp'] or not data['form']['period_to_cmp']: + raise osv.except_osv(_('Error'),_('Select a starting and an ending period')) + result['period_from'] = data['form']['period_from_cmp'] + result['period_to'] = data['form']['period_to_cmp'] + return result + + def check_report(self, cr, uid, ids, context=None): + if context is None: + context = {} + res = super(accounting_report, self).check_report(cr, uid, ids, context=context) + data = {} + data['form'] = self.read(cr, uid, ids, ['account_report_id', 'date_from_cmp', 'date_to_cmp', 'fiscalyear_id_cmp', 'journal_ids', 'period_from_cmp', 'period_to_cmp', 'filter_cmp', 'chart_account_id', 'target_move'], context=context)[0] + for field in ['fiscalyear_id_cmp', 'chart_account_id', 'period_from_cmp', 'period_to_cmp', 'account_report_id']: + if isinstance(data['form'][field], tuple): + data['form'][field] = data['form'][field][0] + comparison_context = self._build_comparison_context(cr, uid, ids, data, context=context) + res['datas']['form']['comparison_context'] = comparison_context + return res + + def _print_report(self, cr, uid, ids, data, context=None): + data['form'].update(self.read(cr, uid, ids, ['date_from_cmp', 'date_to_cmp', 'fiscalyear_id_cmp', 'period_from_cmp', 'period_to_cmp', 'filter_cmp', 'account_report_id', 'enable_filter', 'label_filter'], context=context)[0]) + return { + 'type': 'ir.actions.report.xml', + 'report_name': 'account.financial.report', + 'datas': data, + } + +accounting_report() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account/wizard/account_financial_report_view.xml b/addons/account/wizard/account_financial_report_view.xml new file mode 100644 index 00000000000..1472da4ba87 --- /dev/null +++ b/addons/account/wizard/account_financial_report_view.xml @@ -0,0 +1,52 @@ + + + + + + Accounting Report + accounting.report + form + + + + + + + + + + + + + + + + + + + + + + + + + + Financial Reports + accounting.report + ir.actions.act_window + form + form + + new + + + + + + diff --git a/addons/account/wizard/account_reconcile.py b/addons/account/wizard/account_reconcile.py index 30bac2ae1fd..d03051b2ccb 100644 --- a/addons/account/wizard/account_reconcile.py +++ b/addons/account/wizard/account_reconcile.py @@ -110,7 +110,7 @@ class account_move_line_reconcile_writeoff(osv.osv_memory): It opens the write off wizard form, in that user can define the journal, account, analytic account for reconcile """ _name = 'account.move.line.reconcile.writeoff' - _description = 'Account move line reconcile' + _description = 'Account move line reconcile (writeoff)' _columns = { 'journal_id': fields.many2one('account.journal','Write-Off Journal', required=True), 'writeoff_acc_id': fields.many2one('account.account','Write-Off account', required=True), diff --git a/addons/account_analytic_plans/report/crossovered_analytic.rml b/addons/account_analytic_plans/report/crossovered_analytic.rml index 6e331ed1b83..f374aa5a2c2 100644 --- a/addons/account_analytic_plans/report/crossovered_analytic.rml +++ b/addons/account_analytic_plans/report/crossovered_analytic.rml @@ -240,7 +240,7 @@ [[ formatLang(a['ref_qty']) ]] - [[ formatLang(a['ref_amt']) ]] [[ company.currency_id.symbol ]] + [[ formatLang(a['ref_amt'], currency_obj=company.currency_id) ]] 100.00% @@ -288,7 +288,7 @@ [[formatLang(a['qty']) ]] - [[ formatLang(a['amt']) ]] [[ company.currency_id.symbol ]] + [[ formatLang(a['amt'], currency_obj=company.currency_id) ]] [[ formatLang(a['perc']) ]]% diff --git a/addons/account_budget/report/analytic_account_budget_report.rml b/addons/account_budget/report/analytic_account_budget_report.rml index a8b957f52a5..ba89c7ed1ea 100644 --- a/addons/account_budget/report/analytic_account_budget_report.rml +++ b/addons/account_budget/report/analytic_account_budget_report.rml @@ -185,13 +185,13 @@ [['.....' *(a['status']-1) ]] [[ (a['status']==1 and (setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ a['name'] ]] - [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['theo']) ]] [[ company.currency_id.symbol ]] + [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['theo'], currency_obj=company.currency_id) ]] - [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['pln']) ]] [[ company.currency_id.symbol ]] + [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['pln'], currency_obj=company.currency_id) ]] - [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['prac']) ]] [[ company.currency_id.symbol ]] + [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['prac'], currency_obj=company.currency_id) ]] [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['perc']) ]]% @@ -205,13 +205,13 @@ [[ repeatIn(funct_total(data['form']),'b') ]] Total: - [[ formatLang(b['tot_theo']) ]] [[ company.currency_id.symbol ]] + [[ formatLang(b['tot_theo'], currency_obj=company.currency_id) ]] - [[ formatLang(b['tot_pln']) ]] [[ company.currency_id.symbol ]] + [[ formatLang(b['tot_pln'], currency_obj=company.currency_id) ]] - [[ formatLang(b['tot_prac']) ]] [[ company.currency_id.symbol ]] + [[ formatLang(b['tot_prac'], currency_obj=company.currency_id) ]] [[ formatLang(b['tot_perc']) ]]% @@ -223,4 +223,4 @@ - \ No newline at end of file + diff --git a/addons/account_budget/report/budget_report.rml b/addons/account_budget/report/budget_report.rml index 0533042822a..4d82e8d8c1d 100644 --- a/addons/account_budget/report/budget_report.rml +++ b/addons/account_budget/report/budget_report.rml @@ -148,13 +148,13 @@ [['.....' *(a['status']-1) ]][[ (a['status']==1 and (setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ a['name'] ]] - [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['theo'], digits=get_digits(dp='Account')) ]] [[ company.currency_id.symbol ]] + [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['theo'], digits=get_digits(dp='Account'), currency_obj=company.currency_id) ]] - [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['pln'], digits=get_digits(dp='Account')) ]] [[ company.currency_id.symbol ]] + [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['pln'], digits=get_digits(dp='Account'), currency_obj=company.currency_id) ]] - [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['prac'], digits=get_digits(dp='Account')) ]] [[ company.currency_id.symbol ]] + [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['prac'], digits=get_digits(dp='Account'), currency_obj=company.currency_id) ]] [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['perc'], digits=2) ]]% @@ -168,13 +168,13 @@ [[ repeatIn(funct_total(data['form']),'b') ]]Total: - [[ formatLang(b['tot_theo'], digits=get_digits(dp='Account')) ]] [[ company.currency_id.symbol ]] + [[ formatLang(b['tot_theo'], digits=get_digits(dp='Account'), currency_obj=company.currency_id) ]] - [[ formatLang(b['tot_pln'], digits=get_digits(dp='Account')) ]] [[ company.currency_id.symbol ]] + [[ formatLang(b['tot_pln'], digits=get_digits(dp='Account'), currency_obj=company.currency_id) ]] - [[ formatLang(b['tot_prac'], digits=get_digits(dp='Account')) ]] [[ company.currency_id.symbol ]] + [[ formatLang(b['tot_prac'], digits=get_digits(dp='Account'), currency_obj=company.currency_id) ]] [[ formatLang(b['tot_perc'], digits=2) ]]% diff --git a/addons/account_budget/report/crossovered_budget_report.rml b/addons/account_budget/report/crossovered_budget_report.rml index 63db53ab5ce..b4e8e963b7d 100644 --- a/addons/account_budget/report/crossovered_budget_report.rml +++ b/addons/account_budget/report/crossovered_budget_report.rml @@ -163,13 +163,13 @@ [['.....' *(a['status']-1) ]][[ (a['status']==1 and (setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ a['name'] ]] - [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['theo'], dp='Account') ]] [[ company.currency_id.symbol ]] + [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['theo'], dp='Account', currency_obj=company.currency_id) ]] - [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['pln'], dp='Account') ]] [[ company.currency_id.symbol ]] + [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['pln'], dp='Account', currency_obj=company.currency_id) ]] - [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['prac'], dp='Account') ]] [[ company.currency_id.symbol ]] + [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['prac'], dp='Account', currency_obj=company.currency_id) ]] [[ (a['status']==1 and ( setTag('para','para',{'fontName':'Helvetica-bold'}))) or removeParentNode('font') ]] [[ formatLang(a['perc'],digits=2) ]]% @@ -183,13 +183,13 @@ [[ repeatIn(funct_total(data['form']),'b') ]] Total : - [[ formatLang(b['tot_theo'], dp='Account') ]] [[ company.currency_id.symbol ]] + [[ formatLang(b['tot_theo'], dp='Account', currency_obj=company.currency_id) ]] - [[ formatLang(b['tot_pln'], dp='Account') ]] [[ company.currency_id.symbol ]] + [[ formatLang(b['tot_pln'], dp='Account', currency_obj=company.currency_id) ]] - [[ formatLang(b['tot_prac'], dp='Account') ]] [[ company.currency_id.symbol ]] + [[ formatLang(b['tot_prac'], dp='Account', currency_obj=company.currency_id) ]] [[ formatLang(b['tot_perc'],digits=2) ]]% diff --git a/addons/analytic/i18n/ar.po b/addons/analytic/i18n/ar.po index ee7a5f9319e..036a3ef8c46 100644 --- a/addons/analytic/i18n/ar.po +++ b/addons/analytic/i18n/ar.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2011-09-05 23:03+0000\n" -"Last-Translator: Majed Majbour \n" +"PO-Revision-Date: 2011-09-22 02:41+0000\n" +"Last-Translator: kifcaliph \n" "Language-Team: Arabic \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-09-07 04:35+0000\n" -"X-Generator: Launchpad (build 13861)\n" +"X-Launchpad-Export-Date: 2011-09-22 04:48+0000\n" +"X-Generator: Launchpad (build 13996)\n" #. module: analytic #: field:account.analytic.account,child_ids:0 @@ -25,7 +25,7 @@ msgstr "حساب فرعي" #. module: analytic #: field:account.analytic.account,name:0 msgid "Account Name" -msgstr "" +msgstr "اسم الحساب" #. module: analytic #: help:account.analytic.line,unit_amount:0 @@ -44,12 +44,12 @@ msgstr "" #. module: analytic #: field:account.analytic.account,state:0 msgid "State" -msgstr "" +msgstr "المحافظة / الولاية" #. module: analytic #: field:account.analytic.account,user_id:0 msgid "Account Manager" -msgstr "" +msgstr "مدير المحاسبة" #. module: analytic #: selection:account.analytic.account,state:0 @@ -114,7 +114,7 @@ msgstr "وصف" #. module: analytic #: selection:account.analytic.account,type:0 msgid "Normal" -msgstr "" +msgstr "عادي" #. module: analytic #: field:account.analytic.account,company_id:0 @@ -185,7 +185,7 @@ msgstr "جهة الإتصال" msgid "" "Error! The currency has to be the same as the currency of the selected " "company" -msgstr "" +msgstr "خطأ! العملة لابد و أن تكون مثل العملة للشركة المختارة" #. module: analytic #: selection:account.analytic.account,state:0 @@ -208,11 +208,13 @@ msgid "" "If you select the View Type, it means you won't allow to create journal " "entries using that account." msgstr "" +"اذا اخترت نوع العرض، فذلك يعني انك لن تسمح بإنشاء قيود اليومية بإستخدام ذلك " +"الحساب." #. module: analytic #: field:account.analytic.account,date:0 msgid "Date End" -msgstr "" +msgstr "نهاية التاريخ" #. module: analytic #: field:account.analytic.account,code:0 diff --git a/addons/base_vat/__init__.py b/addons/base_vat/__init__.py index e1999d38b87..43dbd0c1418 100644 --- a/addons/base_vat/__init__.py +++ b/addons/base_vat/__init__.py @@ -21,5 +21,4 @@ import base_vat -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file diff --git a/addons/base_vat/__openerp__.py b/addons/base_vat/__openerp__.py index 92af5664336..29f402aa286 100644 --- a/addons/base_vat/__openerp__.py +++ b/addons/base_vat/__openerp__.py @@ -18,26 +18,34 @@ # along with this program. If not, see . # ############################################################################## + { - 'name': 'Base VAT', + 'name': 'VAT Number Validation', 'version': '1.0', - 'category': 'Tools', - 'category': 'Generic Modules/Base', + 'category': 'Finance', 'complexity': "easy", 'description': """ -Enable VAT Number for a partner and check its validity. -======================================================= +VAT validation for Partners' VAT numbers +======================================== + +After installing this module, values entered in the VAT field of Partners will +be validated for all supported countries. The country is inferred from the +2-letter country code that prefixes the VAT number, e.g. ``BE0477472701`` +will be validated using the Belgian rules. + +Supported countries currently include EU countries, and a few non-EU countries +such as Chile, Colombia, Mexico, Norway or Russia. For unsupported countries, +only the country code will be validated. -This module follows the methods stated at http://sima-pc.com/nif.php for -checking the validity of VAT Number assigned to partners in European countries. """, 'author': 'OpenERP SA', 'depends': ['account'], 'website': 'http://www.openerp.com', - 'update_xml': ['base_vat_view.xml'], + 'data': ['base_vat_view.xml'], 'installable': True, 'active': False, 'certificate': '0084849360989', 'images': ['images/1_partner_vat.jpeg'], } + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/base_vat/base_vat.py b/addons/base_vat/base_vat.py index 58e5670b589..ba858d10e64 100644 --- a/addons/base_vat/base_vat.py +++ b/addons/base_vat/base_vat.py @@ -2,8 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). All Rights Reserved -# Copyright (C) 2008-2009 B2CK, Cedric Krier, Bertrand Chenal (the methods "check_vat_[a-z]{2}" +# Copyright (C) 2004-2011 OpenERP SA () # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,13 +18,22 @@ # along with this program. If not, see . # ############################################################################## + +import logging import string +import datetime +import re + +try: + import vatnumber +except ImportError: + logging.getLogger('base_vat').warning("VAT validation partially unavailable because the `vatnumber` Python library cannot be found. " + "Install it to support more countries, for example with `easy_install vatnumber`.") + vatnumber = None from osv import osv, fields -from tools.translate import _ from tools.misc import ustr -import re -import datetime +from tools.translate import _ _ref_vat = { 'be': 'BE0477472701', 'at': 'ATU12345675', @@ -42,13 +50,9 @@ _ref_vat = { 'pt': 'PT123456789', 'ro': 'RO1234567897', 'se': 'SE123456789701', 'si': 'SI12345679', 'sk': 'SK0012345675', 'el': 'EL12345670', - 'mx': 'MXABC123456T1B', 'no': 'NO123456785' - - } - -def mult_add(i, j): - """Sum each digits of the multiplication of i and j.""" - return reduce(lambda x, y: x + int(y), str(i*j), 0) + 'mx': 'MXABC123456T1B', 'no': 'NO123456785', + 'hr': 'HR01234567896', # Croatia, contributed by Milan Tribuson +} class res_partner(osv.osv): _inherit = 'res.partner' @@ -67,16 +71,17 @@ class res_partner(osv.osv): if not partner.vat: continue vat_country, vat_number = self._split_vat(partner.vat) - if not hasattr(self, 'check_vat_' + vat_country): - #We didn't find the validation method for the country code. If that country code can be found in openerp, this means that it is a valid country code - #and we simply didn't have implemented that function. In that case we continue. + check_func_name = 'check_vat_' + vat_country + check_func = getattr(self, check_func_name, None) or \ + getattr(vatnumber, check_func_name, None) + if not check_func: + # No VAT validation available, default to check that the country code + # exists. if country_obj.search(cr, uid, [('code', 'ilike', vat_country)], context=context): continue - #Otherwise, it means that the country code isn't valid and we return False. - return False - check = getattr(self, 'check_vat_' + vat_country) - if not check(vat_number): + # Country code not found, considered invalid return False + return check_func(vat_number) return True def vat_change(self, cr, uid, ids, value, context=None): @@ -93,997 +98,24 @@ class res_partner(osv.osv): # has more than 3 characters return cn[0] in string.ascii_lowercase and cn[1] in string.ascii_lowercase vat_country, vat_number = self._split_vat(self.browse(cr, uid, ids)[0].vat) + vat_no = "'CC##' (CC=Country Code, ##=VAT Number)" if default_vat_check(vat_country, vat_number): - vat_no = vat_country in _ref_vat and _ref_vat[vat_country] or 'Country Code + Vat Number' - return _('The Vat does not seems to be correct. You should have entered something like this %s'), (vat_no) - return _('The VAT is invalid, It should begin with the country code'), () + vat_no = _ref_vat[vat_country] if vat_country in _ref_vat else vat_no + return '\n' + _('This VAT number does not seem to be valid.\nNote: the expected format is %s') % vat_no _constraints = [(check_vat, _construct_constraint_msg, ["vat"])] - # code from the following methods come from Tryton (B2CK) - # http://www.tryton.org/hgwebdir.cgi/modules/relationship/file/544d1de586d9/party.py - def check_vat_at(self, vat): - ''' - Check Austria VAT number. - ''' - if len(vat) != 9: - return False - if vat[0] != 'U': - return False - num = vat[1:] - try: - int(num) - except: - return False - sum = int(num[0]) + mult_add(2, int(num[1])) + \ - int(num[2]) + mult_add(2, int(num[3])) + \ - int(num[4]) + mult_add(2, int(num[5])) + \ - int(num[6]) - check = 10 - ((sum + 4) % 10) - if check == 10: - check = 0 - if int(vat[-1:]) != check: - return False - return True - - def check_vat_be(self, vat): - ''' - Check Belgium VAT number. - ''' - if len(vat) != 10: - return False - try: - int(vat) - except: - return False - if int(vat[-2:]) != \ - 97 - (int(vat[:8]) % 97): - return False - return True - - def check_vat_bg(self, vat): - ''' - Check Bulgaria VAT number. - ''' - if len(vat) not in [9,10]: - return False - try: - int(vat) - except: - return False - if int(vat[0]) in (2, 3) and \ - int(vat[1:2]) != 22: - return False - sum = 4 * int(vat[0]) + 3 * int(vat[1]) + 2 * int(vat[2]) + \ - 7 * int(vat[3]) + 6 * int(vat[4]) + 5 * int(vat[5]) + \ - 4 * int(vat[6]) + 3 * int(vat[7]) + 2 * int(vat[8]) - check = 11 - (sum % 11) - if check == 11: - check = 0 - return True - - def check_vat_cy(self, vat): - ''' - Check Cyprus VAT number. - ''' - if len(vat) != 9: - return False - try: - int(vat[:8]) - except: - return False - n0 = int(vat[0]) - n1 = int(vat[1]) - n2 = int(vat[2]) - n3 = int(vat[3]) - n4 = int(vat[4]) - n5 = int(vat[5]) - n6 = int(vat[6]) - n7 = int(vat[7]) - - def conv(x): - if x == 0: - return 1 - elif x == 1: - return 0 - elif x == 2: - return 5 - elif x == 3: - return 7 - elif x == 4: - return 9 - elif x == 5: - return 13 - elif x == 6: - return 15 - elif x == 7: - return 17 - elif x == 8: - return 19 - elif x == 9: - return 21 - return x - n0 = conv(n0) - n2 = conv(n2) - n4 = conv(n4) - n6 = conv(n6) - - sum = n0 + n1 + n2 + n3 + n4 + n5 + n6 + n7 - check = chr(sum % 26 + 65) - if check != vat[8]: - return False - return True - - def check_vat_cz(self, vat): - ''' - Check Czech Republic VAT number. - ''' - if len(vat) not in (8, 9, 10): - return False - try: - int(vat) - except: - return False - - if len(vat) == 8: - if int(vat[0]) not in (0, 1, 2, 3, 4, 5, 6, 7, 8): - return False - sum = 8 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \ - 5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \ - 2 * int(vat[6]) - check = 11 - (sum % 11) - if check == 10: - check = 0 - if check == 11: - check = 1 - if check != int(vat[7]): - return False - elif len(vat) == 9 and int(vat[0]) == 6: - sum = 8 * int(vat[1]) + 7 * int(vat[2]) + 6 * int(vat[3]) + \ - 5 * int(vat[4]) + 4 * int(vat[5]) + 3 * int(vat[6]) + \ - 2 * int(vat[7]) - check = 9 - ((11 - (sum % 11)) % 10) - if check != int(vat[8]): - return False - elif len(vat) == 9: - if int(vat[0:2]) > 53 and int(vat[0:2]) < 80: - return False - if int(vat[2:4]) < 1: - return False - if int(vat[2:4]) > 12 and int(vat[2:4]) < 51: - return False - if int(vat[2:4]) > 62: - return False - if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 > 0: - if int(vat[4:6]) < 1: - return False - if int(vat[4:6]) > 28: - return False - if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 == 0: - if int(vat[4:6]) < 1: - return False - if int(vat[4:6]) > 29: - return False - if int(vat[2:4]) in (4, 6, 9, 11, 54, 56, 59, 61): - if int(vat[4:6]) < 1: - return False - if int(vat[4:6]) > 30: - return False - if int(vat[2:4]) in (1, 3, 5, 7, 8, 10, 12, 51, - 53, 55, 57, 58, 60, 62): - if int(vat[4:6]) < 1: - return False - if int(vat[4:6]) > 31: - return False - elif len(vat) == 10: - if int(vat[0:2]) < 54: - return False - if int(vat[2:4]) < 1: - return False - if int(vat[2:4]) > 12 and int(vat[2:4]) < 51: - return False - if int(vat[2:4]) > 62: - return False - if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 > 0: - if int(vat[4:6]) < 1: - return False - if int(vat[4:6]) > 28: - return False - if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 == 0: - if int(vat[4:6]) < 1: - return False - if int(vat[4:6]) > 29: - return False - if int(vat[2:4]) in (4, 6, 9, 11, 54, 56, 59, 61): - if int(vat[4:6]) < 1: - return False - if int(vat[4:6]) > 30: - return False - if int(vat[2:4]) in (1, 3, 5, 7, 8, 10, 12, 51, - 53, 55, 57, 58, 60, 62): - if int(vat[4:6]) < 1: - return False - if int(vat[4:6]) > 31: - return False - if (int(vat[0:2]) + int(vat[2:4]) + int(vat[4:6]) + int(vat[6:8]) + - int(vat[8:10])) % 11 != 0: - return False - if int(vat[0:10]) % 11 != 0: - return False - return True - - def check_vat_de(self, vat): - ''' - Check Germany VAT number. - ''' - if len(vat) != 9: - return False - try: - int(vat) - except: - return False - if int(vat[0:7]) <= 0: - return False - sum = 0 - for i in range(8): - sum = (2 * ((int(vat[i]) + sum + 9) % 10 + 1)) % 11 - check = 11 - sum - if check == 10: - check = 0 - if int(vat[8]) != check: - return False - return True - - def check_vat_dk(self, vat): - ''' - Check Denmark VAT number. - ''' - if len(vat) != 8: - return False - try: - int(vat) - except: - return False - if int(vat[0]) <= 0: - return False - sum = 2 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \ - 5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \ - 2 * int(vat[6]) + int(vat[7]) - if sum % 11 != 0: - return False - return True - - def check_vat_ee(self, vat): - ''' - Check Estonia VAT number. - ''' - if len(vat) != 9: - return False - try: - int(vat) - except: - return False - sum = 3 * int(vat[0]) + 7 * int(vat[1]) + 1 * int(vat[2]) + \ - 3 * int(vat[3]) + 7 * int(vat[4]) + 1 * int(vat[5]) + \ - 3 * int(vat[6]) + 7 * int(vat[7]) - check = 10 - (sum % 10) - if check == 10: - check = 0 - if check != int(vat[8]): - return False - return True - - def check_vat_es(self, vat): - ''' - Check Spain VAT number. - ''' - if len(vat) != 9: - return False - - conv = { - 1: 'T', - 2: 'R', - 3: 'W', - 4: 'A', - 5: 'G', - 6: 'M', - 7: 'Y', - 8: 'F', - 9: 'P', - 10: 'D', - 11: 'X', - 12: 'B', - 13: 'N', - 14: 'J', - 15: 'Z', - 16: 'S', - 17: 'Q', - 18: 'V', - 19: 'H', - 20: 'L', - 21: 'C', - 22: 'K', - 23: 'E', - } - #Legal persons with profit aim - if vat[0] in ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'U', 'V'): - try: - int(vat[1:8]) - except: - return False - sum = mult_add(2, int(vat[1])) + int(vat[2]) + \ - mult_add(2, int(vat[3])) + int(vat[4]) + \ - mult_add(2, int(vat[5])) + int(vat[6]) + \ - mult_add(2, int(vat[7])) - check = 10 - (sum % 10) - if check == 10: - check = 0 - return True - #Legal persons with non-profit aim - elif vat[0] in ('N', 'P', 'Q', 'R', 'S', 'W'): - try: - int(vat[1:8]) - except: - return False - sum = mult_add(2, int(vat[1])) + int(vat[2]) + \ - mult_add(2, int(vat[3])) + int(vat[4]) + \ - mult_add(2, int(vat[5])) + int(vat[6]) + \ - mult_add(2, int(vat[7])) - check = 10 - (sum % 10) - check = chr(check + 64) - if check != vat[8]: - return False - return True - #Foreign natural persons, under age 14 or non-residents - elif vat[0] in ('K', 'L', 'M', 'X', 'Y', 'Z'): - if vat[0] == 'Y': - check_value = '1' + vat[1:8] - elif vat[0] == 'Z': - check_value = '2' + vat[1:8] - else: - check_value = vat[1:8] - - try: - int(check_value) - except: - return False - check = 1 + (int(check_value) % 23) - - check = conv[check] - if check != vat[8]: - return False - return True - #Spanish natural persons - else: - try: - int(vat[:8]) - except: - return False - check = 1 + (int(vat[:8]) % 23) - - check = conv[check] - if check != vat[8]: - return False - return True - - def check_vat_fi(self, vat): - ''' - Check Finland VAT number. - ''' - if len(vat) != 8: - return False - try: - int(vat) - except: - return False - sum = 7 * int(vat[0]) + 9 * int(vat[1]) + 10 * int(vat[2]) + \ - 5 * int(vat[3]) + 8 * int(vat[4]) + 4 * int(vat[5]) + \ - 2 * int(vat[6]) - check = 11 - (sum % 11) - if check == 11: - check = 0 - if check == 10: - return False - if check != int(vat[7]): - return False - return True - - def check_vat_fr(self, vat): - ''' - Check France VAT number. - ''' - if len(vat) != 11: - return False - - try: - int(vat[2:11]) - except: - return False - - system = None - try: - int(vat[0:2]) - system = 'old' - except: - system = 'new' - - if system == 'old': - check = ((int(vat[2:11]) * 100) + 12) % 97 - if check != int(vat[0:2]): - return False - return True - else: - conv = ['0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', - 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', - 'U', 'V', 'W', 'X', 'Y', 'Z'] - if vat[0] not in conv \ - or vat[1] not in conv: - return False - c1 = conv.index(vat[0]) - c2 = conv.index(vat[1]) - - if c1 < 10: - sum = c1 * 24 + c2 - 10 - else: - sum = c1 * 34 + c2 - 100 - - x = sum % 11 - sum = (int(sum) / 11) + 1 - y = (int(vat[2:11]) + sum) % 11 - if x != y: - return False - return True - - def check_vat_gb(self, vat): - ''' - Check United Kingdom VAT number. - ''' - - if len(vat) == 5: - try: - int(vat[2:5]) - except: - return False - - if vat[0:2] == 'GD': - if int(vat[2:5]) >= 500: - return False - return True - if vat[0:2] == 'HA': - if int(vat[2:5]) < 500: - return False - return True - return False - elif len(vat) in (9, 10): - try: - int(vat) - except: - return False - - if int(vat[0:7]) < 1: - return False - if int(vat[0:7]) > 19999 and int(vat[0:7]) < 1000000: - return False - if int(vat[7:9]) > 97: - return False - if len(vat) == 10 and int(vat[9]) != 3: - return False - - sum = 8 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \ - 5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \ - 2 * int(vat[6]) + 10 * int(vat[7]) + int(vat[8]) - if int(vat[0:3]) > 100: - if sum % 97 not in (0, 55, 42): - return False - else: - if sum % 97 != 0: - return False - return True - elif len(vat) in (12, 13): - try: - int(vat) - except: - return False - - if int(vat[0:3]) not in (0, 1): - return False - - if int(vat[3:10]) < 1: - return False - if int(vat[3:10]) > 19999 and int(vat[3:10]) < 1000000: - return False - if int(vat[10:12]) > 97: - return False - if len(vat) == 13 and int(vat[12]) != 3: - return False - - sum = 8 * int(vat[3]) + 7 * int(vat[4]) + 6 * int(vat[5]) + \ - 5 * int(vat[6]) + 4 * int(vat[7]) + 3 * int(vat[8]) + \ - 2 * int(vat[9]) + 10 * int(vat[10]) + int(vat[11]) - if sum % 97 != 0: - return False - return True - return False - - def check_vat_gr(self, vat): - ''' - Check Greece VAT number. - ''' - try: - int(vat) - except: - return False - if len(vat) == 8: - sum = 128 * int(vat[0]) + 64 * int(vat[1]) + 32 * int(vat[2]) + \ - 16 * int(vat[3]) + 8 * int(vat[4]) + 4 * int(vat[5]) + \ - 2 * int(vat[6]) - check = sum % 11 - if check == 10: - check = 0 - if check != int(vat[7]): - return False - return True - elif len(vat) == 9: - sum = 256 * int(vat[0]) + 128 * int(vat[1]) + 64 * int(vat[2]) + \ - 32 * int(vat[3]) + 16 * int(vat[4]) + 8 * int(vat[5]) + \ - 4 * int(vat[6]) + 2 * int(vat[7]) - check = sum % 11 - if check == 10: - check = 0 - if check != int(vat[8]): - return False - return True - return False - - def check_vat_el(self, vat): - return self.check_vat_gr(vat) - - def check_vat_hu(self, vat): - ''' - Check Hungary VAT number. - ''' - if len(vat) != 8: - return False - try: - int(vat) - except: - return False - if int(vat[0]) <= 0: - return False - sum = 9 * int(vat[0]) + 7 * int(vat[1]) + 3 * int(vat[2]) + \ - 1 * int(vat[3]) + 9 * int(vat[4]) + 7 * int(vat[5]) + \ - 3 * int(vat[6]) - check = 10 - (sum % 10) - if check == 10: - check = 0 - if check != int(vat[7]): - return False - return True - - def check_vat_ie(self, vat): - ''' - Check Ireland VAT number. - ''' - if len(vat) != 8: - return False - if (ord(vat[1]) >= 65 and ord(vat[1]) <= 90) \ - or vat[1] in ('+', '*'): - try: - int(vat[0]) - int(vat[2:7]) - except: - return False - - if int(vat[0]) <= 6: - return False - - sum = 7 * int(vat[2]) + 6 * int(vat[3]) + 5 * int(vat[4]) + \ - 4 * int(vat[5]) + 3 * int(vat[6]) + 2 * int(vat[0]) - check = sum % 23 - if check == 0: - check = 'W' - else: - check = chr(check + 64) - if check != vat[7]: - return False - return True - else: - try: - int(vat[0:7]) - except: - return False - - sum = 8 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \ - 5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \ - 2 * int(vat[6]) - check = sum % 23 - if check == 0: - check = 'W' - else: - check = chr(check + 64) - if check != vat[7]: - return False - return True - - def check_vat_it(self, vat): - ''' - Check Italy VAT number. - ''' - if len(vat) != 11: - return False - try: - int(vat) - except: - return False - if int(vat[0:7]) <= 0: - return False - if int(vat[7:10]) <= 0: - return False - if int(vat[7:10]) > 100 and int(vat[7:10]) < 120: - return False - - sum = int(vat[0]) + mult_add(2, int(vat[1])) + int(vat[2]) + \ - mult_add(2, int(vat[3])) + int(vat[4]) + \ - mult_add(2, int(vat[5])) + int(vat[6]) + \ - mult_add(2, int(vat[7])) + int(vat[8]) + \ - mult_add(2, int(vat[9])) - check = 10 - (sum % 10) - if check == 10: - check = 0 - if check != int(vat[10]): - return False - return True - - def check_vat_lt(self, vat): - ''' - Check Lithuania VAT number. - ''' - try: - int(vat) - except: - return False - - if len(vat) == 9: - if int(vat[7]) != 1: - return False - sum = 1 * int(vat[0]) + 2 * int(vat[1]) + 3 * int(vat[2]) + \ - 4 * int(vat[3]) + 5 * int(vat[4]) + 6 * int(vat[5]) + \ - 7 * int(vat[6]) + 8 * int(vat[7]) - if sum % 11 == 10: - sum = 3 * int(vat[0]) + 4 * int(vat[1]) + 5 * int(vat[2]) + \ - 6 * int(vat[3]) + 7 * int(vat[4]) + 8 * int(vat[5]) + \ - 9 * int(vat[6]) + 1 * int(vat[7]) - check = sum % 11 - if check == 10: - check = 0 - if check != int(vat[8]): - return False - return True - elif len(vat) == 12: - if int(vat[10]) != 1: - return False - sum = 1 * int(vat[0]) + 2 * int(vat[1]) + 3 * int(vat[2]) + \ - 4 * int(vat[3]) + 5 * int(vat[4]) + 6 * int(vat[5]) + \ - 7 * int(vat[6]) + 8 * int(vat[7]) + 9 * int(vat[8]) + \ - 1 * int(vat[9]) + 2 * int(vat[10]) - if sum % 11 == 10: - sum = 3 * int(vat[0]) + 4 * int(vat[1]) + 5 * int(vat[2]) + \ - 6 * int(vat[3]) + 7 * int(vat[4]) + 8 * int(vat[5]) + \ - 9 * int(vat[6]) + 1 * int(vat[7]) + 2 * int(vat[8]) + \ - 3 * int(vat[9]) + 4 * int(vat[10]) - check = sum % 11 - if check == 10: - check = 0 - if check != int(vat[11]): - return False - return True - return False - - def check_vat_lu(self, vat): - ''' - Check Luxembourg VAT number. - ''' - if len(vat) != 8: - return False - try: - int(vat) - except: - return False - if int(vat[0:6]) <= 0: - return False - check = int(vat[0:6]) % 89 - if check != int(vat[6:8]): - return False - return True - - def check_vat_lv(self, vat): - ''' - Check Latvia VAT number. - ''' - if len(vat) != 11: - return False - try: - int(vat) - except: - return False - if int(vat[0]) >= 4: - sum = 9 * int(vat[0]) + 1 * int(vat[1]) + 4 * int(vat[2]) + \ - 8 * int(vat[3]) + 3 * int(vat[4]) + 10 * int(vat[5]) + \ - 2 * int(vat[6]) + 5 * int(vat[7]) + 7 * int(vat[8]) + \ - 6 * int(vat[9]) - if sum % 11 == 4 and int(vat[0]) == 9: - sum = sum - 45 - if sum % 11 == 4: - check = 4 - (sum % 11) - elif sum % 11 > 4: - check = 14 - (sum % 11) - elif sum % 11 < 4: - check = 3 - (sum % 11) - if check != int(vat[10]): - return False - return True - else: - if int(vat[2:4]) == 2 and int(vat[4:6]) % 4 > 0: - if int(vat[0:2]) < 1 or int(vat[0:2]) > 28: - return False - if int(vat[2:4]) == 2 and int(vat[4:6]) % 4 == 0: - if int(vat[0:2]) < 1 or int(vat[0:2]) > 29: - return False - if int(vat[2:4]) in (4, 6, 9, 11): - if int(vat[0:2]) < 1 or int(vat[0:2]) > 30: - return False - if int(vat[2:4]) in (1, 3, 5, 7, 8, 10, 12): - if int(vat[0:2]) < 1 or int(vat[0:2]) > 31: - return False - if int(vat[2:4]) < 1 or int(vat[2:4]) > 12: - return False - return True - - def check_vat_mt(self, vat): - ''' - Check Malta VAT number. - ''' - if len(vat) != 8: - return False - try: - int(vat) - except: - return False - - if int(vat[0:6]) < 100000: - return False - - sum = 3 * int(vat[0]) + 4 * int(vat[1]) + 6 * int(vat[2]) + \ - 7 * int(vat[3]) + 8 * int(vat[4]) + 9 * int(vat[5]) - check = 37 - (sum % 37) - if check != int(vat[6:8]): - return False - return True - - def check_vat_nl(self, vat): - ''' - Check Netherlands VAT number. - ''' - if len(vat) != 12: - return False - try: - int(vat[0:9]) - int(vat[10:12]) - except: - return False - if int(vat[0:8]) <= 0: - return False - if vat[9] != 'B': - return False - - sum = 9 * int(vat[0]) + 8 * int(vat[1]) + 7 * int(vat[2]) + \ - 6 * int(vat[3]) + 5 * int(vat[4]) + 4 * int(vat[5]) + \ - 3 * int(vat[6]) + 2 * int(vat[7]) - - check = sum % 11 - if check == 10: - return False - if check != int(vat[8]): - return False - return True - - def check_vat_pl(self, vat): - ''' - Check Poland VAT number. - ''' - if len(vat) != 10: - return False - try: - int(vat) - except: - return False - - sum = 6 * int(vat[0]) + 5 * int(vat[1]) + 7 * int(vat[2]) + \ - 2 * int(vat[3]) + 3 * int(vat[4]) + 4 * int(vat[5]) + \ - 5 * int(vat[6]) + 6 * int(vat[7]) + 7 * int(vat[8]) - check = sum % 11 - if check == 10: - return False - if check != int(vat[9]): - return False - return True - - def check_vat_pt(self, vat): - ''' - Check Portugal VAT number. - ''' - if len(vat) != 9: - return False - try: - int(vat) - except: - return False - - if int(vat[0]) <= 0: - return False - - sum = 9 * int(vat[0]) + 8 * int(vat[1]) + 7 * int(vat[2]) + \ - 6 * int(vat[3]) + 5 * int(vat[4]) + 4 * int(vat[5]) + \ - 3 * int(vat[6]) + 2 * int(vat[7]) - check = 11 - (sum % 11) - if check == 10 or check == 11: - check = 0 - return True - - def check_vat_ro(self, vat): - ''' - Check Romania VAT number. - ''' - try: - int(vat) - except: - return False - - if len(vat) >= 2 and len(vat) <= 10: - vat = (10 - len(vat)) * '0' + vat - sum = 7 * int(vat[0]) + 5 * int(vat[1]) + 3 * int(vat[2]) + \ - 2 * int(vat[3]) + 1 * int(vat[4]) + 7 * int(vat[5]) + \ - 5 * int(vat[6]) + 3 * int(vat[7]) + 2 * int(vat[8]) - check = (sum * 10) % 11 - if check == 10: - check = 0 - if check != int(vat[9]): - return False - return True - elif len(vat) == 13: - if int(vat[0]) not in (1, 2, 3, 4, 6): - return False - if int(vat[3:5]) < 1 or int(vat[3:5]) > 12: - return False - if int(vat[3:5]) == 2 and int(vat[1:3]) % 4 > 0: - if int(vat[5:7]) < 1 or int(vat[5:7]) > 28: - return False - if int(vat[3:5]) == 2 and int(vat[1:3]) % 4 == 0: - if int(vat[5:7]) < 1 or int(vat[5:7]) > 29: - return False - if int(vat[3:5]) in (4, 6, 9, 11): - if int(vat[5:7]) < 1 or int(vat[5:7]) > 30: - return False - if int(vat[3:5]) in (1, 3, 5, 7, 8, 10, 12): - if int(vat[5:7]) < 1 or int(vat[5:7]) > 31: - return False - - sum = 2 * int(vat[0]) + 7 * int(vat[1]) + 9 * int(vat[2]) + \ - 1 * int(vat[3]) + 4 * int(vat[4]) + 6 * int(vat[5]) + \ - 3 * int(vat[6]) + 5 * int(vat[7]) + 8 * int(vat[8]) + \ - 2 * int(vat[9]) + 7 * int(vat[10]) + 9 * int(vat[11]) - check = sum % 11 - if check == 10: - check = 1 - if check != int(vat[12]): - return False - return True - return False - - def check_vat_se(self, vat): - ''' - Check Sweden VAT number. - ''' - if len(vat) != 12: - return False - try: - int(vat) - except: - return False - - if int(vat[9:11]) < 0: - return False - - sum = mult_add(2, int(vat[0])) + int(vat[1]) + \ - mult_add(2, int(vat[2])) + int(vat[3]) + \ - mult_add(2, int(vat[4])) + int(vat[5]) + \ - mult_add(2, int(vat[6])) + int(vat[7]) + \ - mult_add(2, int(vat[8])) - check = 10 - (sum % 10) - if check == 10: - check = 0 - if check != int(vat[9]): - return False - return True - - def check_vat_si(self, vat): - ''' - Check Slovenia VAT number. - ''' - if len(vat) != 8: - return False - try: - int(vat) - except: - return False - if int(vat[0:7]) <= 999999: - return False - - sum = 8 * int(vat[0]) + 7 * int(vat[1]) + 6 * int(vat[2]) + \ - 5 * int(vat[3]) + 4 * int(vat[4]) + 3 * int(vat[5]) + \ - 2 * int(vat[6]) - check = 11 - (sum % 11) - if check == 10: - check = 0 - if check == 11: - check = 1 - if check != int(vat[7]): - return False - return True - - def check_vat_sk(self, vat): - ''' - Check Slovakia VAT number. - ''' - try: - int(vat) - except: - return False - if len(vat) not in(9, 10): - return False - - if int(vat[0:2]) in (0, 10, 20) and len(vat) == 10: - return True - - if len(vat) == 10: - if int(vat[0:2]) < 54 or int(vat[0:2]) > 99: - return False - - if len(vat) == 9: - if int(vat[0:2]) > 53 : - return False - - if int(vat[2:4]) < 1: - return False - if int(vat[2:4]) > 12 and int(vat[2:4]) < 51: - return False - if int(vat[2:4]) > 62: - return False - if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 > 0: - if int(vat[4:6]) < 1 or int(vat[4:6]) > 28: - return False - if int(vat[2:4]) in (2, 52) and int(vat[0:2]) % 4 == 0: - if int(vat[4:6]) < 1 or int(vat[4:6]) > 29: - return False - if int(vat[2:4]) in (4, 6, 9, 11, 54, 56, 59, 61): - if int(vat[4:6]) < 1 or int(vat[4:6]) > 30: - return False - if int(vat[2:4]) in (1, 3, 5, 7, 8, 10, 12, - 51, 53, 55, 57, 58, 60, 62): - if int(vat[4:6]) < 1 or int(vat[4:6]) > 31: - return False - return True + # Mexican VAT verification, contributed by + # and Panos Christeas __check_vat_mx_re = re.compile(r"(?P[A-Za-z\xd1\xf1&]{3,4})" \ r"[ \-_]?" \ r"(?P[0-9]{2})(?P[01][0-9])(?P[0-3][0-9])" \ r"[ \-_]?" \ r"(?P[A-Za-z0-9&\xd1\xf1]{3})$") - def check_vat_mx(self, vat): ''' Mexican VAT verification - + Verificar RFC México ''' # we convert to 8-bit encoding, to help the regex parse only bytes @@ -1101,12 +133,12 @@ class res_partner(osv.osv): datetime.date(ano, int(m.group('mes')), int(m.group('dia'))) except ValueError: return False - + #Valid format and valid date return True - # check_vat_no contributed by Rolv Råen (adEgo) + # Norway VAT validation, contributed by Rolv Råen (adEgo) def check_vat_no(self, vat): ''' Check Norway VAT number.See http://www.brreg.no/english/coordination/number.html diff --git a/addons/base_vat/base_vat_view.xml b/addons/base_vat/base_vat_view.xml index 6e00fc61ae0..69a1870ea72 100644 --- a/addons/base_vat/base_vat_view.xml +++ b/addons/base_vat/base_vat_view.xml @@ -1,21 +1,21 @@ - + - - res.partner.vat.inherit - res.partner - - - - - - - - - - + + res.partner.vat.inherit + res.partner + + + + + + + + + + - + diff --git a/addons/crm/crm_lead_demo.xml b/addons/crm/crm_lead_demo.xml index e1366266c0a..390932c9e0a 100644 --- a/addons/crm/crm_lead_demo.xml +++ b/addons/crm/crm_lead_demo.xml @@ -44,7 +44,6 @@ - @@ -266,12 +265,17 @@ - + + BalmerInc S.A. + Rue des Palais 51, bte 33 + Bruxelles + + @@ -282,15 +286,65 @@ - + + Lucie Vonck + Chaussée de Namur + Grand-Rosière + + + + + + opportunity + + + + + + + + + + + + + + + Université de Liège + Place du 20Août + Liège + + + + + + opportunity + + + + + + + + + + + + + + Bank Wealthy and sons + 1 rue Rockfeller + Paris + + - + opportunity @@ -308,7 +362,7 @@ - + opportunity @@ -324,6 +378,11 @@ + Dubois sprl + Avenue de la Liberté 56 + Brussels + + @@ -370,6 +429,82 @@ + Axelor + 12 rue Albert Einstein + Champs sur Marne + + + + + + + + opportunity + + + + + + + + + + + + Thymbra + Palermo, Capital Federal + C1414CMS Capital Federal + Buenos Aires + + + + + + + + opportunity + + + + + + + + + + + + Eric Dubois + Chaussée de Binche, 27 + Mons + + + + + + + opportunity + + + + + + + + + + + + + opportunity + + + + + + + + diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml index 118bf117035..1a2e1f706ac 100644 --- a/addons/crm/crm_lead_view.xml +++ b/addons/crm/crm_lead_view.xml @@ -341,7 +341,6 @@
- diff --git a/addons/crm_claim/security/ir.model.access.csv b/addons/crm_claim/security/ir.model.access.csv index 51b2a276a8b..b23ef97b7fd 100644 --- a/addons/crm_claim/security/ir.model.access.csv +++ b/addons/crm_claim/security/ir.model.access.csv @@ -2,4 +2,4 @@ "access_crm_claim_manager","crm.claim.manager","model_crm_claim","base.group_sale_manager",1,1,1,1 "access_crm_claim_user","crm.claim.user","model_crm_claim","base.group_sale_salesman",1,1,1,0 "access_crm_claim_report_manager","crm.claim.report.manager","model_crm_claim_report","base.group_sale_manager",1,1,1,1 -"access_crm_claim_partner_manager","crm.claim.partner.manager","model_crm_claim","base.group_partner_manager",1,1,1,1 +"access_crm_claim_partner_manager","crm.claim.partner.manager","model_crm_claim","base.group_partner_manager",1,0,0,0 diff --git a/addons/hr_contract/i18n/cs.po b/addons/hr_contract/i18n/cs.po index ff63ed93a37..493196fe014 100644 --- a/addons/hr_contract/i18n/cs.po +++ b/addons/hr_contract/i18n/cs.po @@ -4,119 +4,120 @@ # msgid "" msgstr "" -"Project-Id-Version: OpenERP Server 5.0.4\n" +"Project-Id-Version: openeobject-addons\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2009-02-03 06:25+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" +"PO-Revision-Date: 2011-09-20 07:48+0000\n" +"Last-Translator: Jiří Hajda \n" +"Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-09-05 05:31+0000\n" -"X-Generator: Launchpad (build 13830)\n" +"X-Launchpad-Export-Date: 2011-09-21 04:50+0000\n" +"X-Generator: Launchpad (build 13996)\n" +"X-Poedit-Language: Czech\n" #. module: hr_contract #: view:hr.contract.wage.type:0 msgid "Hourly cost computation" -msgstr "" +msgstr "Výpočet hodinové ceny" #. module: hr_contract #: selection:hr.contract.wage.type,type:0 msgid "Gross" -msgstr "" +msgstr "Hrubého" #. module: hr_contract #: view:hr.contract:0 msgid "Trial Period" -msgstr "" +msgstr "Zkušební období" #. module: hr_contract #: field:hr.contract,trial_date_start:0 msgid "Trial Start Date" -msgstr "" +msgstr "Zkušební počáteční datum" #. module: hr_contract #: view:hr.contract:0 msgid "Passport" -msgstr "" +msgstr "Pas" #. module: hr_contract #: view:hr.employee:0 msgid "Medical Examination" -msgstr "" +msgstr "Zdravotní vyšetření" #. module: hr_contract #: field:hr.employee,vehicle:0 msgid "Company Vehicle" -msgstr "" +msgstr "Firemní vozidlo" #. module: hr_contract #: field:hr.contract.wage.type,name:0 msgid "Wage Type Name" -msgstr "" +msgstr "Jméno typu mzdy" #. module: hr_contract #: view:hr.employee:0 msgid "Miscellaneous" -msgstr "" +msgstr "Různé" #. module: hr_contract #: view:hr.contract:0 msgid "Current" -msgstr "" +msgstr "Aktuální" #. module: hr_contract #: field:hr.contract.wage.type,factor_type:0 msgid "Factor for hour cost" -msgstr "" +msgstr "Koeficient pro cenu hodiny" #. module: hr_contract #: view:hr.contract:0 msgid "Overpassed" -msgstr "" +msgstr "Uplynulý" #. module: hr_contract #: view:hr.contract.wage.type:0 msgid "Wage Types" -msgstr "" +msgstr "Typ mzdy" #. module: hr_contract #: field:hr.contract,department_id:0 msgid "Department" -msgstr "" +msgstr "Oddělení" #. module: hr_contract #: selection:hr.contract.wage.type,type:0 msgid "Basic" -msgstr "" +msgstr "Základní" #. module: hr_contract #: view:hr.contract:0 #: field:hr.contract,employee_id:0 #: model:ir.model,name:hr_contract.model_hr_employee msgid "Employee" -msgstr "" +msgstr "Zaměstnanec" #. module: hr_contract #: selection:hr.contract.wage.type,type:0 msgid "Net" -msgstr "" +msgstr "Čistého" #. module: hr_contract #: model:ir.module.module,shortdesc:hr_contract.module_meta_information msgid "Human Resources Contracts" -msgstr "" +msgstr "Smlouvy lidských zdrojů" #. module: hr_contract #: field:hr.contract.wage.type.period,factor_days:0 msgid "Hours in the period" -msgstr "" +msgstr "Hodin v období" #. module: hr_contract #: field:hr.employee,vehicle_distance:0 msgid "Home-Work Distance" -msgstr "" +msgstr "Vzdálenost z domu do práce" #. module: hr_contract #: view:hr.contract:0 @@ -125,32 +126,32 @@ msgstr "" #: model:ir.actions.act_window,name:hr_contract.action_hr_contract #: model:ir.ui.menu,name:hr_contract.hr_menu_contract msgid "Contracts" -msgstr "" +msgstr "Smlouvy" #. module: hr_contract #: view:hr.employee:0 msgid "Personal Info" -msgstr "" +msgstr "Osobní informace" #. module: hr_contract #: view:hr.contract:0 msgid "Job" -msgstr "" +msgstr "Práce" #. module: hr_contract #: view:hr.contract:0 msgid "Search Contract" -msgstr "" +msgstr "Hledat smlouvu" #. module: hr_contract #: help:hr.employee,contract_id:0 msgid "Latest contract of the employee" -msgstr "" +msgstr "Poslední smlouva zaměstnance" #. module: hr_contract #: field:hr.contract,advantages_net:0 msgid "Deductions" -msgstr "" +msgstr "Odpočty" #. module: hr_contract #: model:ir.module.module,description:hr_contract.module_meta_information @@ -163,33 +164,40 @@ msgid "" " You can assign several contracts per employee.\n" " " msgstr "" +"\n" +" Přidává všechny informace zaměstnance ke správě smluv:\n" +" * Rodinný stav,\n" +" * Bezpečnostní číslo,\n" +" * Místo narození, datum narození, ...\n" +" Ke každému zaměstnanci můžete přiřadit několik smluv.\n" +" " #. module: hr_contract #: view:hr.contract:0 #: field:hr.contract,advantages:0 msgid "Advantages" -msgstr "" +msgstr "Výhody" #. module: hr_contract #: view:hr.contract:0 msgid "Valid for" -msgstr "" +msgstr "Platné pro" #. module: hr_contract #: view:hr.contract:0 msgid "Work Permit" -msgstr "" +msgstr "Pracovní povolení" #. module: hr_contract #: field:hr.employee,children:0 msgid "Number of Children" -msgstr "" +msgstr "Počet dětí" #. module: hr_contract #: model:ir.actions.act_window,name:hr_contract.action_hr_contract_type #: model:ir.ui.menu,name:hr_contract.hr_menu_contract_type msgid "Contract Types" -msgstr "" +msgstr "Typy smluv" #. module: hr_contract #: field:hr.contract,wage_type_id:0 @@ -198,44 +206,44 @@ msgstr "" #: model:ir.model,name:hr_contract.model_hr_contract_wage_type #: model:ir.ui.menu,name:hr_contract.hr_menu_contract_wage_type msgid "Wage Type" -msgstr "" +msgstr "Typ mzdy" #. module: hr_contract #: constraint:hr.employee:0 msgid "Error ! You cannot create recursive Hierarchy of Employees." -msgstr "" +msgstr "Chyba ! Nemůžete vytvořit rekurzivní Hiearchii zaměstnanců" #. module: hr_contract #: field:hr.contract,date_end:0 msgid "End Date" -msgstr "" +msgstr "Datum ukončení" #. module: hr_contract #: field:hr.contract,wage:0 msgid "Wage" -msgstr "" +msgstr "Mzda" #. module: hr_contract #: field:hr.contract,name:0 msgid "Contract Reference" -msgstr "" +msgstr "Odkaz smlouvy" #. module: hr_contract #: help:hr.employee,vehicle_distance:0 msgid "In kilometers" -msgstr "" +msgstr "V kilometrech" #. module: hr_contract #: view:hr.contract:0 #: field:hr.contract,notes:0 msgid "Notes" -msgstr "" +msgstr "Poznámky" #. module: hr_contract #: constraint:hr.employee:0 msgid "" "Error ! You cannot select a department for which the employee is the manager." -msgstr "" +msgstr "Chyba ! Nemůžete vybrat oddělení, kterého je zaměstnance vedoucí." #. module: hr_contract #: view:hr.contract:0 @@ -243,7 +251,7 @@ msgstr "" #: model:ir.model,name:hr_contract.model_hr_contract #: model:ir.ui.menu,name:hr_contract.next_id_56 msgid "Contract" -msgstr "" +msgstr "Smlouva" #. module: hr_contract #: view:hr.contract:0 @@ -252,92 +260,92 @@ msgstr "" #: field:hr.contract.type,name:0 #: model:ir.model,name:hr_contract.model_hr_contract_type msgid "Contract Type" -msgstr "" +msgstr "Typ smlouvy" #. module: hr_contract #: view:hr.contract.wage.type.period:0 msgid "Search Wage Period" -msgstr "" +msgstr "Hledat mzdové období" #. module: hr_contract #: view:hr.contract:0 #: field:hr.contract,working_hours:0 msgid "Working Schedule" -msgstr "" +msgstr "Pracovní plán" #. module: hr_contract #: view:hr.employee:0 msgid "Job Info" -msgstr "" +msgstr "Pracovní informace" #. module: hr_contract #: field:hr.contract.wage.type,period_id:0 #: view:hr.contract.wage.type.period:0 #: model:ir.model,name:hr_contract.model_hr_contract_wage_type_period msgid "Wage Period" -msgstr "" +msgstr "Mzdové období" #. module: hr_contract #: field:hr.contract,job_id:0 msgid "Job Title" -msgstr "" +msgstr "Název pozice" #. module: hr_contract #: field:hr.employee,manager:0 msgid "Is a Manager" -msgstr "" +msgstr "Je vedoucí" #. module: hr_contract #: field:hr.contract,date_start:0 msgid "Start Date" -msgstr "" +msgstr "Počáteční datum" #. module: hr_contract #: constraint:hr.contract:0 msgid "Error! contract start-date must be lower then contract end-date." -msgstr "" +msgstr "Chyba! Počáteční datum smlouvy musí být nižší než konečné datum." #. module: hr_contract #: view:hr.contract.wage.type:0 msgid "Search Wage Type" -msgstr "" +msgstr "Hledat typ mzdy" #. module: hr_contract #: field:hr.contract.wage.type,type:0 msgid "Type" -msgstr "" +msgstr "Typ" #. module: hr_contract #: field:hr.contract,trial_date_end:0 msgid "Trial End Date" -msgstr "" +msgstr "Zkušební koncové datum" #. module: hr_contract #: view:hr.contract:0 #: view:hr.contract.wage.type:0 msgid "Group By..." -msgstr "" +msgstr "Seskupit podle..." #. module: hr_contract #: field:hr.contract.wage.type.period,name:0 msgid "Period Name" -msgstr "" +msgstr "Název období" #. module: hr_contract #: view:hr.contract.wage.type:0 msgid "Period" -msgstr "" +msgstr "Období" #. module: hr_contract #: field:hr.employee,place_of_birth:0 msgid "Place of Birth" -msgstr "" +msgstr "Místo narození" #. module: hr_contract #: model:ir.actions.act_window,name:hr_contract.action_hr_contract_wage_type_period #: model:ir.ui.menu,name:hr_contract.hr_menu_contract_wage_type_period msgid "Wage period" -msgstr "" +msgstr "Mzdové období" #. module: hr_contract #: help:hr.contract.wage.type,factor_type:0 @@ -346,28 +354,30 @@ msgid "" "This field is used by the timesheet system to compute the price of an hour " "of work wased on the contract of the employee" msgstr "" +"Toto pole je použito časovým rozvrhem systému pro výpočet ceny za hodinu " +"práce vynaložené na smlouvu zaměstnance" #. module: hr_contract #: view:hr.contract:0 msgid "Duration" -msgstr "" +msgstr "Trvání" #. module: hr_contract #: field:hr.employee,medic_exam:0 msgid "Medical Examination Date" -msgstr "" +msgstr "Datum zdravotní prohlídky" #. module: hr_contract #: field:hr.contract,advantages_gross:0 msgid "Allowances" -msgstr "" +msgstr "Dávky" #. module: hr_contract #: view:hr.contract:0 msgid "Main Data" -msgstr "" +msgstr "Hlavní data" #. module: hr_contract #: view:hr.contract.type:0 msgid "Search Contract Type" -msgstr "" +msgstr "Hledat typ smlouvy" diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index 4b04b566e35..9ca68bdb55e 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -204,14 +204,17 @@ class hr_holidays(osv.osv): def onchange_sec_id(self, cr, uid, ids, status, context=None): warning = {} + double_validation = False + obj_holiday_status = self.pool.get('hr.holidays.status') if status: - brows_obj = self.pool.get('hr.holidays.status').browse(cr, uid, status, context=context) - if brows_obj.categ_id and brows_obj.categ_id.section_id and not brows_obj.categ_id.section_id.allow_unlink: + holiday_status = obj_holiday_status.browse(cr, uid, status, context=context) + double_validation = holiday_status.double_validation + if holiday_status.categ_id and holiday_status.categ_id.section_id and not holiday_status.categ_id.section_id.allow_unlink: warning = { 'title': "Warning for ", 'message': "You won\'t be able to cancel this leave request because the CRM Sales Team of the leave type disallows." } - return {'warning': warning} + return {'warning': warning, 'value': {'double_validation': double_validation}} def set_to_draft(self, cr, uid, ids, *args): self.write(cr, uid, ids, { diff --git a/addons/hr_timesheet/i18n/cs.po b/addons/hr_timesheet/i18n/cs.po index c6dd897c9a0..089a96b1d85 100644 --- a/addons/hr_timesheet/i18n/cs.po +++ b/addons/hr_timesheet/i18n/cs.po @@ -4,45 +4,46 @@ # msgid "" msgstr "" -"Project-Id-Version: OpenERP Server 5.0.4\n" +"Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2009-02-03 20:59+0000\n" -"Last-Translator: Fabien (Open ERP) \n" -"Language-Team: \n" +"PO-Revision-Date: 2011-09-20 08:48+0000\n" +"Last-Translator: Jiří Hajda \n" +"Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-09-05 05:24+0000\n" -"X-Generator: Launchpad (build 13830)\n" +"X-Launchpad-Export-Date: 2011-09-21 04:50+0000\n" +"X-Generator: Launchpad (build 13996)\n" +"X-Poedit-Language: Czech\n" #. module: hr_timesheet #: model:product.template,name:hr_timesheet.product_consultant_product_template msgid "Service on Timesheet" -msgstr "" +msgstr "SLužby v časovém rozvrhu" #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:43 #: code:addons/hr_timesheet/report/users_timesheet.py:77 #, python-format msgid "Wed" -msgstr "" +msgstr "St" #. module: hr_timesheet #: view:hr.sign.out.project:0 msgid "(Keep empty for current_time)" -msgstr "" +msgstr "(Nechejte prázdné pro aktuální čas)" #. module: hr_timesheet #: code:addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py:132 #, python-format msgid "No employee defined for your user !" -msgstr "" +msgstr "Pro vašeho uživatele nebyl určen zaměstnanec !" #. module: hr_timesheet #: view:hr.analytic.timesheet:0 msgid "Group By..." -msgstr "" +msgstr "Seskupit podle..." #. module: hr_timesheet #: model:ir.actions.act_window,help:hr_timesheet.action_hr_timesheet_sign_in @@ -52,16 +53,20 @@ msgid "" "analytic account. This feature allows to record at the same time the " "attendance and the timesheet." msgstr "" +"Zaměstnanci mohou vkládat své časy strávené na různých projektech. Projekt " +"je analytický účet a čas strávený na projektu generuje ceny na na " +"analytickém účtu. Tato funkce umožňuje zaznamenat ve stejný čas docházku a " +"časový rozvrh." #. module: hr_timesheet #: view:hr.analytic.timesheet:0 msgid "Today" -msgstr "" +msgstr "Dnes" #. module: hr_timesheet #: field:hr.employee,journal_id:0 msgid "Analytic Journal" -msgstr "" +msgstr "Analytický deník" #. module: hr_timesheet #: view:hr.sign.out.project:0 @@ -72,31 +77,31 @@ msgstr "Ukončit práci" #: model:ir.actions.act_window,name:hr_timesheet.action_hr_timesheet_employee #: model:ir.ui.menu,name:hr_timesheet.menu_hr_timesheet_employee msgid "Employee Timesheet" -msgstr "" +msgstr "Časový rozvrh zaměstnance" #. module: hr_timesheet #: view:account.analytic.account:0 msgid "Work done stats" -msgstr "" +msgstr "Statistika dokončené práce" #. module: hr_timesheet #: view:hr.analytic.timesheet:0 #: model:ir.ui.menu,name:hr_timesheet.menu_hr_reporting_timesheet msgid "Timesheet" -msgstr "" +msgstr "Časový rozvrh" #. module: hr_timesheet #: selection:hr.analytical.timesheet.employee,month:0 #: selection:hr.analytical.timesheet.users,month:0 msgid "janvier" -msgstr "" +msgstr "leden" #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:43 #: code:addons/hr_timesheet/report/users_timesheet.py:77 #, python-format msgid "Mon" -msgstr "" +msgstr "Po" #. module: hr_timesheet #: view:hr.sign.in.project:0 @@ -111,27 +116,31 @@ msgid "" "project generates costs on the analytic account. This feature allows to " "record at the same time the attendance and the timesheet." msgstr "" +"Zaměstnanci mohou vkládat své časy strávené na různých projektech, ke kterým " +"jsou přiřazeni. Projekt je analytický účet a čas strávený na projektu " +"generuje ceny na na analytickém účtu. Tato funkce umožňuje zaznamenat ve " +"stejný čas docházku a časový rozvrh." #. module: hr_timesheet #: field:hr.sign.out.project,analytic_amount:0 msgid "Minimum Analytic Amount" -msgstr "" +msgstr "Minimální analytická částka" #. module: hr_timesheet #: view:hr.analytical.timesheet.employee:0 msgid "Monthly Employee Timesheet" -msgstr "" +msgstr "Měsíční časový rozvrh zaměstnance" #. module: hr_timesheet #: view:hr.sign.out.project:0 msgid "Work done in the last period" -msgstr "" +msgstr "Dokončená práce v minulém období" #. module: hr_timesheet #: constraint:hr.employee:0 msgid "" "Error ! You cannot select a department for which the employee is the manager." -msgstr "" +msgstr "Chyba ! Nemůžete vybrat oddělení, kterého je zaměstnance vedoucí." #. module: hr_timesheet #: field:hr.sign.in.project,state:0 @@ -143,39 +152,39 @@ msgstr "Současné datum" #: field:hr.sign.in.project,name:0 #: field:hr.sign.out.project,name:0 msgid "Employees name" -msgstr "" +msgstr "Jméno zaměstnance" #. module: hr_timesheet #: model:ir.model,name:hr_timesheet.model_hr_analytical_timesheet_users msgid "Print Employees Timesheet" -msgstr "" +msgstr "Tisknou časový rozvrh zaměstnance" #. module: hr_timesheet #: code:addons/hr_timesheet/hr_timesheet.py:174 #: code:addons/hr_timesheet/hr_timesheet.py:176 #, python-format msgid "Warning !" -msgstr "" +msgstr "Varování !" #. module: hr_timesheet #: code:addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py:77 #: code:addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py:132 #, python-format msgid "UserError" -msgstr "" +msgstr "UserError" #. module: hr_timesheet #: code:addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py:77 #, python-format msgid "No cost unit defined for this employee !" -msgstr "" +msgstr "Pro tohoto zaměstnance nebyla určena cenová jednotka !" #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:43 #: code:addons/hr_timesheet/report/users_timesheet.py:77 #, python-format msgid "Tue" -msgstr "" +msgstr "Út" #. module: hr_timesheet #: field:hr.sign.out.project,account_id:0 @@ -186,32 +195,32 @@ msgstr "Analytický účet" #: code:addons/hr_timesheet/wizard/hr_timesheet_print_employee.py:42 #, python-format msgid "Warning" -msgstr "" +msgstr "Varování" #. module: hr_timesheet #: model:ir.module.module,shortdesc:hr_timesheet.module_meta_information msgid "Human Resources (Timesheet encoding)" -msgstr "" +msgstr "Lidské zdroje (Kódování časových rozvrhů)" #. module: hr_timesheet #: view:hr.sign.in.project:0 #: view:hr.sign.out.project:0 msgid "Sign In/Out By Project" -msgstr "" +msgstr "Přihlášení/Odhlášení podle projektu" #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:43 #: code:addons/hr_timesheet/report/users_timesheet.py:77 #, python-format msgid "Sat" -msgstr "" +msgstr "So" #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:43 #: code:addons/hr_timesheet/report/users_timesheet.py:77 #, python-format msgid "Sun" -msgstr "" +msgstr "Ne" #. module: hr_timesheet #: view:hr.analytical.timesheet.employee:0 @@ -222,18 +231,18 @@ msgstr "Tisk" #. module: hr_timesheet #: view:hr.analytic.timesheet:0 msgid "Timesheet Lines" -msgstr "" +msgstr "Řádky časového rozvrhu" #. module: hr_timesheet #: selection:hr.analytical.timesheet.employee,month:0 #: selection:hr.analytical.timesheet.users,month:0 msgid "juillet" -msgstr "" +msgstr "červenec" #. module: hr_timesheet #: view:hr.analytical.timesheet.users:0 msgid "Monthly Employees Timesheet" -msgstr "" +msgstr "Měsíční časový rozvrh zaměstnance" #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:40 @@ -242,7 +251,7 @@ msgstr "" #: selection:hr.analytical.timesheet.users,month:0 #, python-format msgid "July" -msgstr "" +msgstr "Červenec" #. module: hr_timesheet #: field:hr.sign.in.project,date:0 @@ -253,13 +262,13 @@ msgstr "Počáteční datum" #. module: hr_timesheet #: view:hr.employee:0 msgid "Categories" -msgstr "" +msgstr "Kategorie" #. module: hr_timesheet #: selection:hr.analytical.timesheet.employee,month:0 #: selection:hr.analytical.timesheet.users,month:0 msgid "novembre" -msgstr "" +msgstr "listopad" #. module: hr_timesheet #: model:ir.actions.act_window,help:hr_timesheet.act_hr_timesheet_line_evry1_all_form @@ -267,6 +276,8 @@ msgid "" "Through Working Hours you can register your working hours by project every " "day." msgstr "" +"Pomocí pracovních hodin můžete každý den registrovat vaše pracovní hodiny " +"podle projektu." #. module: hr_timesheet #: model:ir.module.module,description:hr_timesheet.module_meta_information @@ -283,6 +294,18 @@ msgid "" "to set up a management by affair.\n" " " msgstr "" +"\n" +"Tento modul realizuje systém časového rozvrhu. Každý zaměstnanec může " +"zadávat a\n" +"sledovat svůj čas strávený na různých projektech. Projekt je \n" +"analytický účet a čas strávený na projektu generuje ceny na\n" +"analytickém účtu.\n" +"\n" +"Je poskytováno mnoho vykazování nad časem a sledováním zaměstnanců.\n" +"\n" +"Je celkově integrováno s module účtování cen. Umožňuje vám\n" +"nastavit správu podle poměru.\n" +" " #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:40 @@ -291,18 +314,18 @@ msgstr "" #: selection:hr.analytical.timesheet.users,month:0 #, python-format msgid "March" -msgstr "" +msgstr "Březen" #. module: hr_timesheet #: view:hr.analytic.timesheet:0 msgid "Total cost" -msgstr "" +msgstr "Celková cena" #. module: hr_timesheet #: selection:hr.analytical.timesheet.employee,month:0 #: selection:hr.analytical.timesheet.users,month:0 msgid "décembre" -msgstr "" +msgstr "prosinec" #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:40 @@ -311,22 +334,22 @@ msgstr "" #: selection:hr.analytical.timesheet.users,month:0 #, python-format msgid "September" -msgstr "" +msgstr "Září" #. module: hr_timesheet #: model:ir.model,name:hr_timesheet.model_hr_analytic_timesheet msgid "Timesheet Line" -msgstr "" +msgstr "Řádek časového rozvrhu" #. module: hr_timesheet #: field:hr.analytical.timesheet.users,employee_ids:0 msgid "employees" -msgstr "" +msgstr "zaměstnanci" #. module: hr_timesheet #: view:account.analytic.account:0 msgid "Stats by month" -msgstr "" +msgstr "Statistika podle měsíce" #. module: hr_timesheet #: view:account.analytic.account:0 @@ -343,25 +366,25 @@ msgstr "Popis práce" #. module: hr_timesheet #: view:account.analytic.account:0 msgid "To be invoiced" -msgstr "" +msgstr "K fakturaci" #. module: hr_timesheet #: model:ir.actions.report.xml,name:hr_timesheet.report_user_timesheet msgid "Employee timesheet" -msgstr "" +msgstr "Časový rozvrh zaměstnance" #. module: hr_timesheet #: model:ir.actions.act_window,name:hr_timesheet.action_hr_timesheet_sign_in #: model:ir.actions.act_window,name:hr_timesheet.action_hr_timesheet_sign_out msgid "Sign in / Sign out by project" -msgstr "" +msgstr "Přihlášení / Odhlášení podle projektu" #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:43 #: code:addons/hr_timesheet/report/users_timesheet.py:77 #, python-format msgid "Fri" -msgstr "" +msgstr "Pá" #. module: hr_timesheet #: view:hr.sign.in.project:0 @@ -375,27 +398,29 @@ msgid "" "Analytic journal is not defined for employee %s \n" "Define an employee for the selected user and assign an analytic journal!" msgstr "" +"Pro zaměstnance %s není určen Analytický deník \n" +"Určete zaměstnance pro vybraného uživatele a přiřaďte analxtický deník!" #. module: hr_timesheet #: view:hr.sign.in.project:0 msgid "(Keep empty for current time)" -msgstr "" +msgstr "(Nechejte prázdné pro aktuální čas)" #. module: hr_timesheet #: view:hr.employee:0 msgid "Timesheets" -msgstr "" +msgstr "Časové rozvrhy" #. module: hr_timesheet #: help:hr.employee,product_id:0 msgid "Specifies employee's designation as a product with type 'service'." -msgstr "" +msgstr "Určuje zařazení zaměstnance jako výrobek s typem 'služba'." #. module: hr_timesheet #: selection:hr.analytical.timesheet.employee,month:0 #: selection:hr.analytical.timesheet.users,month:0 msgid "août" -msgstr "" +msgstr "srpen" #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:40 @@ -404,7 +429,7 @@ msgstr "" #: selection:hr.analytical.timesheet.users,month:0 #, python-format msgid "August" -msgstr "" +msgstr "Srpen" #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:40 @@ -413,23 +438,23 @@ msgstr "" #: selection:hr.analytical.timesheet.users,month:0 #, python-format msgid "June" -msgstr "" +msgstr "Červen" #. module: hr_timesheet #: view:hr.analytical.timesheet.employee:0 msgid "Print My Timesheet" -msgstr "" +msgstr "Tisknout můj časový rozvrh" #. module: hr_timesheet #: selection:hr.analytical.timesheet.employee,month:0 #: selection:hr.analytical.timesheet.users,month:0 msgid "mars" -msgstr "" +msgstr "březen" #. module: hr_timesheet #: view:hr.analytic.timesheet:0 msgid "Date" -msgstr "" +msgstr "Datum" #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:40 @@ -438,12 +463,12 @@ msgstr "" #: selection:hr.analytical.timesheet.users,month:0 #, python-format msgid "November" -msgstr "" +msgstr "Listopad" #. module: hr_timesheet #: constraint:hr.employee:0 msgid "Error ! You cannot create recursive Hierarchy of Employees." -msgstr "" +msgstr "Chyba ! Nemůžete vytvořit rekurzivní Hierarchii zaměstnanců" #. module: hr_timesheet #: field:hr.sign.out.project,date:0 @@ -457,7 +482,7 @@ msgstr "Koncové datum" #: selection:hr.analytical.timesheet.users,month:0 #, python-format msgid "October" -msgstr "" +msgstr "Říjen" #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:40 @@ -466,35 +491,35 @@ msgstr "" #: selection:hr.analytical.timesheet.users,month:0 #, python-format msgid "January" -msgstr "" +msgstr "Leden" #. module: hr_timesheet #: view:account.analytic.account:0 msgid "Key dates" -msgstr "" +msgstr "Klíčové dny" #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:43 #: code:addons/hr_timesheet/report/users_timesheet.py:77 #, python-format msgid "Thu" -msgstr "" +msgstr "Čt" #. module: hr_timesheet #: view:account.analytic.account:0 msgid "Analysis stats" -msgstr "" +msgstr "Statistiká analýza" #. module: hr_timesheet #: model:ir.model,name:hr_timesheet.model_hr_analytical_timesheet_employee msgid "Print Employee Timesheet & Print My Timesheet" -msgstr "" +msgstr "Tisknout Časový rozvrh zaměstnance & Tisknou můj časový rozvrh" #. module: hr_timesheet #: field:hr.sign.in.project,emp_id:0 #: field:hr.sign.out.project,emp_id:0 msgid "Employee ID" -msgstr "" +msgstr "ID zaměstnance" #. module: hr_timesheet #: view:hr.sign.out.project:0 @@ -504,12 +529,12 @@ msgstr "Obecné informace" #. module: hr_timesheet #: model:ir.actions.act_window,name:hr_timesheet.action_hr_timesheet_my msgid "My Timesheet" -msgstr "" +msgstr "Moje časové rozvrhy" #. module: hr_timesheet #: view:account.analytic.account:0 msgid "Analysis summary" -msgstr "" +msgstr "Souhrn analýzy" #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:40 @@ -518,7 +543,7 @@ msgstr "" #: selection:hr.analytical.timesheet.users,month:0 #, python-format msgid "December" -msgstr "" +msgstr "Prosinec" #. module: hr_timesheet #: view:hr.analytical.timesheet.employee:0 @@ -526,7 +551,7 @@ msgstr "" #: view:hr.sign.in.project:0 #: view:hr.sign.out.project:0 msgid "Cancel" -msgstr "Storno" +msgstr "Zrušit" #. module: hr_timesheet #: model:ir.actions.act_window,name:hr_timesheet.action_hr_timesheet_users @@ -534,30 +559,30 @@ msgstr "Storno" #: model:ir.actions.wizard,name:hr_timesheet.wizard_hr_timesheet_users #: model:ir.ui.menu,name:hr_timesheet.menu_hr_timesheet_users msgid "Employees Timesheet" -msgstr "" +msgstr "Časové rozvrhy zaměstnanců" #. module: hr_timesheet #: selection:hr.analytical.timesheet.employee,month:0 #: selection:hr.analytical.timesheet.users,month:0 msgid "février" -msgstr "" +msgstr "únor" #. module: hr_timesheet #: view:hr.analytic.timesheet:0 msgid "Information" -msgstr "" +msgstr "Informace" #. module: hr_timesheet #: field:hr.analytical.timesheet.employee,employee_id:0 #: model:ir.model,name:hr_timesheet.model_hr_employee msgid "Employee" -msgstr "" +msgstr "Zaměstnanec" #. module: hr_timesheet #: selection:hr.analytical.timesheet.employee,month:0 #: selection:hr.analytical.timesheet.users,month:0 msgid "avril" -msgstr "" +msgstr "duben" #. module: hr_timesheet #: field:hr.sign.in.project,server_date:0 @@ -568,23 +593,23 @@ msgstr "Současné datum" #. module: hr_timesheet #: view:hr.analytic.timesheet:0 msgid "Anlytic account" -msgstr "" +msgstr "Analytický účet" #. module: hr_timesheet #: view:hr.analytical.timesheet.employee:0 msgid "This wizard will print monthly timesheet" -msgstr "" +msgstr "Tento průvodce bude tisknout měsíční časový rozvrh" #. module: hr_timesheet #: view:hr.analytic.timesheet:0 #: field:hr.employee,product_id:0 msgid "Product" -msgstr "" +msgstr "Výrobek" #. module: hr_timesheet #: view:hr.analytic.timesheet:0 msgid "Invoicing" -msgstr "" +msgstr "Fakturace" #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:40 @@ -593,34 +618,34 @@ msgstr "" #: selection:hr.analytical.timesheet.users,month:0 #, python-format msgid "May" -msgstr "" +msgstr "Květen" #. module: hr_timesheet #: view:hr.analytic.timesheet:0 msgid "Total time" -msgstr "" +msgstr "Celkový čas" #. module: hr_timesheet #: selection:hr.analytical.timesheet.employee,month:0 #: selection:hr.analytical.timesheet.users,month:0 msgid "juin" -msgstr "" +msgstr "červen" #. module: hr_timesheet #: view:hr.sign.in.project:0 msgid "(local time on the server side)" -msgstr "(lokální čas na serveru)" +msgstr "(místní čas na straně serveru)" #. module: hr_timesheet #: model:ir.actions.act_window,name:hr_timesheet.act_hr_timesheet_line_evry1_all_form #: model:ir.ui.menu,name:hr_timesheet.menu_hr_working_hours msgid "Working Hours" -msgstr "" +msgstr "Pracovní hodiny" #. module: hr_timesheet #: model:ir.model,name:hr_timesheet.model_hr_sign_in_project msgid "Sign In By Project" -msgstr "" +msgstr "Přihlášení podle projektu" #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:40 @@ -629,28 +654,28 @@ msgstr "" #: selection:hr.analytical.timesheet.users,month:0 #, python-format msgid "February" -msgstr "" +msgstr "Únor" #. module: hr_timesheet #: field:hr.analytic.timesheet,line_id:0 msgid "Analytic line" -msgstr "" +msgstr "Analytický řádek" #. module: hr_timesheet #: model:ir.model,name:hr_timesheet.model_hr_sign_out_project msgid "Sign Out By Project" -msgstr "" +msgstr "Odhlášení podle projektu" #. module: hr_timesheet #: view:hr.analytical.timesheet.users:0 msgid "Employees" -msgstr "" +msgstr "Zaměstnanci" #. module: hr_timesheet #: selection:hr.analytical.timesheet.employee,month:0 #: selection:hr.analytical.timesheet.users,month:0 msgid "octobre" -msgstr "" +msgstr "říjen" #. module: hr_timesheet #: code:addons/hr_timesheet/report/user_timesheet.py:40 @@ -659,7 +684,7 @@ msgstr "" #: selection:hr.analytical.timesheet.users,month:0 #, python-format msgid "April" -msgstr "" +msgstr "Duben" #. module: hr_timesheet #: code:addons/hr_timesheet/hr_timesheet.py:176 @@ -668,12 +693,14 @@ msgid "" "No analytic account defined on the project.\n" "Please set one or we can not automatically fill the timesheet." msgstr "" +"U projektu nebyl určen analytický účet.\n" +"Prosíme nastavte jej nebo nemůžeme automaticky vyplnit časový rozvrh." #. module: hr_timesheet #: selection:hr.analytical.timesheet.employee,month:0 #: selection:hr.analytical.timesheet.users,month:0 msgid "mai" -msgstr "" +msgstr "květen" #. module: hr_timesheet #: view:account.analytic.account:0 @@ -689,13 +716,13 @@ msgstr "Začít pracovat" #. module: hr_timesheet #: view:account.analytic.account:0 msgid "Stats by user" -msgstr "" +msgstr "Statistiky podle uživatele" #. module: hr_timesheet #: code:addons/hr_timesheet/wizard/hr_timesheet_print_employee.py:42 #, python-format msgid "No employee defined for this user" -msgstr "" +msgstr "Pro tohoto uživatele nebyl určen zaměstnanec" #. module: hr_timesheet #: field:hr.analytical.timesheet.employee,year:0 @@ -706,23 +733,23 @@ msgstr "Rok" #. module: hr_timesheet #: view:hr.analytic.timesheet:0 msgid "Accounting" -msgstr "" +msgstr "Účetnictví" #. module: hr_timesheet #: field:hr.analytic.timesheet,partner_id:0 msgid "Partner Id" -msgstr "" +msgstr "Id partnera" #. module: hr_timesheet #: view:hr.sign.out.project:0 msgid "Change Work" -msgstr "" +msgstr "Změnit práci" #. module: hr_timesheet #: selection:hr.analytical.timesheet.employee,month:0 #: selection:hr.analytical.timesheet.users,month:0 msgid "septembre" -msgstr "" +msgstr "září" #~ msgid "Choose Users" #~ msgstr "Uživatelé" diff --git a/addons/knowledge/i18n/lo.po b/addons/knowledge/i18n/lo.po index 36628631ef8..e611649b996 100644 --- a/addons/knowledge/i18n/lo.po +++ b/addons/knowledge/i18n/lo.po @@ -8,44 +8,44 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2011-09-19 04:37+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2011-09-19 09:09+0000\n" +"Last-Translator: Phoxaysy \n" "Language-Team: Lao \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-09-19 04:41+0000\n" -"X-Generator: Launchpad (build 13955)\n" +"X-Launchpad-Export-Date: 2011-09-20 04:54+0000\n" +"X-Generator: Launchpad (build 13980)\n" #. module: knowledge #: model:ir.ui.menu,name:knowledge.menu_document msgid "Knowledge" -msgstr "" +msgstr "ການຄຸ້ມຄອງເອກະສານ" #. module: knowledge #: help:knowledge.installer,wiki_quality_manual:0 msgid "Creates an example skeleton for a standard quality manual." -msgstr "" +msgstr "ສ້າງໂຄງຮ່າງຕົວຢ່າງເພື່ອຄູ່ມືທີ່່ມີມາດຕະຖານ" #. module: knowledge #: view:knowledge.installer:0 msgid "Share information within the company with these specific Addons." -msgstr "" +msgstr "ນຳໃຊ້ຂໍ້ມູນຮ່ວມກັນໄພໃນບໍລິສັດກັບ Addons ເຫລົ່ານີ້." #. module: knowledge #: field:knowledge.installer,document_ftp:0 msgid "Shared Repositories (FTP)" -msgstr "" +msgstr "ເກັບຂໍ້ມູນທີ່ໃຊ້ຮ່ວມກັນ(FTP)" #. module: knowledge #: model:ir.module.module,shortdesc:knowledge.module_meta_information msgid "Knowledge Management System" -msgstr "" +msgstr "ລະບົບການຄຸ້ມຄອງເອກະສານ" #. module: knowledge #: field:knowledge.installer,wiki:0 msgid "Collaborative Content (Wiki)" -msgstr "" +msgstr "ເນື່ອໃນການເຮັດວຽກຮ່ວມກັນ(wiki)" #. module: knowledge #: help:knowledge.installer,document_ftp:0 @@ -53,6 +53,9 @@ msgid "" "Provides an FTP access to your OpenERP's Document Management System. It lets " "you access attachments and virtual documents through a standard FTP client." msgstr "" +"ນຳໃຊ້ໂປລແກລມ FTP ເຂົ້າຫາລະບົບການຄູ້ມຄອງອກະສານ OpenERP ຂອງທ່ານ. " +"ມັນຊ່ວຍໃຫ້ທ່ານເຂົ້າຫາຂໍ້ມູນ ແລະ ເອກະສານຕ່າງໆຄືກັນກັບທ່ານຢູ່ໃນໜ່ວຍ computer " +"ຂອງທ່ານເອງ" #. module: knowledge #: help:knowledge.installer,document_webdav:0 @@ -61,16 +64,18 @@ msgid "" "you access attachments and virtual documents through your standard file " "browser." msgstr "" +"ນຳໃຊ້ໂປລແກລມ WebDAV ເຂົ້າຫາລະບົບການຄູ້ມຄອງອກະສານ OpenERP ຂອງທ່ານ. " +"ມັນຊ່ວຍໃຫ້ທ່ານເຂົ້າຫາຂໍ້ມູນ ແລະ ເອກະສານຕ່າງໆຜ່ານ Browser ທີ່ມີມາດຕະຖານ." #. module: knowledge #: view:knowledge.installer:0 msgid "Configure" -msgstr "" +msgstr "ສ້ອມຕັ້້ງ" #. module: knowledge #: view:knowledge.installer:0 msgid "title" -msgstr "" +msgstr "ຫົວຂໍ້:" #. module: knowledge #: model:ir.module.module,description:knowledge.module_meta_information @@ -78,31 +83,33 @@ msgid "" "Installer for knowledge-based tools\n" " " msgstr "" +"ຕິດຕັ້ງເຄື່ອງມືພື້ນຖານຂອງການຸ້ມຄອງເອກະສານ\n" +" " #. module: knowledge #: model:ir.ui.menu,name:knowledge.menu_document_configuration msgid "Configuration" -msgstr "" +msgstr "ການກໍານົດຄ່າ" #. module: knowledge #: model:ir.actions.act_window,name:knowledge.action_knowledge_installer msgid "Knowledge Modules Installation" -msgstr "" +msgstr "ການຕິດຕັ້ງໂມດຸນຂອງການຄຸ້ມຄອງເອກະສານ" #. module: knowledge #: field:knowledge.installer,wiki_quality_manual:0 msgid "Quality Manual" -msgstr "" +msgstr "ຄູ່ມືຄຸນນະພາບ" #. module: knowledge #: field:knowledge.installer,document_webdav:0 msgid "Shared Repositories (WebDAV)" -msgstr "" +msgstr "ເກັບຄືນຂໍ້ມູນທີ່ໃຊ້ຮ່ວມກັນ(WebDAV)" #. module: knowledge #: field:knowledge.installer,progress:0 msgid "Configuration Progress" -msgstr "" +msgstr "ຄວາມຕໍ່ເນື່ອງໃນການກຳນົດຄ່າ" #. module: knowledge #: help:knowledge.installer,wiki_faq:0 @@ -110,37 +117,38 @@ msgid "" "Creates a skeleton internal FAQ pre-filled with documentation about " "OpenERP's Document Management System." msgstr "" +"ສ້າງໂຄງຮ່າງຂ້າງໃນFAQ ກ່ອນທີ່ເຕັມດ້ວຍເອກະສານກ່ຽວກັບການຈັດການເອກະສານ ERP" #. module: knowledge #: field:knowledge.installer,wiki_faq:0 msgid "Internal FAQ" -msgstr "" +msgstr "ຂ້າງໃນFAQ" #. module: knowledge #: model:ir.ui.menu,name:knowledge.menu_document2 msgid "Collaborative Content" -msgstr "" +msgstr "ເນື້ອໃນການເຮັດວຽກຮ່ວມກັນ" #. module: knowledge #: field:knowledge.installer,config_logo:0 msgid "Image" -msgstr "" +msgstr "ຮູບພາບ" #. module: knowledge #: model:ir.actions.act_window,name:knowledge.action_knowledge_installer #: view:knowledge.installer:0 msgid "Knowledge Application Configuration" -msgstr "" +msgstr "ການນຳໃຊ້ການຕັ້ງຄ່າເອກະສານ" #. module: knowledge #: model:ir.model,name:knowledge.model_knowledge_installer msgid "knowledge.installer" -msgstr "" +msgstr "ການຕິດຕັ້ງເອກະສານ" #. module: knowledge #: view:knowledge.installer:0 msgid "Configure Your Knowledge Application" -msgstr "" +msgstr "ຕັ້ງຄ່າການນຳໃຊ້ເອກະສານຂອງທ່ານ" #. module: knowledge #: help:knowledge.installer,wiki:0 @@ -148,8 +156,9 @@ msgid "" "Lets you create wiki pages and page groups in order to keep track of " "business knowledge and share it with and between your employees." msgstr "" +"ສ້າງໜ້າWiki ແລະ ໜ້າກູ່ມເພື່ອຕິດຕາມເອກະສານທາງທລະກິດ ແລະ ລະຫວ່າງພະນັກງານຂອງທ່ານ" #. module: knowledge #: view:knowledge.installer:0 msgid "Content templates" -msgstr "" +msgstr "ເນື້ອໃນແມ່ແບບ" diff --git a/addons/hr_payroll_l10n_be/__init__.py b/addons/l10n_be_hr_payroll/__init__.py similarity index 86% rename from addons/hr_payroll_l10n_be/__init__.py rename to addons/l10n_be_hr_payroll/__init__.py index 61db034b52c..fb327bcb6c4 100644 --- a/addons/hr_payroll_l10n_be/__init__.py +++ b/addons/l10n_be_hr_payroll/__init__.py @@ -1,8 +1,8 @@ # -*- encoding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (). +# Copyright (C) 2011 OpenERP SA (). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -15,9 +15,7 @@ # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . +# along with this program. If not, see # ############################################################################## -import hr_payroll_l10n_be -import hr_contract -import hr_payroll +import l10n_be_hr_payroll diff --git a/addons/hr_payroll_l10n_be/__openerp__.py b/addons/l10n_be_hr_payroll/__openerp__.py similarity index 80% rename from addons/hr_payroll_l10n_be/__openerp__.py rename to addons/l10n_be_hr_payroll/__openerp__.py index b9f887f3ff8..ca0851ed9eb 100644 --- a/addons/hr_payroll_l10n_be/__openerp__.py +++ b/addons/l10n_be_hr_payroll/__openerp__.py @@ -1,8 +1,8 @@ # -*- encoding: utf-8 -*- ############################################################################## -# +# # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (). +# Copyright (C) 2011 OpenERP SA (). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -15,19 +15,18 @@ # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . +# along with this program. If not, see . # ############################################################################## { - 'name': 'hr_payroll_l10n_be', + 'name': 'Belgian Payroll Rules', 'category': 'payroll', - 'init_xml':[], - 'author': 'OpenERP', + 'author': 'OpenERP SA', 'depends': ['hr_payroll','hr_contract'], 'version': '1.0', 'description': """ -Belgian Payroll system. -======================= +Belgian Payroll Rules +===================== * Employee Details * Employee Contracts @@ -41,12 +40,12 @@ Belgian Payroll system. """, 'active': False, - 'demo_xml': [ - 'hr_payroll_l10n_be_demo.xml', + 'demo': [ + 'l10n_be_hr_payroll_demo.xml', ], - 'update_xml':[ - 'hr_payroll_l10n_be_view.xml', - 'hr_payroll_l10n_be_data.xml', + 'data':[ + 'l10n_be_hr_payroll_view.xml', + 'l10n_be_hr_payroll_data.xml', 'data/hr.salary.rule.csv', ], 'installable': True diff --git a/addons/hr_payroll_l10n_be/data/hr.salary.rule.csv b/addons/l10n_be_hr_payroll/data/hr.salary.rule.csv similarity index 100% rename from addons/hr_payroll_l10n_be/data/hr.salary.rule.csv rename to addons/l10n_be_hr_payroll/data/hr.salary.rule.csv diff --git a/addons/hr_payroll_l10n_be/hr_payroll_l10n_be.py b/addons/l10n_be_hr_payroll/l10n_be_hr_payroll.py similarity index 90% rename from addons/hr_payroll_l10n_be/hr_payroll_l10n_be.py rename to addons/l10n_be_hr_payroll/l10n_be_hr_payroll.py index 3c98e99cd71..761374da283 100644 --- a/addons/hr_payroll_l10n_be/hr_payroll_l10n_be.py +++ b/addons/l10n_be_hr_payroll/l10n_be_hr_payroll.py @@ -2,8 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2009 Tiny SPRL (). All Rights Reserved -# d$ +# Copyright (C) 2011 OpenERP SA (). All Rights Reserved # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by @@ -20,18 +19,7 @@ # ############################################################################## -import time -from datetime import date -from datetime import datetime -from datetime import timedelta - -import netsvc from osv import fields, osv -import tools -from tools.translate import _ -import decimal_precision as dp - - class hr_contract_be(osv.osv): _inherit = 'hr.contract' diff --git a/addons/hr_payroll_l10n_be/hr_payroll_l10n_be_data.xml b/addons/l10n_be_hr_payroll/l10n_be_hr_payroll_data.xml similarity index 100% rename from addons/hr_payroll_l10n_be/hr_payroll_l10n_be_data.xml rename to addons/l10n_be_hr_payroll/l10n_be_hr_payroll_data.xml diff --git a/addons/hr_payroll_l10n_be/hr_payroll_l10n_be_demo.xml b/addons/l10n_be_hr_payroll/l10n_be_hr_payroll_demo.xml similarity index 100% rename from addons/hr_payroll_l10n_be/hr_payroll_l10n_be_demo.xml rename to addons/l10n_be_hr_payroll/l10n_be_hr_payroll_demo.xml diff --git a/addons/hr_payroll_l10n_be/hr_payroll_l10n_be_view.xml b/addons/l10n_be_hr_payroll/l10n_be_hr_payroll_view.xml similarity index 100% rename from addons/hr_payroll_l10n_be/hr_payroll_l10n_be_view.xml rename to addons/l10n_be_hr_payroll/l10n_be_hr_payroll_view.xml diff --git a/addons/hr_payroll_l10n_be/security/hr.salary.rule.csv b/addons/l10n_be_hr_payroll/security/hr.salary.rule.csv similarity index 100% rename from addons/hr_payroll_l10n_be/security/hr.salary.rule.csv rename to addons/l10n_be_hr_payroll/security/hr.salary.rule.csv diff --git a/addons/l10n_br/i18n/ar.po b/addons/l10n_br/i18n/ar.po new file mode 100644 index 00000000000..11efed7ca5f --- /dev/null +++ b/addons/l10n_br/i18n/ar.po @@ -0,0 +1,36 @@ +# Arabic translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-01-07 06:40+0000\n" +"PO-Revision-Date: 2011-09-22 02:56+0000\n" +"Last-Translator: kifcaliph \n" +"Language-Team: Arabic \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-09-22 04:48+0000\n" +"X-Generator: Launchpad (build 13996)\n" + +#. module: l10n_br +#: model:ir.actions.todo,note:l10n_br.config_call_account_template_brazilian_localization +msgid "" +"Generate Chart of Accounts from a Chart Template. You will be asked to pass " +"the name of the company, the chart template to follow, the no. of digits to " +"generate the code for your accounts and Bank account, currency to create " +"Journals. Thus,the pure copy of chart Template is generated.\n" +" This is the same wizard that runs from Financial " +"Management/Configuration/Financial Accounting/Financial Accounts/Generate " +"Chart of Accounts from a Chart Template." +msgstr "" + +#. module: l10n_br +#: model:ir.module.module,description:l10n_br.module_meta_information +#: model:ir.module.module,shortdesc:l10n_br.module_meta_information +msgid "Brazilian Localization" +msgstr "النظام للبرازيل" diff --git a/addons/mrp/stock.py b/addons/mrp/stock.py index 6e66fb57f25..a8dc4aecc89 100644 --- a/addons/mrp/stock.py +++ b/addons/mrp/stock.py @@ -46,6 +46,7 @@ class StockMove(osv.osv): procurement_obj = self.pool.get('procurement.order') product_obj = self.pool.get('product.product') wf_service = netsvc.LocalService("workflow") + processed_ids = [move.id] if move.product_id.supply_method == 'produce' and move.product_id.procure_method == 'make_to_order': bis = bom_obj.search(cr, uid, [ ('product_id','=',move.product_id.id), @@ -55,11 +56,10 @@ class StockMove(osv.osv): factor = move.product_qty bom_point = bom_obj.browse(cr, uid, bis[0], context=context) res = bom_obj._bom_explode(cr, uid, bom_point, factor, []) - dest = move.product_id.product_tmpl_id.property_stock_production.id state = 'confirmed' if move.state == 'assigned': state = 'assigned' - for line in res[0]: + for line in res[0]: valdef = { 'picking_id': move.picking_id.id, 'product_id': line['product_id'], @@ -70,12 +70,12 @@ class StockMove(osv.osv): 'move_dest_id': move.id, 'state': state, 'name': line['name'], - 'location_dest_id': dest, 'move_history_ids': [(6,0,[move.id])], 'move_history_ids2': [(6,0,[])], 'procurements': [], } mid = move_obj.copy(cr, uid, move.id, default=valdef) + processed_ids.append(mid) prodobj = product_obj.browse(cr, uid, line['product_id'], context=context) proc_id = procurement_obj.create(cr, uid, { 'name': (move.picking_id.origin or ''), @@ -92,7 +92,7 @@ class StockMove(osv.osv): }) wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr) move_obj.write(cr, uid, [move.id], { - 'location_id': move.location_dest_id.id, + 'location_dest_id': move.location_id.id, # dummy move for the kit 'auto_validate': True, 'picking_id': False, 'state': 'confirmed' @@ -100,7 +100,7 @@ class StockMove(osv.osv): for m in procurement_obj.search(cr, uid, [('move_id','=',move.id)], context): wf_service.trg_validate(uid, 'procurement.order', m, 'button_confirm', cr) wf_service.trg_validate(uid, 'procurement.order', m, 'button_wait_done', cr) - return True + return processed_ids def action_consume(self, cr, uid, ids, product_qty, location_id=False, context=None): """ Consumed product with specific quatity from specific source location. @@ -156,16 +156,13 @@ class StockPicking(osv.osv): # # Explode picking by replacing phantom BoMs # - def action_explode(self, cr, uid, picks, *args): - """ Explodes picking by replacing phantom BoMs - @param picks: Picking ids. - @param *args: Arguments - @return: Picking ids. - """ + def action_explode(self, cr, uid, move_ids, *args): + """Explodes moves by expanding kit components""" move_obj = self.pool.get('stock.move') - for move in move_obj.browse(cr, uid, picks): - move_obj._action_explode(cr, uid, move) - return picks + todo = move_ids[:] + for move in move_obj.browse(cr, uid, move_ids): + todo.extend(move_obj._action_explode(cr, uid, move)) + return list(set(todo)) StockPicking() diff --git a/addons/procurement/schedulers.py b/addons/procurement/schedulers.py index 3a6e3336472..d72651ed55a 100644 --- a/addons/procurement/schedulers.py +++ b/addons/procurement/schedulers.py @@ -77,7 +77,7 @@ class procurement_order(osv.osv): report_later += 1 for proc in procurement_obj.browse(cr, uid, ids, context=context): if proc.state == 'exception': - report.append('PROC %d: on order - %3.2f %-5s - %s' % \ + report.append(_('PROC %d: on order - %3.2f %-5s - %s') % \ (proc.id, proc.product_qty, proc.product_uom.name, proc.product_id.name)) report_except += 1 @@ -100,7 +100,7 @@ class procurement_order(osv.osv): report_total += 1 for proc in procurement_obj.browse(cr, uid, report_ids, context=context): if proc.state == 'exception': - report.append('PROC %d: from stock - %3.2f %-5s - %s' % \ + report.append(_('PROC %d: from stock - %3.2f %-5s - %s') % \ (proc.id, proc.product_qty, proc.product_uom.name, proc.product_id.name,)) report_except += 1 @@ -111,15 +111,15 @@ class procurement_order(osv.osv): end_date = time.strftime('%Y-%m-%d, %Hh %Mm %Ss') if uid: request = self.pool.get('res.request') - summary = '''Here is the procurement scheduling report. + summary = _("""Here is the procurement scheduling report. - Start Time: %s - End Time: %s - Total Procurements processed: %d - Procurements with exceptions: %d - Skipped Procurements (scheduled date outside of scheduler range) %d + Start Time: %s + End Time: %s + Total Procurements processed: %d + Procurements with exceptions: %d + Skipped Procurements (scheduled date outside of scheduler range) %d - Exceptions:\n'''% (start_date, end_date, report_total, report_except, report_later) + Exceptions:\n""") % (start_date, end_date, report_total, report_except, report_later) summary += '\n'.join(report) request.create(cr, uid, {'name': "Procurement Processing Report.", diff --git a/addons/purchase/i18n/da.po b/addons/purchase/i18n/da.po new file mode 100644 index 00000000000..d8d48b072d8 --- /dev/null +++ b/addons/purchase/i18n/da.po @@ -0,0 +1,1798 @@ +# Danish translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-01-11 11:15+0000\n" +"PO-Revision-Date: 2011-09-19 08:04+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-09-20 04:54+0000\n" +"X-Generator: Launchpad (build 13980)\n" + +#. module: purchase +#: model:process.transition,note:purchase.process_transition_confirmingpurchaseorder0 +msgid "" +"The buyer has to approve the RFQ before being sent to the supplier. The RFQ " +"becomes a confirmed Purchase Order." +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:292 +#, python-format +msgid "You can not confirm purchase order without Purchase Order Lines." +msgstr "" + +#. module: purchase +#: field:purchase.order,invoiced:0 +msgid "Invoiced & Paid" +msgstr "Faktureret & Betalt" + +#. module: purchase +#: field:purchase.order,location_id:0 +#: view:purchase.report:0 +#: field:purchase.report,location_id:0 +msgid "Destination" +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:721 +#, python-format +msgid "" +"You have to select a product UOM in the same category than the purchase UOM " +"of the product" +msgstr "" + +#. module: purchase +#: help:purchase.report,date:0 +msgid "Date on which this document has been created" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,help:purchase.purchase_rfq +msgid "" +"You can create a request for quotation when you want to buy products to a " +"supplier but the purchase is not confirmed yet. Use also this menu to review " +"requests for quotation created automatically based on your logistic rules " +"(minimum stock, MTO, etc). You can convert the request for quotation into a " +"purchase order once the order is confirmed. If you use the extended " +"interface (from user's preferences), you can select the way to control your " +"supplier invoices: based on the order, based on the receptions or manual " +"encoding." +msgstr "" + +#. module: purchase +#: selection:purchase.order,invoice_method:0 +msgid "From Reception" +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +msgid "Not Invoiced" +msgstr "" + +#. module: purchase +#: field:purchase.order,dest_address_id:0 +msgid "Destination Address" +msgstr "" + +#. module: purchase +#: report:purchase.order:0 +#: field:purchase.report,validator:0 +msgid "Validated By" +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +#: field:purchase.order,partner_id:0 +#: view:purchase.order.line:0 +#: view:purchase.report:0 +#: field:purchase.report,partner_id:0 +msgid "Supplier" +msgstr "Leverandør" + +#. module: purchase +#: view:purchase.order.line_invoice:0 +msgid "Do you want to generate the supplier invoices ?" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,help:purchase.purchase_form_action +msgid "" +"Use this menu to search within your purchase orders by references, supplier, " +"products, etc. For each purchase order, you can track the products received, " +"and control the supplier invoices." +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:735 +#, python-format +msgid "The selected supplier only sells this product by %s" +msgstr "" + +#. module: purchase +#: code:addons/purchase/wizard/purchase_line_invoice.py:156 +#, python-format +msgid "Supplier Invoices" +msgstr "" + +#. module: purchase +#: sql_constraint:purchase.order:0 +msgid "Order Reference must be unique !" +msgstr "" + +#. module: purchase +#: model:process.transition,name:purchase.process_transition_packinginvoice0 +#: model:process.transition,name:purchase.process_transition_productrecept0 +msgid "From a Pick list" +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:660 +#, python-format +msgid "No Pricelist !" +msgstr "Ingen prisliste" + +#. module: purchase +#: field:purchase.order.line,product_qty:0 +#: view:purchase.report:0 +#: field:purchase.report,quantity:0 +msgid "Quantity" +msgstr "" + +#. module: purchase +#: view:purchase.order.line_invoice:0 +msgid "Select an Open Sale Order" +msgstr "" + +#. module: purchase +#: field:purchase.order,company_id:0 +#: field:purchase.order.line,company_id:0 +#: view:purchase.report:0 +#: field:purchase.report,company_id:0 +msgid "Company" +msgstr "Virksomhed" + +#. module: purchase +#: view:board.board:0 +#: model:ir.actions.act_window,name:purchase.action_purchase_order_monthly_categ_graph +#: view:purchase.report:0 +msgid "Monthly Purchase by Category" +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +msgid "Set to Draft" +msgstr "" + +#. module: purchase +#: selection:purchase.order,state:0 +#: selection:purchase.report,state:0 +msgid "Invoice Exception" +msgstr "" + +#. module: purchase +#: model:product.pricelist,name:purchase.list0 +msgid "Default Purchase Pricelist" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.action_current_purchases +msgid "Current purchases" +msgstr "Nuværende indkøb" + +#. module: purchase +#: help:purchase.order,dest_address_id:0 +msgid "" +"Put an address if you want to deliver directly from the supplier to the " +"customer.In this case, it will remove the warehouse link and set the " +"customer location." +msgstr "" + +#. module: purchase +#: help:res.partner,property_product_pricelist_purchase:0 +msgid "" +"This pricelist will be used, instead of the default one, for purchases from " +"the current partner" +msgstr "" + +#. module: purchase +#: report:purchase.order:0 +msgid "Fax :" +msgstr "" + +#. module: purchase +#: help:purchase.order,pricelist_id:0 +msgid "" +"The pricelist sets the currency used for this purchase order. It also " +"computes the supplier price for the selected products/quantities." +msgstr "" + +#. module: purchase +#: model:ir.model,name:purchase.model_stock_partial_picking +msgid "Partial Picking" +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:296 +#, python-format +msgid "Purchase order '%s' is confirmed." +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +msgid "Approve Purchase" +msgstr "Godkendt indkøb" + +#. module: purchase +#: model:process.node,name:purchase.process_node_approvepurchaseorder0 +#: view:purchase.order:0 +#: selection:purchase.order,state:0 +#: selection:purchase.report,state:0 +msgid "Approved" +msgstr "Godkendt" + +#. module: purchase +#: view:purchase.report:0 +msgid "Reference UOM" +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +msgid "Origin" +msgstr "" + +#. module: purchase +#: field:purchase.report,product_uom:0 +msgid "Reference UoM" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.action_purchase_line_product_tree +msgid "Purchases" +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +#: field:purchase.order,notes:0 +#: view:purchase.order.line:0 +#: field:purchase.order.line,notes:0 +msgid "Notes" +msgstr "Noter" + +#. module: purchase +#: code:addons/purchase/purchase.py:660 +#, python-format +msgid "" +"You have to select a pricelist or a supplier in the purchase form !\n" +"Please set one before choosing a product." +msgstr "" + +#. module: purchase +#: selection:purchase.report,month:0 +msgid "September" +msgstr "September" + +#. module: purchase +#: report:purchase.order:0 +#: field:purchase.order,amount_tax:0 +#: view:purchase.order.line:0 +#: field:purchase.order.line,taxes_id:0 +msgid "Taxes" +msgstr "Skatter" + +#. module: purchase +#: model:ir.actions.report.xml,name:purchase.report_purchase_order +#: model:ir.model,name:purchase.model_purchase_order +#: model:process.node,name:purchase.process_node_purchaseorder0 +#: field:procurement.order,purchase_id:0 +#: view:purchase.order:0 +#: model:res.request.link,name:purchase.req_link_purchase_order +#: field:stock.picking,purchase_id:0 +msgid "Purchase Order" +msgstr "Indkøbsordre" + +#. module: purchase +#: field:purchase.order,name:0 +#: view:purchase.order.line:0 +#: field:purchase.order.line,order_id:0 +msgid "Order Reference" +msgstr "" + +#. module: purchase +#: report:purchase.order:0 +msgid "Net Total :" +msgstr "Netto total:" + +#. module: purchase +#: view:purchase.installer:0 +msgid "Configure Your Purchases Management Application" +msgstr "" + +#. module: purchase +#: model:ir.ui.menu,name:purchase.menu_procurement_management_product +#: model:ir.ui.menu,name:purchase.menu_procurement_partner_contact_form +msgid "Products" +msgstr "Produkter" + +#. module: purchase +#: field:purchase.installer,progress:0 +msgid "Configuration Progress" +msgstr "" + +#. module: purchase +#: model:process.transition,note:purchase.process_transition_packinginvoice0 +msgid "" +"A Pick list generates an invoice. Depending on the Invoicing control of the " +"sale order, the invoice is based on delivered or on ordered quantities." +msgstr "" + +#. module: purchase +#: selection:purchase.order,state:0 +#: selection:purchase.order.line,state:0 +#: selection:purchase.report,state:0 +msgid "Cancelled" +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:315 +#, python-format +msgid "Purchase amount over the limit" +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +msgid "Convert to Purchase Order" +msgstr "" + +#. module: purchase +#: field:purchase.order,pricelist_id:0 +#: field:purchase.report,pricelist_id:0 +msgid "Pricelist" +msgstr "Prislist" + +#. module: purchase +#: selection:purchase.order,state:0 +#: selection:purchase.report,state:0 +msgid "Shipping Exception" +msgstr "" + +#. module: purchase +#: field:purchase.order.line,invoice_lines:0 +msgid "Invoice Lines" +msgstr "" + +#. module: purchase +#: model:process.node,name:purchase.process_node_packinglist0 +#: model:process.node,name:purchase.process_node_productrecept0 +msgid "Incoming Products" +msgstr "" + +#. module: purchase +#: model:process.node,name:purchase.process_node_packinginvoice0 +msgid "Outgoing Products" +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +msgid "Manually Corrected" +msgstr "" + +#. module: purchase +#: view:purchase.report:0 +msgid " Month " +msgstr " Måned " + +#. module: purchase +#: view:purchase.order:0 +msgid "Reference" +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:244 +#, python-format +msgid "Cannot delete Purchase Order(s) which are in %s State!" +msgstr "" + +#. module: purchase +#: field:purchase.report,dest_address_id:0 +msgid "Dest. Address Contact Name" +msgstr "" + +#. module: purchase +#: model:ir.model,name:purchase.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: purchase +#: view:purchase.report:0 +#: field:purchase.report,day:0 +msgid "Day" +msgstr "Dag" + +#. module: purchase +#: code:addons/purchase/purchase.py:344 +#, python-format +msgid "Purchase order '%s' has been set in draft state." +msgstr "" + +#. module: purchase +#: field:purchase.order.line,account_analytic_id:0 +msgid "Analytic Account" +msgstr "" + +#. module: purchase +#: view:purchase.report:0 +#: field:purchase.report,nbr:0 +msgid "# of Lines" +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:696 +#: code:addons/purchase/purchase.py:735 +#: code:addons/purchase/wizard/purchase_order_group.py:47 +#, python-format +msgid "Warning" +msgstr "" + +#. module: purchase +#: field:purchase.installer,purchase_analytic_plans:0 +msgid "Purchase Analytic Plans" +msgstr "" + +#. module: purchase +#: model:ir.model,name:purchase.model_purchase_installer +msgid "purchase.installer" +msgstr "" + +#. module: purchase +#: selection:purchase.order.line,state:0 +msgid "Draft" +msgstr "" + +#. module: purchase +#: report:purchase.order:0 +msgid "Net Price" +msgstr "Netto pris" + +#. module: purchase +#: view:purchase.order.line:0 +msgid "Order Line" +msgstr "" + +#. module: purchase +#: help:purchase.order,shipped:0 +msgid "It indicates that a picking has been done" +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:721 +#, python-format +msgid "Wrong Product UOM !" +msgstr "" + +#. module: purchase +#: model:process.node,name:purchase.process_node_confirmpurchaseorder0 +#: selection:purchase.order.line,state:0 +msgid "Confirmed" +msgstr "Bekræftet" + +#. module: purchase +#: view:purchase.report:0 +#: field:purchase.report,price_average:0 +msgid "Average Price" +msgstr "" + +#. module: purchase +#: report:purchase.order:0 +msgid "Total :" +msgstr "Total:" + +#. module: purchase +#: model:process.transition.action,name:purchase.process_transition_action_confirmpurchaseorder0 +#: view:purchase.order.line_invoice:0 +msgid "Confirm" +msgstr "Bekræft" + +#. module: purchase +#: model:ir.ui.menu,name:purchase.menu_procurement_management_invoice +#: view:purchase.order:0 +msgid "Invoice Control" +msgstr "" + +#. module: purchase +#: constraint:res.company:0 +msgid "Error! You can not create recursive companies." +msgstr "" + +#. module: purchase +#: field:purchase.order,partner_ref:0 +msgid "Supplier Reference" +msgstr "" + +#. module: purchase +#: help:purchase.order,amount_tax:0 +msgid "The tax amount" +msgstr "" + +#. module: purchase +#: model:process.transition,note:purchase.process_transition_productrecept0 +msgid "" +"A Pick list generates a supplier invoice. Depending on the Invoicing control " +"of the purchase order, the invoice is based on received or on ordered " +"quantities." +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +#: field:purchase.order,state:0 +#: view:purchase.order.line:0 +#: field:purchase.order.line,state:0 +#: view:purchase.report:0 +msgid "State" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,help:purchase.action_stock_move_report_po +msgid "" +"Reception Analysis allows you to easily check and analyse your company order " +"receptions and the performance of your supplier's deliveries." +msgstr "" + +#. module: purchase +#: report:purchase.quotation:0 +msgid "Tel.:" +msgstr "" + +#. module: purchase +#: model:ir.model,name:purchase.model_stock_picking +#: field:purchase.order,picking_ids:0 +msgid "Picking List" +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +msgid "Print" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.action_view_purchase_order_group +msgid "Merge Purchase orders" +msgstr "" + +#. module: purchase +#: field:purchase.order,order_line:0 +msgid "Order Lines" +msgstr "Ordre linie" + +#. module: purchase +#: code:addons/purchase/purchase.py:662 +#, python-format +msgid "No Partner!" +msgstr "" + +#. module: purchase +#: report:purchase.quotation:0 +msgid "Fax:" +msgstr "Fax:" + +#. module: purchase +#: view:purchase.report:0 +#: field:purchase.report,price_total:0 +msgid "Total Price" +msgstr "Total pris" + +#. module: purchase +#: view:purchase.order:0 +msgid "Untaxed amount" +msgstr "" + +#. module: purchase +#: model:ir.ui.menu,name:purchase.menu_product_pricelist_action2_purchase +#: model:ir.ui.menu,name:purchase.menu_purchase_config_pricelist +msgid "Pricelists" +msgstr "Prislister" + +#. module: purchase +#: field:purchase.report,partner_address_id:0 +msgid "Address Contact Name" +msgstr "" + +#. module: purchase +#: help:purchase.order,invoice_method:0 +msgid "" +"From Order: a draft invoice will be pre-generated based on the purchase " +"order. The accountant will just have to validate this invoice for control.\n" +"From Picking: a draft invoice will be pre-generated based on validated " +"receptions.\n" +"Manual: allows you to generate suppliers invoices by chosing in the " +"uninvoiced lines of all manual purchase orders." +msgstr "" + +#. module: purchase +#: help:purchase.order,invoice_ids:0 +msgid "Invoices generated for a purchase order" +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:292 +#: code:addons/purchase/purchase.py:362 +#: code:addons/purchase/purchase.py:372 +#: code:addons/purchase/wizard/purchase_line_invoice.py:122 +#, python-format +msgid "Error !" +msgstr "" + +#. module: purchase +#: view:purchase.order.line:0 +msgid "General Information" +msgstr "" + +#. module: purchase +#: view:board.board:0 +msgid "My Board" +msgstr "" + +#. module: purchase +#: report:purchase.order:0 +msgid "Purchase Order Confirmation N°" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,help:purchase.action_purchase_order_report_all +msgid "" +"Purchase Analysis allows you to easily check and analyse your company " +"purchase history and performance. From this menu you can track your " +"negotiation performance, the delivery performance of your suppliers, etc." +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +msgid "Approved by Supplier" +msgstr "" + +#. module: purchase +#: model:process.transition,note:purchase.process_transition_invoicefrompackinglist0 +msgid "" +"The invoice is created automatically if the Invoice control of the purchase " +"order is 'On picking'. The invoice can also be generated manually by the " +"accountant (Invoice control = Manual)." +msgstr "" + +#. module: purchase +#: selection:purchase.order,invoice_method:0 +msgid "From Order" +msgstr "" + +#. module: purchase +#: model:process.transition.action,name:purchase.process_transition_action_invoicefrompurchaseorder0 +msgid "Create invoice" +msgstr "" + +#. module: purchase +#: field:purchase.order.line,move_dest_id:0 +msgid "Reservation Destination" +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:244 +#, python-format +msgid "Invalid action !" +msgstr "" + +#. module: purchase +#: selection:purchase.order,state:0 +#: selection:purchase.order.line,state:0 +#: selection:purchase.report,state:0 +msgid "Done" +msgstr "" + +#. module: purchase +#: selection:purchase.report,month:0 +msgid "July" +msgstr "Juli" + +#. module: purchase +#: model:ir.ui.menu,name:purchase.menu_purchase_config_purchase +#: view:res.company:0 +msgid "Configuration" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.action_purchase_by_supplier +#: view:purchase.report:0 +msgid "Purchase by supplier" +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +msgid "Total amount" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.act_purchase_order_2_stock_picking +msgid "Receptions" +msgstr "" + +#. module: purchase +#: field:purchase.order,validator:0 +#: view:purchase.report:0 +msgid "Validated by" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,help:purchase.action_invoice_pending +msgid "" +"Use this menu to control the invoices to be received from your supplier. " +"OpenERP pregenerates draft invoices from your purchase orders or receptions, " +"according to your settings. Once you receive a supplier invoice, you can " +"match it with the draft invoice and validate it." +msgstr "" + +#. module: purchase +#: model:process.node,name:purchase.process_node_draftpurchaseorder0 +#: model:process.node,name:purchase.process_node_draftpurchaseorder1 +msgid "RFQ" +msgstr "" + +#. module: purchase +#: model:ir.ui.menu,name:purchase.menu_procurement_management_pending_invoice +msgid "Supplier Invoices to Receive" +msgstr "" + +#. module: purchase +#: help:purchase.installer,purchase_requisition:0 +msgid "" +"Manages your Purchase Requisition and allows you to easily keep track and " +"manage all your purchase orders." +msgstr "" + +#. module: purchase +#: view:purchase.report:0 +msgid " Month-1 " +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:373 +#, python-format +msgid "There is no purchase journal defined for this company: \"%s\" (id:%d)" +msgstr "" + +#. module: purchase +#: selection:purchase.order,invoice_method:0 +msgid "Manual" +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:410 +#, python-format +msgid "You must first cancel all picking attached to this purchase order." +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +#: field:purchase.order.line,date_order:0 +#: field:purchase.report,date:0 +msgid "Order Date" +msgstr "Ordredato" + +#. module: purchase +#: model:process.node,note:purchase.process_node_productrecept0 +msgid "Incoming products to control" +msgstr "" + +#. module: purchase +#: model:process.transition,name:purchase.process_transition_approvingpurchaseorder0 +msgid "Approbation" +msgstr "" + +#. module: purchase +#: view:purchase.report:0 +msgid "Purchase Orders Statistics" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,help:purchase.purchase_line_form_action2 +msgid "" +"If you set the invoicing control on a purchase order as \"Manual\", you can " +"track here all the purchase order lines for which you have not received the " +"supplier invoice yet. Once you are ready to receive a supplier invoice, you " +"can generate a draft supplier invoice based on the lines from this menu." +msgstr "" + +#. module: purchase +#: model:process.node,name:purchase.process_node_invoiceafterpacking0 +#: model:process.node,name:purchase.process_node_invoicecontrol0 +msgid "Draft Invoice" +msgstr "" + +#. module: purchase +#: help:purchase.installer,purchase_analytic_plans:0 +msgid "Manages analytic distribution and purchase orders." +msgstr "" + +#. module: purchase +#: help:purchase.order,minimum_planned_date:0 +msgid "" +"This is computed as the minimum scheduled date of all purchase order lines' " +"products." +msgstr "" + +#. module: purchase +#: selection:purchase.report,month:0 +msgid "August" +msgstr "August" + +#. module: purchase +#: field:purchase.installer,purchase_requisition:0 +msgid "Purchase Requisition" +msgstr "Indkøbs rekvisition" + +#. module: purchase +#: model:ir.ui.menu,name:purchase.menu_purchase_uom_categ_form_action +msgid "Units of Measure Categories" +msgstr "" + +#. module: purchase +#: view:purchase.report:0 +#: field:purchase.report,delay_pass:0 +msgid "Days to Deliver" +msgstr "" + +#. module: purchase +#: model:ir.ui.menu,name:purchase.menu_action_picking_tree_in_move +#: model:ir.ui.menu,name:purchase.menu_procurement_management_inventory +msgid "Receive Products" +msgstr "" + +#. module: purchase +#: model:ir.model,name:purchase.model_procurement_order +msgid "Procurement" +msgstr "Indkøb" + +#. module: purchase +#: view:purchase.order:0 +#: field:purchase.order,invoice_ids:0 +msgid "Invoices" +msgstr "Fakturaer" + +#. module: purchase +#: model:process.node,note:purchase.process_node_purchaseorder0 +msgid "Confirmed purchase order to invoice" +msgstr "" + +#. module: purchase +#: field:purchase.installer,config_logo:0 +msgid "Image" +msgstr "Billede" + +#. module: purchase +#: view:purchase.report:0 +msgid "Total Orders Lines by User per month" +msgstr "" + +#. module: purchase +#: view:purchase.report:0 +#: field:purchase.report,month:0 +msgid "Month" +msgstr "Måned" + +#. module: purchase +#: selection:purchase.report,state:0 +msgid "Waiting Supplier Ack" +msgstr "" + +#. module: purchase +#: report:purchase.quotation:0 +msgid "Request for Quotation :" +msgstr "" + +#. module: purchase +#: view:board.board:0 +#: model:ir.actions.act_window,name:purchase.purchase_waiting +msgid "Purchase Order Waiting Approval" +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +msgid "Total Untaxed amount" +msgstr "" + +#. module: purchase +#: field:purchase.order,shipped:0 +#: field:purchase.order,shipped_rate:0 +msgid "Received" +msgstr "Modtaget" + +#. module: purchase +#: model:process.node,note:purchase.process_node_packinglist0 +msgid "List of ordered products." +msgstr "" + +#. module: purchase +#: help:purchase.order,picking_ids:0 +msgid "" +"This is the list of picking list that have been generated for this purchase" +msgstr "" + +#. module: purchase +#: model:ir.module.module,shortdesc:purchase.module_meta_information +#: model:ir.ui.menu,name:purchase.menu_procurement_management +msgid "Purchase Management" +msgstr "" + +#. module: purchase +#: model:process.node,note:purchase.process_node_invoiceafterpacking0 +#: model:process.node,note:purchase.process_node_invoicecontrol0 +msgid "To be reviewed by the accountant." +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.purchase_line_form_action2 +#: model:ir.ui.menu,name:purchase.menu_purchase_line_order_draft +msgid "On Purchase Order Line" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.action_picking_tree4_picking_to_invoice +#: model:ir.ui.menu,name:purchase.action_picking_tree4_picking_to_invoice +msgid "On Receptions" +msgstr "" + +#. module: purchase +#: report:purchase.order:0 +msgid "Taxes :" +msgstr "" + +#. module: purchase +#: field:purchase.order,invoiced_rate:0 +#: field:purchase.order.line,invoiced:0 +msgid "Invoiced" +msgstr "Faktureret" + +#. module: purchase +#: view:purchase.report:0 +#: field:purchase.report,category_id:0 +msgid "Category" +msgstr "Kategori" + +#. module: purchase +#: model:process.node,note:purchase.process_node_approvepurchaseorder0 +#: model:process.node,note:purchase.process_node_confirmpurchaseorder0 +msgid "State of the Purchase Order." +msgstr "" + +#. module: purchase +#: view:purchase.report:0 +msgid " Year " +msgstr " År " + +#. module: purchase +#: field:purchase.report,state:0 +msgid "Order State" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.action_view_purchase_line_invoice +msgid "Create invoices" +msgstr "" + +#. module: purchase +#: model:ir.model,name:purchase.model_purchase_order_line +#: view:purchase.order.line:0 +#: field:stock.move,purchase_line_id:0 +msgid "Purchase Order Line" +msgstr "" + +#. module: purchase +#: constraint:res.partner:0 +msgid "Error ! You can not create recursive associated members." +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +msgid "Calendar View" +msgstr "" + +#. module: purchase +#: model:ir.model,name:purchase.model_purchase_order_group +msgid "Purchase Order Merge" +msgstr "" + +#. module: purchase +#: report:purchase.quotation:0 +msgid "Regards," +msgstr "Hilsen" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.action_negotiation_by_supplier +#: view:purchase.report:0 +msgid "Negotiation by Supplier" +msgstr "" + +#. module: purchase +#: view:res.partner:0 +msgid "Purchase Properties" +msgstr "" + +#. module: purchase +#: model:process.transition,note:purchase.process_transition_purchaseinvoice0 +msgid "" +"A purchase order generates a supplier invoice, as soon as it is confirmed by " +"the buyer. Depending on the Invoicing control of the purchase order, the " +"invoice is based on received or on ordered quantities." +msgstr "" + +#. module: purchase +#: field:purchase.order,amount_untaxed:0 +msgid "Untaxed Amount" +msgstr "" + +#. module: purchase +#: help:purchase.order,invoiced:0 +msgid "It indicates that an invoice has been paid" +msgstr "" + +#. module: purchase +#: model:process.node,note:purchase.process_node_packinginvoice0 +msgid "Outgoing products to invoice" +msgstr "" + +#. module: purchase +#: view:purchase.installer:0 +msgid "Configure" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.action_qty_per_product +#: view:purchase.report:0 +msgid "Qty. per product" +msgstr "" + +#. module: purchase +#: constraint:stock.move:0 +msgid "You try to assign a lot which is not from the same product" +msgstr "" + +#. module: purchase +#: help:purchase.order,date_order:0 +msgid "Date on which this document has been created." +msgstr "" + +#. module: purchase +#: view:res.partner:0 +msgid "Sales & Purchases" +msgstr "" + +#. module: purchase +#: selection:purchase.report,month:0 +msgid "June" +msgstr "Juni" + +#. module: purchase +#: model:ir.model,name:purchase.model_purchase_report +msgid "Purchases Orders" +msgstr "" + +#. module: purchase +#: view:purchase.order.line:0 +msgid "Manual Invoices" +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:318 +#, python-format +msgid "" +"Somebody has just confirmed a purchase with an amount over the defined limit" +msgstr "" + +#. module: purchase +#: selection:purchase.report,month:0 +msgid "November" +msgstr "November" + +#. module: purchase +#: view:purchase.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:362 +#: code:addons/purchase/wizard/purchase_line_invoice.py:123 +#, python-format +msgid "There is no expense account defined for this product: \"%s\" (id:%d)" +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:418 +#, python-format +msgid "You must first cancel all invoices attached to this purchase order." +msgstr "" + +#. module: purchase +#: code:addons/purchase/wizard/purchase_order_group.py:48 +#, python-format +msgid "Please select multiple order to merge in the list view." +msgstr "" + +#. module: purchase +#: model:process.transition,name:purchase.process_transition_createpackinglist0 +msgid "Pick list generated" +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +msgid "Exception" +msgstr "" + +#. module: purchase +#: selection:purchase.report,month:0 +msgid "October" +msgstr "Oktober" + +#. module: purchase +#: view:purchase.order:0 +msgid "Compute" +msgstr "" + +#. module: purchase +#: model:ir.module.module,description:purchase.module_meta_information +msgid "" +"\n" +" Purchase module is for generating a purchase order for purchase of goods " +"from a supplier.\n" +" A supplier invoice is created for the particular order placed\n" +" Dashboard for purchase management that includes:\n" +" * Current Purchase Orders\n" +" * Draft Purchase Orders\n" +" * Graph for quantity and amount per month \n" +"\n" +" " +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:696 +#, python-format +msgid "" +"The selected supplier has a minimal quantity set to %s, you cannot purchase " +"less." +msgstr "" + +#. module: purchase +#: selection:purchase.report,month:0 +msgid "January" +msgstr "Januar" + +#. module: purchase +#: model:ir.model,name:purchase.model_res_company +msgid "Companies" +msgstr "Virksomheder" + +#. module: purchase +#: view:purchase.order:0 +msgid "Cancel Purchase Order" +msgstr "" + +#. module: purchase +#: constraint:stock.move:0 +msgid "You must assign a production lot for this product" +msgstr "" + +#. module: purchase +#: model:process.transition,note:purchase.process_transition_createpackinglist0 +msgid "A pick list is generated to track the incoming products." +msgstr "" + +#. module: purchase +#: model:ir.ui.menu,name:purchase.menu_purchase_deshboard +msgid "Dashboard" +msgstr "Oversigt" + +#. module: purchase +#: view:purchase.report:0 +#: field:purchase.report,price_standard:0 +msgid "Products Value" +msgstr "" + +#. module: purchase +#: model:ir.ui.menu,name:purchase.menu_purchase_product_pricelist_type +msgid "Pricelists Types" +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +#: view:purchase.report:0 +msgid "Quotations" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.action_po_per_month_tree +#: view:purchase.report:0 +msgid "Purchase order per month" +msgstr "" + +#. module: purchase +#: view:purchase.order.line:0 +msgid "History" +msgstr "Historik" + +#. module: purchase +#: model:ir.ui.menu,name:purchase.menu_product_by_category_purchase_form +msgid "Products by Category" +msgstr "" + +#. module: purchase +#: view:purchase.report:0 +#: field:purchase.report,delay:0 +msgid "Days to Validate" +msgstr "" + +#. module: purchase +#: help:purchase.order,origin:0 +msgid "Reference of the document that generated this purchase order request." +msgstr "" + +#. module: purchase +#: help:purchase.order,state:0 +msgid "" +"The state of the purchase order or the quotation request. A quotation is a " +"purchase order in a 'Draft' state. Then the order has to be confirmed by the " +"user, the state switch to 'Confirmed'. Then the supplier must confirm the " +"order to change the state to 'Approved'. When the purchase order is paid and " +"received, the state becomes 'Done'. If a cancel action occurs in the invoice " +"or in the reception of goods, the state becomes in exception." +msgstr "" + +#. module: purchase +#: field:purchase.order.line,price_subtotal:0 +msgid "Subtotal" +msgstr "Subtotal" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.purchase_rfq +#: model:ir.ui.menu,name:purchase.menu_purchase_rfq +msgid "Requests for Quotation" +msgstr "" + +#. module: purchase +#: help:purchase.order,date_approve:0 +msgid "Date on which purchase order has been approved" +msgstr "" + +#. module: purchase +#: selection:purchase.order,state:0 +#: selection:purchase.report,state:0 +msgid "Waiting" +msgstr "" + +#. module: purchase +#: model:product.pricelist.version,name:purchase.ver0 +msgid "Default Purchase Pricelist Version" +msgstr "" + +#. module: purchase +#: view:purchase.installer:0 +msgid "" +"Extend your Purchases Management Application with additional functionalities." +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.action_purchase_install_module +#: view:purchase.installer:0 +msgid "Purchases Application Configuration" +msgstr "" + +#. module: purchase +#: field:purchase.order,fiscal_position:0 +msgid "Fiscal Position" +msgstr "" + +#. module: purchase +#: report:purchase.order:0 +msgid "Request for Quotation N°" +msgstr "" + +#. module: purchase +#: model:process.transition,name:purchase.process_transition_invoicefrompackinglist0 +#: model:process.transition,name:purchase.process_transition_invoicefrompurchase0 +msgid "Invoice" +msgstr "" + +#. module: purchase +#: selection:purchase.report,month:0 +msgid "December" +msgstr "December" + +#. module: purchase +#: model:process.transition.action,name:purchase.process_transition_action_approvingcancelpurchaseorder0 +#: model:process.transition.action,name:purchase.process_transition_action_cancelpurchaseorder0 +#: view:purchase.order:0 +#: view:purchase.order.group:0 +#: view:purchase.order.line_invoice:0 +msgid "Cancel" +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +#: view:purchase.order.line:0 +msgid "Purchase Order Lines" +msgstr "" + +#. module: purchase +#: model:process.transition,note:purchase.process_transition_approvingpurchaseorder0 +msgid "The supplier approves the Purchase Order." +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.act_res_partner_2_purchase_order +#: model:ir.actions.act_window,name:purchase.purchase_form_action +#: model:ir.ui.menu,name:purchase.menu_purchase_form_action +#: view:purchase.report:0 +msgid "Purchase Orders" +msgstr "Indkøbsordrer" + +#. module: purchase +#: field:purchase.order,origin:0 +msgid "Source Document" +msgstr "" + +#. module: purchase +#: view:purchase.order.group:0 +msgid "Merge orders" +msgstr "" + +#. module: purchase +#: model:ir.model,name:purchase.model_purchase_order_line_invoice +msgid "Purchase Order Line Make Invoice" +msgstr "" + +#. module: purchase +#: model:ir.ui.menu,name:purchase.menu_action_picking_tree4 +msgid "Incoming Shipments" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.action_purchase_order_by_user_all +msgid "Total Orders by User per month" +msgstr "" + +#. module: purchase +#: model:ir.actions.report.xml,name:purchase.report_purchase_quotation +#: selection:purchase.order,state:0 +#: selection:purchase.report,state:0 +msgid "Request for Quotation" +msgstr "" + +#. module: purchase +#: report:purchase.order:0 +msgid "Tél. :" +msgstr "" + +#. module: purchase +#: field:purchase.order,create_uid:0 +#: view:purchase.report:0 +#: field:purchase.report,user_id:0 +msgid "Responsible" +msgstr "" + +#. module: purchase +#: report:purchase.order:0 +msgid "Our Order Reference" +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +#: view:purchase.order.line:0 +msgid "Search Purchase Order" +msgstr "" + +#. module: purchase +#: field:purchase.order,warehouse_id:0 +#: view:purchase.report:0 +#: field:purchase.report,warehouse_id:0 +msgid "Warehouse" +msgstr "" + +#. module: purchase +#: model:process.node,note:purchase.process_node_draftpurchaseorder0 +#: model:process.node,note:purchase.process_node_draftpurchaseorder1 +msgid "Request for Quotations." +msgstr "" + +#. module: purchase +#: report:purchase.order:0 +msgid "Date Req." +msgstr "" + +#. module: purchase +#: field:purchase.order,date_approve:0 +#: field:purchase.report,date_approve:0 +msgid "Date Approved" +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:417 +#, python-format +msgid "Could not cancel this purchase order !" +msgstr "" + +#. module: purchase +#: report:purchase.order:0 +#: field:purchase.order.line,price_unit:0 +msgid "Unit Price" +msgstr "Enhedspris" + +#. module: purchase +#: view:purchase.order:0 +msgid "Delivery & Invoicing" +msgstr "" + +#. module: purchase +#: field:purchase.order.line,date_planned:0 +msgid "Scheduled Date" +msgstr "" + +#. module: purchase +#: model:ir.ui.menu,name:purchase.menu_product_in_config_purchase +#: field:purchase.order,product_id:0 +#: view:purchase.order.line:0 +#: field:purchase.order.line,product_id:0 +#: view:purchase.report:0 +#: field:purchase.report,product_id:0 +msgid "Product" +msgstr "" + +#. module: purchase +#: model:process.transition,name:purchase.process_transition_confirmingpurchaseorder0 +#: model:process.transition,name:purchase.process_transition_confirmingpurchaseorder1 +msgid "Confirmation" +msgstr "" + +#. module: purchase +#: report:purchase.order:0 +#: field:purchase.order.line,name:0 +#: report:purchase.quotation:0 +msgid "Description" +msgstr "" + +#. module: purchase +#: help:res.company,po_lead:0 +msgid "This is the leads/security time for each purchase order." +msgstr "" + +#. module: purchase +#: report:purchase.quotation:0 +msgid "Expected Delivery address:" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.action_stock_move_report_po +#: model:ir.ui.menu,name:purchase.menu_action_stock_move_report_po +msgid "Receptions Analysis" +msgstr "" + +#. module: purchase +#: help:purchase.order,amount_untaxed:0 +msgid "The amount without tax" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,help:purchase.action_supplier_address_form +msgid "" +"Access your supplier records and maintain a good relationship with your " +"suppliers. You can track all your interactions with them through the History " +"tab: emails, orders, meetings, etc." +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +msgid "Delivery" +msgstr "" + +#. module: purchase +#: view:board.board:0 +#: model:ir.actions.act_window,name:purchase.purchase_draft +msgid "Request for Quotations" +msgstr "" + +#. module: purchase +#: field:purchase.order.line,product_uom:0 +msgid "Product UOM" +msgstr "" + +#. module: purchase +#: report:purchase.order:0 +#: report:purchase.quotation:0 +msgid "Qty" +msgstr "Antal" + +#. module: purchase +#: field:purchase.order,partner_address_id:0 +msgid "Address" +msgstr "" + +#. module: purchase +#: field:purchase.order.line,move_ids:0 +msgid "Reservation" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.action_purchase_order_report_graph +#: view:purchase.report:0 +msgid "Total Qty and Amount by month" +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:409 +#, python-format +msgid "Could not cancel purchase order !" +msgstr "" + +#. module: purchase +#: model:process.transition,note:purchase.process_transition_confirmingpurchaseorder1 +msgid "" +"In case there is no supplier for this product, the buyer can fill the form " +"manually and confirm it. The RFQ becomes a confirmed Purchase Order." +msgstr "" + +#. module: purchase +#: selection:purchase.report,month:0 +msgid "February" +msgstr "Februar" + +#. module: purchase +#: model:ir.ui.menu,name:purchase.menu_product_category_config_purchase +msgid "Products Categories" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.action_purchase_order_report_all +#: model:ir.ui.menu,name:purchase.menu_action_purchase_order_report_all +msgid "Purchase Analysis" +msgstr "" + +#. module: purchase +#: report:purchase.order:0 +msgid "Your Order Reference" +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +#: field:purchase.order,minimum_planned_date:0 +#: report:purchase.quotation:0 +#: field:purchase.report,expected_date:0 +msgid "Expected Date" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.action_total_price_by_product_by_state +#: view:purchase.report:0 +msgid "Total price by product by state" +msgstr "" + +#. module: purchase +#: report:purchase.quotation:0 +msgid "TVA:" +msgstr "" + +#. module: purchase +#: report:purchase.order:0 +#: field:purchase.order,date_order:0 +msgid "Date Ordered" +msgstr "" + +#. module: purchase +#: report:purchase.order:0 +msgid "Shipping address :" +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +msgid "Purchase Control" +msgstr "" + +#. module: purchase +#: selection:purchase.report,month:0 +msgid "March" +msgstr "Marts" + +#. module: purchase +#: selection:purchase.report,month:0 +msgid "April" +msgstr "April" + +#. module: purchase +#: view:purchase.order.group:0 +msgid "" +" Please note that: \n" +" \n" +" Orders will only be merged if: \n" +" * Purchase Orders are in draft \n" +" * Purchase Orders belong to the same supplier \n" +" * Purchase Orders are have same stock location, same pricelist \n" +" \n" +" Lines will only be merged if: \n" +" * Order lines are exactly the same except for the product,quantity and unit " +"\n" +" " +msgstr "" + +#. module: purchase +#: view:purchase.report:0 +#: field:purchase.report,name:0 +msgid "Year" +msgstr "År" + +#. module: purchase +#: field:purchase.report,negociation:0 +msgid "Purchase-Standard Price" +msgstr "" + +#. module: purchase +#: model:product.pricelist.type,name:purchase.pricelist_type_purchase +#: field:res.partner,property_product_pricelist_purchase:0 +msgid "Purchase Pricelist" +msgstr "" + +#. module: purchase +#: field:purchase.order,invoice_method:0 +msgid "Invoicing Control" +msgstr "" + +#. module: purchase +#: model:process.transition.action,name:purchase.process_transition_action_approvingpurchaseorder0 +msgid "Approve" +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +msgid "To Approve" +msgstr "" + +#. module: purchase +#: view:purchase.order.line:0 +msgid "Invoicing" +msgstr "" + +#. module: purchase +#: help:purchase.order.line,state:0 +msgid "" +" * The 'Draft' state is set automatically when purchase order in draft " +"state. \n" +"* The 'Confirmed' state is set automatically as confirm when purchase order " +"in confirm state. \n" +"* The 'Done' state is set automatically when purchase order is set as done. " +" \n" +"* The 'Cancelled' state is set automatically when user cancel purchase order." +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:424 +#, python-format +msgid "Purchase order '%s' is cancelled." +msgstr "" + +#. module: purchase +#: field:purchase.order,amount_total:0 +msgid "Total" +msgstr "Total" + +#. module: purchase +#: model:ir.ui.menu,name:purchase.menu_product_pricelist_action_purhase +msgid "Pricelist Versions" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.action_supplier_address_form +msgid "Addresses" +msgstr "" + +#. module: purchase +#: view:purchase.order.group:0 +msgid "Are you sure you want to merge these orders ?" +msgstr "" + +#. module: purchase +#: view:purchase.order:0 +#: view:purchase.order.line:0 +#: view:purchase.report:0 +msgid "Group By..." +msgstr "" + +#. module: purchase +#: model:process.transition,name:purchase.process_transition_purchaseinvoice0 +msgid "From a purchase order" +msgstr "" + +#. module: purchase +#: report:purchase.order:0 +msgid "TVA :" +msgstr "" + +#. module: purchase +#: help:purchase.order,amount_total:0 +msgid "The total amount" +msgstr "" + +#. module: purchase +#: selection:purchase.report,month:0 +msgid "May" +msgstr "Maj" + +#. module: purchase +#: field:res.company,po_lead:0 +msgid "Purchase Lead Time" +msgstr "" + +#. module: purchase +#: model:process.transition,note:purchase.process_transition_invoicefrompurchase0 +msgid "" +"The invoice is created automatically if the Invoice control of the purchase " +"order is 'On order'. The invoice can also be generated manually by the " +"accountant (Invoice control = Manual)." +msgstr "" + +#. module: purchase +#: model:process.process,name:purchase.process_process_purchaseprocess0 +msgid "Purchase" +msgstr "Indløb" + +#. module: purchase +#: model:ir.model,name:purchase.model_res_partner +#: field:purchase.order.line,partner_id:0 +msgid "Partner" +msgstr "" + +#. module: purchase +#: code:addons/purchase/purchase.py:662 +#, python-format +msgid "" +"You have to select a partner in the purchase form !\n" +"Please set one partner before choosing a product." +msgstr "" + +#. module: purchase +#: view:purchase.installer:0 +msgid "title" +msgstr "" + +#. module: purchase +#: model:ir.model,name:purchase.model_stock_partial_move +msgid "Partial Move" +msgstr "" + +#. module: purchase +#: view:purchase.order.line:0 +msgid "Stock Moves" +msgstr "" + +#. module: purchase +#: model:ir.ui.menu,name:purchase.menu_purchase_unit_measure_purchase +#: model:ir.ui.menu,name:purchase.menu_purchase_uom_form_action +msgid "Units of Measure" +msgstr "" + +#. module: purchase +#: view:purchase.report:0 +msgid "Orders" +msgstr "" + +#. module: purchase +#: help:purchase.order,name:0 +msgid "" +"unique number of the purchase order,computed automatically when the purchase " +"order is created" +msgstr "" + +#. module: purchase +#: model:ir.actions.act_window,name:purchase.open_board_purchase +#: model:ir.ui.menu,name:purchase.menu_board_purchase +msgid "Purchase Dashboard" +msgstr "Indkøb oversigt" diff --git a/addons/purchase/report/order.rml b/addons/purchase/report/order.rml index 4b143d0f961..188f969e07c 100644 --- a/addons/purchase/report/order.rml +++ b/addons/purchase/report/order.rml @@ -293,7 +293,7 @@ [[ formatLang(line.price_unit, digits=get_digits(dp='Purchase Price') ) ]] - [[ formatLang(line.price_subtotal, digits=get_digits(dp='Purchase Price') ) ]] [[ o.pricelist_id.currency_id.symbol ]] + [[ formatLang(line.price_subtotal, digits=get_digits(dp='Purchase Price'), currency_obj=o.pricelist_id.currency_id ) ]] @@ -339,7 +339,7 @@ Net Total : - [[ formatLang(o.amount_untaxed, digits=get_digits(dp='Purchase Price') ) ]] [[ o.pricelist_id.currency_id. symbol ]] + [[ formatLang(o.amount_untaxed, digits=get_digits(dp='Purchase Price'), currency_obj=o.pricelist_id.currency_id ) ]] @@ -352,7 +352,7 @@ Taxes : - [[ formatLang(o.amount_tax, dp='Purchase Price') ]] [[ o.pricelist_id.currency_id. symbol ]] + [[ formatLang(o.amount_tax, dp='Purchase Price', currency_obj=o.pricelist_id.currency_id) ]] @@ -365,7 +365,7 @@ Total : - [[ formatLang(o.amount_total, digits=get_digits(dp='Purchase Price') ) ]] [[ o.pricelist_id.currency_id. symbol ]] + [[ formatLang(o.amount_total, digits=get_digits(dp='Purchase Price') , currency_obj=o.pricelist_id.currency_id) ]] diff --git a/addons/sale/report/sale_order.rml b/addons/sale/report/sale_order.rml index 00ebb50472e..a6902f79047 100644 --- a/addons/sale/report/sale_order.rml +++ b/addons/sale/report/sale_order.rml @@ -283,7 +283,7 @@ [[ formatLang(line.discount) ]] - [[ formatLang(line.price_subtotal, digits=get_digits(dp='Sale Price')) ]] [[ o.pricelist_id.currency_id.symbol ]] + [[ formatLang(line.price_subtotal, digits=get_digits(dp='Sale Price'), currency_obj=o.pricelist_id.currency_id) ]] @@ -329,7 +329,7 @@ Net Total : - [[ formatLang(o.amount_untaxed, dp='Sale Price') ]] [[ o.pricelist_id.currency_id.symbol ]] + [[ formatLang(o.amount_untaxed, dp='Sale Price', currency_obj=o.pricelist_id.currency_id) ]] @@ -342,7 +342,7 @@ Taxes : - [[ formatLang(o.amount_tax, dp='Sale Price') ]] [[ o.pricelist_id.currency_id.symbol ]] + [[ formatLang(o.amount_tax, dp='Sale Price', currency_obj=o.pricelist_id.currency_id) ]] @@ -355,7 +355,7 @@ Total : - [[ formatLang(o.amount_total, dp='Sale Price') ]] [[ o.pricelist_id.currency_id.symbol ]] + [[ formatLang(o.amount_total, dp='Sale Price', currency_obj=o.pricelist_id.currency_id) ]] diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 9c585801ffa..12c27c197ed 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -322,6 +322,16 @@ class sale_order(osv.osv): self.log(cr, uid, id, message) return True + def onchange_pricelist_id(self, cr, uid, ids, pricelist_id, order_lines, context={}): + print order_lines + if (not pricelist_id) or (not order_lines): + return {} + warning = { + 'title': _('Pricelist Warning!'), + 'message' : _('If you change the pricelist of this order (and eventually the currency), prices of existing order lines will not be updated.') + } + return {'warning': warning} + def onchange_partner_id(self, cr, uid, ids, part): if not part: return {'value': {'partner_invoice_id': False, 'partner_shipping_id': False, 'partner_order_id': False, 'payment_term': False, 'fiscal_position': False}} diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml index 75cbf6b7182..a12a4c566f5 100644 --- a/addons/sale/sale_view.xml +++ b/addons/sale/sale_view.xml @@ -112,7 +112,7 @@ - + @@ -492,7 +492,7 @@ - + + @@ -134,12 +135,12 @@ - - + +
- - + +
diff --git a/addons/survey/survey.py b/addons/survey/survey.py index 8b8fd02eb50..78b824af004 100644 --- a/addons/survey/survey.py +++ b/addons/survey/survey.py @@ -504,12 +504,12 @@ class survey_question(osv.osv): def data_get(self, cr, uid, data, context): if data and context: - if context.get('line_order',False) and data.get('sequence',0): + if context.get('line_order', False): lines = context.get('line_order') - seq = data['sequence'] + seq = data.get('sequence', 0) for line in lines: seq = seq + 1 - data.update({'sequence': str(seq)}) + data.update({'sequence': seq}) return data def default_get(self, cr, uid, fields, context=None): diff --git a/addons/wiki/i18n/hr.po b/addons/wiki/i18n/hr.po index d1bb1e3f456..62023e0099d 100644 --- a/addons/wiki/i18n/hr.po +++ b/addons/wiki/i18n/hr.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:16+0000\n" -"PO-Revision-Date: 2010-10-30 12:31+0000\n" -"Last-Translator: OpenERP Administrators \n" +"PO-Revision-Date: 2011-09-20 02:17+0000\n" +"Last-Translator: wooer \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-09-05 05:38+0000\n" -"X-Generator: Launchpad (build 13830)\n" +"X-Launchpad-Export-Date: 2011-09-21 04:50+0000\n" +"X-Generator: Launchpad (build 13996)\n" #. module: wiki #: field:wiki.groups,template:0 @@ -30,7 +30,7 @@ msgstr "Wiki stranice" #. module: wiki #: field:wiki.groups,method:0 msgid "Display Method" -msgstr "" +msgstr "Način prikaza" #. module: wiki #: view:wiki.wiki:0 @@ -57,7 +57,7 @@ msgstr "Odlomak" #. module: wiki #: help:wiki.wiki,toc:0 msgid "Indicates that this pages have a table of contents or not" -msgstr "" +msgstr "Ukazuje da li ove stranice imaju tablicu sadržaja ili ne" #. module: wiki #: model:ir.model,name:wiki.model_wiki_wiki_history @@ -90,7 +90,7 @@ msgstr "" #: view:wiki.wiki:0 #: field:wiki.wiki,write_uid:0 msgid "Last Contributor" -msgstr "" +msgstr "Zadnji suradnik" #. module: wiki #: field:wiki.create.menu,menu_parent_id:0 @@ -117,7 +117,7 @@ msgstr "Naslov" #. module: wiki #: model:ir.model,name:wiki.model_wiki_create_menu msgid "Wizard Create Menu" -msgstr "" +msgstr "Čarobnjak za stvaranje izbornika" #. module: wiki #: field:wiki.wiki,history_id:0 @@ -127,13 +127,13 @@ msgstr "Redovi povijesti" #. module: wiki #: view:wiki.wiki:0 msgid "Page Content" -msgstr "" +msgstr "Sadržaj stranice" #. module: wiki #: code:addons/wiki/wiki.py:236 #, python-format msgid "Warning !" -msgstr "" +msgstr "Upozorenje !" #. module: wiki #: code:addons/wiki/wiki.py:236 @@ -159,7 +159,7 @@ msgstr "Opis" #. module: wiki #: field:wiki.wiki,review:0 msgid "Needs Review" -msgstr "" +msgstr "Potrebno pregledati" #. module: wiki #: help:wiki.wiki,review:0 @@ -167,6 +167,7 @@ msgid "" "Indicates that this page should be reviewed, raising the attention of other " "contributors" msgstr "" +"Ukazuje da ovu stranicu treba pregledati, skrećući pozornost drugih suradnika" #. module: wiki #: view:wiki.create.menu:0 @@ -177,7 +178,7 @@ msgstr "Informacije o izborniku" #. module: wiki #: model:ir.actions.act_window,name:wiki.act_wiki_wiki_history msgid "Page History" -msgstr "" +msgstr "Povijest stranice" #. module: wiki #: selection:wiki.groups,method:0