diff options
265 files changed, 19627 insertions, 3582 deletions
diff --git a/addons/account/account_bank.py b/addons/account/account_bank.py index 44411cd637a..acb0e640a7a 100644 --- a/addons/account/account_bank.py +++ b/addons/account/account_bank.py @@ -65,12 +65,11 @@ class bank(osv.osv): # Find the code and parent of the bank account to create dig = 6 current_num = 1 - ids = obj_acc.search(cr, uid, [('type','=','liquidity'), ('company_id', '=', bank.company_id.id)], context=context) + ids = obj_acc.search(cr, uid, [('type','=','liquidity'), ('company_id', '=', bank.company_id.id), ('parent_id', '!=', False)], context=context) # No liquidity account exists, no template available if not ids: continue - ref_acc_bank_temp = obj_acc.browse(cr, uid, ids[0], context=context) - ref_acc_bank = ref_acc_bank_temp.parent_id + ref_acc_bank = obj_acc.browse(cr, uid, ids[0], context=context).parent_id while True: new_code = str(ref_acc_bank.code.ljust(dig-len(str(current_num)), '0')) + str(current_num) ids = obj_acc.search(cr, uid, [('code', '=', new_code), ('company_id', '=', bank.company_id.id)]) @@ -82,7 +81,7 @@ class bank(osv.osv): 'name': name, 'code': new_code, 'type': 'liquidity', - 'user_type': ref_acc_bank_temp.user_type.id, + 'user_type': ref_acc_bank.user_type.id, 'reconcile': False, 'parent_id': ref_acc_bank.id, 'company_id': bank.company_id.id, diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index 01476374cf4..0fb6af05e58 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -51,9 +51,12 @@ class account_invoice(osv.osv): company_id = context.get('company_id', user.company_id.id) type2journal = {'out_invoice': 'sale', 'in_invoice': 'purchase', 'out_refund': 'sale_refund', 'in_refund': 'purchase_refund'} journal_obj = self.pool.get('account.journal') - res = journal_obj.search(cr, uid, [('type', '=', type2journal.get(type_inv, 'sale')), - ('company_id', '=', company_id)], - limit=1) + domain = [('company_id', '=', company_id)] + if isinstance(type_inv, list): + domain.append(('type', 'in', [type2journal.get(type) for type in type_inv if type2journal.get(type)])) + else: + domain.append(('type', '=', type2journal.get(type_inv, 'sale'))) + res = journal_obj.search(cr, uid, domain, limit=1) return res and res[0] or False def _get_currency(self, cr, uid, context=None): @@ -578,6 +581,10 @@ class account_invoice(osv.osv): return {'value': {}} def onchange_company_id(self, cr, uid, ids, company_id, part_id, type, invoice_line, currency_id, context=None): + #TODO: add the missing context parameter when forward-porting in trunk so we can remove + # this hack! + context = self.pool['res.users'].context_get(cr, uid) + val = {} dom = {} obj_journal = self.pool.get('account.journal') @@ -634,14 +641,13 @@ class account_invoice(osv.osv): else: continue if company_id and type: - if type in ('out_invoice'): - journal_type = 'sale' - elif type in ('out_refund'): - journal_type = 'sale_refund' - elif type in ('in_refund'): - journal_type = 'purchase_refund' - else: - journal_type = 'purchase' + journal_mapping = { + 'out_invoice': 'sale', + 'out_refund': 'sale_refund', + 'in_refund': 'purchase_refund', + 'in_invoice': 'purchase', + } + journal_type = journal_mapping[type] journal_ids = obj_journal.search(cr, uid, [('company_id','=',company_id), ('type', '=', journal_type)]) if journal_ids: val['journal_id'] = journal_ids[0] @@ -651,7 +657,12 @@ class account_invoice(osv.osv): if r[1] == 'journal_id' and r[2] in journal_ids: val['journal_id'] = r[2] if not val.get('journal_id', False): - raise osv.except_osv(_('Configuration Error!'), (_('Cannot find any account journal of %s type for this company.\n\nYou can create one in the menu: \nConfiguration\Journals\Journals.') % (journal_type))) + journal_type_map = dict(obj_journal._columns['type'].selection) + journal_type_label = self.pool['ir.translation']._get_source(cr, uid, None, ('code','selection'), + context.get('lang'), + journal_type_map.get(journal_type)) + raise osv.except_osv(_('Configuration Error!'), + _('Cannot find any account journal of %s type for this company.\n\nYou can create one in the menu: \nConfiguration\Journals\Journals.') % ('"%s"' % journal_type_label)) dom = {'journal_id': [('id', 'in', journal_ids)]} else: journal_ids = obj_journal.search(cr, uid, []) @@ -968,7 +979,7 @@ class account_invoice(osv.osv): total, total_currency, iml = self.compute_invoice_totals(cr, uid, inv, company_currency, ref, iml, context=ctx) acc_id = inv.account_id.id - name = inv['name'] or '/' + name = inv['name'] or inv['supplier_invoice_number'] or '/' totlines = False if inv.payment_term: totlines = payment_term_obj.compute(cr, @@ -1167,12 +1178,12 @@ class account_invoice(osv.osv): if not ids: return [] types = { - 'out_invoice': 'Invoice ', - 'in_invoice': 'Sup. Invoice ', - 'out_refund': 'Refund ', - 'in_refund': 'Supplier Refund ', + 'out_invoice': _('Invoice'), + 'in_invoice': _('Supplier Invoice'), + 'out_refund': _('Refund'), + 'in_refund': _('Supplier Refund'), } - return [(r['id'], (r['number']) or types[r['type']] + (r['name'] or '')) for r in self.read(cr, uid, ids, ['type', 'number', 'name'], context, load='_classic_write')] + return [(r['id'], '%s %s' % (r['number'] or types[r['type']], r['name'] or '')) for r in self.read(cr, uid, ids, ['type', 'number', 'name'], context, load='_classic_write')] def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=100): if not args: diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index e604cc6d1a4..314e3423996 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -1066,12 +1066,12 @@ class account_move_line(osv.osv): for line in self.browse(cr, uid, ids, context=context): ctx = context.copy() - if ('journal_id' not in ctx): + if not ctx.get('journal_id'): if line.move_id: ctx['journal_id'] = line.move_id.journal_id.id else: ctx['journal_id'] = line.journal_id.id - if ('period_id' not in ctx): + if not ctx.get('period_id'): if line.move_id: ctx['period_id'] = line.move_id.period_id.id else: diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index e921e639642..758385d66cb 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -585,7 +585,10 @@ <field name="date"/> <field name="name"/> <field name="ref"/> - <field name="partner_id" on_change="onchange_partner_id(partner_id)" domain="['|',('parent_id','=',False),('is_company','=',True)]"/> + <field name="partner_id" on_change="onchange_partner_id(partner_id)" domain="[ + '&', + '|',('parent_id','=',False),('is_company','=',True), + '|',('customer','=',True),('supplier','=',True)]"/> <field name="type" on_change="onchange_type(partner_id, type)"/> <field name="account_id" options='{"no_open":True}' domain="[('journal_id','=',parent.journal_id), ('company_id', '=', parent.company_id)]"/> <field name="analytic_account_id" groups="analytic.group_analytic_accounting" domain="[('company_id', '=', parent.company_id), ('type', '<>', 'view')]"/> diff --git a/addons/account/i18n/ru.po b/addons/account/i18n/ru.po index da620808a85..e3b3f080365 100644 --- a/addons/account/i18n/ru.po +++ b/addons/account/i18n/ru.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: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-06-07 12:52+0000\n" +"PO-Revision-Date: 2013-06-19 11:49+0000\n" "Last-Translator: Chertykov Denis <chertykov@gmail.com>\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: 2013-06-08 05:52+0000\n" -"X-Generator: Launchpad (build 16667)\n" +"X-Launchpad-Export-Date: 2013-06-20 05:17+0000\n" +"X-Generator: Launchpad (build 16673)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -134,10 +134,10 @@ msgstr "" #: code:addons/account/account.py:686 #: code:addons/account/account.py:781 #: code:addons/account/account.py:1058 -#: code:addons/account/account_invoice.py:817 #: code:addons/account/account_invoice.py:820 #: code:addons/account/account_invoice.py:823 -#: code:addons/account/account_invoice.py:1542 +#: code:addons/account/account_invoice.py:826 +#: code:addons/account/account_invoice.py:1545 #: code:addons/account/account_move_line.py:98 #: code:addons/account/account_move_line.py:771 #: code:addons/account/account_move_line.py:824 @@ -257,7 +257,8 @@ msgid "" "entries." msgstr "" "Тип счета используется в информационных целях, при создании официальных " -"отчетов для конкретной страны, определении правил" +"отчетов для конкретной страны, определении правил закрытия финансового года " +"и проводок открытия." #. module: account #: field:account.config.settings,sale_refund_sequence_next:0 @@ -285,7 +286,7 @@ msgstr "Разрешить списание" #. module: account #: view:account.analytic.chart:0 msgid "Select the Period for Analysis" -msgstr "Выберите период для проведения анализа" +msgstr "Выберите период для анализа" #. module: account #: model:ir.actions.act_window,help:account.action_invoice_tree3 @@ -355,7 +356,7 @@ msgid "Allow multi currencies" msgstr "Разрешить мульти-валютность" #. module: account -#: code:addons/account/account_invoice.py:74 +#: code:addons/account/account_invoice.py:77 #, python-format msgid "You must define an analytic journal of type '%s'!" msgstr "Вы должны определить журнал аналитики типа '%s'!" @@ -757,7 +758,9 @@ msgstr "" #: selection:account.common.partner.report,result_selection:0 #: selection:account.partner.balance,result_selection:0 #: selection:account.partner.ledger,result_selection:0 +#: report:account.third_party_ledger:0 #: code:addons/account/report/account_partner_balance.py:297 +#: code:addons/account/report/account_partner_ledger.py:272 #, python-format msgid "Receivable Accounts" msgstr "Счета к получению" @@ -797,7 +800,7 @@ msgid "Are you sure you want to create entries?" msgstr "Вы действительно хотите создать проводки?" #. module: account -#: code:addons/account/account_invoice.py:1358 +#: code:addons/account/account_invoice.py:1361 #, python-format msgid "Invoice partially paid: %s%s of %s%s (%s%s remaining)." msgstr "Счет частично оплачен: %s%s из %s%s (%s%s остаток)." @@ -866,7 +869,7 @@ msgid "Type" msgstr "Тип" #. module: account -#: code:addons/account/account_invoice.py:823 +#: code:addons/account/account_invoice.py:826 #, python-format msgid "" "Taxes are missing!\n" @@ -1052,7 +1055,7 @@ msgid "Liability" msgstr "Обязательства" #. module: account -#: code:addons/account/account_invoice.py:896 +#: code:addons/account/account_invoice.py:899 #, python-format msgid "Please define sequence on the journal related to this invoice." msgstr "Пожалуйста, определите нумерацию в журнале, связанном с этим счетом." @@ -1128,8 +1131,8 @@ msgstr "Возможности" #. module: account #: code:addons/account/account.py:2346 #: code:addons/account/account_bank_statement.py:424 -#: code:addons/account/account_invoice.py:74 -#: code:addons/account/account_invoice.py:772 +#: code:addons/account/account_invoice.py:77 +#: code:addons/account/account_invoice.py:775 #: code:addons/account/account_move_line.py:195 #, python-format msgid "No Analytic Journal !" @@ -1168,7 +1171,7 @@ msgstr "Название счета." #. module: account #: field:account.journal,with_last_closing_balance:0 msgid "Opening With Last Closing Balance" -msgstr "" +msgstr "Открыть с предыдущим остатком" #. module: account #: help:account.tax.code,notprintable:0 @@ -1567,8 +1570,10 @@ msgid "%s (copy)" msgstr "%s (копия)" #. module: account +#: report:account.account.balance:0 #: selection:account.balance.report,display_account:0 #: selection:account.common.account.report,display_account:0 +#: report:account.general.ledger_landscape:0 #: selection:account.partner.balance,display_partner:0 #: selection:account.report.general.ledger,display_account:0 msgid "With balance is not equal to 0" @@ -1803,7 +1808,7 @@ msgstr "" #: view:account.invoice:0 #: view:account.invoice.report:0 #: field:account.move.line,invoice:0 -#: code:addons/account/account_invoice.py:1154 +#: code:addons/account/account_invoice.py:1157 #: model:ir.model,name:account.model_account_invoice #: model:res.request.link,name:account.req_link_invoice #, python-format @@ -2029,6 +2034,12 @@ msgid "" "useful because it enables you to preview at any time the tax that you owe at " "the start and end of the month or quarter." msgstr "" +"Это меню печати налоговой декларации на основе счетов и платежей. Выберите " +"один или несколько периодов финансового года. Информация, необходимая для " +"налоговой декларации генерируется автоматически OpenERP из счета (или " +"платежей, в некоторых странах). Эти данные обновляются в режиме реального " +"времени. Это очень полезно, потому что позволяет просматривать в любое время " +"налоги, которые вы должны в начале и в конце месяца или квартала." #. module: account #: code:addons/account/account.py:409 @@ -2057,9 +2068,9 @@ msgstr "" #: code:addons/account/account_bank_statement.py:419 #: code:addons/account/account_cash_statement.py:256 #: code:addons/account/account_cash_statement.py:300 -#: code:addons/account/account_invoice.py:896 -#: code:addons/account/account_invoice.py:930 -#: code:addons/account/account_invoice.py:1121 +#: code:addons/account/account_invoice.py:899 +#: code:addons/account/account_invoice.py:933 +#: code:addons/account/account_invoice.py:1124 #: code:addons/account/account_move_line.py:579 #: code:addons/account/account_move_line.py:828 #: code:addons/account/account_move_line.py:851 @@ -2104,7 +2115,7 @@ msgstr "" " </p><p>\n" " Вы можете управлять счетом от поставщика в соответствии с\n" " тем, что вы приобрели. OpenERP также может создавать\n" -" черновые счета автоматически из заказов на закупку.\n" +" черновые счета автоматически из заказов закупки.\n" " </p>\n" " " @@ -2230,7 +2241,7 @@ msgstr "Счет - печать журнала" #. module: account #: model:ir.model,name:account.model_product_category msgid "Product Category" -msgstr "Категория ТМЦ" +msgstr "Категория продукции" #. module: account #: code:addons/account/account.py:656 @@ -2307,7 +2318,9 @@ msgstr "Управление активами" #: selection:account.common.partner.report,result_selection:0 #: selection:account.partner.balance,result_selection:0 #: selection:account.partner.ledger,result_selection:0 +#: report:account.third_party_ledger:0 #: code:addons/account/report/account_partner_balance.py:299 +#: code:addons/account/report/account_partner_ledger.py:274 #, python-format msgid "Payable Accounts" msgstr "Кредиторская задолженность" @@ -2600,7 +2613,7 @@ msgstr "Учетный год" #: help:accounting.report,fiscalyear_id:0 #: help:accounting.report,fiscalyear_id_cmp:0 msgid "Keep empty for all open fiscal year" -msgstr "Keep empty for all open fiscal year" +msgstr "Оставьте пустым для всех открытых финансовых лет" #. module: account #: code:addons/account/account.py:653 @@ -2623,7 +2636,7 @@ msgid "Create an Account Based on this Template" msgstr "Создать счет на основе этого шаблона" #. module: account -#: code:addons/account/account_invoice.py:930 +#: code:addons/account/account_invoice.py:933 #, python-format msgid "" "Cannot create the invoice.\n" @@ -2896,11 +2909,11 @@ msgstr "Счета" #. module: account #: code:addons/account/account.py:3541 #: code:addons/account/account_bank_statement.py:405 -#: code:addons/account/account_invoice.py:504 -#: code:addons/account/account_invoice.py:606 -#: code:addons/account/account_invoice.py:621 -#: code:addons/account/account_invoice.py:629 -#: code:addons/account/account_invoice.py:654 +#: code:addons/account/account_invoice.py:507 +#: code:addons/account/account_invoice.py:609 +#: code:addons/account/account_invoice.py:624 +#: code:addons/account/account_invoice.py:632 +#: code:addons/account/account_invoice.py:657 #: code:addons/account/account_move_line.py:536 #, python-format msgid "Configuration Error!" @@ -2932,7 +2945,7 @@ msgstr "Метка" #. module: account #: view:res.partner.bank:0 msgid "Accounting Information" -msgstr "Бухгалтерская информация" +msgstr "Учетная информация" #. module: account #: view:account.tax:0 @@ -3098,6 +3111,8 @@ msgid "" "Selected invoice(s) cannot be confirmed as they are not in 'Draft' or 'Pro-" "Forma' state." msgstr "" +"Выбранные счета нельзя подтвердить, так как состояние не \"Черновик\" и не " +"\"Проформа\"" #. module: account #: code:addons/account/account.py:1071 @@ -3130,7 +3145,7 @@ msgstr "Журнал продаж" #. module: account #: code:addons/account/account.py:2346 -#: code:addons/account/account_invoice.py:772 +#: code:addons/account/account_invoice.py:775 #: code:addons/account/account_move_line.py:195 #, python-format msgid "You have to define an analytic journal on the '%s' journal!" @@ -3299,7 +3314,7 @@ msgid "Fiscal Position" msgstr "Система налогообложения" #. module: account -#: code:addons/account/account_invoice.py:820 +#: code:addons/account/account_invoice.py:823 #, python-format msgid "" "Tax base different!\n" @@ -3464,7 +3479,7 @@ msgstr "Вид" #. module: account #: code:addons/account/account.py:3460 -#: code:addons/account/account_bank.py:95 +#: code:addons/account/account_bank.py:94 #, python-format msgid "BNK" msgstr "BNK" @@ -3734,7 +3749,7 @@ msgstr "" "иметь названия как и у самого документа" #. module: account -#: code:addons/account/account_invoice.py:1013 +#: code:addons/account/account_invoice.py:1016 #, python-format msgid "" "You cannot create an invoice on a centralized journal. Uncheck the " @@ -3749,7 +3764,7 @@ msgid "Starting Balance" msgstr "Начальный баланс" #. module: account -#: code:addons/account/account_invoice.py:1462 +#: code:addons/account/account_invoice.py:1465 #, python-format msgid "No Partner Defined !" msgstr "Партнер не определен!" @@ -4040,9 +4055,13 @@ msgid "VAT :" msgstr "НДС:" #. module: account +#: report:account.account.balance:0 #: report:account.central.journal:0 #: view:account.config.settings:0 +#: report:account.general.journal:0 #: report:account.general.ledger:0 +#: report:account.general.ledger_landscape:0 +#: report:account.journal.period.print:0 #: report:account.partner.balance:0 #: report:account.third_party_ledger:0 #: report:account.third_party_ledger_other:0 @@ -4145,8 +4164,10 @@ msgstr "" "условии оплаты контрагента." #. module: account +#: report:account.account.balance:0 #: selection:account.balance.report,display_account:0 #: selection:account.common.account.report,display_account:0 +#: report:account.general.ledger_landscape:0 #: selection:account.report.general.ledger,display_account:0 #: selection:account.tax,type_tax_use:0 #: selection:account.tax.template,type_tax_use:0 @@ -4283,7 +4304,7 @@ msgstr "Открыть счет" #. module: account #: field:account.invoice.tax,factor_tax:0 msgid "Multipication factor Tax code" -msgstr "" +msgstr "Коэффициент кода налога" #. module: account #: field:account.config.settings,complete_tax_set:0 @@ -4409,7 +4430,7 @@ msgid "Consolidated Children" msgstr "Субсчета" #. module: account -#: code:addons/account/account_invoice.py:570 +#: code:addons/account/account_invoice.py:573 #: code:addons/account/wizard/account_invoice_refund.py:146 #, python-format msgid "Insufficient Data!" @@ -4592,7 +4613,7 @@ msgstr "" #: field:account.account,shortcut:0 #: field:account.account.template,shortcut:0 msgid "Shortcut" -msgstr "Горячая клвиша" +msgstr "Закладка" #. module: account #: view:account.account:0 @@ -4666,6 +4687,8 @@ msgid "" "Error!\n" "The duration of the Period(s) is/are invalid." msgstr "" +"Ошибка!\n" +"Не допустимая продолжительность периода." #. module: account #: field:account.entries.report,month:0 @@ -4690,8 +4713,8 @@ msgid "Supplier invoice sequence" msgstr "Нумерация счетов поставщиков" #. module: account -#: code:addons/account/account_invoice.py:607 -#: code:addons/account/account_invoice.py:622 +#: code:addons/account/account_invoice.py:610 +#: code:addons/account/account_invoice.py:625 #, python-format msgid "" "Cannot find a chart of account, you should create one from Settings\\" @@ -4826,7 +4849,7 @@ msgstr "Документ из счета или платежа" msgid "" "There is currently no company without chart of account. The wizard will " "therefore not be executed." -msgstr "" +msgstr "Не ни одной компании без плана счетов. Мастер не будет запущен." #. module: account #: model:ir.actions.act_window,name:account.action_wizard_multi_chart @@ -4971,7 +4994,7 @@ msgstr "" "Нельзя создать счет, который имеет родительский счет другой компании." #. module: account -#: code:addons/account/account_invoice.py:655 +#: code:addons/account/account_invoice.py:658 #, python-format msgid "" "Cannot find any account journal of %s type for this company.\n" @@ -5019,7 +5042,7 @@ msgstr "Контроль типа" #. module: account #: help:account.journal,default_credit_account_id:0 msgid "It acts as a default account for credit amount" -msgstr "Выступает в качестве счета по умолчанию для сумм по кредиту" +msgstr "Используется как кредитовый счет по умолчанию" #. module: account #: view:cash.box.out:0 @@ -5036,7 +5059,7 @@ msgstr "Отменено" #. module: account #: help:account.config.settings,group_proforma_invoices:0 msgid "Allows you to put invoices in pro-forma state." -msgstr "" +msgstr "Позволяет устанавливать статус \"Проформа\" для счетов." #. module: account #: view:account.journal:0 @@ -5050,6 +5073,7 @@ msgid "" "It adds the currency column on report if the currency differs from the " "company currency." msgstr "" +"Добавляет колонку валюты в отчет, если валюта отлична от валюты компании." #. module: account #: code:addons/account/account.py:3394 @@ -5281,7 +5305,7 @@ msgstr "Проводки журнала для проверки" #. module: account #: selection:res.company,tax_calculation_rounding_method:0 msgid "Round Globally" -msgstr "" +msgstr "Глобальное округление" #. module: account #: view:account.bank.statement:0 @@ -5295,7 +5319,7 @@ msgid "Tax Application" msgstr "Применение налога" #. module: account -#: code:addons/account/account_invoice.py:919 +#: code:addons/account/account_invoice.py:922 #, python-format msgid "" "Please verify the price of the invoice !\n" @@ -5561,7 +5585,7 @@ msgstr "" #. module: account #: view:account.invoice:0 msgid "Pro Forma Invoice " -msgstr "Предварительный счет " +msgstr "Проформа счета " #. module: account #: selection:account.subscription,period_type:0 @@ -5597,7 +5621,7 @@ msgstr "Прибыль и убыток (счет доходов)" #. module: account #: field:account.journal,allow_date:0 msgid "Check Date in Period" -msgstr "" +msgstr "Проверка даты в периоде" #. module: account #: model:ir.ui.menu,name:account.final_accounting_reports @@ -5622,7 +5646,7 @@ msgid "Compute Code (if type=code)" msgstr "Вычислить код (если тип=код)" #. module: account -#: code:addons/account/account_invoice.py:505 +#: code:addons/account/account_invoice.py:508 #, python-format msgid "" "Cannot find a chart of accounts for this company, you should create one." @@ -5973,7 +5997,7 @@ msgstr "Сумма в валюте" #. module: account #: selection:res.company,tax_calculation_rounding_method:0 msgid "Round per Line" -msgstr "" +msgstr "Округление каждой позиции" #. module: account #: report:account.analytic.account.balance:0 @@ -6063,7 +6087,7 @@ msgstr "Открыть кассу" #. module: account #: selection:account.financial.report,style_overwrite:0 msgid "Automatic formatting" -msgstr "" +msgstr "Автоматическое форматирование" #. module: account #: view:account.move.line.reconcile:0 @@ -6166,7 +6190,7 @@ msgstr "Доход" #: view:account.config.settings:0 #: view:account.invoice:0 #: view:account.invoice.report:0 -#: code:addons/account/account_invoice.py:387 +#: code:addons/account/account_invoice.py:390 #, python-format msgid "Supplier" msgstr "Поставщик" @@ -6186,7 +6210,7 @@ msgid "Account n°" msgstr "№ счета" #. module: account -#: code:addons/account/account_invoice.py:92 +#: code:addons/account/account_invoice.py:95 #, python-format msgid "Free Reference" msgstr "Свободная Ссылка" @@ -6196,7 +6220,9 @@ msgstr "Свободная Ссылка" #: selection:account.common.partner.report,result_selection:0 #: selection:account.partner.balance,result_selection:0 #: selection:account.partner.ledger,result_selection:0 +#: report:account.third_party_ledger:0 #: code:addons/account/report/account_partner_balance.py:301 +#: code:addons/account/report/account_partner_ledger.py:276 #, python-format msgid "Receivable and Payable Accounts" msgstr "Счета дебиторской и кредиторской задолженности" @@ -6323,7 +6349,7 @@ msgstr "" #. module: account #: field:account.journal,loss_account_id:0 msgid "Loss Account" -msgstr "" +msgstr "Счет убытков" #. module: account #: field:account.tax,account_collected_id:0 @@ -6501,7 +6527,7 @@ msgid "Models" msgstr "" #. module: account -#: code:addons/account/account_invoice.py:1121 +#: code:addons/account/account_invoice.py:1124 #, python-format msgid "" "You cannot cancel an invoice which is partially paid. You need to " @@ -6673,7 +6699,7 @@ msgid "You cannot create journal items on closed account." msgstr "" #. module: account -#: code:addons/account/account_invoice.py:630 +#: code:addons/account/account_invoice.py:633 #, python-format msgid "Invoice line account's company and invoice's compnay does not match." msgstr "" @@ -6718,7 +6744,7 @@ msgstr "Собственные средства" #. module: account #: field:account.journal,internal_account_id:0 msgid "Internal Transfers Account" -msgstr "" +msgstr "Счет внутренних переводов" #. module: account #: code:addons/account/wizard/pos_box.py:32 @@ -6734,7 +6760,7 @@ msgstr "Процент" #. module: account #: selection:account.config.settings,tax_calculation_rounding_method:0 msgid "Round globally" -msgstr "" +msgstr "Глобальное округление" #. module: account #: selection:account.report.general.ledger,sortby:0 @@ -6825,7 +6851,7 @@ msgstr "" #: code:addons/account/account.py:1453 #: code:addons/account/account.py:1482 #: code:addons/account/account.py:1489 -#: code:addons/account/account_invoice.py:1012 +#: code:addons/account/account_invoice.py:1015 #: code:addons/account/account_move_line.py:1005 #: code:addons/account/wizard/account_automatic_reconcile.py:148 #: code:addons/account/wizard/account_fiscalyear_close.py:88 @@ -6912,7 +6938,7 @@ msgstr "" #: report:account.invoice:0 #: selection:account.invoice,type:0 #: selection:account.invoice.report,type:0 -#: code:addons/account/account_invoice.py:1157 +#: code:addons/account/account_invoice.py:1160 #: selection:report.invoice.created,type:0 #, python-format msgid "Supplier Refund" @@ -7553,7 +7579,7 @@ msgstr "Для процентных налогов, введите % как чи #. module: account #: model:ir.actions.act_window,name:account.action_account_report_tree_hierarchy msgid "Financial Reports Hierarchy" -msgstr "" +msgstr "Структура финансовых отчетов" #. module: account #: model:ir.actions.act_window,name:account.act_account_invoice_partner_relation @@ -7718,7 +7744,7 @@ msgstr "" #. module: account #: field:account.config.settings,group_proforma_invoices:0 msgid "Allow pro-forma invoices" -msgstr "" +msgstr "Разрешить проформы счетов" #. module: account #: view:account.bank.statement:0 @@ -7789,7 +7815,7 @@ msgstr "Журнал счета" #. module: account #: field:account.config.settings,tax_calculation_rounding_method:0 msgid "Tax calculation rounding method" -msgstr "" +msgstr "Метод округления при расчете налога" #. module: account #: model:process.node,name:account.process_node_paidinvoice0 @@ -7912,7 +7938,7 @@ msgstr "Нормальный" #: model:ir.actions.act_window,name:account.action_email_templates #: model:ir.ui.menu,name:account.menu_email_templates msgid "Email Templates" -msgstr "" +msgstr "Шаблоны писем" #. module: account #: view:account.move.line:0 @@ -7974,7 +8000,7 @@ msgstr "Нет номера части !" #: view:account.financial.report:0 #: model:ir.ui.menu,name:account.menu_account_report_tree_hierarchy msgid "Account Reports Hierarchy" -msgstr "" +msgstr "Структура отчетов по счетам" #. module: account #: help:account.account.template,chart_template_id:0 @@ -8050,6 +8076,8 @@ msgstr "Отмена выбранных счетов" msgid "" "This field is used to generate legal reports: profit and loss, balance sheet." msgstr "" +"Это поле используется для генерации официальных отчетов: прибыль и убыток, " +"баланс." #. module: account #: selection:account.entries.report,month:0 @@ -8061,7 +8089,7 @@ msgid "May" msgstr "Май" #. module: account -#: code:addons/account/account_invoice.py:817 +#: code:addons/account/account_invoice.py:820 #, python-format msgid "Global taxes defined, but they are not in invoice lines !" msgstr "" @@ -8102,7 +8130,7 @@ msgstr "Провести записи журнала" #: view:account.config.settings:0 #: view:account.invoice:0 #: view:account.invoice.report:0 -#: code:addons/account/account_invoice.py:385 +#: code:addons/account/account_invoice.py:388 #, python-format msgid "Customer" msgstr "Заказчик" @@ -8303,7 +8331,7 @@ msgstr "" #. module: account #: field:res.company,tax_calculation_rounding_method:0 msgid "Tax Calculation Rounding Method" -msgstr "" +msgstr "Метод округления при расчете налога" #. module: account #: field:account.entries.report,move_line_state:0 @@ -8357,7 +8385,7 @@ msgid "Select a currency to apply on the invoice" msgstr "Выбрать валюту применяемую в счете" #. module: account -#: code:addons/account/account_invoice.py:898 +#: code:addons/account/account_invoice.py:901 #, python-format msgid "No Invoice Lines !" msgstr "Нет позиций в счете !" @@ -8433,7 +8461,7 @@ msgid "Associated Partner" msgstr "Связанный контрагент" #. module: account -#: code:addons/account/account_invoice.py:1462 +#: code:addons/account/account_invoice.py:1465 #, python-format msgid "You must first select a partner !" msgstr "Сначала вы должны выбрать партнера !" @@ -8998,7 +9026,7 @@ msgstr "Вы уверены?" #. module: account #: view:account.journal:0 msgid "Accounts Allowed (empty for no control)" -msgstr "Разрешенные счета (остваьте пустым для снятия проверок)" +msgstr "Разрешенные счета (оставьте пустым для снятия проверок)" #. module: account #: field:account.config.settings,sale_tax_rate:0 @@ -9384,7 +9412,7 @@ msgid "Purchase Tax(%)" msgstr "Налог на покупку(%)" #. module: account -#: code:addons/account/account_invoice.py:898 +#: code:addons/account/account_invoice.py:901 #, python-format msgid "Please create some invoice lines." msgstr "Пожалуйста, создайте позиции счета" @@ -9396,6 +9424,8 @@ msgid "" "Please check that the field 'Internal Transfers Account' is set on the " "payment method '%s'." msgstr "" +"Пожалуйста, проверьте , что поле \"Счет внутренних переводов\" установлено " +"для способа оплаты '%s'." #. module: account #: field:account.vat.declaration,display_detail:0 @@ -9448,7 +9478,7 @@ msgstr "Конец периода" #: model:ir.actions.act_window,name:account.action_account_report #: model:ir.ui.menu,name:account.menu_account_reports msgid "Financial Reports" -msgstr "" +msgstr "Финансовые отчеты" #. module: account #: model:account.account.type,name:account.account_type_liability_view1 @@ -9737,6 +9767,7 @@ msgid "" "This field contains the information related to the numbering of the journal " "entries of this journal." msgstr "" +"Это поле содержит информацию, связанную с нумерацией проводок этого журнала." #. module: account #: field:account.invoice,sent:0 @@ -9768,7 +9799,7 @@ msgstr "" #. module: account #: model:ir.ui.menu,name:account.menu_finance_periodical_processing msgid "Periodic Processing" -msgstr "" +msgstr "Периодическая обработка" #. module: account #: view:account.invoice.report:0 @@ -9940,7 +9971,7 @@ msgid "Unreconciled" msgstr "Не сверенные" #. module: account -#: code:addons/account/account_invoice.py:919 +#: code:addons/account/account_invoice.py:922 #, python-format msgid "Bad total !" msgstr "Плохой итог !" @@ -10046,7 +10077,7 @@ msgstr "" #. module: account #: field:account.bank.statement.line,name:0 msgid "OBI" -msgstr "" +msgstr "Назначение" #. module: account #: help:res.partner,property_account_payable:0 @@ -10196,7 +10227,7 @@ msgstr "Апрель" #. module: account #: model:account.financial.report,name:account.account_financial_report_profitloss_toreport0 msgid "Profit (Loss) to report" -msgstr "" +msgstr "Прибыль (убыток) в отчет" #. module: account #: code:addons/account/account_invoice.py:379 @@ -10401,7 +10432,7 @@ msgstr "Всего" #: code:addons/account/wizard/account_invoice_refund.py:109 #, python-format msgid "Cannot %s draft/proforma/cancel invoice." -msgstr "" +msgstr "Нельзя %s черновик/проформу/закрытый счет." #. module: account #: field:account.tax,account_analytic_paid_id:0 @@ -10415,6 +10446,7 @@ msgstr "Открыть для банковской сверки" #. module: account #: field:account.account,company_id:0 +#: report:account.account.balance:0 #: field:account.aged.trial.balance,company_id:0 #: field:account.analytic.journal,company_id:0 #: field:account.balance.report,company_id:0 @@ -10430,7 +10462,9 @@ msgstr "Открыть для банковской сверки" #: field:account.entries.report,company_id:0 #: field:account.fiscal.position,company_id:0 #: field:account.fiscalyear,company_id:0 +#: report:account.general.journal:0 #: field:account.general.journal,company_id:0 +#: report:account.general.ledger_landscape:0 #: field:account.installer,company_id:0 #: field:account.invoice,company_id:0 #: field:account.invoice.line,company_id:0 @@ -10439,6 +10473,7 @@ msgstr "Открыть для банковской сверки" #: field:account.invoice.tax,company_id:0 #: field:account.journal,company_id:0 #: field:account.journal.period,company_id:0 +#: report:account.journal.period.print:0 #: field:account.model,company_id:0 #: field:account.move,company_id:0 #: field:account.move.line,company_id:0 @@ -10603,7 +10638,7 @@ msgstr "Счета системы налогообложения" #: view:account.invoice:0 #: selection:account.invoice,type:0 #: selection:account.invoice.report,type:0 -#: code:addons/account/account_invoice.py:1155 +#: code:addons/account/account_invoice.py:1158 #: model:process.process,name:account.process_process_supplierinvoiceprocess0 #: selection:report.invoice.created,type:0 #, python-format @@ -10692,8 +10727,10 @@ msgid "" msgstr "" #. module: account +#: report:account.account.balance:0 #: selection:account.balance.report,display_account:0 #: selection:account.common.account.report,display_account:0 +#: report:account.general.ledger_landscape:0 #: selection:account.report.general.ledger,display_account:0 msgid "With movements" msgstr "С движением" @@ -10789,7 +10826,7 @@ msgid "Entries Sorted by" msgstr "" #. module: account -#: code:addons/account/account_invoice.py:1543 +#: code:addons/account/account_invoice.py:1546 #, python-format msgid "" "The selected unit of measure is not compatible with the unit of measure of " @@ -10870,7 +10907,7 @@ msgstr "Искать счет" #: report:account.invoice:0 #: view:account.invoice:0 #: view:account.invoice.report:0 -#: code:addons/account/account_invoice.py:1156 +#: code:addons/account/account_invoice.py:1159 #, python-format msgid "Refund" msgstr "Возвраты" @@ -10942,7 +10979,7 @@ msgid "Manual Invoice Taxes" msgstr "" #. module: account -#: code:addons/account/account_invoice.py:570 +#: code:addons/account/account_invoice.py:573 #, python-format msgid "The payment term of supplier does not have a payment term line." msgstr "" @@ -11096,7 +11133,7 @@ msgstr "" #. module: account #: selection:account.config.settings,tax_calculation_rounding_method:0 msgid "Round per line" -msgstr "" +msgstr "Округление каждой позиции" #. module: account #: help:account.move.line,amount_residual_currency:0 diff --git a/addons/account/partner.py b/addons/account/partner.py index f582da6b765..a7df31b2f32 100644 --- a/addons/account/partner.py +++ b/addons/account/partner.py @@ -189,44 +189,34 @@ class res_partner(osv.osv): 'debit': fields.function(_credit_debit_get, fnct_search=_debit_search, string='Total Payable', multi='dc', help="Total amount you have to pay to this supplier."), 'debit_limit': fields.float('Payable Limit'), 'property_account_payable': fields.property( - 'account.account', type='many2one', relation='account.account', string="Account Payable", - view_load=True, domain="[('type', '=', 'payable')]", help="This account will be used instead of the default one as the payable account for the current partner", required=True), 'property_account_receivable': fields.property( - 'account.account', type='many2one', relation='account.account', string="Account Receivable", - view_load=True, domain="[('type', '=', 'receivable')]", help="This account will be used instead of the default one as the receivable account for the current partner", required=True), 'property_account_position': fields.property( - 'account.fiscal.position', type='many2one', relation='account.fiscal.position', string="Fiscal Position", - view_load=True, help="The fiscal position will determine taxes and accounts used for the partner.", ), 'property_payment_term': fields.property( - 'account.payment.term', type='many2one', relation='account.payment.term', string ='Customer Payment Term', - view_load=True, help="This payment term will be used instead of the default one for sale orders and customer invoices"), 'property_supplier_payment_term': fields.property( - 'account.payment.term', type='many2one', relation='account.payment.term', string ='Supplier Payment Term', - view_load=True, help="This payment term will be used instead of the default one for purchase orders and supplier invoices"), 'ref_companies': fields.one2many('res.company', 'partner_id', 'Companies that refers to partner'), diff --git a/addons/account/partner_view.xml b/addons/account/partner_view.xml index 3dcc68e315e..6a58bc7f77e 100644 --- a/addons/account/partner_view.xml +++ b/addons/account/partner_view.xml @@ -61,7 +61,7 @@ <field name="name">partner.view.buttons</field> <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_partner_form" /> - <field name="priority" eval="10"/> + <field name="priority" eval="20"/> <field name="arch" type="xml"> <xpath expr="//div[@name='buttons']" position="inside"> <button type="action" string="Invoices" @@ -96,7 +96,7 @@ <field name="priority">2</field> <field name="inherit_id" ref="base.view_partner_form"/> <field name="arch" type="xml"> - <page string="History" position="before" version="7.0"> + <page name="sales_purchases" position="after" version="7.0"> <page string="Accounting" col="4" name="accounting" attrs="{'invisible': [('is_company','=',False),('parent_id','!=',False)]}"> <group> <group> diff --git a/addons/account/product.py b/addons/account/product.py index 3df3ad9bd17..b7bffee43a9 100644 --- a/addons/account/product.py +++ b/addons/account/product.py @@ -25,18 +25,14 @@ class product_category(osv.osv): _inherit = "product.category" _columns = { 'property_account_income_categ': fields.property( - 'account.account', type='many2one', relation='account.account', string="Income Account", - view_load=True, help="This account will be used for invoices to value sales."), 'property_account_expense_categ': fields.property( - 'account.account', type='many2one', relation='account.account', string="Expense Account", - view_load=True, help="This account will be used for invoices to value expenses."), } @@ -54,18 +50,14 @@ class product_template(osv.osv): 'product_supplier_taxes_rel', 'prod_id', 'tax_id', 'Supplier Taxes', domain=[('parent_id', '=', False),('type_tax_use','in',['purchase','all'])]), 'property_account_income': fields.property( - 'account.account', type='many2one', relation='account.account', string="Income Account", - view_load=True, help="This account will be used for invoices instead of the default one to value sales for the current product."), 'property_account_expense': fields.property( - 'account.account', type='many2one', relation='account.account', string="Expense Account", - view_load=True, help="This account will be used for invoices instead of the default one to value expenses for the current product."), } diff --git a/addons/account/project/project_view.xml b/addons/account/project/project_view.xml index 6ce97b5c868..21ea2a85f7f 100644 --- a/addons/account/project/project_view.xml +++ b/addons/account/project/project_view.xml @@ -363,7 +363,7 @@ <field name="inherit_id" ref="account.view_account_journal_form"/> <field name="arch" type="xml"> <field name="type" position="after"> - <field name="analytic_journal_id"/> + <field name="analytic_journal_id" groups="analytic.group_analytic_accounting"/> </field> </field> </record> diff --git a/addons/account/report/account_journal_sale_purchase.rml b/addons/account/report/account_journal_sale_purchase.rml index 236879669f9..3ee0b484c9a 100644 --- a/addons/account/report/account_journal_sale_purchase.rml +++ b/addons/account/report/account_journal_sale_purchase.rml @@ -239,7 +239,7 @@ <td><para style="terp_default_8">[[ line.account_id.code ]]</para></td> <td><para style="terp_default_8">[[ line.partner_id and strip_name(line.partner_id.name,15) ]]</para></td> <td><para style="terp_default_8">[[ strip_name(line.name,25) ]]</para></td> - <td><para style="P8">[[ line.tax_code_id and (line.tax_code_id.code + ':') ]]</para></td> + <td><para style="P8">[[ line.tax_code_id and line.tax_code_id.code and (line.tax_code_id.code + ':') ]]</para></td> <td><para style="terp_default_8">[[ line.tax_amount and formatLang(line.tax_amount, currency_obj=company.currency_id) ]]</para></td> <td><para style="P8">[[ formatLang(line.debit, currency_obj=company.currency_id) ]]</para></td> <td><para style="P8">[[ formatLang(line.credit, currency_obj=company.currency_id) ]]</para></td> @@ -292,7 +292,7 @@ <td><para style="terp_default_8">[[ line.account_id.code ]]</para></td> <td><para style="terp_default_8">[[ line.partner_id and strip_name(line.partner_id.name,12) ]]</para></td> <td><para style="terp_default_8">[[ strip_name(line.name,16) ]]</para></td> - <td><para style="terp_default_8">[[ line.tax_code_id and (line.tax_code_id.code + ':') ]]</para></td> + <td><para style="terp_default_8">[[ line.tax_code_id and line.tax_code_id.code and (line.tax_code_id.code + ':') ]]</para></td> <td><para style="P8">[[ line.tax_amount and formatLang(line.tax_amount, currency_obj=company.currency_id) ]]</para></td> <td><para style="P8">[[ formatLang(line.debit, currency_obj=company.currency_id) ]]</para></td> <td><para style="P8">[[ formatLang(line.credit, currency_obj=company.currency_id) ]]</para></td> diff --git a/addons/account/wizard/account_fiscalyear_close.py b/addons/account/wizard/account_fiscalyear_close.py index 6ceb833816b..928f0647084 100644 --- a/addons/account/wizard/account_fiscalyear_close.py +++ b/addons/account/wizard/account_fiscalyear_close.py @@ -38,7 +38,7 @@ class account_fiscalyear_close(osv.osv_memory): 'report_name': fields.char('Name of new entries',size=64, required=True, help="Give name of the new entries"), } _defaults = { - 'report_name': _('End of Fiscal Year Entry'), + 'report_name': lambda self, cr, uid, context: _('End of Fiscal Year Entry'), } def data_save(self, cr, uid, ids, context=None): diff --git a/addons/account_analytic_analysis/i18n/ru.po b/addons/account_analytic_analysis/i18n/ru.po index 339d425c717..30313796af9 100644 --- a/addons/account_analytic_analysis/i18n/ru.po +++ b/addons/account_analytic_analysis/i18n/ru.po @@ -7,19 +7,19 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev_rc3\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-05-31 07:35+0000\n" +"PO-Revision-Date: 2013-06-19 13:43+0000\n" "Last-Translator: Chertykov Denis <chertykov@gmail.com>\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: 2013-06-01 05:16+0000\n" -"X-Generator: Launchpad (build 16660)\n" +"X-Launchpad-Export-Date: 2013-06-20 05:17+0000\n" +"X-Generator: Launchpad (build 16673)\n" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "No order to invoice, create" -msgstr "" +msgstr "Нет заказа для счета, создать" #. module: account_analytic_analysis #: view:account.analytic.account:0 @@ -39,7 +39,7 @@ msgstr "Остаётся" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Contracts in progress" -msgstr "" +msgstr "Незавершенные контракты" #. module: account_analytic_analysis #: help:account.analytic.account,last_worked_invoiced_date:0 @@ -88,7 +88,7 @@ msgstr "Дата последнего счета расходов" #. module: account_analytic_analysis #: help:account.analytic.account,fix_price_to_invoice:0 msgid "Sum of quotations for this contract." -msgstr "" +msgstr "Сумма предложений по этому контракту." #. module: account_analytic_analysis #: help:account.analytic.account,ca_invoiced:0 @@ -98,18 +98,18 @@ msgstr "Итого сумма к оплате заказчику для этог #. module: account_analytic_analysis #: help:account.analytic.account,timesheet_ca_invoiced:0 msgid "Sum of timesheet lines invoiced for this contract." -msgstr "" +msgstr "Сумма позиций табеля выставленная в счет за этот контракт ." #. module: account_analytic_analysis -#: code:addons/account_analytic_analysis/account_analytic_analysis.py:466 +#: code:addons/account_analytic_analysis/account_analytic_analysis.py:464 #, python-format msgid "Sales Order Lines of %s" -msgstr "" +msgstr "Позиции заказа продаж %s" #. module: account_analytic_analysis #: help:account.analytic.account,revenue_per_hour:0 msgid "Computed using the formula: Invoiced Amount / Total Time" -msgstr "" +msgstr "Рассчитанный по формуле: Сумма по счетам / Итоговое время" #. module: account_analytic_analysis #: field:account_analytic_analysis.summary.month,account_id:0 @@ -126,7 +126,7 @@ msgstr "Партнёр" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Contracts that are not assigned to an account manager." -msgstr "" +msgstr "Контракты, которые не назначены бухгалтеру." #. module: account_analytic_analysis #: model:ir.actions.act_window,help:account_analytic_analysis.action_account_analytic_overdue @@ -161,6 +161,7 @@ msgstr "Управляющий счётом" #: help:account.analytic.account,remaining_hours_to_invoice:0 msgid "Computed using the formula: Maximum Time - Total Invoiced Time" msgstr "" +"Рассчитанный по формуле: Максимальное время - Всё время выставленное в счетах" #. module: account_analytic_analysis #: view:account.analytic.account:0 @@ -170,12 +171,12 @@ msgstr "Ожидается" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Contracts not assigned" -msgstr "" +msgstr "Контракты не назначены" #. module: account_analytic_analysis #: help:account.analytic.account,theorical_margin:0 msgid "Computed using the formula: Theoretical Revenue - Total Costs" -msgstr "" +msgstr "Рассчитанный по формуле: теоретическая выручка - общие издержки" #. module: account_analytic_analysis #: field:account.analytic.account,hours_qtt_invoiced:0 @@ -219,17 +220,17 @@ msgstr "" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Nothing to invoice, create" -msgstr "" +msgstr "Нечего выставить в счете, создать" #. module: account_analytic_analysis #: model:res.groups,name:account_analytic_analysis.group_template_required msgid "Mandatory use of templates in contracts" -msgstr "" +msgstr "Обязательное использование шаблонов в контрактах" #. module: account_analytic_analysis #: field:account.analytic.account,hours_quantity:0 msgid "Total Worked Time" -msgstr "" +msgstr "Всё отработанное время" #. module: account_analytic_analysis #: field:account.analytic.account,real_margin:0 @@ -249,12 +250,12 @@ msgstr "Вычисляется по формуле: (Реальная маржа #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "or view" -msgstr "" +msgstr "или вид" #. module: account_analytic_analysis #: view:account.analytic.account:0 msgid "Customer Contracts" -msgstr "" +msgstr "Контакты заказчика" #. module: account_analytic_analysis #: view:account.analytic.account:0 @@ -271,7 +272,7 @@ msgstr "Месяц" #: model:ir.actions.act_window,name:account_analytic_analysis.action_hr_tree_invoiced_all #: model:ir.ui.menu,name:account_analytic_analysis.menu_action_hr_tree_invoiced_all msgid "Time & Materials to Invoice" -msgstr "" +msgstr "Время и материалы в счет" #. module: account_analytic_analysis #: view:account.analytic.account:0 @@ -343,9 +344,10 @@ msgstr "К продлению" #: view:account.analytic.account:0 msgid "" "A contract in OpenERP is an analytic account having a partner set on it." -msgstr "" +msgstr "Контракт в OpenERP это аналитический счет с установленным партнером." #. module: account_analytic_analysis +#: view:account.analytic.account:0 #: model:ir.actions.act_window,name:account_analytic_analysis.action_sales_order msgid "Sales Orders" msgstr "Заказы продаж" @@ -412,7 +414,7 @@ msgstr "" #. module: account_analytic_analysis #: field:account.analytic.account,revenue_per_hour:0 msgid "Revenue per Time (real)" -msgstr "" +msgstr "Выручка за время (реальная)" #. module: account_analytic_analysis #: model:ir.actions.act_window,help:account_analytic_analysis.action_account_analytic_overdue_all @@ -578,7 +580,7 @@ msgstr "" #. module: account_analytic_analysis #: field:account.analytic.account,est_total:0 msgid "Total Estimation" -msgstr "" +msgstr "Общая оценка" #. module: account_analytic_analysis #: field:account.analytic.account,remaining_ca:0 diff --git a/addons/account_analytic_default/account_analytic_default.py b/addons/account_analytic_default/account_analytic_default.py index 1696874f0f5..563a6a3eb9a 100644 --- a/addons/account_analytic_default/account_analytic_default.py +++ b/addons/account_analytic_default/account_analytic_default.py @@ -72,8 +72,8 @@ class account_invoice_line(osv.osv): _inherit = "account.invoice.line" _description = "Invoice Line" - def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, context=None, company_id=None): - res_prod = super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition_id, price_unit, currency_id=currency_id, context=context, company_id=company_id) + def product_id_change(self, cr, uid, ids, product, uom_id, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, context=None, company_id=None): + res_prod = super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom_id, qty, name, type, partner_id, fposition_id, price_unit, currency_id=currency_id, context=context, company_id=company_id) rec = self.pool.get('account.analytic.default').account_get(cr, uid, product, partner_id, uid, time.strftime('%Y-%m-%d'), context=context) if rec: res_prod['value'].update({'account_analytic_id': rec.analytic_id.id}) diff --git a/addons/account_analytic_plans/account_analytic_plans_view.xml b/addons/account_analytic_plans/account_analytic_plans_view.xml index be46b9a6923..7fb4091b45f 100644 --- a/addons/account_analytic_plans/account_analytic_plans_view.xml +++ b/addons/account_analytic_plans/account_analytic_plans_view.xml @@ -10,7 +10,7 @@ <field name="inherit_id" ref="account.view_account_journal_form"/> <field name="arch" type="xml"> <field name="centralisation" position="before"> - <field name="plan_id" /> + <field name="plan_id" groups="analytic.group_analytic_accounting"/> </field> </field> </record> diff --git a/addons/account_anglo_saxon/__openerp__.py b/addons/account_anglo_saxon/__openerp__.py index 6482a110f1d..4fc15bba4f5 100644 --- a/addons/account_anglo_saxon/__openerp__.py +++ b/addons/account_anglo_saxon/__openerp__.py @@ -43,7 +43,8 @@ account.""", 'depends': ['product', 'purchase'], 'category': 'Accounting & Finance', 'demo': [], - 'data': ['product_view.xml',], + 'data': ['product_view.xml'], + 'test': ['test/anglo_saxon.yml', 'test/anglo_saxon_avg_fifo.yml'], 'auto_install': False, 'installable': True, } diff --git a/addons/account_anglo_saxon/docs/account_anglo_saxon.ods b/addons/account_anglo_saxon/docs/account_anglo_saxon.ods Binary files differnew file mode 100644 index 00000000000..91b1d84786d --- /dev/null +++ b/addons/account_anglo_saxon/docs/account_anglo_saxon.ods diff --git a/addons/account_anglo_saxon/docs/account_anglo_saxon.pdf b/addons/account_anglo_saxon/docs/account_anglo_saxon.pdf Binary files differnew file mode 100644 index 00000000000..f5250a0c11c --- /dev/null +++ b/addons/account_anglo_saxon/docs/account_anglo_saxon.pdf diff --git a/addons/account_anglo_saxon/invoice.py b/addons/account_anglo_saxon/invoice.py index 2b82257e1f0..8b31a48b92b 100644 --- a/addons/account_anglo_saxon/invoice.py +++ b/addons/account_anglo_saxon/invoice.py @@ -117,28 +117,34 @@ class account_invoice_line(osv.osv): for line in res: if a == line['account_id'] and i_line.product_id.id == line['product_id']: uom = i_line.product_id.uos_id or i_line.product_id.uom_id - standard_price = self.pool.get('product.uom')._compute_price(cr, uid, uom.id, i_line.product_id.standard_price, i_line.uos_id.id) - if standard_price != i_line.price_unit and line['price_unit'] == i_line.price_unit and acc: - price_diff = i_line.price_unit - standard_price - line.update({'price':standard_price * line['quantity']}) + valuation_price_unit = self.pool.get('product.uom')._compute_price(cr, uid, uom.id, i_line.product_id.standard_price, i_line.uos_id.id) + if i_line.product_id.cost_method != 'standard' and i_line.purchase_line_id: + #for average/fifo/lifo costing method, fetch real cost price from incomming moves + stock_move_obj = self.pool.get('stock.move') + valuation_stock_move = stock_move_obj.search(cr, uid, [('purchase_line_id', '=', i_line.purchase_line_id.id)], limit=1, context=context) + if valuation_stock_move: + valuation_price_unit = stock_move_obj.browse(cr, uid, valuation_stock_move[0], context=context).price_unit + if valuation_price_unit != i_line.price_unit and line['price_unit'] == i_line.price_unit and acc: + price_diff = i_line.price_unit - valuation_price_unit + line.update({'price': valuation_price_unit * line['quantity']}) diff_res.append({ - 'type':'src', + 'type': 'src', 'name': i_line.name[:64], - 'price_unit':price_diff, - 'quantity':line['quantity'], + 'price_unit': price_diff, + 'quantity': line['quantity'], 'price': price_diff * line['quantity'], - 'account_id':acc, - 'product_id':line['product_id'], - 'uos_id':line['uos_id'], - 'account_analytic_id':line['account_analytic_id'], - 'taxes':line.get('taxes',[]), + 'account_id': acc, + 'product_id': line['product_id'], + 'uos_id': line['uos_id'], + 'account_analytic_id': line['account_analytic_id'], + 'taxes': line.get('taxes', []), }) res += diff_res return res - def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, context=None, company_id=None): + def product_id_change(self, cr, uid, ids, product, uom_id, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, context=None, company_id=None): fiscal_pool = self.pool.get('account.fiscal.position') - res = super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition_id, price_unit, currency_id, context, company_id) + res = super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom_id, qty, name, type, partner_id, fposition_id, price_unit, currency_id, context, company_id) if not product: return res if type in ('in_invoice','in_refund'): diff --git a/addons/account_anglo_saxon/product.py b/addons/account_anglo_saxon/product.py index b52d9ed3bbd..1c9e8ee3673 100644 --- a/addons/account_anglo_saxon/product.py +++ b/addons/account_anglo_saxon/product.py @@ -24,27 +24,21 @@ class product_category(osv.osv): _inherit = "product.category" _columns = { 'property_account_creditor_price_difference_categ': fields.property( - 'account.account', type='many2one', relation='account.account', string="Price Difference Account", - view_load=True, help="This account will be used to value price difference between purchase price and cost price."), #Redefine fields to change help text for anglo saxon methodology. 'property_account_income_categ': fields.property( - 'account.account', type='many2one', relation='account.account', string="Income Account", - view_load=True, help="This account will be used to value outgoing stock using sale price."), 'property_account_expense_categ': fields.property( - 'account.account', type='many2one', relation='account.account', string="Expense Account", - view_load=True, help="This account will be used to value outgoing stock using cost price."), } @@ -53,27 +47,21 @@ class product_template(osv.osv): _inherit = "product.template" _columns = { 'property_account_creditor_price_difference': fields.property( - 'account.account', type='many2one', relation='account.account', string="Price Difference Account", - view_load=True, help="This account will be used to value price difference between purchase price and cost price."), #Redefine fields to change help text for anglo saxon methodology. 'property_account_income': fields.property( - 'account.account', type='many2one', relation='account.account', string="Income Account", - view_load=True, help="This account will be used to value outgoing stock using sale price."), 'property_account_expense': fields.property( - 'account.account', type='many2one', relation='account.account', string="Expense Account", - view_load=True, help="This account will be used to value outgoing stock using cost price."), } diff --git a/addons/account_anglo_saxon/purchase.py b/addons/account_anglo_saxon/purchase.py index c10a2a97d80..fc36dab41c2 100644 --- a/addons/account_anglo_saxon/purchase.py +++ b/addons/account_anglo_saxon/purchase.py @@ -26,16 +26,15 @@ class purchase_order(osv.osv): _inherit = "purchase.order" _description = "Purchase Order" - def _prepare_inv_line(self, cr, uid, account_id, order_line, context=None): - line = super(purchase_order, self)._prepare_inv_line(cr, uid, account_id, order_line, context=context) + def _choose_account_from_po_line(self, cr, uid, order_line, context=None): + account_id = super(purchase_order, self)._choose_account_from_po_line(cr, uid, order_line, context=context) if order_line.product_id and not order_line.product_id.type == 'service': acc_id = order_line.product_id.property_stock_account_input and order_line.product_id.property_stock_account_input.id if not acc_id: acc_id = order_line.product_id.categ_id.property_stock_account_input_categ and order_line.product_id.categ_id.property_stock_account_input_categ.id if acc_id: fpos = order_line.order_id.fiscal_position or False - new_account_id = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, acc_id) - line.update({'account_id': new_account_id}) - return line + account_id = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, acc_id) + return account_id # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_anglo_saxon/test/anglo_saxon.yml b/addons/account_anglo_saxon/test/anglo_saxon.yml new file mode 100644 index 00000000000..6e9ebc0068e --- /dev/null +++ b/addons/account_anglo_saxon/test/anglo_saxon.yml @@ -0,0 +1,299 @@ +- + In order to test anglo_saxon Configure Different Accounts. +- + !record {model: account.account, id: account_anglo_stock_valuation}: + code: X3000 + name: Stock Valuation Account- (test) + parent_id: account.cas + type: other + user_type: account.data_account_type_asset +- + Configure Stock Interim account (Received). +- + !record {model: account.account, id: account_anglo_stock_input}: + code: X2800 + name: Stock Interim account (Received) + parent_id: account.cos + type: other + user_type: account.data_account_type_expense +- + Configure Stock Interim account (Delivered). +- + !record {model: account.account, id: account_anglo_stock_output}: + code: X2801 + name: Stock Interim account (Delivered) + parent_id: account.rev + type: other + user_type: account.data_account_type_income +- + Configure Price difference creditor Account. +- + !record {model: account.account, id: account_anglo_price_difference}: + code: X7095 + name: Price difference creditor Account + parent_id: account.cos + type: other + user_type: account.data_account_type_expense +- + Configure Cash Bank Account. +- + !record {model: account.account, id: account_anglo_cash}: + code: X5000 + name: Cash/Bank Account + parent_id: account.cash + type: other + user_type: account.data_account_type_asset +- + Configure Creditor Account Payable. +- + !record {model: account.account, id: account_anglo_payable}: + code: X440001 + name: Creditor Account Payable + parent_id: account.a_pay + type: other + user_type: account.data_account_type_payable +- + Configure Debtor Account Receivable. +- + !record {model: account.account, id: account_anglo_receivable}: + code: X400001 + name: Debtor Account Receivable + parent_id: account.a_recv + type: other + user_type: account.data_account_type_receivable +- + Configure Cost of Good sale Account. +- + !record {model: account.account, id: account_anglo_cogs}: + code: X7000 + name: Cost of goods sale account + parent_id: account.o_expense + type: other + user_type: account.data_account_type_expense +- + Configure Income Account. +- + !record {model: account.account, id: account_anglo_income}: + code: X8000 + name: Income Account + parent_id: account.o_income + type: other + user_type: account.data_account_type_income +- + I configure the account receivable of supplier +- + !record {model: res.partner, id: base.res_partner_3}: + property_account_payable: account_anglo_payable + property_account_receivable: account_anglo_receivable +- + I configure the account receivable of Customer. +- + !record {model: res.partner, id: base.res_partner_13}: + property_account_payable: account_anglo_payable + property_account_receivable: account_anglo_receivable +- + I configure the product category with stock valuation account. +- + !record {model: product.category, id: product.product_category_4}: + property_stock_valuation_account_id: account_anglo_stock_valuation +- + I configure the product with required accounts, and cost method = standard +- + !python {model: product.product}: | + self.write(cr, uid, [ref('product.product_product_3')], {'list_price': 20.00,'standard_price': 9,'categ_id': ref('product.product_category_4'),'valuation': 'real_time', + 'property_account_income': ref('account_anglo_income'),'property_account_expense': ref('account_anglo_cogs'), + 'property_account_creditor_price_difference': ref('account_anglo_price_difference'),'property_stock_account_input': ref('account_anglo_stock_input'), + 'property_stock_account_output': ref('account_anglo_stock_output'), 'cost_method': 'standard'}) +- + I create a draft Purchase Order. +- + !record {model: purchase.order, id: purchase_order_001}: + partner_id: base.res_partner_3 + location_id: stock.stock_location_stock + pricelist_id: 1 + order_line: + - product_id: product.product_product_3 + product_qty: 1 + price_unit: 10 + date_planned: '2013-08-31' +- + I confirm the purchase order. +- + !workflow {model: purchase.order, ref: purchase_order_001, action: purchase_confirm} +- + Reception is ready for process so now done the reception. +- + !python {model: stock.partial.picking}: | + pick_ids = self.pool.get('purchase.order').browse(cr, uid, ref("purchase_order_001")).picking_ids + partial_id = self.create(cr, uid, {},context={'active_model': 'stock.picking','active_ids': [pick_ids[0].id]}) + self.do_partial(cr, uid, [partial_id]) +- + I check the Stock Interim account (Received) is credited successfully. +- + !assert {model: account.account, id : account_anglo_stock_input, string : Stock Interim account (Received) is not credited successfully.}: + - credit == 9 +- + I check the Stock valuation account is debited sucessfully. +- + !assert {model: account.account, id : account_anglo_stock_valuation, string : Stock valuation account is not debited successfully.}: + - debit == 9 +- + I Validate Invoice of Purchase Order. +- + !python {model: purchase.order}: | + invoice_ids = [x.id for x in self.browse(cr, uid, ref("purchase_order_001")).invoice_ids] + self.pool.get('account.invoice').signal_invoice_open(cr, uid, invoice_ids) +- + I check the Stock Interim account (Received) is debited sucessfully when Invoice validated. +- + !assert {model: account.account, id : account_anglo_stock_input, string : Stock Interim account (Received) is not debited successfully.}: + - debit == 9 +- + I check the Price difference creditor Account is debited sucessfully when Invoice validated. +- + !assert {model: account.account, id : account_anglo_price_difference, string : Price difference creditor Account is not debited successfully.}: + - debit == 1 +- + I check Payable(creditor) Account is Credited sucessfully when Invoice validated. +- + !assert {model: account.account, id : account_anglo_payable, string : Payable(creditor) Account is not Credited successfully.}: + - credit == 10 +- + I open the Invoice. +- + !python {model: purchase.order}: | + po = self.browse(cr, uid, ref("purchase_order_001")) + for invoice in po.invoice_ids: + self.pool.get('account.invoice').signal_invoice_open(cr, uid, [invoice.id]) +- + I pay the invoice. +- + !python {model: purchase.order}: | + invoice_ids = self.browse(cr, uid, ref("purchase_order_001")).invoice_ids + order = self.browse(cr, uid, ref("purchase_order_001")) + journal_ids = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'cash'), ('company_id', '=', order.company_id.id)], limit=1) + for invoice in invoice_ids: + invoice.pay_and_reconcile(invoice.amount_total, ref('account_anglo_cash'), ref('account.period_8'), journal_ids[0], ref('account_anglo_cash'), ref('account.period_8'), journal_ids[0], name='test') +- + I check Payable(Creditors) Account is Debited sucessfully after invoice paid. +- + !assert {model: account.account, id : account_anglo_payable, string : Payable(Creditors) Account is not Debited successfully.}: + - debit == 10 +- + I check Bank/Cash account is credited sucessfully after invoice paid. +- + !assert {model: account.account, id : account_anglo_cash, string: Bank/Cash account is not credited successfully.}: + - credit == 10 +- + I create an Outgoing Picking order +- + !record {model: stock.picking, id: stock_picking_out001}: + partner_id: base.res_partner_13 + invoice_state: 2binvoiced + move_lines: + - company_id: base.main_company + location_id: stock.stock_location_stock + product_id: product.product_product_3 + product_qty: 1.0 + product_uom: product.product_uom_unit + location_dest_id: stock.stock_location_customers + move_type: direct + type: out +- + I need to check the availability of the product, So I make my picking order for processing later. +- + !python {model: stock.picking}: | + self.draft_force_assign(cr, uid, [ref("stock_picking_out001")], {"lang": "en_US", "search_default_available": + 1, "tz": False, "active_model": "ir.ui.menu", "contact_display": "partner", + "active_ids": [ref("stock.menu_action_picking_tree")], "active_id": ref("stock.menu_action_picking_tree"), + }) +- + I check the product availability, Product is available in the stock and ready to be sent. +- + !python {model: stock.picking}: | + self.action_assign(cr, uid, [ref("stock_picking_out001")], {"lang": "en_US", "search_default_available": + 1, "tz": False, "active_model": "ir.ui.menu", "contact_display": "partner", + "active_ids": [ref("stock.menu_action_picking_tree")], "active_id": ref("stock.menu_action_picking_tree"), + }) +- + I process the delivery. +- + !python {model: stock.partial.picking}: | + partial_id = self.create(cr, uid, {}, context={'active_model':'stock.picking','active_ids':[ref('stock_picking_out001')]}) + self.do_partial(cr, uid, [partial_id]) +- + I check Stock Interim account (Delivery) is debited successfully. +- + !assert {model: account.account, id : account_anglo_stock_output, string : Stock Interim account (Delivery) is not debited successfully.}: + - debit == 9 +- + I check the Stock valuation account is credited sucessfully. +- + !assert {model: account.account, id : account_anglo_stock_valuation, string : Stock valuation account is not credited successfully.}: + - credit == 9 +- + As the Invoice state of the picking order is To be invoiced. I create invoice for my outgoing picking order. +- + !python {model: stock.invoice.onshipping}: | + wiz_id = self.create(cr, uid, {'invoice_date': '2013-03-04', 'journal_id': ref('account.sales_journal')}, + {'active_ids': [ref("stock_picking_out001")], "active_model": "stock.picking"}) + self.create_invoice(cr, uid, [wiz_id], {"lang": "en_US", + "search_default_available": 1, "tz": False, "active_model": "stock.picking", + "contact_display": "partner", "active_ids": [ref("stock_picking_out001")], "active_id": ref("stock_picking_out001")}) +- + I check that the customer invoice is created successfully. +- + !python {model: account.invoice}: | + partner_id = self.pool.get('stock.picking').browse(cr, uid, ref('stock_picking_out001')).partner_id.id + inv_ids = self.search(cr, uid, [('type','=','out_invoice'),('partner_id','=',partner_id)]) + assert inv_ids, 'No Invoice is generated!' +- + I open the Invoice. +- + !python {model: stock.picking}: | + move_name = self.pool.get('stock.picking').browse(cr, uid, ref('stock_picking_out001')).name + account_invoice = self.pool.get('account.invoice').search(cr, uid, [('origin', '=', move_name)]) + self.pool.get('account.invoice').signal_invoice_open(cr, uid, account_invoice) +- + I check Income Account is Credited sucessfully when Invoice validated. +- + !assert {model: account.account, id : account_anglo_income, string : Income Account is not Credited successfully.}: + - credit == 20 +- + I check Cost of goods sold account for debit. +- + !assert {model: account.account, id : account_anglo_cogs, string : Cost of goods sale is not Debited successfully.}: + - debit == 9 +- + I check Stock Interim account (Delivery) +- + !assert {model: account.account, id : account_anglo_stock_output, string : Stock Interim account (Delivery) is not credited successfully.}: + - credit == 9 +- + I check Receivable(Debtor) Account for debit. +- + !assert {model: account.account, id : account_anglo_receivable, string : Receivable(Debtors) Account is not Debited successfully.}: + - debit == 20 +- + I pay the invoice. +- + !python {model: account.invoice}: | + move_name = self.pool.get('stock.picking').browse(cr, uid, ref('stock_picking_out001')).name + account_invoice= self.pool.get('account.invoice').search(cr, uid, [('origin', '=', move_name)]) + journal_ids = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'cash')], limit=1) + pay = self.pay_and_reconcile(cr, uid, account_invoice, + 20.0, ref('account_anglo_cash'), ref('account.period_8'), + journal_ids[0], ref('account_anglo_cash'), + ref('account.period_8'), journal_ids[0], + name='Payment for test customer invoice') + assert (pay == True), "Incorrect Payment." +- + I check Receivable(Debtor) Account for credit. +- + !assert {model: account.account, id : account_anglo_receivable, string : Receivable(Debtors) Account is not Credited successfully.}: + - credit == 20 +- + I check Bank/Cash account is debited sucessfully after invoice paid. +- + !assert {model: account.account, id : account_anglo_cash, string: Bank/Cash account is not successfully credited.}: + - debit == 20 diff --git a/addons/account_anglo_saxon/test/anglo_saxon_avg_fifo.yml b/addons/account_anglo_saxon/test/anglo_saxon_avg_fifo.yml new file mode 100644 index 00000000000..f7d52f4f5a8 --- /dev/null +++ b/addons/account_anglo_saxon/test/anglo_saxon_avg_fifo.yml @@ -0,0 +1,304 @@ +- + In order to test anglo_saxon Configure Different Accounts. +- + !record {model: account.account, id: account_anglo_stock_valuation_fifo}: + code: X3000f + name: Stock Valuation Account- (test) + parent_id: account.cas + type: other + user_type: account.data_account_type_asset +- + Configure Stock Interim account (Received). +- + !record {model: account.account, id: account_anglo_stock_input_fifo}: + code: X2800f + name: Stock Interim account (Received) + parent_id: account.cos + type: other + user_type: account.data_account_type_expense +- + Configure Stock Interim account (Delivered). +- + !record {model: account.account, id: account_anglo_stock_output_fifo}: + code: X2801f + name: Stock Interim account (Delivered) + parent_id: account.rev + type: other + user_type: account.data_account_type_income +- + Configure Price difference creditor Account. +- + !record {model: account.account, id: account_anglo_price_difference_fifo}: + code: X7095f + name: Price difference creditor Account + parent_id: account.cos + type: other + user_type: account.data_account_type_expense +- + Configure Cash Bank Account. +- + !record {model: account.account, id: account_anglo_cash_fifo}: + code: X5000f + name: Cash/Bank Account + parent_id: account.cash + type: other + user_type: account.data_account_type_asset +- + Configure Creditor Account Payable. +- + !record {model: account.account, id: account_anglo_payable_fifo}: + code: X440001f + name: Creditor Account Payable + parent_id: account.a_pay + type: other + user_type: account.data_account_type_payable +- + Configure Debtor Account Receivable. +- + !record {model: account.account, id: account_anglo_receivable_fifo}: + code: X400001f + name: Debtor Account Receivable + parent_id: account.a_recv + type: other + user_type: account.data_account_type_receivable +- + Configure Cost of Good sale Account. +- + !record {model: account.account, id: account_anglo_cogs_fifo}: + code: X7000f + name: Cost of goods sale account + parent_id: account.o_expense + type: other + user_type: account.data_account_type_expense +- + Configure Income Account. +- + !record {model: account.account, id: account_anglo_income_fifo}: + code: X8000f + name: Income Account + parent_id: account.o_income + type: other + user_type: account.data_account_type_income +- + I configure the account receivable of supplier +- + !record {model: res.partner, id: base.res_partner_3}: + property_account_payable: account_anglo_payable_fifo + property_account_receivable: account_anglo_receivable_fifo +- + I configure the account receivable of Customer. +- + !record {model: res.partner, id: base.res_partner_13}: + property_account_payable: account_anglo_payable_fifo + property_account_receivable: account_anglo_receivable_fifo +- + I configure the product category with stock valuation account. +- + !record {model: product.category, id: product.product_category_4}: + property_stock_valuation_account_id: account_anglo_stock_valuation_fifo +- + I create a product with required accounts, and cost method average (but same applies for fifo) +- + !record {model: product.product, id: product_fifo_anglo_saxon}: + name: 'FIFO product for anglo saxon tests' + list_price: 20.00 + standard_price: 0 + categ_id: product.product_category_4 + valuation: 'real_time' + property_account_income: account_anglo_income_fifo + property_account_expense: account_anglo_cogs_fifo + property_account_creditor_price_difference: account_anglo_price_difference_fifo + property_stock_account_input: account_anglo_stock_input_fifo + property_stock_account_output: account_anglo_stock_output_fifo + cost_method: 'average' +- + I create a draft Purchase Order. +- + !record {model: purchase.order, id: purchase_order_001_fifo}: + partner_id: base.res_partner_3 + location_id: stock.stock_location_stock + pricelist_id: 1 + order_line: + - product_id: product_fifo_anglo_saxon + product_qty: 1 + price_unit: 9 + date_planned: '2013-08-31' + taxes_id: [] +- + I confirm the purchase order. +- + !workflow {model: purchase.order, ref: purchase_order_001_fifo, action: purchase_confirm} +- + Reception is ready for process so now done the reception. +- + !python {model: stock.partial.picking}: | + pick_ids = self.pool.get('purchase.order').browse(cr, uid, ref("purchase_order_001_fifo")).picking_ids + partial_id = self.create(cr, uid, {},context={'active_model': 'stock.picking','active_ids': [pick_ids[0].id]}) + self.do_partial(cr, uid, [partial_id]) +- + I check the Stock Interim account (Received) is credit successfully. +- + !assert {model: account.account, id : account_anglo_stock_input_fifo, string : Stock Interim account (Received) is not credited successfully.}: + - credit == 9 +- + I check the Stock valuation account is debit sucessfully. +- + !assert {model: account.account, id : account_anglo_stock_valuation_fifo, string : Stock valuation account is not debited successfully.}: + - debit == 9 +- + I Validate Invoice of Purchase Order after having changed the price to 10. +- + !python {model: purchase.order}: | + invoice_ids = [x.id for x in self.browse(cr, uid, ref("purchase_order_001_fifo")).invoice_ids] + line_ids = self.pool.get('account.invoice.line').search(cr, uid, [('invoice_id', 'in', invoice_ids)]) + self.pool.get('account.invoice.line').write(cr, uid, line_ids, {'price_unit': 10}) + self.pool.get('account.invoice').signal_invoice_open(cr, uid, invoice_ids) +- + I check the Stock Interim account (Received) is debited sucessfully when Invoice validated. +- + !assert {model: account.account, id : account_anglo_stock_input_fifo, string : Stock Interim account (Received) is not debited successfully.}: + - debit == 9 +- + I check the Price difference creditor Account is debited sucessfully when Invoice validated. +- + !assert {model: account.account, id : account_anglo_price_difference_fifo, string : Price difference creditor Account is not debited successfully.}: + - debit == 1 +- + I check Payable(creditor) Account is Credited sucessfully when Invoice validated. +- + !assert {model: account.account, id : account_anglo_payable_fifo, string : Payable(creditor) Account is not Credited successfully.}: + - credit == 10 +- + I pay the invoice. +- + !python {model: purchase.order}: | + invoice_ids = self.browse(cr, uid, ref("purchase_order_001_fifo")).invoice_ids + order = self.browse(cr, uid, ref("purchase_order_001_fifo")) + journal_ids = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'cash'), ('company_id', '=', order.company_id.id)], limit=1) + for invoice in invoice_ids: + invoice.pay_and_reconcile(invoice.amount_total, ref('account_anglo_cash_fifo'), ref('account.period_8'), journal_ids[0], ref('account_anglo_cash_fifo'), ref('account.period_8'), journal_ids[0], name='test') +- + I check Payable(Creditors) Account is Debited sucessfully after invoice paid. +- + !assert {model: account.account, id : account_anglo_payable_fifo, string : Payable(Creditors) Account is not Debited successfully.}: + - debit == 10 +- + I check Bank/Cash account is credited sucessfully after invoice paid. +- + !assert {model: account.account, id : account_anglo_cash_fifo, string: Bank/Cash account is not credited successfully.}: + - credit == 10 +- + I create an Outgoing Picking order +- + !record {model: stock.picking, id: stock_picking_out001_fifo}: + partner_id: base.res_partner_13 + invoice_state: 2binvoiced + move_lines: + - company_id: base.main_company + location_id: stock.stock_location_stock + product_id: product_fifo_anglo_saxon + product_qty: 1.0 + location_dest_id: stock.stock_location_customers + move_type: direct + type: out +- + I need to check the availability of the product, So I make my picking order for processing later. +- + !python {model: stock.picking}: | + self.draft_force_assign(cr, uid, [ref("stock_picking_out001_fifo")], {"lang": "en_US", "search_default_available": + 1, "tz": False, "active_model": "ir.ui.menu", "contact_display": "partner", + "active_ids": [ref("stock.menu_action_picking_tree")], "active_id": ref("stock.menu_action_picking_tree"), + }) +- + I check the product availability, Product is available in the stock and ready to be sent. +- + !python {model: stock.picking}: | + self.action_assign(cr, uid, [ref("stock_picking_out001_fifo")], {"lang": "en_US", "search_default_available": + 1, "tz": False, "active_model": "ir.ui.menu", "contact_display": "partner", + "active_ids": [ref("stock.menu_action_picking_tree")], "active_id": ref("stock.menu_action_picking_tree"), + }) +- + I process the delivery. +- + !python {model: stock.partial.picking}: | + partial_id = self.create(cr, uid, {}, context={'active_model':'stock.picking','active_ids':[ref('stock_picking_out001_fifo')]}) + self.do_partial(cr, uid, [partial_id]) +- + I check Stock Interim account (Delivery) is debited successfully. +- + !assert {model: account.account, id : account_anglo_stock_output_fifo, string : Stock Interim account (Delivery) is not debited successfully.}: + - debit == 9 +- + I check the Stock valuation account is credited sucessfully. +- + !assert {model: account.account, id : account_anglo_stock_valuation_fifo, string : Stock valuation account is not credited successfully.}: + - credit == 9 +- + As the Invoice state of the picking order is To be invoiced. I create invoice for my outgoing picking order. +- + !python {model: stock.invoice.onshipping}: | + wiz_id = self.create(cr, uid, {'invoice_date': '2013-03-04', 'journal_id': ref('account.sales_journal')}, + {'active_ids': [ref("stock_picking_out001_fifo")], "active_model": "stock.picking"}) + self.create_invoice(cr, uid, [wiz_id], {"lang": "en_US", + "search_default_available": 1, "tz": False, "active_model": "stock.picking", + "contact_display": "partner", "active_ids": [ref("stock_picking_out001_fifo")], "active_id": ref("stock_picking_out001_fifo")}) +- + I check that the customer invoice is created successfully. +- + !python {model: account.invoice}: | + partner_id = self.pool.get('stock.picking').browse(cr, uid, ref('stock_picking_out001_fifo')).partner_id.id + inv_ids = self.search(cr, uid, [('type','=','out_invoice'),('partner_id','=',partner_id)]) + assert inv_ids, 'No Invoice is generated!' +- + I open the Invoice. +- + !python {model: stock.picking}: | + move_name = self.pool.get('stock.picking').browse(cr, uid, ref('stock_picking_out001_fifo')).name + account_invoice = self.pool.get('account.invoice').search(cr, uid, [('origin', '=', move_name)]) + account_invoice_line = self.pool.get('account.invoice.line').search(cr, uid, [('invoice_id', 'in', account_invoice)]) + self.pool.get('account.invoice.line').write(cr, uid, account_invoice_line, {'invoice_line_tax_id': [(6, 0, [])]}) + self.pool.get('account.invoice').button_reset_taxes(cr, uid, account_invoice) + self.pool.get('account.invoice').signal_invoice_open(cr, uid, account_invoice) +- + I check Income Account is Credited sucessfully when Invoice validated. +- + !assert {model: account.account, id : account_anglo_income_fifo, string : Income Account is not Credited successfully.}: + - credit == 20 +- + I check Cost of goods sold account for debit. +- + !assert {model: account.account, id : account_anglo_cogs_fifo, string : Cost of goods sale is not Debited successfully.}: + - debit == 9 +- + I check Stock Interim account (Delivery) +- + !assert {model: account.account, id : account_anglo_stock_output_fifo, string : Stock Interim account (Delivery) is not credited successfully.}: + - credit == 9 +- + I check Receivable(Debtor) Account for debit. +- + !assert {model: account.account, id : account_anglo_receivable_fifo, string : Receivable(Debtors) Account is not Debited successfully.}: + - debit == 20 +- + I pay the invoice. +- + !python {model: account.invoice}: | + move_name = self.pool.get('stock.picking').browse(cr, uid, ref('stock_picking_out001_fifo')).name + account_invoice= self.pool.get('account.invoice').search(cr, uid, [('origin', '=', move_name)]) + journal_ids = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'cash')], limit=1) + pay = self.pay_and_reconcile(cr, uid, account_invoice, + 20.0, ref('account_anglo_cash_fifo'), ref('account.period_8'), + journal_ids[0], ref('account_anglo_cash_fifo'), + ref('account.period_8'), journal_ids[0], + name='Payment for test customer invoice') + assert (pay == True), "Incorrect Payment." +- + I check Receivable(Debtor) Account for credit. +- + !assert {model: account.account, id : account_anglo_receivable_fifo, string : Receivable(Debtors) Account is not Credited successfully.}: + - credit == 20 +- + I check Bank/Cash account is debited sucessfully after invoice paid. +- + !assert {model: account.account, id : account_anglo_cash_fifo, string: Bank/Cash account is not successfully credited.}: + - debit == 20 diff --git a/addons/account_asset/account_asset_invoice_view.xml b/addons/account_asset/account_asset_invoice_view.xml index eb6403b6f48..9a154d8ec70 100644 --- a/addons/account_asset/account_asset_invoice_view.xml +++ b/addons/account_asset/account_asset_invoice_view.xml @@ -13,6 +13,17 @@ </field> </field> </record> + + <record model="ir.ui.view" id="view_invoice_asset_category"> + <field name="name">account.invoice.supplier.form</field> + <field name="model">account.invoice</field> + <field name="inherit_id" ref="account.invoice_supplier_form"/> + <field name="arch" type="xml"> + <xpath expr="//field[@name='invoice_line']/tree/field[@name='quantity']" position="before"> + <field name="asset_category_id"/> + </xpath> + </field> + </record> </data> </openerp> diff --git a/addons/account_budget/account_budget_view.xml b/addons/account_budget/account_budget_view.xml index 9ad61d7c286..237406ff657 100644 --- a/addons/account_budget/account_budget_view.xml +++ b/addons/account_budget/account_budget_view.xml @@ -203,7 +203,9 @@ <field name="view_id" ref="crossovered_budget_view_tree"/> <field name="search_view_id" ref="view_crossovered_budget_search"/> <field name="help" type="html"> - <p> + <p class="oe_view_nocontent_create"> + Click to create a new budget. + </p><p> A budget is a forecast of your company's income and/or expenses expected for a period in the future. A budget is defined on some financial accounts and/or analytic accounts (that may represent diff --git a/addons/account_followup/security/ir.model.access.csv b/addons/account_followup/security/ir.model.access.csv index 8774015efc6..591cc347563 100644 --- a/addons/account_followup/security/ir.model.access.csv +++ b/addons/account_followup/security/ir.model.access.csv @@ -3,5 +3,5 @@ access_account_followup_followup_line,account_followup.followup.line,model_accou access_account_followup_followup_line_manager,account_followup.followup.line.manager,model_account_followup_followup_line,account.group_account_manager,1,1,1,1 access_account_followup_followup_accountant,account_followup.followup user,model_account_followup_followup,account.group_account_invoice,1,0,0,0 access_account_followup_followup_manager,account_followup.followup.manager,model_account_followup_followup,account.group_account_manager,1,1,1,1 -access_account_followup_stat_invoice,account_followup.stat.invoice,model_account_followup_stat,account.group_account_invoice,1,1,1,1 -access_account_followup_stat_by_partner_manager,account_followup.stat.by.partner,model_account_followup_stat_by_partner,account.group_account_user,1,1,1,1 +access_account_followup_stat_invoice,account_followup.stat.invoice,model_account_followup_stat,account.group_account_invoice,1,1,0,0 +access_account_followup_stat_by_partner_manager,account_followup.stat.by.partner,model_account_followup_stat_by_partner,account.group_account_user,1,1,0,0 diff --git a/addons/account_payment/wizard/account_payment_order.py b/addons/account_payment/wizard/account_payment_order.py index 03e25dfbc45..de9c47ec005 100644 --- a/addons/account_payment/wizard/account_payment_order.py +++ b/addons/account_payment/wizard/account_payment_order.py @@ -88,6 +88,7 @@ class payment_order_create(osv.osv_memory): 'order_id': payment.id, 'partner_id': line.partner_id and line.partner_id.id or False, 'communication': line.ref or '/', + 'state': line.invoice and line.invoice.reference_type != 'none' and 'structured' or 'normal', 'date': date_to_pay, 'currency': (line.invoice and line.invoice.currency_id.id) or line.journal_id.currency.id or line.journal_id.company_id.currency_id.id, }, context=context) diff --git a/addons/account_voucher/i18n/ru.po b/addons/account_voucher/i18n/ru.po index ef38a07e478..16e03d424ef 100644 --- a/addons/account_voucher/i18n/ru.po +++ b/addons/account_voucher/i18n/ru.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: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-05-29 13:17+0000\n" +"PO-Revision-Date: 2013-06-13 11:30+0000\n" "Last-Translator: Chertykov Denis <chertykov@gmail.com>\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: 2013-05-30 05:45+0000\n" -"X-Generator: Launchpad (build 16652)\n" +"X-Launchpad-Export-Date: 2013-06-14 05:38+0000\n" +"X-Generator: Launchpad (build 16667)\n" #. module: account_voucher #: field:account.bank.statement.line,voucher_id:0 @@ -27,7 +27,7 @@ msgid "account.config.settings" msgstr "account.config.settings" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:369 +#: code:addons/account_voucher/account_voucher.py:417 #, python-format msgid "Write-Off" msgstr "Списание" @@ -129,7 +129,7 @@ msgid "Voucher Statistics" msgstr "" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1547 +#: code:addons/account_voucher/account_voucher.py:1641 #, python-format msgid "" "You can not change the journal as you already reconciled some statement " @@ -223,8 +223,8 @@ msgid "Journal Item" msgstr "Элемент журнала" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:508 -#: code:addons/account_voucher/account_voucher.py:981 +#: code:addons/account_voucher/account_voucher.py:558 +#: code:addons/account_voucher/account_voucher.py:1073 #, python-format msgid "Error!" msgstr "Ошибка!" @@ -251,7 +251,7 @@ msgid "Cancelled" msgstr "Отменено" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1153 +#: code:addons/account_voucher/account_voucher.py:1249 #, python-format msgid "" "You have to configure account base code and account tax code on the '%s' tax!" @@ -295,7 +295,7 @@ msgid "Tax" msgstr "Налог" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:879 +#: code:addons/account_voucher/account_voucher.py:971 #, python-format msgid "Invalid Action!" msgstr "Неверное действие!" @@ -348,7 +348,7 @@ msgid "Import Invoices" msgstr "Импорт счетов" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1112 +#: code:addons/account_voucher/account_voucher.py:1208 #, python-format msgid "Wrong voucher line" msgstr "" @@ -367,7 +367,7 @@ msgid "Receipt" msgstr "Приход" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1018 +#: code:addons/account_voucher/account_voucher.py:1110 #, python-format msgid "" "You should configure the 'Gain Exchange Rate Account' in the accounting " @@ -388,7 +388,7 @@ msgstr "Период" #. module: account_voucher #: view:account.voucher:0 -#: code:addons/account_voucher/account_voucher.py:211 +#: code:addons/account_voucher/account_voucher.py:231 #, python-format msgid "Supplier" msgstr "Поставщик" @@ -409,7 +409,7 @@ msgid "Debit" msgstr "Дебет" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1547 +#: code:addons/account_voucher/account_voucher.py:1641 #, python-format msgid "Unable to change journal !" msgstr "Невозможно изменить журнал!" @@ -515,7 +515,7 @@ msgid "Pay Invoice" msgstr "Оплата счета" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1153 +#: code:addons/account_voucher/account_voucher.py:1249 #, python-format msgid "No Account Base Code and Account Tax Code!" msgstr "" @@ -569,15 +569,15 @@ msgid "To Review" msgstr "Для проверки" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1025 -#: code:addons/account_voucher/account_voucher.py:1039 -#: code:addons/account_voucher/account_voucher.py:1194 +#: code:addons/account_voucher/account_voucher.py:1120 +#: code:addons/account_voucher/account_voucher.py:1134 +#: code:addons/account_voucher/account_voucher.py:1286 #, python-format msgid "change" msgstr "изменить" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1014 +#: code:addons/account_voucher/account_voucher.py:1106 #, python-format msgid "" "You should configure the 'Loss Exchange Rate Account' in the accounting " @@ -631,6 +631,7 @@ msgstr "Месяц" #. module: account_voucher #: field:account.voucher,currency_id:0 #: field:account.voucher.line,currency_id:0 +#: model:ir.model,name:account_voucher.model_res_currency #: field:sale.receipt.report,currency_id:0 msgid "Currency" msgstr "Валюта" @@ -674,7 +675,7 @@ msgid "Reconcile Payment Balance" msgstr "Сверка платежного баланса" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:975 +#: code:addons/account_voucher/account_voucher.py:1067 #, python-format msgid "Configuration Error !" msgstr "Ошибка конфигурации !" @@ -739,7 +740,7 @@ msgid "October" msgstr "Октябрь" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:976 +#: code:addons/account_voucher/account_voucher.py:1068 #, python-format msgid "Please activate the sequence of selected journal !" msgstr "Пожалуйста, включите нумерацию выбранного журнала!" @@ -819,7 +820,7 @@ msgid "Previous Payments ?" msgstr "Предыдущие платежи ?" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1112 +#: code:addons/account_voucher/account_voucher.py:1208 #, python-format msgid "The invoice you are willing to pay is not valid anymore." msgstr "Счет, который вы готовы платить, уже не актуален ." @@ -851,7 +852,7 @@ msgid "Active" msgstr "Активно" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:982 +#: code:addons/account_voucher/account_voucher.py:1074 #, python-format msgid "Please define a sequence on the journal." msgstr "Пожалуйста, определите нумерацию журнала." @@ -861,7 +862,7 @@ msgstr "Пожалуйста, определите нумерацию журна #: model:ir.actions.act_window,name:account_voucher.action_vendor_receipt #: model:ir.ui.menu,name:account_voucher.menu_action_vendor_receipt msgid "Customer Payments" -msgstr "Платежи клиентов" +msgstr "Платежи заказчиков" #. module: account_voucher #: model:ir.actions.act_window,name:account_voucher.action_sale_receipt_report_all @@ -979,7 +980,7 @@ msgid "Journal Items" msgstr "Элементы журнала" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:508 +#: code:addons/account_voucher/account_voucher.py:558 #, python-format msgid "Please define default credit/debit accounts on the journal \"%s\"." msgstr "" @@ -1188,7 +1189,7 @@ msgid "" msgstr "" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:879 +#: code:addons/account_voucher/account_voucher.py:971 #, python-format msgid "Cannot delete voucher(s) which are already opened or paid." msgstr "" @@ -1251,8 +1252,8 @@ msgid "Status <b>changed</b>" msgstr "" #. module: account_voucher -#: code:addons/account_voucher/account_voucher.py:1014 -#: code:addons/account_voucher/account_voucher.py:1018 +#: code:addons/account_voucher/account_voucher.py:1106 +#: code:addons/account_voucher/account_voucher.py:1110 #, python-format msgid "Insufficient Configuration!" msgstr "" diff --git a/addons/auth_oauth/controllers/main.py b/addons/auth_oauth/controllers/main.py index 3f7ef2f3f0c..35a06871696 100644 --- a/addons/auth_oauth/controllers/main.py +++ b/addons/auth_oauth/controllers/main.py @@ -7,7 +7,8 @@ from werkzeug.exceptions import BadRequest import openerp from openerp import SUPERUSER_ID -import openerp.addons.web.http as oeweb +import openerp.addons.web.http as http +from openerp.addons.web.http import request from openerp.addons.web.controllers.main import db_monodb, set_cookie_and_redirect, login_and_redirect from openerp.modules.registry import RegistryManager @@ -18,7 +19,7 @@ _logger = logging.getLogger(__name__) #---------------------------------------------------------- def fragment_to_query_string(func): @functools.wraps(func) - def wrapper(self, req, **kw): + def wrapper(self, **kw): if not kw: return """<html><head><script> var l = window.location; @@ -30,18 +31,17 @@ def fragment_to_query_string(func): } window.location = r; </script></head><body></body></html>""" - return func(self, req, **kw) + return func(self, **kw) return wrapper #---------------------------------------------------------- # Controller #---------------------------------------------------------- -class OAuthController(oeweb.Controller): - _cp_path = '/auth_oauth' +class OAuthController(http.Controller): - @oeweb.jsonrequest - def list_providers(self, req, dbname): + @http.route('/auth_oauth/list_providers', type='json', auth='none') + def list_providers(self, dbname): try: registry = RegistryManager.get(dbname) with registry.cursor() as cr: @@ -51,9 +51,9 @@ class OAuthController(oeweb.Controller): l = [] return l - @oeweb.httprequest + @http.route('/auth_oauth/signin', type='http', auth='none') @fragment_to_query_string - def signin(self, req, **kw): + def signin(self, **kw): state = simplejson.loads(kw['state']) dbname = state['d'] provider = state['p'] @@ -71,7 +71,7 @@ class OAuthController(oeweb.Controller): url = '/#action=%s' % action elif menu: url = '/#menu_id=%s' % menu - return login_and_redirect(req, *credentials, redirect_url=url) + return login_and_redirect(*credentials, redirect_url=url) except AttributeError: # auth_signup is not installed _logger.error("auth_signup not installed on database %s: oauth sign up cancelled." % (dbname,)) @@ -88,21 +88,24 @@ class OAuthController(oeweb.Controller): _logger.exception("OAuth2: %s" % str(e)) url = "/#action=login&oauth_error=2" - return set_cookie_and_redirect(req, url) + return set_cookie_and_redirect(url) - @oeweb.httprequest - def oea(self, req, **kw): + @http.route('/auth_oauth/oea', type='http', auth='none') + def oea(self, **kw): """login user via OpenERP Account provider""" dbname = kw.pop('db', None) if not dbname: - dbname = db_monodb(req) + dbname = db_monodb() if not dbname: return BadRequest() registry = RegistryManager.get(dbname) with registry.cursor() as cr: IMD = registry['ir.model.data'] - model, provider_id = IMD.get_object_reference(cr, SUPERUSER_ID, 'auth_oauth', 'provider_openerp') + try: + model, provider_id = IMD.get_object_reference(cr, SUPERUSER_ID, 'auth_oauth', 'provider_openerp') + except ValueError: + return set_cookie_and_redirect('/?db=%s' % dbname) assert model == 'auth.oauth.provider' state = { @@ -112,6 +115,6 @@ class OAuthController(oeweb.Controller): } kw['state'] = simplejson.dumps(state) - return self.signin(req, **kw) + return self.signin(**kw) # vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auth_openid/controllers/main.py b/addons/auth_openid/controllers/main.py index 1fcc34c82a0..a4ef1bfa07b 100644 --- a/addons/auth_openid/controllers/main.py +++ b/addons/auth_openid/controllers/main.py @@ -38,6 +38,8 @@ import openerp from openerp import SUPERUSER_ID from openerp.modules.registry import RegistryManager from openerp.addons.web.controllers.main import login_and_redirect, set_cookie_and_redirect +import openerp.addons.web.http as http +from openerp.addons.web.http import request from .. import utils @@ -88,20 +90,19 @@ class GoogleAppsAwareConsumer(consumer.GenericConsumer): return super(GoogleAppsAwareConsumer, self).complete(message, endpoint, return_to) -class OpenIDController(openerp.addons.web.http.Controller): - _cp_path = '/auth_openid/login' +class OpenIDController(http.Controller): _store = filestore.FileOpenIDStore(_storedir) _REQUIRED_ATTRIBUTES = ['email'] _OPTIONAL_ATTRIBUTES = 'nickname fullname postcode country language timezone'.split() - def _add_extensions(self, request): - """Add extensions to the request""" + def _add_extensions(self, oidrequest): + """Add extensions to the oidrequest""" sreg_request = sreg.SRegRequest(required=self._REQUIRED_ATTRIBUTES, optional=self._OPTIONAL_ATTRIBUTES) - request.addExtension(sreg_request) + oidrequest.addExtension(sreg_request) ax_request = ax.FetchRequest() for alias in self._REQUIRED_ATTRIBUTES: @@ -111,7 +112,7 @@ class OpenIDController(openerp.addons.web.http.Controller): uri = utils.SREG2AX[alias] ax_request.add(ax.AttrInfo(uri, required=False, alias=alias)) - request.addExtension(ax_request) + oidrequest.addExtension(ax_request) def _get_attributes_from_success_response(self, success_response): attrs = {} @@ -133,58 +134,58 @@ class OpenIDController(openerp.addons.web.http.Controller): attrs[attr] = value return attrs - def _get_realm(self, req): - return req.httprequest.host_url + def _get_realm(self): + return request.httprequest.host_url - @openerp.addons.web.http.httprequest - def verify_direct(self, req, db, url): - result = self._verify(req, db, url) + @http.route('/auth_openid/login/verify_direct', type='http', auth='none') + def verify_direct(self, db, url): + result = self._verify(db, url) if 'error' in result: return werkzeug.exceptions.BadRequest(result['error']) if result['action'] == 'redirect': return werkzeug.utils.redirect(result['value']) return result['value'] - @openerp.addons.web.http.jsonrequest - def verify(self, req, db, url): - return self._verify(req, db, url) + @http.route('/auth_openid/login/verify', type='json', auth='none') + def verify(self, db, url): + return self._verify(db, url) - def _verify(self, req, db, url): - redirect_to = werkzeug.urls.Href(req.httprequest.host_url + 'auth_openid/login/process')(session_id=req.session_id) - realm = self._get_realm(req) + def _verify(self, db, url): + redirect_to = werkzeug.urls.Href(request.httprequest.host_url + 'auth_openid/login/process')(session_id=request.session_id) + realm = self._get_realm() session = dict(dbname=db, openid_url=url) # TODO add origin page ? oidconsumer = consumer.Consumer(session, self._store) try: - request = oidconsumer.begin(url) + oidrequest = oidconsumer.begin(url) except consumer.DiscoveryFailure, exc: fetch_error_string = 'Error in discovery: %s' % (str(exc[0]),) return {'error': fetch_error_string, 'title': 'OpenID Error'} - if request is None: + if oidrequest is None: return {'error': 'No OpenID services found', 'title': 'OpenID Error'} - req.session.openid_session = session - self._add_extensions(request) + request.session.openid_session = session + self._add_extensions(oidrequest) - if request.shouldSendRedirect(): - redirect_url = request.redirectURL(realm, redirect_to) - return {'action': 'redirect', 'value': redirect_url, 'session_id': req.session_id} + if oidrequest.shouldSendRedirect(): + redirect_url = oidrequest.redirectURL(realm, redirect_to) + return {'action': 'redirect', 'value': redirect_url, 'session_id': request.session_id} else: - form_html = request.htmlMarkup(realm, redirect_to) - return {'action': 'post', 'value': form_html, 'session_id': req.session_id} + form_html = oidrequest.htmlMarkup(realm, redirect_to) + return {'action': 'post', 'value': form_html, 'session_id': request.session_id} - @openerp.addons.web.http.httprequest - def process(self, req, **kw): - session = getattr(req.session, 'openid_session', None) + @http.route('/auth_openid/login/process', type='http', auth='none') + def process(self, **kw): + session = getattr(request.session, 'openid_session', None) if not session: - return set_cookie_and_redirect(req, '/') + return set_cookie_and_redirect('/') oidconsumer = consumer.Consumer(session, self._store, consumer_class=GoogleAppsAwareConsumer) - query = req.httprequest.args - info = oidconsumer.complete(query, req.httprequest.base_url) + query = request.httprequest.args + info = oidconsumer.complete(query, request.httprequest.base_url) display_identifier = info.getDisplayIdentifier() session['status'] = info.status @@ -225,7 +226,7 @@ class OpenIDController(openerp.addons.web.http.Controller): # TODO fill empty fields with the ones from sreg/ax cr.commit() - return login_and_redirect(req, dbname, login, key) + return login_and_redirect(dbname, login, key) session['message'] = 'This OpenID identifier is not associated to any active users' @@ -241,11 +242,11 @@ class OpenIDController(openerp.addons.web.http.Controller): # information in a log. session['message'] = 'Verification failed.' - return set_cookie_and_redirect(req, '/#action=login&loginerror=1') + return set_cookie_and_redirect('/#action=login&loginerror=1') - @openerp.addons.web.http.jsonrequest - def status(self, req): - session = getattr(req.session, 'openid_session', {}) + @http.route('/auth_openid/login/status', type='json', auth='none') + def status(self): + session = getattr(request.session, 'openid_session', {}) return {'status': session.get('status'), 'message': session.get('message')} diff --git a/addons/auth_signup/controllers/main.py b/addons/auth_signup/controllers/main.py index 924e1546862..8c61af1f03c 100644 --- a/addons/auth_signup/controllers/main.py +++ b/addons/auth_signup/controllers/main.py @@ -23,14 +23,15 @@ import logging import openerp from openerp.modules.registry import RegistryManager from ..res_users import SignupError +import openerp.addons.web.http as http +from openerp.addons.web.http import request _logger = logging.getLogger(__name__) -class Controller(openerp.addons.web.http.Controller): - _cp_path = '/auth_signup' +class Controller(http.Controller): - @openerp.addons.web.http.jsonrequest - def get_config(self, req, dbname): + @http.route('/auth_signup/get_config', type='json', auth="none") + def get_config(self, dbname): """ retrieve the module config (which features are enabled) for the login page """ registry = RegistryManager.get(dbname) with registry.cursor() as cr: @@ -41,8 +42,8 @@ class Controller(openerp.addons.web.http.Controller): } return config - @openerp.addons.web.http.jsonrequest - def retrieve(self, req, dbname, token): + @http.route('/auth_signup/retrieve', type='json', auth="user") + def retrieve(self, dbname, token): """ retrieve the user info (name, login or email) corresponding to a signup token """ registry = RegistryManager.get(dbname) with registry.cursor() as cr: @@ -50,23 +51,23 @@ class Controller(openerp.addons.web.http.Controller): user_info = res_partner.signup_retrieve_info(cr, openerp.SUPERUSER_ID, token) return user_info - @openerp.addons.web.http.jsonrequest - def signup(self, req, dbname, token, **values): + @http.route('/auth_signup/signup', type='json', auth="user") + def signup(self, dbname, token, **values): """ sign up a user (new or existing)""" try: - self._signup_with_values(req, dbname, token, values) + self._signup_with_values(dbname, token, values) except SignupError, e: return {'error': openerp.tools.exception_to_unicode(e)} return {} - def _signup_with_values(self, req, dbname, token, values): + def _signup_with_values(self, dbname, token, values): registry = RegistryManager.get(dbname) with registry.cursor() as cr: res_users = registry.get('res.users') res_users.signup(cr, openerp.SUPERUSER_ID, values, token) - @openerp.addons.web.http.jsonrequest - def reset_password(self, req, dbname, login): + @http.route('/auth_signup/reset_password', type='json', auth="user") + def reset_password(self, dbname, login): """ retrieve user, and perform reset password """ registry = RegistryManager.get(dbname) with registry.cursor() as cr: diff --git a/addons/base_calendar/crm_meeting.py b/addons/base_calendar/crm_meeting.py index aa476002abc..1051a7a894c 100644 --- a/addons/base_calendar/crm_meeting.py +++ b/addons/base_calendar/crm_meeting.py @@ -60,7 +60,7 @@ class crm_meeting(base_state, osv.Model): 'categ_ids': fields.many2many('crm.meeting.type', 'meeting_category_rel', 'event_id', 'type_id', 'Tags'), 'attendee_ids': fields.many2many('calendar.attendee', 'meeting_attendee_rel',\ - 'event_id', 'attendee_id', 'Attendees', states={'done': [('readonly', True)]}), + 'event_id', 'attendee_id', 'Invited People', states={'done': [('readonly', True)]}), } _defaults = { 'state': 'open', diff --git a/addons/base_gengo/i18n/th.po b/addons/base_gengo/i18n/th.po new file mode 100644 index 00000000000..e0b5ba3e2fc --- /dev/null +++ b/addons/base_gengo/i18n/th.po @@ -0,0 +1,249 @@ +# Thai translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-20 13:54+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Thai <th@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-21 05:36+0000\n" +"X-Generator: Launchpad (build 16677)\n" + +#. module: base_gengo +#: view:res.company:0 +msgid "Comments for Translator" +msgstr "" + +#. module: base_gengo +#: field:ir.translation,job_id:0 +msgid "Gengo Job ID" +msgstr "" + +#. module: base_gengo +#: code:addons/base_gengo/wizard/base_gengo_translations.py:114 +#, python-format +msgid "This language is not supported by the Gengo translation services." +msgstr "" + +#. module: base_gengo +#: field:res.company,gengo_comment:0 +msgid "Comments" +msgstr "ความคิดเห็น" + +#. module: base_gengo +#: field:res.company,gengo_private_key:0 +msgid "Gengo Private Key" +msgstr "" + +#. module: base_gengo +#: model:ir.model,name:base_gengo.model_base_gengo_translations +msgid "base.gengo.translations" +msgstr "base.gengo.translations" + +#. module: base_gengo +#: help:res.company,gengo_auto_approve:0 +msgid "Jobs are Automatically Approved by Gengo." +msgstr "" + +#. module: base_gengo +#: field:base.gengo.translations,lang_id:0 +msgid "Language" +msgstr "ภาษา" + +#. module: base_gengo +#: field:ir.translation,gengo_comment:0 +msgid "Comments & Activity Linked to Gengo" +msgstr "" + +#. module: base_gengo +#: code:addons/base_gengo/wizard/base_gengo_translations.py:124 +#, python-format +msgid "Gengo Sync Translation (Response)" +msgstr "" + +#. module: base_gengo +#: code:addons/base_gengo/wizard/base_gengo_translations.py:72 +#, python-format +msgid "" +"Gengo `Public Key` or `Private Key` are missing. Enter your Gengo " +"authentication parameters under `Settings > Companies > Gengo Parameters`." +msgstr "" + +#. module: base_gengo +#: selection:ir.translation,gengo_translation:0 +msgid "Translation By Machine" +msgstr "" + +#. module: base_gengo +#: code:addons/base_gengo/wizard/base_gengo_translations.py:155 +#, python-format +msgid "" +"%s\n" +"\n" +"--\n" +" Commented on %s by %s." +msgstr "" + +#. module: base_gengo +#: field:ir.translation,gengo_translation:0 +msgid "Gengo Translation Service Level" +msgstr "" + +#. module: base_gengo +#: constraint:ir.translation:0 +msgid "" +"The Gengo translation service selected is not supported for this language." +msgstr "" + +#. module: base_gengo +#: selection:ir.translation,gengo_translation:0 +msgid "Standard" +msgstr "" + +#. module: base_gengo +#: help:ir.translation,gengo_translation:0 +msgid "" +"You can select here the service level you want for an automatic translation " +"using Gengo." +msgstr "" + +#. module: base_gengo +#: field:base.gengo.translations,restart_send_job:0 +msgid "Restart Sending Job" +msgstr "" + +#. module: base_gengo +#: view:ir.translation:0 +msgid "To Approve In Gengo" +msgstr "" + +#. module: base_gengo +#: view:res.company:0 +msgid "Private Key" +msgstr "" + +#. module: base_gengo +#: view:res.company:0 +msgid "Public Key" +msgstr "" + +#. module: base_gengo +#: field:res.company,gengo_public_key:0 +msgid "Gengo Public Key" +msgstr "" + +#. module: base_gengo +#: code:addons/base_gengo/wizard/base_gengo_translations.py:123 +#, python-format +msgid "Gengo Sync Translation (Request)" +msgstr "" + +#. module: base_gengo +#: view:ir.translation:0 +msgid "Translations" +msgstr "" + +#. module: base_gengo +#: field:res.company,gengo_auto_approve:0 +msgid "Auto Approve Translation ?" +msgstr "" + +#. module: base_gengo +#: model:ir.actions.act_window,name:base_gengo.action_wizard_base_gengo_translations +#: model:ir.ui.menu,name:base_gengo.menu_action_wizard_base_gengo_translations +msgid "Gengo: Manual Request of Translation" +msgstr "" + +#. module: base_gengo +#: code:addons/base_gengo/ir_translation.py:62 +#: code:addons/base_gengo/wizard/base_gengo_translations.py:109 +#, python-format +msgid "Gengo Authentication Error" +msgstr "" + +#. module: base_gengo +#: model:ir.model,name:base_gengo.model_res_company +msgid "Companies" +msgstr "" + +#. module: base_gengo +#: view:ir.translation:0 +msgid "" +"Note: If the translation state is 'In Progress', it means that the " +"translation has to be approved to be uploaded in this system. You are " +"supposed to do that directly by using your Gengo Account" +msgstr "" + +#. module: base_gengo +#: code:addons/base_gengo/wizard/base_gengo_translations.py:82 +#, python-format +msgid "" +"Gengo connection failed with this message:\n" +"``%s``" +msgstr "" + +#. module: base_gengo +#: view:res.company:0 +msgid "Gengo Parameters" +msgstr "" + +#. module: base_gengo +#: view:base.gengo.translations:0 +msgid "Send" +msgstr "" + +#. module: base_gengo +#: selection:ir.translation,gengo_translation:0 +msgid "Ultra" +msgstr "" + +#. module: base_gengo +#: model:ir.model,name:base_gengo.model_ir_translation +msgid "ir.translation" +msgstr "" + +#. module: base_gengo +#: view:ir.translation:0 +msgid "Gengo Translation Service" +msgstr "" + +#. module: base_gengo +#: selection:ir.translation,gengo_translation:0 +msgid "Pro" +msgstr "" + +#. module: base_gengo +#: view:base.gengo.translations:0 +msgid "Gengo Request Form" +msgstr "" + +#. module: base_gengo +#: code:addons/base_gengo/wizard/base_gengo_translations.py:114 +#, python-format +msgid "Warning" +msgstr "" + +#. module: base_gengo +#: help:res.company,gengo_comment:0 +msgid "" +"This comment will be automatically be enclosed in each an every request sent " +"to Gengo" +msgstr "" + +#. module: base_gengo +#: view:base.gengo.translations:0 +msgid "Cancel" +msgstr "" + +#. module: base_gengo +#: view:base.gengo.translations:0 +msgid "or" +msgstr "" diff --git a/addons/base_import/static/csv/o2m_customers_contacts.csv b/addons/base_import/static/csv/o2m_customers_contacts.csv new file mode 100644 index 00000000000..9a2411b2bee --- /dev/null +++ b/addons/base_import/static/csv/o2m_customers_contacts.csv @@ -0,0 +1,9 @@ +Name,Is a company,Related company,Address type,Customer,Supplier,Street,ZIP,City,State,Country +Aurora Shelves,1,,,1,0,25 Pacific Road,95101,San José,CA,United States +Roger Martins,0,Aurora Shelves,Invoice,1,0,27 Pacific Road,95102,San José,CA,United States +House Sales Direct,1,,,1,0,104 Saint Mary Avenue,94059,Redwood,CA,United States +Yvan Holiday,0,House Sales Direct,Default,1,0,104 Saint Mary Avenue,94060,Redwood,CA,United States +Jack Unsworth,0,House Sales Direct,Invoice,1,0,227 Jackson Road,94061,Redwood,CA,United States +Michael Mason,0,,,1,0,16 5th Avenue,94104,San Francisco,CA,United States +International Wood,1,,,1,0,748 White House Boulevard,20004,Washington,DC,United States +Sharon Pecker,0,International Wood,Invoice,1,0,755 White House Boulevard,20005,Washington,DC,United States diff --git a/addons/base_import/static/csv/o2m_suppliers_contacts.csv b/addons/base_import/static/csv/o2m_suppliers_contacts.csv deleted file mode 100644 index 6c7be9037b8..00000000000 --- a/addons/base_import/static/csv/o2m_suppliers_contacts.csv +++ /dev/null @@ -1,8 +0,0 @@ -Name,Address type,Street,City,Country,Tags,Supplier,Customer,Is a company,Companies that refers to partner / Parent company
-Wood y Wood Pecker,,"Snow Street, 25",Kainuu,Finland,Supplier,1,0,1,
-Roger Pecker,Default,"Snow Street, 27",Kainuu,Finland,Supplier,1,0,0,Wood y Wood Pecker
-Sharon Pecker,Delivery,"Snow Street, 28",Kainuu,Finland,Supplier,1,0,0,Wood y Wood Pecker
-Thomas Pecker,Contact,"Snow Street, 27",Kainuu,Finland,Supplier,1,0,0,Wood y Wood Pecker
-Vicking Direct,,"Atonium Street, 45a",Brussels,Belgium,Supplier,1,0,1,
-Yvan Holiday,Invoice,"Atonium Street, 45b",Brussels,Belgium,Supplier,1,0,0,Vicking Direct
-Jack Unsworth,Contact,"Atonium Street, 45a",Brussels,Belgium,Supplier,1,0,0,Vicking Direct
diff --git a/addons/base_import/static/src/xml/import.xml b/addons/base_import/static/src/xml/import.xml index c8b2b2c63dd..97bf3e66f7a 100644 --- a/addons/base_import/static/src/xml/import.xml +++ b/addons/base_import/static/src/xml/import.xml @@ -229,8 +229,8 @@ orders with their respective purchase order lines:</p> <a href="/base_import/static/csv/o2m_purchase_order_lines.csv">Purchase orders with their respective purchase order lines</a> <p>The following CSV file shows how to import - suppliers and their respective contacts</p> - <a href="/base_import/static/csv/o2m_suppliers_contacts.csv">Suppliers and their respective contacts</a> + customers and their respective contacts</p> + <a href="/base_import/static/csv/o2m_customers_contacts.csv">Customers and their respective contacts</a> </dd> </dl> diff --git a/addons/base_report_designer/base_report_designer_installer.xml b/addons/base_report_designer/base_report_designer_installer.xml index 99898f5a703..61b7fbc4c1d 100644 --- a/addons/base_report_designer/base_report_designer_installer.xml +++ b/addons/base_report_designer/base_report_designer_installer.xml @@ -14,9 +14,13 @@ <label string="This plug-in allows you to create/modify OpenERP Reports into OpenOffice Writer."/> </separator> <xpath expr="//button[@string='Install Modules']" position="replace"> - <button name="action_next" icon="gtk-go-forward" type="object" string="Configure" invisible="context.get('menu',False)" class="oe_highlight"/> + <button name="action_next" type="object" string="Configure" invisible="context.get('menu',False)" class="oe_highlight"/> + <label string="or" invisible="context.get('menu',False)" class="oe_inline"/> + </xpath> + <xpath expr="//button[@string='Skip']" position="replace"> + <button string="Ok" class="oe_highlight" special="cancel" invisible="context.get('active_model',False)"/> + <button string="Skip" class="oe_link" special="cancel" invisible="context.get('menu',False)"/> </xpath> - <xpath expr="//separator[@string='title']" position="after"> <group colspan="8" height="450" width="750"> <field name="name" invisible="1"/> diff --git a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/rpc.py b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/rpc.py index 5d6f8ca6dbc..e0176bfec62 100644 --- a/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/rpc.py +++ b/addons/base_report_designer/plugin/openerp_report_designer/bin/script/lib/rpc.py @@ -61,8 +61,8 @@ class RPCSession(object): protocol = m.group(1) if not m: return -1 - if protocol == 'http://' or protocol == 'http://': - self.gateway = XMLRPCGateway(host, port, 'http') + if protocol == 'http://' or protocol == 'https://': + self.gateway = XMLRPCGateway(host, port, protocol[:-3]) elif protocol == 'socket://': self.gateway = NETRPCGateway(host, port) diff --git a/addons/base_report_designer/static/base-report-designer-plugin/openerp_report_designer.zip b/addons/base_report_designer/static/base-report-designer-plugin/openerp_report_designer.zip Binary files differindex 7d03f45dbb4..238f9d19671 100644 --- a/addons/base_report_designer/static/base-report-designer-plugin/openerp_report_designer.zip +++ b/addons/base_report_designer/static/base-report-designer-plugin/openerp_report_designer.zip diff --git a/addons/base_setup/i18n/ru.po b/addons/base_setup/i18n/ru.po index 93f65355baa..ab26ce496d6 100644 --- a/addons/base_setup/i18n/ru.po +++ b/addons/base_setup/i18n/ru.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: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-05-27 12:19+0000\n" -"Last-Translator: leksei <lirgus@gmail.com>\n" +"PO-Revision-Date: 2013-06-17 10:30+0000\n" +"Last-Translator: Chertykov Denis <chertykov@gmail.com>\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: 2013-05-28 05:17+0000\n" -"X-Generator: Launchpad (build 16640)\n" +"X-Launchpad-Export-Date: 2013-06-18 05:46+0000\n" +"X-Generator: Launchpad (build 16673)\n" #. module: base_setup #: view:sale.config.settings:0 @@ -92,7 +92,7 @@ msgstr "Общие настройки" #. module: base_setup #: selection:base.setup.terminology,partner:0 msgid "Donor" -msgstr "" +msgstr "Спонсор" #. module: base_setup #: view:base.config.settings:0 @@ -147,7 +147,7 @@ msgstr "res_config_contents" #. module: base_setup #: view:sale.config.settings:0 msgid "Customer Features" -msgstr "" +msgstr "Свойства заказчика" #. module: base_setup #: view:base.config.settings:0 @@ -157,7 +157,7 @@ msgstr "Импорт / Экспорт" #. module: base_setup #: view:sale.config.settings:0 msgid "Sale Features" -msgstr "" +msgstr "Свойства продаж" #. module: base_setup #: field:sale.config.settings,module_plugin_outlook:0 @@ -232,7 +232,7 @@ msgstr "" #. module: base_setup #: model:ir.model,name:base_setup.model_sale_config_settings msgid "sale.config.settings" -msgstr "" +msgstr "sale.config.settings" #. module: base_setup #: field:base.setup.terminology,partner:0 @@ -263,7 +263,7 @@ msgstr "" #. module: base_setup #: model:ir.model,name:base_setup.model_base_setup_terminology msgid "base.setup.terminology" -msgstr "" +msgstr "base.setup.terminology" #. module: base_setup #: selection:base.setup.terminology,partner:0 diff --git a/addons/board/__openerp__.py b/addons/board/__openerp__.py index e699e091176..87771b2f518 100644 --- a/addons/board/__openerp__.py +++ b/addons/board/__openerp__.py @@ -31,7 +31,7 @@ Lets the user create a custom dashboard. Allows users to create custom dashboard. """, 'author': 'OpenERP SA', - 'depends': ['base'], + 'depends': ['base', 'web'], 'data': [ 'security/ir.model.access.csv', 'board_view.xml', diff --git a/addons/board/static/src/js/dashboard.js b/addons/board/static/src/js/dashboard.js index 3489b686e1b..4f50d2281fe 100644 --- a/addons/board/static/src/js/dashboard.js +++ b/addons/board/static/src/js/dashboard.js @@ -344,7 +344,7 @@ instance.board.AddToDashboard = instance.web.search.Input.extend({ }, load_data:function(){ var board = new instance.web.Model('board.board'); - return board.call('list'); + return board.call('list', [board.context()]); }, _x:function() { if (!instance.webclient) { return $.Deferred().reject(); } diff --git a/addons/crm/crm.py b/addons/crm/crm.py index 4c9a60634a5..d1194508b71 100644 --- a/addons/crm/crm.py +++ b/addons/crm/crm.py @@ -222,17 +222,13 @@ class crm_case_section(osv.osv): return res def create(self, cr, uid, vals, context=None): - mail_alias = self.pool.get('mail.alias') - if not vals.get('alias_id'): - alias_name = vals.pop('alias_name', None) or vals.get('name') # prevent errors during copy() - alias_id = mail_alias.create_unique_alias(cr, uid, - {'alias_name': alias_name}, - model_name="crm.lead", - context=context) - vals['alias_id'] = alias_id - res = super(crm_case_section, self).create(cr, uid, vals, context) - mail_alias.write(cr, uid, [vals['alias_id']], {'alias_defaults': {'section_id': res, 'type': 'lead'}}, context) - return res + if context is None: + context = {} + create_context = dict(context, alias_model_name='crm.lead', alias_parent_model_name=self._name) + section_id = super(crm_case_section, self).create(cr, uid, vals, context=create_context) + section = self.browse(cr, uid, section_id, context=context) + self.pool.get('mail.alias').write(cr, uid, [section.alias_id.id], {'alias_parent_thread_id': section_id, 'alias_defaults': {'section_id': section_id, 'type': 'lead'}}, context=context) + return section_id def unlink(self, cr, uid, ids, context=None): # Cascade-delete mail aliases as well, as they should not exist without the sales team. diff --git a/addons/crm/crm_case_section_view.xml b/addons/crm/crm_case_section_view.xml index be5611c03c4..c957311b47f 100644 --- a/addons/crm/crm_case_section_view.xml +++ b/addons/crm/crm_case_section_view.xml @@ -94,7 +94,7 @@ <div class="oe_kanban_content"> <h4 class="oe_center"><field name="name"/></h4> <div class="oe_kanban_alias oe_center" t-if="record.use_leads.raw_value and record.alias_id.value"> - <small><span class="oe_e" style="float: none;">%%</span><t t-raw="record.alias_id.raw_value[1]"/></small> + <small><span class="oe_e oe_e_alias" style="float: none;">%%</span><t t-raw="record.alias_id.raw_value[1]"/></small> </div> <div class="oe_items_list"> <div class="oe_salesteams_leads" t-if="record.use_leads.raw_value"> @@ -168,17 +168,6 @@ <h1> <field name="name" string="Salesteam"/> </h1> - <div name="group_alias" - attrs="{'invisible': [('alias_domain', '=', False)]}"> - <label for="alias_id" string="Email Alias"/> - <field name="alias_id" class="oe_inline oe_read_only" required="0" nolabel="1"/> - <span name="edit_alias" class="oe_edit_only"> - <field name="alias_name" class="oe_inline" - attrs="{'required': [('use_leads', '=', True), ('alias_id', '!=', False)]}"/> - @ - <field name="alias_domain" class="oe_inline" readonly="1"/> - </span> - </div> <div name="options_active"> <field name="use_leads" class="oe_inline"/><label for="use_leads"/> </div> @@ -187,12 +176,25 @@ <group> <field name="user_id"/> <field name="code"/> - </group> - <group> <field name="parent_id"/> <field name="change_responsible"/> <field name="active"/> </group> + <group> + <label for="alias_name" string="Email Alias" + attrs="{'invisible': [('alias_domain', '=', False)]}"/> + <div name="alias_def" + attrs="{'invisible': [('alias_domain', '=', False)]}"> + <field name="alias_id" class="oe_read_only oe_inline" + string="Email Alias" required="0"/> + <div class="oe_edit_only oe_inline" name="edit_alias" style="display: inline;" > + <field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/> + </div> + </div> + <field name="alias_contact" class="oe_inline" + string="Accept Emails From" + attrs="{'invisible': [('alias_domain', '=', False)]}"/> + </group> </group> <notebook colspan="4"> <page string="Team Members"> diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index b8673e73927..44ada2ffcc0 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -719,7 +719,6 @@ class crm_lead(base_stage, format_address, osv.osv): continue vals = self._convert_opportunity_data(cr, uid, lead, customer, section_id, context=context) self.write(cr, uid, [lead.id], vals, context=context) - self.message_post(cr, uid, ids, body=_("Lead <b>converted into an Opportunity</b>"), subtype="crm.mt_lead_convert_to_opportunity", context=context) if user_ids or section_id: self.allocate_salesman(cr, uid, ids, user_ids, section_id, context=context) diff --git a/addons/crm/crm_lead_data.xml b/addons/crm/crm_lead_data.xml index 0979a94eb3f..92914542d9d 100644 --- a/addons/crm/crm_lead_data.xml +++ b/addons/crm/crm_lead_data.xml @@ -163,12 +163,6 @@ <field name="default" eval="False"/> <field name="description">Opportunity created</field> </record> - <record id="mt_lead_convert_to_opportunity" model="mail.message.subtype"> - <field name="name">Lead to Opportunity</field> - <field name="res_model">crm.lead</field> - <field name="default" eval="False"/> - <field name="description">Lead converted into an opportunity</field> - </record> <record id="mt_lead_stage" model="mail.message.subtype"> <field name="name">Stage Changed</field> <field name="res_model">crm.lead</field> @@ -195,13 +189,6 @@ <field name="parent_id" eval="ref('mt_lead_create')"/> <field name="relation_field">section_id</field> </record> - <record id="mt_salesteam_lead_opportunity" model="mail.message.subtype"> - <field name="name">Lead to Opportunity</field> - <field name="default" eval="False"/> - <field name="res_model">crm.case.section</field> - <field name="parent_id" eval="ref('mt_lead_convert_to_opportunity')"/> - <field name="relation_field">section_id</field> - </record> <record id="mt_salesteam_lead_stage" model="mail.message.subtype"> <field name="name">Opportunity Stage Changed</field> <field name="res_model">crm.case.section</field> diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml index 6ddd06c1c90..df6a4a07a8e 100644 --- a/addons/crm/crm_lead_view.xml +++ b/addons/crm/crm_lead_view.xml @@ -601,7 +601,9 @@ 'default_email_to':'{$object.email or \'\'}', 'default_use_template': True, 'default_template_id': ref('crm.email_template_opportunity_mail'), - }"/> + }" + groups="base.group_sale_salesman" + /> <!--Update of email_template defined in crm_lead_data, to add ref_ir_act_window allowing to have a well formed email template (context action considered as set). --> @@ -617,6 +619,7 @@ if context.get('active_model') == 'crm.lead' and context.get('active_ids'): self.case_cancel(cr, uid, context['active_ids'], context=context) </field> + <field name="groups_id" eval="[(4,ref('base.group_sale_salesman'))]"/> </record> <record id="ir_mark_as_lost" model="ir.values"> diff --git a/addons/crm/i18n/hu.po b/addons/crm/i18n/hu.po index 98313efb4f3..6673d2da235 100644 --- a/addons/crm/i18n/hu.po +++ b/addons/crm/i18n/hu.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: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-04-13 08:42+0000\n" +"PO-Revision-Date: 2013-06-21 07:11+0000\n" "Last-Translator: krnkris <Unknown>\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: 2013-04-14 05:12+0000\n" -"X-Generator: Launchpad (build 16564)\n" +"X-Launchpad-Export-Date: 2013-06-22 05:36+0000\n" +"X-Generator: Launchpad (build 16677)\n" #. module: crm #: view:crm.lead.report:0 @@ -31,7 +31,7 @@ msgstr "" "létrehozását a bejövő levelekből." #. module: crm -#: code:addons/crm/crm_lead.py:881 +#: code:addons/crm/crm_lead.py:898 #: selection:crm.case.stage,type:0 #: view:crm.lead:0 #: selection:crm.lead,type:0 @@ -192,8 +192,8 @@ msgstr "" "direkt HTML formátumú ahhoz hogy beilleszthető legyen a kanban nézetekbe." #. module: crm -#: code:addons/crm/crm_lead.py:624 -#: code:addons/crm/crm_lead.py:744 +#: code:addons/crm/crm_lead.py:640 +#: code:addons/crm/crm_lead.py:761 #: code:addons/crm/crm_phonecall.py:280 #, python-format msgid "Warning!" @@ -304,7 +304,7 @@ msgid "Prospect Partner" msgstr "Leendő partner" #. module: crm -#: code:addons/crm/crm_lead.py:982 +#: code:addons/crm/crm_lead.py:1002 #, python-format msgid "No Subject" msgstr "Nincs tárgy" @@ -482,7 +482,7 @@ msgid "#Opportunities" msgstr "Lehetőségek száma" #. module: crm -#: code:addons/crm/crm_lead.py:624 +#: code:addons/crm/crm_lead.py:640 #, python-format msgid "" "Please select more than one element (lead or opportunity) from the list view." @@ -782,7 +782,7 @@ msgid "Statistics Dashboard" msgstr "Statisztika vezérlőpult" #. module: crm -#: code:addons/crm/crm_lead.py:861 +#: code:addons/crm/crm_lead.py:878 #: model:crm.case.stage,name:crm.stage_lead2 #: selection:crm.case.stage,type:0 #: view:crm.lead:0 @@ -844,7 +844,7 @@ msgid "Exclusive" msgstr "Kizárólagos" #. module: crm -#: code:addons/crm/crm_lead.py:584 +#: code:addons/crm/crm_lead.py:600 #, python-format msgid "From %s : %s" msgstr "Ettől %s : %s" @@ -1016,7 +1016,7 @@ msgid "Next Action" msgstr "Következő művelet" #. module: crm -#: code:addons/crm/crm_lead.py:763 +#: code:addons/crm/crm_lead.py:780 #, python-format msgid "<b>Partner</b> set to <em>%s</em>." msgstr "<b>Partner</b> beállítva mint <em>%s</em>." @@ -1109,7 +1109,7 @@ msgid "Creation Date" msgstr "Létrehozás dátuma" #. module: crm -#: code:addons/crm/crm_lead.py:698 +#: code:addons/crm/crm_lead.py:715 #, python-format msgid "Lead <b>converted into an Opportunity</b>" msgstr "Tervezet <b>lehetőséggé átalakítva lehetőséggé</b>" @@ -1324,7 +1324,9 @@ msgid "Days to Close" msgstr "Lezárásig hátralévő napok" #. module: crm +#: code:addons/crm/crm_lead.py:1057 #: field:crm.case.section,complete_name:0 +#, python-format msgid "unknown" msgstr "Ismeretlen" @@ -1415,7 +1417,7 @@ msgid "Lead Description" msgstr "Érdeklődés leírása" #. module: crm -#: code:addons/crm/crm_lead.py:565 +#: code:addons/crm/crm_lead.py:581 #, python-format msgid "Merged opportunities" msgstr "Lehetőségek összefésülése" @@ -1989,7 +1991,7 @@ msgid "Leads" msgstr "Érdeklődők" #. module: crm -#: code:addons/crm/crm_lead.py:563 +#: code:addons/crm/crm_lead.py:579 #, python-format msgid "Merged leads" msgstr "Össztefésült érdeklődések" @@ -2085,7 +2087,6 @@ msgid "Global CC" msgstr "Globális CC /másolat/" #. module: crm -#: view:crm.lead:0 #: view:crm.phonecall:0 #: model:ir.actions.act_window,name:crm.crm_case_categ_phone0 #: model:ir.ui.menu,name:crm.menu_crm_case_phone @@ -2399,7 +2400,7 @@ msgstr "Érdeklődés átalakítva egy lehetőséggé" #. module: crm #: view:crm.lead:0 msgid "Unassigned Leads" -msgstr "Nem iktatott rdeklődések" +msgstr "Nem iktatott érdeklődések" #. module: crm #: model:mail.message.subtype,description:crm.mt_lead_won @@ -3100,7 +3101,7 @@ msgid "Working Hours" msgstr "Munkaórák" #. module: crm -#: code:addons/crm/crm_lead.py:968 +#: code:addons/crm/crm_lead.py:986 #: view:crm.lead:0 #: field:crm.lead2opportunity.partner,partner_id:0 #: field:crm.lead2opportunity.partner.mass,partner_id:0 diff --git a/addons/crm/res_partner_view.xml b/addons/crm/res_partner_view.xml index dd6c50dbaba..8b941a395dd 100644 --- a/addons/crm/res_partner_view.xml +++ b/addons/crm/res_partner_view.xml @@ -2,19 +2,6 @@ <openerp> <data> - <!-- Add section_id (Sales Team) to res.partner --> - <record id="view_partners_form_crm1" model="ir.ui.view"> - <field name="name">view.res.partner.form.crm.inherited1</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_form"/> - <field eval="18" name="priority"/> - <field name="arch" type="xml"> - <field name="user_id" position="after"> - <field name="section_id" completion="1" groups="base.group_multi_salesteams"/> - </field> - </field> - </record> - <!-- open meetings related to given partner --> <record id="crm_meeting_partner" model="ir.actions.act_window"> <field name="name">Meetings</field> @@ -91,24 +78,31 @@ </field> </record> - - <record model="ir.ui.view" id="res_partner_view_buttons"> - <field name="name">res.partner.view.buttons</field> + <!-- Add section_id (SalesTeam) and contextual button on partner form view --> + <record id="view_partners_form_crm1" model="ir.ui.view"> + <field name="name">view.res.partner.form.crm.inherited1</field> <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_form" /> - <field name="priority" eval="10"/> + <field name="inherit_id" ref="base.view_partner_form"/> + <field eval="18" name="priority"/> <field name="arch" type="xml"> - <xpath expr="//div[@name='buttons']" position="inside"> - <button type="action" - string="Meetings" - name="%(base_calendar.action_crm_meeting)d" - context="{'search_default_partner_ids': active_id, 'default_partner_ids' : [active_id]}"/> - <button type="action" string="Calls" - name="%(crm.crm_case_categ_phone_incoming0)d" - context="{'search_default_partner_id': active_id, 'default_duration': 1.0}" /> - <button type="action" string="Opportunities" attrs="{'invisible': [('customer', '=', False)]}" - name="%(crm.crm_case_category_act_oppor11)d" context="{'search_default_partner_id': active_id}"/> - </xpath> + <data> + <field name="user_id" position="after"> + <field name="section_id" completion="1" groups="base.group_multi_salesteams"/> + </field> + <xpath expr="//div[@name='buttons']" position="inside"> + <button class="oe_inline" type="action" string="Opportunities" + attrs="{'invisible': [('customer', '=', False)]}" + name="%(crm.crm_case_category_act_oppor11)d" + context="{'search_default_partner_id': active_id}"/> + <button class="oe_inline" type="action" + string="Meetings" + name="%(base_calendar.action_crm_meeting)d" + context="{'search_default_partner_ids': active_id, 'default_partner_ids' : [active_id]}"/> + <button class="oe_inline" type="action" string="Calls" + name="%(crm.crm_case_categ_phone_incoming0)d" + context="{'search_default_partner_id': active_id, 'default_duration': 1.0}" /> + </xpath> + </data> </field> </record> diff --git a/addons/crm/wizard/crm_lead_to_opportunity_view.xml b/addons/crm/wizard/crm_lead_to_opportunity_view.xml index 4093df910d0..9ddd1fc701f 100644 --- a/addons/crm/wizard/crm_lead_to_opportunity_view.xml +++ b/addons/crm/wizard/crm_lead_to_opportunity_view.xml @@ -102,7 +102,9 @@ res_model="crm.lead2opportunity.partner.mass" src_model="crm.lead" view_mode="form" target="new" view_type="form" context="{'mass_convert' : True}" - view_id="view_crm_lead2opportunity_partner_mass"/> + view_id="view_crm_lead2opportunity_partner_mass" + groups="base.group_sale_salesman" + /> </data> </openerp> diff --git a/addons/crm/wizard/crm_merge_opportunities_view.xml b/addons/crm/wizard/crm_merge_opportunities_view.xml index 919d83cb9a7..60693c13e19 100644 --- a/addons/crm/wizard/crm_merge_opportunities_view.xml +++ b/addons/crm/wizard/crm_merge_opportunities_view.xml @@ -45,7 +45,9 @@ multi="True" key2="client_action_multi" name="Merge leads/opportunities" res_model="crm.merge.opportunity" src_model="crm.lead" - view_mode="form" target="new" view_type="form"/> + view_mode="form" target="new" view_type="form" + groups="base.group_sale_salesman" + /> </data> </openerp> diff --git a/addons/crm_claim/__openerp__.py b/addons/crm_claim/__openerp__.py index 61257265f1b..eaec2e4fc2b 100644 --- a/addons/crm_claim/__openerp__.py +++ b/addons/crm_claim/__openerp__.py @@ -42,14 +42,20 @@ automatically new claims based on incoming emails. 'security/ir.model.access.csv', 'report/crm_claim_report_view.xml', 'crm_claim_data.xml', + 'res_partner_view.xml', ], 'demo': ['crm_claim_demo.xml'], - 'test': ['test/process/claim.yml', - 'test/ui/claim_demo.yml' + 'test': [ + 'test/process/claim.yml', + 'test/ui/claim_demo.yml' ], 'installable': True, 'auto_install': False, - 'images': ['images/claim_categories.jpeg','images/claim_stages.jpeg','images/claims.jpeg'], + 'images': [ + 'images/claim_categories.jpeg', + 'images/claim_stages.jpeg', + 'images/claims.jpeg' + ], } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_claim/crm_claim_menu.xml b/addons/crm_claim/crm_claim_menu.xml index 5abfcabbc71..59ec2acac2f 100644 --- a/addons/crm_claim/crm_claim_menu.xml +++ b/addons/crm_claim/crm_claim_menu.xml @@ -15,7 +15,11 @@ <field name="view_id" ref="crm_case_claims_tree_view"/> <field name="context">{"search_default_user_id":uid, "stage_type":'claim'}</field> <field name="search_view_id" ref="crm_claim.view_crm_case_claims_filter"/> - <field name="help">Record and track your customers' claims. Claims may be linked to a sales order or a lot. You can send emails with attachments and keep the full history for a claim (emails sent, intervention type and so on). Claims may automatically be linked to an email address using the mail gateway module.</field> + <field name="help" type="html"> + <p class="oe_view_nocontent_create"> + Record and track your customers' claims. Claims may be linked to a sales order or a lot.You can send emails with attachments and keep the full history for a claim (emails sent, intervention type and so on).Claims may automatically be linked to an email address using the mail gateway module. + </p> + </field> </record> <record model="ir.actions.act_window.view" id="action_crm_tag_tree_claim0"> diff --git a/addons/crm_claim/crm_claim_view.xml b/addons/crm_claim/crm_claim_view.xml index e295bfdd250..0d2d8b391e7 100644 --- a/addons/crm_claim/crm_claim_view.xml +++ b/addons/crm_claim/crm_claim_view.xml @@ -216,35 +216,5 @@ </search> </field> </record> - - <record id="view_claim_partner_info_form1" model="ir.ui.view"> - <field name="name">res.partner.claim.info.form</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_form"/> - <field name="priority">20</field> - <field name="arch" type="xml"> - <xpath expr="//page[@name='page_history']" position="attributes"> - <attribute name="invisible">False</attribute> - </xpath> - <xpath expr="//page[@name='page_history']" position="inside"> - <group name="grp_claim" string="Claims"> - <field name="claims_ids" colspan="4" nolabel="1"> - <tree string="Partners Claim" editable="bottom"> - <field name="name"/> - </tree> - </field> - </group> - </xpath> - </field> - </record> - - <act_window - context="{'search_default_partner_id': [active_id], 'default_partner_id': active_id}" - id="act_claim_partner" - name="Claims" - view_mode="tree,form" - res_model="crm.claim" - src_model="res.partner"/> - </data> </openerp> diff --git a/addons/crm_claim/res_partner_view.xml b/addons/crm_claim/res_partner_view.xml new file mode 100644 index 00000000000..4a5db879311 --- /dev/null +++ b/addons/crm_claim/res_partner_view.xml @@ -0,0 +1,21 @@ +<?xml version="1.0"?> +<openerp> + <data> + <!-- Partners inherited form --> + <record id="view_claim_res_partner_info_form" model="ir.ui.view"> + <field name="name">res.partner.claim.info.form</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_form"/> + <field name="priority" eval="50"/> + <field name="arch" type="xml"> + <xpath expr="//div[@name='buttons']" position="inside"> + <button class="oe_inline" type="action" + name="%(crm_case_categ_claim0)d" + string="Claims" + context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}" + groups="base.group_sale_salesman" /> + </xpath> + </field> + </record> + </data> +</openerp> diff --git a/addons/crm_partner_assign/__init__.py b/addons/crm_partner_assign/__init__.py index bb4a3bb53be..6b1315cef07 100644 --- a/addons/crm_partner_assign/__init__.py +++ b/addons/crm_partner_assign/__init__.py @@ -20,6 +20,7 @@ ############################################################################## import crm_partner_assign +import crm_lead import wizard import report diff --git a/addons/crm_partner_assign/__openerp__.py b/addons/crm_partner_assign/__openerp__.py index b9b21ca7a6a..37a8c5a3d6b 100644 --- a/addons/crm_partner_assign/__openerp__.py +++ b/addons/crm_partner_assign/__openerp__.py @@ -37,17 +37,23 @@ The most appropriate partner can be assigned. You can also use the geolocalization without using the GPS coordinates. """, 'author': 'OpenERP SA', - 'depends': ['crm', 'account'], + 'depends': ['crm', 'account', 'portal'], 'demo': ['res_partner_demo.xml'], 'data': [ 'security/ir.model.access.csv', 'res_partner_view.xml', 'wizard/crm_forward_to_partner_view.xml', + 'wizard/crm_channel_interested_view.xml', 'crm_lead_view.xml', 'crm_partner_assign_data.xml', + 'crm_portal_view.xml', + 'portal_data.xml', 'report/crm_lead_report_view.xml', 'report/crm_partner_report_view.xml', ], + 'js': [ + 'static/src/js/next.js', + ], 'test': ['test/partner_assign.yml'], 'installable': True, 'auto_install': False, diff --git a/addons/crm_partner_assign/crm_lead.py b/addons/crm_partner_assign/crm_lead.py new file mode 100644 index 00000000000..37f4b9aedff --- /dev/null +++ b/addons/crm_partner_assign/crm_lead.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## + +from openerp.osv import osv +from openerp.tools.translate import _ + + +class crm_lead(osv.osv): + _inherit = 'crm.lead' + + def get_interested_action(self, cr, uid, interested, context=None): + try: + model, action_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', 'crm_lead_channel_interested_act') + except ValueError: + raise osv.except_osv(_('Error!'), _("The CRM Channel Interested Action is missing")) + action = self.pool[model].read(cr, uid, action_id, context=context) + action_context = eval(action['context']) + action_context['interested'] = interested + action['context'] = str(action_context) + return action + + def case_interested(self, cr, uid, ids, context=None): + return self.get_interested_action(cr, uid, True, context=context) + + def case_disinterested(self, cr, uid, ids, context=None): + return self.get_interested_action(cr, uid, False, context=context) diff --git a/addons/crm_partner_assign/crm_lead_view.xml b/addons/crm_partner_assign/crm_lead_view.xml index 0d2837d6ca5..5c14680ee78 100644 --- a/addons/crm_partner_assign/crm_lead_view.xml +++ b/addons/crm_partner_assign/crm_lead_view.xml @@ -8,27 +8,33 @@ <field name="arch" type="xml"> <data> <xpath expr="//notebook/page[@string='Lead']" position="after"> - <page string="Assignation"> + <page string="Assigned Partner" groups="base.group_sale_manager"> <group name="partner_assign_group"> - <group string="Partner Assignation"> - <field name="partner_assigned_id" on_change="onchange_assign_id(partner_assigned_id)" domain="[('grade_id','<>',False)]"/> - <label for="date_assign"/> + <group string="Partner Assignation" col="3" colspan="1"> + <label for="partner_latitude" string="Geolocation" /> + <div class="oe_title"> + <h3> + <span class="oe_grey">( </span> + <field name="partner_latitude" nolabel="1" readonly="1" class="oe_inline"/> + <span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','<=',0)]}">N </span> + <span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','>=',0)]}">S </span> + <field name="partner_longitude" class="oe_inline" readonly="1" nolabel="1"/> + <span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','<=',0)]}">E </span> + <span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','>=',0)]}">W </span> + <span class="oe_grey">) </span> + </h3> + </div> + <button string="Automatic Assignation" name="action_assign_partner" type="object" colspan="1" + class="oe_inline"/> + <field name="partner_assigned_id" class="oe_inline" on_change="onchange_assign_id(partner_assigned_id)" domain="[('grade_id','<>',False)]"/> <div> - <field name="date_assign"/> - <button string="Forward" + <button string="Send Email" attrs="{'invisible':[('partner_assigned_id','=',False)]}" name="%(crm_lead_forward_to_partner_act)d" - icon="terp-mail-forward" type="action" - context="{'default_composition_mode': 'forward', 'default_partner_ids': [partner_assigned_id]}"/> + type="action" + context="{'default_composition_mode': 'forward','hide_forward_type': 1 , 'default_partner_ids': [partner_assigned_id]}"/> </div> </group> - <group string="Geo Assignation"> - <field name="partner_latitude"/> - <field name="partner_longitude"/> - <span/> - <button string="Geo Assign" name="action_assign_partner" type="object" colspan="1" - icon="gtk-apply"/> - </group> </group> </page> </xpath> @@ -43,7 +49,7 @@ <field name="arch" type="xml"> <field name="partner_id" position="after"> <field name="partner_assigned_id"/> - </field> + </field> </field> </record> @@ -55,41 +61,46 @@ <filter string="Team" position="after"> <filter string="Assigned Partner" icon="terp-personal" domain="[]" context="{'group_by':'partner_assigned_id'}"/> </filter> - <field name="partner_id" position="after"> <field name="partner_assigned_id"/> </field> </field> - </record> + </record> - <record id="view_crm_lead_geo_assign_form" model="ir.ui.view"> + <record id="view_crm_lead_geo_assign_form" model="ir.ui.view"> <field name="name">crm.lead.lead.geo_assign.inherit</field> <field name="model">crm.lead</field> <field name="inherit_id" ref="crm.crm_case_form_view_leads"/> <field name="arch" type="xml"> <data> <xpath expr="//notebook/page[@string='Extra Info']" position="after"> - <page string="Assignation"> + <page string="Assigned Partner" groups="base.group_sale_manager"> <group name="partner_assign_group"> - <group string="Partner Assignation"> - <field name="partner_assigned_id" on_change="onchange_assign_id(partner_assigned_id)" domain="[('grade_id','<>',False)]"/> - <label for="date_assign"/> + <group string="Partner Assignation" col="3"> + <label for="partner_latitude" string="Geolocation" /> <div> - <field name="date_assign"/> - <button string="Forward" + <h3> + <span class="oe_grey">( </span> + <field name="partner_latitude" nolabel="1" readonly="1" class="oe_inline"/> + <span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','<=',0)]}">N </span> + <span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','>=',0)]}">S </span> + <field name="partner_longitude" class="oe_inline" readonly="1" nolabel="1"/> + <span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','<=',0)]}">E </span> + <span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','>=',0)]}">W </span> + <span class="oe_grey">) </span> + </h3> + </div> + <button string="Automatic Assignation" name="action_assign_partner" type="object" colspan="1" + class="oe_inline" /> + <field name="partner_assigned_id" class="oe_inline" on_change="onchange_assign_id(partner_assigned_id)" domain="[('grade_id','<>',False)]"/> + <div> + <button string="Send Email" attrs="{'invisible':[('partner_assigned_id','=',False)]}" name="%(crm_lead_forward_to_partner_act)d" - icon="terp-mail-forward" type="action" - context="{'default_composition_mode': 'forward', 'default_partner_ids': [partner_assigned_id]}"/> + type="action" + context="{'default_composition_mode': 'forward','hide_forward_type': 1 , 'default_partner_ids': [partner_assigned_id]}"/> </div> </group> - <group string="Geo Assignation"> - <field name="partner_latitude"/> - <field name="partner_longitude"/> - <span/> - <button string="Geo Assign" name="action_assign_partner" type="object" colspan="1" - icon="gtk-apply"/> - </group> </group> </page> </xpath> @@ -104,7 +115,7 @@ <field name="arch" type="xml"> <field name="partner_id" position="after"> <field name="partner_assigned_id"/> - </field> + </field> </field> </record> @@ -116,12 +127,11 @@ <filter string="Team" position="after"> <filter string="Assigned Partner" icon="terp-personal" domain="[]" context="{'group_by':'partner_assigned_id'}"/> </filter> - <field name="partner_id" position="after"> <field name="partner_assigned_id"/> </field> </field> - </record> + </record> </data> </openerp> diff --git a/addons/crm_partner_assign/crm_partner_assign.py b/addons/crm_partner_assign/crm_partner_assign.py index b13a75a2591..daf3d844fe6 100644 --- a/addons/crm_partner_assign/crm_partner_assign.py +++ b/addons/crm_partner_assign/crm_partner_assign.py @@ -66,10 +66,13 @@ class res_partner_grade(osv.osv): _columns = { 'sequence': fields.integer('Sequence'), 'active': fields.boolean('Active'), - 'name': fields.char('Grade Name', size=32) + 'name': fields.char('Grade Name', size=32), + 'partner_weight': fields.integer('Grade Weight', + help="Gives the probability to assign a lead to this partner. (0 means no assignation.)"), } _defaults = { - 'active': lambda *args: 1 + 'active': lambda *args: 1, + 'partner_weight':1 } class res_partner_activation(osv.osv): @@ -88,11 +91,11 @@ class res_partner(osv.osv): 'partner_latitude': fields.float('Geo Latitude'), 'partner_longitude': fields.float('Geo Longitude'), 'date_localization': fields.date('Geo Localization Date'), - 'partner_weight': fields.integer('Weight', + 'partner_weight': fields.integer('Grade Weight', help="Gives the probability to assign a lead to this partner. (0 means no assignation.)"), 'opportunity_assigned_ids': fields.one2many('crm.lead', 'partner_assigned_id',\ 'Assigned Opportunities'), - 'grade_id': fields.many2one('res.partner.grade', 'Partner Level'), + 'grade_id': fields.many2one('res.partner.grade', 'Grade'), 'activation' : fields.many2one('res.partner.activation', 'Activation', select=1), 'date_partnership' : fields.date('Partnership Date'), 'date_review' : fields.date('Latest Partner Review'), @@ -101,6 +104,13 @@ class res_partner(osv.osv): _defaults = { 'partner_weight': lambda *args: 0 } + + def onchange_grade_id(self, cr, uid, ids, grade_id, context=None): + res = {'value' :{'partner_weight':0}} + if grade_id: + partner_grade = self.pool.get('res.partner.grade').browse(cr, uid, grade_id) + res['value']['partner_weight'] = partner_grade.partner_weight + return res def geo_localize(self, cr, uid, ids, context=None): # Don't pass context to browse()! We need country names in english below for partner in self.browse(cr, uid, ids): @@ -124,7 +134,7 @@ class crm_lead(osv.osv): _columns = { 'partner_latitude': fields.float('Geo Latitude'), 'partner_longitude': fields.float('Geo Longitude'), - 'partner_assigned_id': fields.many2one('res.partner', 'Assigned Partner', help="Partner this case has been forwarded/assigned to.", select=True), + 'partner_assigned_id': fields.many2one('res.partner', 'Assigned Partner',track_visibility='onchange' , help="Partner this case has been forwarded/assigned to.", select=True), 'date_assign': fields.date('Assignation Date', help="Last date this case was forwarded/assigned to a partner"), } def _merge_data(self, cr, uid, ids, oldest, fields, context=None): @@ -134,6 +144,7 @@ class crm_lead(osv.osv): def onchange_assign_id(self, cr, uid, ids, partner_assigned_id, context=None): """This function updates the "assignation date" automatically, when manually assign a partner in the geo assign tab """ + if not partner_assigned_id: return {'value':{'date_assign': False}} else: @@ -261,4 +272,3 @@ class crm_lead(osv.osv): # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/crm_partner_assign/crm_partner_assign_data.xml b/addons/crm_partner_assign/crm_partner_assign_data.xml index dab50192641..b4347b1621b 100644 --- a/addons/crm_partner_assign/crm_partner_assign_data.xml +++ b/addons/crm_partner_assign/crm_partner_assign_data.xml @@ -1,44 +1,59 @@ -<?xml version="1.0" encoding='UTF-8'?> +<?xml version="1.0" ?> <openerp> <data> - <record id="crm_partner_assign_email_template" model="email.template"> - <field name="name">Lead forward</field> - <field name="email_from"></field> - <field name="subject">Fwd: Lead: ${object.name}</field> - <field name="email_to"></field> - <field name="lang"></field> - <field name="model_id" ref="crm.model_crm_lead"/> + <record model="crm.case.stage" id="stage_portal_lead_assigned"> + <field name="name">Assigned</field> + <field eval="1" name="case_default"/> + <field eval="0" name="probability"/> + <field eval="12" name="sequence"/> + <field name="type">lead</field> + </record> + <record model="crm.case.stage" id="stage_portal_lead_recycle"> + <field name="name">To Recycle</field> + <field eval="1" name="case_default"/> + <field eval="0" name="probability"/> + <field eval="11" name="sequence"/> + <field name="type">lead</field> + </record> + <record id="email_template_lead_forward_mail" model="email.template"> + <field name="name">Lead Mass Mail</field> + <field name="model_id" model="ir.model" search="[('name', '=', 'crm.lead.forward.to.partner')]"></field> <field name="auto_delete" eval="True"/> + <field name="email_to">${ctx['partner_id'].email}</field> + <field name="email_from">${user.email or ''}</field> + <field name="subject">Fwd: Lead: ${ctx['partner_id'].name}</field> <field name="body_html"><![CDATA[ -Hello ${object.partner_assigned_id.name}, -<p> -Here is a lead that might interest you. -</p> -<p> -Please keep me informed about your actions about it so that I can keep an -accurate follow-up of it and help you in the sale cycle. -</p> -<p> -Your account manager,<br/> -${object.user_id.name},<br/> -${object.user_id.email} -</p> + +<p>Hello,</p> + + +<p>We have been contacted by those prospects that are in your region. Thus, the following leads have been assigned to ${ctx['partner_id'].name}:</p> + +<ol> +% for lead in ctx['partner_leads']: + <li><a href="${lead.lead_link}">${lead.lead_id.name or 'Subject Undefined'}</a>, ${lead.lead_id.contact_name or 'Contact Name Undefined'}, ${lead.lead_id.country_id and lead.lead_id.country_id.name or 'Country Undefined' }, ${lead.lead_id.email_from or 'Email Undefined'}, ${lead.lead_id.phone or ''} </li></br> +% endfor +</ol> +% if ctx.get('partner_in_portal'): +<p>Please connect to your <a href="${object.get_portal_url()}">Partner Portal</a> to get details. On each lead are two buttons on the top left corner that you should press after having contacted the lead: "I'm interested" & "I'm not interested".</p> +% else: <p> -${ctx["mail_body"].replace('\n','<br>') | safe} + You do not have yet a portal access to our database. Please contact + ${ctx['partner_id'].user_id and ctx['partner_id'].user_id.email and 'your account manager %s (%s)' % (ctx['partner_id'].user_id.name,ctx['partner_id'].user_id.email) or 'us'}. </p> - -% if ctx["history_mode"] in ('whole'): - % for message in object.message_ids: - ---- Original Message (${message.date or ''}) ----<br/> - ${message.body | safe} - % endfor % endif -% if ctx['history_mode'] == 'latest': - ---- Original Message (${object.message_ids[0].date or ''}) ----<br/> - ${object.message_ids[0].body | safe} +<p>The lead will be sent to another partner if you do not contact the lead before 20 days.</p> + +<p>Thanks,</p> + +<pre> +${ctx['partner_id'].user_id and ctx['partner_id'].user_id.signature or ''} +</pre> +% if not ctx['partner_id'].user_id: +PS: It looks like you do not have an account manager assigned to you, please contact us. % endif ]]></field> </record> </data> -</openerp> +</openerp>
\ No newline at end of file diff --git a/addons/crm_partner_assign/crm_portal_view.xml b/addons/crm_partner_assign/crm_portal_view.xml new file mode 100644 index 00000000000..a8d342ebb94 --- /dev/null +++ b/addons/crm_partner_assign/crm_portal_view.xml @@ -0,0 +1,209 @@ +<openerp> + <data> + <!-- lead views--> + <record model="ir.ui.view" id="crm_lead_portal_tree"> + <field name="name">partner lead</field> + <field name="model">crm.lead</field> + <field name="priority" eval="32"/> + <field name="arch" type="xml"> + <tree string="Leads" colors="blue:state=='pending';grey:state in ('cancel', 'done');red:stage_id[1]=='Disinterested';black:stage_id[1]=='Interested'"> + <field name="date_deadline" invisible="1"/> + <field name="create_date"/> + <field name="name" string="Subject"/> + <field name="contact_name"/> + <field name="country_id" invisible="context.get('invisible_country', True)" /> + <field name="email_from"/> + <field name="phone"/> + <field name="stage_id" invisible="1"/> + <field name="type_id" invisible="1"/> + <field name="referred" invisible="1"/> + <field name="channel_id" invisible="1"/> + <field name="state" invisible="1"/> + <field name="section_id" invisible="context.get('invisible_section', True)" /> + + <button string="I'm interested" name="case_interested" icon="gtk-index" type="object"/> + <button string="I'm not interested" name="case_disinterested" icon="gtk-close" type="object"/> + </tree> + </field> + </record> + <record model= "ir.ui.view" id="crm_lead_portal_form"> + <field name="name">crm_portal_form</field> + <field name="model">crm.lead</field> + <field name="priority" eval="32"/> + <field name="arch" type="xml"> + <form string="Leads" version="7.0"> + <header> + <button string="I'm interested" name="case_interested" icon="gtk-index" type="object"/> + <button string="I'm not interested" name="case_disinterested" icon="gtk-close" type="object"/> + </header> + <sheet> + <group> + <group> + <field name="partner_name" string="Partner Name" readonly="1"/> + <field name="title" widget="selection" readonly="1"/> + <field name="contact_name" readonly="1"/> + <field name="function" readonly="1"/> + <field name="email_from" readonly="1"/> + <field name="phone" readonly="1"/> + <field name="fax" readonly="1"/> + <field name="mobile" readonly="1"/> + </group> + <group> + <field name="street" readonly="1"/> + <field name="street2" readonly="1"/> + <field name="zip" readonly="1"/> + <field name="city" readonly="1"/> + <field name="country_id" readonly="1"/> + <field name="state_id" readonly="1"/> + </group> + <label for="description" colspan="2"/> + <field name="description" nolabel="1" colspan="2"/> + </group> + </sheet> + </form> + </field> + </record> + <!-- opportunity views--> + <record model="ir.ui.view" id="crm_opportunity_portal_tree"> + <field name="name">partner lead</field> + <field name="model">crm.lead</field> + <field name="priority" eval="32"/> + <field name="arch" type="xml"> + <tree string="Leads" colors="blue:state=='pending';grey:state in ('cancel', 'done')"> + <field name="date_deadline" invisible="1"/> + <field name="create_date" groups="base.group_no_one"/> + <field name="name" string="Opportunity"/> + <field name="partner_id" string="Customer"/> + <field name="country_id" invisible="context.get('invisible_country', True)" /> + <field name="date_action"/> + <field name="title_action" /> + <field name="channel_id" invisible="1"/> + <field name="type_id" invisible="1"/> + <field name="planned_revenue" sum="Expected Revenues"/> + <field name="probability" widget="progressbar" avg="Avg. of Probability"/> + <field name="section_id" invisible="context.get('invisible_section', True)" /> + <field name="priority" invisible="1"/> + <field name="state" invisible="1"/> + </tree> + </field> + </record> + <record model= "ir.ui.view" id="crm_opportunity_portal_form"> + <field name="name">crm_portal_form</field> + <field name="model">crm.lead</field> + <field name="priority" eval="32"/> + <field name="arch" type="xml"> + <form string="Leads" version="7.0"> + <sheet> + <group> + <field name="name" required="1" string="Opportunity"/> + <field name="planned_revenue" readonly="1"/> + <field name="probability" readonly="1"/> + <field name="date_deadline"/> + <newline/> + <field name="date_action" readonly="1"/> + <field name="title_action" readonly="1"/> + <field name="priority" string="Priority" readonly="1"/> + <newline/> + <field name="type" invisible="1" readonly="1"/> + </group> + <notebook colspan="4"> + <page string="Opportunity"> + <group col="2"> + <separator string="Contact" colspan="2"/> + <group col="2"> + <field name="partner_id" select="1" + on_change="onchange_partner_id(partner_id, email_from)" string="Customer" + colspan="2" readonly="1"/> + <field name="partner_name" string="Customer Name" readonly="1"/> + <field domain="[('domain', '=', 'contact')]" name="title" widget="selection" readonly="1"/> + <field name="function" readonly="1"/> + <field name="street" readonly="1"/> + <field name="street2" readonly="1"/> + </group> + <group col="2"> + <field name="zip" readonly="1"/> + <field name="city" readonly="1"/> + <field name="country_id" readonly="1"/> + <field name="state_id" readonly="1"/> + <field name="phone" readonly="1"/> + </group> + </group> + <group col="2"> + <group col="2"> + <separator string="Communication" colspan="2"/> + <field name="email_from" readonly="1"/> + <field name="phone" readonly="1"/> + <field name="fax" readonly="1"/> + <field name="mobile" readonly="1"/> + </group> + <group col="2"> + <separator string="Categorization" colspan="2"/> + <field name="type_id" widget="selection" readonly="1"/> + <field name="channel_id" widget="selection" readonly="1"/> + </group> + </group> + <separator string="Details" /> + <field name="description" nolabel="1" colspan="4"/> + </page> + </notebook> + </sheet> + </form> + </field> + </record> + + + <!-- leads --> + + <record id="action_portal_leads" model="ir.actions.act_window"> + <field name="name">Leads</field> + <field name="res_model">crm.lead</field> + <field name="view_mode">tree,form</field> + <field name="view_id" ref="crm_lead_portal_tree"/> + <field name="domain">[('type','like','lead')]</field> + </record> + + <record id="action_portal_lead_tree" model="ir.actions.act_window.view"> + <field name="sequence" eval="0"/> + <field name="view_mode">tree</field> + <field name="view_id" ref="crm_lead_portal_tree"/> + <field name="act_window_id" ref="action_portal_leads"/> + </record> + + <record id="action_portal_lead_form" model="ir.actions.act_window.view"> + <field name="sequence" eval="1"/> + <field name="view_mode">form</field> + <field name="view_id" ref="crm_lead_portal_form"/> + <field name="act_window_id" ref="action_portal_leads"/> + </record> + + <!-- opportunities --> + + <record id="action_portal_opportunities" model="ir.actions.act_window"> + <field name="name">Opportunities</field> + <field name="res_model">crm.lead</field> + <field name="view_mode">tree,form</field> + <field name="view_id" ref="crm_opportunity_portal_tree"/> + <field name="domain">[('type','like','opportunity')]</field> + </record> + + <record id="action_portal_opportunities_tree" model="ir.actions.act_window.view"> + <field name="sequence" eval="0"/> + <field name="view_mode">tree</field> + <field name="view_id" ref="crm_opportunity_portal_tree"/> + <field name="act_window_id" ref="action_portal_opportunities"/> + </record> + + <record id="action_portal_opportunities_form" model="ir.actions.act_window.view"> + <field name="sequence" eval="1"/> + <field name="view_mode">form</field> + <field name="view_id" ref="crm_opportunity_portal_form"/> + <field name="act_window_id" ref="action_portal_opportunities"/> + </record> + + <!--menus--> + <menuitem name="Leads & Opportunities" id="portal_leads" parent="portal.portal_menu" sequence="25"/> + <menuitem action="action_portal_leads" sequence="0" id="openerp_portal_menu_sales_leads_current" parent="portal_leads"/> + <menuitem action="action_portal_opportunities" sequence="1" id="openerp_portal_menu_sales_leads_current1" parent="portal_leads"/> + + </data> +</openerp> diff --git a/addons/crm_partner_assign/portal_data.xml b/addons/crm_partner_assign/portal_data.xml new file mode 100644 index 00000000000..0d4a5b30abd --- /dev/null +++ b/addons/crm_partner_assign/portal_data.xml @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + + <!-- Partner and address --> + <record id="res_partner_access" model="ir.model.access"> + <field name="name">openerp.portal.res.partner</field> + <field name="model_id" ref="base.model_res_partner"/> + <field name="group_id" ref="portal.group_portal"/> + <field name="perm_read" eval="1"/> + <field name="perm_create" eval="0"/> + <field name="perm_write" eval="0"/> + <field name="perm_unlink" eval="0"/> + </record> + <record id="res_partner_rule" model="ir.rule"> + <field name="name">openerp.portal.res.partner</field> + <field name="model_id" ref="base.model_res_partner"/> + <field name="groups" eval="[(6,0,[ref('portal.group_portal')])]"/> + <field name="domain_force">[('id','child_of',user.commercial_partner_id.id)]</field> + </record> + <record id="res_partner_grade_access" model="ir.model.access"> + <field name="name">openerp.portal.res.partner.grade</field> + <field name="model_id" ref="crm_partner_assign.model_res_partner_grade"/> + <field name="group_id" ref="portal.group_portal"/> + <field name="perm_read" eval="1"/> + <field name="perm_create" eval="0"/> + <field name="perm_write" eval="0"/> + <field name="perm_unlink" eval="0"/> + </record> + + <!-- CRM Lead portal --> + <record id="assigned_lead_portal_rule_1" model="ir.rule"> + <field name="name">openerp.portal.crm.lead</field> + <field name="model_id" ref="crm.model_crm_lead"/> + <field name="groups" eval="[(6,0,[ref('portal.group_portal')])]"/> + <field name="domain_force">[('partner_assigned_id','child_of',user.commercial_partner_id.id)]</field> + </record> + <record id="lead_portal_access" model="ir.model.access"> + <field name="name">openerp.portal.crm.lead</field> + <field name="model_id" ref="crm.model_crm_lead"/> + <field name="group_id" ref="portal.group_portal"/> + <field name="perm_read" eval="1"/> + <field name="perm_create" eval="0"/> + <field name="perm_write" eval="1"/> + <field name="perm_unlink" eval="0"/> + </record> + + </data> +</openerp> diff --git a/addons/crm_partner_assign/res_partner_view.xml b/addons/crm_partner_assign/res_partner_view.xml index 9e70835a3f1..874d2a9f053 100644 --- a/addons/crm_partner_assign/res_partner_view.xml +++ b/addons/crm_partner_assign/res_partner_view.xml @@ -2,7 +2,7 @@ <openerp> <data> - <!--Partner Activation --> + <!--Partner Activation --> <record model="ir.ui.view" id="res_partner_activation_form"> <field name="name">openerp_custom.res.partner.activation.form</field> @@ -33,145 +33,134 @@ <field name="view_mode">tree,form</field> </record> - <menuitem id="res_partner_activation_config_mi" parent="base.menu_config_address_book" action="res_partner_activation_act" groups="base.group_no_one"/> + <menuitem id="res_partner_activation_config_mi" parent="base.menu_config_address_book" action="res_partner_activation_act" groups="base.group_no_one" /> - <!--Partner Grade --> + <!--Partner Grade --> - - <record id="view_partner_grade_tree" model="ir.ui.view"> - <field name="name">res.partner.grade.tree</field> - <field name="model">res.partner.grade</field> - <field name="arch" type="xml"> - <tree string="Partner Grade"> - <field name="sequence" invisible="1"/> - <field name="name"/> - </tree> - </field> - </record> - <record id="view_partner_grade_form" model="ir.ui.view"> - <field name="name">res.partner.grade.form</field> - <field name="model">res.partner.grade</field> - <field name="arch" type="xml"> - <form string="Partner Grade" version="7.0"> - <group col="4"> - <field name="name"/> - <field name="sequence"/> - <field name="active"/> - </group> - </form> - </field> - </record> - <record id="res_partner_grade_action" model="ir.actions.act_window"> - <field name="name">Partner Grade</field> - <field name="res_model">res.partner.grade</field> - <field name="view_type">form</field> - </record> - <menuitem action="res_partner_grade_action" id="menu_res_partner_grade_action" - groups="base.group_no_one" - parent="base.menu_crm_config_lead" /> - - <!-- Partner form --> - <record id="view_res_partner_filter_assign_tree" model="ir.ui.view"> - <field name="name">res.partner.geo.inherit.tree</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_tree"/> - <field name="arch" type="xml"> - <field name="user_id" position="after"> - <field name="date_review_next"/> - <field name="grade_id"/> - <field name="activation"/> - </field> - </field> - </record> - - <record id="view_res_partner_filter_assign" model="ir.ui.view"> - <field name="name">res.partner.geo.inherit.search</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_res_partner_filter"/> - <field name="arch" type="xml"> - <filter string="Salesperson" position="after"> - <filter string="Activation" context="{'group_by' : 'activation'}" domain="[]" icon="terp-personal" /> - </filter> - <field name="category_id" position="after"> - <field name="grade_id"/> + <record id="view_partner_grade_tree" model="ir.ui.view"> + <field name="name">res.partner.grade.tree</field> + <field name="model">res.partner.grade</field> + <field name="arch" type="xml"> + <tree string="Partner Grade"> + <field name="sequence" invisible="1" /> + <field name="name" /> + </tree> </field> - </field> - </record> - - <record id="view_crm_partner_geo_form" model="ir.ui.view"> - <field name="name">res.partner.geo.inherit</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_form"/> - <field name="arch" type="xml"> - <xpath expr="//notebook[last()]" position="inside"> - <page string="Geo Localization"> - <group> + </record> + <record id="view_partner_grade_form" model="ir.ui.view"> + <field name="name">res.partner.grade.form</field> + <field name="model">res.partner.grade</field> + <field name="arch" type="xml"> + <form string="Partner Grade" version="7.0"> + <group col="4"> <group> - <separator string="Partner Activation" colspan="2"/> - <field name="grade_id" widget="selection"/> - <field name="activation" widget="selection"/> - <field name="partner_weight"/> + <field name="name" /> + <field name="partner_weight" /> + <div> + <p class="oe_grey"> + Define a weight to this grade. The weight will be used as default in the partner form to compute the chance for this partner to get leads. For instance, for business purpose, you can define a target revenue for each grade. To give the same chance to each partner to get leads, keep 1 in this field. + </p> + </div> </group> <group> - <separator string="Partner Review" colspan="2"/> - <field name="date_review"/> - <field name="date_review_next"/> - <field name="date_partnership"/> + <field name="sequence" /> + <field name="active" /> </group> </group> - <group colspan="2" col="2"> - <separator string="Geo Localization" colspan="2"/> - <button - string="Geo Localize" - name="geo_localize" - colspan="2" - icon="gtk-apply" - type="object"/> - <field name="partner_latitude"/> - <field name="partner_longitude"/> - <field name="date_localization"/> - </group> - <newline/> + </form> + </field> + </record> + <record id="res_partner_grade_action" model="ir.actions.act_window"> + <field name="name">Partner Grade</field> + <field name="res_model">res.partner.grade</field> + <field name="view_type">form</field> + </record> + <menuitem action="res_partner_grade_action" id="menu_res_partner_grade_action" groups="base.group_no_one" parent="base.menu_crm_config_lead" /> - <field name="opportunity_assigned_ids" colspan="4" nolabel="1"> - <tree string="Assigned Opportunities" colors="blue:state=='pending';gray:state=='cancel'"> - <field name="create_date"/> - <field name="name"/> - <field name="type"/> - <field name="stage_id"/> - <button name="stage_previous" string="Previous" - states="open,pending" type="object" icon="gtk-go-back" /> - <button name="stage_next" string="Next" - states="open,pending" type="object" - icon="gtk-go-forward" /> - <field name="section_id" - invisible="context.get('invisible_section', True)" - groups="base.group_multi_salesteams"/> - <field name="user_id" /> - <field name="state" /> - <button name="case_cancel" string="Cancel" - states="draft,open,pending" type="object" - icon="gtk-cancel" /> - <button name="case_open" string="Open" - states="draft,pending" type="object" - icon="gtk-go-forward" /> - <button name="case_close" string="Close" - states="open,draft,pending" type="object" - icon="gtk-close" /> - <button string="Convert to Opportunity" - name="convert_opportunity" - states="draft,open,pending" icon="gtk-index" - type="object" attrs="{'invisible':[('type','=','opportunity')]}" /> - <button name="case_escalate" string="Escalate" - states="open,draft,pending" type="object" - icon="gtk-go-up" /> - </tree> - </field> - </page> - </xpath> - </field> - </record> + <!-- Partner form --> + <record id="view_res_partner_filter_assign_tree" model="ir.ui.view"> + <field name="name">res.partner.geo.inherit.tree</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_tree" /> + <field name="arch" type="xml"> + <field name="user_id" position="after"> + <field name="date_review_next" /> + <field name="grade_id" /> + <field name="activation" /> + </field> + </field> + </record> + + <record id="view_res_partner_filter_assign" model="ir.ui.view"> + <field name="name">res.partner.geo.inherit.search</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_res_partner_filter" /> + <field name="arch" type="xml"> + <filter string="Salesperson" position="after"> + <filter string="Activation" context="{'group_by' : 'activation'}" domain="[]" icon="terp-personal" /> + </filter> + <field name="category_id" position="after"> + <field name="grade_id" /> + </field> + </field> + </record> + <record id="view_crm_partner_geo_form" model="ir.ui.view"> + <field name="name">res.partner.geo.inherit</field> + <field name="model">res.partner</field> + <field name="inherit_id" ref="base.view_partner_form" /> + <field name="arch" type="xml"> + <xpath expr="//notebook[last()]" position="inside"> + <page string="Forwarded Leads"> + <group> + <group string="Partner Activation"> + <label for="partner_latitude" string="Geolocalisation" /> + <div class="oe_title oe_inline"> + <h3 class="oe_inline"> + <span class="oe_grey">( </span> + <field name="partner_latitude" nolabel="1" readonly="1" class="oe_inline" /> + <span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','<=',0)]}">N </span> + <span class="oe_grey oe_inline" attrs="{'invisible':[('partner_latitude','>=',0)]}">S </span> + <field name="partner_longitude" class="oe_inline" readonly="1" nolabel="1" /> + <span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','<=',0)]}">E </span> + <span class="oe_grey oe_inline" attrs="{'invisible':[('partner_longitude','>=',0)]}">W </span> + <span class="oe_grey">) </span> + </h3> + <button string="Geolocalize" name="geo_localize" class="oe_inline" type="object" /> + </div> + <field name="grade_id" widget="selection" on_change="onchange_grade_id(grade_id)" /> + <field name="partner_weight" class="oe_inline" /> + <div colspan="2"> + <p class="oe_grey"> + Higher is the value, higher is the probability for this partner to get more leads. + </p> + </div> + </group> + <group> + <separator string="Partner Review" colspan="2" /> + <field name="date_review" /> + <field name="date_review_next" /> + <field name="date_partnership" /> + </group> + <group> + </group> + </group> + <newline /> + <separator string="Forwarded Leads" colspan="2" /> + <field name="opportunity_assigned_ids" colspan="4" nolabel="1"> + <tree string="Assigned Opportunities" colors="blue:state=='pending';gray:state=='cancel'"> + <field name="name" /> + <field name="contact_name" /> + <field name="email_from" /> + <field name="phone" /> + <field name="stage_id" /> + <field name="state" invisible="1" /> + </tree> + </field> + </page> + </xpath> + </field> + </record> </data> </openerp> diff --git a/addons/crm_partner_assign/security/ir.model.access.csv b/addons/crm_partner_assign/security/ir.model.access.csv index 69b74ef6b3d..81d74bf43e3 100644 --- a/addons/crm_partner_assign/security/ir.model.access.csv +++ b/addons/crm_partner_assign/security/ir.model.access.csv @@ -5,3 +5,4 @@ access_crm_partner_report,crm.partner.report.assign.all,model_crm_partner_report access_res_partner_grade,res.partner.grade,model_res_partner_grade,base.group_sale_salesman,1,1,1,0
access_res_partner_grade_manager,res.partner.grade.manager,model_res_partner_grade,base.group_sale_manager,1,1,1,1
"access_partner_activation_manager","res.partner.activation.manager","model_res_partner_activation","base.group_partner_manager",1,1,1,1
+partner_access_crm_lead,crm.lead,model_crm_lead,portal.group_portal,1,1,0,0
\ No newline at end of file diff --git a/addons/crm_partner_assign/static/src/js/next.js b/addons/crm_partner_assign/static/src/js/next.js new file mode 100644 index 00000000000..c40f104d6c6 --- /dev/null +++ b/addons/crm_partner_assign/static/src/js/next.js @@ -0,0 +1,13 @@ +openerp.crm_partner_assign = function (instance) { + instance.crm_partner_assign = instance.crm_partner_assign || {}; + instance.crm_partner_assign.next_or_list = function(parent) { + var form = parent.inner_widget.views.form.controller; + form.dataset.remove_ids([form.dataset.ids[form.dataset.index]]); + form.reload(); + if (!form.dataset.ids.length){ + parent.inner_widget.switch_mode('list'); + } + parent.do_action({ type: 'ir.actions.act_window_close' }); + }; + instance.web.client_actions.add("next_or_list", "instance.crm_partner_assign.next_or_list"); +}
\ No newline at end of file diff --git a/addons/crm_partner_assign/wizard/__init__.py b/addons/crm_partner_assign/wizard/__init__.py index 9224173145b..ab6c7b7f06a 100644 --- a/addons/crm_partner_assign/wizard/__init__.py +++ b/addons/crm_partner_assign/wizard/__init__.py @@ -20,3 +20,4 @@ ############################################################################## import crm_forward_to_partner +import crm_channel_interested
\ No newline at end of file diff --git a/addons/crm_partner_assign/wizard/crm_channel_interested.py b/addons/crm_partner_assign/wizard/crm_channel_interested.py new file mode 100644 index 00000000000..57db36cb51f --- /dev/null +++ b/addons/crm_partner_assign/wizard/crm_channel_interested.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). All Rights Reserved +# $Id$ +# +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## + +from openerp.osv import fields, osv +from openerp.tools.translate import _ +from openerp import SUPERUSER_ID + + +class crm_lead_forward_to_partner(osv.TransientModel): + """ Forward info history to partners. """ + _name = 'crm.lead.channel.interested' + _columns = { + 'interested': fields.boolean('Interested by this lead'), + 'contacted': fields.boolean('Did you contact the lead?', help="The lead has been contacted"), + 'comment': fields.text('Comment', help="What are the elements that have led to this decision?", required=True), + } + _defaults = { + 'interested': lambda self, cr, uid, c: c.get('interested', True), + 'contacted': False, + } + + def action_confirm(self, cr, uid, ids, context=None): + wizard = self.browse(cr, uid, ids[0], context=context) + if wizard.interested and not wizard.contacted: + raise osv.except_osv(_('Error!'), _("You must contact the lead before saying that you are interested")) + lead_obj = self.pool.get('crm.lead') + lead_obj.check_access_rights(cr, uid, 'write') + if wizard.interested: + message = _('<p>I am interested by this lead.</p>') + values = {} + else: + stage = 'stage_portal_lead_recycle' + message = _('<p>I am not interested by this lead. I %scontacted the lead.</p>') % (not wizard.contacted and 'have not ' or '') + values = {'partner_assigned_id': False} + user = self.pool.get('res.users').browse(cr, uid, uid, context=context) + partner_ids = self.pool.get('res.partner').search(cr, SUPERUSER_ID, [('id', 'child_of', user.partner_id.commercial_partner_id.id)], context=context) + lead_obj.message_unsubscribe(cr, SUPERUSER_ID, context.get('active_ids'), partner_ids, context=None) + try: + stage_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', stage)[1] + except ValueError: + stage_id = False + if stage_id: + values.update({'stage_id': stage_id}) + if wizard.comment: + message += '<p>%s</p>' % wizard.comment + lead_obj.message_post(cr, uid, context.get('active_ids'), body=message, context=context) + if values: + lead_obj.write(cr, SUPERUSER_ID, context.get('active_ids'), values) + if wizard.interested: + for lead in lead_obj.browse(cr, uid, context.get('active_ids'), context=context): + lead_obj.convert_opportunity(cr, SUPERUSER_ID, [lead.id], lead.partner_id and lead.partner_id.id or None, context=None) + return { + 'type': 'ir.actions.client', + 'tag': 'next_or_list', + 'params': { + }, + } diff --git a/addons/crm_partner_assign/wizard/crm_channel_interested_view.xml b/addons/crm_partner_assign/wizard/crm_channel_interested_view.xml new file mode 100644 index 00000000000..400e02cd48a --- /dev/null +++ b/addons/crm_partner_assign/wizard/crm_channel_interested_view.xml @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<openerp> + <data> + <record model="ir.ui.view" id="crm_lead_channel_interested_form"> + <field name="name">crm_lead_channel_interested</field> + <field name="model">crm.lead.channel.interested</field> + <field name="arch" type="xml"> + <form string="Send Mail" version="7.0"> + <group col="1"> + <field name="interested" nolabel="1" invisible="1"/> + <div> + <div invisible="context.get('interested', True)"> + <label for="comment" string="Why aren't you interested by this lead?" /> + </div> + <div invisible="not context.get('interested', True)"> + <label for="comment" string="What is the next action? When? What is the expected revenue?" /> + </div> + </div> + <field name="comment" nolabel="1"/> + <div class="oe_inline"> + <field name="contacted" nolabel="1" string="Do you have contacted the customer?"/> + <label for="contacted" /> + </div> + <p class="oe_grey" invisible="not context.get('interested', True)"> + Once the lead is processed, it will be in your "Opportunities" menu. + </p> + </group> + <footer> + <button name="action_confirm" string="Confirm" type="object" class="oe_highlight"/> + or + <button string="Cancel" special="cancel" class="oe_link"/> + </footer> + </form> + </field> + </record> + <record model="ir.actions.act_window" id="crm_lead_channel_interested_act"> + <field name="name">Lead Feedback</field> + <field name="res_model">crm.lead.channel.interested</field> + <field name="view_type">form</field> + <field name="view_mode">form</field> + <field name="view_id" ref="crm_lead_channel_interested_form"/> + <field name="target">new</field> + </record> + </data> +</openerp>
\ No newline at end of file diff --git a/addons/crm_partner_assign/wizard/crm_forward_to_partner.py b/addons/crm_partner_assign/wizard/crm_forward_to_partner.py index 724102a84b1..80fa2f28b04 100644 --- a/addons/crm_partner_assign/wizard/crm_forward_to_partner.py +++ b/addons/crm_partner_assign/wizard/crm_forward_to_partner.py @@ -27,107 +27,182 @@ from openerp.tools.translate import _ class crm_lead_forward_to_partner(osv.TransientModel): """ Forward info history to partners. """ _name = 'crm.lead.forward.to.partner' - _inherit = "mail.compose.message" - def _get_composition_mode_selection(self, cr, uid, context=None): - composition_mode = super(crm_lead_forward_to_partner, self)._get_composition_mode_selection(cr, uid, context=context) - composition_mode.append(('forward', 'Forward')) - return composition_mode + def _convert_to_assignation_line(self, cr, uid, lead, partner, context=None): + lead_location = [] + partner_location = [] + if lead.country_id: + lead_location.append(lead.country_id.name) + if lead.city: + lead_location.append(lead.city) + if partner: + if partner.country_id: + partner_location.append(partner.country_id.name) + if partner.city: + partner_location.append(partner.city) + return {'lead_id': lead.id, + 'lead_location': ", ".join(lead_location), + 'partner_assigned_id': partner and partner.id or False, + 'partner_location': ", ".join(partner_location), + 'lead_link': self.get_lead_portal_url(cr, uid, lead.id, lead.type, context=context), + } + + def default_get(self, cr, uid, fields, context=None): + if context is None: + context = {} + lead_obj = self.pool.get('crm.lead') + email_template_obj = self.pool.get('email.template') + try: + template_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', 'email_template_lead_forward_mail')[1] + except ValueError: + template_id = False + res = super(crm_lead_forward_to_partner, self).default_get(cr, uid, fields, context=context) + active_ids = context.get('active_ids') + default_composition_mode = context.get('default_composition_mode') + res['assignation_lines'] = [] + if template_id: + res['body'] = email_template_obj.get_email_template(cr, uid, template_id).body_html + if active_ids: + lead_ids = lead_obj.browse(cr, uid, active_ids, context=context) + if default_composition_mode == 'mass_mail': + partner_assigned_ids = lead_obj.search_geo_partner(cr, uid, active_ids, context=context) + else: + partner_assigned_ids = dict((lead.id, lead.partner_assigned_id and lead.partner_assigned_id.id or False) for lead in lead_ids) + res['partner_id'] = lead_ids[0].partner_assigned_id.id + for lead in lead_ids: + partner_id = partner_assigned_ids.get(lead.id) or False + partner = False + if partner_id: + partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context) + res['assignation_lines'].append(self._convert_to_assignation_line(cr, uid, lead, partner)) + return res + + def action_forward(self, cr, uid, ids, context=None): + lead_obj = self.pool.get('crm.lead') + record = self.browse(cr, uid, ids[0], context=context) + email_template_obj = self.pool.get('email.template') + try: + template_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', 'email_template_lead_forward_mail')[1] + except ValueError: + raise osv.except_osv(_('Email Template Error'), + _('The Forward Email Template is not in the database')) + try: + portal_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'portal', 'group_portal')[1] + except ValueError: + raise osv.except_osv(_('Portal Group Error'), + _('The Portal group cannot be found')) + + local_context = context.copy() + if not (record.forward_type == 'single'): + no_email = set() + for lead in record.assignation_lines: + if lead.partner_assigned_id and not lead.partner_assigned_id.email: + no_email.add(lead.partner_assigned_id.name) + if no_email: + raise osv.except_osv(_('Email Error'), + ('Set an email address for the partner(s): %s' % ", ".join(no_email))) + if record.forward_type == 'single' and not record.partner_id.email: + raise osv.except_osv(_('Email Error'), + ('Set an email address for the partner %s' % record.partner_id.name)) + + partners_leads = {} + for lead in record.assignation_lines: + partner = record.forward_type == 'single' and record.partner_id or lead.partner_assigned_id + lead_details = { + 'lead_link': lead.lead_link, + 'lead_id': lead.lead_id, + } + if partner: + partner_leads = partners_leads.get(partner.id) + if partner_leads: + partner_leads['leads'].append(lead_details) + else: + partners_leads[partner.id] = {'partner': partner, 'leads': [lead_details]} + stage_id = False + if record.assignation_lines and record.assignation_lines[0].lead_id.type == 'lead': + try: + stage_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', 'stage_portal_lead_assigned')[1] + except ValueError: + pass + + for partner_id, partner_leads in partners_leads.items(): + in_portal = False + for contact in (partner.child_ids or [partner]): + if contact.user_ids: + in_portal = portal_id in [g.id for g in contact.user_ids[0].groups_id] + + local_context['partner_id'] = partner_leads['partner'] + local_context['partner_leads'] = partner_leads['leads'] + local_context['partner_in_portal'] = in_portal + email_template_obj.send_mail(cr, uid, template_id, ids[0], context=local_context) + lead_ids = [lead['lead_id'].id for lead in partner_leads['leads']] + values = {'partner_assigned_id': partner_id, 'user_id': partner_leads['partner'].user_id.id} + if stage_id: + values['stage_id'] = stage_id + lead_obj.write(cr, uid, lead_ids, values) + self.pool.get('crm.lead').message_subscribe(cr, uid, lead_ids, [partner_id], context=context) + return True + + def get_lead_portal_url(self, cr, uid, lead_id, type, context=None): + action = type == 'opportunity' and 'action_portal_opportunities' or 'action_portal_leads' + try: + action_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', action)[1] + except ValueError: + action_id = False + portal_link = "%s/?db=%s#id=%s&action=%s&view_type=form" % (self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url'), cr.dbname, lead_id, action_id) + return portal_link + + def get_portal_url(self, cr, uid, ids, context=None): + portal_link = "%s/?db=%s" % (self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url'), cr.dbname) + return portal_link _columns = { - 'partner_ids': fields.many2many('res.partner', - 'lead_forward_to_partner_res_partner_rel', - 'wizard_id', 'partner_id', 'Additional contacts'), - 'attachment_ids': fields.many2many('ir.attachment', - 'lead_forward_to_partner_attachment_rel', - 'wizard_id', 'attachment_id', 'Attachments'), - 'history_mode': fields.selection([('info', 'Internal notes'), - ('latest', 'Latest email'), ('whole', 'Whole Story')], - 'Send history', required=True), + 'forward_type': fields.selection([('single', 'a single partner: manual selection of partner'), ('assigned', "several partners: automatic assignation, using GPS coordinates and partner's grades"), ], 'Forward selected leads to'), + 'partner_id': fields.many2one('res.partner', 'Forward Leads To'), + 'assignation_lines': fields.one2many('crm.lead.assignation', 'forward_id', 'Partner Assignation'), + 'body': fields.html('Contents', help='Automatically sanitized HTML contents'), } _defaults = { - 'history_mode': 'info', + 'forward_type': lambda self, cr, uid, c: c.get('forward_type') or 'single', } - def default_get(self, cr, uid, fields, context=None): - if context is None: - context = {} - # set as comment, perform overrided document-like action that calls get_record_data - old_mode = context.get('default_composition_mode', 'forward') - context['default_composition_mode'] = 'comment' - res = super(crm_lead_forward_to_partner, self).default_get(cr, uid, fields, context=context) - # back to forward mode - context['default_composition_mode'] = old_mode - res['composition_mode'] = context['default_composition_mode'] - return res - def get_record_data(self, cr, uid, model, res_id, context=None): - """ Override of mail.compose.message, to add default values coming - form the related lead. - """ - if context is None: - context = {} - res = super(crm_lead_forward_to_partner, self).get_record_data(cr, uid, model, res_id, context=context) - if model not in ('crm.lead') or not res_id: - return res - template_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm_partner_assign', 'crm_partner_assign_email_template')[1] - context['history_mode'] = context.get('history_mode','whole') - mail_body_fields = ['partner_id', 'partner_name', 'title', 'function', 'street', 'street2', 'zip', 'city', 'country_id', 'state_id', 'email_from', 'phone', 'fax', 'mobile', 'description'] - lead = self.pool.get('crm.lead').browse(cr, uid, res_id, context=context) - context['mail_body'] = self.pool.get('crm.lead')._mail_body(cr, uid, lead, mail_body_fields, context=context) - template = self.generate_email_for_composer(cr, uid, template_id, res_id, context) - res['subject'] = template['subject'] - res['body'] = template['body'] - return res +class crm_lead_assignation (osv.TransientModel): + _name = 'crm.lead.assignation' + _columns = { + 'forward_id': fields.many2one('crm.lead.forward.to.partner', 'Partner Assignation'), + 'lead_id': fields.many2one('crm.lead', 'Lead'), + 'lead_location': fields.char('Lead Location', size=128), + 'partner_assigned_id': fields.many2one('res.partner', 'Assigned Partner'), + 'partner_location': fields.char('Partner Location', size=128), + 'lead_link': fields.char('Lead Single Links', size=128), + } - def on_change_history_mode(self, cr, uid, ids, history_mode, model, res_id, context=None): - """ Update body when changing history_mode """ - if context is None: + def on_change_lead_id(self, cr, uid, ids, lead_id, context=None): + if not context: context = {} - if model and model == 'crm.lead' and res_id: - lead = self.pool[model].browse(cr, uid, res_id, context=context) - context['history_mode'] = history_mode - body = self.get_record_data(cr, uid, 'crm.lead', res_id, context=context)['body'] - return {'value': {'body': body}} - - def create(self, cr, uid, values, context=None): - """ TDE-HACK: remove 'type' from context, because when viewing an - opportunity form view, a default_type is set and propagated - to the wizard, that has a not matching type field. """ - default_type = context.pop('default_type', None) - new_id = super(crm_lead_forward_to_partner, self).create(cr, uid, values, context=context) - if default_type: - context['default_type'] = default_type - return new_id - - def action_forward(self, cr, uid, ids, context=None): - """ Forward the lead to a partner """ - if context is None: + if not lead_id: + return {'value': {'lead_location': False}} + lead = self.pool.get('crm.lead').browse(cr, uid, lead_id, context=context) + lead_location = [] + if lead.country_id: + lead_location.append(lead.country_id.name) + if lead.city: + lead_location.append(lead.city) + return {'value': {'lead_location': ", ".join(lead_location)}} + + def on_change_partner_assigned_id(self, cr, uid, ids, partner_assigned_id, context=None): + if not context: context = {} - # TDE FIX in 7.0: force mass_mailing mode; this way, the message will be - # send only to partners; default subtype of mass_mailing is indeed False - # Chatter will show 'logged a note', but partner_ids (aka, the assigned partner) - # will effectively receive the message if present in the composition window - self.write(cr, uid, ids, {'composition_mode': 'mass_mail'}, context=context) - res = {'type': 'ir.actions.act_window_close'} - wizard = self.browse(cr, uid, ids[0], context=context) - if wizard.model not in ('crm.lead'): - return res - if context.get('active_ids') is None: - context['active_ids'] = [wizard.res_id] - - lead = self.pool[wizard.model] - lead_ids = wizard.res_id and [wizard.res_id] or [] - - if wizard.composition_mode == 'mass_mail': - lead_ids = context and context.get('active_ids', []) or [] - value = self.default_get(cr, uid, ['body', 'email_to', 'email_cc', 'subject', 'history_mode'], context=context) - value.pop('composition_mode') - self.pool.get('crm.lead').message_subscribe(cr, uid, lead_ids, [partner.id for partner in wizard.partner_ids], context=context) - self.write(cr, uid, ids, value, context=context) - - return self.send_mail(cr, uid, ids, context=context) - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + if not partner_assigned_id: + return {'value': {'lead_location': False}} + partner = self.pool.get('res.partner').browse(cr, uid, partner_assigned_id, context=context) + partner_location = [] + if partner.country_id: + partner_location.append(partner.country_id.name) + if partner.city: + partner_location.append(partner.city) + return {'value': {'partner_location': ", ".join(partner_location)}} + +# # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm_partner_assign/wizard/crm_forward_to_partner_view.xml b/addons/crm_partner_assign/wizard/crm_forward_to_partner_view.xml index 0fda8c8beaa..26ad08f1528 100644 --- a/addons/crm_partner_assign/wizard/crm_forward_to_partner_view.xml +++ b/addons/crm_partner_assign/wizard/crm_forward_to_partner_view.xml @@ -1,36 +1,38 @@ <?xml version="1.0" encoding="UTF-8"?> <openerp> <data> - <record model="ir.ui.view" id="crm_lead_forward_to_partner_form"> <field name="name">crm_lead_forward_to_partner</field> <field name="model">crm.lead.forward.to.partner</field> <field name="arch" type="xml"> <form string="Send Mail" version="7.0"> - <field name="composition_mode" colspan="2" nolabel="1" invisible="1"/> - <field name="model" colspan="2" nolabel="1" invisible="1"/> - <field name="res_id" colspan="2" nolabel="1" invisible="1"/> - <separator string="Forward to Partner" colspan="4"/> - <group col="4"> - <field name="history_mode" colspan="4" - on_change="on_change_history_mode(history_mode, model, res_id)"/> - <field name="subject" colspan="4"/> - <field name="partner_ids" colspan="4" widget="many2many_tags_email"/> - <notebook colspan="4"> - <page string="Body"> - <field name="body"/> - </page> - <page string="Attachments"> - <field name="attachment_ids"/> - </page> - </notebook> + <group> + <field name="forward_type" widget="radio" invisible="context.get('hide_forward_type',False)"/> + </group> + <group> + <group> + <field name="partner_id" attrs="{'invisible': [('forward_type', 'in', ['assigned',False])], 'required': [('forward_type', '=', 'single')]}" /> + </group> + <group> + </group> </group> + <field name="assignation_lines" attrs="{'invisible': [('forward_type', 'in', ['single',False])]}"> + <tree create="false" editable="bottom"> + <field name="lead_id" readonly="1" on_change="on_change_lead_id(lead_id)"/> + <field name="lead_location" readonly="1"/> + <field name="partner_assigned_id" on_change="on_change_partner_assigned_id(partner_assigned_id)"/> + <field name="partner_location" readonly="1"/> + </tree> + </field> + <notebook colspan="4" groups="base.group_no_one"> + <page string="Email Template"> + <field name="body" readonly="1"/> + </page> + </notebook> <footer> - <button name="action_forward" string="Send" type="object" - class="oe_highlight"/> + <button name="action_forward" string="Send" type="object" class="oe_highlight"/> or - <button string="Cancel" special="cancel" - class="oe_link"/> + <button string="Cancel" special="cancel" class="oe_link"/> </footer> </form> </field> @@ -45,14 +47,11 @@ <field name="target">new</field> </record> - <act_window id="action_crm_send_mass_forward" - multi="True" - key2="client_action_multi" name="Mass forward to partner" - res_model="crm.lead.forward.to.partner" src_model="crm.lead" - view_mode="form" target="new" view_type="form" - context="{'default_composition_mode' : 'mass_mail'}" - view_id="crm_lead_forward_to_partner_form" - /> + <act_window id="action_crm_send_mass_forward" multi="True" + key2="client_action_multi" name="Forward to Partner" res_model="crm.lead.forward.to.partner" + src_model="crm.lead" view_mode="form" target="new" view_type="form" + groups="base.group_sale_manager" + context="{'default_composition_mode' : 'mass_mail'}" view_id="crm_lead_forward_to_partner_form" /> </data> </openerp> diff --git a/addons/crm_todo/i18n/da.po b/addons/crm_todo/i18n/da.po new file mode 100644 index 00000000000..1214801638f --- /dev/null +++ b/addons/crm_todo/i18n/da.po @@ -0,0 +1,85 @@ +# Danish translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-19 17:34+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Danish <da@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-20 05:17+0000\n" +"X-Generator: Launchpad (build 16673)\n" + +#. module: crm_todo +#: model:ir.model,name:crm_todo.model_project_task +msgid "Task" +msgstr "" + +#. module: crm_todo +#: view:crm.lead:0 +msgid "Timebox" +msgstr "" + +#. module: crm_todo +#: view:crm.lead:0 +msgid "Lead" +msgstr "" + +#. module: crm_todo +#: view:crm.lead:0 +msgid "For cancelling the task" +msgstr "" + +#. module: crm_todo +#: view:crm.lead:0 +msgid "Next" +msgstr "" + +#. module: crm_todo +#: model:ir.actions.act_window,name:crm_todo.crm_todo_action +#: model:ir.ui.menu,name:crm_todo.menu_crm_todo +msgid "My Tasks" +msgstr "" + +#. module: crm_todo +#: view:crm.lead:0 +#: field:crm.lead,task_ids:0 +msgid "Tasks" +msgstr "" + +#. module: crm_todo +#: view:crm.lead:0 +msgid "Done" +msgstr "" + +#. module: crm_todo +#: view:crm.lead:0 +msgid "Cancel" +msgstr "" + +#. module: crm_todo +#: model:ir.model,name:crm_todo.model_crm_lead +msgid "Lead/Opportunity" +msgstr "" + +#. module: crm_todo +#: field:project.task,lead_id:0 +msgid "Lead / Opportunity" +msgstr "" + +#. module: crm_todo +#: view:crm.lead:0 +msgid "For changing to done state" +msgstr "" + +#. module: crm_todo +#: view:crm.lead:0 +msgid "Previous" +msgstr "" diff --git a/addons/delivery/partner.py b/addons/delivery/partner.py index 477315dfc9b..226b5e493ab 100644 --- a/addons/delivery/partner.py +++ b/addons/delivery/partner.py @@ -25,11 +25,9 @@ class res_partner(osv.osv): _inherit = 'res.partner' _columns = { 'property_delivery_carrier': fields.property( - 'delivery.carrier', type='many2one', relation='delivery.carrier', string="Delivery Method", - view_load=True, help="This delivery method will be used when invoicing from picking."), } diff --git a/addons/document_page/document_page_view.xml b/addons/document_page/document_page_view.xml index 4d0b5596e75..9d02b47d265 100644 --- a/addons/document_page/document_page_view.xml +++ b/addons/document_page/document_page_view.xml @@ -88,7 +88,11 @@ <field name="view_mode">tree,form</field> <field name="view_id" ref="view_wiki_tree"/> <field name="search_view_id" ref="view_wiki_filter"/> - <field name="help">Create web pages</field> + <field name="help" type="html"> + <p class="oe_view_nocontent_create"> + Click to create a new web page. + </p> + </field> </record> <menuitem id="menu_page" parent="menu_wiki" name="Pages" action="action_page" sequence="10"/> <record id="action_category" model="ir.actions.act_window"> diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py index 2a7990e301b..2e3405ed079 100644 --- a/addons/email_template/email_template.py +++ b/addons/email_template/email_template.py @@ -24,8 +24,8 @@ import base64 import logging import openerp +from openerp import SUPERUSER_ID from openerp.osv import osv, fields -from openerp.osv import fields from openerp import tools from openerp.tools.translate import _ from urllib import urlencode, quote as quote @@ -191,7 +191,6 @@ class email_template(osv.osv): } def create_action(self, cr, uid, ids, context=None): - vals = {} action_obj = self.pool.get('ir.actions.act_window') data_obj = self.pool.get('ir.model.data') for template in self.browse(cr, uid, ids, context=context): @@ -199,7 +198,7 @@ class email_template(osv.osv): model_data_id = data_obj._get_id(cr, uid, 'mail', 'email_compose_message_wizard_form') res_id = data_obj.browse(cr, uid, model_data_id, context=context).res_id button_name = _('Send Mail (%s)') % template.name - vals['ref_ir_act_window'] = action_obj.create(cr, uid, { + act_id = action_obj.create(cr, SUPERUSER_ID, { 'name': button_name, 'type': 'ir.actions.act_window', 'res_model': 'mail.compose.message', @@ -211,27 +210,29 @@ class email_template(osv.osv): 'target': 'new', 'auto_refresh':1 }, context) - vals['ref_ir_value'] = self.pool.get('ir.values').create(cr, uid, { + ir_values_id = self.pool.get('ir.values').create(cr, SUPERUSER_ID, { 'name': button_name, 'model': src_obj, 'key2': 'client_action_multi', - 'value': "ir.actions.act_window," + str(vals['ref_ir_act_window']), + 'value': "ir.actions.act_window,%s" % act_id, 'object': True, }, context) - self.write(cr, uid, ids, { - 'ref_ir_act_window': vals.get('ref_ir_act_window',False), - 'ref_ir_value': vals.get('ref_ir_value',False), - }, context) + + template.write({ + 'ref_ir_act_window': act_id, + 'ref_ir_value': ir_values_id, + }) + return True def unlink_action(self, cr, uid, ids, context=None): for template in self.browse(cr, uid, ids, context=context): try: if template.ref_ir_act_window: - self.pool.get('ir.actions.act_window').unlink(cr, uid, template.ref_ir_act_window.id, context) + self.pool.get('ir.actions.act_window').unlink(cr, SUPERUSER_ID, template.ref_ir_act_window.id, context) if template.ref_ir_value: ir_values_obj = self.pool.get('ir.values') - ir_values_obj.unlink(cr, uid, template.ref_ir_value.id, context) + ir_values_obj.unlink(cr, SUPERUSER_ID, template.ref_ir_value.id, context) except Exception: raise osv.except_osv(_("Warning"), _("Deletion of the action record failed.")) return True diff --git a/addons/email_template/wizard/mail_compose_message.py b/addons/email_template/wizard/mail_compose_message.py index 7f44828ce15..746c2cc55f6 100644 --- a/addons/email_template/wizard/mail_compose_message.py +++ b/addons/email_template/wizard/mail_compose_message.py @@ -54,18 +54,22 @@ class mail_compose_message(osv.TransientModel): Indeed, basic mail.compose.message wizard duplicates attachments in mass mailing mode. But in 'single post' mode, attachments of an email template also have to be duplicated to avoid changing their ownership. """ + if context is None: + context = {} + wizard_context = dict(context) for wizard in self.browse(cr, uid, ids, context=context): + if wizard.template_id and not wizard.template_id.user_signature: + wizard_context['mail_notify_user_signature'] = False # template user_signature is added when generating body_html if not wizard.attachment_ids or wizard.composition_mode == 'mass_mail' or not wizard.template_id: continue - template = self.pool.get('email.template').browse(cr, uid, wizard.template_id.id, context=context) new_attachment_ids = [] for attachment in wizard.attachment_ids: - if attachment in template.attachment_ids: + if attachment in wizard.template_id.attachment_ids: new_attachment_ids.append(self.pool.get('ir.attachment').copy(cr, uid, attachment.id, {'res_model': 'mail.compose.message', 'res_id': wizard.id}, context=context)) else: new_attachment_ids.append(attachment.id) self.write(cr, uid, wizard.id, {'attachment_ids': [(6, 0, new_attachment_ids)]}, context=context) - return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context) + return super(mail_compose_message, self).send_mail(cr, uid, ids, context=wizard_context) def onchange_template_id(self, cr, uid, ids, template_id, composition_mode, model, res_id, context=None): """ - mass_mailing: we cannot render, so return the template values diff --git a/addons/event/event.py b/addons/event/event.py index eb18afd747c..3c04f5c1baa 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -172,6 +172,12 @@ class event_event(osv.osv): continue return res + def _get_visibility_selection(self, cr, uid, context=None): + return [('public', 'All Users'), + ('employees', 'Employees Only')] + # Lambda indirection method to avoid passing a copy of the overridable method when declaring the field + _visibility_selection = lambda self, *args, **kwargs: self._get_visibility_selection(*args, **kwargs) + _columns = { 'name': fields.char('Name', size=64, required=True, translate=True, readonly=False, states={'done': [('readonly', True)]}), 'user_id': fields.many2one('res.users', 'Responsible User', readonly=False, states={'done': [('readonly', True)]}), @@ -209,11 +215,14 @@ class event_event(osv.osv): 'note': fields.text('Description', readonly=False, states={'done': [('readonly', True)]}), 'company_id': fields.many2one('res.company', 'Company', required=False, change_default=True, readonly=False, states={'done': [('readonly', True)]}), 'is_subscribed' : fields.function(_subscribe_fnc, type="boolean", string='Subscribed'), + 'visibility': fields.selection(_visibility_selection, 'Privacy / Visibility', + select=True, required=True), } _defaults = { 'state': 'draft', 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'event.event', context=c), 'user_id': lambda obj, cr, uid, context: uid, + 'visibility': 'employees', } def subscribe_to_event(self, cr, uid, ids, context=None): diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml index 4f5e33eeafd..a9831720abf 100644 --- a/addons/event/event_view.xml +++ b/addons/event/event_view.xml @@ -76,6 +76,7 @@ <div class="oe_title"> <label for="name" class="oe_edit_only"/> <h1><field name="name"/></h1> + <field name="visibility"/> </div> <group> <group> diff --git a/addons/event/res_partner.py b/addons/event/res_partner.py index fc4afa56e69..b51e1fbb9d3 100644 --- a/addons/event/res_partner.py +++ b/addons/event/res_partner.py @@ -21,15 +21,13 @@ from openerp.osv import fields, osv + class res_partner(osv.osv): _inherit = 'res.partner' _columns = { 'speaker': fields.boolean('Speaker', help="Check this box if this contact is a speaker."), - 'event_ids': fields.one2many('event.event','main_speaker_id', readonly=True), - 'event_registration_ids': fields.one2many('event.registration','partner_id', readonly=True), } - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/event/res_partner_view.xml b/addons/event/res_partner_view.xml index c3e8073a7ae..7e97f80e30d 100644 --- a/addons/event/res_partner_view.xml +++ b/addons/event/res_partner_view.xml @@ -2,9 +2,8 @@ <openerp> <data> - <!-- Partners inherited form --> - - <record id="view_event_partner_info_form" model="ir.ui.view"> + <!-- Partners inherited form --> + <record id="view_event_partner_info_form" model="ir.ui.view"> <field name="name">res.partner.event.info.inherit</field> <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_partner_form"/> @@ -12,34 +11,8 @@ <field name="supplier" position="after"> <field name="speaker"/> </field> - <xpath expr="//page[@name='page_history']" position="attributes"> - <attribute name="invisible">False</attribute> - </xpath> - <xpath expr="//page[@name='page_history']" position="inside"> - <group name="grp_event" string="Events"> - <field name="event_ids" colspan="4" nolabel="1"> - <tree string="Events"> - <field name="name" string="Event"/> - <field name="main_speaker_id"/> - </tree> - </field> - </group> - <group name="grp_registration" string="Registrations"> - <field name="event_registration_ids" colspan="4" nolabel="1"> - <tree string="Events Registration"> - <field name="event_begin_date" string="Date"/> - <field name="event_id" /> - <field name="nb_register"/> - <field name="state"/> - <button name="button_reg_cancel" string="Cancel Registration" states="draft,open" type="object" icon="gtk-cancel"/> - <button name="button_reg_close" string="Close Registration" states="open" type="object" icon="gtk-close"/> - <button name="check_confirm" string="Confirm Registration" states="draft" type="object" icon="gtk-apply"/> - </tree> - </field> - </group> - </xpath> </field> - </record> + </record> </data> </openerp> diff --git a/addons/event/security/event_security.xml b/addons/event/security/event_security.xml index 470365dd5f0..5cdd7c9b459 100644 --- a/addons/event/security/event_security.xml +++ b/addons/event/security/event_security.xml @@ -26,25 +26,35 @@ <data noupdate="1"> <!-- Multi - Company Rules --> - <record model="ir.rule" id="event_event_comp_rule"> - <field name="name">Event multi-company</field> + <record model="ir.rule" id="event_event_company_rule"> + <field name="name">Event: multi-company</field> <field name="model_id" ref="model_event_event"/> <field name="global" eval="True"/> - <field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field> + <field name="domain_force">['|', + ('company_id', '=', False), + ('company_id', 'child_of', [user.company_id.id]), + ] + </field> </record> - - <record model="ir.rule" id="event_registration_comp_rule"> - <field name="name">Event Registration multi-company</field> + <record model="ir.rule" id="event_registration_company_rule"> + <field name="name">Event/Registration: multi-company</field> <field name="model_id" ref="model_event_registration"/> <field name="global" eval="True"/> - <field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field> + <field name="domain_force">['|', + ('company_id', '=', False), + ('company_id', 'child_of', [user.company_id.id]), + ] + </field> </record> - - <record model="ir.rule" id="report_event_registration_comp_rule"> - <field name="name">Report Event Registration multi-company</field> + <record model="ir.rule" id="report_event_registration_company_rule"> + <field name="name">Event/Report Registration: multi-company</field> <field name="model_id" ref="model_report_event_registration"/> <field name="global" eval="True"/> - <field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field> + <field name="domain_force">['|', + ('company_id', '=', False), + ('company_id', 'child_of', [user.company_id.id]), + ] + </field> </record> </data> diff --git a/addons/event_sale/i18n/da.po b/addons/event_sale/i18n/da.po new file mode 100644 index 00000000000..fb3faa70fc0 --- /dev/null +++ b/addons/event_sale/i18n/da.po @@ -0,0 +1,90 @@ +# Danish translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-19 17:36+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Danish <da@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-20 05:17+0000\n" +"X-Generator: Launchpad (build 16673)\n" + +#. module: event_sale +#: model:ir.model,name:event_sale.model_product_product +msgid "Product" +msgstr "" + +#. module: event_sale +#: help:product.product,event_ok:0 +msgid "" +"Determine if a product needs to create automatically an event registration " +"at the confirmation of a sales order line." +msgstr "" + +#. module: event_sale +#: help:sale.order.line,event_id:0 +msgid "" +"Choose an event and it will automatically create a registration for this " +"event." +msgstr "" + +#. module: event_sale +#: model:event.event,name:event_sale.event_technical_training +msgid "Technical training in Grand-Rosiere" +msgstr "" + +#. module: event_sale +#: help:product.product,event_type_id:0 +msgid "" +"Select event types so when we use this product in sales order lines, it will " +"filter events of this type only." +msgstr "" + +#. module: event_sale +#: field:product.product,event_type_id:0 +msgid "Type of Event" +msgstr "" + +#. module: event_sale +#: field:sale.order.line,event_ok:0 +msgid "event_ok" +msgstr "" + +#. module: event_sale +#: field:product.product,event_ok:0 +msgid "Event Subscription" +msgstr "" + +#. module: event_sale +#: field:sale.order.line,event_type_id:0 +msgid "Event Type" +msgstr "" + +#. module: event_sale +#: model:product.template,name:event_sale.event_product_product_template +msgid "Technical Training" +msgstr "" + +#. module: event_sale +#: code:addons/event_sale/event_sale.py:88 +#, python-format +msgid "The registration %s has been created from the Sales Order %s." +msgstr "" + +#. module: event_sale +#: field:sale.order.line,event_id:0 +msgid "Event" +msgstr "" + +#. module: event_sale +#: model:ir.model,name:event_sale.model_sale_order_line +msgid "Sales Order Line" +msgstr "" diff --git a/addons/fleet/fleet_view.xml b/addons/fleet/fleet_view.xml index 4d0e6298129..a8f6a321daf 100644 --- a/addons/fleet/fleet_view.xml +++ b/addons/fleet/fleet_view.xml @@ -591,6 +591,9 @@ <field name="view_mode">tree,graph</field> <field name="context">{"search_default_groupby_vehicle" : True}</field> <field name="help" type="html"> + <p class="oe_view_nocontent_create"> + Click to create a new odometer log. + </p> <p> Here you can add various odometer entries for all vehicles. You can also show odometer value for a particular vehicle using diff --git a/addons/fleet/i18n/bg.po b/addons/fleet/i18n/bg.po new file mode 100644 index 00000000000..503b13d7840 --- /dev/null +++ b/addons/fleet/i18n/bg.po @@ -0,0 +1,1912 @@ +# Bulgarian translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:06+0000\n" +"PO-Revision-Date: 2013-06-19 10:29+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Bulgarian <bg@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-20 05:17+0000\n" +"X-Generator: Launchpad (build 16673)\n" + +#. module: fleet +#: selection:fleet.vehicle,fuel_type:0 +msgid "Hybrid" +msgstr "Хибридна" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_compact +msgid "Compact" +msgstr "Компактен" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_1 +msgid "A/C Compressor Replacement" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,vin_sn:0 +msgid "Unique number written on the vehicle motor (VIN/SN number)" +msgstr "" + +#. module: fleet +#: selection:fleet.service.type,category:0 +#: view:fleet.vehicle.log.contract:0 +#: view:fleet.vehicle.log.services:0 +msgid "Service" +msgstr "Сервиз" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,cost_frequency:0 +msgid "Monthly" +msgstr "Месечно" + +#. module: fleet +#: code:addons/fleet/fleet.py:62 +#, python-format +msgid "Unknown" +msgstr "Неизвестно" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_20 +msgid "Engine/Drive Belt(s) Replacement" +msgstr "Смяна ангренажен ремък" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Vehicle costs" +msgstr "Цена на превозното средство" + +#. module: fleet +#: selection:fleet.vehicle,fuel_type:0 +msgid "Diesel" +msgstr "Дизел" + +#. module: fleet +#: code:addons/fleet/fleet.py:421 +#, python-format +msgid "License Plate: from '%s' to '%s'" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_38 +msgid "Resurface Rotors" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +#: view:fleet.vehicle.model:0 +msgid "Group By..." +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_32 +msgid "Oil Pump Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_18 +msgid "Engine Belt Inspection" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,cost_frequency:0 +msgid "No" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,power:0 +msgid "Power in kW of the vehicle" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_2 +msgid "Depreciation and Interests" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,insurer_id:0 +#: field:fleet.vehicle.log.fuel,vendor_id:0 +#: field:fleet.vehicle.log.services,vendor_id:0 +msgid "Supplier" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_35 +msgid "Power Steering Hose Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Odometer details" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "Has Alert(s)" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.fuel,liter:0 +msgid "Liter" +msgstr "" + +#. module: fleet +#: model:ir.actions.client,name:fleet.action_fleet_menu +msgid "Open Fleet Menu" +msgstr "" + +#. module: fleet +#: view:board.board:0 +msgid "Fuel Costs" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_9 +msgid "Battery Inspection" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,company_id:0 +msgid "Company" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Invoice Date" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.fuel:0 +msgid "Refueling Details" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:669 +#, python-format +msgid "%s contract(s) need(s) to be renewed and/or closed!" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Indicative Costs" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_16 +msgid "Charging System Diagnosis" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,car_value:0 +msgid "Value of the bought vehicle" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_44 +msgid "Tie Rod End Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_24 +msgid "Head Gasket(s) Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +#: selection:fleet.vehicle.cost,cost_type:0 +msgid "Services" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,odometer:0 +#: help:fleet.vehicle.cost,odometer:0 +#: help:fleet.vehicle.cost,odometer_id:0 +msgid "Odometer measure of the vehicle at the moment of this log" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +#: field:fleet.vehicle.log.contract,notes:0 +msgid "Terms and Conditions" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.action_fleet_vehicle_kanban +msgid "Vehicles with alerts" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.fleet_vehicle_costs_act +#: model:ir.ui.menu,name:fleet.fleet_vehicle_costs_menu +msgid "Vehicle Costs" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Total Cost" +msgstr "" + +#. module: fleet +#: selection:fleet.service.type,category:0 +msgid "Both" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,cost_id:0 +#: field:fleet.vehicle.log.fuel,cost_id:0 +#: field:fleet.vehicle.log.services,cost_id:0 +msgid "Automatically created field to link to parent fleet.vehicle.cost" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Terminate Contract" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.cost,parent_id:0 +msgid "Parent cost to this current cost" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,cost_frequency:0 +msgid "Frequency of the recuring cost" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_1 +msgid "Calculation Benefit In Kind" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,expiration_date:0 +msgid "" +"Date when the coverage of the contract expirates (by default, one year after " +"begin date)" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.fuel:0 +#: field:fleet.vehicle.log.fuel,notes:0 +#: view:fleet.vehicle.log.services:0 +#: field:fleet.vehicle.log.services,notes:0 +msgid "Notes" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:47 +#, python-format +msgid "Operation not allowed!" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,message_ids:0 +msgid "Messages" +msgstr "" + +#. module: fleet +#: model:res.groups,name:fleet.group_fleet_user +msgid "User" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.cost,vehicle_id:0 +msgid "Vehicle concerned by this log" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,cost_amount:0 +#: field:fleet.vehicle.log.fuel,cost_amount:0 +#: field:fleet.vehicle.log.services,cost_amount:0 +msgid "Amount" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,message_unread:0 +msgid "Unread Messages" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_6 +msgid "Air Filter Replacement" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_tag +msgid "fleet.vehicle.tag" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "show the services logs for this vehicle" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,contract_renewal_name:0 +msgid "Name of contract to renew soon" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_senior +msgid "Senior" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,state:0 +msgid "Choose wheter the contract is still valid or not" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle,transmission:0 +msgid "Automatic" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:414 +#, python-format +msgid "Driver: from '%s' to '%s'" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "and" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.model.brand,image_medium:0 +msgid "Medium-sized photo" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_34 +msgid "Oxygen Sensor Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.services:0 +msgid "Service Type" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,transmission:0 +msgid "Transmission Used by the vehicle" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:740 +#: view:fleet.vehicle.log.contract:0 +#: model:ir.actions.act_window,name:fleet.act_renew_contract +#, python-format +msgid "Renew Contract" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "show the odometer logs for this vehicle" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,odometer_unit:0 +msgid "Unit of the odometer " +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.services:0 +msgid "Services Costs Per Month" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Effective Costs" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_8 +msgid "Repair and maintenance" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,purchaser_id:0 +msgid "Person to which the contract is signed for" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_log_contract_act +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to create a new contract. \n" +" </p><p>\n" +" Manage all your contracts (leasing, insurances, etc.) with\n" +" their related services, costs. OpenERP will automatically " +"warn\n" +" you when some contracts have to be renewed.\n" +" </p><p>\n" +" Each contract (e.g.: leasing) may include several services\n" +" (reparation, insurances, periodic maintenance).\n" +" </p>\n" +" " +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_service_type +msgid "Type of services available on a vehicle" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.fleet_vehicle_service_types_act +#: model:ir.ui.menu,name:fleet.fleet_vehicle_service_types_menu +msgid "Service Types" +msgstr "" + +#. module: fleet +#: view:board.board:0 +msgid "Contracts Costs" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.fleet_vehicle_log_services_act +#: model:ir.ui.menu,name:fleet.fleet_vehicle_log_services_menu +msgid "Vehicles Services Logs" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.fleet_vehicle_log_fuel_act +#: model:ir.ui.menu,name:fleet.fleet_vehicle_log_fuel_menu +msgid "Vehicles Fuel Logs" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.model.brand:0 +msgid "" +"$('.oe_picture').load(function() { if($(this).width() > $(this).height()) { " +"$(this).addClass('oe_employee_picture_wide') } });" +msgstr "" + +#. module: fleet +#: view:board.board:0 +msgid "Vehicles With Alerts" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_costs_act +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to create a new cost.\n" +" </p><p>\n" +" OpenERP helps you managing the costs for your different\n" +" vehicles. Costs are created automatically from services,\n" +" contracts (fixed or recurring) and fuel logs.\n" +" </p>\n" +" " +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "show the fuel logs for this vehicle" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,purchaser_id:0 +msgid "Contractor" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,license_plate:0 +msgid "License Plate" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,state:0 +msgid "To Close" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,cost_frequency:0 +msgid "Recurring Cost Frequency" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.fuel,inv_ref:0 +#: field:fleet.vehicle.log.services,inv_ref:0 +msgid "Invoice Reference" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,message_follower_ids:0 +msgid "Followers" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,location:0 +msgid "Location" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Costs Per Month" +msgstr "" + +#. module: fleet +#: field:fleet.contract.state,name:0 +msgid "Contract Status" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,contract_renewal_total:0 +msgid "Total of contracts due or overdue minus one" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,cost_subtype_id:0 +msgid "Type" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,contract_renewal_overdue:0 +msgid "Has Contracts Overdued" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,amount:0 +msgid "Total Price" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_27 +msgid "Heater Core Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_14 +msgid "Car Wash" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,driver_id:0 +msgid "Driver of the vehicle" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "other(s)" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_refueling +msgid "Refueling" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,message_summary:0 +msgid "" +"Holds the Chatter summary (number of messages, ...). This summary is " +"directly in html format in order to be inserted in kanban views." +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_5 +msgid "A/C Recharge" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_log_fuel +msgid "Fuel log for vehicles" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "Engine Options" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.fuel:0 +msgid "Fuel Costs Per Month" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_sedan +msgid "Sedan" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,seats:0 +msgid "Seats Number" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_convertible +msgid "Convertible" +msgstr "" + +#. module: fleet +#: model:ir.ui.menu,name:fleet.fleet_configuration +msgid "Configuration" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +#: field:fleet.vehicle.log.contract,sum_cost:0 +msgid "Indicative Costs Total" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_junior +msgid "Junior" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,model_id:0 +msgid "Model of the vehicle" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_state_act +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to create a vehicule status.\n" +" </p><p>\n" +" You can customize available status to track the evolution " +"of\n" +" each vehicule. Example: Active, Being Repaired, Sold.\n" +" </p>\n" +" " +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +#: field:fleet.vehicle,log_fuel:0 +#: view:fleet.vehicle.log.fuel:0 +msgid "Fuel Logs" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:409 +#: code:addons/fleet/fleet.py:413 +#: code:addons/fleet/fleet.py:417 +#: code:addons/fleet/fleet.py:420 +#, python-format +msgid "None" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.action_fleet_reporting_costs_non_effective +#: model:ir.ui.menu,name:fleet.menu_fleet_reporting_indicative_costs +msgid "Indicative Costs Analysis" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_12 +msgid "Brake Inspection" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,state_id:0 +msgid "Current state of the vehicle" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle,transmission:0 +msgid "Manual" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_52 +msgid "Wheel Bearing Replacement" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.cost,cost_subtype_id:0 +msgid "Cost type purchased with this cost" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle,fuel_type:0 +msgid "Gasoline" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_model_brand_act +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to create a new brand.\n" +" </p>\n" +" " +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,start_date:0 +msgid "Contract Start Date" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,odometer_unit:0 +msgid "Odometer Unit" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_30 +msgid "Intake Manifold Gasket Replacement" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,cost_frequency:0 +msgid "Daily" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_6 +msgid "Snow tires" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.cost,date:0 +msgid "Date when the cost has been executed" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +#: view:fleet.vehicle.model:0 +msgid "Vehicles costs" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_log_services +msgid "Services for vehicles" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Indicative Cost" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_26 +msgid "Heater Control Valve Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "" +"Create a new contract automatically with all the same informations except " +"for the date that will start at the end of current contract" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,state:0 +msgid "Terminated" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_cost +msgid "Cost related to a vehicle" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_33 +msgid "Other Maintenance" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +#: field:fleet.vehicle.cost,parent_id:0 +msgid "Parent" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,state_id:0 +#: view:fleet.vehicle.state:0 +msgid "State" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,cost_generated:0 +msgid "Recurring Cost Amount" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_49 +msgid "Transmission Replacement" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_log_fuel_act +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to create a new fuel log. \n" +" </p><p>\n" +" Here you can add refuelling entries for all vehicles. You " +"can\n" +" also filter logs of a particular vehicle using the search\n" +" field.\n" +" </p>\n" +" " +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_11 +msgid "Brake Caliper Replacement" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,odometer:0 +msgid "Last Odometer" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.fleet_vehicle_model_act +#: model:ir.ui.menu,name:fleet.fleet_vehicle_model_menu +msgid "Vehicle Model" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,doors:0 +msgid "Doors Number" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,acquisition_date:0 +msgid "Date when the vehicle has been bought" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.model:0 +msgid "Models" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "amount" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,fuel_type:0 +msgid "Fuel Used by the vehicle" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Set Contract In Progress" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,odometer_unit:0 +#: field:fleet.vehicle.odometer,unit:0 +msgid "Unit" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,message_is_follower:0 +msgid "Is a Follower" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,horsepower:0 +msgid "Horsepower" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,image:0 +#: field:fleet.vehicle,image_medium:0 +#: field:fleet.vehicle,image_small:0 +#: field:fleet.vehicle.model,image:0 +#: field:fleet.vehicle.model,image_medium:0 +#: field:fleet.vehicle.model,image_small:0 +#: field:fleet.vehicle.model.brand,image:0 +msgid "Logo" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,horsepower_tax:0 +msgid "Horsepower Taxation" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,log_services:0 +#: view:fleet.vehicle.log.services:0 +msgid "Services Logs" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.model:0 +msgid "Brand" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_43 +msgid "Thermostat Replacement" +msgstr "" + +#. module: fleet +#: field:fleet.service.type,category:0 +msgid "Category" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.action_fleet_vehicle_log_fuel_graph +msgid "Fuel Costs by Month" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.model.brand,image:0 +msgid "" +"This field holds the image used as logo for the brand, limited to " +"1024x1024px." +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_11 +msgid "Management Fee" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "All vehicles" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.fuel:0 +#: view:fleet.vehicle.log.services:0 +msgid "Additional Details" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.action_fleet_vehicle_log_services_graph +msgid "Services Costs by Month" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_9 +msgid "Assistance" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.fuel,price_per_liter:0 +msgid "Price Per Liter" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_17 +msgid "Door Window Motor/Regulator Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_46 +msgid "Tire Service" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_8 +msgid "Ball Joint Replacement" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,fuel_type:0 +msgid "Fuel Type" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_22 +msgid "Fuel Injector Replacement" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.fleet_vehicle_state_act +#: model:ir.ui.menu,name:fleet.fleet_vehicle_state_menu +msgid "Vehicle Status" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_50 +msgid "Water Pump Replacement" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,location:0 +msgid "Location of the vehicle (garage, ...)" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_28 +msgid "Heater Hose Replacement" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,state:0 +msgid "Status" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_40 +msgid "Rotor Replacement" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.model,brand_id:0 +msgid "Brand of the vehicle" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,start_date:0 +msgid "Date when the coverage of the contract begins" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle,fuel_type:0 +msgid "Electric" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,tag_ids:0 +msgid "Tags" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +#: field:fleet.vehicle,log_contracts:0 +msgid "Contracts" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_13 +msgid "Brake Pad(s) Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.fuel:0 +#: view:fleet.vehicle.log.services:0 +msgid "Odometer Details" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,driver_id:0 +msgid "Driver" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.model.brand,image_small:0 +msgid "" +"Small-sized photo of the brand. It is automatically resized as a 64x64px " +"image, with aspect ratio preserved. Use this field anywhere a small image is " +"required." +msgstr "" + +#. module: fleet +#: view:board.board:0 +msgid "Fleet Dashboard" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_break +msgid "Break" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_contract_omnium +msgid "Omnium" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.services:0 +msgid "Services Details" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_15 +msgid "Residual value (Excluding VAT)" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_7 +msgid "Alternator Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_3 +msgid "A/C Diagnosis" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_23 +msgid "Fuel Pump Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Activation Cost" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Cost Type" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_4 +msgid "A/C Evaporator Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "show all the costs for this vehicle" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.odometer:0 +msgid "Odometer Values Per Month" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_model_act +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to create a new model.\n" +" </p><p>\n" +" You can define several models (e.g. A3, A4) for each brand " +"(Audi).\n" +" </p>\n" +" " +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_act +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to create a new vehicle. \n" +" </p><p>\n" +" You will be able to manage your fleet by keeping track of " +"the\n" +" contracts, services, fixed and recurring costs, odometers " +"and\n" +" fuel logs associated to each vehicle.\n" +" </p><p>\n" +" OpenERP will warn you when services or contract have to be\n" +" renewed.\n" +" </p>\n" +" " +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_13 +msgid "Entry into service tax" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,expiration_date:0 +msgid "Contract Expiration Date" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Cost Subtype" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.open_board_fleet +msgid "" +"<div class=\"oe_empty_custom_dashboard\">\n" +" <p>\n" +" <b>Fleet dashboard is empty.</b>\n" +" </p><p>\n" +" To add your first report into this dashboard, go to any\n" +" menu, switch to list or graph view, and click <i>'Add " +"to\n" +" Dashboard'</i> in the extended search options.\n" +" </p><p>\n" +" You can filter and group data before inserting into the\n" +" dashboard using the search options.\n" +" </p>\n" +" </div>\n" +" " +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_12 +msgid "Rent (Excluding VAT)" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle,odometer_unit:0 +msgid "Kilometers" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.fuel:0 +msgid "Vehicle Details" +msgstr "" + +#. module: fleet +#: selection:fleet.service.type,category:0 +#: field:fleet.vehicle.cost,contract_id:0 +#: selection:fleet.vehicle.cost,cost_type:0 +msgid "Contract" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.fleet_vehicle_model_brand_act +#: model:ir.ui.menu,name:fleet.fleet_vehicle_model_brand_menu +msgid "Model brand of Vehicle" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_10 +msgid "Battery Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +#: field:fleet.vehicle.cost,date:0 +#: field:fleet.vehicle.odometer,date:0 +msgid "Date" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.fleet_vehicle_act +#: model:ir.ui.menu,name:fleet.fleet_vehicle_menu +#: model:ir.ui.menu,name:fleet.fleet_vehicles +msgid "Vehicles" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle,odometer_unit:0 +msgid "Miles" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,cost_generated:0 +msgid "" +"Costs paid at regular intervals, depending on the cost frequency. If the " +"cost frequency is set to unique, the cost will be logged at the start date" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_17 +msgid "Emissions" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_model +msgid "Model of a vehicle" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.action_fleet_reporting_costs +#: model:ir.actions.act_window,help:fleet.action_fleet_reporting_costs_non_effective +msgid "" +"<p>\n" +" OpenERP helps you managing the costs for your different vehicles\n" +" Costs are generally created from services and contract and appears " +"here.\n" +" </p>\n" +" <p>\n" +" Thanks to the different filters, OpenERP can only print the " +"effective\n" +" costs, sort them by type and by vehicle.\n" +" </p>\n" +" " +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,car_value:0 +msgid "Car Value" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.open_board_fleet +#: model:ir.module.category,name:fleet.module_fleet_category +#: model:ir.ui.menu,name:fleet.menu_fleet_dashboard +#: model:ir.ui.menu,name:fleet.menu_fleet_reporting +#: model:ir.ui.menu,name:fleet.menu_root +msgid "Fleet" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_14 +msgid "Total expenses (Excluding VAT)" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,odometer_id:0 +msgid "Odometer" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_45 +msgid "Tire Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.service.type:0 +msgid "Service types" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.fuel,purchaser_id:0 +#: field:fleet.vehicle.log.services,purchaser_id:0 +msgid "Purchaser" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_3 +msgid "Tax roll" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.model:0 +#: field:fleet.vehicle.model,vendors:0 +msgid "Vendors" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_contract_leasing +msgid "Leasing" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.model.brand,image_medium:0 +msgid "" +"Medium-sized logo of the brand. It is automatically resized as a 128x128px " +"image, with aspect ratio preserved. Use this field in form views or some " +"kanban views." +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,cost_frequency:0 +msgid "Weekly" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +#: view:fleet.vehicle.odometer:0 +msgid "Odometer Logs" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,acquisition_date:0 +msgid "Acquisition Date" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_odometer +msgid "Odometer log for a vehicle" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,cost_type:0 +msgid "Category of the cost" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_5 +#: model:fleet.service.type,name:fleet.type_service_service_7 +msgid "Summer tires" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,contract_renewal_due_soon:0 +msgid "Has Contracts to renew" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_31 +msgid "Oil Change" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.model.brand,image_small:0 +msgid "Smal-sized photo" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_model_brand +msgid "Brand model of the vehicle" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_51 +msgid "Wheel Alignment" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_purchased +msgid "Purchased" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_odometer_act +msgid "" +"<p>\n" +" Here you can add various odometer entries for all vehicles.\n" +" You can also show odometer value for a particular vehicle " +"using\n" +" the search field.\n" +" </p>\n" +" " +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.model,brand_id:0 +#: view:fleet.vehicle.model.brand:0 +msgid "Model Brand" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "General Properties" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_21 +msgid "Exhaust Manifold Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_47 +msgid "Transmission Filter Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_10 +msgid "Replacement Vehicle" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,state:0 +msgid "In Progress" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.log.contract,cost_frequency:0 +msgid "Yearly" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.model,modelname:0 +msgid "Model name" +msgstr "" + +#. module: fleet +#: view:board.board:0 +#: model:ir.actions.act_window,name:fleet.action_fleet_vehicle_costs_graph +msgid "Costs by Month" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_18 +msgid "Touring Assistance" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,power:0 +msgid "Power (kW)" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:418 +#, python-format +msgid "State: from '%s' to '%s'" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_2 +msgid "A/C Condenser Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_19 +msgid "Engine Coolant Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +msgid "Cost Details" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:410 +#, python-format +msgid "Model: from '%s' to '%s'" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.cost,cost_type:0 +msgid "Other" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Contract details" +msgstr "" + +#. module: fleet +#: model:fleet.vehicle.tag,name:fleet.vehicle_tag_leasing +msgid "Employee Car" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,auto_generated:0 +msgid "Automatically Generated" +msgstr "" + +#. module: fleet +#: selection:fleet.vehicle.cost,cost_type:0 +msgid "Fuel" +msgstr "" + +#. module: fleet +#: sql_constraint:fleet.vehicle.state:0 +msgid "State name already exists" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_37 +msgid "Radiator Repair" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_log_contract +msgid "Contract information on a vehicle" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,days_left:0 +msgid "Warning Date" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_19 +msgid "Residual value in %" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "Additional Properties" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle_state +msgid "fleet.vehicle.state" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Contract Costs Per Month" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.fleet_vehicle_log_contract_act +#: model:ir.ui.menu,name:fleet.fleet_vehicle_log_contract_menu +msgid "Vehicles Contracts" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_48 +msgid "Transmission Fluid Replacement" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.model.brand,name:0 +msgid "Brand Name" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_36 +msgid "Power Steering Pump Replacement" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.cost,contract_id:0 +msgid "Contract attached to this cost" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:397 +#, python-format +msgid "Vehicle %s has been added to the fleet!" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +#: view:fleet.vehicle.log.fuel:0 +#: view:fleet.vehicle.log.services:0 +msgid "Price" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,odometer:0 +#: field:fleet.vehicle.odometer,value:0 +msgid "Odometer Value" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +#: view:fleet.vehicle.cost:0 +#: field:fleet.vehicle.cost,vehicle_id:0 +#: field:fleet.vehicle.odometer,vehicle_id:0 +msgid "Vehicle" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.cost,cost_ids:0 +#: view:fleet.vehicle.log.contract:0 +#: view:fleet.vehicle.log.services:0 +msgid "Included Services" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.action_fleet_vehicle_kanban +msgid "" +"<p>\n" +" Here are displayed vehicles for which one or more contracts need " +"to be renewed. If you see this message, then there is no contracts to " +"renew.\n" +" </p>\n" +" " +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_15 +msgid "Catalytic Converter Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_25 +msgid "Heater Blower Motor Replacement" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.fleet_vehicle_odometer_act +#: model:ir.ui.menu,name:fleet.fleet_vehicle_odometer_menu +msgid "Vehicles Odometer" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.log.contract,notes:0 +msgid "Write here all supplementary informations relative to this contract" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_29 +msgid "Ignition Coil Replacement" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_service_16 +msgid "Options" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_contract_repairing +msgid "Repairing" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.action_fleet_reporting_costs +#: model:ir.ui.menu,name:fleet.menu_fleet_reporting_costs +msgid "Costs Analysis" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.log.contract,ins_ref:0 +msgid "Contract Reference" +msgstr "" + +#. module: fleet +#: field:fleet.service.type,name:0 +#: field:fleet.vehicle,name:0 +#: field:fleet.vehicle.cost,name:0 +#: field:fleet.vehicle.log.contract,name:0 +#: field:fleet.vehicle.model,name:0 +#: field:fleet.vehicle.odometer,name:0 +#: field:fleet.vehicle.state,name:0 +#: field:fleet.vehicle.tag,name:0 +msgid "Name" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,doors:0 +msgid "Number of doors of the vehicle" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,transmission:0 +msgid "Transmission" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,vin_sn:0 +msgid "Chassis Number" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,color:0 +msgid "Color of the vehicle" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_log_services_act +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to create a new service entry. \n" +" </p><p>\n" +" OpenERP helps you keeping track of all the services done\n" +" on your vehicle. Services can be of many type: occasional\n" +" repair, fixed maintenance, etc.\n" +" </p>\n" +" " +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,co2:0 +msgid "CO2 Emissions" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +msgid "Contract logs" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "Costs" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,message_summary:0 +msgid "Summary" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,name:fleet.action_fleet_vehicle_log_contract_graph +msgid "Contracts Costs by Month" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,model_id:0 +#: view:fleet.vehicle.model:0 +msgid "Model" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_41 +msgid "Spark Plug Replacement" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,message_ids:0 +msgid "Messages and communication history" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_vehicle +msgid "Information on a vehicle" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,co2:0 +msgid "CO2 emissions of the vehicle" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_53 +msgid "Windshield Wiper(s) Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.contract:0 +#: field:fleet.vehicle.log.contract,generated_cost_ids:0 +msgid "Generated Costs" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle.state,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: fleet +#: field:fleet.vehicle,color:0 +msgid "Color" +msgstr "" + +#. module: fleet +#: model:ir.actions.act_window,help:fleet.fleet_vehicle_service_types_act +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to create a new type of service.\n" +" </p><p>\n" +" Each service can used in contracts, as a standalone service " +"or both.\n" +" </p>\n" +" " +msgstr "" + +#. module: fleet +#: view:board.board:0 +msgid "Services Costs" +msgstr "" + +#. module: fleet +#: code:addons/fleet/fleet.py:47 +#, python-format +msgid "Emptying the odometer value of a vehicle is not allowed." +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,seats:0 +msgid "Number of seats of the vehicle" +msgstr "" + +#. module: fleet +#: model:res.groups,name:fleet.group_fleet_manager +msgid "Manager" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.services:0 +msgid "Cost" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_39 +msgid "Rotate Tires" +msgstr "" + +#. module: fleet +#: model:fleet.service.type,name:fleet.type_service_42 +msgid "Starter Replacement" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.cost:0 +#: field:fleet.vehicle.cost,year:0 +msgid "Year" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle,license_plate:0 +msgid "License plate number of the vehicle (ie: plate number for a car)" +msgstr "" + +#. module: fleet +#: model:ir.model,name:fleet.model_fleet_contract_state +msgid "Contains the different possible status of a leasing contract" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle:0 +msgid "show the contract for this vehicle" +msgstr "" + +#. module: fleet +#: view:fleet.vehicle.log.services:0 +msgid "Total" +msgstr "" + +#. module: fleet +#: help:fleet.service.type,category:0 +msgid "" +"Choose wheter the service refer to contracts, vehicle services or both" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.cost,cost_type:0 +msgid "For internal purpose only" +msgstr "" + +#. module: fleet +#: help:fleet.vehicle.state,sequence:0 +msgid "Used to order the note stages" +msgstr "" diff --git a/addons/hr/__init__.py b/addons/hr/__init__.py index 02ac7f16fd9..fbd01761f39 100644 --- a/addons/hr/__init__.py +++ b/addons/hr/__init__.py @@ -23,5 +23,6 @@ import hr_department import hr import res_config +import res_users # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr/__openerp__.py b/addons/hr/__openerp__.py index 001933ad2bf..8435d787381 100644 --- a/addons/hr/__openerp__.py +++ b/addons/hr/__openerp__.py @@ -59,6 +59,8 @@ You can manage: 'hr_installer.xml', 'hr_data.xml', 'res_config_view.xml', + 'mail_hr_view.xml', + 'res_users_view.xml', ], 'demo': ['hr_demo.xml'], 'test': [ @@ -70,5 +72,7 @@ You can manage: 'application': True, 'auto_install': False, 'css': [ 'static/src/css/hr.css' ], + 'js': [ 'static/src/js/suggestions.js' ], + 'qweb': [ 'static/src/xml/suggestions.xml' ], } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hr/hr.py b/addons/hr/hr.py index 7f704e42e5e..4849d3a7d8b 100644 --- a/addons/hr/hr.py +++ b/addons/hr/hr.py @@ -25,9 +25,11 @@ from openerp.modules.module import get_module_resource from openerp.osv import fields, osv from openerp.tools.translate import _ from openerp import tools +from openerp.tools.translate import _ _logger = logging.getLogger(__name__) + class hr_employee_category(osv.osv): def name_get(self, cr, uid, ids, context=None): @@ -150,6 +152,7 @@ class hr_job(osv.osv): class hr_employee(osv.osv): _name = "hr.employee" _description = "Employee" + _order = 'name_related' _inherits = {'resource.resource': "resource_id"} _inherit = ['mail.thread'] @@ -158,10 +161,10 @@ class hr_employee(osv.osv): for obj in self.browse(cr, uid, ids, context=context): result[obj.id] = tools.image_get_resized_images(obj.image) return result - + def _set_image(self, cr, uid, id, name, value, args, context=None): return self.write(cr, uid, [id], {'image': tools.image_resize_image_big(value)}, context=context) - + _columns = { #we need a related field in order to be able to sort the employee by name 'name_related': fields.related('resource_id', 'name', type='char', string='Name', readonly=True, store=True), @@ -171,12 +174,12 @@ class hr_employee(osv.osv): 'sinid': fields.char('SIN No', size=32, help="Social Insurance Number"), 'identification_id': fields.char('Identification No', size=32), 'otherid': fields.char('Other Id', size=64), - 'gender': fields.selection([('male', 'Male'),('female', 'Female')], 'Gender'), + 'gender': fields.selection([('male', 'Male'), ('female', 'Female')], 'Gender'), 'marital': fields.selection([('single', 'Single'), ('married', 'Married'), ('widower', 'Widower'), ('divorced', 'Divorced')], 'Marital Status'), - 'department_id':fields.many2one('hr.department', 'Department'), + 'department_id': fields.many2one('hr.department', 'Department'), 'address_id': fields.many2one('res.partner', 'Working Address'), 'address_home_id': fields.many2one('res.partner', 'Home Address'), - 'bank_account_id':fields.many2one('res.partner.bank', 'Bank Account Number', domain="[('partner_id','=',address_home_id)]", help="Employee bank salary account"), + 'bank_account_id': fields.many2one('res.partner.bank', 'Bank Account Number', domain="[('partner_id','=',address_home_id)]", help="Employee bank salary account"), 'work_phone': fields.char('Work Phone', size=32, readonly=False), 'mobile_phone': fields.char('Work Mobile', size=32, readonly=False), 'work_email': fields.char('Work Email', size=240), @@ -207,25 +210,42 @@ class hr_employee(osv.osv): help="Small-sized photo of the employee. It is automatically "\ "resized as a 64x64px image, with aspect ratio preserved. "\ "Use this field anywhere a small image is required."), - 'passport_id':fields.char('Passport No', size=64), + 'passport_id': fields.char('Passport No', size=64), 'color': fields.integer('Color Index'), 'city': fields.related('address_id', 'city', type='char', string='City'), 'login': fields.related('user_id', 'login', type='char', string='Login', readonly=1), 'last_login': fields.related('user_id', 'date', type='datetime', string='Latest Connection', readonly=1), } - _order='name_related' + def _get_default_image(self, cr, uid, context=None): + image_path = get_module_resource('hr', 'static/src/img', 'default_image.png') + return tools.image_resize_image_big(open(image_path, 'rb').read().encode('base64')) + + defaults = { + 'active': 1, + 'image': _get_default_image, + 'color': 0, + } def create(self, cr, uid, data, context=None): - employee_id = super(hr_employee, self).create(cr, uid, data, context=context) - try: - (model, mail_group_id) = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'mail', 'group_all_employees') - employee = self.browse(cr, uid, employee_id, context=context) - self.pool.get('mail.group').message_post(cr, uid, [mail_group_id], - body=_('Welcome to %s! Please help him/her take the first steps with OpenERP!') % (employee.name), - subtype='mail.mt_comment', context=context) - except: - pass # group deleted: do not push a message + if context is None: + context = {} + create_ctx = dict(context, mail_create_nolog=True) + employee_id = super(hr_employee, self).create(cr, uid, data, context=create_ctx) + employee = self.browse(cr, uid, employee_id, context=context) + if employee.user_id: + # send a copy to every user of the company + company_id = employee.user_id.partner_id.company_id.id + partner_ids = self.pool.get('res.partner').search(cr, uid, [ + ('company_id', '=', company_id), + ('user_ids', '!=', False)], context=context) + else: + partner_ids = [] + self.message_post(cr, uid, [employee_id], + body=_('Welcome to %s! Please help him/her take the first steps with OpenERP!') % (employee.name), + partner_ids=partner_ids, + subtype='mail.mt_comment', context=context + ) return employee_id def unlink(self, cr, uid, ids, context=None): @@ -246,7 +266,7 @@ class hr_employee(osv.osv): company_id = self.pool.get('res.company').browse(cr, uid, company, context=context) address = self.pool.get('res.partner').address_get(cr, uid, [company_id.partner_id.id], ['default']) address_id = address and address['default'] or False - return {'value': {'address_id' : address_id}} + return {'value': {'address_id': address_id}} def onchange_department_id(self, cr, uid, ids, department_id, context=None): value = {'parent_id': False} @@ -259,17 +279,36 @@ class hr_employee(osv.osv): work_email = False if user_id: work_email = self.pool.get('res.users').browse(cr, uid, user_id, context=context).email - return {'value': {'work_email' : work_email}} - - def _get_default_image(self, cr, uid, context=None): - image_path = get_module_resource('hr', 'static/src/img', 'default_image.png') - return tools.image_resize_image_big(open(image_path, 'rb').read().encode('base64')) - - _defaults = { - 'active': 1, - 'image': _get_default_image, - 'color': 0, - } + return {'value': {'work_email': work_email}} + + def action_follow(self, cr, uid, ids, context=None): + """ Wrapper because message_subscribe_users take a user_ids=None + that receive the context without the wrapper. """ + return self.message_subscribe_users(cr, uid, ids, context=context) + + def action_unfollow(self, cr, uid, ids, context=None): + """ Wrapper because message_unsubscribe_users take a user_ids=None + that receive the context without the wrapper. """ + return self.message_unsubscribe_users(cr, uid, ids, context=context) + + def get_suggested_thread(self, cr, uid, removed_suggested_threads=None, context=None): + """Show the suggestion of employees if display_employees_suggestions if the + user perference allows it. """ + user = self.pool.get('res.users').browse(cr, uid, uid, context) + if not user.display_employees_suggestions: + return [] + else: + return super(hr_employee, self).get_suggested_thread(cr, uid, removed_suggested_threads, context) + + def _message_get_auto_subscribe_fields(self, cr, uid, updated_fields, auto_follow_fields=['user_id'], context=None): + """ Overwrite of the original method to always follow user_id field, + even when not track_visibility so that a user will follow it's employee + """ + user_field_lst = [] + for name, column_info in self._all_columns.items(): + if name in auto_follow_fields and name in updated_fields and column_info.column._obj == 'res.users': + user_field_lst.append(name) + return user_field_lst def _check_recursion(self, cr, uid, ids, context=None): level = 100 @@ -285,6 +324,22 @@ class hr_employee(osv.osv): (_check_recursion, 'Error! You cannot create recursive hierarchy of Employee(s).', ['parent_id']), ] + # --------------------------------------------------- + # Mail gateway + # --------------------------------------------------- + + def check_mail_message_access(self, cr, uid, mids, operation, model_obj=None, context=None): + """ mail.message document permission rule: can post a new message if can read + because of portal document. """ + if not model_obj: + model_obj = self + employee_ids = model_obj.search(cr, uid, [('user_id', '=', uid)], context=context) + if employee_ids and operation == 'create': + model_obj.check_access_rights(cr, uid, 'read') + model_obj.check_access_rule(cr, uid, mids, 'read', context=context) + else: + return super(hr_employee, self).check_mail_message_access(cr, uid, mids, operation, model_obj=model_obj, context=context) + class hr_department(osv.osv): _description = "Department" diff --git a/addons/hr/hr_view.xml b/addons/hr/hr_view.xml index ccd11bc0dc2..eb1bbe451b4 100644 --- a/addons/hr/hr_view.xml +++ b/addons/hr/hr_view.xml @@ -27,6 +27,10 @@ </h1> <label for="category_ids" class="oe_edit_only" groups="base.group_hr_user"/> <field name="category_ids" widget="many2many_tags" placeholder="e.g. Part Time" groups="base.group_hr_user"/> + <label for="work_email" class="oe_edit_only"/> + <field name="work_email" widget="email"/> + <label for="work_phone" class="oe_edit_only"/> + <field name="work_phone"/> </div> <div class="oe_right oe_button_box" name="button_box"> <!-- Put here related buttons --> @@ -36,8 +40,6 @@ <group> <group string="Contact Information"> <field name="address_id" on_change="onchange_address_id(address_id)" context="{'show_address': 1}" options='{"always_reload": True, "highlight_first_line": True}'/> - <field name="work_email" widget="email"/> - <field name="work_phone"/> <field name="mobile_phone"/> <field name="work_location"/> </group> @@ -136,6 +138,9 @@ <field name="arch" type="xml"> <kanban> <field name="last_login"/> + <field name="message_is_follower"/> + <field name="message_follower_ids"/> + <field name="message_ids"/> <templates> <t t-name="kanban-box"> <div class="oe_employee_vignette"> @@ -154,10 +159,19 @@ </li> <li t-if="record.job_id.raw_value"><field name="job_id"/></li> <li t-if="record.work_location.raw_value"><field name="work_location"/></li> - <li t-if="record.work_phone.raw_value">Tel: <field name="work_phone"/></li> - <li t-if="record.mobile_phone.raw_value">Mobile: <field name="mobile_phone"/></li> <li t-if="record.work_email.raw_value"><a t-attf-href="mailto:#{record.work_email.value}"><field name="work_email"/></a></li> </ul> + <div class="oe_kanban_footer_left"> + <span title='Messages'><span class='oe_e'>9</span><t t-esc="record.message_ids.raw_value.length"/></span> + <span title='Followers'><span class='oe_e'>+</span><t t-esc="record.message_follower_ids.raw_value.length"/></span> + </div> + <div class="oe_followers" groups="base.group_user"> + <button t-if="record.message_is_follower.raw_value" name="action_unfollow" type="object" class="oe_follower oe_following"> + <span class="oe_unfollow">Unfollow</span> + <span class="oe_following">Following</span> + </button> + <button t-if="! record.message_is_follower.raw_value" name="action_follow" type="object" class="oe_follower oe_notfollow">Follow</button> + </div> </div> </div> <script> @@ -334,12 +348,10 @@ <h1><field name="name" class="oe_inline"/></h1> </div> <group> - <group> + <group name="job_data"> <field name="no_of_employee" groups="base.group_user"/> <field name="no_of_recruitment" on_change="on_change_expected_employee(no_of_recruitment,no_of_employee)"/> <field name="expected_employees" groups="base.group_user"/> - </group> - <group> <field name="company_id" widget="selection" groups="base.group_multi_company"/> <field name="department_id"/> </group> diff --git a/addons/hr/mail_hr_view.xml b/addons/hr/mail_hr_view.xml new file mode 100644 index 00000000000..203878c7a77 --- /dev/null +++ b/addons/hr/mail_hr_view.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="utf-8"?> +<openerp> + <data> + + <record id="mail.action_mail_inbox_feeds" model="ir.actions.client"> + <field name="params" eval=""{ + 'domain': [ + ('to_read', '=', True), + ('starred', '=', False), + ], + 'view_mailbox': True, + 'view_inbox': True, + 'read_action': 'read', + 'show_compose_message': True + }""/> + </record> + + </data> +</openerp>
\ No newline at end of file diff --git a/addons/hr/res_users.py b/addons/hr/res_users.py new file mode 100644 index 00000000000..c3550596281 --- /dev/null +++ b/addons/hr/res_users.py @@ -0,0 +1,65 @@ +from openerp.osv import fields, osv +from openerp.tools.translate import _ + + +class res_users(osv.Model): + """ Update of res.users class + - if adding groups to an user, check if base.group_user is in it + (member of 'Employee'), create an employee form linked to it. + """ + _name = 'res.users' + _inherit = ['res.users'] + + _columns = { + 'display_employees_suggestions': fields.boolean("Display Employees Suggestions"), + } + + _defaults = { + 'display_employees_suggestions': True, + } + + def __init__(self, pool, cr): + """ Override of __init__ to add access rights on + display_employees_suggestions fields. Access rights are disabled by + default, but allowed on some specific fields defined in + self.SELF_{READ/WRITE}ABLE_FIELDS. + """ + init_res = super(res_users, self).__init__(pool, cr) + # duplicate list to avoid modifying the original reference + self.SELF_WRITEABLE_FIELDS = list(self.SELF_WRITEABLE_FIELDS) + self.SELF_WRITEABLE_FIELDS.append('display_employees_suggestions') + # duplicate list to avoid modifying the original reference + self.SELF_READABLE_FIELDS = list(self.SELF_READABLE_FIELDS) + self.SELF_READABLE_FIELDS.append('display_employees_suggestions') + return init_res + + def stop_showing_employees_suggestions(self, cr, uid, user_id, context=None): + """Update display_employees_suggestions value to False""" + if context is None: + context = {} + self.write(cr, uid, user_id, {"display_employees_suggestions": False}, context) + + def _create_welcome_message(self, cr, uid, user, context=None): + """Do not welcome new users anymore, welcome new employees instead""" + return True + + def _message_post_get_eid(self, cr, uid, thread_id, context=None): + assert thread_id, "res.users does not support posting global messages" + if context and 'thread_model' in context: + context['thread_model'] = 'hr.employee' + if isinstance(thread_id, (list, tuple)): + thread_id = thread_id[0] + return self.pool.get('hr.employee').search(cr, uid, [('user_id', '=', thread_id)], context=context) + + def message_post(self, cr, uid, thread_id, context=None, **kwargs): + """ Redirect the posting of message on res.users to the related employee. + This is done because when giving the context of Chatter on the + various mailboxes, we do not have access to the current partner_id. """ + if kwargs.get('type') == 'email': + return super(res_users, self).message_post(cr, uid, thread_id, context=context, **kwargs) + employee_ids = self._message_post_get_eid(cr, uid, thread_id, context=context) + if not employee_ids: + pass # dpo something + for employee_id in employee_ids: + res = self.pool.get('hr.employee').message_post(cr, uid, employee_id, context=context, **kwargs) + return res diff --git a/addons/hr/res_users_view.xml b/addons/hr/res_users_view.xml new file mode 100644 index 00000000000..0843269e716 --- /dev/null +++ b/addons/hr/res_users_view.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<openerp> + <data> + + <!-- Update user form !--> + <record id="view_users_form_mail" model="ir.ui.view"> + <field name="name">res.users.form.hr</field> + <field name="model">res.users</field> + <field name="inherit_id" ref="mail.view_users_form_mail"/> + <field name="arch" type="xml"> + <data> + <field name="display_groups_suggestions" position="after"> + <field name="display_employees_suggestions"/> + </field> + </data> + </field> + </record> + + </data> +</openerp> diff --git a/addons/hr/static/src/css/hr.css b/addons/hr/static/src/css/hr.css index 16657394736..951ec4d02e3 100644 --- a/addons/hr/static/src/css/hr.css +++ b/addons/hr/static/src/css/hr.css @@ -68,3 +68,8 @@ margin: 2px 0; padding: 0; } + +.openerp .oe_employee_vignette .oe_followers { + width: auto; + float: none; +} diff --git a/addons/hr/static/src/js/suggestions.js b/addons/hr/static/src/js/suggestions.js new file mode 100644 index 00000000000..3bc37e71344 --- /dev/null +++ b/addons/hr/static/src/js/suggestions.js @@ -0,0 +1,78 @@ +openerp.hr = function(session) { + var _t = session.web._t; + var QWeb = session.web.qweb; + + var suggestions = session.suggestions; + var removed_suggested_employee = session.suggestions.removed_suggested_employee = []; + + suggestions.Employees = session.web.Widget.extend({ + events: { + 'click .oe_suggestion_remove.oe_suggestion_employee': 'stop_employee_suggestion', + 'click .oe_suggestion_remove_item.oe_suggestion_employee': 'remove_employee_suggestion', + 'click .oe_suggestion_follow': 'follow_employee', + }, + + init: function () { + this._super(this, arguments); + this.hr_employee = new session.web.DataSetSearch(this, 'hr.employee'); + this.res_users = new session.web.DataSetSearch(this, 'res.users'); + this.employees = []; + }, + + start: function () { + this._super.apply(this, arguments); + return this.fetch_suggested_employee(); + }, + + fetch_suggested_employee: function () { + var self = this; + var employee = self.hr_employee.call('get_suggested_thread', {'removed_suggested_threads': removed_suggested_employee}).then(function (res) { + _(res).each(function (result) { + result['image']=self.session.url('/web/binary/image', {model: 'hr.employee', field: 'image_small', id: result.id}); + }); + self.employees = res; + }); + return $.when(employee).done(this.proxy('display_suggested_employees')); + }, + + display_suggested_employees: function () { + var suggested_employees = this.$('.oe_sidebar_suggestion.oe_suggestion_employee'); + if (suggested_employees) { + suggested_employees.remove(); + } + if (this.employees.length === 0) { + return this.$el.empty(); + } + return this.$el.empty().html(QWeb.render('hr.suggestions.employees', {'widget': this})); + }, + + follow_employee: function (event) { + var self = this; + var employee_id = parseInt($(event.currentTarget).attr('id'), 10); + return this.hr_employee.call('message_subscribe_users', [[employee_id], [this.session.uid], undefined]).then(function(res) { + self.fetch_suggested_employee(); + }); + }, + + remove_employee_suggestion: function (event) { + removed_suggested_employee.push($(event.currentTarget).attr('id')); + return this.fetch_suggested_employee(); + }, + + stop_employee_suggestion: function (event) { + var self = this; + return this.res_users.call('stop_showing_employees_suggestions', [this.session.uid]).then(function(res) { + self.$(".oe_sidebar_suggestion.oe_suggestion_employee").hide(); + }); + } + }); + + session.mail.WallSidebar.include({ + start: function () { + this._super.apply(this, arguments); + var sug_employees = new suggestions.Employees(this); + return sug_employees.appendTo(this.$('.oe_suggestions_employees')); + }, + }); + +}; diff --git a/addons/hr/static/src/xml/suggestions.xml b/addons/hr/static/src/xml/suggestions.xml new file mode 100644 index 00000000000..f3095627bae --- /dev/null +++ b/addons/hr/static/src/xml/suggestions.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<template> + + <!-- Employees placeholder in sidebar --> + <t t-extend="mail.wall.sidebar"> + <t t-jquery=".oe_mail_wall_sidebar" t-operation="append"> + <div class="oe_suggestions_employees"></div> + </t> + </t> + + <!-- Suggested employees --> + <div t-name="hr.suggestions.employees" class="oe_sidebar_suggestion oe_suggestion_employee"> + <div class="oe_suggest_title"> + <a class="oe_suggestion_remove oe_suggestion_employee oe_e">X</a> + <h2>Suggested Employees</h2> + </div> + <div class="oe_suggest_items"> + <t t-foreach="widget.employees" t-as="result"> + <div class="oe_suggested_item"> + <div class="oe_suggested_item_image"> + <a t-attf-href="#model=hr.employee&id=#{result.id}"> + <img t-attf-src="{result.image}" t-attf-alt="{result.name}"/> + </a> + </div> + <div class="oe_suggested_item_content"> + <a class="oe_suggestion_item_name" t-attf-href="#model=hr.employee&id=#{result.id}"><t t-esc="result.name"/></a> + <a class="oe_suggestion_remove_item oe_suggestion_employee oe_e" t-attf-id="{result.id}">X</a> + <br/> + <button class="oe_suggestion_follow" t-att-id="result.id">Follow</button> + </div> + </div> + </t> + </div> + </div> + +</template> diff --git a/addons/hr_attendance/i18n/th.po b/addons/hr_attendance/i18n/th.po new file mode 100644 index 00000000000..673d5e7ddd1 --- /dev/null +++ b/addons/hr_attendance/i18n/th.po @@ -0,0 +1,466 @@ +# Thai translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-20 01:48+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Thai <th@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-21 05:35+0000\n" +"X-Generator: Launchpad (build 16677)\n" + +#. module: hr_attendance +#: model:ir.model,name:hr_attendance.model_hr_attendance_month +msgid "Print Monthly Attendance Report" +msgstr "" + +#. module: hr_attendance +#: view:hr.attendance:0 +msgid "Hr Attendance Search" +msgstr "" + +#. module: hr_attendance +#: field:hr.employee,last_sign:0 +msgid "Last Sign" +msgstr "" + +#. module: hr_attendance +#: view:hr.attendance:0 +#: field:hr.employee,state:0 +#: model:ir.model,name:hr_attendance.model_hr_attendance +msgid "Attendance" +msgstr "" + +#. module: hr_attendance +#. openerp-web +#: code:addons/hr_attendance/static/src/js/attendance.js:34 +#, python-format +msgid "Last sign in: %s,<br />%s.<br />Click to sign out." +msgstr "" + +#. module: hr_attendance +#: constraint:hr.attendance:0 +msgid "Error ! Sign in (resp. Sign out) must follow Sign out (resp. Sign in)" +msgstr "" + +#. module: hr_attendance +#: help:hr.action.reason,name:0 +msgid "Specifies the reason for Signing In/Signing Out." +msgstr "" + +#. module: hr_attendance +#: report:report.hr.timesheet.attendance.error:0 +msgid "" +"(*) A positive delay means that the employee worked less than recorded." +msgstr "" + +#. module: hr_attendance +#: view:hr.attendance.month:0 +msgid "Print Attendance Report Monthly" +msgstr "" + +#. module: hr_attendance +#: code:addons/hr_attendance/report/timesheet.py:120 +#, python-format +msgid "Attendances by Week" +msgstr "" + +#. module: hr_attendance +#: selection:hr.action.reason,action_type:0 +msgid "Sign out" +msgstr "ลงชื่อออก" + +#. module: hr_attendance +#: report:report.hr.timesheet.attendance.error:0 +msgid "Delay" +msgstr "" + +#. module: hr_attendance +#: view:hr.attendance:0 +msgid "Group By..." +msgstr "จัดกลุ่มตาม..." + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "October" +msgstr "ตุลาคม" + +#. module: hr_attendance +#: field:hr.employee,attendance_access:0 +msgid "Attendance Access" +msgstr "" + +#. module: hr_attendance +#: code:addons/hr_attendance/hr_attendance.py:154 +#: selection:hr.attendance,action:0 +#: view:hr.employee:0 +#, python-format +msgid "Sign Out" +msgstr "ออกจากระบบ" + +#. module: hr_attendance +#: code:addons/hr_attendance/wizard/hr_attendance_error.py:49 +#, python-format +msgid "No records are found for your selection!" +msgstr "" + +#. module: hr_attendance +#: view:hr.attendance.error:0 +#: view:hr.attendance.month:0 +#: view:hr.attendance.week:0 +msgid "Print" +msgstr "พิมพ์" + +#. module: hr_attendance +#: view:hr.attendance:0 +#: field:hr.attendance,employee_id:0 +#: model:ir.model,name:hr_attendance.model_hr_employee +msgid "Employee" +msgstr "พนักงาน" + +#. module: hr_attendance +#: field:hr.attendance.month,month:0 +msgid "Month" +msgstr "เดือน" + +#. module: hr_attendance +#: report:report.hr.timesheet.attendance.error:0 +msgid "Date Recorded" +msgstr "" + +#. module: hr_attendance +#: code:addons/hr_attendance/hr_attendance.py:154 +#: selection:hr.attendance,action:0 +#: view:hr.employee:0 +#, python-format +msgid "Sign In" +msgstr "เข้าสู่ระบบ" + +#. module: hr_attendance +#: field:hr.attendance.error,init_date:0 +#: field:hr.attendance.week,init_date:0 +msgid "Starting Date" +msgstr "วันที่เริ่ม" + +#. module: hr_attendance +#: model:ir.actions.act_window,name:hr_attendance.open_view_attendance +#: model:ir.ui.menu,name:hr_attendance.menu_hr_attendance +#: model:ir.ui.menu,name:hr_attendance.menu_open_view_attendance +msgid "Attendances" +msgstr "" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "March" +msgstr "มีนาคม" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "August" +msgstr "สิงหาคม" + +#. module: hr_attendance +#: code:addons/hr_attendance/hr_attendance.py:161 +#, python-format +msgid "Warning" +msgstr "คำเตือน" + +#. module: hr_attendance +#: help:hr.config.settings,group_hr_attendance:0 +msgid "Allocates attendance group to all users." +msgstr "" + +#. module: hr_attendance +#: view:hr.attendance:0 +msgid "My Attendance" +msgstr "" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "June" +msgstr "มิถุนายน" + +#. module: hr_attendance +#: code:addons/hr_attendance/report/attendance_by_month.py:190 +#, python-format +msgid "Attendances by Month" +msgstr "" + +#. module: hr_attendance +#: model:ir.actions.act_window,name:hr_attendance.action_hr_attendance_week +msgid "Attendances By Week" +msgstr "" + +#. module: hr_attendance +#: model:ir.model,name:hr_attendance.model_hr_attendance_error +msgid "Print Error Attendance Report" +msgstr "" + +#. module: hr_attendance +#: report:report.hr.timesheet.attendance.error:0 +msgid "Total period:" +msgstr "" + +#. module: hr_attendance +#: field:hr.action.reason,name:0 +msgid "Reason" +msgstr "เหตุผล" + +#. module: hr_attendance +#: view:hr.attendance.error:0 +msgid "Print Attendance Report Error" +msgstr "" + +#. module: hr_attendance +#: model:ir.actions.act_window,help:hr_attendance.open_view_attendance +msgid "" +"The Time Tracking functionality aims to manage employee attendances from " +"Sign in/Sign out actions. You can also link this feature to an attendance " +"device using OpenERP's web service features." +msgstr "" + +#. module: hr_attendance +#: view:hr.attendance:0 +msgid "Today" +msgstr "วันนี้" + +#. module: hr_attendance +#: report:report.hr.timesheet.attendance.error:0 +msgid "Date Signed" +msgstr "" + +#. module: hr_attendance +#: field:hr.attendance,name:0 +msgid "Date" +msgstr "วันที่" + +#. module: hr_attendance +#: field:hr.config.settings,group_hr_attendance:0 +msgid "Track attendances for all employees" +msgstr "" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "July" +msgstr "กรกฎาคม" + +#. module: hr_attendance +#: model:ir.actions.act_window,name:hr_attendance.action_hr_attendance_error +#: model:ir.actions.report.xml,name:hr_attendance.attendance_error_report +msgid "Attendance Error Report" +msgstr "" + +#. module: hr_attendance +#: view:hr.attendance:0 +#: field:hr.attendance,day:0 +msgid "Day" +msgstr "วัน" + +#. module: hr_attendance +#: selection:hr.employee,state:0 +msgid "Present" +msgstr "นำเสนอ" + +#. module: hr_attendance +#: selection:hr.employee,state:0 +msgid "Absent" +msgstr "ขาด" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "February" +msgstr "กุมภาพันธ์" + +#. module: hr_attendance +#: field:hr.attendance,action_desc:0 +#: model:ir.model,name:hr_attendance.model_hr_action_reason +msgid "Action Reason" +msgstr "" + +#. module: hr_attendance +#: field:hr.attendance.month,year:0 +msgid "Year" +msgstr "ปี" + +#. module: hr_attendance +#: report:report.hr.timesheet.attendance.error:0 +msgid "Min Delay" +msgstr "" + +#. module: hr_attendance +#: view:hr.attendance:0 +msgid "Employee attendances" +msgstr "" + +#. module: hr_attendance +#: view:hr.action.reason:0 +msgid "Define attendance reason" +msgstr "" + +#. module: hr_attendance +#: selection:hr.action.reason,action_type:0 +msgid "Sign in" +msgstr "ลงชื่อเข้าใช้" + +#. module: hr_attendance +#: view:hr.attendance.error:0 +msgid "Analysis Information" +msgstr "" + +#. module: hr_attendance +#: model:ir.actions.act_window,name:hr_attendance.action_hr_attendance_month +msgid "Attendances By Month" +msgstr "" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "January" +msgstr "มกราคม" + +#. module: hr_attendance +#: code:addons/hr_attendance/wizard/hr_attendance_error.py:49 +#, python-format +msgid "No Data Available !" +msgstr "" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "April" +msgstr "เมษายน" + +#. module: hr_attendance +#: view:hr.attendance.week:0 +msgid "Print Attendance Report Weekly" +msgstr "" + +#. module: hr_attendance +#: report:report.hr.timesheet.attendance.error:0 +msgid "Attendance Errors" +msgstr "" + +#. module: hr_attendance +#: field:hr.attendance,action:0 +#: selection:hr.attendance,action:0 +msgid "Action" +msgstr "ปฏิบัติ" + +#. module: hr_attendance +#: model:ir.ui.menu,name:hr_attendance.menu_hr_time_tracking +msgid "Time Tracking" +msgstr "ติดตามเวลา" + +#. module: hr_attendance +#: model:ir.actions.act_window,name:hr_attendance.open_view_attendance_reason +#: model:ir.ui.menu,name:hr_attendance.menu_open_view_attendance_reason +msgid "Attendance Reasons" +msgstr "" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "November" +msgstr "พฤศจิกายน" + +#. module: hr_attendance +#: view:hr.attendance.error:0 +msgid "Bellow this delay, the error is considered to be voluntary" +msgstr "" + +#. module: hr_attendance +#: field:hr.attendance.error,max_delay:0 +msgid "Max. Delay (Min)" +msgstr "" + +#. module: hr_attendance +#: field:hr.attendance.error,end_date:0 +#: field:hr.attendance.week,end_date:0 +msgid "Ending Date" +msgstr "" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "September" +msgstr "กันยายน" + +#. module: hr_attendance +#: view:hr.action.reason:0 +msgid "Attendance reasons" +msgstr "" + +#. module: hr_attendance +#: model:ir.model,name:hr_attendance.model_hr_attendance_week +msgid "Print Week Attendance Report" +msgstr "" + +#. module: hr_attendance +#: model:ir.model,name:hr_attendance.model_hr_config_settings +msgid "hr.config.settings" +msgstr "hr.config.settings" + +#. module: hr_attendance +#. openerp-web +#: code:addons/hr_attendance/static/src/js/attendance.js:36 +#, python-format +msgid "Click to Sign In at %s." +msgstr "" + +#. module: hr_attendance +#: field:hr.action.reason,action_type:0 +msgid "Action Type" +msgstr "ชนิดการทำงาน" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "May" +msgstr "พฤษภาคม" + +#. module: hr_attendance +#: code:addons/hr_attendance/hr_attendance.py:161 +#, python-format +msgid "" +"You tried to %s with a date anterior to another event !\n" +"Try to contact the HR Manager to correct attendances." +msgstr "" + +#. module: hr_attendance +#: selection:hr.attendance.month,month:0 +msgid "December" +msgstr "ธันวาคม" + +#. module: hr_attendance +#: view:hr.attendance.error:0 +#: view:hr.attendance.month:0 +#: view:hr.attendance.week:0 +msgid "Cancel" +msgstr "ยกเลิก" + +#. module: hr_attendance +#: report:report.hr.timesheet.attendance.error:0 +msgid "Operation" +msgstr "ปฏิบัติการ" + +#. module: hr_attendance +#: report:report.hr.timesheet.attendance.error:0 +msgid "" +"(*) A negative delay means that the employee worked more than encoded." +msgstr "" + +#. module: hr_attendance +#: view:hr.attendance.error:0 +#: view:hr.attendance.month:0 +#: view:hr.attendance.week:0 +msgid "or" +msgstr "หรือ" + +#. module: hr_attendance +#: help:hr.attendance,action_desc:0 +msgid "" +"Specifies the reason for Signing In/Signing Out in case of extra hours." +msgstr "" diff --git a/addons/hr_contract/i18n/th.po b/addons/hr_contract/i18n/th.po new file mode 100644 index 00000000000..faa98497b01 --- /dev/null +++ b/addons/hr_contract/i18n/th.po @@ -0,0 +1,232 @@ +# Thai translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-15 17:09+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Thai <th@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-16 04:38+0000\n" +"X-Generator: Launchpad (build 16667)\n" + +#. module: hr_contract +#: field:hr.contract,wage:0 +msgid "Wage" +msgstr "" + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Information" +msgstr "ข้อมูล" + +#. module: hr_contract +#: field:hr.contract,trial_date_start:0 +msgid "Trial Start Date" +msgstr "วันที่เริ่มต้นการทดลอง" + +#. module: hr_contract +#: field:hr.employee,vehicle:0 +msgid "Company Vehicle" +msgstr "" + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Group By..." +msgstr "จัดกลุ่มตาม..." + +#. module: hr_contract +#: field:hr.contract,department_id:0 +msgid "Department" +msgstr "แผนก" + +#. 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 "พนักงาน" + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Search Contract" +msgstr "" + +#. module: hr_contract +#: view:hr.contract:0 +#: view:hr.employee:0 +#: field:hr.employee,contract_ids:0 +#: model:ir.actions.act_window,name:hr_contract.act_hr_employee_2_hr_contract +#: model:ir.actions.act_window,name:hr_contract.action_hr_contract +#: model:ir.ui.menu,name:hr_contract.hr_menu_contract +msgid "Contracts" +msgstr "สัญญา" + +#. module: hr_contract +#: field:hr.employee,children:0 +msgid "Number of Children" +msgstr "จำนวนบุตร" + +#. module: hr_contract +#: help:hr.employee,contract_id:0 +msgid "Latest contract of the employee" +msgstr "" + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Job" +msgstr "งาน" + +#. module: hr_contract +#: field:hr.contract,advantages:0 +msgid "Advantages" +msgstr "" + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Work Permit" +msgstr "ใบอนุญาตทำงาน" + +#. 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 "ประเภทสัญญา" + +#. module: hr_contract +#: view:hr.employee:0 +msgid "Medical Exam" +msgstr "" + +#. module: hr_contract +#: field:hr.contract,date_end:0 +msgid "End Date" +msgstr "วันสิ้นสุด" + +#. module: hr_contract +#: help:hr.contract,wage:0 +msgid "Basic Salary of the employee" +msgstr "เงินเดือนของพนักงาน" + +#. module: hr_contract +#: view:hr.contract:0 +#: field:hr.contract,name:0 +msgid "Contract Reference" +msgstr "อ้างอิงตามสัญญา" + +#. module: hr_contract +#: help:hr.employee,vehicle_distance:0 +msgid "In kilometers" +msgstr "" + +#. module: hr_contract +#: view:hr.contract:0 +#: field:hr.contract,notes:0 +msgid "Notes" +msgstr "" + +#. module: hr_contract +#: field:hr.contract,permit_no:0 +msgid "Work Permit No" +msgstr "" + +#. module: hr_contract +#: view:hr.contract:0 +#: view:hr.employee:0 +#: field:hr.employee,contract_id:0 +#: model:ir.model,name:hr_contract.model_hr_contract +#: model:ir.ui.menu,name:hr_contract.next_id_56 +msgid "Contract" +msgstr "" + +#. module: hr_contract +#: view:hr.contract:0 +#: field:hr.contract,type_id:0 +#: view:hr.contract.type:0 +#: field:hr.contract.type,name:0 +#: model:ir.model,name:hr_contract.model_hr_contract_type +msgid "Contract Type" +msgstr "" + +#. module: hr_contract +#: view:hr.contract:0 +#: field:hr.contract,working_hours:0 +msgid "Working Schedule" +msgstr "" + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Salary and Advantages" +msgstr "" + +#. module: hr_contract +#: field:hr.contract,job_id:0 +msgid "Job Title" +msgstr "" + +#. module: hr_contract +#: constraint:hr.contract:0 +msgid "Error! Contract start-date must be less than contract end-date." +msgstr "" + +#. module: hr_contract +#: field:hr.employee,manager:0 +msgid "Is a Manager" +msgstr "" + +#. module: hr_contract +#: field:hr.contract,date_start:0 +msgid "Start Date" +msgstr "" + +#. module: hr_contract +#: field:hr.contract,visa_no:0 +msgid "Visa No" +msgstr "" + +#. module: hr_contract +#: field:hr.employee,vehicle_distance:0 +msgid "Home-Work Dist." +msgstr "" + +#. module: hr_contract +#: field:hr.employee,place_of_birth:0 +msgid "Place of Birth" +msgstr "" + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Trial Period Duration" +msgstr "" + +#. module: hr_contract +#: view:hr.contract:0 +msgid "Duration" +msgstr "" + +#. module: hr_contract +#: field:hr.contract,visa_expire:0 +msgid "Visa Expire Date" +msgstr "" + +#. module: hr_contract +#: field:hr.employee,medic_exam:0 +msgid "Medical Examination Date" +msgstr "" + +#. module: hr_contract +#: field:hr.contract,trial_date_end:0 +msgid "Trial End Date" +msgstr "" + +#. module: hr_contract +#: view:hr.contract.type:0 +msgid "Search Contract Type" +msgstr "" diff --git a/addons/hr_evaluation/hr_evaluation_view.xml b/addons/hr_evaluation/hr_evaluation_view.xml index 2462daa6301..f76f8236b4d 100644 --- a/addons/hr_evaluation/hr_evaluation_view.xml +++ b/addons/hr_evaluation/hr_evaluation_view.xml @@ -165,9 +165,14 @@ </header> <sheet> <label for="employee_id" class="oe_edit_only"/> - <h1><field name="employee_id" on_change="onchange_employee_id(employee_id)" class="oe_inline"/>, <field name="date" class="oe_inline"/></h1> + <h1><field name="employee_id" class="oe_inline" + attrs="{'readonly': [('state', '=', 'done')]}" + on_change="onchange_employee_id(employee_id)"/>, + <field name="date" + attrs="{'readonly': [('state', '=', 'done')]}"/> + </h1> <label for="plan_id" class="oe_edit_only"/> - <h2><field name="plan_id"/></h2> + <h2><field name="plan_id" attrs="{'readonly': [('state', '=', 'done')]}"/></h2> <group> <group colspan="4" attrs="{'invisible':['|', ('state','=','draft'), ('state', '=', 'wait')]}"> <field name="rating" attrs="{'readonly':[('state','<>','progress')]}"/> @@ -175,7 +180,7 @@ </group> </group> <group string="Appraisal Forms" attrs="{'invisible':[('state','=','draft')]}"> - <field nolabel="1" name="survey_request_ids"> + <field nolabel="1" name="survey_request_ids" attrs="{'readonly': [('state', '=', 'done')]}"> <form string="Interview Appraisal" version="7.0"> <div class="oe_right oe_button_box"> <button name="%(survey.action_view_survey_question_message)d" string="Answer Survey" type="action" states="waiting_answer" icon="gtk-execute" context="{'survey_id': survey_id, 'response_id': [response], 'response_no':0, 'active' : response,'request' : True, 'object' : 'hr.evaluation.interview', 'cur_id' : active_id}" attrs="{'readonly':[('survey_id','=',False)]}"/> diff --git a/addons/hr_expense/hr_expense_view.xml b/addons/hr_expense/hr_expense_view.xml index ca882406d63..a383f72e2ab 100644 --- a/addons/hr_expense/hr_expense_view.xml +++ b/addons/hr_expense/hr_expense_view.xml @@ -210,6 +210,11 @@ <field name="context">{"default_hr_expense_ok":1}</field> <field name="domain">[('hr_expense_ok','=',True)]</field> <field name="search_view_id" ref="product.product_search_form_view"/> + <field name="help" type="html"> + <p class="oe_view_nocontent_create"> + Click to create a new expense category. + </p> + </field> </record> <menuitem id="menu_hr_product" name="Expense Categories" parent="hr.menu_hr_configuration" action="hr_expense_product"/> diff --git a/addons/hr_expense/i18n/th.po b/addons/hr_expense/i18n/th.po new file mode 100644 index 00000000000..c3e70f447d8 --- /dev/null +++ b/addons/hr_expense/i18n/th.po @@ -0,0 +1,939 @@ +# Thai translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:04+0000\n" +"PO-Revision-Date: 2013-06-20 10:09+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Thai <th@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-21 05:35+0000\n" +"X-Generator: Launchpad (build 16677)\n" + +#. module: hr_expense +#: view:hr.expense.expense:0 +#: model:process.node,name:hr_expense.process_node_confirmedexpenses0 +msgid "Confirmed Expenses" +msgstr "" + +#. module: hr_expense +#: model:ir.model,name:hr_expense.model_hr_expense_line +msgid "Expense Line" +msgstr "" + +#. module: hr_expense +#: model:process.node,note:hr_expense.process_node_reimbursement0 +msgid "The accoutant reimburse the expenses" +msgstr "" + +#. module: hr_expense +#: model:mail.message.subtype,description:hr_expense.mt_expense_approved +msgid "Expense approved" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.expense,date_confirm:0 +#: field:hr.expense.report,date_confirm:0 +msgid "Confirmation Date" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +#: view:hr.expense.report:0 +msgid "Group By..." +msgstr "จัดกลุ่มตาม..." + +#. module: hr_expense +#: model:product.template,name:hr_expense.air_ticket_product_template +msgid "Air Ticket" +msgstr "" + +#. module: hr_expense +#: report:hr.expense:0 +msgid "Validated By" +msgstr "ตรวจสอบโดย" + +#. module: hr_expense +#: view:hr.expense.expense:0 +#: field:hr.expense.expense,department_id:0 +#: view:hr.expense.report:0 +#: field:hr.expense.report,department_id:0 +msgid "Department" +msgstr "แผนก" + +#. module: hr_expense +#: view:hr.expense.expense:0 +msgid "New Expense" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.line,uom_id:0 +#: view:product.product:0 +msgid "Unit of Measure" +msgstr "หน่วยของการวัด" + +#. module: hr_expense +#: selection:hr.expense.report,month:0 +msgid "March" +msgstr "มีนาคม" + +#. module: hr_expense +#: field:hr.expense.expense,message_unread:0 +msgid "Unread Messages" +msgstr "ข้อความที่ไม่ได้อ่าน" + +#. module: hr_expense +#: field:hr.expense.expense,company_id:0 +#: view:hr.expense.report:0 +#: field:hr.expense.report,company_id:0 +msgid "Company" +msgstr "บริษัท" + +#. module: hr_expense +#: view:hr.expense.expense:0 +msgid "Set to Draft" +msgstr "กำหนดให้เป็นแบบร่าง" + +#. module: hr_expense +#: view:hr.expense.expense:0 +msgid "To Pay" +msgstr "" + +#. module: hr_expense +#: code:addons/hr_expense/hr_expense.py:172 +#, python-format +msgid "" +"No expense journal found. Please make sure you have a journal with type " +"'purchase' configured." +msgstr "" + +#. module: hr_expense +#: model:ir.model,name:hr_expense.model_hr_expense_report +msgid "Expenses Statistics" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +msgid "Open Receipt" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.report:0 +#: field:hr.expense.report,day:0 +msgid "Day" +msgstr "วัน" + +#. module: hr_expense +#: help:hr.expense.expense,date_valid:0 +msgid "" +"Date of the acceptation of the sheet expense. It's filled when the button " +"Accept is pressed." +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +msgid "Notes" +msgstr "บันทึกย่อ" + +#. module: hr_expense +#: field:hr.expense.expense,message_ids:0 +msgid "Messages" +msgstr "ข้อความ" + +#. module: hr_expense +#: code:addons/hr_expense/hr_expense.py:172 +#: code:addons/hr_expense/hr_expense.py:238 +#: code:addons/hr_expense/hr_expense.py:240 +#: code:addons/hr_expense/hr_expense.py:349 +#: code:addons/hr_expense/hr_expense.py:353 +#, python-format +msgid "Error!" +msgstr "" + +#. module: hr_expense +#: model:mail.message.subtype,description:hr_expense.mt_expense_refused +msgid "Expense refused" +msgstr "" + +#. module: hr_expense +#: model:ir.actions.act_window,name:hr_expense.hr_expense_product +#: view:product.product:0 +msgid "Products" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.report:0 +msgid "Confirm Expenses" +msgstr "" + +#. module: hr_expense +#: selection:hr.expense.report,state:0 +msgid "Cancelled" +msgstr "ยกเลิกแล้ว" + +#. module: hr_expense +#: model:process.node,note:hr_expense.process_node_refused0 +msgid "The direct manager refuses the sheet.Reset as draft." +msgstr "" + +#. module: hr_expense +#: help:hr.expense.expense,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "" + +#. module: hr_expense +#: selection:hr.expense.report,state:0 +msgid "Waiting confirmation" +msgstr "" + +#. module: hr_expense +#: selection:hr.expense.report,state:0 +msgid "Accepted" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.line,ref:0 +msgid "Reference" +msgstr "" + +#. module: hr_expense +#: report:hr.expense:0 +msgid "Certified honest and conform," +msgstr "" + +#. module: hr_expense +#: help:hr.expense.expense,state:0 +msgid "" +"When the expense request is created the status is 'Draft'.\n" +" It is confirmed by the user and request is sent to admin, the status is " +"'Waiting Confirmation'. \n" +"If the admin accepts it, the status is 'Accepted'.\n" +" If a receipt is made for the expense request, the status is 'Done'." +msgstr "" + +#. module: hr_expense +#: help:hr.expense.expense,date_confirm:0 +msgid "" +"Date of the confirmation of the sheet expense. It's filled when the button " +"Confirm is pressed." +msgstr "" + +#. module: hr_expense +#: view:hr.expense.report:0 +#: field:hr.expense.report,nbr:0 +msgid "# of Lines" +msgstr "" + +#. module: hr_expense +#: help:hr.expense.expense,message_summary:0 +msgid "" +"Holds the Chatter summary (number of messages, ...). This summary is " +"directly in html format in order to be inserted in kanban views." +msgstr "" + +#. module: hr_expense +#: code:addons/hr_expense/hr_expense.py:453 +#, python-format +msgid "Warning" +msgstr "" + +#. module: hr_expense +#: report:hr.expense:0 +msgid "(Date and signature)" +msgstr "" + +#. module: hr_expense +#: report:hr.expense:0 +msgid "Total:" +msgstr "" + +#. module: hr_expense +#: model:process.transition,name:hr_expense.process_transition_refuseexpense0 +msgid "Refuse expense" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.report,price_average:0 +msgid "Average Price" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +#: model:process.transition.action,name:hr_expense.process_transition_action_confirm0 +msgid "Confirm" +msgstr "" + +#. module: hr_expense +#: model:process.node,note:hr_expense.process_node_supplierinvoice0 +msgid "The accoutant validates the sheet" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.report,delay_valid:0 +msgid "Delay to Valid" +msgstr "" + +#. module: hr_expense +#: help:hr.expense.line,sequence:0 +msgid "Gives the sequence order when displaying a list of expense lines." +msgstr "" + +#. module: hr_expense +#: field:hr.expense.expense,state:0 +#: view:hr.expense.report:0 +#: field:hr.expense.report,state:0 +msgid "Status" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.line,analytic_account:0 +#: view:hr.expense.report:0 +#: field:hr.expense.report,analytic_account:0 +msgid "Analytic account" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.report,date:0 +msgid "Date " +msgstr "" + +#. module: hr_expense +#: view:hr.expense.report:0 +msgid "Waiting" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.expense,message_follower_ids:0 +msgid "Followers" +msgstr "" + +#. module: hr_expense +#: report:hr.expense:0 +#: view:hr.expense.expense:0 +#: field:hr.expense.expense,employee_id:0 +#: view:hr.expense.report:0 +msgid "Employee" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +#: selection:hr.expense.expense,state:0 +msgid "New" +msgstr "" + +#. module: hr_expense +#: report:hr.expense:0 +#: field:hr.expense.report,product_qty:0 +msgid "Qty" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.report:0 +#: field:hr.expense.report,price_total:0 +msgid "Total Price" +msgstr "" + +#. module: hr_expense +#: model:process.node,note:hr_expense.process_node_reinvoicing0 +msgid "Some costs may be reinvoices to the customer" +msgstr "" + +#. module: hr_expense +#: code:addons/hr_expense/hr_expense.py:238 +#, python-format +msgid "The employee must have a home address." +msgstr "" + +#. module: hr_expense +#: view:board.board:0 +#: view:hr.expense.expense:0 +#: model:ir.actions.act_window,name:hr_expense.action_my_expense +msgid "My Expenses" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.report:0 +msgid "Creation Date" +msgstr "" + +#. module: hr_expense +#: model:ir.actions.report.xml,name:hr_expense.hr_expenses +msgid "HR expenses" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.expense,id:0 +msgid "Sheet ID" +msgstr "" + +#. module: hr_expense +#: model:process.transition,name:hr_expense.process_transition_reimburseexpense0 +msgid "Reimburse expense" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.expense,journal_id:0 +#: field:hr.expense.report,journal_id:0 +msgid "Force Journal" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.report:0 +#: field:hr.expense.report,no_of_products:0 +msgid "# of Products" +msgstr "" + +#. module: hr_expense +#: selection:hr.expense.report,month:0 +msgid "July" +msgstr "" + +#. module: hr_expense +#: model:process.transition,note:hr_expense.process_transition_reimburseexpense0 +msgid "After creating invoice, reimburse expenses" +msgstr "" + +#. module: hr_expense +#: code:addons/hr_expense/hr_expense.py:121 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: hr_expense +#: model:process.node,name:hr_expense.process_node_reimbursement0 +msgid "Reimbursement" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.expense,date_valid:0 +#: field:hr.expense.report,date_valid:0 +msgid "Validation Date" +msgstr "" + +#. module: hr_expense +#: code:addons/hr_expense/hr_expense.py:226 +#, python-format +msgid "Expense Receipt" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.report:0 +#: model:ir.actions.act_window,name:hr_expense.action_hr_expense_report_all +#: model:ir.ui.menu,name:hr_expense.menu_hr_expense_report_all +msgid "Expenses Analysis" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +#: field:hr.expense.line,expense_id:0 +#: model:ir.model,name:hr_expense.model_hr_expense_expense +#: model:process.process,name:hr_expense.process_process_expenseprocess0 +msgid "Expense" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +#: field:hr.expense.expense,line_ids:0 +#: view:hr.expense.line:0 +msgid "Expense Lines" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.report,delay_confirm:0 +msgid "Delay to Confirm" +msgstr "" + +#. module: hr_expense +#: selection:hr.expense.report,month:0 +msgid "September" +msgstr "" + +#. module: hr_expense +#: selection:hr.expense.report,month:0 +msgid "December" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +#: view:hr.expense.report:0 +#: field:hr.expense.report,month:0 +msgid "Month" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.expense,currency_id:0 +#: field:hr.expense.report,currency_id:0 +msgid "Currency" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.expense,voucher_id:0 +msgid "Employee's Receipt" +msgstr "" + +#. module: hr_expense +#: selection:hr.expense.expense,state:0 +msgid "Waiting Approval" +msgstr "" + +#. module: hr_expense +#: model:process.node,note:hr_expense.process_node_draftexpenses0 +msgid "Employee encode all his expenses" +msgstr "" + +#. module: hr_expense +#: code:addons/hr_expense/hr_expense.py:453 +#, python-format +msgid "" +"Selected Unit of Measure does not belong to the same category as the product " +"Unit of Measure" +msgstr "" + +#. module: hr_expense +#: help:hr.expense.expense,journal_id:0 +msgid "The journal used when the expense is done." +msgstr "" + +#. module: hr_expense +#: field:hr.expense.expense,note:0 +msgid "Note" +msgstr "" + +#. module: hr_expense +#: model:process.transition,note:hr_expense.process_transition_reimbursereinvoice0 +msgid "Create Customer invoice" +msgstr "" + +#. module: hr_expense +#: selection:hr.expense.report,state:0 +msgid "Draft" +msgstr "" + +#. module: hr_expense +#: code:addons/hr_expense/hr_expense.py:353 +#, python-format +msgid "" +"Please configure Default Expense account for Product purchase: " +"`property_account_expense_categ`." +msgstr "" + +#. module: hr_expense +#: model:process.transition,note:hr_expense.process_transition_approveexpense0 +msgid "Expense is approved." +msgstr "" + +#. module: hr_expense +#: selection:hr.expense.report,month:0 +msgid "August" +msgstr "" + +#. module: hr_expense +#: model:process.node,note:hr_expense.process_node_approved0 +msgid "The direct manager approves the sheet" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +#: field:hr.expense.expense,amount:0 +msgid "Total Amount" +msgstr "" + +#. module: hr_expense +#: selection:hr.expense.report,month:0 +msgid "June" +msgstr "" + +#. module: hr_expense +#: model:process.node,name:hr_expense.process_node_draftexpenses0 +msgid "Draft Expenses" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.expense,message_is_follower:0 +msgid "Is a Follower" +msgstr "" + +#. module: hr_expense +#: model:ir.actions.act_window,name:hr_expense.product_normal_form_view_installer +msgid "Review Your Expenses Products" +msgstr "" + +#. module: hr_expense +#: report:hr.expense:0 +#: field:hr.expense.expense,date:0 +#: field:hr.expense.line,date_value:0 +msgid "Date" +msgstr "" + +#. module: hr_expense +#: selection:hr.expense.report,month:0 +msgid "November" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: hr_expense +#: field:hr.expense.expense,user_id:0 +msgid "User" +msgstr "" + +#. module: hr_expense +#: model:ir.ui.menu,name:hr_expense.menu_hr_product +msgid "Expense Categories" +msgstr "" + +#. module: hr_expense +#: selection:hr.expense.report,month:0 +msgid "October" +msgstr "" + +#. module: hr_expense +#: model:ir.actions.act_window,help:hr_expense.expense_all +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to register new expenses. \n" +" </p><p>\n" +" OpenERP will ensure the whole process is followed; the " +"expense\n" +" sheet is validated by manager(s), the employee is " +"reimbursed\n" +" from his expenses, some expenses must be re-invoiced to the\n" +" customers.\n" +" </p>\n" +" " +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +msgid "Generate Accounting Entries" +msgstr "" + +#. module: hr_expense +#: selection:hr.expense.report,month:0 +msgid "January" +msgstr "" + +#. module: hr_expense +#: report:hr.expense:0 +msgid "HR Expenses" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.expense,message_summary:0 +msgid "Summary" +msgstr "" + +#. module: hr_expense +#: model:product.template,name:hr_expense.car_travel_product_template +msgid "Car Travel Expenses" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +msgid "Submit to Manager" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.report:0 +msgid "Done Expenses" +msgstr "" + +#. module: hr_expense +#: model:process.node,note:hr_expense.process_node_confirmedexpenses0 +msgid "The employee validates his expense sheet" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +msgid "Expenses to Invoice" +msgstr "" + +#. module: hr_expense +#: model:process.node,name:hr_expense.process_node_supplierinvoice0 +#: model:process.transition,name:hr_expense.process_transition_approveinvoice0 +msgid "Supplier Invoice" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +msgid "Expenses Sheet" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.report,voucher_id:0 +msgid "Receipt" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.report:0 +msgid "Approved Expenses" +msgstr "" + +#. module: hr_expense +#: report:hr.expense:0 +#: field:hr.expense.line,unit_amount:0 +msgid "Unit Price" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.report:0 +#: selection:hr.expense.report,state:0 +msgid "Done" +msgstr "" + +#. module: hr_expense +#: model:process.transition.action,name:hr_expense.process_transition_action_supplierinvoice0 +msgid "Invoice" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.report:0 +#: field:hr.expense.report,year:0 +msgid "Year" +msgstr "" + +#. module: hr_expense +#: model:process.transition,name:hr_expense.process_transition_reimbursereinvoice0 +msgid "Reinvoice" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +msgid "Expense Date" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.expense,user_valid:0 +msgid "Validation By" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +#: model:process.transition.action,name:hr_expense.process_transition_action_refuse0 +msgid "Refuse" +msgstr "" + +#. module: hr_expense +#: model:process.transition,name:hr_expense.process_transition_confirmexpense0 +msgid "Confirm expense" +msgstr "" + +#. module: hr_expense +#: model:process.transition,name:hr_expense.process_transition_approveexpense0 +msgid "Approve expense" +msgstr "" + +#. module: hr_expense +#: model:process.transition.action,name:hr_expense.process_transition_action_accept0 +msgid "Accept" +msgstr "" + +#. module: hr_expense +#: report:hr.expense:0 +msgid "This document must be dated and signed for reimbursement" +msgstr "" + +#. module: hr_expense +#: model:process.transition,note:hr_expense.process_transition_refuseexpense0 +msgid "Expense is refused." +msgstr "" + +#. module: hr_expense +#: model:ir.actions.act_window,help:hr_expense.product_normal_form_view_installer +msgid "" +"Define one product for each expense type allowed for an employee (travel by " +"car, hostel, restaurant, etc). If you reimburse the employees at a fixed " +"rate, set a cost and a unit of measure on the product. If you reimburse " +"based on real costs, set the cost at 0.00. The user will set the real price " +"when recording his expense sheet." +msgstr "" + +#. module: hr_expense +#: selection:hr.expense.expense,state:0 +#: view:hr.expense.report:0 +#: model:mail.message.subtype,name:hr_expense.mt_expense_approved +#: model:process.node,name:hr_expense.process_node_approved0 +msgid "Approved" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.line,product_id:0 +#: view:hr.expense.report:0 +#: field:hr.expense.report,product_id:0 +#: model:ir.model,name:hr_expense.model_product_product +msgid "Product" +msgstr "" + +#. module: hr_expense +#: report:hr.expense:0 +#: view:hr.expense.expense:0 +#: field:hr.expense.expense,name:0 +#: field:hr.expense.line,description:0 +msgid "Description" +msgstr "" + +#. module: hr_expense +#: selection:hr.expense.report,month:0 +msgid "May" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.line,unit_quantity:0 +msgid "Quantities" +msgstr "" + +#. module: hr_expense +#: report:hr.expense:0 +msgid "Price" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.report,no_of_account:0 +msgid "# of Accounts" +msgstr "" + +#. module: hr_expense +#: selection:hr.expense.expense,state:0 +#: model:mail.message.subtype,name:hr_expense.mt_expense_refused +#: model:process.node,name:hr_expense.process_node_refused0 +msgid "Refused" +msgstr "" + +#. module: hr_expense +#: field:product.product,hr_expense_ok:0 +msgid "Can be Expensed" +msgstr "" + +#. module: hr_expense +#: model:mail.message.subtype,description:hr_expense.mt_expense_confirmed +msgid "Expense confirmed, waiting confirmation" +msgstr "" + +#. module: hr_expense +#: report:hr.expense:0 +msgid "Ref." +msgstr "" + +#. module: hr_expense +#: field:hr.expense.report,employee_id:0 +msgid "Employee's Name" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.report:0 +#: field:hr.expense.report,user_id:0 +msgid "Validation User" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +msgid "Accounting Data" +msgstr "" + +#. module: hr_expense +#: selection:hr.expense.report,month:0 +msgid "February" +msgstr "" + +#. module: hr_expense +#: report:hr.expense:0 +msgid "Name" +msgstr "" + +#. module: hr_expense +#: code:addons/hr_expense/hr_expense.py:121 +#, python-format +msgid "You can only delete draft expenses!" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.expense,account_move_id:0 +msgid "Ledger Posting" +msgstr "" + +#. module: hr_expense +#: model:process.transition,note:hr_expense.process_transition_approveinvoice0 +msgid "Creates supplier invoice." +msgstr "" + +#. module: hr_expense +#: model:product.template,name:hr_expense.hotel_rent_product_template +msgid "Hotel Accommodation" +msgstr "" + +#. module: hr_expense +#: selection:hr.expense.report,month:0 +msgid "April" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.line,name:0 +msgid "Expense Note" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +msgid "Approve" +msgstr "" + +#. module: hr_expense +#: help:hr.expense.expense,message_ids:0 +msgid "Messages and communication history" +msgstr "" + +#. module: hr_expense +#: field:hr.expense.line,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: hr_expense +#: model:process.transition,note:hr_expense.process_transition_confirmexpense0 +msgid "Expense is confirmed." +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +#: model:ir.actions.act_window,name:hr_expense.expense_all +#: model:ir.ui.menu,name:hr_expense.menu_expense_all +#: model:ir.ui.menu,name:hr_expense.next_id_49 +#: model:product.category,name:hr_expense.cat_expense +msgid "Expenses" +msgstr "" + +#. module: hr_expense +#: help:product.product,hr_expense_ok:0 +msgid "Specify if the product can be selected in an HR expense line." +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +msgid "Accounting" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +#: model:mail.message.subtype,name:hr_expense.mt_expense_confirmed +msgid "To Approve" +msgstr "" + +#. module: hr_expense +#: view:hr.expense.expense:0 +#: view:hr.expense.line:0 +#: field:hr.expense.line,total_amount:0 +msgid "Total" +msgstr "" + +#. module: hr_expense +#: model:process.node,name:hr_expense.process_node_reinvoicing0 +msgid "Reinvoicing" +msgstr "" diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml index 5ffbff10040..85bbcb96f94 100644 --- a/addons/hr_holidays/hr_holidays_view.xml +++ b/addons/hr_holidays/hr_holidays_view.xml @@ -146,6 +146,7 @@ <field name="number_of_days" string="Allocated Days" sum="Remaining Days"/> <field name="manager_id" invisible="1"/> <field name="user_id" invisible="1"/> + <field name="date_from" invisible="1"/> <!--field name="type"/--> <field name="state"/> </tree> diff --git a/addons/hr_holidays/i18n/pl.po b/addons/hr_holidays/i18n/pl.po index ebc13bc02d4..ad5730d2268 100644 --- a/addons/hr_holidays/i18n/pl.po +++ b/addons/hr_holidays/i18n/pl.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: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2012-12-14 12:51+0000\n" -"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n" +"PO-Revision-Date: 2013-06-22 10:54+0000\n" +"Last-Translator: Dariusz Kubiak <d.kubiak@macopedia.pl>\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: 2013-03-16 05:30+0000\n" -"X-Generator: Launchpad (build 16532)\n" +"X-Launchpad-Export-Date: 2013-06-23 05:13+0000\n" +"X-Generator: Launchpad (build 16677)\n" #. module: hr_holidays #: selection:hr.holidays.status,color_name:0 @@ -32,7 +32,7 @@ msgid "Waiting Second Approval" msgstr "Oczekuje na drugą aprobatę" #. module: hr_holidays -#: code:addons/hr_holidays/hr_holidays.py:298 +#: code:addons/hr_holidays/hr_holidays.py:309 #, python-format msgid "" "You cannot modify a leave request that has been approved. Contact a human " @@ -109,11 +109,13 @@ msgid "" "The default duration interval between the start date and the end date is 8 " "hours. Feel free to adapt it to your needs." msgstr "" +"Domyślny odstęp między datą rozpoczęcia i data zakończenia jest 8 godzin. " +"Zapraszam do dostosowania go do swoich potrzeb." #. module: hr_holidays #: model:mail.message.subtype,description:hr_holidays.mt_holidays_refused msgid "Request refused" -msgstr "" +msgstr "Wniosek odrzucony" #. module: hr_holidays #: field:hr.holidays,number_of_days_temp:0 @@ -274,12 +276,12 @@ msgid "" msgstr "" #. module: hr_holidays -#: code:addons/hr_holidays/hr_holidays.py:238 #: code:addons/hr_holidays/hr_holidays.py:249 -#: code:addons/hr_holidays/hr_holidays.py:274 -#: code:addons/hr_holidays/hr_holidays.py:298 -#: code:addons/hr_holidays/hr_holidays.py:421 -#: code:addons/hr_holidays/hr_holidays.py:471 +#: code:addons/hr_holidays/hr_holidays.py:260 +#: code:addons/hr_holidays/hr_holidays.py:285 +#: code:addons/hr_holidays/hr_holidays.py:309 +#: code:addons/hr_holidays/hr_holidays.py:432 +#: code:addons/hr_holidays/hr_holidays.py:482 #, python-format msgid "Warning!" msgstr "Ostrzeżenie !" @@ -317,7 +319,7 @@ msgid "Sick Leaves" msgstr "Zwolnienie lekarskie" #. module: hr_holidays -#: code:addons/hr_holidays/hr_holidays.py:478 +#: code:addons/hr_holidays/hr_holidays.py:489 #, python-format msgid "Leave Request for %s" msgstr "Wniosek urlopowy dla %s" @@ -341,7 +343,7 @@ msgstr "Pozostało dni urlopu" #. module: hr_holidays #: field:hr.holidays,message_follower_ids:0 msgid "Followers" -msgstr "" +msgstr "Obserwatorzy" #. module: hr_holidays #: model:ir.model,name:hr_holidays.model_hr_holidays_remaining_leaves_user @@ -388,7 +390,7 @@ msgid "Wheat" msgstr "Pszenny" #. module: hr_holidays -#: code:addons/hr_holidays/hr_holidays.py:476 +#: code:addons/hr_holidays/hr_holidays.py:487 #, python-format msgid "Allocation for %s" msgstr "Przydział dla %s" @@ -412,7 +414,7 @@ msgid "Number of Days" msgstr "Liczba dni" #. module: hr_holidays -#: code:addons/hr_holidays/hr_holidays.py:471 +#: code:addons/hr_holidays/hr_holidays.py:482 #, python-format msgid "" "The feature behind the field 'Remaining Legal Leaves' can only be used when " @@ -516,7 +518,7 @@ msgid "Start Date" msgstr "Data początkowa" #. module: hr_holidays -#: code:addons/hr_holidays/hr_holidays.py:421 +#: code:addons/hr_holidays/hr_holidays.py:432 #, python-format msgid "" "There are not enough %s allocated for employee %s; please create an " @@ -678,7 +680,7 @@ msgstr "Podsumowanie" #. module: hr_holidays #: model:hr.holidays.status,name:hr_holidays.holiday_status_unpaid msgid "Unpaid" -msgstr "Niezapłacone" +msgstr "Bezpłatny" #. module: hr_holidays #: xsl:holidays.summary:0 @@ -741,7 +743,7 @@ msgstr "Różne" #. module: hr_holidays #: model:hr.holidays.status,name:hr_holidays.holiday_status_comp msgid "Compensatory Days" -msgstr "" +msgstr "Urlop wyrównawczy" #. module: hr_holidays #: selection:hr.holidays.status,color_name:0 @@ -766,7 +768,7 @@ msgid "Validated" msgstr "Zatwierdzony" #. module: hr_holidays -#: code:addons/hr_holidays/hr_holidays.py:238 +#: code:addons/hr_holidays/hr_holidays.py:249 #, python-format msgid "You cannot delete a leave which is in %s state." msgstr "Nie możesz usunąć nieobecności, która jest w stanie %s." @@ -830,7 +832,7 @@ msgid "To Submit" msgstr "Do wysłania" #. module: hr_holidays -#: code:addons/hr_holidays/hr_holidays.py:343 +#: code:addons/hr_holidays/hr_holidays.py:354 #: view:hr.holidays:0 #: selection:hr.holidays,type:0 #: field:resource.calendar.leaves,holiday_id:0 @@ -930,8 +932,8 @@ msgid "Messages and communication history" msgstr "Wiadomości i historia komunikacji" #. module: hr_holidays -#: code:addons/hr_holidays/hr_holidays.py:249 -#: code:addons/hr_holidays/hr_holidays.py:274 +#: code:addons/hr_holidays/hr_holidays.py:260 +#: code:addons/hr_holidays/hr_holidays.py:285 #: sql_constraint:hr.holidays:0 #, python-format msgid "The start date must be anterior to the end date." diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py index e26c96d41d9..c25583cba77 100644 --- a/addons/hr_recruitment/hr_recruitment.py +++ b/addons/hr_recruitment/hr_recruitment.py @@ -506,33 +506,18 @@ class hr_job(osv.osv): help="Email alias for this job position. New emails will automatically " "create new applicants for this job position."), } - _defaults = { - 'alias_domain': False, # always hide alias during creation - } def _auto_init(self, cr, context=None): """Installation hook to create aliases for all jobs and avoid constraint errors.""" - if context is None: - context = {} - alias_context = dict(context, alias_model_name='hr.applicant') - res = self.pool.get('mail.alias').migrate_to_alias(cr, self._name, self._table, super(hr_job, self)._auto_init, - self._columns['alias_id'], 'name', alias_prefix='job+', alias_defaults={'job_id': 'id'}, context=alias_context) - return res + return self.pool.get('mail.alias').migrate_to_alias(cr, self._name, self._table, super(hr_job, self)._auto_init, + 'hr.applicant', self._columns['alias_id'], 'name', alias_prefix='job+', alias_defaults={'job_id': 'id'}, context=context) def create(self, cr, uid, vals, context=None): - mail_alias = self.pool.get('mail.alias') - if not vals.get('alias_id'): - vals.pop('alias_name', None) # prevent errors during copy() - alias_id = mail_alias.create_unique_alias(cr, uid, - # Using '+' allows using subaddressing for those who don't - # have a catchall domain setup. - {'alias_name': 'jobs+'+vals['name']}, - model_name="hr.applicant", - context=context) - vals['alias_id'] = alias_id - res = super(hr_job, self).create(cr, uid, vals, context) - mail_alias.write(cr, uid, [vals['alias_id']], {"alias_defaults": {'job_id': res}}, context) - return res + alias_context = dict(context, alias_model_name='hr.applicant', alias_parent_model_name=self._name) + job_id = super(hr_job, self).create(cr, uid, vals, context=alias_context) + job = self.browse(cr, uid, job_id, context=context) + self.pool.get('mail.alias').write(cr, uid, [job.alias_id.id], {'alias_parent_thread_id': job_id, "alias_defaults": {'job_id': job_id}}, context) + return job_id def unlink(self, cr, uid, ids, context=None): # Cascade-delete mail aliases as well, as they should not exist without the job position. @@ -550,15 +535,16 @@ class hr_job(osv.osv): if record.survey_id: datas['ids'] = [record.survey_id.id] datas['model'] = 'survey.print' - context.update({'response_id': [0], 'response_no': 0,}) + context.update({'response_id': [0], 'response_no': 0}) return { 'type': 'ir.actions.report.xml', 'report_name': 'survey.form', 'datas': datas, - 'context' : context, - 'nodestroy':True, + 'context': context, + 'nodestroy': True, } + class applicant_category(osv.osv): """ Category of applicant """ _name = "hr.applicant_category" diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml index f6fb202252c..9cbfd4560e7 100644 --- a/addons/hr_recruitment/hr_recruitment_view.xml +++ b/addons/hr_recruitment/hr_recruitment_view.xml @@ -316,18 +316,19 @@ attrs="{'invisible':[('survey_id','=',False)]}"/> </div> </field> - <xpath expr="//div[@class='oe_title']//h1" position="after"> - <div name="group_alias" + <xpath expr="//group[@name='job_data']" position="after"> + <group name="group_alias" attrs="{'invisible': [('alias_domain', '=', False)]}"> - <label for="alias_id" string="Email Alias"/> - <field name="alias_id" class="oe_inline oe_read_only" required="0" nolabel="1"/> - <span name="edit_alias" class="oe_edit_only"> - <field name="alias_name" class="oe_inline" - attrs="{'required': [('alias_id', '!=', False)]}"/> - @ - <field name="alias_domain" class="oe_inline" readonly="1"/> - </span> - </div> + <label for="alias_name" string="Email Alias"/> + <div name="alias_def"> + <field name="alias_id" class="oe_read_only oe_inline" + string="Email Alias" required="0"/> + <div class="oe_edit_only oe_inline" name="edit_alias" style="display: inline;" > + <field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/> + </div> + </div> + <field name="alias_contact" class="oe_inline" string="Accept Emails From"/> + </group> </xpath> </field> </record> diff --git a/addons/hr_recruitment/i18n/th.po b/addons/hr_recruitment/i18n/th.po new file mode 100644 index 00000000000..fb80cbf4ca7 --- /dev/null +++ b/addons/hr_recruitment/i18n/th.po @@ -0,0 +1,1261 @@ +# Thai translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:04+0000\n" +"PO-Revision-Date: 2013-06-20 01:58+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Thai <th@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-21 05:36+0000\n" +"X-Generator: Launchpad (build 16677)\n" + +#. module: hr_recruitment +#: help:hr.applicant,active:0 +msgid "" +"If the active field is set to false, it will allow you to hide the case " +"without removing it." +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.stage:0 +#: field:hr.recruitment.stage,requirements:0 +msgid "Requirements" +msgstr "ความต้องการ" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Application Summary" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Start Interview" +msgstr "เริ่มสัมภาษณ์" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Mobile:" +msgstr "มือถือ:" + +#. module: hr_recruitment +#: help:hr.recruitment.stage,fold:0 +msgid "" +"This stage is not visible, for example in status bar or kanban view, when " +"there are no records in that stage to display." +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.degree,name:hr_recruitment.degree_graduate +msgid "Graduate" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Group By..." +msgstr "จัดกลุ่มตาม..." + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Filter and view on next actions and date" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,department_id:0 +#: view:hr.recruitment.report:0 +#: field:hr.recruitment.report,department_id:0 +msgid "Department" +msgstr "แผนก" + +#. module: hr_recruitment +#: field:hr.applicant,date_action:0 +msgid "Next Action Date" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,salary_expected_extra:0 +msgid "Expected Salary Extra" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "Jobs" +msgstr "งาน" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Pending Jobs" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,message_unread:0 +msgid "Unread Messages" +msgstr "ข้อความที่ไม่ได้อ่าน" + +#. module: hr_recruitment +#: field:hr.applicant,company_id:0 +#: view:hr.recruitment.report:0 +#: field:hr.recruitment.report,company_id:0 +msgid "Company" +msgstr "บริษัท" + +#. module: hr_recruitment +#: view:hr.recruitment.source:0 +#: model:ir.actions.act_window,name:hr_recruitment.hr_recruitment_source_action +#: model:ir.ui.menu,name:hr_recruitment.menu_hr_recruitment_source +msgid "Sources of Applicants" +msgstr "" + +#. module: hr_recruitment +#: code:addons/hr_recruitment/hr_recruitment.py:445 +#, python-format +msgid "You must define Applied Job for this applicant." +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Job" +msgstr "งาน" + +#. module: hr_recruitment +#: field:hr.recruitment.partner.create,close:0 +msgid "Close job request" +msgstr "" + +#. module: hr_recruitment +#: model:ir.actions.act_window,help:hr_recruitment.crm_case_categ0_act_job +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to add a new job applicant.\n" +" </p><p>\n" +" OpenERP helps you track applicants in the recruitment\n" +" process and follow up all operations: meetings, interviews, " +"etc.\n" +" </p><p>\n" +" If you setup the email gateway, applicants and their " +"attached\n" +" CV are created automatically when an email is sent to\n" +" jobs@yourcompany.com. If you install the document " +"management\n" +" modules, all resumes are indexed automatically, so that you " +"can\n" +" easily search through their content.\n" +" </p>\n" +" " +msgstr "" + +#. module: hr_recruitment +#: model:ir.actions.act_window,name:hr_recruitment.crm_case_categ0_act_job +#: model:ir.ui.menu,name:hr_recruitment.menu_crm_case_categ0_act_job +msgid "Applications" +msgstr "โปรแกรม" + +#. module: hr_recruitment +#: field:hr.applicant,day_open:0 +msgid "Days to Open" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,emp_id:0 +msgid "employee" +msgstr "" + +#. module: hr_recruitment +#: field:hr.config.settings,fetchmail_applicants:0 +msgid "Create applicants from an incoming email account" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +#: field:hr.recruitment.report,day:0 +msgid "Day" +msgstr "วัน" + +#. module: hr_recruitment +#: view:hr.recruitment.partner.create:0 +#: model:ir.actions.act_window,name:hr_recruitment.action_hr_recruitment_partner_create +msgid "Create Contact" +msgstr "สร้างผู้ติดต่อ" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Refuse" +msgstr "ปฏิเสธ" + +#. module: hr_recruitment +#: model:hr.recruitment.degree,name:hr_recruitment.degree_licenced +msgid "Master Degree" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,partner_mobile:0 +msgid "Mobile" +msgstr "มือถือ" + +#. module: hr_recruitment +#: field:hr.applicant,message_ids:0 +msgid "Messages" +msgstr "ข้อความ" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Next Actions" +msgstr "" + +#. module: hr_recruitment +#: code:addons/hr_recruitment/wizard/hr_recruitment_create_partner_job.py:38 +#: code:addons/hr_recruitment/wizard/hr_recruitment_create_partner_job.py:56 +#, python-format +msgid "Error!" +msgstr "ผิดพลาด!" + +#. module: hr_recruitment +#: model:hr.recruitment.degree,name:hr_recruitment.degree_bac5 +msgid "Doctoral Degree" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,job_id:0 +#: field:hr.recruitment.report,job_id:0 +msgid "Applied Job" +msgstr "" + +#. module: hr_recruitment +#: help:hr.recruitment.stage,department_id:0 +msgid "" +"Stages of the recruitment process may be different per department. If this " +"stage is common to all departments, keep this field empty." +msgstr "" + +#. module: hr_recruitment +#: help:hr.applicant,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "ถ้าการตรวจสอบข้อความใหม่ให้ระบุความสนใจของคุณ" + +#. module: hr_recruitment +#: field:hr.applicant,color:0 +msgid "Color Index" +msgstr "ดัชนีสี" + +#. module: hr_recruitment +#: model:ir.actions.act_window,name:hr_recruitment.act_hr_applicant_to_meeting +msgid "Meetings" +msgstr "การประชุม" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: model:ir.actions.act_window,name:hr_recruitment.action_applicants_status +msgid "Applicants Status" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "My Recruitment" +msgstr "" + +#. module: hr_recruitment +#: field:hr.job,survey_id:0 +msgid "Interview Form" +msgstr "" + +#. module: hr_recruitment +#: help:hr.job,survey_id:0 +msgid "" +"Choose an interview form for this job position and you will be able to " +"print/answer this interview from all applicants who apply for this job" +msgstr "" + +#. module: hr_recruitment +#: model:ir.ui.menu,name:hr_recruitment.menu_hr_recruitment_recruitment +msgid "Recruitment" +msgstr "รับสมัครงาน" + +#. module: hr_recruitment +#: help:hr.applicant,message_summary:0 +msgid "" +"Holds the Chatter summary (number of messages, ...). This summary is " +"directly in html format in order to be inserted in kanban views." +msgstr "" + +#. module: hr_recruitment +#: code:addons/hr_recruitment/hr_recruitment.py:445 +#, python-format +msgid "Warning!" +msgstr "คำเตือน!" + +#. module: hr_recruitment +#: field:hr.recruitment.report,salary_prop:0 +msgid "Salary Proposed" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +#: field:hr.recruitment.report,partner_id:0 +msgid "Partner" +msgstr "คู่ค้า" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "Avg Proposed Salary" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,availability:0 +#: field:hr.recruitment.report,available:0 +msgid "Availability" +msgstr "ที่มีอยู่" + +#. module: hr_recruitment +#: field:hr.applicant,salary_proposed:0 +#: view:hr.recruitment.report:0 +msgid "Proposed Salary" +msgstr "" + +#. module: hr_recruitment +#: model:ir.model,name:hr_recruitment.model_hr_recruitment_source +msgid "Source of Applicants" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.partner.create:0 +msgid "Convert To Partner" +msgstr "" + +#. module: hr_recruitment +#: model:ir.model,name:hr_recruitment.model_hr_recruitment_report +msgid "Recruitments Statistics" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Print interview report" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "Hired employees" +msgstr "" + +#. module: hr_recruitment +#: model:ir.model,name:hr_recruitment.model_hr_job +msgid "Job Description" +msgstr "รายละเอียดงาน" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,source_id:0 +msgid "Source" +msgstr "ที่มา" + +#. module: hr_recruitment +#: field:hr.applicant,message_follower_ids:0 +msgid "Followers" +msgstr "ติดตาม" + +#. module: hr_recruitment +#: model:hr.recruitment.source,name:hr_recruitment.source_monster +msgid "Monster" +msgstr "" + +#. module: hr_recruitment +#: model:mail.message.subtype,name:hr_recruitment.mt_applicant_hired +msgid "Applicant Hired" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,email_from:0 +msgid "Email" +msgstr "อีเมล์" + +#. module: hr_recruitment +#: model:ir.actions.act_window,help:hr_recruitment.hr_job_stage_act +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to add a new stage in the recruitment process.\n" +" </p><p>\n" +" Define here your stages of the recruitment process, for " +"example:\n" +" qualification call, first interview, second interview, refused,\n" +" hired.\n" +" </p>\n" +" " +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "Available" +msgstr "เหลืออยู่" + +#. module: hr_recruitment +#: field:hr.applicant,title_action:0 +msgid "Next Action" +msgstr "" + +#. module: hr_recruitment +#: help:hr.job,alias_id:0 +msgid "" +"Email alias for this job position. New emails will automatically create new " +"applicants for this job position." +msgstr "" + +#. module: hr_recruitment +#: selection:hr.applicant,priority:0 +#: selection:hr.recruitment.report,priority:0 +msgid "Good" +msgstr "ดี" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "August" +msgstr "สิงหาคม" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,create_date:0 +#: view:hr.recruitment.report:0 +msgid "Creation Date" +msgstr "วันที่สร้าง" + +#. module: hr_recruitment +#: model:ir.actions.act_window,name:hr_recruitment.action_hr_recruitment_hired_employee +#: model:ir.model,name:hr_recruitment.model_hired_employee +msgid "Create Employee" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,priority:0 +#: field:hr.recruitment.report,priority:0 +msgid "Appreciation" +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.stage,name:hr_recruitment.stage_job1 +msgid "Initial Qualification" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Print Interview" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,stage_id:0 +#: view:hr.recruitment.report:0 +#: field:hr.recruitment.report,stage_id:0 +#: view:hr.recruitment.stage:0 +msgid "Stage" +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.stage,name:hr_recruitment.stage_job3 +msgid "Second Interview" +msgstr "สัมภาษณ์ครั้งที่สอง" + +#. module: hr_recruitment +#: model:ir.actions.act_window,name:hr_recruitment.hr_job_stage_act +msgid "Recruitment / Applicants Stages" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,salary_expected:0 +#: view:hr.recruitment.report:0 +msgid "Expected Salary" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "July" +msgstr "กรกฎาคม" + +#. module: hr_recruitment +#: field:hr.applicant,email_cc:0 +msgid "Watchers Emails" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Applicants" +msgstr "" + +#. module: hr_recruitment +#: code:addons/hr_recruitment/hr_recruitment.py:360 +#, python-format +msgid "No Subject" +msgstr "ไม่มีชื่อเรื่อง" + +#. module: hr_recruitment +#: field:hr.recruitment.report,salary_exp:0 +msgid "Salary Expected" +msgstr "" + +#. module: hr_recruitment +#: model:ir.model,name:hr_recruitment.model_hr_applicant +msgid "Applicant" +msgstr "" + +#. module: hr_recruitment +#: help:hr.recruitment.stage,sequence:0 +msgid "Gives the sequence order when displaying a list of stages." +msgstr "" + +#. module: hr_recruitment +#: code:addons/hr_recruitment/hr_recruitment.py:347 +#: field:hr.applicant,partner_id:0 +#, python-format +msgid "Contact" +msgstr "ที่อยู่ติดต่อ" + +#. module: hr_recruitment +#: help:hr.applicant,salary_expected_extra:0 +msgid "Salary Expected by Applicant, extra advantages" +msgstr "" + +#. module: hr_recruitment +#: help:hr.applicant,state:0 +msgid "" +"The status is set to 'Draft', when a case is created. " +"If the case is in progress the status is set to 'Open'. " +"When the case is over, the status is set to 'Done'. If " +"the case needs to be reviewed then the status is set " +"to 'Pending'." +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "March" +msgstr "มีนาคม" + +#. module: hr_recruitment +#: view:hr.recruitment.stage:0 +#: model:ir.actions.act_window,name:hr_recruitment.hr_recruitment_stage_act +#: model:ir.ui.menu,name:hr_recruitment.menu_hr_recruitment_stage +msgid "Stages" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "Draft recruitment" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Delete" +msgstr "ลบ" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "In progress" +msgstr "อยู่ระหว่างดำเนินการ" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Hire & Create Employee" +msgstr "" + +#. module: hr_recruitment +#: model:mail.message.subtype,description:hr_recruitment.mt_applicant_hired +msgid "Applicant hired" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Jobs - Recruitment Form" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,probability:0 +msgid "Probability" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "April" +msgstr "เมษายน" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "September" +msgstr "กันยายน" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "December" +msgstr "ธันวาคม" + +#. module: hr_recruitment +#: code:addons/hr_recruitment/wizard/hr_recruitment_create_partner_job.py:39 +#, python-format +msgid "A contact is already defined on this job request." +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,categ_ids:0 +msgid "Tags" +msgstr "แท็ก" + +#. module: hr_recruitment +#: model:ir.model,name:hr_recruitment.model_hr_applicant_category +msgid "Category of applicant" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +#: field:hr.recruitment.report,month:0 +msgid "Month" +msgstr "เดือน" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Answer related job question" +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.stage,name:hr_recruitment.stage_job2 +msgid "First Interview" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,write_date:0 +msgid "Update Date" +msgstr "วันที่ปรับปรุง" + +#. module: hr_recruitment +#: view:hired.employee:0 +msgid "Yes" +msgstr "ใช่" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,name:0 +msgid "Subject" +msgstr "ชื่อเรื่อง" + +#. module: hr_recruitment +#: view:hired.employee:0 +#: view:hr.recruitment.partner.create:0 +msgid "or" +msgstr "หรือ" + +#. module: hr_recruitment +#: model:mail.message.subtype,name:hr_recruitment.mt_applicant_refused +msgid "Applicant Refused" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Schedule Meeting" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,partner_name:0 +msgid "Applicant's Name" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.applicant,priority:0 +#: selection:hr.recruitment.report,priority:0 +msgid "Very Good" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,user_email:0 +msgid "User Email" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,date_open:0 +msgid "Opened" +msgstr "เปิดแล้ว" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "Group By ..." +msgstr "" + +#. module: hr_recruitment +#: view:hired.employee:0 +msgid "No" +msgstr "ไม่" + +#. module: hr_recruitment +#: help:hr.applicant,salary_expected:0 +msgid "Salary Expected by Applicant" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "All Initial Jobs" +msgstr "" + +#. module: hr_recruitment +#: help:hr.applicant,email_cc:0 +msgid "" +"These email addresses will be added to the CC field of all inbound and " +"outbound emails for this record before being sent. Separate multiple email " +"addresses with a comma" +msgstr "" + +#. module: hr_recruitment +#: model:ir.ui.menu,name:hr_recruitment.menu_hr_recruitment_degree +msgid "Degrees" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,date_closed:0 +#: field:hr.recruitment.report,date_closed:0 +msgid "Closed" +msgstr "ปิดแล้ว" + +#. module: hr_recruitment +#: view:hr.recruitment.stage:0 +msgid "Stage Definition" +msgstr "" + +#. module: hr_recruitment +#: field:hr.recruitment.report,delay_close:0 +msgid "Avg. Delay to Close" +msgstr "" + +#. module: hr_recruitment +#: help:hr.applicant,salary_proposed:0 +msgid "Salary Proposed by the Organisation" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: selection:hr.applicant,state:0 +#: view:hr.recruitment.report:0 +#: selection:hr.recruitment.report,state:0 +#: selection:hr.recruitment.stage,state:0 +msgid "Pending" +msgstr "รอดำเนินการ" + +#. module: hr_recruitment +#: field:hr.applicant,state:0 +#: field:hr.recruitment.report,state:0 +#: field:hr.recruitment.stage,state:0 +msgid "Status" +msgstr "สถานะ" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Schedule interview with this applicant" +msgstr "" + +#. module: hr_recruitment +#: code:addons/hr_recruitment/hr_recruitment.py:407 +#, python-format +msgid "Applicant <b>created</b>" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,type_id:0 +#: view:hr.recruitment.degree:0 +#: view:hr.recruitment.report:0 +#: field:hr.recruitment.report,type_id:0 +#: model:ir.actions.act_window,name:hr_recruitment.hr_recruitment_degree_action +msgid "Degree" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,partner_phone:0 +msgid "Phone" +msgstr "โทรศัพท์" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "June" +msgstr "มิถุนายน" + +#. module: hr_recruitment +#: field:hr.applicant,day_close:0 +msgid "Days to Close" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,message_is_follower:0 +msgid "Is a Follower" +msgstr "เป็นผู้ติดตาม" + +#. module: hr_recruitment +#: field:hr.recruitment.report,user_id:0 +msgid "User" +msgstr "ผู้ใช้งาน" + +#. module: hr_recruitment +#: selection:hr.applicant,priority:0 +#: selection:hr.recruitment.report,priority:0 +msgid "Excellent" +msgstr "ดีเยี่ยม" + +#. module: hr_recruitment +#: field:hr.applicant,active:0 +msgid "Active" +msgstr "เปิดใช้งาน" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +#: field:hr.recruitment.report,nbr:0 +msgid "# of Applications" +msgstr "" + +#. module: hr_recruitment +#: model:ir.actions.act_window,help:hr_recruitment.hr_recruitment_stage_act +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to add a new stage in the recruitment process.\n" +" </p><p>\n" +" Don't forget to specify the department if your recruitment " +"process\n" +" is different according to the job position.\n" +" </p>\n" +" " +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,response:0 +msgid "Response" +msgstr "การตอบรับ" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "October" +msgstr "ตุลาคม" + +#. module: hr_recruitment +#: field:hr.config.settings,module_document_ftp:0 +msgid "Allow the automatic indexation of resumes" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,salary_proposed_extra:0 +msgid "Proposed Salary Extra" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "January" +msgstr "" + +#. module: hr_recruitment +#: code:addons/hr_recruitment/wizard/hr_recruitment_create_partner_job.py:56 +#, python-format +msgid "A contact is already existing with the same name." +msgstr "" + +#. module: hr_recruitment +#: model:ir.actions.act_window,name:hr_recruitment.hr_recruitment_stage_form_installer +msgid "Review Recruitment Stages" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Contact:" +msgstr "การติดต่อ:" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Search Jobs" +msgstr "ค้นหา งาน" + +#. module: hr_recruitment +#: field:hr.applicant,date:0 +#: field:hr.recruitment.report,date:0 +msgid "Date" +msgstr "วันที่" + +#. module: hr_recruitment +#: field:hr.applicant,survey:0 +msgid "Survey" +msgstr "สำรวจ" + +#. module: hr_recruitment +#: view:hired.employee:0 +msgid "Would you like to create an employee ?" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Degree:" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: hr_recruitment +#: model:ir.actions.act_window,help:hr_recruitment.hr_recruitment_stage_form_installer +msgid "" +"Check if the following stages are matching your recruitment process. Don't " +"forget to specify the department if your recruitment process is different " +"according to the job position." +msgstr "" + +#. module: hr_recruitment +#: view:hr.config.settings:0 +msgid "Configure" +msgstr "ตั้งค่า" + +#. module: hr_recruitment +#: model:hr.recruitment.stage,name:hr_recruitment.stage_job4 +msgid "Contract Proposed" +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.source,name:hr_recruitment.source_website_company +msgid "Company Website" +msgstr "เวปไซต์ บริษัท" + +#. module: hr_recruitment +#: sql_constraint:hr.recruitment.degree:0 +msgid "The name of the Degree of Recruitment must be unique!" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +#: field:hr.recruitment.report,year:0 +msgid "Year" +msgstr "ปี" + +#. module: hr_recruitment +#: view:hired.employee:0 +#: view:hr.recruitment.partner.create:0 +msgid "Cancel" +msgstr "ยกเลิก" + +#. module: hr_recruitment +#: view:hr.recruitment.partner.create:0 +msgid "Are you sure you want to create a contact based on this job request ?" +msgstr "" + +#. module: hr_recruitment +#: help:hr.config.settings,fetchmail_applicants:0 +msgid "" +"Allow applicants to send their job application to an email address " +"(jobs@mycompany.com),\n" +" and create automatically application documents in the system." +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: selection:hr.applicant,state:0 +#: selection:hr.recruitment.stage,state:0 +msgid "In Progress" +msgstr "อยู่ระหว่างทำงาน" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Subject / Applicant" +msgstr "" + +#. module: hr_recruitment +#: help:hr.recruitment.degree,sequence:0 +msgid "Gives the sequence order when displaying a list of degrees." +msgstr "" + +#. module: hr_recruitment +#: model:mail.message.subtype,description:hr_recruitment.mt_stage_changed +msgid "Stage changed" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: field:hr.applicant,user_id:0 +#: view:hr.recruitment.report:0 +msgid "Responsible" +msgstr "รับผิดชอบ" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +#: model:ir.actions.act_window,name:hr_recruitment.action_hr_recruitment_report_all +#: model:ir.ui.menu,name:hr_recruitment.menu_hr_recruitment_report_all +msgid "Recruitment Analysis" +msgstr "" + +#. module: hr_recruitment +#: view:hired.employee:0 +msgid "Create New Employee" +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.source,name:hr_recruitment.source_linkedin +msgid "LinkedIn" +msgstr "LinkedIn" + +#. module: hr_recruitment +#: model:mail.message.subtype,name:hr_recruitment.mt_job_new_applicant +msgid "New Applicant" +msgstr "" + +#. module: hr_recruitment +#: model:ir.model,name:hr_recruitment.model_hr_recruitment_stage +msgid "Stage of Recruitment" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Cases By Stage and Estimates" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +#: selection:hr.applicant,state:0 +#: view:hr.recruitment.report:0 +#: selection:hr.recruitment.report,state:0 +#: selection:hr.recruitment.stage,state:0 +msgid "New" +msgstr "ใหม่" + +#. module: hr_recruitment +#: model:crm.meeting.type,name:hr_recruitment.categ_meet_interview +#: view:hr.job:0 +msgid "Interview" +msgstr "บทสัมภาษณ์" + +#. module: hr_recruitment +#: field:hr.recruitment.source,name:0 +msgid "Source Name" +msgstr "ชื่อแหล่ง" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Day(s)" +msgstr "วัน" + +#. module: hr_recruitment +#: field:hr.applicant,description:0 +msgid "Description" +msgstr "รายละเอียด" + +#. module: hr_recruitment +#: model:mail.message.subtype,name:hr_recruitment.mt_stage_changed +msgid "Stage Changed" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "May" +msgstr "พฤษภาคม" + +#. module: hr_recruitment +#: model:hr.recruitment.stage,name:hr_recruitment.stage_job5 +msgid "Contract Signed" +msgstr "" + +#. module: hr_recruitment +#: model:hr.recruitment.source,name:hr_recruitment.source_word +msgid "Word of Mouth" +msgstr "" + +#. module: hr_recruitment +#: field:hr.recruitment.stage,fold:0 +msgid "Hide in views if empty" +msgstr "" + +#. module: hr_recruitment +#: help:hr.config.settings,module_document_ftp:0 +msgid "" +"Manage your CV's and motivation letter related to all applicants.\n" +" This installs the module document_ftp. This will install the " +"knowledge management module in order to allow you to search using specific " +"keywords through the content of all documents (PDF, .DOCx...)" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.applicant,state:0 +#: selection:hr.recruitment.report,state:0 +#: model:hr.recruitment.stage,name:hr_recruitment.stage_job6 +#: selection:hr.recruitment.stage,state:0 +msgid "Refused" +msgstr "ถูกปฏิเสธ" + +#. module: hr_recruitment +#: selection:hr.applicant,state:0 +#: view:hr.recruitment.report:0 +#: selection:hr.recruitment.report,state:0 +#: selection:hr.recruitment.stage,state:0 +msgid "Hired" +msgstr "" + +#. module: hr_recruitment +#: field:hr.applicant,reference:0 +msgid "Referred By" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Departement:" +msgstr "แผนก:" + +#. module: hr_recruitment +#: selection:hr.applicant,priority:0 +#: selection:hr.recruitment.report,priority:0 +msgid "On Average" +msgstr "" + +#. module: hr_recruitment +#: model:ir.model,name:hr_recruitment.model_hr_recruitment_degree +msgid "Degree of Recruitment" +msgstr "" + +#. module: hr_recruitment +#: field:hr.recruitment.report,salary_prop_avg:0 +msgid "Avg. Proposed Salary" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Open Jobs" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "February" +msgstr "กุมภาพันธ์" + +#. module: hr_recruitment +#: selection:hr.applicant,priority:0 +#: selection:hr.recruitment.report,priority:0 +msgid "Not Good" +msgstr "ไม่ดี" + +#. module: hr_recruitment +#: field:hr.applicant_category,name:0 +#: field:hr.recruitment.degree,name:0 +#: field:hr.recruitment.stage,name:0 +msgid "Name" +msgstr "ชื่อ" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,month:0 +msgid "November" +msgstr "พฤศจิกายน" + +#. module: hr_recruitment +#: field:hr.recruitment.report,salary_exp_avg:0 +msgid "Avg. Expected Salary" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "Avg Expected Salary" +msgstr "" + +#. module: hr_recruitment +#: model:ir.model,name:hr_recruitment.model_hr_recruitment_partner_create +msgid "Create Partner from job application" +msgstr "" + +#. module: hr_recruitment +#: help:hr.applicant,email_from:0 +msgid "These people will receive email." +msgstr "คนเหล่านี้จะได้รับอีเมล์" + +#. module: hr_recruitment +#: field:hr.job,alias_id:0 +msgid "Alias" +msgstr "นามแฝง" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "Pending recruitment" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Contract" +msgstr "สัญญา" + +#. module: hr_recruitment +#: field:hr.applicant,message_summary:0 +msgid "Summary" +msgstr "สรุป" + +#. module: hr_recruitment +#: help:hr.applicant,message_ids:0 +msgid "Messages and communication history" +msgstr "ข้อความและประวัติการสื่อสาร" + +#. module: hr_recruitment +#: model:mail.message.subtype,description:hr_recruitment.mt_applicant_refused +msgid "Applicant refused" +msgstr "" + +#. module: hr_recruitment +#: field:hr.recruitment.stage,department_id:0 +msgid "Specific to a Department" +msgstr "" + +#. module: hr_recruitment +#: view:hr.recruitment.report:0 +msgid "In progress recruitment" +msgstr "" + +#. module: hr_recruitment +#: field:hr.recruitment.degree,sequence:0 +#: field:hr.recruitment.stage,sequence:0 +msgid "Sequence" +msgstr "ลำดับ" + +#. module: hr_recruitment +#: model:hr.recruitment.degree,name:hr_recruitment.degree_bachelor +msgid "Bachelor Degree" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Unassigned Recruitments" +msgstr "" + +#. module: hr_recruitment +#: model:ir.model,name:hr_recruitment.model_hr_config_settings +msgid "hr.config.settings" +msgstr "hr.config.settings" + +#. module: hr_recruitment +#: help:hr.recruitment.stage,state:0 +msgid "" +"The related status for the stage. The status of your document will " +"automatically change according to the selected stage. Example, a stage is " +"related to the status 'Close', when your document reach this stage, it will " +"be automatically closed." +msgstr "" + +#. module: hr_recruitment +#: help:hr.applicant,salary_proposed_extra:0 +msgid "Salary Proposed by the Organisation, extra advantages" +msgstr "" + +#. module: hr_recruitment +#: help:hr.recruitment.report,delay_close:0 +msgid "Number of Days to close the project issue" +msgstr "" + +#. module: hr_recruitment +#: selection:hr.recruitment.report,state:0 +msgid "Open" +msgstr "เปิด" + +#. module: hr_recruitment +#: view:board.board:0 +msgid "Applications to be Processed" +msgstr "" + +#. module: hr_recruitment +#: view:hr.applicant:0 +msgid "Schedule Interview" +msgstr "ตารางเวลาสัมภาษณ์" diff --git a/addons/hr_timesheet/i18n/th.po b/addons/hr_timesheet/i18n/th.po new file mode 100644 index 00000000000..146c1df4146 --- /dev/null +++ b/addons/hr_timesheet/i18n/th.po @@ -0,0 +1,669 @@ +# Thai translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:04+0000\n" +"PO-Revision-Date: 2013-06-17 06:13+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Thai <th@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-18 05:46+0000\n" +"X-Generator: Launchpad (build 16673)\n" + +#. module: hr_timesheet +#: model:ir.actions.act_window,help:hr_timesheet.act_analytic_cost_revenue +msgid "" +"<p>\n" +" No activity yet on this contract.\n" +" </p><p>\n" +" In OpenERP, contracts and projects are implemented using\n" +" analytic account. So, you can track costs and revenues to " +"analyse\n" +" your margins easily.\n" +" </p><p>\n" +" Costs will be created automatically when you register " +"supplier\n" +" invoices, expenses or timesheets.\n" +" </p><p>\n" +" Revenues will be created automatically when you create " +"customer\n" +" invoices. Customer invoices can be created based on sale " +"orders\n" +" (fixed price invoices), on timesheets (based on the work " +"done) or\n" +" on expenses (e.g. reinvoicing of travel costs).\n" +" </p>\n" +" " +msgstr "" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/report/user_timesheet.py:44 +#: code:addons/hr_timesheet/report/users_timesheet.py:77 +#, python-format +msgid "Wed" +msgstr "พุธ" + +#. module: hr_timesheet +#: view:hr.sign.out.project:0 +msgid "(Keep empty for current_time)" +msgstr "" + +#. module: hr_timesheet +#: view:hr.analytic.timesheet:0 +msgid "Group By..." +msgstr "จัดกลุ่มตาม..." + +#. module: hr_timesheet +#: model:ir.actions.act_window,help:hr_timesheet.action_hr_timesheet_sign_in +msgid "" +"Employees can encode their time spent on the different projects. A project " +"is an analytic account and the time spent on a project generate costs on the " +"analytic account. This feature allows to record at the same time the " +"attendance and the timesheet." +msgstr "" + +#. module: hr_timesheet +#: field:hr.employee,uom_id:0 +msgid "Unit of Measure" +msgstr "หน่วยของการวัด" + +#. module: hr_timesheet +#: field:hr.employee,journal_id:0 +msgid "Analytic Journal" +msgstr "" + +#. module: hr_timesheet +#: view:hr.sign.out.project:0 +msgid "Stop Working" +msgstr "หยุดทำงาน" + +#. module: hr_timesheet +#: 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 "เวลาทำงาน พนักงาน" + +#. module: hr_timesheet +#: view:hr.analytic.timesheet:0 +#: model:ir.ui.menu,name:hr_timesheet.menu_hr_timesheet_reports +msgid "Timesheet" +msgstr "เวลาทำงาน" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/wizard/hr_timesheet_print_employee.py:43 +#, python-format +msgid "Please define employee for this user!" +msgstr "" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/report/user_timesheet.py:44 +#: code:addons/hr_timesheet/report/users_timesheet.py:77 +#, python-format +msgid "Mon" +msgstr "จัน" + +#. module: hr_timesheet +#: view:hr.sign.in.project:0 +msgid "Sign in" +msgstr "ลงชื่อเข้าใช้" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/report/user_timesheet.py:44 +#: code:addons/hr_timesheet/report/users_timesheet.py:77 +#, python-format +msgid "Fri" +msgstr "ศุกร์" + +#. module: hr_timesheet +#: view:hr.analytic.timesheet:0 +#: 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 "Timesheet Activities" +msgstr "กิจกรรม เวลาทำงาน" + +#. module: hr_timesheet +#: field:hr.sign.out.project,analytic_amount:0 +msgid "Minimum Analytic Amount" +msgstr "" + +#. module: hr_timesheet +#: view:hr.analytical.timesheet.employee:0 +msgid "Monthly Employee Timesheet" +msgstr "รายเดือน เวลาทำงานพนักงาน" + +#. module: hr_timesheet +#: view:hr.sign.out.project:0 +msgid "Work done in the last period" +msgstr "งานที่ทำทั้งหมดในระยะเวลาสุดท้าย" + +#. module: hr_timesheet +#: field:hr.sign.in.project,name:0 +#: field:hr.sign.out.project,name:0 +msgid "Employees name" +msgstr "ชื่อพนักงาน" + +#. module: hr_timesheet +#: field:hr.sign.out.project,account_id:0 +msgid "Project / Analytic Account" +msgstr "โครงการ /วิเคราะห์ บัญชี" + +#. module: hr_timesheet +#: model:ir.model,name:hr_timesheet.model_hr_analytical_timesheet_users +msgid "Print Employees Timesheet" +msgstr "พิมพ์ เวลาทำงาน พนักงาน" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py:132 +#, python-format +msgid "Please define employee for your user." +msgstr "กรุณากำหนดพนักงานสำหรับผู้ใช้ของคุณ" + +#. module: hr_timesheet +#: model:ir.actions.act_window,name:hr_timesheet.act_analytic_cost_revenue +msgid "Costs & Revenues" +msgstr "ค่าใช้จ่ายและรายได้" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/report/user_timesheet.py:44 +#: code:addons/hr_timesheet/report/users_timesheet.py:77 +#, python-format +msgid "Tue" +msgstr "อังคาร" + +#. module: hr_timesheet +#: model:ir.model,name:hr_timesheet.model_account_analytic_account +msgid "Analytic Account" +msgstr "วิเคราะห์บัญชี" + +#. module: hr_timesheet +#: view:account.analytic.account:0 +msgid "Costs and Revenues" +msgstr "ค่าใช้จ่ายและรายได้" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/hr_timesheet.py:150 +#: code:addons/hr_timesheet/hr_timesheet.py:155 +#: code:addons/hr_timesheet/hr_timesheet.py:186 +#: code:addons/hr_timesheet/hr_timesheet.py:188 +#: code:addons/hr_timesheet/wizard/hr_timesheet_print_employee.py:43 +#, python-format +msgid "Warning!" +msgstr "คำเตือน!" + +#. module: hr_timesheet +#: field:hr.analytic.timesheet,partner_id:0 +msgid "Partner" +msgstr "พาร์ทเนอร์" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/report/user_timesheet.py:44 +#: code:addons/hr_timesheet/report/users_timesheet.py:77 +#, python-format +msgid "Sat" +msgstr "เสาร์" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/report/user_timesheet.py:44 +#: code:addons/hr_timesheet/report/users_timesheet.py:77 +#, python-format +msgid "Sun" +msgstr "อาทิตย์" + +#. module: hr_timesheet +#: xsl:hr.analytical.timesheet:0 +msgid "Sum" +msgstr "ผลรวม" + +#. module: hr_timesheet +#: view:hr.analytic.timesheet:0 +msgid "Analytic account" +msgstr "วิเคราะห์บัญชี" + +#. module: hr_timesheet +#: model:ir.actions.act_window,help:hr_timesheet.act_hr_timesheet_line_evry1_all_form +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to record activities.\n" +" </p><p>\n" +" You can register and track your workings hours by project " +"every\n" +" day. Every time spent on a project will become a cost in " +"the\n" +" analytic accounting/contract and can be re-invoiced to\n" +" customers if required.\n" +" </p>\n" +" " +msgstr "" + +#. module: hr_timesheet +#: view:hr.analytical.timesheet.employee:0 +#: view:hr.analytical.timesheet.users:0 +msgid "Print" +msgstr "พิมพ์" + +#. module: hr_timesheet +#: help:account.analytic.account,use_timesheets:0 +msgid "Check this field if this project manages timesheets" +msgstr "" + +#. module: hr_timesheet +#: view:hr.analytical.timesheet.users:0 +msgid "Monthly Employees Timesheet" +msgstr "" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/report/user_timesheet.py:41 +#: code:addons/hr_timesheet/report/users_timesheet.py:73 +#: selection:hr.analytical.timesheet.employee,month:0 +#: selection:hr.analytical.timesheet.users,month:0 +#, python-format +msgid "July" +msgstr "กรกฎาคม" + +#. module: hr_timesheet +#: field:hr.sign.in.project,date:0 +#: field:hr.sign.out.project,date_start:0 +msgid "Starting Date" +msgstr "วันที่เริ่ม" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py:77 +#, python-format +msgid "Please define cost unit for this employee." +msgstr "" + +#. module: hr_timesheet +#: help:hr.employee,product_id:0 +msgid "Specifies employee's designation as a product with type 'service'." +msgstr "" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/hr_timesheet.py:188 +#, python-format +msgid "" +"No analytic account is defined on the project.\n" +"Please set one or we cannot automatically fill the timesheet." +msgstr "" + +#. module: hr_timesheet +#: view:hr.analytic.timesheet:0 +msgid "Total cost" +msgstr "รวมค่าใช้จ่าย" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/hr_timesheet.py:186 +#, python-format +msgid "" +"No 'Analytic Journal' is defined for employee %s \n" +"Define an employee for the selected user and assign an 'Analytic Journal'!" +msgstr "" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/report/user_timesheet.py:41 +#: code:addons/hr_timesheet/report/users_timesheet.py:73 +#: selection:hr.analytical.timesheet.employee,month:0 +#: selection:hr.analytical.timesheet.users,month:0 +#, python-format +msgid "September" +msgstr "กันยายน" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/report/user_timesheet.py:41 +#: code:addons/hr_timesheet/report/users_timesheet.py:73 +#: selection:hr.analytical.timesheet.employee,month:0 +#: selection:hr.analytical.timesheet.users,month:0 +#, python-format +msgid "December" +msgstr "ธันวาคม" + +#. module: hr_timesheet +#: field:hr.analytical.timesheet.users,employee_ids:0 +msgid "employees" +msgstr "พนักงาน" + +#. module: hr_timesheet +#: field:hr.analytical.timesheet.employee,month:0 +#: field:hr.analytical.timesheet.users,month:0 +msgid "Month" +msgstr "เดือน" + +#. module: hr_timesheet +#: field:hr.sign.out.project,info:0 +msgid "Work Description" +msgstr "รายละเอียดการทำงาน" + +#. module: hr_timesheet +#: view:hr.analytical.timesheet.employee:0 +#: view:hr.analytical.timesheet.users:0 +#: view:hr.sign.in.project:0 +#: view:hr.sign.out.project:0 +msgid "or" +msgstr "หรือ" + +#. module: hr_timesheet +#: xsl:hr.analytical.timesheet:0 +msgid "Timesheet by Employee" +msgstr "บันทึกเวลา โดยพนักงาน" + +#. module: hr_timesheet +#: model:ir.actions.report.xml,name:hr_timesheet.report_user_timesheet +msgid "Employee timesheet" +msgstr "บันทึกเวลาของพนักงาน" + +#. 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 "เข้าสู่ระบบ / ออกจากระบบ โดยโครงการ" + +#. module: hr_timesheet +#: model:ir.actions.act_window,name:hr_timesheet.action_define_analytic_structure +msgid "Define your Analytic Structure" +msgstr "" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py:146 +#: view:hr.sign.in.project:0 +#, python-format +msgid "Sign in / Sign out" +msgstr "เข้าสู่ระบบ / ออกจากระบบ" + +#. module: hr_timesheet +#: view:hr.sign.in.project:0 +msgid "(Keep empty for current time)" +msgstr "" + +#. module: hr_timesheet +#: field:account.analytic.account,use_timesheets:0 +#: view:hr.employee:0 +msgid "Timesheets" +msgstr "ตารางเวลา" + +#. module: hr_timesheet +#: model:ir.actions.act_window,help:hr_timesheet.action_define_analytic_structure +msgid "" +"You should create an analytic account structure depending on your needs to " +"analyse costs and revenues. In OpenERP, analytic accounts are also used to " +"track customer contracts." +msgstr "" + +#. module: hr_timesheet +#: field:hr.analytic.timesheet,line_id:0 +msgid "Analytic Line" +msgstr "" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/report/user_timesheet.py:41 +#: code:addons/hr_timesheet/report/users_timesheet.py:73 +#: selection:hr.analytical.timesheet.employee,month:0 +#: selection:hr.analytical.timesheet.users,month:0 +#, python-format +msgid "August" +msgstr "สิงหาคม" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/hr_timesheet.py:155 +#, python-format +msgid "" +"No analytic journal defined for '%s'.\n" +"You should assign an analytic journal on the employee form." +msgstr "" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/report/user_timesheet.py:41 +#: code:addons/hr_timesheet/report/users_timesheet.py:73 +#: selection:hr.analytical.timesheet.employee,month:0 +#: selection:hr.analytical.timesheet.users,month:0 +#, python-format +msgid "June" +msgstr "มิถุนายน" + +#. module: hr_timesheet +#: field:hr.sign.in.project,state:0 +#: field:hr.sign.out.project,state:0 +msgid "Current Status" +msgstr "สถานะปัจจุบัน" + +#. module: hr_timesheet +#: view:hr.analytic.timesheet:0 +msgid "Date" +msgstr "วันที่" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/report/user_timesheet.py:41 +#: code:addons/hr_timesheet/report/users_timesheet.py:73 +#: selection:hr.analytical.timesheet.employee,month:0 +#: selection:hr.analytical.timesheet.users,month:0 +#, python-format +msgid "November" +msgstr "พฤศจิกายน" + +#. module: hr_timesheet +#: field:hr.sign.out.project,date:0 +msgid "Closing Date" +msgstr "ปิดวันที่" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/report/user_timesheet.py:41 +#: code:addons/hr_timesheet/report/users_timesheet.py:73 +#: selection:hr.analytical.timesheet.employee,month:0 +#: selection:hr.analytical.timesheet.users,month:0 +#, python-format +msgid "October" +msgstr "ตุลาคม" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/report/user_timesheet.py:41 +#: code:addons/hr_timesheet/report/users_timesheet.py:73 +#: selection:hr.analytical.timesheet.employee,month:0 +#: selection:hr.analytical.timesheet.users,month:0 +#, python-format +msgid "January" +msgstr "มกราคม" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/report/user_timesheet.py:44 +#: code:addons/hr_timesheet/report/users_timesheet.py:77 +#, python-format +msgid "Thu" +msgstr "พฤหัสบดี" + +#. module: hr_timesheet +#: view:hr.sign.in.project:0 +#: view:hr.sign.out.project:0 +msgid "Sign In/Out by Project" +msgstr "ลงซื่อ เข้า/ออก ตามโครงการ" + +#. module: hr_timesheet +#: model:ir.model,name:hr_timesheet.model_hr_analytical_timesheet_employee +msgid "Print Employee Timesheet & Print My Timesheet" +msgstr "" + +#. module: hr_timesheet +#: field:hr.sign.in.project,emp_id:0 +#: field:hr.sign.out.project,emp_id:0 +msgid "Employee ID" +msgstr "หมายเลข พนักงาน" + +#. module: hr_timesheet +#: view:hr.analytical.timesheet.users:0 +msgid "Period" +msgstr "คาบ" + +#. module: hr_timesheet +#: view:hr.sign.out.project:0 +msgid "General Information" +msgstr "ข้อมูลทั่วไป" + +#. module: hr_timesheet +#: view:hr.analytical.timesheet.employee:0 +#: view:hr.analytical.timesheet.users:0 +#: view:hr.sign.in.project:0 +#: view:hr.sign.out.project:0 +msgid "Cancel" +msgstr "ยกเลิก" + +#. module: hr_timesheet +#: xsl:hr.analytical.timesheet_users:0 +#: model:ir.actions.act_window,name:hr_timesheet.action_hr_timesheet_users +#: model:ir.actions.report.xml,name:hr_timesheet.report_users_timesheet +#: model:ir.ui.menu,name:hr_timesheet.menu_hr_timesheet_users +msgid "Employees Timesheet" +msgstr "เวลาทำงาน พนักงาน" + +#. module: hr_timesheet +#: view:hr.analytic.timesheet:0 +msgid "Information" +msgstr "รายละเอียด" + +#. module: hr_timesheet +#: field:hr.analytical.timesheet.employee,employee_id:0 +#: model:ir.model,name:hr_timesheet.model_hr_employee +msgid "Employee" +msgstr "พนักงาน" + +#. module: hr_timesheet +#: view:hr.sign.in.project:0 +msgid "" +"Employees can encode their time spent on the different projects they are " +"assigned on. A project is an analytic account and the time spent on a " +"project generates costs on the analytic account. This feature allows to " +"record at the same time the attendance and the timesheet." +msgstr "" + +#. module: hr_timesheet +#: field:hr.sign.in.project,server_date:0 +#: field:hr.sign.out.project,server_date:0 +msgid "Current Date" +msgstr "วันที่ปัจจุบัน" + +#. module: hr_timesheet +#: model:ir.model,name:hr_timesheet.model_hr_analytic_timesheet +msgid "Timesheet Line" +msgstr "" + +#. module: hr_timesheet +#: view:hr.analytic.timesheet:0 +#: field:hr.employee,product_id:0 +msgid "Product" +msgstr "ผลิตภัณฑ์" + +#. module: hr_timesheet +#: view:hr.analytic.timesheet:0 +msgid "Users" +msgstr "ผู้ใช้" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/report/user_timesheet.py:41 +#: code:addons/hr_timesheet/report/users_timesheet.py:73 +#: selection:hr.analytical.timesheet.employee,month:0 +#: selection:hr.analytical.timesheet.users,month:0 +#, python-format +msgid "May" +msgstr "พฤษภาคม" + +#. module: hr_timesheet +#: view:hr.analytic.timesheet:0 +msgid "Total time" +msgstr "เวลารวม" + +#. module: hr_timesheet +#: view:hr.sign.in.project:0 +msgid "(local time on the server side)" +msgstr "" + +#. module: hr_timesheet +#: model:ir.model,name:hr_timesheet.model_hr_sign_in_project +msgid "Sign In By Project" +msgstr "เข้าสู่ระบบตามโครงการ" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/report/user_timesheet.py:41 +#: code:addons/hr_timesheet/report/users_timesheet.py:73 +#: selection:hr.analytical.timesheet.employee,month:0 +#: selection:hr.analytical.timesheet.users,month:0 +#, python-format +msgid "February" +msgstr "กุมภาพันธ์" + +#. module: hr_timesheet +#: model:ir.model,name:hr_timesheet.model_hr_sign_out_project +msgid "Sign Out By Project" +msgstr "ลงชื่อออก ตามโครงการ" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/hr_timesheet.py:150 +#, python-format +msgid "" +"Please create an employee for this user, using the menu: Human Resources > " +"Employees." +msgstr "" + +#. module: hr_timesheet +#: view:hr.analytical.timesheet.users:0 +msgid "Employees" +msgstr "พนักงาน" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/report/user_timesheet.py:41 +#: code:addons/hr_timesheet/report/users_timesheet.py:73 +#: selection:hr.analytical.timesheet.employee,month:0 +#: selection:hr.analytical.timesheet.users,month:0 +#, python-format +msgid "March" +msgstr "มีนาคม" + +#. module: hr_timesheet +#: code:addons/hr_timesheet/report/user_timesheet.py:41 +#: code:addons/hr_timesheet/report/users_timesheet.py:73 +#: selection:hr.analytical.timesheet.employee,month:0 +#: selection:hr.analytical.timesheet.users,month:0 +#, python-format +msgid "April" +msgstr "เมษายน" + +#. 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 "User Error!" +msgstr "" + +#. module: hr_timesheet +#: view:hr.sign.in.project:0 +msgid "Start Working" +msgstr "เริ่มทำงาน" + +#. module: hr_timesheet +#: field:hr.analytical.timesheet.employee,year:0 +#: field:hr.analytical.timesheet.users,year:0 +msgid "Year" +msgstr "ปี" + +#. module: hr_timesheet +#: view:hr.analytic.timesheet:0 +msgid "Duration" +msgstr "ระยะเวลา" + +#. module: hr_timesheet +#: view:hr.analytic.timesheet:0 +msgid "Accounting" +msgstr "บัญชี" + +#. module: hr_timesheet +#: xsl:hr.analytical.timesheet:0 +#: xsl:hr.analytical.timesheet_users:0 +msgid "Total" +msgstr "รวม" + +#. module: hr_timesheet +#: view:hr.sign.out.project:0 +msgid "Change Work" +msgstr "เปลี่ยนงาน" diff --git a/addons/hr_timesheet/wizard/hr_timesheet_print_employee_view.xml b/addons/hr_timesheet/wizard/hr_timesheet_print_employee_view.xml index 9079735aaae..3603809990b 100644 --- a/addons/hr_timesheet/wizard/hr_timesheet_print_employee_view.xml +++ b/addons/hr_timesheet/wizard/hr_timesheet_print_employee_view.xml @@ -11,7 +11,7 @@ <group colspan="4"> <field name="month"/> <field name="year"/> - <field name="employee_id" colspan="3"/> + <field name="employee_id" /> </group> <footer> <button string="Print" name="print_report" type="object" class="oe_highlight"/> @@ -33,7 +33,7 @@ <menuitem action="action_hr_timesheet_employee" id="menu_hr_timesheet_employee" - parent="hr.menu_hr_reporting" + parent="hr.menu_hr_reporting_timesheet" sequence="2" icon="STOCK_PRINT"/> </data> diff --git a/addons/hr_timesheet_sheet/i18n/th.po b/addons/hr_timesheet_sheet/i18n/th.po new file mode 100644 index 00000000000..374870990b1 --- /dev/null +++ b/addons/hr_timesheet_sheet/i18n/th.po @@ -0,0 +1,1151 @@ +# Thai translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:04+0000\n" +"PO-Revision-Date: 2013-06-17 06:47+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Thai <th@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-18 05:46+0000\n" +"X-Generator: Launchpad (build 16673)\n" + +#. module: hr_timesheet_sheet +#: field:hr.analytic.timesheet,sheet_id:0 +#: field:hr.attendance,sheet_id:0 +#: field:hr_timesheet_sheet.sheet.account,sheet_id:0 +#: field:hr_timesheet_sheet.sheet.day,sheet_id:0 +msgid "Sheet" +msgstr "แผ่นงาน" + +#. module: hr_timesheet_sheet +#: model:process.transition,name:hr_timesheet_sheet.process_transition_timesheetdraft0 +msgid "Service" +msgstr "บริการ" + +#. module: hr_timesheet_sheet +#: field:hr.timesheet.report,quantity:0 +#: field:timesheet.report,quantity:0 +msgid "Time" +msgstr "เวลา" + +#. module: hr_timesheet_sheet +#: help:hr.config.settings,timesheet_max_difference:0 +msgid "" +"Allowed difference in hours between the sign in/out and the timesheet\n" +" computation for one sheet. Set this to 0 if you do not want " +"any control." +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: view:hr_timesheet_sheet.sheet:0 +#: view:timesheet.report:0 +msgid "Group By..." +msgstr "จัดกลุ่มตาม..." + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,total_attendance:0 +msgid "Total Attendance" +msgstr "รวม การทำงาน" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +#: field:hr_timesheet_sheet.sheet,department_id:0 +#: view:timesheet.report:0 +#: field:timesheet.report,department_id:0 +msgid "Department" +msgstr "แผนก" + +#. module: hr_timesheet_sheet +#: model:process.transition,name:hr_timesheet_sheet.process_transition_tasktimesheet0 +msgid "Task timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:73 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:86 +#, python-format +msgid "" +"In order to create a timesheet for this employee, you must assign an " +"analytic journal to the employee, like 'Timesheet Journal'." +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "March" +msgstr "มีนาคม" + +#. module: hr_timesheet_sheet +#: view:timesheet.report:0 +#: field:timesheet.report,cost:0 +msgid "#Cost" +msgstr "#ต้นทุน" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,message_unread:0 +msgid "Unread Messages" +msgstr "ข้อความที่ไม่ได้อ่าน" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: field:hr.timesheet.report,company_id:0 +#: field:hr_timesheet_sheet.sheet,company_id:0 +#: view:timesheet.report:0 +#: field:timesheet.report,company_id:0 +msgid "Company" +msgstr "บริษัท" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: view:hr_timesheet_sheet.sheet:0 +#: model:ir.model,name:hr_timesheet_sheet.model_hr_timesheet_report +#: model:ir.model,name:hr_timesheet_sheet.model_hr_timesheet_sheet_sheet +#: model:ir.model,name:hr_timesheet_sheet.model_timesheet_report +#: model:process.node,name:hr_timesheet_sheet.process_node_timesheet0 +#: view:timesheet.report:0 +msgid "Timesheet" +msgstr "เวลาทำงาน" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Set to Draft" +msgstr "กำหนดให้เป็นแบบร่าง" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Timesheet Period" +msgstr "ระยะเวลาทำงาน" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,date_to:0 +#: field:timesheet.report,date_to:0 +msgid "Date to" +msgstr "ถึงวันที่" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "to" +msgstr "ถึง" + +#. module: hr_timesheet_sheet +#: model:process.node,note:hr_timesheet_sheet.process_node_invoiceonwork0 +msgid "Based on the timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:327 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:398 +#, python-format +msgid "You cannot modify an entry in a confirmed timesheet." +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: view:timesheet.report:0 +msgid "Group by day of date" +msgstr "กลุ่มโดย วัน ของวันที่" + +#. module: hr_timesheet_sheet +#: model:ir.ui.menu,name:hr_timesheet_sheet.menu_act_hr_timesheet_sheet_form_my_current +msgid "My Current Timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.transition.action,name:hr_timesheet_sheet.process_transition_action_validatetimesheet0 +msgid "Validate" +msgstr "ตรวจสอบ" + +#. module: hr_timesheet_sheet +#: selection:hr_timesheet_sheet.sheet,state:0 +msgid "Approved" +msgstr "อนุมัติแล้ว" + +#. module: hr_timesheet_sheet +#: selection:hr_timesheet_sheet.sheet,state_attendance:0 +msgid "Present" +msgstr "นำเสนอ" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +msgid "Total Cost" +msgstr "ค่าใช้จ่ายทั้งหมด" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +#: model:process.transition.action,name:hr_timesheet_sheet.process_transition_action_refusetimesheet0 +msgid "Refuse" +msgstr "ปฏิเสธ" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +#: model:ir.actions.act_window,name:hr_timesheet_sheet.act_hr_timesheet_sheet_sheet_2_hr_analytic_timesheet +msgid "Timesheet Activities" +msgstr "กิจกรรม เวลาทำงาน" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/wizard/hr_timesheet_current.py:38 +#, python-format +msgid "Please create an employee and associate it with this user." +msgstr "โปรดสร้างพนักงานและเชื่อมโยงกับผู้ใช้นี้" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:402 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:422 +#, python-format +msgid "" +"You cannot enter an attendance date outside the current timesheet dates." +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:205 +#, python-format +msgid "Week " +msgstr "สัปดาห์ " + +#. module: hr_timesheet_sheet +#: model:ir.actions.act_window,help:hr_timesheet_sheet.action_hr_timesheet_current_open +msgid "" +"My Timesheet opens your timesheet so that you can book your activities into " +"the system. From the same form, you can register your attendances (Sign " +"In/Out) and describe the working hours made on the different projects. At " +"the end of the period defined in the company, the timesheet is confirmed by " +"the user and can be validated by his manager. If required, as defined on the " +"project, you can generate the invoices based on the timesheet." +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,message_ids:0 +msgid "Messages" +msgstr "ข้อความ" + +#. module: hr_timesheet_sheet +#: help:hr_timesheet_sheet.sheet,state:0 +msgid "" +" * The 'Draft' status is used when a user is encoding a new and unconfirmed " +"timesheet. \n" +"* The 'Confirmed' status is used for to confirm the timesheet by user. " +" \n" +"* The 'Done' status is used when users timesheet is accepted by his/her " +"senior." +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:64 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:69 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:71 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:80 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:82 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:84 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:327 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:398 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:429 +#: code:addons/hr_timesheet_sheet/wizard/hr_timesheet_current.py:38 +#, python-format +msgid "Error!" +msgstr "ผิดพลาด!" + +#. module: hr_timesheet_sheet +#: field:hr.config.settings,timesheet_max_difference:0 +msgid "" +"Allow a difference of time between timesheets and attendances of (in hours)" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:99 +#, python-format +msgid "" +"Please verify that the total difference of the sheet is lower than %.2f." +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.actions.act_window,name:hr_timesheet_sheet.action_timesheet_report_stat_all +#: model:ir.ui.menu,name:hr_timesheet_sheet.menu_timesheet_report_all +msgid "Timesheet Sheet Analysis" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet.account,name:0 +msgid "Project / Analytic Account" +msgstr "โครงการ / วิเคราะห์ บัญชี" + +#. module: hr_timesheet_sheet +#: model:process.transition,name:hr_timesheet_sheet.process_transition_validatetimesheet0 +msgid "Validation" +msgstr "การรับรอง ความถูกต้อง" + +#. module: hr_timesheet_sheet +#: help:hr_timesheet_sheet.sheet,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:69 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:80 +#, python-format +msgid "" +"In order to create a timesheet for this employee, you must assign it to a " +"user." +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.node,note:hr_timesheet_sheet.process_node_attendance0 +msgid "Employee's timesheet entry" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:213 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:215 +#, python-format +msgid "Invalid Action!" +msgstr "การกระทำไม่ถูกต้อง!" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: field:hr.timesheet.report,account_id:0 +#: view:timesheet.report:0 +#: field:timesheet.report,account_id:0 +msgid "Analytic Account" +msgstr "วิเคราะห์บัญชี" + +#. module: hr_timesheet_sheet +#: help:hr_timesheet_sheet.sheet,message_summary:0 +msgid "" +"Holds the Chatter summary (number of messages, ...). This summary is " +"directly in html format in order to be inserted in kanban views." +msgstr "" + +#. module: hr_timesheet_sheet +#: field:timesheet.report,nbr:0 +msgid "#Nbr" +msgstr "#Nbr" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,date_from:0 +#: field:timesheet.report,date_from:0 +msgid "Date from" +msgstr "จากวันที่" + +#. module: hr_timesheet_sheet +#: view:hr.employee:0 +#: view:hr_timesheet_sheet.sheet:0 +#: model:ir.actions.act_window,name:hr_timesheet_sheet.act_hr_employee_2_hr_timesheet +#: view:res.company:0 +msgid "Timesheets" +msgstr "เวลาทำงาน" + +#. module: hr_timesheet_sheet +#: model:process.node,name:hr_timesheet_sheet.process_node_confirmedtimesheet0 +#: view:timesheet.report:0 +#: selection:timesheet.report,state:0 +msgid "Confirmed" +msgstr "ยืนยันแล้ว" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet.day,total_attendance:0 +#: model:ir.model,name:hr_timesheet_sheet.model_hr_attendance +#: model:process.node,name:hr_timesheet_sheet.process_node_attendance0 +msgid "Attendance" +msgstr "เวลาเข้าออกงาน" + +#. module: hr_timesheet_sheet +#: model:process.transition.action,name:hr_timesheet_sheet.process_transition_action_draftconfirmtimesheet0 +msgid "Confirm" +msgstr "ยืนยัน" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,timesheet_ids:0 +msgid "Timesheet lines" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,message_follower_ids:0 +msgid "Followers" +msgstr "ติดตาม" + +#. module: hr_timesheet_sheet +#: model:process.node,note:hr_timesheet_sheet.process_node_confirmedtimesheet0 +msgid "State is 'confirmed'." +msgstr "สถานะคือ 'ยืนยัน'" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,employee_id:0 +msgid "Employee" +msgstr "พนักงาน" + +#. module: hr_timesheet_sheet +#: selection:hr_timesheet_sheet.sheet,state:0 +#: selection:timesheet.report,state:0 +msgid "New" +msgstr "สร้างใหม่" + +#. module: hr_timesheet_sheet +#: model:ir.actions.act_window,name:hr_timesheet_sheet.action_week_attendance_graph +msgid "My Total Attendances By Week" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet.account,total:0 +msgid "Total Time" +msgstr "เวลารวม" + +#. module: hr_timesheet_sheet +#: model:ir.actions.act_window,name:hr_timesheet_sheet.act_hr_timesheet_sheet_form +#: model:ir.ui.menu,name:hr_timesheet_sheet.menu_act_hr_timesheet_sheet_form +msgid "Timesheets to Validate" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: view:hr_timesheet_sheet.sheet:0 +msgid "Hours" +msgstr "ชั่วโมง" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: view:timesheet.report:0 +msgid "Group by month of date" +msgstr "กลุ่ม โดย วันที่ของเดือน" + +#. module: hr_timesheet_sheet +#: model:process.transition,note:hr_timesheet_sheet.process_transition_validatetimesheet0 +msgid "The project manager validates the timesheets." +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "July" +msgstr "กรกฎาคม" + +#. module: hr_timesheet_sheet +#: field:hr.config.settings,timesheet_range:0 +msgid "Validate timesheets every" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:73 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:86 +#, python-format +msgid "Configuration Error!" +msgstr "การตั้งค่าผิดพลาด" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,state:0 +#: view:timesheet.report:0 +#: field:timesheet.report,state:0 +msgid "Status" +msgstr "สถานะ" + +#. module: hr_timesheet_sheet +#: model:process.node,name:hr_timesheet_sheet.process_node_workontask0 +msgid "Work on Task" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr_timesheet_sheet.sheet,state:0 +msgid "Waiting Approval" +msgstr "กำลังรอการอนุมัติ" + +#. module: hr_timesheet_sheet +#: view:timesheet.report:0 +msgid "#Quantity" +msgstr "#ปริมาณ" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,total_timesheet:0 +#: view:hr_timesheet_sheet.sheet.day:0 +#: field:hr_timesheet_sheet.sheet.day,total_timesheet:0 +msgid "Total Timesheet" +msgstr "รวมเวลาทำงาน" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Available Attendance" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Sign In" +msgstr "เข้าสู่ระบบ" + +#. module: hr_timesheet_sheet +#: view:timesheet.report:0 +#: field:timesheet.report,total_timesheet:0 +msgid "#Total Timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.model,name:hr_timesheet_sheet.model_hr_timesheet_current_open +msgid "hr.timesheet.current.open" +msgstr "hr.timesheet.current.open" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:71 +#, python-format +msgid "" +"In order to create a timesheet for this employee, you must link the employee " +"to a product, like 'Consultant'." +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "September" +msgstr "กันยายน" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "December" +msgstr "ธันวาคม" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.current.open:0 +msgid "It will open your current timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.config.settings,timesheet_range:0 +#: view:hr.timesheet.report:0 +#: field:hr.timesheet.report,month:0 +#: selection:res.company,timesheet_range:0 +#: view:timesheet.report:0 +#: field:timesheet.report,month:0 +msgid "Month" +msgstr "เดือน" + +#. module: hr_timesheet_sheet +#: view:timesheet.report:0 +#: field:timesheet.report,total_diff:0 +msgid "#Total Diff" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "In Draft" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.transition,name:hr_timesheet_sheet.process_transition_attendancetimesheet0 +msgid "Sign in/out" +msgstr "ลงชื่อ เข้า/ออก" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:84 +#, python-format +msgid "" +"In order to create a timesheet for this employee, you must link the employee " +"to a product." +msgstr "" + +#. module: hr_timesheet_sheet +#. openerp-web +#: code:addons/hr_timesheet_sheet/static/src/xml/timesheet.xml:58 +#, python-format +msgid "" +"You will be able to register your working hours and\n" +" activities." +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.current.open:0 +msgid "or" +msgstr "หรือ" + +#. module: hr_timesheet_sheet +#: model:process.transition,name:hr_timesheet_sheet.process_transition_invoiceontimesheet0 +msgid "Billing" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.transition,note:hr_timesheet_sheet.process_transition_timesheetdraft0 +msgid "" +"The timesheet line represents the time spent by the employee on a specific " +"service provided." +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,name:0 +msgid "Note" +msgstr "บันทึกย่อ" + +#. module: hr_timesheet_sheet +#. openerp-web +#: code:addons/hr_timesheet_sheet/static/src/xml/timesheet.xml:33 +#, python-format +msgid "Add" +msgstr "เพิ่ม" + +#. module: hr_timesheet_sheet +#: view:timesheet.report:0 +#: selection:timesheet.report,state:0 +msgid "Draft" +msgstr "ฉบับร่าง" + +#. module: hr_timesheet_sheet +#: field:res.company,timesheet_max_difference:0 +msgid "Timesheet allowed difference(Hours)" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.transition,note:hr_timesheet_sheet.process_transition_invoiceontimesheet0 +msgid "The invoice is created based on the timesheet." +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.node,name:hr_timesheet_sheet.process_node_drafttimesheetsheet0 +msgid "Draft Timesheet" +msgstr "แบบร่าง บันทึกเวลา" + +#. module: hr_timesheet_sheet +#: model:ir.actions.act_window,help:hr_timesheet_sheet.act_hr_timesheet_sheet_form +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" New timesheet to approve.\n" +" </p><p>\n" +" You must record timesheets every day and confirm at the end\n" +" of the week. Once the timesheet is confirmed, it should be\n" +" validated by a manager.\n" +" </p><p>\n" +" Timesheets can also be invoiced to customers, depending on " +"the\n" +" configuration of each project's related contract.\n" +" </p>\n" +" " +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.model,name:hr_timesheet_sheet.model_account_analytic_line +msgid "Analytic Line" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "August" +msgstr "สิงหาคม" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Differences" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "June" +msgstr "มิถุนายน" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,state_attendance:0 +msgid "Current Status" +msgstr "สถานะปัจจุบัน" + +#. module: hr_timesheet_sheet +#: selection:hr.config.settings,timesheet_range:0 +#: selection:res.company,timesheet_range:0 +msgid "Week" +msgstr "สัปดาห์" + +#. module: hr_timesheet_sheet +#: model:ir.model,name:hr_timesheet_sheet.model_hr_timesheet_sheet_sheet_account +#: model:ir.model,name:hr_timesheet_sheet.model_hr_timesheet_sheet_sheet_day +msgid "Timesheets by Period" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,message_is_follower:0 +msgid "Is a Follower" +msgstr "เป็นผู้ติดตาม" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: field:hr.timesheet.report,user_id:0 +#: field:hr_timesheet_sheet.sheet,user_id:0 +#: view:timesheet.report:0 +#: field:timesheet.report,user_id:0 +msgid "User" +msgstr "ผู้ใช้งาน" + +#. module: hr_timesheet_sheet +#: model:ir.actions.act_window,name:hr_timesheet_sheet.act_hr_timesheet_sheet_sheet_by_account +msgid "Timesheet by Account" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr.timesheet.report,date:0 +#: field:hr_timesheet_sheet.sheet.day,name:0 +#: field:timesheet.report,date:0 +msgid "Date" +msgstr "วันที่" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "November" +msgstr "พฤศจิกายน" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: view:timesheet.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: hr_timesheet_sheet +#: field:res.company,timesheet_range:0 +msgid "Timesheet range" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:board.board:0 +msgid "My Total Attendance By Week" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "October" +msgstr "ตุลาคม" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:60 +#, python-format +msgid "" +"The timesheet cannot be validated as it does not contain an equal number of " +"sign ins and sign outs." +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "January" +msgstr "มกราคม" + +#. module: hr_timesheet_sheet +#: model:process.transition,note:hr_timesheet_sheet.process_transition_attendancetimesheet0 +msgid "The employee signs in and signs out." +msgstr "พนักงาน ลงชื่อเข้า และออก" + +#. module: hr_timesheet_sheet +#: model:ir.model,name:hr_timesheet_sheet.model_res_company +msgid "Companies" +msgstr "บริษัท" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +#: field:hr_timesheet_sheet.sheet,message_summary:0 +msgid "Summary" +msgstr "สรุป" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:215 +#, python-format +msgid "You cannot delete a timesheet which have attendance entries." +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Unvalidated Timesheets" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:82 +#, python-format +msgid "" +"You cannot have 2 timesheets that overlap!\n" +"You should use the menu 'My Timesheet' to avoid this problem." +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Submit to Manager" +msgstr "ส่งไปยังผู้จัดการ" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: field:hr.timesheet.report,general_account_id:0 +#: view:timesheet.report:0 +#: field:timesheet.report,general_account_id:0 +msgid "General Account" +msgstr "บัญชีทั่วไป" + +#. module: hr_timesheet_sheet +#: help:hr.config.settings,timesheet_range:0 +#: help:res.company,timesheet_range:0 +msgid "Periodicity on which you validate your timesheets." +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet.account:0 +msgid "Search Account" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:429 +#, python-format +msgid "You cannot modify an entry in a confirmed timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: help:res.company,timesheet_max_difference:0 +msgid "" +"Allowed difference in hours between the sign in/out and the timesheet " +"computation for one sheet. Set this to 0 if you do not want any control." +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +#: field:hr_timesheet_sheet.sheet,period_ids:0 +#: view:hr_timesheet_sheet.sheet.day:0 +msgid "Period" +msgstr "ระยะเวลา" + +#. module: hr_timesheet_sheet +#: selection:hr.config.settings,timesheet_range:0 +#: view:hr.timesheet.report:0 +#: field:hr.timesheet.report,day:0 +#: selection:res.company,timesheet_range:0 +#: view:timesheet.report:0 +#: field:timesheet.report,day:0 +msgid "Day" +msgstr "วัน" + +#. module: hr_timesheet_sheet +#: constraint:hr_timesheet_sheet.sheet:0 +msgid "" +"You cannot have 2 timesheets that overlap!\n" +"Please use the menu 'My Current Timesheet' to avoid this problem." +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.current.open:0 +#: model:ir.actions.act_window,name:hr_timesheet_sheet.action_hr_timesheet_current_open +#: model:ir.actions.server,name:hr_timesheet_sheet.ir_actions_server_timsheet_sheet +msgid "My Timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:timesheet.report:0 +#: selection:timesheet.report,state:0 +msgid "Done" +msgstr "เสร็จสมบูรณ์" + +#. module: hr_timesheet_sheet +#: model:process.node,note:hr_timesheet_sheet.process_node_drafttimesheetsheet0 +msgid "State is 'draft'." +msgstr "สถานะคือ 'แบบร่าง'" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.current.open:0 +msgid "Cancel" +msgstr "ยกเลิก" + +#. module: hr_timesheet_sheet +#: model:process.node,name:hr_timesheet_sheet.process_node_validatedtimesheet0 +msgid "Validated" +msgstr "ผ่านการตรวจสอบแล้ว" + +#. module: hr_timesheet_sheet +#: model:process.node,name:hr_timesheet_sheet.process_node_invoiceonwork0 +msgid "Invoice on Work" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet.account:0 +msgid "Timesheet by Accounts" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/wizard/hr_timesheet_current.py:50 +#, python-format +msgid "Open Timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: view:timesheet.report:0 +msgid "Group by year of date" +msgstr "" + +#. module: hr_timesheet_sheet +#. openerp-web +#: code:addons/hr_timesheet_sheet/static/src/xml/timesheet.xml:56 +#, python-format +msgid "Click to add projects, contracts or analytic accounts." +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.node,note:hr_timesheet_sheet.process_node_validatedtimesheet0 +msgid "State is 'validated'." +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.model,name:hr_timesheet_sheet.model_hr_config_settings +msgid "hr.config.settings" +msgstr "hr.config.settings" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: model:ir.actions.act_window,name:hr_timesheet_sheet.action_hr_timesheet_report_stat_all +#: model:ir.ui.menu,name:hr_timesheet_sheet.menu_hr_timesheet_report_all +msgid "Timesheet Analysis" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Search Timesheet" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Confirmed Timesheets" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Details" +msgstr "รายละเอียด" + +#. module: hr_timesheet_sheet +#: model:ir.model,name:hr_timesheet_sheet.model_hr_analytic_timesheet +msgid "Timesheet Line" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:213 +#, python-format +msgid "You cannot delete a timesheet which is already confirmed." +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: field:hr.timesheet.report,product_id:0 +#: view:timesheet.report:0 +#: field:timesheet.report,product_id:0 +msgid "Product" +msgstr "ผลิตภัณฑ์" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +#: field:hr_timesheet_sheet.sheet,attendances_ids:0 +#: model:ir.actions.act_window,name:hr_timesheet_sheet.act_hr_timesheet_sheet_sheet_2_hr_attendance +msgid "Attendances" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr.timesheet.report,name:0 +#: field:timesheet.report,name:0 +msgid "Description" +msgstr "รายละเอียด" + +#. module: hr_timesheet_sheet +#: model:process.transition,note:hr_timesheet_sheet.process_transition_confirmtimesheet0 +msgid "The employee periodically confirms his own timesheets." +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "May" +msgstr "พฤษภาคม" + +#. module: hr_timesheet_sheet +#: model:process.node,note:hr_timesheet_sheet.process_node_workontask0 +msgid "Defines the work summary of task" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Sign Out" +msgstr "ออกจากระบบ" + +#. module: hr_timesheet_sheet +#: model:process.transition,note:hr_timesheet_sheet.process_transition_tasktimesheet0 +msgid "Moves task entry into the timesheet line" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet.day:0 +msgid "Total Attendances" +msgstr "รวมเวลาทำงาน" + +#. module: hr_timesheet_sheet +#. openerp-web +#: code:addons/hr_timesheet_sheet/static/src/xml/timesheet.xml:39 +#, python-format +msgid "Add a Line" +msgstr "เพิ่มบรรทัด" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,total_difference:0 +#: field:hr_timesheet_sheet.sheet.day,total_difference:0 +msgid "Difference" +msgstr "ความแตกต่าง" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:64 +#, python-format +msgid "You cannot duplicate a timesheet." +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr_timesheet_sheet.sheet,state_attendance:0 +msgid "Absent" +msgstr "ขาด" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "February" +msgstr "กุมภาพันธ์" + +#. module: hr_timesheet_sheet +#: model:ir.actions.act_window,help:hr_timesheet_sheet.action_hr_timesheet_report_stat_all +msgid "" +"<p>\n" +" This report performs analysis on timesheets created by your\n" +" human resources in the system. It allows you to have a full\n" +" overview of entries done by your employees. You can group " +"them\n" +" by specific selection criteria thanks to the search tool.\n" +" </p>\n" +" " +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Employees" +msgstr "พนักงาน" + +#. module: hr_timesheet_sheet +#: constraint:hr.analytic.timesheet:0 +msgid "You cannot modify an entry in a Confirmed/Done timesheet !" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:process.node,note:hr_timesheet_sheet.process_node_timesheet0 +msgid "Information of time spent on a service" +msgstr "" + +#. module: hr_timesheet_sheet +#: selection:hr.timesheet.report,month:0 +#: selection:timesheet.report,month:0 +msgid "April" +msgstr "เมษายน" + +#. module: hr_timesheet_sheet +#: model:process.transition,name:hr_timesheet_sheet.process_transition_confirmtimesheet0 +msgid "Confirmation" +msgstr "ยืนยัน" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:99 +#, python-format +msgid "Warning!" +msgstr "คำเตือน!" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet.account,invoice_rate:0 +msgid "Invoice rate" +msgstr "" + +#. module: hr_timesheet_sheet +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:402 +#: code:addons/hr_timesheet_sheet/hr_timesheet_sheet.py:422 +#, python-format +msgid "User Error!" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet.day:0 +msgid "Total Difference" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "Approve" +msgstr "อนุมัติ" + +#. module: hr_timesheet_sheet +#: help:hr_timesheet_sheet.sheet,message_ids:0 +msgid "Messages and communication history" +msgstr "ข้อความและประวัติการสื่อสาร" + +#. module: hr_timesheet_sheet +#: field:hr_timesheet_sheet.sheet,account_ids:0 +msgid "Analytic accounts" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:timesheet.report:0 +#: field:timesheet.report,to_invoice:0 +msgid "Type of Invoicing" +msgstr "" + +#. module: hr_timesheet_sheet +#: view:timesheet.report:0 +#: field:timesheet.report,total_attendance:0 +msgid "#Total Attendance" +msgstr "" + +#. module: hr_timesheet_sheet +#: field:hr.timesheet.report,cost:0 +msgid "Cost" +msgstr "ต้นทุน" + +#. module: hr_timesheet_sheet +#: field:timesheet.report,date_current:0 +msgid "Current date" +msgstr "วันที่ปัจจุบัน" + +#. module: hr_timesheet_sheet +#: model:process.process,name:hr_timesheet_sheet.process_process_hrtimesheetprocess0 +msgid "Hr Timesheet" +msgstr "บันทึกเวลา Hr" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.report:0 +#: field:hr.timesheet.report,year:0 +#: view:timesheet.report:0 +#: field:timesheet.report,year:0 +msgid "Year" +msgstr "ปี" + +#. module: hr_timesheet_sheet +#: view:hr.timesheet.current.open:0 +#: selection:hr_timesheet_sheet.sheet,state:0 +msgid "Open" +msgstr "เปิด" + +#. module: hr_timesheet_sheet +#: view:hr_timesheet_sheet.sheet:0 +msgid "To Approve" +msgstr "ให้การอนุมัติ" + +#. module: hr_timesheet_sheet +#. openerp-web +#: code:addons/hr_timesheet_sheet/static/src/xml/timesheet.xml:15 +#: code:addons/hr_timesheet_sheet/static/src/xml/timesheet.xml:40 +#: view:hr_timesheet_sheet.sheet.account:0 +#, python-format +msgid "Total" +msgstr "รวม" + +#. module: hr_timesheet_sheet +#: field:hr.timesheet.report,journal_id:0 +msgid "Journal" +msgstr "" + +#. module: hr_timesheet_sheet +#: model:ir.actions.act_window,name:hr_timesheet_sheet.act_hr_timesheet_sheet_sheet_by_day +msgid "Timesheet by Day" +msgstr "" diff --git a/addons/hr_timesheet_sheet/report/timesheet_report_view.xml b/addons/hr_timesheet_sheet/report/timesheet_report_view.xml index aee07fc23b6..ddc66260cf0 100644 --- a/addons/hr_timesheet_sheet/report/timesheet_report_view.xml +++ b/addons/hr_timesheet_sheet/report/timesheet_report_view.xml @@ -16,7 +16,7 @@ <field name="name">timesheet.report.tree</field> <field name="model">timesheet.report</field> <field name="arch" type="xml"> - <tree colors="blue:state == 'draft';black:state in ('confirm','new');gray:state == 'cancel'" string="Timesheet"> + <tree colors="blue:state == 'draft';black:state in ('confirm','new');gray:state == 'cancel'" string="Timesheet" create="false"> <field name="date" invisible="1"/> <field name="name" invisible="1"/> <field name="user_id" invisible="1"/> diff --git a/addons/hr_timesheet_sheet/security/ir.model.access.csv b/addons/hr_timesheet_sheet/security/ir.model.access.csv index 8b9414d9b9d..3feb9cf1a92 100644 --- a/addons/hr_timesheet_sheet/security/ir.model.access.csv +++ b/addons/hr_timesheet_sheet/security/ir.model.access.csv @@ -3,7 +3,7 @@ access_hr_timesheet_sheet_sheet_user,hr_timesheet_sheet.sheet.user,model_hr_time access_hr_timesheet_sheet_sheet_system_employee,hr_timesheet_sheet.sheet.system.employee,model_hr_timesheet_sheet_sheet,base.group_user,1,1,1,0
access_hr_timesheet_sheet_sheet_day,hr_timesheet_sheet.sheet.day,model_hr_timesheet_sheet_sheet_day,base.group_hr_user,1,1,1,1
access_hr_timesheet_sheet_sheet_account,hr_timesheet_sheet.sheet.account,model_hr_timesheet_sheet_sheet_account,base.group_hr_user,1,1,1,1
-access_hr_timesheet_report,hr.timesheet.report,model_hr_timesheet_report,base.group_hr_manager,1,1,1,1
+access_hr_timesheet_report,hr.timesheet.report,model_hr_timesheet_report,base.group_hr_manager,1,1,0,0
access_hr_analytic_timesheet_system_user,hr.analytic.timesheet.system.user,model_hr_analytic_timesheet,base.group_user,1,0,0,0
access_hr_timesheet_sheet_sheet_day,hr.timesheet.sheet.sheet.day.user,model_hr_timesheet_sheet_sheet_day,base.group_user,1,1,1,0
-access_timesheet_report,timesheet.report,model_timesheet_report,base.group_hr_manager,1,1,1,1
+access_timesheet_report,timesheet.report,model_timesheet_report,base.group_hr_manager,1,1,0,0
diff --git a/addons/hr_timesheet_sheet/static/src/js/timesheet.js b/addons/hr_timesheet_sheet/static/src/js/timesheet.js index e7d13c425b6..461d8c73803 100644 --- a/addons/hr_timesheet_sheet/static/src/js/timesheet.js +++ b/addons/hr_timesheet_sheet/static/src/js/timesheet.js @@ -190,8 +190,13 @@ openerp.hr_timesheet_sheet = function(instance) { $(this).val(self.sum_box(account, day_count, true)); } else { account.days[day_count].lines[0].unit_amount += num - self.sum_box(account, day_count); - self.display_totals(); - self.sync(); + var product = (account.days[day_count].lines[0].product_id instanceof Array) ? account.days[day_count].lines[0].product_id[0] : account.days[day_count].lines[0].product_id + var journal = (account.days[day_count].lines[0].journal_id instanceof Array) ? account.days[day_count].lines[0].journal_id[0] : account.days[day_count].lines[0].journal_id + new instance.web.Model("hr.analytic.timesheet").call("on_change_unit_amount", [[], product, account.days[day_count].lines[0].unit_amount, false, false, journal]).then(function(res) { + account.days[day_count].lines[0]['amount'] = res.value.amount || 0; + self.display_totals(); + self.sync(); + }); if(!isNaN($(this).val())){ $(this).val(self.sum_box(account, day_count, true)); } @@ -308,10 +313,10 @@ openerp.hr_timesheet_sheet = function(instance) { generate_o2m_value: function() { var self = this; var ops = []; - + _.each(self.accounts, function(account) { var auth_keys = _.extend(_.clone(account.account_defaults), { - name: true, unit_amount: true, date: true, account_id:true, + name: true, amount:true, unit_amount: true, date: true, account_id:true, }); _.each(account.days, function(day) { _.each(day.lines, function(line) { diff --git a/addons/idea/__init__.py b/addons/idea/__init__.py index e6f7333e055..2b8966f9e7a 100644 --- a/addons/idea/__init__.py +++ b/addons/idea/__init__.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# Copyright (C) 2004-Today OpenERP S.A. (<http://openerp.com>). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,5 +19,4 @@ # ############################################################################## -import idea - +import models diff --git a/addons/idea/__openerp__.py b/addons/idea/__openerp__.py index 8f32e1e91c4..7d8560a2cf4 100644 --- a/addons/idea/__openerp__.py +++ b/addons/idea/__openerp__.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# Copyright (C) 2004-Today OpenERP S.A. (<http://openerp.com>). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -22,29 +22,39 @@ { 'name': 'Ideas', - 'version': '0.1', + 'summary': 'Share and Discuss your Ideas', + 'version': '1.0', 'category': 'Tools', 'description': """ -This module allows user to easily and efficiently participate in enterprise innovation. -======================================================================================= +Share your ideas and participate in enterprise innovation +========================================================= -It allows everybody to express ideas about different subjects. -Then, other users can comment on these ideas and vote for particular ideas. -Each idea has a score based on the different votes. +The Ideas module give users a way to express and discuss ideas, allowing everybody +to participate in enterprise innovation. Every user can suggest, comment ideas. The managers can obtain an easy view of best ideas from all the users. Once installed, check the menu 'Ideas' in the 'Tools' main menu.""", 'author': 'OpenERP SA', - 'website': 'http://openerp.com', + 'website': 'http://www.openerp.com', 'depends': ['mail'], 'data': [ - 'security/idea_security.xml', + 'security/idea.xml', 'security/ir.model.access.csv', - 'idea_view.xml', - 'idea_workflow.xml', + 'views/idea.xml', + 'views/category.xml', + 'data/idea.xml', + 'data/idea_workflow.xml', + ], + 'demo': [ + 'demo/idea.xml', ], - 'demo': ['idea_data.xml'], - 'test':[], 'installable': True, + 'application': True, 'images': [], + 'css': [ + 'static/src/css/idea_idea.css', + ], + 'js': [], + 'qweb': [], } + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/idea/data/idea.xml b/addons/idea/data/idea.xml new file mode 100644 index 00000000000..c057868d6de --- /dev/null +++ b/addons/idea/data/idea.xml @@ -0,0 +1,6 @@ +<?xml version="1.0"?> +<openerp> + <data> + + </data> +</openerp>
\ No newline at end of file diff --git a/addons/idea/data/idea_workflow.xml b/addons/idea/data/idea_workflow.xml new file mode 100644 index 00000000000..b460c73a6ed --- /dev/null +++ b/addons/idea/data/idea_workflow.xml @@ -0,0 +1,57 @@ +<?xml version="1.0"?> +<openerp> + <data> + <record model="workflow" id="wkf_idea"> + <field name="name">idea.wkf</field> + <field name="osv">idea.idea</field> + <field name="on_create">True</field> + </record> + + <record model="workflow.activity" id="act_normal"> + <field name="wkf_id" ref="wkf_idea" /> + <field name="flow_start">True</field> + <field name="name">normal</field> + <field name="kind">function</field> + <field name="action">idea_set_normal_priority()</field> + </record> + + <record model="workflow.activity" id="act_low"> + <field name="wkf_id" ref="wkf_idea" /> + <field name="name">low</field> + <field name="kind">function</field> + <field name="action">idea_set_low_priority()</field> + </record> + + <record model="workflow.activity" id="act_high"> + <field name="wkf_id" ref="wkf_idea" /> + <field name="name">high</field> + <field name="kind">function</field> + <field name="action">idea_set_high_priority()</field> + </record> + + <record model="workflow.transition" id="t1"> + <field name="act_from" ref="act_normal" /> + <field name="act_to" ref="act_low" /> + <field name="signal">idea_set_low_priority</field> + </record> + + <record model="workflow.transition" id="t2"> + <field name="act_from" ref="act_low" /> + <field name="act_to" ref="act_normal" /> + <field name="signal">idea_set_normal_priority</field> + </record> + + <record model="workflow.transition" id="t3"> + <field name="act_from" ref="act_normal" /> + <field name="act_to" ref="act_high" /> + <field name="signal">idea_set_high_priority</field> + </record> + + <record model="workflow.transition" id="t4"> + <field name="act_from" ref="act_high" /> + <field name="act_to" ref="act_normal" /> + <field name="signal">idea_set_normal_priority</field> + </record> + + </data> +</openerp> diff --git a/addons/idea/demo/idea.xml b/addons/idea/demo/idea.xml new file mode 100644 index 00000000000..2b4ff58b973 --- /dev/null +++ b/addons/idea/demo/idea.xml @@ -0,0 +1,68 @@ +<?xml version="1.0"?> +<openerp> + <data> + + <record model="idea.category" id="idea_cat_0"> + <field name="name">Sales</field> + </record> + <record model="idea.category" id="idea_cat_1"> + <field name="name">Organization</field> + </record> + <record model="idea.category" id="idea_cat_2"> + <field name="name">Technical</field> + </record> + + <record model="idea.idea" id="idea_idea_0"> + <field name="name">Docking station along with tablet PC</field> + <field name="description">When you sell a tablet PC, maybe we could propose a docking station with it. I offer 20% on the docking stating (not the tablet).</field> + <field name="user_id" eval="ref('base.user_demo')"/> + <field name="category_ids" eval="[(6, 0, [ref('idea.idea_cat_0')])]"/> + </record> + + <record model="idea.idea" id="idea_idea_1"> + <field name="name">Communicate using emails</field> + <field name="description">I start communicating with prospects more by email than phonecalls. I send an email to create a sense of emergency, like "can I call you this week about our quote?" and I call only those that answer this email.</field> + <field name="user_id" eval="ref('base.user_demo')"/> + <field name="state">open</field> + <field name="category_ids" eval="[(6, 0, [ref('idea.idea_cat_0'), ref('idea.idea_cat_1')])]"/> + </record> + <workflow action="idea_set_high_priority" model="idea.idea" ref="idea_idea_1"/> + + <record model="idea.idea" id="idea_idea_2"> + <field name="name">Use a two-stages testing phase</field> + <field name="description">We should perform testing using two levels of validation.</field> + <field name="user_id" eval="ref('base.user_root')"/> + <field name="state">open</field> + <field name="category_ids" eval="[(6, 0, [ref('idea.idea_cat_1'), ref('idea.idea_cat_2')])]"/> + </record> + <workflow action="idea_set_high_priority" model="idea.idea" ref="idea_idea_2"/> + + <record model="idea.idea" id="idea_idea_3"> + <field name="name">Write some functional documentation about procurements</field> + <field name="description">We receive many questions about OpenChatter. Maybe some functional doc could save us some time.</field> + <field name="user_id" eval="ref('base.user_demo')"/> + <field name="state">open</field> + <field name="category_ids" eval="[(6, 0, [ref('idea.idea_cat_0'), ref('idea.idea_cat_1')])]"/> + </record> + + <record model="idea.idea" id="idea_idea_4"> + <field name="name">Better management of smtp errors</field> + <field name="description">There should be away to store the reason why some emails are not sent.</field> + <field name="user_id" eval="ref('base.user_root')"/> + <field name="state">close</field> + <field name="category_ids" eval="[(6, 0, [ref('idea.idea_cat_2')])]"/> + </record> + <workflow action="idea_set_low_priority" model="idea.idea" ref="idea_idea_4"/> + + <record model="idea.idea" id="idea_idea_5"> + <field name="name">Kitten mode enabled by default</field> + <field name="description">As this is the most loved feature, the kitten mode should be enabled by default. And maybe even impossible to remove.</field> + <field name="user_id" eval="ref('base.user_root')"/> + <field name="state">cancel</field> + <field name="category_ids" eval="[(6, 0, [ref('idea.idea_cat_2')])]"/> + </record> + <workflow action="idea_set_low_priority" model="idea.idea" ref="idea_idea_4"/> + + </data> +</openerp> + diff --git a/addons/idea/idea.py b/addons/idea/idea.py deleted file mode 100644 index d1e250ce9a5..00000000000 --- a/addons/idea/idea.py +++ /dev/null @@ -1,78 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). -# -# 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 <http://www.gnu.org/licenses/>. -# -############################################################################## - -from openerp.osv import osv -from openerp.osv import fields -from openerp.tools.translate import _ -import time - -VoteValues = [('-1', 'Not Voted'), ('0', 'Very Bad'), ('25', 'Bad'), \ - ('50', 'Normal'), ('75', 'Good'), ('100', 'Very Good') ] -DefaultVoteValue = '50' - -class idea_category(osv.osv): - """ Category of Idea """ - _name = "idea.category" - _description = "Idea Category" - _columns = { - 'name': fields.char('Category Name', size=64, required=True), - } - _sql_constraints = [ - ('name', 'unique(name)', 'The name of the category must be unique') - ] - _order = 'name asc' - - -class idea_idea(osv.osv): - """ Idea """ - _name = 'idea.idea' - _inherit = ['mail.thread'] - _columns = { - 'create_uid': fields.many2one('res.users', 'Creator', required=True, readonly=True), - 'name': fields.char('Idea Summary', size=64, required=True, readonly=True, oldname='title', states={'draft': [('readonly', False)]}), - 'description': fields.text('Description', help='Content of the idea', readonly=True, states={'draft': [('readonly', False)]}), - 'category_ids': fields.many2many('idea.category', string='Tags', readonly=True, states={'draft': [('readonly', False)]}), - 'state': fields.selection([('draft', 'New'), - ('open', 'Accepted'), - ('cancel', 'Refused'), - ('close', 'Done')], - 'Status', readonly=True, track_visibility='onchange', - ) - } - _sql_constraints = [ - ('name', 'unique(name)', 'The name of the idea must be unique') - ] - _defaults = { - 'state': lambda *a: 'draft', - } - _order = 'name asc' - - def idea_cancel(self, cr, uid, ids, context=None): - return self.write(cr, uid, ids, {'state': 'cancel'}, context=context) - - def idea_open(self, cr, uid, ids, context={}): - return self.write(cr, uid, ids, {'state': 'open'}, context=context) - - def idea_close(self, cr, uid, ids, context={}): - return self.write(cr, uid, ids, {'state': 'close'}, context=context) - - def idea_draft(self, cr, uid, ids, context={}): - return self.write(cr, uid, ids, {'state': 'draft'}, context=context) diff --git a/addons/idea/idea_data.xml b/addons/idea/idea_data.xml deleted file mode 100644 index 421cb6a9eef..00000000000 --- a/addons/idea/idea_data.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0"?> -<openerp> - <data> - - <record model="idea.category" id="idea_category_sales"> - <field name="name">Sales</field> - </record> - <record model="idea.category" id="idea_category_general"> - <field name="name">Organization</field> - </record> - <record model="idea.category" id="idea_category_technical"> - <field name="name">Technical</field> - </record> - - <record id="base.user_demo" model="res.users"> - <field name="groups_id" eval="[(4,ref('base.group_tool_user'))]"/> - </record> - - </data> -</openerp> - diff --git a/addons/idea/idea_view.xml b/addons/idea/idea_view.xml deleted file mode 100644 index 53734d53919..00000000000 --- a/addons/idea/idea_view.xml +++ /dev/null @@ -1,135 +0,0 @@ -<?xml version="1.0"?> -<openerp> - <data> - <!-- Top menu item --> - <menuitem name="Tools" id="base.menu_tools" sequence="120" groups="base.group_tool_user"/> - <!-- Idea Categories Search View--> - <record model="ir.ui.view" id="view_idea_category_search"> - <field name="name">idea.category.search</field> - <field name="model">idea.category</field> - <field name="arch" type="xml"> - <search string="Ideas Categories"> - <field name="name" string="Category"/> - </search> - </field> - </record> - - <!-- Idea Category Form View --> - <record model="ir.ui.view" id="view_idea_category_form"> - <field name="name">idea.category.form</field> - <field name="model">idea.category</field> - <field name="arch" type="xml"> - <form string="Category of Ideas" version="7.0"> - <group> - <field name="name"/> - </group> - </form> - </field> - </record> - - <!-- Idea Category Tree View --> - <record model="ir.ui.view" id="view_idea_category_tree"> - <field name="name">idea.category.tree</field> - <field name="model">idea.category</field> - <field name="field_parent"></field> - <field name="arch" type="xml"> - <tree string="Category of ideas"> - <field name="name"/> - </tree> - </field> - </record> - - <!-- Idea Category Action --> - - <record model="ir.actions.act_window" id="action_idea_category"> - <field name="name">Categories</field> - <field name="res_model">idea.category</field> - <field name="view_type">form</field> - <field name="view_mode">tree,form</field> - <field name="search_view_id" ref="view_idea_category_search"/> - </record> - - <menuitem name="Configuration" parent="base.menu_tools" - id="base.menu_lunch_survey_root" sequence="20" /> - - <menuitem name="Ideas" parent="base.menu_lunch_survey_root" id="menu_ideas" sequence="3"/> - - <menuitem name="Categories" parent="menu_ideas" id="menu_idea_category" action="action_idea_category" /> - - -<!-- New Idea Form View --> - - <record model="ir.ui.view" id="view_idea_idea_form"> - <field name="name">idea.idea.form</field> - <field name="model">idea.idea</field> - <field name="arch" type="xml"> - <form string="Idea" version="7.0"> - <header> - <button name="idea_open" string="Open" states="draft" class="oe_highlight"/> - <button name="idea_close" string="Accept" states="open" class="oe_highlight"/> - <button name="idea_cancel" string="Refuse" states="open" class="oe_highlight"/> - <field name="state" widget="statusbar" statusbar_visible="draft,open,close"/> - </header> - <sheet> - <label for="name" class="oe_edit_only"/> - <h1><field name="name"/></h1> - <label for="category_ids" class="oe_edit_only"/> - <field name="category_ids" widget="many2many_tags"/> - <label for="description"/><newline/> - <field name="description"/> - </sheet> - <div class="oe_chatter"> - <field name="message_follower_ids" widget="mail_followers"/> - <field name="message_ids" widget="mail_thread"/> - </div> - </form> - </field> - </record> - - <!-- New Idea Tree View --> - - <record model="ir.ui.view" id="view_idea_idea_tree"> - <field name="name">idea.idea.tree</field> - <field name="model">idea.idea</field> - <field name="arch" type="xml"> - <tree colors="blue:state == 'draft';black:state in ('open','close');gray:state == 'cancel'" string="Ideas"> - <field name="name"/> - <field name="create_uid"/> - <field name="state"/> - </tree> - </field> - </record> - - <!-- Search Idea --> - - <record model="ir.ui.view" id="view_idea_idea_search"> - <field name="name">idea.idea.search</field> - <field name="model">idea.idea</field> - <field name="arch" type="xml"> - <search string="Ideas"> - <field name="name" string="Idea"/> - <filter icon="terp-document-new" string="New" domain="[('state','=', 'draft')]" help="New Ideas"/> - <filter icon="terp-camera_test" string="In Progress" domain="[('state','=', 'open')]" help="Open Ideas"/> - <filter icon="terp-check" string="Accepted" domain="[('state','=','close')]" help="Accepted Ideas" /> - <field name="category_ids"/> - <group expand="0" string="Group By..."> - <filter icon="terp-personal" string="Creator" help="By Creators" context="{'group_by':'create_uid'}"/> - <filter icon="terp-stock_symbol-selection" string="Category" help="By Idea Category" context="{'group_by':'category_ids'}"/> - <filter icon="terp-stock_effects-object-colorize" string="Status" help="By States" context="{'group_by':'state'}"/> - </group> - </search> - </field> - </record> - - <record model="ir.actions.act_window" id="action_idea_idea"> - <field name="name">Ideas</field> - <field name="res_model">idea.idea</field> - <field name="view_type">form</field> - <field name="view_mode">tree,form</field> - <field name="search_view_id" ref="view_idea_idea_search"/> - </record> - - <menuitem name="Ideas" parent="menu_ideas" id="menu_idea_idea" action="action_idea_idea" sequence="1"/> - - </data> -</openerp> diff --git a/addons/idea/idea_workflow.xml b/addons/idea/idea_workflow.xml deleted file mode 100644 index 649541ae349..00000000000 --- a/addons/idea/idea_workflow.xml +++ /dev/null @@ -1,60 +0,0 @@ -<?xml version="1.0"?> -<openerp> - <data> - <record model="workflow" id="wkf_idea"> - <field name="name">idea.wkf</field> - <field name="osv">idea.idea</field> - <field name="on_create">True</field> - </record> - - <record model="workflow.activity" id="act_draft"> - <field name="wkf_id" ref="wkf_idea" /> - <field name="flow_start">True</field> - <field name="name">draft</field> - <field name="kind">function</field> - <field name="action">idea_draft()</field> - </record> - - <record model="workflow.activity" id="act_open"> - <field name="wkf_id" ref="wkf_idea" /> - <field name="name">open</field> - <field name="kind">function</field> - <field name="action">idea_open()</field> - </record> - - <record model="workflow.activity" id="act_close"> - <field name="wkf_id" ref="wkf_idea" /> - <field name="name">close</field> - <field name="kind">function</field> - <field name="action">idea_close()</field> - <field name="flow_stop">True</field> - </record> - - <record model="workflow.activity" id="act_cancel"> - <field name="wkf_id" ref="wkf_idea" /> - <field name="name">cancel</field> - <field name="kind">function</field> - <field name="action">idea_cancel()</field> - <field name="flow_stop">True</field> - </record> - - <record model="workflow.transition" id="t1"> - <field name="act_from" ref="act_draft" /> - <field name="act_to" ref="act_open" /> - <field name="signal">idea_open</field> - </record> - - <record model="workflow.transition" id="t2"> - <field name="act_from" ref="act_open" /> - <field name="act_to" ref="act_close" /> - <field name="signal">idea_close</field> - </record> - - <record model="workflow.transition" id="t4"> - <field name="act_from" ref="act_open" /> - <field name="act_to" ref="act_cancel" /> - <field name="signal">idea_cancel</field> - </record> - - </data> -</openerp> diff --git a/addons/idea/models/__init__.py b/addons/idea/models/__init__.py new file mode 100644 index 00000000000..e8a48771771 --- /dev/null +++ b/addons/idea/models/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Business Applications +# Copyright (c) 2013-TODAY OpenERP S.A. <http://openerp.com> +# +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## + +import idea diff --git a/addons/idea/models/idea.py b/addons/idea/models/idea.py new file mode 100644 index 00000000000..61934cfc3b2 --- /dev/null +++ b/addons/idea/models/idea.py @@ -0,0 +1,130 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-Today OpenERP S.A. (<http://openerp.com>). +# +# 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 <http://www.gnu.org/licenses/>. +# +############################################################################## + +from openerp.osv import osv +from openerp.osv import fields + + +class IdeaCategory(osv.Model): + """ Category of Idea """ + _name = "idea.category" + _description = "Idea Category" + + _order = 'name asc' + + _columns = { + 'name': fields.char('Category Name', size=64, required=True), + } + + _sql_constraints = [ + ('name', 'unique(name)', 'The name of the category must be unique') + ] + + +class IdeaIdea(osv.Model): + """ Model of an Idea """ + _name = 'idea.idea' + _description = 'Propose and Share your Ideas' + + _rec_name = 'name' + _order = 'name asc' + + def _get_state_list(self, cr, uid, context=None): + return [('draft', 'New'), + ('open', 'In discussion'), + ('close', 'Accepted'), + ('cancel', 'Refused')] + + def _get_color(self, cr, uid, ids, fields, args, context=None): + res = dict.fromkeys(ids, 3) + for idea in self.browse(cr, uid, ids, context=context): + if idea.priority == 'low': + res[idea.id] = 0 + elif idea.priority == 'high': + res[idea.id] = 7 + return res + + _columns = { + 'user_id': fields.many2one('res.users', 'Responsible', required=True), + 'name': fields.char('Summary', required=True, readonly=True, + states={'draft': [('readonly', False)]}, + oldname='title'), + 'description': fields.text('Description', required=True, + states={'draft': [('readonly', False)]}, + help='Content of the idea'), + 'category_ids': fields.many2many('idea.category', string='Tags'), + 'state': fields.selection(_get_state_list, string='Status', required=True), + 'priority': fields.selection([('low', 'Low'), ('normal', 'Normal'), ('high', 'High')], + string='Priority', required=True), + 'color': fields.function(_get_color, type='integer', string='Color Index'), + } + + _sql_constraints = [ + ('name', 'unique(name)', 'The name of the idea must be unique') + ] + + _defaults = { + 'user_id': lambda self, cr, uid, ctx=None: uid, + 'state': lambda self, cr, uid, ctx=None: self._get_state_list(cr, uid, ctx)[0][0], + 'priority': 'normal', + } + + #------------------------------------------------------ + # Technical stuff + #------------------------------------------------------ + + def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False): + """ Override read_group to always display all states. """ + if groupby and groupby[0] == "state": + # Default result structure + states = self._get_state_list(cr, uid, context=context) + read_group_all_states = [{ + '__context': {'group_by': groupby[1:]}, + '__domain': domain + [('state', '=', state_value)], + 'state': state_value, + 'state_count': 0, + } for state_value, state_name in states] + # Get standard results + read_group_res = super(IdeaIdea, self).read_group(cr, uid, domain, fields, groupby, offset, limit, context, orderby) + # Update standard results with default results + result = [] + for state_value, state_name in states: + res = filter(lambda x: x['state'] == state_value, read_group_res) + if not res: + res = filter(lambda x: x['state'] == state_value, read_group_all_states) + res[0]['state'] = [state_value, state_name] + result.append(res[0]) + return result + else: + return super(IdeaIdea, self).read_group(cr, uid, domain, fields, groupby, offset=offset, limit=limit, context=context, orderby=orderby) + + #------------------------------------------------------ + # Workflow / Actions + #------------------------------------------------------ + + def idea_set_low_priority(self, cr, uid, ids, context=None): + return self.write(cr, uid, ids, {'priority': 'low'}, context=context) + + def idea_set_normal_priority(self, cr, uid, ids, context={}): + return self.write(cr, uid, ids, {'priority': 'normal'}, context=context) + + def idea_set_high_priority(self, cr, uid, ids, context={}): + return self.write(cr, uid, ids, {'priority': 'high'}, context=context) diff --git a/addons/idea/security/idea.xml b/addons/idea/security/idea.xml new file mode 100644 index 00000000000..e7a0d800187 --- /dev/null +++ b/addons/idea/security/idea.xml @@ -0,0 +1,7 @@ +<?xml version="1.0"?> +<openerp> + <data> + + </data> +</openerp> + diff --git a/addons/idea/security/idea_security.xml b/addons/idea/security/idea_security.xml deleted file mode 100644 index 8743252c9e5..00000000000 --- a/addons/idea/security/idea_security.xml +++ /dev/null @@ -1,12 +0,0 @@ -<?xml version="1.0"?> -<openerp> -<data> - - <record model="res.groups" id="base.group_tool_user"> - <field name="name">User</field> - <field name="category_id" ref="base.module_category_tools"/> - </record> - -</data> -</openerp> - diff --git a/addons/idea/security/ir.model.access.csv b/addons/idea/security/ir.model.access.csv index 78b8deeaf57..761ada8132c 100644 --- a/addons/idea/security/ir.model.access.csv +++ b/addons/idea/security/ir.model.access.csv @@ -1,3 +1,3 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-access_idea_category_user,idea.category user,model_idea_category,base.group_tool_user,1,1,1,1
-access_idea_idea_user,idea.idea user,model_idea_idea,base.group_tool_user,1,1,1,1
+access_idea_category_user,idea.category.user,model_idea_category,base.group_user,1,1,1,1
+access_idea_idea_user,idea.idea.user,model_idea_idea,base.group_user,1,1,1,1
diff --git a/addons/idea/static/src/css/idea_idea.css b/addons/idea/static/src/css/idea_idea.css new file mode 100644 index 00000000000..08daffd902a --- /dev/null +++ b/addons/idea/static/src/css/idea_idea.css @@ -0,0 +1,21 @@ +.openerp .oe_kanban_view .oe_kanban_idea_idea { + width: 200px; +} + +.openerp .oe_kanban_view .oe_kanban_idea_idea .oe_avatars { + text-align: right; + margin: -5px 0 -10px 0; +} + +.openerp .oe_kanban_view .oe_kanban_idea_idea .oe_avatars img { + width: 30px; + height: 30px; + padding-left: 0px; + margin-top: 3px; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); + -box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); +} diff --git a/addons/idea/static/src/img/icon.png b/addons/idea/static/src/img/icon.png Binary files differnew file mode 100644 index 00000000000..1f0cba223bb --- /dev/null +++ b/addons/idea/static/src/img/icon.png diff --git a/addons/marketing_campaign/res_partner.py b/addons/idea/tests/__init__.py index b012cbb7181..a53567a380b 100644 --- a/addons/marketing_campaign/res_partner.py +++ b/addons/idea/tests/__init__.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- ############################################################################## # -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# OpenERP, Open Source Business Applications +# Copyright (c) 2013-TODAY OpenERP S.A. <http://openerp.com> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,23 +19,10 @@ # ############################################################################## -from openerp.osv import fields,osv +from openerp.addons.idea.tests import test_idea -class res_partner(osv.osv): - _inherit = 'res.partner' - - _columns = { - 'workitem_ids': fields.one2many('marketing.campaign.workitem', - 'partner_id', 'Workitems', - readonly=True), - } - - def copy(self, cr, uid, id, default={}, context=None): - default.update({ - 'workitem_ids': [], - }) - return super(res_partner, self).copy(cr, uid, id, default=default, context=context) - +checks = [ + test_idea, +] # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/portal_event/event.py b/addons/idea/tests/test_idea.py index 45026da4eba..4ca9bb9dcb9 100644 --- a/addons/portal_event/event.py +++ b/addons/idea/tests/test_idea.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- ############################################################################## # -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# OpenERP, Open Source Business Applications +# Copyright (c) 2013-TODAY OpenERP S.A. <http://openerp.com> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,21 +19,21 @@ # ############################################################################## -from openerp.osv import fields, osv +from openerp.tests import common -class event_event(osv.osv): - _description = 'Portal event' - _inherit = 'event.event' - """ - ``visibility``: defines if the event appears on the portal's event page - - 'public' means the event will appear for everyone (anonymous) - - 'private' means the event won't appear - """ - _columns = { - 'visibility': fields.selection([('public', 'Public'),('private', 'Private')], - string='Visibility', help='Event\'s visibility in the portal\'s contact page'), - } - _defaults = { - 'visibility': 'private', - } +class TestIdeaBase(common.TransactionCase): + + def setUp(self): + super(TestIdeaBase, self).setUp() + cr, uid = self.cr, self.uid + + # Usefull models + self.idea_category = self.registry('idea.category') + self.idea_idea = self.registry('idea.idea') + + def tearDown(self): + super(TestIdeaBase, self).tearDown() + + def test_OO(self): + pass diff --git a/addons/idea/views/category.xml b/addons/idea/views/category.xml new file mode 100644 index 00000000000..79725fad73f --- /dev/null +++ b/addons/idea/views/category.xml @@ -0,0 +1,56 @@ +<?xml version="1.0"?> +<openerp> + <data> + + <!-- VIEWS DEFINITION + --> + + <record model="ir.ui.view" id="view_idea_category_search"> + <field name="name">idea.category.search</field> + <field name="model">idea.category</field> + <field name="arch" type="xml"> + <search string="Ideas Categories"> + <field name="name" string="Category"/> + </search> + </field> + </record> + + <record model="ir.ui.view" id="view_idea_category_form"> + <field name="name">idea.category.form</field> + <field name="model">idea.category</field> + <field name="arch" type="xml"> + <form string="Category of Ideas" version="7.0"> + <group> + <field name="name"/> + </group> + </form> + </field> + </record> + + <record model="ir.ui.view" id="view_idea_category_tree"> + <field name="name">idea.category.tree</field> + <field name="model">idea.category</field> + <field name="field_parent"></field> + <field name="arch" type="xml"> + <tree string="Category of ideas"> + <field name="name"/> + </tree> + </field> + </record> + + <record model="ir.actions.act_window" id="action_idea_category"> + <field name="name">Categories</field> + <field name="res_model">idea.category</field> + <field name="view_type">form</field> + <field name="view_mode">tree,form</field> + <field name="search_view_id" ref="view_idea_category_search"/> + </record> + + <!-- MENUS + --> + + <menuitem name="Idea Tags" parent="mail.mail_my_stuff" + id="menu_idea_category" action="action_idea_category" sequence="31"/> + + </data> +</openerp> diff --git a/addons/idea/views/idea.xml b/addons/idea/views/idea.xml new file mode 100644 index 00000000000..b228af2da45 --- /dev/null +++ b/addons/idea/views/idea.xml @@ -0,0 +1,118 @@ +<?xml version="1.0"?> +<openerp> + <data> + + <record model="ir.ui.view" id="view_idea_idea_kanban"> + <field name="name">idea.idea.kanban</field> + <field name="model">idea.idea</field> + <field name="arch" type="xml"> + <kanban version="7.0" default_group_by="state" class="oe_background_grey"> + <field name="color"/> + <field name="user_id"/> + <templates> + <t t-name="kanban-box"> + <div t-attf-class="oe_kanban_card oe_kanban_color_#{kanban_getcolor(record.color.raw_value)} oe_kanban_idea_idea oe_kanban_global_click"> + <div class="oe_dropdown_toggle oe_dropdown_kanban" + groups="base.group_user"> + <span class="oe_e">í</span> + <ul class="oe_dropdown_menu"> + <t t-if="widget.view.is_action_enabled('delete')"> + <li><a type="delete">Delete</a></li> + </t> + </ul> + </div> + <div class="oe_kanban_content"> + <h4><field name="name"/></h4> + <div class="oe_kanban_bottom_right"> + <img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" width="24" height="24" class="oe_kanban_avatar" t-if="record.user_id.value"/> + </div> + <field name="category_ids"/> + </div> + <div class="oe_clear"></div> + </div> + </t> + </templates> + </kanban> + </field> + </record> + + <record model="ir.ui.view" id="view_idea_idea_form"> + <field name="name">idea.idea.form</field> + <field name="model">idea.idea</field> + <field name="arch" type="xml"> + <form string="Idea" version="7.0"> + <header> + <button name="idea_set_low_priority" string="Set Low Priority" class="oe_highlight" + attrs="{'invisible': [('priority', '!=', 'normal')]}"/> + <button name="idea_set_normal_priority" string="Set Normal Priority" class="oe_highlight" + attrs="{'invisible': [('priority', 'not in', ['low', 'high'])]}"/> + <button name="idea_set_high_priority" string="Set High Priority" class="oe_highlight" + attrs="{'invisible': [('priority', '!=', 'normal')]}"/> + <field name="state" widget="statusbar" clickable="True"/> + </header> + <sheet> + <label for="name" class="oe_edit_only"/> + <h1><field name="name"/></h1> + <group> + <field name="user_id"/> + <field name="priority" readonly="True"/> + <field name="category_ids" widget="many2many_tags"/> + <field name="description"/> + </group> + </sheet> + </form> + </field> + </record> + + <record model="ir.ui.view" id="view_idea_idea_tree"> + <field name="name">idea.idea.tree</field> + <field name="model">idea.idea</field> + <field name="arch" type="xml"> + <tree colors="blue:state == 'draft';black:state in ('open', 'close'); gray:state == 'cancel'" string="Ideas"> + <field name="name"/> + <field name="user_id"/> + <field name="priority"/> + <field name="state"/> + </tree> + </field> + </record> + + <record model="ir.ui.view" id="view_idea_idea_search"> + <field name="name">idea.idea.search</field> + <field name="model">idea.idea</field> + <field name="arch" type="xml"> + <search string="Ideas"> + <field name="name"/> + <field name="user_id"/> + <field name="category_ids"/> + <filter string="New" domain="[('state', '=', 'draft')]" + help="New Ideas"/> + <filter string="In Progress" domain="[('state','=', 'open')]" + help="Open Ideas"/> + <filter string="Accepted" domain="[('state','=', 'close')]" + help="Accepted Ideas" /> + <group expand="0" string="Group By..."> + <filter string="Creator" help="By Responsible" context="{'group_by': 'user_id'}"/> + <filter string="Category" help="By Category" context="{'group_by': 'category_ids'}"/> + <filter string="Status" help="By State" context="{'group_by': 'state'}"/> + </group> + </search> + </field> + </record> + + <record model="ir.actions.act_window" id="action_idea_idea"> + <field name="name">Ideas</field> + <field name="res_model">idea.idea</field> + <field name="view_type">form</field> + <field name="view_mode">kanban,tree,form</field> + <field name="search_view_id" ref="view_idea_idea_search"/> + </record> + + <!-- MENUS + --> + + <menuitem name="Ideas" parent="mail.mail_my_stuff" + id="menu_idea_idea" action="action_idea_idea" sequence="30"/> + + </data> +</openerp> diff --git a/addons/im/__openerp__.py b/addons/im/__openerp__.py index a76dd7c8cc2..61baece6c81 100644 --- a/addons/im/__openerp__.py +++ b/addons/im/__openerp__.py @@ -17,7 +17,7 @@ chat in real time. It support several chats in parallel. 'security/ir.model.access.csv', 'security/im_security.xml', ], - 'depends' : ['base'], + 'depends' : ['base', 'web'], 'js': ['static/src/js/*.js'], 'css': ['static/src/css/*.css'], 'qweb': ['static/src/xml/*.xml'], diff --git a/addons/im/im.py b/addons/im/im.py index cee1705ec35..4a867789cbc 100644 --- a/addons/im/im.py +++ b/addons/im/im.py @@ -22,6 +22,8 @@ import openerp import openerp.tools.config import openerp.modules.registry +import openerp.addons.web.http as http +from openerp.addons.web.http import request from openerp.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT import datetime from openerp.osv import osv, fields @@ -90,36 +92,38 @@ POLL_TIMER = 30 DISCONNECTION_TIMER = POLL_TIMER + 5 WATCHER_ERROR_DELAY = 10 -class LongPollingController(openerp.addons.web.http.Controller): - _cp_path = '/longpolling/im' +class LongPollingController(http.Controller): - @openerp.addons.web.http.jsonrequest - def poll(self, req, last=None, users_watch=None, db=None, uid=None, password=None, uuid=None): + @http.route('/longpolling/im/poll', type="json", auth="none") + def poll(self, last=None, users_watch=None, db=None, uid=None, password=None, uuid=None): assert_uuid(uuid) if not openerp.evented: raise Exception("Not usable in a server not running gevent") from openerp.addons.im.watcher import ImWatcher if db is not None: - req.session._db = db - req.session._uid = uid - req.session._password = password - req.session.model('im.user').im_connect(uuid=uuid, context=req.context) - my_id = req.session.model('im.user').get_by_user_id(uuid or req.session._uid, req.context)["id"] + request.session.authenticate(db=db, uid=uid, password=password) + else: + request.session.authenticate(db=request.session._db, uid=request.session._uid, password=request.session._password) + + with request.registry.cursor() as cr: + request.registry.get('im.user').im_connect(cr, request.uid, uuid=uuid, context=request.context) + my_id = request.registry.get('im.user').get_by_user_id(cr, request.uid, uuid or request.session._uid, request.context)["id"] num = 0 while True: - res = req.session.model('im.message').get_messages(last, users_watch, uuid=uuid, context=req.context) + with request.registry.cursor() as cr: + res = request.registry.get('im.message').get_messages(cr, request.uid, last, users_watch, uuid=uuid, context=request.context) if num >= 1 or len(res["res"]) > 0: return res last = res["last"] num += 1 ImWatcher.get_watcher(res["dbname"]).stop(my_id, users_watch or [], POLL_TIMER) - @openerp.addons.web.http.jsonrequest - def activated(self, req): + @http.route('/longpolling/im/activated', type="json", auth="none") + def activated(self): return not not openerp.evented - @openerp.addons.web.http.jsonrequest - def gen_uuid(self, req): + @http.route('/longpolling/im/gen_uuid', type="json", auth="none") + def gen_uuid(self): import uuid return "%s" % uuid.uuid1() diff --git a/addons/im_livechat/im_livechat.py b/addons/im_livechat/im_livechat.py index 1ffb422fe6a..adceebc7cba 100644 --- a/addons/im_livechat/im_livechat.py +++ b/addons/im_livechat/im_livechat.py @@ -26,6 +26,8 @@ import random import jinja2 from openerp.osv import osv, fields from openerp import tools +import openerp.addons.web.http as http +from openerp.addons.web.http import request env = jinja2.Environment( loader=jinja2.PackageLoader('openerp.addons.im_livechat', "."), @@ -33,48 +35,38 @@ env = jinja2.Environment( ) env.filters["json"] = json.dumps -class LiveChatController(openerp.addons.web.http.Controller): - _cp_path = '/im_livechat' +class LiveChatController(http.Controller): - @openerp.addons.web.http.httprequest - def loader(self, req, **kwargs): + @http.route('/im_livechat/loader') + def loader(self, **kwargs): p = json.loads(kwargs["p"]) db = p["db"] channel = p["channel"] user_name = p.get("user_name", None) - req.session._db = db - req.session._uid = None - req.session._login = "anonymous" - req.session._password = "anonymous" - info = req.session.model('im_livechat.channel').get_info_for_chat_src(channel) + request.session.authenticate(db=db, login="anonymous", password="anonymous") + info = request.session.model('im_livechat.channel').get_info_for_chat_src(channel) info["db"] = db info["channel"] = channel info["userName"] = user_name - return req.make_response(env.get_template("loader.js").render(info), + return request.make_response(env.get_template("loader.js").render(info), headers=[('Content-Type', "text/javascript")]) - @openerp.addons.web.http.httprequest - def web_page(self, req, **kwargs): + @http.route('/im_livechat/web_page') + def web_page(self, **kwargs): p = json.loads(kwargs["p"]) db = p["db"] channel = p["channel"] - req.session._db = db - req.session._uid = None - req.session._login = "anonymous" - req.session._password = "anonymous" - script = req.session.model('im_livechat.channel').read(channel, ["script"])["script"] - info = req.session.model('im_livechat.channel').get_info_for_chat_src(channel) + request.session.authenticate(db=db, login="anonymous", password="anonymous") + script = request.session.model('im_livechat.channel').read(channel, ["script"])["script"] + info = request.session.model('im_livechat.channel').get_info_for_chat_src(channel) info["script"] = script - return req.make_response(env.get_template("web_page.html").render(info), + return request.make_response(env.get_template("web_page.html").render(info), headers=[('Content-Type', "text/html")]) - @openerp.addons.web.http.jsonrequest - def available(self, req, db, channel): - req.session._db = db - req.session._uid = None - req.session._login = "anonymous" - req.session._password = "anonymous" - return req.session.model('im_livechat.channel').get_available_user(channel) > 0 + @http.route('/im_livechat/available', type='json') + def available(self, db, channel): + request.session.authenticate(db=db, login="anonymous", password="anonymous") + return request.session.model('im_livechat.channel').get_available_user(channel) > 0 class im_livechat_channel(osv.osv): _name = 'im_livechat.channel' diff --git a/addons/knowledge/i18n/th.po b/addons/knowledge/i18n/th.po new file mode 100644 index 00000000000..3b5327841d8 --- /dev/null +++ b/addons/knowledge/i18n/th.po @@ -0,0 +1,118 @@ +# Thai translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-21 18:52+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Thai <th@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-22 05:36+0000\n" +"X-Generator: Launchpad (build 16677)\n" + +#. module: knowledge +#: view:knowledge.config.settings:0 +msgid "Documents" +msgstr "เอกสาร" + +#. module: knowledge +#: model:ir.model,name:knowledge.model_knowledge_config_settings +msgid "knowledge.config.settings" +msgstr "" + +#. module: knowledge +#: help:knowledge.config.settings,module_document_webdav:0 +msgid "" +"Access your documents in OpenERP through WebDAV.\n" +" This installs the module document_webdav." +msgstr "" + +#. module: knowledge +#: help:knowledge.config.settings,module_document_page:0 +msgid "This installs the module document_page." +msgstr "" + +#. module: knowledge +#: model:ir.ui.menu,name:knowledge.menu_document2 +msgid "Collaborative Content" +msgstr "" + +#. module: knowledge +#: model:ir.actions.act_window,name:knowledge.action_knowledge_configuration +#: view:knowledge.config.settings:0 +msgid "Configure Knowledge" +msgstr "" + +#. module: knowledge +#: view:knowledge.config.settings:0 +msgid "Knowledge and Documents Management" +msgstr "" + +#. module: knowledge +#: help:knowledge.config.settings,module_document:0 +msgid "" +"This is a complete document management system, with: user authentication,\n" +" full document search (but pptx and docx are not supported), " +"and a document dashboard.\n" +" This installs the module document." +msgstr "" + +#. module: knowledge +#: field:knowledge.config.settings,module_document_page:0 +msgid "Create static web pages" +msgstr "" + +#. module: knowledge +#: field:knowledge.config.settings,module_document_ftp:0 +msgid "Share repositories (FTP)" +msgstr "" + +#. module: knowledge +#: field:knowledge.config.settings,module_document:0 +msgid "Manage documents" +msgstr "" + +#. module: knowledge +#: view:knowledge.config.settings:0 +msgid "Cancel" +msgstr "" + +#. module: knowledge +#: view:knowledge.config.settings:0 +msgid "Apply" +msgstr "ปรับใช้" + +#. module: knowledge +#: model:ir.ui.menu,name:knowledge.menu_document_configuration +msgid "Configuration" +msgstr "ตั้งค่า" + +#. module: knowledge +#: help:knowledge.config.settings,module_document_ftp:0 +msgid "" +"Access your documents in OpenERP through an FTP interface.\n" +" This installs the module document_ftp." +msgstr "" + +#. module: knowledge +#: view:knowledge.config.settings:0 +msgid "or" +msgstr "หรือ" + +#. module: knowledge +#: field:knowledge.config.settings,module_document_webdav:0 +msgid "Share repositories (WebDAV)" +msgstr "" + +#. module: knowledge +#: model:ir.ui.menu,name:knowledge.menu_document +#: model:ir.ui.menu,name:knowledge.menu_knowledge_configuration +msgid "Knowledge" +msgstr "ความรู้" diff --git a/addons/l10n_be/wizard/l10n_be_vat_intra_print.rml b/addons/l10n_be/wizard/l10n_be_vat_intra_print.rml index ff1a2c2064d..a25f01ff348 100644 --- a/addons/l10n_be/wizard/l10n_be_vat_intra_print.rml +++ b/addons/l10n_be/wizard/l10n_be_vat_intra_print.rml @@ -105,7 +105,7 @@ <para style="terp_default_9">[[ l['vat'] ]]</para> </td> <td> - <para style="terp_default_9">[[ l['code'] (l['intra_code']) ]]</para> + <para style="terp_default_9">[[ l['code'] ]]([[ l['intra_code'] ]])</para> </td> <td> <para style="terp_default_Right_9">[[ formatLang(l['amount'], currency_obj=company.currency_id) ]]</para> diff --git a/addons/l10n_be_coda/l10n_be_coda_view.xml b/addons/l10n_be_coda/l10n_be_coda_view.xml index 8c11913b14d..e7b4c02ef70 100644 --- a/addons/l10n_be_coda/l10n_be_coda_view.xml +++ b/addons/l10n_be_coda/l10n_be_coda_view.xml @@ -35,24 +35,24 @@ </form> </field> </record> - <record id="view_account_bank_statement_line_coda_tree" model="ir.ui.view"> + <record id="view_account_bank_statement_line_coda_tree" model="ir.ui.view"> <field name="name">account.bank.statement.line.coda.tree</field> <field name="model">account.bank.statement.line</field> <field name="priority">10</field> <field name="arch" type="xml"> - <tree editable="bottom" string="Statement lines"> - <field name="statement_id" readonly="1" invisible="1"/> - <field name="sequence" readonly="1" invisible="1"/> - <field name="date"/> - <field name="name"/> - <field name="ref"/> - <field name="partner_id" on_change="onchange_partner_id(partner_id)"/> - <field name="type" on_change="onchange_type(partner_id, type)"/> - <field name="account_id" options='{"no_open":True}' domain="[('journal_id','=',parent.journal_id), ('company_id', '=', parent.company_id)]"/> - <field name="analytic_account_id" groups="analytic.group_analytic_accounting" domain="[('company_id', '=', parent.company_id), ('type', '<>', 'view')]"/> - <field name="amount"/> - <field name="note"/> - </tree> + <tree editable="bottom" string="Statement lines" create="0"> + <field name="sequence" readonly="1" invisible="1"/> + <field name="statement_id" readonly="1" /> + <field name="date"/> + <field name="name"/> + <field name="ref"/> + <field name="partner_id" on_change="onchange_partner_id(partner_id)"/> + <field name="type" on_change="onchange_type(partner_id, type)"/> + <field name="account_id" options='{"no_open":True}' domain="[('type', '<>', 'view')]"/> + <field name="analytic_account_id" groups="analytic.group_analytic_accounting" domain="[('type', '<>', 'view')]"/> + <field name="amount"/> + <field name="note"/> + </tree> </field> </record> diff --git a/addons/l10n_be_hr_payroll/i18n/zh_CN.po b/addons/l10n_be_hr_payroll/i18n/zh_CN.po new file mode 100644 index 00000000000..e753e1e1bb2 --- /dev/null +++ b/addons/l10n_be_hr_payroll/i18n/zh_CN.po @@ -0,0 +1,148 @@ +# Chinese (Simplified) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-11-24 02:53+0000\n" +"PO-Revision-Date: 2013-06-23 05:44+0000\n" +"Last-Translator: Calvin <mceiba@gmail.com>\n" +"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-24 04:43+0000\n" +"X-Generator: Launchpad (build 16677)\n" + +#. module: l10n_be_hr_payroll +#: help:hr.employee,disabled_spouse_bool:0 +msgid "if recipient spouse is declared disabled by law" +msgstr "" + +#. module: l10n_be_hr_payroll +#: help:hr.employee,disabled_children_bool:0 +msgid "if recipient children is/are declared disabled by law" +msgstr "" + +#. module: l10n_be_hr_payroll +#: field:hr.contract,misc_onss_deduction:0 +msgid "Miscellaneous exempt ONSS " +msgstr "" + +#. module: l10n_be_hr_payroll +#: model:ir.model,name:l10n_be_hr_payroll.model_hr_employee +msgid "Employee" +msgstr "员工" + +#. module: l10n_be_hr_payroll +#: field:hr.employee,disabled_spouse_bool:0 +msgid "Disabled Spouse" +msgstr "残疾人配偶" + +#. module: l10n_be_hr_payroll +#: field:hr.contract,retained_net_amount:0 +msgid "Net retained " +msgstr "" + +#. module: l10n_be_hr_payroll +#: field:hr.employee,resident_bool:0 +msgid "Nonresident" +msgstr "非常住人口" + +#. module: l10n_be_hr_payroll +#: help:hr.employee,resident_bool:0 +msgid "if recipient lives in a foreign country" +msgstr "如果接受者居住在国外" + +#. module: l10n_be_hr_payroll +#: view:hr.employee:0 +msgid "if spouse has professionnel income or not" +msgstr "" + +#. module: l10n_be_hr_payroll +#: field:hr.contract,insurance_employee_deduction:0 +msgid "Insurance Group - by worker " +msgstr "" + +#. module: l10n_be_hr_payroll +#: selection:hr.employee,spouse_fiscal_status:0 +msgid "With Income" +msgstr "有收入" + +#. module: l10n_be_hr_payroll +#: selection:hr.employee,spouse_fiscal_status:0 +msgid "Without Income" +msgstr "无收入" + +#. module: l10n_be_hr_payroll +#: field:hr.employee,disabled_children_number:0 +msgid "Number of disabled children" +msgstr "残疾儿童个数" + +#. module: l10n_be_hr_payroll +#: field:hr.contract,additional_net_amount:0 +msgid "Net supplements" +msgstr "" + +#. module: l10n_be_hr_payroll +#: field:hr.contract,car_company_amount:0 +msgid "Company car employer" +msgstr "" + +#. module: l10n_be_hr_payroll +#: field:hr.contract,misc_advantage_amount:0 +msgid "Benefits of various nature " +msgstr "" + +#. module: l10n_be_hr_payroll +#: field:hr.contract,car_employee_deduction:0 +msgid "Company Car Deduction for Worker" +msgstr "" + +#. module: l10n_be_hr_payroll +#: field:hr.employee,disabled_children_bool:0 +msgid "Disabled Children" +msgstr "残疾儿童" + +#. module: l10n_be_hr_payroll +#: model:ir.model,name:l10n_be_hr_payroll.model_hr_contract +msgid "Contract" +msgstr "合约" + +#. module: l10n_be_hr_payroll +#: field:hr.contract,meal_voucher_amount:0 +msgid "Check Value Meal " +msgstr "" + +#. module: l10n_be_hr_payroll +#: field:hr.contract,travel_reimbursement_amount:0 +msgid "Reimbursement of travel expenses" +msgstr "差旅花费补贴" + +#. module: l10n_be_hr_payroll +#: constraint:hr.contract:0 +msgid "Error! Contract start-date must be less than contract end-date." +msgstr "错误!联系人开始日期必须小于结束日期" + +#. module: l10n_be_hr_payroll +#: field:hr.employee,spouse_fiscal_status:0 +msgid "Tax status for spouse" +msgstr "配偶缴税状态" + +#. module: l10n_be_hr_payroll +#: view:hr.employee:0 +msgid "number of dependent children declared as disabled" +msgstr "" + +#. module: l10n_be_hr_payroll +#: constraint:hr.employee:0 +msgid "Error! You cannot create recursive hierarchy of Employee(s)." +msgstr "错误!,你不能创建循环的员工层次" + +#. module: l10n_be_hr_payroll +#: field:hr.contract,meal_voucher_employee_deduction:0 +msgid "Check Value Meal - by worker " +msgstr "" diff --git a/addons/l10n_in_hr_payroll/i18n/zh_CN.po b/addons/l10n_in_hr_payroll/i18n/zh_CN.po new file mode 100644 index 00000000000..8ee2c7f2028 --- /dev/null +++ b/addons/l10n_in_hr_payroll/i18n/zh_CN.po @@ -0,0 +1,1013 @@ +# Chinese (Simplified) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-11-24 02:53+0000\n" +"PO-Revision-Date: 2013-06-24 10:15+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-25 05:14+0000\n" +"X-Generator: Launchpad (build 16677)\n" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "E-mail Address" +msgstr "E-mail地址" + +#. module: l10n_in_hr_payroll +#: field:payment.advice.report,employee_bank_no:0 +msgid "Employee Bank Account" +msgstr "员工银行帐号" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Payment Advices which are in draft state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Title" +msgstr "职位" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Payment Advice from" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_yearly_salary_detail +msgid "Hr Salary Employee By Category Report" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +msgid "Payslips which are paid" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +#: view:payslip.report:0 +msgid "Group By..." +msgstr "分组于..." + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Allowances with Basic:" +msgstr "基本补贴:" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +msgid "Payslips which are in done state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Department" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Deductions:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "A/C no." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,driver_salay:0 +msgid "Driver Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_yearly_salary_detail +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.yearly_salary +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_yearly_salary_detail +msgid "Yearly Salary by Employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.act_hr_emp_payslip_list +msgid "Payslips" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "March" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,company_id:0 +#: field:hr.payroll.advice.line,company_id:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,company_id:0 +#: view:payslip.report:0 +#: field:payslip.report,company_id:0 +msgid "Company" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "The Manager" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Letter Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Set to Draft" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "to" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Total :" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payslip.run,available_advice:0 +msgid "Made Payment Advice?" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Advices which are paid using NEFT transfer" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:payslip.report,nbr:0 +msgid "# Payslip lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,tds:0 +msgid "Amount for Tax Deduction at Source" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip +msgid "Pay Slip" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,day:0 +#: view:payslip.report:0 +#: field:payslip.report,day:0 +msgid "Day" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Month of Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.payslip:0 +msgid "Payslip 'Date From' must be before 'Date To'." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,batch_id:0 +msgid "Batch" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Other Information" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.payroll.advice,state:0 +#: selection:payment.advice.report,state:0 +msgid "Cancelled" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payslip_report_all +msgid "This report performs analysis on Payslip" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "For" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Details by Salary Rule Category:" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,number:0 +#: report:paylip.details.in:0 +msgid "Reference" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,medical_insurance:0 +msgid "Medical Insurance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Identification No" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +#: field:payslip.report,struct_id:0 +msgid "Structure" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "form period" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:hr.payroll.advice,state:0 +#: selection:payment.advice.report,state:0 +msgid "Confirmed" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +#: report:salary.employee.bymonth:0 +msgid "From" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,bysal:0 +#: field:payment.advice.report,bysal:0 +#: report:payroll.advice:0 +msgid "By Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:payment.advice.report:0 +msgid "Confirm" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,chaque_nos:0 +#: field:payment.advice.report,cheque_nos:0 +msgid "Cheque Numbers" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:res.company:0 +msgid "Error! You can not create recursive companies." +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_salary_employee_month +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.hr_salary_employee_bymonth +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_salary_employee_month +msgid "Yearly Salary by Head" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:134 +#, python-format +msgid "You can not confirm Payment advice without advice lines." +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Yours Sincerely" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +msgid "# Payslip Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,medical_insurance:0 +msgid "Deduction towards company provided medical insurance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice_line +msgid "Bank Advice Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +msgid "Day of Payslip" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Email" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payslip.run,available_advice:0 +msgid "" +"If this box is checked which means that Payment Advice exists for current " +"batch" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:108 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:134 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:190 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:207 +#, python-format +msgid "Error !" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:payslip.report,paid:0 +msgid "Made Payment Order ? " +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "Print" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payslip.report,state:0 +msgid "Rejected" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +msgid "Year of Payslip" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payslip_run +msgid "Payslip Batches" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,debit_credit:0 +#: report:payroll.advice:0 +msgid "C/D" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.employee.bymonth:0 +msgid "Yearly Salary Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payroll_advice +msgid "Print Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,line_ids:0 +msgid "Employee Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "July" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:res.company:0 +msgid "Configuration" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +msgid "Payslip Line" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_view_hr_bank_advice_tree +#: model:ir.ui.menu,name:l10n_in_hr_payroll.hr_menu_payment_advice +msgid "Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payment_advice_report_all +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payment_advice +#: view:payment.advice.report:0 +msgid "Advices Analysis" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +msgid "" +"This wizard will print report which displays employees break-up of Net Head " +"for a specified dates." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,ifsc:0 +msgid "IFSC" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: field:payslip.report,date_to:0 +msgid "Date To" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,tds:0 +msgid "TDS" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Confirm Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: constraint:hr.contract:0 +msgid "Error! Contract start-date must be less than contract end-date." +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:res.company,dearness_allowance:0 +msgid "Dearness Allowance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "August" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.contract:0 +msgid "Deduction" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "SI. No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Payment Advices which are in confirm state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "December" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Confirm Sheet" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,month:0 +#: view:payslip.report:0 +#: field:payslip.report,month:0 +msgid "Month" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employee Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "or" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_salary_employee_month +msgid "Hr Salary Employee By Month Report" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,category_id:0 +#: view:payslip.report:0 +#: field:payslip.report,category_id:0 +msgid "Category" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:190 +#, python-format +msgid "" +"Payment advice already exists for %s, 'Set to Draft' to create a new advice." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "To Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Note" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Salary Rule Category" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: selection:hr.payroll.advice,state:0 +#: view:payment.advice.report:0 +#: selection:payment.advice.report,state:0 +#: view:payslip.report:0 +#: selection:payslip.report,state:0 +msgid "Draft" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: field:payslip.report,date_from:0 +msgid "Date From" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Employee Name" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_payment_advice_report +msgid "Payment Advice Analysis" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,state:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,state:0 +#: view:payslip.report:0 +#: field:payslip.report,state:0 +msgid "Status" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:res.company,dearness_allowance:0 +msgid "Check this box if your company provide Dearness Allowance to employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,ifsc_code:0 +#: field:payment.advice.report,ifsc_code:0 +#: report:payroll.advice:0 +msgid "IFSC Code" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "June" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +msgid "Paid" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,voluntary_provident_fund:0 +msgid "" +"VPF is a safe option wherein you can contribute more than the PF ceiling of " +"12% that has been mandated by the government and VPF computed as " +"percentage(%)" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,nbr:0 +msgid "# Payment Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.report.xml,name:l10n_in_hr_payroll.payslip_details_report +msgid "PaySlip Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Payment Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,date:0 +#: field:payment.advice.report,date:0 +msgid "Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "November" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: view:payslip.report:0 +msgid "Extended Filters..." +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,help:l10n_in_hr_payroll.action_payment_advice_report_all +msgid "This report performs analysis on Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "October" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +msgid "Designation" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +msgid "Month of Payslip" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "January" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:yearly.salary.detail:0 +msgid "Pay Head Employee Breakup" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_res_company +msgid "Companies" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:payroll.advice:0 +msgid "Authorized Signature" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_contract +msgid "Contract" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,supplementary_allowance:0 +msgid "Supplementary Allowance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice.line:0 +msgid "Advice Lines" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "To," +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,driver_salay:0 +msgid "Check this box if you provide allowance for driver" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +msgid "Payslips which are in draft state" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice.line,advice_id:0 +#: field:hr.payslip,advice_id:0 +#: model:ir.model,name:l10n_in_hr_payroll.model_hr_payroll_advice +msgid "Bank Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Other No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Draft Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,neft:0 +msgid "Check this box if your company use online transfer for salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:payment.advice.report,number:0 +#: field:payslip.report,number:0 +msgid "Number" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "September" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payslip.report:0 +#: selection:payslip.report,state:0 +msgid "Done" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: view:hr.salary.employee.month:0 +#: view:yearly.salary.detail:0 +msgid "Cancel" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Day of Payment Advices" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Search Payment advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:yearly.salary.detail:0 +msgid "" +"This wizard will print report which display a pay head employee breakup for " +"a specified dates." +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Pay Slip Details" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Total Salary" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,employee_id:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,employee_id:0 +#: view:payslip.report:0 +#: field:payslip.report,employee_id:0 +msgid "Employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +msgid "Compute Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Dear Sir/Madam," +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,note:0 +msgid "Description" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "May" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:res.company:0 +msgid "Payroll" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "NEFT" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: report:salary.detail.byyear:0 +msgid "Address" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,bank_id:0 +#: view:payment.advice.report:0 +#: field:payment.advice.report,bank_id:0 +#: report:payroll.advice:0 +#: report:salary.detail.byyear:0 +msgid "Bank" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,end_date:0 +#: field:yearly.salary.detail,date_to:0 +msgid "End Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "February" +msgstr "" + +#. module: l10n_in_hr_payroll +#: sql_constraint:res.company:0 +msgid "The company name must be unique !" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payroll.advice:0 +#: field:hr.payroll.advice,name:0 +#: report:paylip.details.in:0 +#: field:payment.advice.report,name:0 +#: field:payslip.report,name:0 +#: report:salary.employee.bymonth:0 +msgid "Name" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +#: field:hr.salary.employee.month,employee_ids:0 +#: view:yearly.salary.detail:0 +#: field:yearly.salary.detail,employee_ids:0 +msgid "Employees" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Bank Account" +msgstr "" + +#. module: l10n_in_hr_payroll +#: model:ir.actions.act_window,name:l10n_in_hr_payroll.action_payslip_report_all +#: model:ir.model,name:l10n_in_hr_payroll.model_payslip_report +#: model:ir.ui.menu,name:l10n_in_hr_payroll.menu_reporting_payslip +#: view:payslip.report:0 +msgid "Payslip Analysis" +msgstr "" + +#. module: l10n_in_hr_payroll +#: selection:payment.advice.report,month:0 +#: selection:payslip.report,month:0 +msgid "April" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:payroll.advice:0 +msgid "Name of the Employe" +msgstr "" + +#. module: l10n_in_hr_payroll +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:108 +#: code:addons/l10n_in_hr_payroll/l10n_in_hr_payroll.py:207 +#, python-format +msgid "Please define bank account for the %s employee" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.salary.employee.month,start_date:0 +#: field:yearly.salary.detail,date_from:0 +msgid "Start Date" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.contract:0 +msgid "Allowance" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,voluntary_provident_fund:0 +msgid "Voluntary Provident Fund (%)" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.contract,house_rent_allowance_metro_nonmetro:0 +msgid "House Rent Allowance (%)" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,bank_id:0 +msgid "Select the Bank from which the salary is going to be paid" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.salary.employee.month:0 +msgid "Employee Pay Head Breakup" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:salary.detail.byyear:0 +msgid "Phone No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +msgid "Credit" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice.line,name:0 +#: report:payroll.advice:0 +msgid "Bank Account No." +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.payroll.advice,date:0 +msgid "Advice Date is used to search Payslips" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "Payslip Batches ready to be Adviced" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:hr.payslip.run:0 +msgid "Create Advice" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +#: field:payment.advice.report,year:0 +#: view:payslip.report:0 +#: field:payslip.report,year:0 +msgid "Year" +msgstr "" + +#. module: l10n_in_hr_payroll +#: field:hr.payroll.advice,neft:0 +#: field:payment.advice.report,neft:0 +msgid "NEFT Transaction" +msgstr "" + +#. module: l10n_in_hr_payroll +#: report:paylip.details.in:0 +#: field:payslip.report,total:0 +#: report:salary.detail.byyear:0 +#: report:salary.employee.bymonth:0 +msgid "Total" +msgstr "" + +#. module: l10n_in_hr_payroll +#: help:hr.contract,house_rent_allowance_metro_nonmetro:0 +msgid "" +"HRA is an allowance given by the employer to the employee for taking care of " +"his rental or accommodation expenses for metro city it is 50 % and for non " +"metro 40%.HRA computed as percentage(%)" +msgstr "" + +#. module: l10n_in_hr_payroll +#: view:payment.advice.report:0 +msgid "Year of Payment Advices" +msgstr "" diff --git a/addons/l10n_lu/account.account.template-2011.csv b/addons/l10n_lu/account.account.template-2011.csv index 5757e8a3f5e..4124da146e7 100644 --- a/addons/l10n_lu/account.account.template-2011.csv +++ b/addons/l10n_lu/account.account.template-2011.csv @@ -1,1159 +1,1159 @@ -id,code,name,parent_id/id,type,user_type/id,reconcile,financial_report_ids/id -lu_2011_account_0,0,Plan de compte Luxembourgeois - Loi de Juin 2009 (THAMINI & ADN),,view,account.data_account_type_view,f, -lu_2011_account_bilan,bilan,COMPTES DE BILAN,lu_2011_account_0,view,account.data_account_type_view,f, -lu_2011_account_1,1,"CLASSE 1 - COMPTES DE CAPITAUX, DE PROVISIONS ET DE DETTES FINANCIERES",lu_2011_account_bilan,view,account_type_2011_1_capital,f, -lu_2011_account_10,10,Capital ou dotation des succursales et comptes de l’exploitant,lu_2011_account_1,view,account_type_2011_1_capital,f, -lu_2011_account_101,101,Capital souscrit (Sociétés de capitaux - Montant total),lu_2011_account_10,other,account_type_2011_1_capital,f,account_financial_report_68 -lu_2011_account_102,102,Capital souscrit non appelé (Sociétés de capitaux),lu_2011_account_10,other,account_type_2011_1_capital,f,account_financial_report_17 -lu_2011_account_103,103,Capital souscrit appelé et non versé (Sociétés de capitaux),lu_2011_account_10,other,account_type_2011_1_capital,f,account_financial_report_18 -lu_2011_account_104,104,Capital des entreprises commerçants personnes physiques et des sociétés de personnes,lu_2011_account_10,view,account_type_2011_1_capital,f, -lu_2011_account_1041,1041,Commerçants personnes physiques,lu_2011_account_104,other,account_type_2011_1_capital,f, -lu_2011_account_1042,1042,Sociétés de personnes,lu_2011_account_104,other,account_type_2011_1_capital,f, -lu_2011_account_105,105,Dotation des succursales,lu_2011_account_10,other,account_type_2011_1_capital,f, -lu_2011_account_106,106,Comptes de l’exploitant ou des coexploitants,lu_2011_account_10,view,account_type_2011_1_capital,f, -lu_2011_account_1061,1061,Prélèvements privés de l’exploitant ou des coexploitants,lu_2011_account_106,view,account_type_2011_1_capital,f, -lu_2011_account_10611,10611,Prélèvements en numéraire (train de vie),lu_2011_account_1061,other,account_type_2011_1_capital,f, -lu_2011_account_10612,10612,"Prélèvements en nature de marchandises, de produits finis et services (au prix de revient)",lu_2011_account_1061,other,account_type_2011_1_capital,f, -lu_2011_account_10613,10613,Part personnelle des frais de maladie,lu_2011_account_1061,other,account_type_2011_1_capital,f, -lu_2011_account_10614,10614,Primes d’assurances privées,lu_2011_account_1061,view,account_type_2011_1_capital,f, -lu_2011_account_106141,106141,Vie,lu_2011_account_10614,other,account_type_2011_1_capital,f, -lu_2011_account_106142,106142,Accident,lu_2011_account_10614,other,account_type_2011_1_capital,f, -lu_2011_account_106143,106143,Incendie,lu_2011_account_10614,other,account_type_2011_1_capital,f, -lu_2011_account_106144,106144,Responsabilité civile,lu_2011_account_10614,other,account_type_2011_1_capital,f, -lu_2011_account_106145,106145,Multirisques,lu_2011_account_10614,other,account_type_2011_1_capital,f, -lu_2011_account_106148,106148,Autres primes d’assurances privées,lu_2011_account_10614,other,account_type_2011_1_capital,f, -lu_2011_account_10615,10615,Cotisations,lu_2011_account_1061,view,account_type_2011_1_capital,f, -lu_2011_account_106151,106151,Assurances sociales (assurance dépendance),lu_2011_account_10615,other,account_type_2011_1_capital,f, -lu_2011_account_106152,106152,Allocations familiales,lu_2011_account_10615,other,account_type_2011_1_capital,f, -lu_2011_account_106153,106153,Cotisations pour mutuelles,lu_2011_account_10615,other,account_type_2011_1_capital,f, -lu_2011_account_106154,106154,"Caisse de décès, médico-chirurgicale, Prestaplus",lu_2011_account_10615,other,account_type_2011_1_capital,f, -lu_2011_account_106158,106158,Autres cotisations,lu_2011_account_10615,other,account_type_2011_1_capital,f, -lu_2011_account_10616,10616,Prélèvements en nature (quote-part privée dans les frais généraux),lu_2011_account_1061,view,account_type_2011_1_capital,f, -lu_2011_account_106161,106161,Salaires,lu_2011_account_10616,other,account_type_2011_1_capital,f, -lu_2011_account_106162,106162,Loyer,lu_2011_account_10616,other,account_type_2011_1_capital,f, -lu_2011_account_106163,106163,"Chauffage, gaz, électricité",lu_2011_account_10616,other,account_type_2011_1_capital,f, -lu_2011_account_106164,106164,Eau,lu_2011_account_10616,other,account_type_2011_1_capital,f, -lu_2011_account_106165,106165,Téléphone,lu_2011_account_10616,other,account_type_2011_1_capital,f, -lu_2011_account_106166,106166,Voiture,lu_2011_account_10616,other,account_type_2011_1_capital,f, -lu_2011_account_106168,106168,Autres prélèvements en nature,lu_2011_account_10616,other,account_type_2011_1_capital,f, -lu_2011_account_10617,10617,Acquisitions,lu_2011_account_1061,view,account_type_2011_1_capital,f, -lu_2011_account_106171,106171,Mobilier privé,lu_2011_account_10617,other,account_type_2011_1_capital,f, -lu_2011_account_106172,106172,Voiture privée,lu_2011_account_10617,other,account_type_2011_1_capital,f, -lu_2011_account_106173,106173,Titres privés,lu_2011_account_10617,other,account_type_2011_1_capital,f, -lu_2011_account_106174,106174,Immeubles privés,lu_2011_account_10617,other,account_type_2011_1_capital,f, -lu_2011_account_106178,106178,Autres acquisitions,lu_2011_account_10617,other,account_type_2011_1_capital,f, -lu_2011_account_10618,10618,Impôts,lu_2011_account_1061,view,account_type_2011_1_capital,f, -lu_2011_account_106181,106181,Impôt sur le revenu payé,lu_2011_account_10618,other,account_type_2011_1_capital,f, -lu_2011_account_106182,106182,Impôt sur la fortune payé,lu_2011_account_10618,other,account_type_2011_1_capital,f, -lu_2011_account_106183,106183,Impôt commercial - arriérés payés,lu_2011_account_10618,other,account_type_2011_1_capital,f, -lu_2011_account_106188,106188,Autres impôts,lu_2011_account_10618,other,account_type_2011_1_capital,f, -lu_2011_account_10619,10619,Prélèvements privés particuliers,lu_2011_account_1061,view,account_type_2011_1_capital,f, -lu_2011_account_106191,106191,Réparations aux immeubles privés,lu_2011_account_10619,other,account_type_2011_1_capital,f, -lu_2011_account_106192,106192,Placements sur comptes financiers privés,lu_2011_account_10619,other,account_type_2011_1_capital,f, -lu_2011_account_106193,106193,Remboursements de dettes privées,lu_2011_account_10619,other,account_type_2011_1_capital,f, -lu_2011_account_106194,106194,Dons et dotations aux enfants,lu_2011_account_10619,other,account_type_2011_1_capital,f, -lu_2011_account_106195,106195,Droits de succession et droits de mutation par décès,lu_2011_account_10619,other,account_type_2011_1_capital,f, -lu_2011_account_106198,106198,Autres prélèvements privés particuliers,lu_2011_account_10619,other,account_type_2011_1_capital,f, -lu_2011_account_1062,1062,Suppléments d’apports privés de l’exploitant ou des coexploitants,lu_2011_account_106,view,account_type_2011_1_capital,f, -lu_2011_account_10621,10621,Héritage ou donation,lu_2011_account_1062,other,account_type_2011_1_capital,f, -lu_2011_account_10622,10622,Avoirs privés,lu_2011_account_1062,other,account_type_2011_1_capital,f, -lu_2011_account_10623,10623,Emprunts privés,lu_2011_account_1062,other,account_type_2011_1_capital,f, -lu_2011_account_10624,10624,Cessions,lu_2011_account_1062,view,account_type_2011_1_capital,f, -lu_2011_account_106241,106241,Mobilier privé,lu_2011_account_10624,other,account_type_2011_1_capital,f, -lu_2011_account_106242,106242,Voiture privée,lu_2011_account_10624,other,account_type_2011_1_capital,f, -lu_2011_account_106243,106243,Titres privés,lu_2011_account_10624,other,account_type_2011_1_capital,f, -lu_2011_account_106244,106244,Immeubles privés,lu_2011_account_10624,other,account_type_2011_1_capital,f, -lu_2011_account_106248,106248,Autres cessions,lu_2011_account_10624,other,account_type_2011_1_capital,f, -lu_2011_account_10625,10625,Loyers encaissés,lu_2011_account_1062,other,account_type_2011_1_capital,f, -lu_2011_account_10626,10626,Salaires ou rentes touchés,lu_2011_account_1062,other,account_type_2011_1_capital,f, -lu_2011_account_10627,10627,Allocations familiales reçues,lu_2011_account_1062,other,account_type_2011_1_capital,f, -lu_2011_account_10628,10628,Remboursements d’impôts,lu_2011_account_1062,view,account_type_2011_1_capital,f, -lu_2011_account_106281,106281,Impôt sur le revenu,lu_2011_account_10628,other,account_type_2011_1_capital,f, -lu_2011_account_106283,106283,Impôt sur la fortune,lu_2011_account_10628,other,account_type_2011_1_capital,f, -lu_2011_account_106284,106284,Impôt commercial,lu_2011_account_10628,other,account_type_2011_1_capital,f, -lu_2011_account_106288,106288,Autres remboursements d’impôts,lu_2011_account_10628,other,account_type_2011_1_capital,f, -lu_2011_account_10629,10629,Quote-part professionnelle de frais privés,lu_2011_account_1062,other,account_type_2011_1_capital,f, -lu_2011_account_11,11,Primes d’émission et primes assimilées,lu_2011_account_1,view,account_type_2011_1_capital,f,account_financial_report_69 -lu_2011_account_111,111,Primes d’émission,lu_2011_account_11,other,account_type_2011_1_capital,f, -lu_2011_account_112,112,Primes de fusion,lu_2011_account_11,other,account_type_2011_1_capital,f, -lu_2011_account_113,113,Primes d’apport,lu_2011_account_11,other,account_type_2011_1_capital,f, -lu_2011_account_114,114,Primes de conversion d’obligations en actions,lu_2011_account_11,other,account_type_2011_1_capital,f, -lu_2011_account_115,115,Apport en capitaux propres non rémunéré par des titres («Capital contribution»),lu_2011_account_11,other,account_type_2011_1_capital,f, -lu_2011_account_12,12,Réserves de réévaluation,lu_2011_account_1,view,account_type_2011_1_capital,f,account_financial_report_70 -lu_2011_account_121,121,Réserves de réévaluation en application de la juste valeur,lu_2011_account_12,other,account_type_2011_1_capital,f, -lu_2011_account_122,122,Réserves de mise en équivalence (Participations valorisées suivant l’art. 58),lu_2011_account_12,other,account_type_2011_1_capital,f, -lu_2011_account_123,123,Plus-values sur écarts de conversion immunisées,lu_2011_account_12,other,account_type_2011_1_capital,f, -lu_2011_account_128,128,Autres réserves de réévaluation,lu_2011_account_12,other,account_type_2011_1_capital,f, -lu_2011_account_13,13,Réserves,lu_2011_account_1,view,account_type_2011_1_capital,f, -lu_2011_account_131,131,Réserve légale,lu_2011_account_13,other,account_type_2011_1_capital,f,account_financial_report_72 -lu_2011_account_132,132,Réserve pour actions propres ou parts propres,lu_2011_account_13,other,account_type_2011_1_capital,f,account_financial_report_73 -lu_2011_account_133,133,Réserves statutaires,lu_2011_account_13,other,account_type_2011_1_capital,f,account_financial_report_74 -lu_2011_account_138,138,Autres réserves,lu_2011_account_13,view,account_type_2011_1_capital,f,account_financial_report_75 -lu_2011_account_1381,1381,Réserve pour l’impôt sur la fortune,lu_2011_account_138,other,account_type_2011_1_capital,f, -lu_2011_account_1382,1382,Autres réserves indisponibles,lu_2011_account_138,other,account_type_2011_1_capital,f, -lu_2011_account_1383,1383,Autres réserves disponibles,lu_2011_account_138,other,account_type_2011_1_capital,f, -lu_2011_account_14,14,Résultats,lu_2011_account_1,view,account_type_2011_1_capital,f, -lu_2011_account_141,141,Résultats reportés,lu_2011_account_14,other,account_type_2011_1_capital,f,account_financial_report_76 -lu_2011_account_142,142,Résultat de l’exercice,lu_2011_account_14,other,account_type_2011_1_capital,f,account_financial_report_77 -lu_2011_account_15,15,Acomptes sur dividendes,lu_2011_account_1,other,account_type_2011_1_capital,f,account_financial_report_78 -lu_2011_account_16,16,Subventions d’investissement en capital,lu_2011_account_1,view,account_type_2011_1_capital,f,account_financial_report_79 -lu_2011_account_161,161,Terrains et constructions,lu_2011_account_16,other,account_type_2011_1_capital,f, -lu_2011_account_162,162,Installations techniques et machines,lu_2011_account_16,other,account_type_2011_1_capital,f, -lu_2011_account_163,163,"Autres installations, outillage, mobilier et matériel roulant",lu_2011_account_16,other,account_type_2011_1_capital,f, -lu_2011_account_168,168,Autres subventions d’investissement en capital,lu_2011_account_16,other,account_type_2011_1_capital,f, -lu_2011_account_17,17,Plus-values immunisées,lu_2011_account_1,view,account_type_2011_1_capital,f,account_financial_report_80 -lu_2011_account_171,171,Plus-values immunisées à réinvestir,lu_2011_account_17,other,account_type_2011_1_capital,f, -lu_2011_account_172,172,Plus-values immunisées réinvesties,lu_2011_account_17,other,account_type_2011_1_capital,f, -lu_2011_account_18,18,Provisions,lu_2011_account_1,view,account_type_2011_1_provision,f, -lu_2011_account_181,181,Provisions pour pensions et obligations similaires,lu_2011_account_18,other,account_type_2011_1_provision,f,account_financial_report_83 -lu_2011_account_182,182,Provisions pour impôts,lu_2011_account_18,view,account_type_2011_1_provision,f,account_financial_report_84 -lu_2011_account_1821,1821,Provisions pour impôt sur le revenu des collectivités,lu_2011_account_182,other,account_type_2011_1_provision,f, -lu_2011_account_1822,1822,Provisions pour impôt commercial,lu_2011_account_182,other,account_type_2011_1_provision,f, -lu_2011_account_1823,1823,Provisions pour impôt sur la fortune,lu_2011_account_182,other,account_type_2011_1_provision,f, -lu_2011_account_1828,1828,Autres provisions pour impôts,lu_2011_account_182,other,account_type_2011_1_provision,f, -lu_2011_account_183,183,Provisions pour impôts différés,lu_2011_account_18,other,account_type_2011_1_provision,f, -lu_2011_account_188,188,Autres provisions,lu_2011_account_18,view,account_type_2011_1_provision,f,account_financial_report_85 -lu_2011_account_1881,1881,Provisions d’exploitation,lu_2011_account_188,other,account_type_2011_1_provision,f, -lu_2011_account_1882,1882,Provisions financières,lu_2011_account_188,other,account_type_2011_1_provision,f, -lu_2011_account_1883,1883,Provisions exceptionnelles,lu_2011_account_188,other,account_type_2011_1_provision,f, -lu_2011_account_19,19,Dettes financières et dettes assimilées,lu_2011_account_1,view,account_type_2011_1_provision,f, -lu_2011_account_191,191,Dettes subordonnées,lu_2011_account_19,view,account_type_2011_1_provision,f,account_financial_report_81 -lu_2011_account_1911,1911,dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_191,view,account_type_2011_1_provision,f, -lu_2011_account_19111,19111,Montant principal,lu_2011_account_1911,other,account_type_2011_1_provision,f, -lu_2011_account_19112,19112,Intérêts courus,lu_2011_account_1911,other,account_type_2011_1_provision,f, -lu_2011_account_1912,1912,dont la durée résiduelle est supérieure à un an,lu_2011_account_191,view,account_type_2011_1_provision,f, -lu_2011_account_19121,19121,Montant principal,lu_2011_account_1912,other,account_type_2011_1_provision,f, -lu_2011_account_19122,19122,Intérêts courus,lu_2011_account_1912,other,account_type_2011_1_provision,f, -lu_2011_account_192,192,Emprunts obligataires convertibles,lu_2011_account_19,view,account_type_2011_1_provision,f, -lu_2011_account_1921,1921,dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_192,view,account_type_2011_1_provision,f,account_financial_report_89 -lu_2011_account_19211,19211,Montant principal,lu_2011_account_1921,other,account_type_2011_1_provision,f, -lu_2011_account_19212,19212,Intérêts courus,lu_2011_account_1921,other,account_type_2011_1_provision,f, -lu_2011_account_1922,1922,dont la durée résiduelle est supérieure à un an,lu_2011_account_192,view,account_type_2011_1_provision,f,account_financial_report_90 -lu_2011_account_19221,19221,Montant principal,lu_2011_account_1922,other,account_type_2011_1_provision,f, -lu_2011_account_19222,19222,Intérêts courus,lu_2011_account_1922,other,account_type_2011_1_provision,f, -lu_2011_account_193,193,Emprunts obligataires non convertibles,lu_2011_account_19,view,account_type_2011_1_provision,f, -lu_2011_account_1931,1931,dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_193,view,account_type_2011_1_provision,f,account_financial_report_92 -lu_2011_account_19311,19311,Montant principal,lu_2011_account_1931,other,account_type_2011_1_provision,f, -lu_2011_account_19312,19312,Intérêts courus,lu_2011_account_1931,other,account_type_2011_1_provision,f, -lu_2011_account_1932,1932,dont la durée résiduelle est supérieure à un an,lu_2011_account_193,view,account_type_2011_1_provision,f,account_financial_report_93 -lu_2011_account_19321,19321,Montant principal,lu_2011_account_1932,other,account_type_2011_1_provision,f, -lu_2011_account_19322,19322,Intérêts courus,lu_2011_account_1932,other,account_type_2011_1_provision,f, -lu_2011_account_194,194,Dettes envers des établissements de crédit,lu_2011_account_19,view,account_type_2011_1_provision,f, -lu_2011_account_1941,1941,dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_194,view,account_type_2011_1_provision,f,account_financial_report_95 -lu_2011_account_19411,19411,Montant principal,lu_2011_account_1941,other,account_type_2011_1_provision,f, -lu_2011_account_19412,19412,Intérêts courus,lu_2011_account_1941,other,account_type_2011_1_provision,f, -lu_2011_account_1942,1942,dont la durée résiduelle est supérieure à un an,lu_2011_account_194,view,account_type_2011_1_provision,f,account_financial_report_96 -lu_2011_account_19421,19421,Montant principal,lu_2011_account_1942,other,account_type_2011_1_provision,f, -lu_2011_account_19422,19422,Intérêts courus,lu_2011_account_1942,other,account_type_2011_1_provision,f, -lu_2011_account_195,195,Dettes de leasing financier,lu_2011_account_19,view,account_type_2011_1_provision,f, -lu_2011_account_1951,1951,dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_195,other,account_type_2011_1_provision,f, -lu_2011_account_1952,1952,dont la durée résiduelle est supérieure à un an,lu_2011_account_195,other,account_type_2011_1_provision,f, -lu_2011_account_198,198,Autres emprunts et dettes assimilées,lu_2011_account_19,view,account_type_2011_1_provision,f, -lu_2011_account_1981,1981,dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_198,view,account_type_2011_1_provision,f, -lu_2011_account_19811,19811,Autres emprunts,lu_2011_account_1981,other,account_type_2011_1_provision,f, -lu_2011_account_19812,19812,Rentes viagères capitalisées,lu_2011_account_1981,other,account_type_2011_1_provision,f, -lu_2011_account_19813,19813,Autres dettes assimilées,lu_2011_account_1981,other,account_type_2011_1_provision,f, -lu_2011_account_19814,19814,Intérêts courus sur autres emprunts et dettes assimilées,lu_2011_account_1981,other,account_type_2011_1_provision,f, -lu_2011_account_1982,1982,dont la durée résiduelle est supérieure à un an,lu_2011_account_198,view,account_type_2011_1_provision,f, -lu_2011_account_19821,19821,Autres emprunts,lu_2011_account_1982,other,account_type_2011_1_provision,f, -lu_2011_account_19822,19822,Rentes viagères capitalisées,lu_2011_account_1982,other,account_type_2011_1_provision,f, -lu_2011_account_19823,19823,Autres dettes assimilées,lu_2011_account_1982,other,account_type_2011_1_provision,f, -lu_2011_account_19824,19824,Intérêts courus sur autres emprunts et dettes assimilées,lu_2011_account_1982,other,account_type_2011_1_provision,f, -lu_2011_account_2,2,CLASSE 2 - COMPTES DE FRAIS D’ETABLISSEMENT ET D’ACTIFS IMMOBILISES,lu_2011_account_bilan,view,account.data_account_type_view,f, -lu_2011_account_20,20,Frais d’établissement et frais assimilés,lu_2011_account_2,view,account_type_2011_2_immo,f,account_financial_report_19 -lu_2011_account_201,201,Frais de constitution,lu_2011_account_20,other,account_type_2011_2_immo,f, -lu_2011_account_202,202,Frais de premier établissement,lu_2011_account_20,view,account_type_2011_2_immo,f, -lu_2011_account_2021,2021,Frais de prospection,lu_2011_account_202,other,account_type_2011_2_immo,f, -lu_2011_account_2022,2022,Frais de publicité,lu_2011_account_202,other,account_type_2011_2_immo,f, -lu_2011_account_203,203,"Frais d’augmentation de capital et d’opérations diverses (fusions, scissions, transformations)",lu_2011_account_20,other,account_type_2011_2_immo,f, -lu_2011_account_204,204,Frais d’émission d’emprunts,lu_2011_account_20,other,account_type_2011_2_immo,f, -lu_2011_account_208,208,Autres frais assimilés,lu_2011_account_20,other,account_type_2011_2_immo,f, -lu_2011_account_21,21,Immobilisations incorporelles,lu_2011_account_2,view,account_type_2011_2_immo,f, -lu_2011_account_211,211,Frais de recherche et de développement,lu_2011_account_21,other,account_type_2011_2_immo,f,account_financial_report_22 -lu_2011_account_212,212,"Concessions, brevets, licences, marques ainsi que droits et valeurs similaires",lu_2011_account_21,view,account_type_2011_2_immo,f, -lu_2011_account_2121,2121,Acquis à titre onéreux (Actifs incorporels non produits),lu_2011_account_212,view,account_type_2011_2_immo,f,account_financial_report_24 -lu_2011_account_21211,21211,Concessions,lu_2011_account_2121,other,account_type_2011_2_immo,f, -lu_2011_account_21212,21212,Brevets,lu_2011_account_2121,other,account_type_2011_2_immo,f, -lu_2011_account_21213,21213,Licences informatiques (logiciels et progiciels informatiques),lu_2011_account_2121,other,account_type_2011_2_immo,f, -lu_2011_account_21214,21214,Marques et franchises,lu_2011_account_2121,other,account_type_2011_2_immo,f, -lu_2011_account_21215,21215,Droits et valeurs similaires acquis à titre onéreux,lu_2011_account_2121,view,account_type_2011_2_immo,f, -lu_2011_account_212151,212151,Droits d’auteur et de reproduction,lu_2011_account_21215,other,account_type_2011_2_immo,f, -lu_2011_account_212152,212152,Droits d’émission,lu_2011_account_21215,other,account_type_2011_2_immo,f, -lu_2011_account_212158,212158,Autres droits et valeurs similaires acquis à titre onéreux,lu_2011_account_21215,other,account_type_2011_2_immo,f, -lu_2011_account_2122,2122,Créés par l’entreprise elle-même (Actifs incorporels produits),lu_2011_account_212,view,account_type_2011_2_immo,f,account_financial_report_25 -lu_2011_account_21221,21221,Concessions,lu_2011_account_2122,other,account_type_2011_2_immo,f, -lu_2011_account_21222,21222,Brevets,lu_2011_account_2122,other,account_type_2011_2_immo,f, -lu_2011_account_21223,21223,Licences informatiques (logiciels et progiciels informatiques),lu_2011_account_2122,other,account_type_2011_2_immo,f, -lu_2011_account_21224,21224,Marques et franchises,lu_2011_account_2122,other,account_type_2011_2_immo,f, -lu_2011_account_21225,21225,Droits et valeurs similaires créés par l’entreprise elle-même,lu_2011_account_2122,view,account_type_2011_2_immo,f, -lu_2011_account_212251,212251,Droits d’auteur et de reproduction,lu_2011_account_21225,other,account_type_2011_2_immo,f, -lu_2011_account_212252,212252,Droits d’émission,lu_2011_account_21225,other,account_type_2011_2_immo,f, -lu_2011_account_212258,212258,Autres droits et valeurs similaires créés par l’entreprise elle-même,lu_2011_account_21225,other,account_type_2011_2_immo,f, -lu_2011_account_213,213,"Fonds de commerce, dans la mesure où il a été acquis à titre onéreux",lu_2011_account_21,other,account_type_2011_2_immo,f,account_financial_report_26 -lu_2011_account_214,214,Acomptes versés et immobilisations incorporelles en cours,lu_2011_account_21,view,account_type_2011_2_immo,f,account_financial_report_27 -lu_2011_account_2141,2141,Frais de recherche et de développement,lu_2011_account_214,other,account_type_2011_2_immo,f, -lu_2011_account_2142,2142,"Concessions, brevets, licences, marques ainsi que droits et valeurs similaires",lu_2011_account_214,other,account_type_2011_2_immo,f, -lu_2011_account_2143,2143,Fonds de commerce,lu_2011_account_214,other,account_type_2011_2_immo,f, -lu_2011_account_22,22,Immobilisations corporelles,lu_2011_account_2,view,account_type_2011_2_immo,f, -lu_2011_account_221,221,Terrains et constructions,lu_2011_account_22,view,account_type_2011_2_immo,f,account_financial_report_29 -lu_2011_account_2211,2211,Terrains,lu_2011_account_221,view,account_type_2011_2_immo,f, -lu_2011_account_22111,22111,Terrains nus,lu_2011_account_2211,other,account_type_2011_2_immo,f, -lu_2011_account_22112,22112,Terrains aménagés,lu_2011_account_2211,other,account_type_2011_2_immo,f, -lu_2011_account_22113,22113,Sous-sols et sursols,lu_2011_account_2211,other,account_type_2011_2_immo,f, -lu_2011_account_22114,22114,Terrains de gisement,lu_2011_account_2211,other,account_type_2011_2_immo,f, -lu_2011_account_22115,22115,Terrains bâtis,lu_2011_account_2211,other,account_type_2011_2_immo,f, -lu_2011_account_22118,22118,Autres terrains,lu_2011_account_2211,other,account_type_2011_2_immo,f, -lu_2011_account_2212,2212,Agencements et aménagements de terrains,lu_2011_account_221,view,account_type_2011_2_immo,f, -lu_2011_account_22121,22121,Agencements et aménagements de terrains nus,lu_2011_account_2212,other,account_type_2011_2_immo,f, -lu_2011_account_22122,22122,Agencements et aménagements de terrains aménagés,lu_2011_account_2212,other,account_type_2011_2_immo,f, -lu_2011_account_22123,22123,Agencements et aménagements de sous-sols et sursols,lu_2011_account_2212,other,account_type_2011_2_immo,f, -lu_2011_account_22124,22124,Agencements et aménagements de terrains de gisement,lu_2011_account_2212,other,account_type_2011_2_immo,f, -lu_2011_account_22125,22125,Agencements et aménagements de terrains bâtis,lu_2011_account_2212,other,account_type_2011_2_immo,f, -lu_2011_account_22128,22128,Agencements et aménagements d’autres terrains,lu_2011_account_2212,other,account_type_2011_2_immo,f, -lu_2011_account_2213,2213,Constructions,lu_2011_account_221,view,account_type_2011_2_immo,f, -lu_2011_account_22131,22131,Constructions sur sol propre,lu_2011_account_2213,other,account_type_2011_2_immo,f, -lu_2011_account_22132,22132,Constructions sur sol d’autrui,lu_2011_account_2213,other,account_type_2011_2_immo,f, -lu_2011_account_222,222,Installations techniques et machines,lu_2011_account_22,view,account_type_2011_2_immo,f,account_financial_report_30 -lu_2011_account_2221,2221,Installations techniques,lu_2011_account_222,other,account_type_2011_2_immo,f, -lu_2011_account_2222,2222,Machines,lu_2011_account_222,other,account_type_2011_2_immo,f, -lu_2011_account_223,223,"Autres installations, outillage, mobilier et matériel roulant",lu_2011_account_22,view,account_type_2011_2_immo,f,account_financial_report_31 -lu_2011_account_2231,2231,Equipement de transport et de manutention,lu_2011_account_223,other,account_type_2011_2_immo,f, -lu_2011_account_2232,2232,Véhicules de transport,lu_2011_account_223,other,account_type_2011_2_immo,f, -lu_2011_account_2233,2233,Outillage,lu_2011_account_223,other,account_type_2011_2_immo,f, -lu_2011_account_2234,2234,Mobilier,lu_2011_account_223,other,account_type_2011_2_immo,f, -lu_2011_account_2235,2235,Matériel informatique (hardware),lu_2011_account_223,other,account_type_2011_2_immo,f, -lu_2011_account_2236,2236,Cheptel,lu_2011_account_223,other,account_type_2011_2_immo,f, -lu_2011_account_2237,2237,Emballages récupérables,lu_2011_account_223,other,account_type_2011_2_immo,f, -lu_2011_account_2238,2238,Autres installations,lu_2011_account_223,other,account_type_2011_2_immo,f, -lu_2011_account_224,224,Acomptes versés et immobilisations corporelles en cours,lu_2011_account_22,view,account_type_2011_2_immo,f,account_financial_report_32 -lu_2011_account_2241,2241,Terrains et constructions,lu_2011_account_224,view,account_type_2011_2_immo,f, -lu_2011_account_22411,22411,Terrains,lu_2011_account_2241,other,account_type_2011_2_immo,f, -lu_2011_account_22412,22412,Agencements et aménagements de terrains,lu_2011_account_2241,other,account_type_2011_2_immo,f, -lu_2011_account_22413,22413,Constructions,lu_2011_account_2241,other,account_type_2011_2_immo,f, -lu_2011_account_2242,2242,Installations techniques et machines,lu_2011_account_224,other,account_type_2011_2_immo,f, -lu_2011_account_2243,2243,"Autres installations, outillage, mobilier et matériel roulant",lu_2011_account_224,other,account_type_2011_2_immo,f, -lu_2011_account_23,23,Immobilisations financières,lu_2011_account_2,view,account_type_2011_2_immo,f, -lu_2011_account_231,231,Parts dans des entreprises liées,lu_2011_account_23,other,account_type_2011_2_immo,f,account_financial_report_34 -lu_2011_account_232,232,Créances sur des entreprises liées,lu_2011_account_23,other,account_type_2011_2_immo,f,account_financial_report_35 -lu_2011_account_233,233,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_23,other,account_type_2011_2_immo,f,account_financial_report_36 -lu_2011_account_234,234,Créances sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_23,other,account_type_2011_2_immo,f,account_financial_report_37 -lu_2011_account_235,235,Titres ayant le caractère d’immobilisations,lu_2011_account_23,view,account_type_2011_2_immo,f,account_financial_report_38 -lu_2011_account_2351,2351,Titres immobilisés (droit de propriété),lu_2011_account_235,view,account_type_2011_2_immo,f, -lu_2011_account_23511,23511,Actions,lu_2011_account_2351,other,account_type_2011_2_immo,f, -lu_2011_account_23518,23518,Autres titres immobilisés (droit de propriété),lu_2011_account_2351,other,account_type_2011_2_immo,f, -lu_2011_account_2352,2352,Titres immobilisés (droit de créance),lu_2011_account_235,view,account_type_2011_2_immo,f, -lu_2011_account_23521,23521,Obligations,lu_2011_account_2352,other,account_type_2011_2_immo,f, -lu_2011_account_23528,23528,Autres titres immobilisés (droit de créance),lu_2011_account_2352,other,account_type_2011_2_immo,f, -lu_2011_account_2358,2358,Autres titres ayant le caractère d’immobilisations,lu_2011_account_235,other,account_type_2011_2_immo,f, -lu_2011_account_236,236,Prêts et créances immobilisées,lu_2011_account_23,view,account_type_2011_2_immo,f,account_financial_report_39 -lu_2011_account_2361,2361,Prêts,lu_2011_account_236,view,account_type_2011_2_immo,f, -lu_2011_account_23611,23611,Prêts participatifs,lu_2011_account_2361,other,account_type_2011_2_immo,f, -lu_2011_account_23612,23612,Prêts aux associés,lu_2011_account_2361,other,account_type_2011_2_immo,f, -lu_2011_account_23613,23613,Prêts au personnel,lu_2011_account_2361,other,account_type_2011_2_immo,f, -lu_2011_account_23618,23618,Autres prêts,lu_2011_account_2361,other,account_type_2011_2_immo,f, -lu_2011_account_2362,2362,Dépôts et cautionnements versés,lu_2011_account_236,view,account_type_2011_2_immo,f, -lu_2011_account_23621,23621,Dépôts,lu_2011_account_2362,other,account_type_2011_2_immo,f, -lu_2011_account_23622,23622,Cautionnements,lu_2011_account_2362,other,account_type_2011_2_immo,f, -lu_2011_account_2363,2363,Créances immobilisées,lu_2011_account_236,other,account_type_2011_2_immo,f, -lu_2011_account_237,237,Actions propres ou parts propres,lu_2011_account_23,other,account_type_2011_2_immo,f,account_financial_report_40 -lu_2011_account_3,3,CLASSE 3 - COMPTES DE STOCKS,lu_2011_account_bilan,view,account.data_account_type_view,f, -lu_2011_account_30,30,Matières premières et consommables,lu_2011_account_3,view,account_type_2011_3_stock,f,account_financial_report_43 -lu_2011_account_301,301,Matières premières,lu_2011_account_30,other,account_type_2011_3_stock,f, -lu_2011_account_302,302,Matières consommables,lu_2011_account_30,other,account_type_2011_3_stock,f, -lu_2011_account_303,303,Fournitures consommables,lu_2011_account_30,view,account_type_2011_3_stock,f, -lu_2011_account_3031,3031,Combustibles,lu_2011_account_303,other,account_type_2011_3_stock,f, -lu_2011_account_3032,3032,Produits d’entretien,lu_2011_account_303,other,account_type_2011_3_stock,f, -lu_2011_account_3033,3033,Fournitures d’atelier et d’usine,lu_2011_account_303,other,account_type_2011_3_stock,f, -lu_2011_account_3034,3034,Fournitures de magasin,lu_2011_account_303,other,account_type_2011_3_stock,f, -lu_2011_account_3035,3035,Fournitures de bureau,lu_2011_account_303,other,account_type_2011_3_stock,f, -lu_2011_account_3036,3036,Carburants,lu_2011_account_303,other,account_type_2011_3_stock,f, -lu_2011_account_3037,3037,Lubrifiants,lu_2011_account_303,other,account_type_2011_3_stock,f, -lu_2011_account_3038,3038,Autres fournitures consommables,lu_2011_account_303,other,account_type_2011_3_stock,f, -lu_2011_account_304,304,Emballages,lu_2011_account_30,view,account_type_2011_3_stock,f, -lu_2011_account_3041,3041,Emballages non-récupérables,lu_2011_account_304,other,account_type_2011_3_stock,f, -lu_2011_account_3042,3042,Emballages récupérables,lu_2011_account_304,other,account_type_2011_3_stock,f, -lu_2011_account_3043,3043,Emballages à usage mixte,lu_2011_account_304,other,account_type_2011_3_stock,f, -lu_2011_account_305,305,Approvisionnements,lu_2011_account_30,other,account_type_2011_3_stock,f, -lu_2011_account_31,31,Produits en cours de fabrication et commandes en cours,lu_2011_account_3,view,account_type_2011_3_stock,f,account_financial_report_44 -lu_2011_account_311,311,Produits en cours de fabrication,lu_2011_account_31,other,account_type_2011_3_stock,f, -lu_2011_account_312,312,Commandes en cours – Produits,lu_2011_account_31,other,account_type_2011_3_stock,f, -lu_2011_account_313,313,Commandes en cours – Prestations de services,lu_2011_account_31,other,account_type_2011_3_stock,f, -lu_2011_account_314,314,Immeubles en construction,lu_2011_account_31,other,account_type_2011_3_stock,f, -lu_2011_account_32,32,Produits finis et marchandises,lu_2011_account_3,view,account_type_2011_3_stock,f,account_financial_report_45 -lu_2011_account_321,321,Produits finis,lu_2011_account_32,other,account_type_2011_3_stock,f, -lu_2011_account_322,322,Produits intermédiaires,lu_2011_account_32,other,account_type_2011_3_stock,f, -lu_2011_account_323,323,Produits résiduels,lu_2011_account_32,view,account_type_2011_3_stock,f, -lu_2011_account_3231,3231,Déchets,lu_2011_account_323,other,account_type_2011_3_stock,f, -lu_2011_account_3232,3232,Rebuts,lu_2011_account_323,other,account_type_2011_3_stock,f, -lu_2011_account_3233,3233,Matières de récupération,lu_2011_account_323,other,account_type_2011_3_stock,f, -lu_2011_account_326,326,Marchandises,lu_2011_account_32,other,account_type_2011_3_stock,f, -lu_2011_account_327,327,"Marchandises en voie d’acheminement, mises en dépôt ou données en consignation",lu_2011_account_32,other,account_type_2011_3_stock,f, -lu_2011_account_33,33,Terrains et immeubles destinés à la revente,lu_2011_account_3,view,account_type_2011_3_stock,f, -lu_2011_account_331,331,Terrains,lu_2011_account_33,other,account_type_2011_3_stock,f, -lu_2011_account_332,332,Immeubles,lu_2011_account_33,view,account_type_2011_3_stock,f, -lu_2011_account_3321,3321,Immeubles acquis,lu_2011_account_332,other,account_type_2011_3_stock,f, -lu_2011_account_3322,3322,Immeubles construits,lu_2011_account_332,other,account_type_2011_3_stock,f, -lu_2011_account_34,34,Acomptes versés,lu_2011_account_3,view,account_type_2011_3_stock,f,account_financial_report_46 -lu_2011_account_341,341,Acomptes versés sur matières premières et consommables,lu_2011_account_34,other,account_type_2011_3_stock,f, -lu_2011_account_342,342,Acomptes versés sur produits en cours de fabrication et commandes en cours,lu_2011_account_34,other,account_type_2011_3_stock,f, -lu_2011_account_343,343,Acomptes versés sur produits finis et marchandises,lu_2011_account_34,other,account_type_2011_3_stock,f, -lu_2011_account_344,344,Acomptes versés sur terrains et immeubles destinés à la revente,lu_2011_account_34,other,account_type_2011_3_stock,f, -lu_2011_account_4,4,CLASSE 4 - COMPTES DE TIERS,lu_2011_account_bilan,view,account.data_account_type_view,f, -lu_2011_account_40,40,Créances résultant de ventes et prestations de services,lu_2011_account_4,view,account_type_2011_4_creance,f, -lu_2011_account_401,401,Créances dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_40,view,account_type_2011_4_creance,f,account_financial_report_49 -lu_2011_account_4011,4011,Clients,lu_2011_account_401,receivable,account_type_2011_4_creance,t, -lu_2011_account_4012,4012,Clients – Effets à recevoir,lu_2011_account_401,receivable,account_type_2011_4_creance,t, -lu_2011_account_4013,4013,Clients douteux ou litigieux,lu_2011_account_401,receivable,account_type_2011_4_creance,t, -lu_2011_account_4014,4014,Clients – Factures à établir,lu_2011_account_401,receivable,account_type_2011_4_creance,t, -lu_2011_account_4015,4015,Clients créditeurs,lu_2011_account_401,receivable,account_type_2011_4_creance,t, -lu_2011_account_4019,4019,Corrections de valeur,lu_2011_account_401,other,account_type_2011_4_creance,f, -lu_2011_account_402,402,Créances dont la durée résiduelle est supérieure à un an,lu_2011_account_40,view,account_type_2011_4_creance,f,account_financial_report_50 -lu_2011_account_4021,4021,Clients,lu_2011_account_402,receivable,account_type_2011_4_creance,t, -lu_2011_account_4022,4022,Clients – Effets à recevoir,lu_2011_account_402,receivable,account_type_2011_4_creance,t, -lu_2011_account_4023,4023,Clients douteux ou litigieux,lu_2011_account_402,receivable,account_type_2011_4_creance,t, -lu_2011_account_4024,4024,Clients – Factures à établir,lu_2011_account_402,receivable,account_type_2011_4_creance,t, -lu_2011_account_4025,4025,Clients créditeurs,lu_2011_account_402,receivable,account_type_2011_4_creance,t, -lu_2011_account_4029,4029,Corrections de valeur,lu_2011_account_402,other,account_type_2011_4_creance,f, -lu_2011_account_41,41,Créances sur des entreprises liées et sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_4,view,account_type_2011_4_creance,f, -lu_2011_account_411,411,Créances sur des entreprises liées,lu_2011_account_41,view,account_type_2011_4_creance,f, -lu_2011_account_4111,4111,Créances dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_411,view,account_type_2011_4_creance,f,account_financial_report_52 -lu_2011_account_41111,41111,Ventes de marchandises et de prestations de services,lu_2011_account_4111,other,account_type_2011_4_creance,f, -lu_2011_account_41112,41112,Prêts et avances,lu_2011_account_4111,other,account_type_2011_4_creance,f, -lu_2011_account_41113,41113,Intérêts courus,lu_2011_account_4111,other,account_type_2011_4_creance,f, -lu_2011_account_41114,41114,Dividendes à recevoir,lu_2011_account_4111,other,account_type_2011_4_creance,f, -lu_2011_account_41118,41118,Autres créances,lu_2011_account_4111,other,account_type_2011_4_creance,f, -lu_2011_account_41119,41119,Corrections de valeur,lu_2011_account_4111,other,account_type_2011_4_creance,f, -lu_2011_account_4112,4112,Créances dont la durée résiduelle est supérieure à un an,lu_2011_account_411,view,account_type_2011_4_creance,f,account_financial_report_53 -lu_2011_account_41121,41121,Ventes de marchandises et de prestations de services,lu_2011_account_4112,other,account_type_2011_4_creance,f, -lu_2011_account_41122,41122,Prêts et avances,lu_2011_account_4112,other,account_type_2011_4_creance,f, -lu_2011_account_41123,41123,Intérêts courus,lu_2011_account_4112,other,account_type_2011_4_creance,f, -lu_2011_account_41124,41124,Dividendes à recevoir,lu_2011_account_4112,other,account_type_2011_4_creance,f, -lu_2011_account_41128,41128,Autres créances,lu_2011_account_4112,other,account_type_2011_4_creance,f, -lu_2011_account_41129,41129,Corrections de valeur,lu_2011_account_4112,other,account_type_2011_4_creance,f, -lu_2011_account_412,412,Créances sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_41,view,account_type_2011_4_creance,f, -lu_2011_account_4121,4121,Créances dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_412,view,account_type_2011_4_creance,f,account_financial_report_55 -lu_2011_account_41211,41211,Ventes de marchandises et de prestations de service,lu_2011_account_4121,other,account_type_2011_4_creance,f, -lu_2011_account_41212,41212,Prêts et avances,lu_2011_account_4121,other,account_type_2011_4_creance,f, -lu_2011_account_41213,41213,Intérêts courus,lu_2011_account_4121,other,account_type_2011_4_creance,f, -lu_2011_account_41214,41214,Dividendes à recevoir,lu_2011_account_4121,other,account_type_2011_4_creance,f, -lu_2011_account_41218,41218,Autres créances,lu_2011_account_4121,other,account_type_2011_4_creance,f, -lu_2011_account_41219,41219,Corrections de valeur,lu_2011_account_4121,other,account_type_2011_4_creance,f, -lu_2011_account_4122,4122,Créances dont la durée résiduelle est supérieure à un an,lu_2011_account_412,view,account_type_2011_4_creance,f,account_financial_report_56 -lu_2011_account_41221,41221,Ventes de marchandises et de prestations de service,lu_2011_account_4122,other,account_type_2011_4_creance,f, -lu_2011_account_41222,41222,Prêts et avances,lu_2011_account_4122,other,account_type_2011_4_creance,f, -lu_2011_account_41223,41223,Intérêts courus,lu_2011_account_4122,other,account_type_2011_4_creance,f, -lu_2011_account_41224,41224,Dividendes à recevoir,lu_2011_account_4122,other,account_type_2011_4_creance,f, -lu_2011_account_41228,41228,Autres créances,lu_2011_account_4122,other,account_type_2011_4_creance,f, -lu_2011_account_41229,41229,Corrections de valeur,lu_2011_account_4122,other,account_type_2011_4_creance,f, -lu_2011_account_42,42,Autres créances,lu_2011_account_4,view,account_type_2011_4_creance,f, -lu_2011_account_421,421,Autres créances dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_42,view,account_type_2011_4_creance,f,account_financial_report_58 -lu_2011_account_4211,4211,Personnel – Avances et acomptes,lu_2011_account_421,view,account_type_2011_4_creance,f, -lu_2011_account_42111,42111,Avances et acomptes,lu_2011_account_4211,other,account_type_2011_4_creance,f, -lu_2011_account_42119,42119,Corrections de valeur,lu_2011_account_4211,other,account_type_2011_4_creance,f, -lu_2011_account_4212,4212,Créances sur associés ou actionnaires,lu_2011_account_421,view,account_type_2011_4_creance,f, -lu_2011_account_42121,42121,Montant principal,lu_2011_account_4212,other,account_type_2011_4_creance,f, -lu_2011_account_42122,42122,Intérêts courus,lu_2011_account_4212,other,account_type_2011_4_creance,f, -lu_2011_account_42129,42129,Corrections de valeur sur créances,lu_2011_account_4212,other,account_type_2011_4_creance,f, -lu_2011_account_4213,4213,Etat – Subventions à recevoir,lu_2011_account_421,view,account_type_2011_4_creance,f, -lu_2011_account_42131,42131,Subventions d’investissement,lu_2011_account_4213,other,account_type_2011_4_creance,f, -lu_2011_account_42132,42132,Subventions d’exploitation,lu_2011_account_4213,other,account_type_2011_4_creance,f, -lu_2011_account_42138,42138,Autres subventions,lu_2011_account_4213,other,account_type_2011_4_creance,f, -lu_2011_account_4214,4214,Administration des Contributions Directes (ACD),lu_2011_account_421,other,account_type_2011_4_creance,f, -lu_2011_account_4215,4215,Administration des Douanes et Accises (ADA),lu_2011_account_421,other,account_type_2011_4_creance,f, -lu_2011_account_4216,4216,Administration de l’Enregistrement et des Domaines (AED),lu_2011_account_421,view,account_type_2011_4_creance,f, -lu_2011_account_42161,42161,Taxe sur la valeur ajoutée – TVA,lu_2011_account_4216,view,account_type_2011_4_creance,f, -lu_2011_account_421611,421611,TVA en amont,lu_2011_account_42161,other,account_type_2011_4_creance,f, -lu_2011_account_421612,421612,TVA à recevoir,lu_2011_account_42161,other,account_type_2011_4_creance,f, -lu_2011_account_421613,421613,TVA acomptes versés,lu_2011_account_42161,other,account_type_2011_4_creance,f, -lu_2011_account_421618,421618,TVA – Autres créances,lu_2011_account_42161,other,account_type_2011_4_creance,f, -lu_2011_account_42162,42162,Impôts indirects,lu_2011_account_4216,view,account_type_2011_4_creance,f, -lu_2011_account_421621,421621,Droits d’enregistrement,lu_2011_account_42162,other,account_type_2011_4_creance,f, -lu_2011_account_421622,421622,Taxe d’abonnement,lu_2011_account_42162,other,account_type_2011_4_creance,f, -lu_2011_account_421623,421623,Droits d’hypothèques,lu_2011_account_42162,other,account_type_2011_4_creance,f, -lu_2011_account_421624,421624,Droits de timbre,lu_2011_account_42162,other,account_type_2011_4_creance,f, -lu_2011_account_421628,421628,Autres impôts indirects,lu_2011_account_42162,other,account_type_2011_4_creance,f, -lu_2011_account_42168,42168,AED – Autres créances,lu_2011_account_4216,other,account_type_2011_4_creance,f, -lu_2011_account_4217,4217,Créances sur la sécurité sociale et autres organismes sociaux,lu_2011_account_421,view,account_type_2011_4_creance,f, -lu_2011_account_42171,42171,Centre Commun de Sécurité Sociale,lu_2011_account_4217,other,account_type_2011_4_creance,f, -lu_2011_account_42172,42172,Mutualité des employeurs,lu_2011_account_4217,other,account_type_2011_4_creance,f, -lu_2011_account_42178,42178,Autres organismes sociaux,lu_2011_account_4217,other,account_type_2011_4_creance,f, -lu_2011_account_4218,4218,Créances diverses,lu_2011_account_421,view,account_type_2011_4_creance,f, -lu_2011_account_42181,42181,Impôts étrangers,lu_2011_account_4218,view,account_type_2011_4_creance,f, -lu_2011_account_421811,421811,TVA étrangères,lu_2011_account_42181,other,account_type_2011_4_creance,f, -lu_2011_account_421818,421818,Autres impôts étrangers,lu_2011_account_42181,other,account_type_2011_4_creance,f, -lu_2011_account_42188,42188,Autres créances diverses,lu_2011_account_4218,other,account_type_2011_4_creance,f, -lu_2011_account_42189,42189,Corrections de valeur,lu_2011_account_4218,other,account_type_2011_4_creance,f, -lu_2011_account_422,422,Autres créances dont la durée résiduelle est supérieure à un an,lu_2011_account_42,view,account_type_2011_4_creance,f,account_financial_report_59 -lu_2011_account_4221,4221,Personnel – Avances et acomptes,lu_2011_account_422,view,account_type_2011_4_creance,f, -lu_2011_account_42211,42211,Avances et acomptes,lu_2011_account_4221,other,account_type_2011_4_creance,f, -lu_2011_account_42219,42219,Corrections de valeur,lu_2011_account_4221,other,account_type_2011_4_creance,f, -lu_2011_account_4222,4222,Associés ou actionnaires,lu_2011_account_422,view,account_type_2011_4_creance,f, -lu_2011_account_42221,42221,Montant principal,lu_2011_account_4222,other,account_type_2011_4_creance,f, -lu_2011_account_42222,42222,Intérêts courus,lu_2011_account_4222,other,account_type_2011_4_creance,f, -lu_2011_account_42229,42229,Corrections de valeur sur créances,lu_2011_account_4222,other,account_type_2011_4_creance,f, -lu_2011_account_4223,4223,Etat – Subventions à recevoir,lu_2011_account_422,view,account_type_2011_4_creance,f, -lu_2011_account_42231,42231,Subventions d’investissement,lu_2011_account_4223,other,account_type_2011_4_creance,f, -lu_2011_account_42232,42232,Subventions d’exploitation,lu_2011_account_4223,other,account_type_2011_4_creance,f, -lu_2011_account_42238,42238,Autres subventions,lu_2011_account_4223,other,account_type_2011_4_creance,f, -lu_2011_account_4224,4224,Administration des Contributions Directes (ACD),lu_2011_account_422,other,account_type_2011_4_creance,f, -lu_2011_account_4225,4225,Administration des Douanes et Accises (ADA),lu_2011_account_422,other,account_type_2011_4_creance,f, -lu_2011_account_4226,4226,Administration de l’Enregistrement et des Domaines (AED),lu_2011_account_422,view,account_type_2011_4_creance,f, -lu_2011_account_42261,42261,Taxe sur la valeur ajoutée – TVA,lu_2011_account_4226,view,account_type_2011_4_creance,f, -lu_2011_account_422611,422611,TVA en amont,lu_2011_account_42261,view,account_type_2011_4_creance,f, -lu_2011_account_4226111,4226111,TVA en amont – Pays,lu_2011_account_422611,other,account_type_2011_4_creance,f, -lu_2011_account_4226112,4226112,TVA en amont – Intracommunautaire,lu_2011_account_422611,other,account_type_2011_4_creance,f, -lu_2011_account_4226113,4226113,TVA en amont – Triangulaire,lu_2011_account_422611,other,account_type_2011_4_creance,f, -lu_2011_account_4226114,4226114,TVA en amont – Exonérations spéciales,lu_2011_account_422611,other,account_type_2011_4_creance,f, -lu_2011_account_422612,422612,TVA à recevoir,lu_2011_account_42261,other,account_type_2011_4_creance,f, -lu_2011_account_422613,422613,TVA acomptes versés,lu_2011_account_42261,other,account_type_2011_4_creance,f, -lu_2011_account_422618,422618,TVA – Autres créances,lu_2011_account_42261,other,account_type_2011_4_creance,f, -lu_2011_account_42262,42262,Impôts indirects,lu_2011_account_4226,view,account_type_2011_4_creance,f, -lu_2011_account_422621,422621,Droits d’enregistrement,lu_2011_account_42262,other,account_type_2011_4_creance,f, -lu_2011_account_422622,422622,Taxe d’abonnement,lu_2011_account_42262,other,account_type_2011_4_creance,f, -lu_2011_account_422623,422623,Droits d’hypothèques,lu_2011_account_42262,other,account_type_2011_4_creance,f, -lu_2011_account_422624,422624,Droits de timbre,lu_2011_account_42262,other,account_type_2011_4_creance,f, -lu_2011_account_422628,422628,Autres impôts indirects,lu_2011_account_42262,other,account_type_2011_4_creance,f, -lu_2011_account_4227,4227,Créances sur la sécurité sociale et autres organismes sociaux,lu_2011_account_422,view,account_type_2011_4_creance,f, -lu_2011_account_42271,42271,Centre Commun de Sécurité Sociale,lu_2011_account_4227,other,account_type_2011_4_creance,f, -lu_2011_account_42272,42272,Mutualité des employeurs,lu_2011_account_4227,other,account_type_2011_4_creance,f, -lu_2011_account_42278,42278,Autres organismes sociaux,lu_2011_account_4227,other,account_type_2011_4_creance,f, -lu_2011_account_4228,4228,Créances diverses,lu_2011_account_422,view,account_type_2011_4_creance,f, -lu_2011_account_42281,42281,Impôts étrangers,lu_2011_account_4228,view,account_type_2011_4_creance,f, -lu_2011_account_422811,422811,TVA étrangères,lu_2011_account_42281,other,account_type_2011_4_creance,f, -lu_2011_account_422818,422818,Autres impôts étrangers,lu_2011_account_42281,other,account_type_2011_4_creance,f, -lu_2011_account_42288,42288,Autres créances diverses,lu_2011_account_4228,other,account_type_2011_4_creance,f, -lu_2011_account_42289,42289,Corrections de valeur sur autres créances diverses,lu_2011_account_4228,other,account_type_2011_4_creance,f, -lu_2011_account_43,43,Acomptes reçus sur commandes pour autant qu’ils ne sont pas déduits des stocks de façon distincte,lu_2011_account_4,view,account_type_2011_4_dette,f, -lu_2011_account_431,431,Acomptes reçus dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_43,other,account_type_2011_4_dette,f,account_financial_report_98 -lu_2011_account_432,432,Acomptes reçus dont la durée résiduelle est supérieure à un an,lu_2011_account_43,other,account_type_2011_4_dette,f,account_financial_report_99 -lu_2011_account_44,44,Dettes sur achats et prestations de services et dettes représentées par des effets de commerce,lu_2011_account_4,view,account_type_2011_4_dette,f, -lu_2011_account_441,441,Dettes sur achats et prestations de services,lu_2011_account_44,view,account_type_2011_4_dette,f, -lu_2011_account_4411,4411,Dettes sur achats et prestations de services dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_441,view,account_type_2011_4_dette,f,account_financial_report_101 -lu_2011_account_44111,44111,Fournisseurs,lu_2011_account_4411,payable,account_type_2011_4_dette,t, -lu_2011_account_44112,44112,Fournisseurs – Factures non parvenues,lu_2011_account_4411,payable,account_type_2011_4_dette,t, -lu_2011_account_44113,44113,Fournisseurs débiteurs,lu_2011_account_4411,view,account_type_2011_4_dette,f, -lu_2011_account_441131,441131,Fournisseurs – Avances et acomptes versés sur commandes,lu_2011_account_44113,payable,account_type_2011_4_dette,t, -lu_2011_account_441132,441132,Fournisseurs – Créances pour emballages et matériel à rendre,lu_2011_account_44113,payable,account_type_2011_4_dette,t, -lu_2011_account_441133,441133,Fournisseurs – Autres avoirs,lu_2011_account_44113,payable,account_type_2011_4_dette,t, -lu_2011_account_441134,441134,"Rabais, remises, ristournes à obtenir et autres avoirs non encore reçus",lu_2011_account_44113,payable,account_type_2011_4_dette,t, -lu_2011_account_4412,4412,Dettes sur achats et prestations de services dont la durée résiduelle est supérieure à un an,lu_2011_account_441,view,account_type_2011_4_dette,f,account_financial_report_102 -lu_2011_account_44121,44121,Fournisseurs,lu_2011_account_4412,payable,account_type_2011_4_dette,t, -lu_2011_account_44122,44122,Fournisseurs – Factures non parvenues,lu_2011_account_4412,payable,account_type_2011_4_dette,t, -lu_2011_account_44123,44123,Fournisseurs débiteurs,lu_2011_account_4412,view,account_type_2011_4_dette,f, -lu_2011_account_441231,441231,Fournisseurs – Avances et acomptes versés sur commandes,lu_2011_account_44123,payable,account_type_2011_4_dette,t, -lu_2011_account_441232,441232,Fournisseurs – Créances pour emballages et matériel à rendre,lu_2011_account_44123,payable,account_type_2011_4_dette,t, -lu_2011_account_441233,441233,Fournisseurs – Autres avoirs,lu_2011_account_44123,payable,account_type_2011_4_dette,t, -lu_2011_account_441234,441234,"Rabais, remises, ristournes à obtenir et autres avoirs non encore reçus",lu_2011_account_44123,payable,account_type_2011_4_dette,t, -lu_2011_account_442,442,Dettes représentées par des effets de commerce,lu_2011_account_44,view,account_type_2011_4_dette,f, -lu_2011_account_4421,4421,Dettes représentées par des effets de commerce dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_442,other,account_type_2011_4_dette,f,account_financial_report_104 -lu_2011_account_4422,4422,Dettes représentées par des effets de commerce dont la durée résiduelle est supérieure à un an,lu_2011_account_442,other,account_type_2011_4_dette,f,account_financial_report_105 -lu_2011_account_45,45,Dettes envers des entreprises liées et des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_4,view,account_type_2011_4_dette,f, -lu_2011_account_451,451,Dettes envers des entreprises liées,lu_2011_account_45,view,account_type_2011_4_dette,f, -lu_2011_account_4511,4511,Dettes envers des entreprises liées dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_451,view,account_type_2011_4_dette,f,account_financial_report_107 -lu_2011_account_45111,45111,Ventes de marchandises et de prestations de services,lu_2011_account_4511,other,account_type_2011_4_dette,f, -lu_2011_account_45112,45112,Prêts et avances,lu_2011_account_4511,other,account_type_2011_4_dette,f, -lu_2011_account_45113,45113,Intérêts courus,lu_2011_account_4511,other,account_type_2011_4_dette,f, -lu_2011_account_45114,45114,Dividendes à payer,lu_2011_account_4511,other,account_type_2011_4_dette,f, -lu_2011_account_45118,45118,Autres dettes,lu_2011_account_4511,other,account_type_2011_4_dette,f, -lu_2011_account_4512,4512,Dettes envers des entreprises liées dont la durée résiduelle est supérieure à un an,lu_2011_account_451,view,account_type_2011_4_dette,f,account_financial_report_108 -lu_2011_account_45121,45121,Ventes de marchandises et de prestations de services,lu_2011_account_4512,other,account_type_2011_4_dette,f, -lu_2011_account_45122,45122,Prêts et avances,lu_2011_account_4512,other,account_type_2011_4_dette,f, -lu_2011_account_45123,45123,Intérêts courus,lu_2011_account_4512,other,account_type_2011_4_dette,f, -lu_2011_account_45124,45124,Dividendes à payer,lu_2011_account_4512,other,account_type_2011_4_dette,f, -lu_2011_account_45128,45128,Autres dettes,lu_2011_account_4512,other,account_type_2011_4_dette,f, -lu_2011_account_452,452,Dettes envers des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_45,view,account_type_2011_4_dette,f, -lu_2011_account_4521,4521,Dettes envers des entreprises avec lesquelles la société a un lien de participation dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_452,view,account_type_2011_4_dette,f,account_financial_report_110 -lu_2011_account_45211,45211,Ventes de marchandises et de prestations de services,lu_2011_account_4521,other,account_type_2011_4_dette,f, -lu_2011_account_45212,45212,Prêts et avances,lu_2011_account_4521,other,account_type_2011_4_dette,f, -lu_2011_account_45213,45213,Intérêts courus,lu_2011_account_4521,other,account_type_2011_4_dette,f, -lu_2011_account_45214,45214,Dividendes à payer,lu_2011_account_4521,other,account_type_2011_4_dette,f, -lu_2011_account_45218,45218,Autres dettes,lu_2011_account_4521,other,account_type_2011_4_dette,f, -lu_2011_account_4522,4522,Dettes envers des entreprises avec lesquelles la société a un lien de participation dont la durée résiduelle est supérieure à un an,lu_2011_account_452,view,account_type_2011_4_dette,f,account_financial_report_111 -lu_2011_account_45221,45221,Ventes de marchandises et de prestations de services,lu_2011_account_4522,other,account_type_2011_4_dette,f, -lu_2011_account_45222,45222,Prêts et avances,lu_2011_account_4522,other,account_type_2011_4_dette,f, -lu_2011_account_45223,45223,Intérêts courus,lu_2011_account_4522,other,account_type_2011_4_dette,f, -lu_2011_account_45224,45224,Dividendes à payer,lu_2011_account_4522,other,account_type_2011_4_dette,f, -lu_2011_account_45228,45228,Autres dettes,lu_2011_account_4522,other,account_type_2011_4_dette,f, -lu_2011_account_46,46,Dettes fiscales et dettes envers la sécurité sociale,lu_2011_account_4,view,account_type_2011_4_dette,f, -lu_2011_account_461,461,Dettes fiscales,lu_2011_account_46,view,account_type_2011_4_dette,f,account_financial_report_113 -lu_2011_account_4611,4611,Administrations communales,lu_2011_account_461,view,account_type_2011_4_dette,f, -lu_2011_account_46111,46111,Impôts communaux,lu_2011_account_4611,other,account_type_2011_4_dette,f, -lu_2011_account_46112,46112,Taxes communales,lu_2011_account_4611,other,account_type_2011_4_dette,f, -lu_2011_account_4612,4612,Administration des Contributions Directes (ACD),lu_2011_account_461,view,account_type_2011_4_dette,f, -lu_2011_account_46121,46121,Impôt sur le revenu des collectivités,lu_2011_account_4612,view,account_type_2011_4_dette,f, -lu_2011_account_461211,461211,Impôt sur le revenu des collectivités – charge fiscale estimée,lu_2011_account_46121,other,account_type_2011_4_dette,f, -lu_2011_account_461212,461212,Impôt sur le revenu des collectivités – dette fiscale à payer,lu_2011_account_46121,other,account_type_2011_4_dette,f, -lu_2011_account_46122,46122,Impôt commercial,lu_2011_account_4612,view,account_type_2011_4_dette,f, -lu_2011_account_461221,461221,Impôt commercial – charge fiscale estimée,lu_2011_account_46122,other,account_type_2011_4_dette,f, -lu_2011_account_461222,461222,Impôt commercial – dette fiscale à payer,lu_2011_account_46122,other,account_type_2011_4_dette,f, -lu_2011_account_46123,46123,Impôt sur la fortune,lu_2011_account_4612,view,account_type_2011_4_dette,f, -lu_2011_account_461231,461231,Impôt sur la fortune – charge fiscale estimée,lu_2011_account_46123,other,account_type_2011_4_dette,f, -lu_2011_account_461232,461232,Impôt sur la fortune – dette fiscale à payer,lu_2011_account_46123,other,account_type_2011_4_dette,f, -lu_2011_account_46124,46124,Retenue d’impôt sur traitements et salaires,lu_2011_account_4612,other,account_type_2011_4_dette,f, -lu_2011_account_46125,46125,Retenue d’impôt sur revenus de capitaux mobiliers,lu_2011_account_4612,other,account_type_2011_4_dette,f, -lu_2011_account_46126,46126,Retenue d’impôt sur les tantièmes,lu_2011_account_4612,other,account_type_2011_4_dette,f, -lu_2011_account_46128,46128,ACD – Autres dettes,lu_2011_account_4612,other,account_type_2011_4_dette,f, -lu_2011_account_4613,4613,Administration des Douanes et Accises (ADA),lu_2011_account_461,view,account_type_2011_4_dette,f, -lu_2011_account_46131,46131,Taxe sur les véhicules automoteurs,lu_2011_account_4613,other,account_type_2011_4_dette,f, -lu_2011_account_46132,46132,Droits d’accises et taxe de consommation,lu_2011_account_4613,other,account_type_2011_4_dette,f, -lu_2011_account_46138,46138,ADA – Autres dettes,lu_2011_account_4613,other,account_type_2011_4_dette,f, -lu_2011_account_4614,4614,Administration de l’Enregistrement et des Domaines (AED),lu_2011_account_461,view,account_type_2011_4_dette,f, -lu_2011_account_46141,46141,Taxe sur la valeur ajoutée – TVA,lu_2011_account_4614,view,account_type_2011_4_dette,f, -lu_2011_account_461411,461411,TVA en aval,lu_2011_account_46141,view,account_type_2011_4_dette,f, -lu_2011_account_4614111,4614111,TVA en aval – Pays,lu_2011_account_461411,other,account_type_2011_4_dette,f, -lu_2011_account_4614112,4614112,TVA en aval – Intracommunautaire,lu_2011_account_461411,other,account_type_2011_4_dette,f, -lu_2011_account_4614113,4614113,TVA en aval – Extracommunautaire,lu_2011_account_461411,other,account_type_2011_4_dette,f, -lu_2011_account_4614114,4614114,TVA en aval – Triangulaire,lu_2011_account_461411,other,account_type_2011_4_dette,f, -lu_2011_account_4614115,4614115,TVA en aval – Exonérations spéciales,lu_2011_account_461411,other,account_type_2011_4_dette,f, -lu_2011_account_461412,461412,TVA due,lu_2011_account_46141,other,account_type_2011_4_dette,f, -lu_2011_account_461413,461413,TVA acomptes reçus,lu_2011_account_46141,other,account_type_2011_4_dette,f, -lu_2011_account_461418,461418,TVA – Autres dettes,lu_2011_account_46141,other,account_type_2011_4_dette,f, -lu_2011_account_46142,46142,Impôts indirects,lu_2011_account_4614,view,account_type_2011_4_dette,f, -lu_2011_account_461421,461421,Droits d’enregistrement,lu_2011_account_46142,other,account_type_2011_4_dette,f, -lu_2011_account_461422,461422,Taxe d’abonnement,lu_2011_account_46142,other,account_type_2011_4_dette,f, -lu_2011_account_461423,461423,Droits d’hypothèques,lu_2011_account_46142,other,account_type_2011_4_dette,f, -lu_2011_account_461424,461424,Droits de timbre,lu_2011_account_46142,other,account_type_2011_4_dette,f, -lu_2011_account_461428,461428,Autres impôts indirects,lu_2011_account_46142,other,account_type_2011_4_dette,f, -lu_2011_account_4615,4615,Administrations fiscales étrangères,lu_2011_account_461,other,account_type_2011_4_dette,f, -lu_2011_account_462,462,Dettes au titre de la sécurité sociale,lu_2011_account_46,view,account_type_2011_4_dette,f,account_financial_report_114 -lu_2011_account_4621,4621,Centre Commun de Sécurité Sociale,lu_2011_account_462,other,account_type_2011_4_dette,f, -lu_2011_account_4622,4622,Organismes de sécurité sociale étrangers,lu_2011_account_462,other,account_type_2011_4_dette,f, -lu_2011_account_4628,4628,Autres organismes sociaux,lu_2011_account_462,other,account_type_2011_4_dette,f, -lu_2011_account_47,47,Autres dettes,lu_2011_account_4,view,account_type_2011_4_dette,f, -lu_2011_account_471,471,Autres dettes dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_47,view,account_type_2011_4_dette,f,account_financial_report_116 -lu_2011_account_4711,4711,Dépôts et cautionnements reçus,lu_2011_account_471,view,account_type_2011_4_dette,f, -lu_2011_account_47111,47111,Dépôts,lu_2011_account_4711,other,account_type_2011_4_dette,f, -lu_2011_account_47112,47112,Cautionnements,lu_2011_account_4711,other,account_type_2011_4_dette,f, -lu_2011_account_47113,47113,Intérêts courus,lu_2011_account_4711,other,account_type_2011_4_dette,f, -lu_2011_account_4712,4712,Dettes envers associés et actionnaires,lu_2011_account_471,view,account_type_2011_4_dette,f, -lu_2011_account_47121,47121,Montant principal,lu_2011_account_4712,other,account_type_2011_4_dette,f, -lu_2011_account_47122,47122,Intérêts courus,lu_2011_account_4712,other,account_type_2011_4_dette,f, -lu_2011_account_4713,4713,"Dettes envers administrateurs, gérants et commissaires",lu_2011_account_471,other,account_type_2011_4_dette,f, -lu_2011_account_4714,4714,Dettes envers le personnel,lu_2011_account_471,view,account_type_2011_4_dette,f, -lu_2011_account_47141,47141,Personnel – Rémunérations dues,lu_2011_account_4714,other,account_type_2011_4_dette,f, -lu_2011_account_47142,47142,Personnel – Dépôts,lu_2011_account_4714,other,account_type_2011_4_dette,f, -lu_2011_account_47143,47143,"Personnel – Oppositions, saisies",lu_2011_account_4714,other,account_type_2011_4_dette,f, -lu_2011_account_47148,47148,Personnel – Autres,lu_2011_account_4714,other,account_type_2011_4_dette,f, -lu_2011_account_4715,4715,Etat – Droits d’émission à restituer,lu_2011_account_471,other,account_type_2011_4_dette,f, -lu_2011_account_4718,4718,Autres dettes diverses,lu_2011_account_471,other,account_type_2011_4_dette,f, -lu_2011_account_472,472,Autres dettes dont la durée résiduelle est supérieure à un an,lu_2011_account_47,view,account_type_2011_4_dette,f,account_financial_report_117 -lu_2011_account_4721,4721,Dépôts et cautionnements reçus,lu_2011_account_472,view,account_type_2011_4_dette,f, -lu_2011_account_47211,47211,Dépôts,lu_2011_account_4721,other,account_type_2011_4_dette,f, -lu_2011_account_47212,47212,Cautionnements,lu_2011_account_4721,other,account_type_2011_4_dette,f, -lu_2011_account_47213,47213,Intérêts courus,lu_2011_account_4721,other,account_type_2011_4_dette,f, -lu_2011_account_4722,4722,Dettes envers associés et actionnaires,lu_2011_account_472,view,account_type_2011_4_dette,f, -lu_2011_account_47221,47221,Montant principal,lu_2011_account_4722,other,account_type_2011_4_dette,f, -lu_2011_account_47222,47222,Intérêts courus,lu_2011_account_4722,other,account_type_2011_4_dette,f, -lu_2011_account_4723,4723,"Dettes envers administrateurs, gérants et commissaires",lu_2011_account_472,other,account_type_2011_4_dette,f, -lu_2011_account_4724,4724,Dettes envers le personnel,lu_2011_account_472,view,account_type_2011_4_dette,f, -lu_2011_account_47241,47241,Personnel – Rémunérations dues,lu_2011_account_4724,other,account_type_2011_4_dette,f, -lu_2011_account_47242,47242,Personnel – Dépôts,lu_2011_account_4724,other,account_type_2011_4_dette,f, -lu_2011_account_47243,47243,"Personnel – Oppositions, saisies",lu_2011_account_4724,other,account_type_2011_4_dette,f, -lu_2011_account_47248,47248,Personnel – Autres,lu_2011_account_4724,other,account_type_2011_4_dette,f, -lu_2011_account_4726,4726,Etat – Droits d’émission à restituer,lu_2011_account_472,other,account_type_2011_4_dette,f, -lu_2011_account_4728,4728,Autres dettes diverses,lu_2011_account_472,other,account_type_2011_4_dette,f, -lu_2011_account_48,48,Comptes de régularisation,lu_2011_account_4,view,account.data_account_type_view,f, -lu_2011_account_481,481,Charges à reporter,lu_2011_account_48,other,account_type_2011_4_regul_actif,f,account_financial_report_65 -lu_2011_account_482,482,Produits à reporter,lu_2011_account_48,other,account_type_2011_4_regul_passif,f,account_financial_report_118 -lu_2011_account_483,483,Etat – droits d’émission alloués,lu_2011_account_48,other,account_type_2011_4_regul_passif,f,account_financial_report_118 -lu_2011_account_484,484,Comptes transitoires ou d’attente – Actif,lu_2011_account_48,other,account_type_2011_4_regul_actif,f,account_financial_report_65 -lu_2011_account_485,485,Comptes transitoires ou d’attente – Passif,lu_2011_account_48,other,account_type_2011_4_regul_passif,f,account_financial_report_118 -lu_2011_account_486,486,Comptes de liaison – Actif,lu_2011_account_48,other,account_type_2011_4_regul_actif,f,account_financial_report_65 -lu_2011_account_487,487,Comptes de liaison – Passif,lu_2011_account_48,other,account_type_2011_4_regul_passif,f,account_financial_report_118 -lu_2011_account_5,5,CLASSE 5 - COMPTES FINANCIERS,lu_2011_account_bilan,view,account.data_account_type_view,f, -lu_2011_account_50,50,Valeurs mobilières,lu_2011_account_5,view,account_type_2011_5_disponibilite,f, -lu_2011_account_501,501,Parts dans des entreprises liées,lu_2011_account_50,other,account_type_2011_5_disponibilite,f,account_financial_report_61 -lu_2011_account_502,502,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_50,other,account_type_2011_5_disponibilite,f,account_financial_report_61 -lu_2011_account_503,503,Actions propres ou parts propres,lu_2011_account_50,other,account_type_2011_5_disponibilite,f,account_financial_report_62 -lu_2011_account_508,508,Autres valeurs mobilières,lu_2011_account_50,view,account_type_2011_5_disponibilite,f,account_financial_report_63 -lu_2011_account_5081,5081,Actions – Titres cotés,lu_2011_account_508,other,account_type_2011_5_disponibilite,f, -lu_2011_account_5082,5082,Actions – Titres non cotés,lu_2011_account_508,other,account_type_2011_5_disponibilite,f, -lu_2011_account_5083,5083,Obligations et autres titres de créance émis par la société et rachetés par elle,lu_2011_account_508,other,account_type_2011_5_disponibilite,f, -lu_2011_account_5084,5084,Obligations – Titres cotés,lu_2011_account_508,other,account_type_2011_5_disponibilite,f, -lu_2011_account_5085,5085,Obligations – Titres non cotés,lu_2011_account_508,other,account_type_2011_5_disponibilite,f, -lu_2011_account_5088,5088,Autres valeurs mobilières diverses,lu_2011_account_508,other,account_type_2011_5_disponibilite,f, -lu_2011_account_51,51,"Avoirs en banques, avoirs en comptes de chèques postaux, chèques et encaisse",lu_2011_account_5,view,account_type_2011_5_disponibilite,f,account_financial_report_64 -lu_2011_account_511,511,Chèques à encaisser,lu_2011_account_51,other,account_type_2011_5_disponibilite,f, -lu_2011_account_512,512,Valeurs à l’encaissement,lu_2011_account_51,other,account_type_2011_5_disponibilite,f, -lu_2011_account_513,513,Banques,lu_2011_account_51,view,account_type_2011_5_disponibilite,f, -lu_2011_account_5131,5131,Banques comptes courants,lu_2011_account_513,view,account_type_2011_5_disponibilite,f, -lu_2011_account_5132,5132,Banques comptes à terme,lu_2011_account_513,view,account_type_2011_5_disponibilite,f, -lu_2011_account_514,514,Compte chèque postal,lu_2011_account_51,other,account_type_2011_5_disponibilite,f, -lu_2011_account_516,516,Caisse,lu_2011_account_51,other,account_type_2011_5_disponibilite,f, -lu_2011_account_517,517,Virements internes,lu_2011_account_51,other,account_type_2011_5_disponibilite,t, -lu_2011_account_518,518,Autres avoirs,lu_2011_account_51,other,account_type_2011_5_disponibilite,f, -lu_2011_account_resultat,resultat,COMPTES DE PERTES ET PROFITS,lu_2011_account_0,view,account.data_account_type_view,,"account_financial_report_77,account_financial_report_161" -lu_2011_account_6,6,CLASSE 6 - COMPTES DE CHARGES,lu_2011_account_resultat,view,account.data_account_type_view,f, -lu_2011_account_60,60,Consommation de marchandises et de matières premières et consommables,lu_2011_account_6,view,account_type_2011_6_charge_exploitation,f,account_financial_report_120 -lu_2011_account_601,601,Matières premières,lu_2011_account_60,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_602,602,Matières consommables,lu_2011_account_60,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_603,603,Fournitures consommables,lu_2011_account_60,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6031,6031,Combustibles,lu_2011_account_603,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_60311,60311,Solides,lu_2011_account_6031,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_60312,60312,Liquides,lu_2011_account_6031,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_60313,60313,Gaz comprimé,lu_2011_account_6031,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6032,6032,Produits d’entretien,lu_2011_account_603,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6033,6033,Fournitures d’atelier et d’usine,lu_2011_account_603,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6034,6034,Fournitures de magasin,lu_2011_account_603,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6035,6035,Fournitures de bureau,lu_2011_account_603,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6036,6036,Carburants,lu_2011_account_603,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6037,6037,Lubrifiants,lu_2011_account_603,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6038,6038,Autres fournitures consommables,lu_2011_account_603,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_604,604,Emballages,lu_2011_account_60,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6041,6041,Emballages non récupérables,lu_2011_account_604,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6042,6042,Emballages récupérables,lu_2011_account_604,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6043,6043,Emballages à usage mixte,lu_2011_account_604,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_605,605,Approvisionnements,lu_2011_account_60,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_606,606,Achats de biens destinés à la revente,lu_2011_account_60,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6061,6061,Terrains,lu_2011_account_606,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6062,6062,Immeubles,lu_2011_account_606,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6063,6063,Marchandises,lu_2011_account_606,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_607,607,Variation des stocks,lu_2011_account_60,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6071,6071,Variation des stocks de matières premières,lu_2011_account_607,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6072,6072,Variation des stocks de matières consommables,lu_2011_account_607,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6073,6073,Variation des stocks de fournitures consommables,lu_2011_account_607,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6074,6074,Variation des stocks d’emballages,lu_2011_account_607,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6075,6075,Variation des stocks d’approvisionnements,lu_2011_account_607,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6076,6076,Variation des stocks de biens destinés à la revente,lu_2011_account_607,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_608,608,Achats non stockés et achats incorporés aux ouvrages et produits,lu_2011_account_60,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6081,6081,Achats non stockés de matières et fournitures,lu_2011_account_608,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_60811,60811,Fournitures non stockables,lu_2011_account_6081,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_608111,608111,Eau,lu_2011_account_60811,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_608112,608112,Electricité,lu_2011_account_60811,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_608113,608113,Gaz de canalisation,lu_2011_account_60811,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_60812,60812,Fournitures d’entretien et de petit équipement,lu_2011_account_6081,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_60813,60813,Fournitures administratives,lu_2011_account_6081,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_60814,60814,Carburants,lu_2011_account_6081,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_60815,60815,Lubrifiants,lu_2011_account_6081,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_60816,60816,Vêtements professionnels,lu_2011_account_6081,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_60818,60818,Autres matières et fournitures non stockées,lu_2011_account_6081,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6082,6082,Achats incorporés aux ouvrages et produits,lu_2011_account_608,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_60821,60821,Achats d’études et prestations de service (incorporés aux ouvrages et produits),lu_2011_account_6082,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_608211,608211,Travail à façon,lu_2011_account_60821,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_608212,608212,Recherche et développement,lu_2011_account_60821,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_608213,608213,Frais d’architectes et d’ingénieurs,lu_2011_account_60821,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_60822,60822,"Achats de matériel, équipements, pièces détachées et travaux (incorporés aux ouvrages et produits)",lu_2011_account_6082,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_60828,60828,Autres achats d’études et de prestations de service,lu_2011_account_6082,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_609,609," Rabais, remises et ristournes obtenus",lu_2011_account_60,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6091,6091, Matières premières,lu_2011_account_609,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6092,6092, Matières consommables,lu_2011_account_609,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6093,6093, Fournitures consommables,lu_2011_account_609,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6094,6094, Emballages,lu_2011_account_609,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6095,6095, Approvisionnements,lu_2011_account_609,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6096,6096, Achats de biens destinés à la revente,lu_2011_account_609,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6098,6098, Achats non stockés et achats incorporés aux ouvrages et produits,lu_2011_account_609,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6099,6099," Rabais, remises et ristournes non affectés",lu_2011_account_609,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61,61,Autres charges externes,lu_2011_account_6,view,account_type_2011_6_charge_exploitation,f,account_financial_report_121 -lu_2011_account_611,611,Loyers et charges locatives,lu_2011_account_61,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6111,6111,Locations immobilières,lu_2011_account_611,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61111,61111,Terrains,lu_2011_account_6111,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61112,61112,Bâtiments,lu_2011_account_6111,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6112,6112,Locations mobilières,lu_2011_account_611,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61121,61121,Installations techniques et machines,lu_2011_account_6112,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61122,61122,"Autres installations, outillages et machines",lu_2011_account_6112,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61123,61123,Matériel roulant,lu_2011_account_6112,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6113,6113,Charges locatives et de copropriété,lu_2011_account_611,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6114,6114,Leasing immobilier,lu_2011_account_611,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61141,61141,Terrains,lu_2011_account_6114,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61142,61142,Bâtiments,lu_2011_account_6114,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6115,6115,Leasing mobilier,lu_2011_account_611,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61151,61151,Installations techniques et machines,lu_2011_account_6115,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61152,61152,"Autres installations, outillages et machines",lu_2011_account_6115,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61153,61153,Matériel roulant,lu_2011_account_6115,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6116,6116,Malis sur emballages,lu_2011_account_611,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_612,612,"Sous-traitance, entretiens et réparations",lu_2011_account_61,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6121,6121,"Sous-traitance générale (non incorporée directement aux ouvrages, travaux et produits)",lu_2011_account_612,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6122,6122,Entretien et réparations,lu_2011_account_612,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61221,61221,Sur installations techniques et machines,lu_2011_account_6122,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61222,61222,"Sur autres installations, outillages et machines",lu_2011_account_6122,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61223,61223,Sur matériel roulant,lu_2011_account_6122,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6123,6123,Contrats de maintenance,lu_2011_account_612,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6124,6124,Etudes et recherches (non incorporées dans les produits),lu_2011_account_612,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_613,613,Rémunérations d’intermédiaires et honoraires,lu_2011_account_61,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6131,6131,Commissions et courtages,lu_2011_account_613,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61311,61311,Commissions et courtages sur achats,lu_2011_account_6131,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61312,61312,Commissions et courtages sur ventes,lu_2011_account_6131,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61313,61313,Rémunérations des transitaires,lu_2011_account_6131,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6132,6132,Traitement informatique,lu_2011_account_613,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6133,6133,Services bancaires et assimilés,lu_2011_account_613,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61331,61331,"Frais sur titres (achat, vente, garde)",lu_2011_account_6133,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61332,61332,Commissions et frais sur émission d’emprunts,lu_2011_account_6133,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61333,61333,Frais de compte,lu_2011_account_6133,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61334,61334,Frais sur cartes de crédit,lu_2011_account_6133,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61335,61335,Frais sur effets,lu_2011_account_6133,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61336,61336,Rémunérations d’affacturage,lu_2011_account_6133,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61337,61337,Location de coffres,lu_2011_account_6133,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61338,61338,Autres frais et commissions bancaires (hors intérêts et frais assimilés),lu_2011_account_6133,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6134,6134,Honoraires,lu_2011_account_613,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61341,61341,Honoraires juridiques,lu_2011_account_6134,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61342,61342,Honoraires comptables et d’audit,lu_2011_account_6134,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61343,61343,Honoraires fiscaux,lu_2011_account_6134,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61348,61348,Autres honoraires,lu_2011_account_6134,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6135,6135,Frais d’actes et de contentieux,lu_2011_account_613,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6136,6136,Frais de recrutement de personnel,lu_2011_account_613,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6138,6138,Autres rémunérations d’intermédiaires et honoraires,lu_2011_account_613,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_614,614,Primes d’assurance,lu_2011_account_61,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6141,6141,Assurances sur biens de l’actif,lu_2011_account_614,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61411,61411,Bâtiments,lu_2011_account_6141,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61412,61412,Véhicules,lu_2011_account_6141,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61413,61413,Installations,lu_2011_account_6141,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61418,61418,Sur autres biens de l’actif,lu_2011_account_6141,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6142,6142,Assurances sur biens pris en location,lu_2011_account_614,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6143,6143,Assurance-transport,lu_2011_account_614,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61431,61431,Sur achats,lu_2011_account_6143,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61432,61432,Sur ventes,lu_2011_account_6143,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61438,61438,Sur autres biens,lu_2011_account_6143,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6144,6144,Assurance risque d’exploitation,lu_2011_account_614,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6145,6145,Assurance insolvabilité clients,lu_2011_account_614,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6146,6146,Assurance responsabilité civile,lu_2011_account_614,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6148,6148,Autres assurances,lu_2011_account_614,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_615,615,Frais de marketing et de communication,lu_2011_account_61,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6151,6151,Frais de marketing et de publicité,lu_2011_account_615,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61511,61511,Annonces et insertions,lu_2011_account_6151,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61512,61512,Echantillons,lu_2011_account_6151,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61513,61513,Foires et expositions,lu_2011_account_6151,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61514,61514,Cadeaux à la clientèle,lu_2011_account_6151,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61515,61515,Catalogues et imprimés et publications,lu_2011_account_6151,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61516,61516,Dons courants,lu_2011_account_6151,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61517,61517,Sponsoring,lu_2011_account_6151,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61518,61518,Autres achats de services publicitaires,lu_2011_account_6151,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6152,6152,Frais de déplacements et de représentation,lu_2011_account_615,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61521,61521,Voyages et déplacements,lu_2011_account_6152,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_615211,615211,Direction (respectivement exploitant et associés),lu_2011_account_61521,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_615212,615212,Personnel,lu_2011_account_61521,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61522,61522,Frais de déménagement de l’entreprise,lu_2011_account_6152,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61523,61523,Missions,lu_2011_account_6152,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61524,61524,Réceptions et frais de représentation,lu_2011_account_6152,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6153,6153,Frais postaux et frais de télécommunications,lu_2011_account_615,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61531,61531,Timbres,lu_2011_account_6153,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61532,61532,Téléphone et autres frais de télécommunication,lu_2011_account_6153,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61538,61538,"Autres frais postaux (location de boîtes postales, etc.)",lu_2011_account_6153,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_616,616, Transports de biens et transports collectifs du personnel,lu_2011_account_61,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6161,6161,Transports sur achats,lu_2011_account_616,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6162,6162,Transports sur ventes,lu_2011_account_616,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6163,6163,Transports entre établissements ou chantiers,lu_2011_account_616,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6164,6164,Transports administratifs,lu_2011_account_616,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6165,6165,Transports collectifs du personnel,lu_2011_account_616,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6168,6168,Autres transports,lu_2011_account_616,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_617,617, Personnel extérieur à l’entreprise,lu_2011_account_61,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6171,6171,Personnel intérimaire,lu_2011_account_617,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6172,6172,Personnel prêté à l’entreprise,lu_2011_account_617,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_618,618, Charges externes diverses,lu_2011_account_61,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6181,6181,Documentation,lu_2011_account_618,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61811,61811,Documentation générale,lu_2011_account_6181,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_61812,61812,Documentation technique,lu_2011_account_6181,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6182,6182,"Frais de colloques, séminaires, conférences",lu_2011_account_618,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6183,6183,Elimination des déchets industriels,lu_2011_account_618,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6184,6184,Elimination de déchets non industriels,lu_2011_account_618,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6185,6185,Evacuation des eaux usées,lu_2011_account_618,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6186,6186,Frais de surveillance,lu_2011_account_618,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6187,6187,Cotisations aux associations professionnelles,lu_2011_account_618,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6188,6188,Autres charges externes diverses,lu_2011_account_618,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_619,619," Rabais, remises et ristournes obtenus sur autres charges externes",lu_2011_account_61,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_62,62,Frais de personnel,lu_2011_account_6,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_621,621,Rémunérations des salariés,lu_2011_account_62,view,account_type_2011_6_charge_exploitation,f,account_financial_report_123 -lu_2011_account_6211,6211,Salaires bruts,lu_2011_account_621,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_62111,62111,Salaires de base,lu_2011_account_6211,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_62112,62112,Suppléments pour travail,lu_2011_account_6211,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_621121,621121,Dimanche,lu_2011_account_62112,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_621122,621122,Jours fériés légaux,lu_2011_account_62112,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_621123,621123,Heures supplémentaires,lu_2011_account_62112,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_621128,621128,Autres suppléments,lu_2011_account_62112,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_62113,62113,Primes de ménage,lu_2011_account_6211,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_62114,62114,"Gratifications, primes et commissions",lu_2011_account_6211,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_62115,62115,Avantages en nature (leasing),lu_2011_account_6211,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_62116,62116,Indemnités de licenciement,lu_2011_account_6211,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_62117,62117,Trimestre de faveur,lu_2011_account_6211,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6218,6218,Autres avantages (font social),lu_2011_account_621,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6219,6219,Remboursements sur salaires,lu_2011_account_621,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_62191,62191,Remboursements mutualité,lu_2011_account_6219,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_62192,62192,"Remboursements pour congé politique, sportif, culturel, éducatif et mandats sociaux",lu_2011_account_6219,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_62193,62193,Remboursements trimestre de faveur,lu_2011_account_6219,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_622,622,Autre personnel,lu_2011_account_62,view,account_type_2011_6_charge_exploitation,f,account_financial_report_123 -lu_2011_account_6221,6221,Etudiants,lu_2011_account_622,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6222,6222,Salaires occasionnels,lu_2011_account_622,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6228,6228,Autre personnel temporaire,lu_2011_account_622,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_623,623,Charges sociales (part patronale),lu_2011_account_62,view,account_type_2011_6_charge_exploitation,f,account_financial_report_124 -lu_2011_account_6231,6231,Charges sociales salariés,lu_2011_account_623,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_62311,62311,Caisse Nationale de Santé,lu_2011_account_6231,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_62312,62312,Caisse Nationale d’Assurance-Pension,lu_2011_account_6231,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_62318,62318,Cotisations patronales complémentaires,lu_2011_account_6231,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6232,6232,Assurance accidents du travail,lu_2011_account_623,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6233,6233,Service de santé au travail,lu_2011_account_623,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6238,6238,Autres charges sociales patronales,lu_2011_account_623,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6239,6239,Remboursements de charges sociales,lu_2011_account_623,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_624,624,Pensions complémentaires,lu_2011_account_62,view,account_type_2011_6_charge_exploitation,f,account_financial_report_125 -lu_2011_account_6241,6241,Primes à des fonds de pensions extérieurs,lu_2011_account_624,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6242,6242,Dotation aux provisions pour pensions complémentaires,lu_2011_account_624,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6243,6243,Retenue d’impôt sur pension complémentaire,lu_2011_account_624,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6244,6244,Prime d’assurance insolvabilité,lu_2011_account_624,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6245,6245,Pensions complémentaires versées par l’employeur,lu_2011_account_624,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_628,628,Autres charges sociales,lu_2011_account_62,view,account_type_2011_6_charge_exploitation,f,account_financial_report_126 -lu_2011_account_6281,6281,Médecine du travail,lu_2011_account_628,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6288,6288,Autres charges sociales diverses,lu_2011_account_628,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_63,63,Dotations aux corrections de valeur des éléments d’actif non financiers,lu_2011_account_6,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_631,631,Dotations aux corrections de valeur sur frais d’établissement et frais assimilés,lu_2011_account_63,view,account_type_2011_6_charge_exploitation,f,account_financial_report_128 -lu_2011_account_6311,6311,Frais de constitution,lu_2011_account_631,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6312,6312,Frais de premier établissement,lu_2011_account_631,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6313,6313,Frais d’augmentation de capital et d’opérations diverses,lu_2011_account_631,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6314,6314,Frais d’émission d’emprunts,lu_2011_account_631,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6318,6318,Autres frais assimilés,lu_2011_account_631,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_632,632,Dotations aux corrections de valeur sur immobilisations incorporelles,lu_2011_account_63,view,account_type_2011_6_charge_exploitation,f,account_financial_report_128 -lu_2011_account_6321,6321,Frais de recherche et de développement,lu_2011_account_632,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6322,6322,"Concessions, brevets, licences, marques ainsi que droits et valeurs similaires",lu_2011_account_632,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6323,6323,Fonds de commerce dans la mesure où il a été acquis à titre onéreux,lu_2011_account_632,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6324,6324,Acomptes versés et immobilisations incorporelles en cours,lu_2011_account_632,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_633,633,Dotations aux corrections de valeur sur immobilisations corporelles,lu_2011_account_63,view,account_type_2011_6_charge_exploitation,f,account_financial_report_128 -lu_2011_account_6331,6331,Terrains et constructions,lu_2011_account_633,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_63311,63311,Terrains,lu_2011_account_6331,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_63312,63312,Agencements et aménagements de terrains,lu_2011_account_6331,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_63313,63313,Constructions,lu_2011_account_6331,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6332,6332,Installations techniques et machines,lu_2011_account_633,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6333,6333,"Autres installations, outillage, mobilier et matériel roulant",lu_2011_account_633,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6334,6334,Acomptes versés et immobilisations corporelles en cours,lu_2011_account_633,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_634,634,Dotations aux corrections de valeur sur stocks,lu_2011_account_63,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6341,6341,Matières premières et consommables,lu_2011_account_634,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6342,6342,Produits en cours de fabrication et commandes en cours,lu_2011_account_634,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6343,6343,Produits finis et marchandises,lu_2011_account_634,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6344,6344,Terrains et immeubles destinés à la revente,lu_2011_account_634,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6345,6345,Acomptes versés,lu_2011_account_634,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_635,635,Dotations aux corrections de valeur sur créances de l’actif circulant,lu_2011_account_63,view,account_type_2011_6_charge_exploitation,f,account_financial_report_129 -lu_2011_account_6351,6351,Créances résultant de ventes et prestations de services,lu_2011_account_635,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6352,6352,Créances sur des entreprises liées et des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_635,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6353,6353,Autres créances,lu_2011_account_635,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_64,64,Autres charges d’exploitation,lu_2011_account_6,view,account_type_2011_6_charge_exploitation,f,account_financial_report_130 -lu_2011_account_641,641,"Redevances pour concessions, brevets, licences, marques, droits et valeurs similaires",lu_2011_account_64,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6411,6411,Concessions,lu_2011_account_641,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6412,6412,Brevets,lu_2011_account_641,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6413,6413,Licences informatiques,lu_2011_account_641,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6414,6414,Marques et franchises,lu_2011_account_641,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6415,6415,Droits et valeurs similaires,lu_2011_account_641,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_64151,64151,Droits d’auteur et de reproduction,lu_2011_account_6415,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_64158,64158,Autres droits et valeurs similaires,lu_2011_account_6415,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_642,642,Indemnités,lu_2011_account_64,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_643,643,Jetons de présence,lu_2011_account_64,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_644,644,Tantièmes,lu_2011_account_64,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_645,645,Pertes sur créances irrécouvrables,lu_2011_account_64,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6451,6451,Créances résultant de ventes et de prestations de services,lu_2011_account_645,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6452,6452,Créances sur des entreprises liées et sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_645,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6453,6453,Autres créances,lu_2011_account_645,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_646,646,"Impôts, taxes et versements assimilés",lu_2011_account_64,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6461,6461,Impôt foncier,lu_2011_account_646,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6462,6462,TVA non déductible,lu_2011_account_646,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6463,6463,Droits sur les marchandises en provenance de l’étranger,lu_2011_account_646,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_64631,64631,Droits d’accises et taxe de consommation sur marchandises en provenance de l’étranger,lu_2011_account_6463,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_64632,64632,Droits de douane,lu_2011_account_6463,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_64633,64633,Montants compensatoires,lu_2011_account_6463,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6464,6464,Droits d’accises à la production et taxe de consommation,lu_2011_account_646,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6465,6465,"Droits d’enregistrement et de timbre, droits d’hypothèques",lu_2011_account_646,view,account_type_2011_6_charge_exploitation,f, -lu_2011_account_64651,64651,Droits d’enregistrement,lu_2011_account_6465,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_64652,64652,Taxe d’abonnement,lu_2011_account_6465,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_64653,64653,Droits d’hypothèques,lu_2011_account_6465,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_64654,64654,Droits de timbre,lu_2011_account_6465,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_64658,64658,"Autres droits d’enregistrement et de timbre, droits d’hypothèques",lu_2011_account_6465,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6466,6466,Taxes sur les véhicules,lu_2011_account_646,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6467,6467,Taxe de cabaretage,lu_2011_account_646,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6468,6468,Autres droits et impôts,lu_2011_account_646,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_6469,6469,Dotations aux provisions pour impôts,lu_2011_account_646,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_647,647,Dotations aux plus-values immunisées,lu_2011_account_64,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_648,648,Autres charges d’exploitation diverses,lu_2011_account_64,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_649,649,Dotations aux provisions d’exploitation,lu_2011_account_64,other,account_type_2011_6_charge_exploitation,f, -lu_2011_account_65,65,Charges financières,lu_2011_account_6,view,account_type_2011_6_charge_finance,f, -lu_2011_account_651,651,Dotations aux corrections de valeur et ajustements pour juste valeur sur immobilisations financières,lu_2011_account_65,view,account_type_2011_6_charge_finance,f,account_financial_report_131 -lu_2011_account_6511,6511,Dotations aux corrections de valeur sur immobilisations financières,lu_2011_account_651,view,account_type_2011_6_charge_finance,f, -lu_2011_account_65111,65111,Parts dans des entreprises liées,lu_2011_account_6511,other,account_type_2011_6_charge_finance,f, -lu_2011_account_65112,65112,Créances sur des entreprises liées,lu_2011_account_6511,other,account_type_2011_6_charge_finance,f, -lu_2011_account_65113,65113,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_6511,other,account_type_2011_6_charge_finance,f, -lu_2011_account_65114,65114,Créances sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_6511,other,account_type_2011_6_charge_finance,f, -lu_2011_account_65115,65115,Titres ayant le caractère d’immobilisations,lu_2011_account_6511,other,account_type_2011_6_charge_finance,f, -lu_2011_account_65116,65116,Prêts et créances immobilisées,lu_2011_account_6511,other,account_type_2011_6_charge_finance,f, -lu_2011_account_65117,65117,Actions propres ou parts propres,lu_2011_account_6511,other,account_type_2011_6_charge_finance,f, -lu_2011_account_6512,6512,Ajustements pour juste valeur sur immobilisations financières,lu_2011_account_651,other,account_type_2011_6_charge_finance,f, -lu_2011_account_653,653,Dotations aux corrections de valeur et ajustements pour juste valeur sur éléments financiers de l’actif circulant,lu_2011_account_65,view,account_type_2011_6_charge_finance,f,account_financial_report_132 -lu_2011_account_6531,6531,Dotations aux corrections de valeur sur valeurs mobilières,lu_2011_account_653,view,account_type_2011_6_charge_finance,f, -lu_2011_account_65311,65311,Parts dans des entreprises liées,lu_2011_account_6531,other,account_type_2011_6_charge_finance,f, -lu_2011_account_65312,65312,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_6531,other,account_type_2011_6_charge_finance,f, -lu_2011_account_65313,65313,Actions propres ou parts propres,lu_2011_account_6531,other,account_type_2011_6_charge_finance,f, -lu_2011_account_65318,65318,Autres valeurs mobilières,lu_2011_account_6531,other,account_type_2011_6_charge_finance,f, -lu_2011_account_6532,6532,Dotations aux corrections de valeur sur créances sur des entreprises liées et sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_653,other,account_type_2011_6_charge_finance,f, -lu_2011_account_6533,6533,Dotations aux corrections de valeur sur autres créances,lu_2011_account_653,other,account_type_2011_6_charge_finance,f, -lu_2011_account_6534,6534,Ajustements pour juste valeur sur éléments financiers de l’actif circulant,lu_2011_account_653,other,account_type_2011_6_charge_finance,f, -lu_2011_account_654,654,Moins-values de cession de valeurs mobilières,lu_2011_account_65,view,account_type_2011_6_charge_finance,f,account_financial_report_135 -lu_2011_account_6541,6541,Parts dans des entreprises liées,lu_2011_account_654,other,account_type_2011_6_charge_finance,f, -lu_2011_account_6542,6542,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_654,other,account_type_2011_6_charge_finance,f, -lu_2011_account_6543,6543,Actions propres ou parts propres,lu_2011_account_654,other,account_type_2011_6_charge_finance,f, -lu_2011_account_6548,6548,Autres valeurs mobilières,lu_2011_account_654,other,account_type_2011_6_charge_finance,f, -lu_2011_account_655,655,Intérêts et escomptes,lu_2011_account_65,view,account_type_2011_6_charge_finance,f,account_financial_report_135 -lu_2011_account_6551,6551,Intérêts des dettes financières,lu_2011_account_655,view,account_type_2011_6_charge_finance,f, -lu_2011_account_65511,65511,Intérêts des dettes subordonnées,lu_2011_account_6551,other,account_type_2011_6_charge_finance,f, -lu_2011_account_65512,65512,Intérêts des emprunts obligataires,lu_2011_account_6551,other,account_type_2011_6_charge_finance,f, -lu_2011_account_6552,6552,Intérêts bancaires et assimilés,lu_2011_account_655,view,account_type_2011_6_charge_finance,f, -lu_2011_account_65521,65521,Intérêts bancaires sur comptes courants,lu_2011_account_6552,other,account_type_2011_6_charge_finance,f, -lu_2011_account_65522,65522,Intérêts bancaires sur opérations de financement,lu_2011_account_6552,other,account_type_2011_6_charge_finance,f, -lu_2011_account_65523,65523,Intérêts sur leasings financiers,lu_2011_account_6552,other,account_type_2011_6_charge_finance,f, -lu_2011_account_6553,6553,Intérêts sur dettes commerciales,lu_2011_account_655,other,account_type_2011_6_charge_finance,f, -lu_2011_account_6554,6554,Intérêts sur des entreprises liées et sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_655,other,account_type_2011_6_charge_finance,f,account_financial_report_134 -lu_2011_account_6555,6555,Escomptes et frais sur effets,lu_2011_account_655,other,account_type_2011_6_charge_finance,f, -lu_2011_account_6556,6556,Escomptes accordés,lu_2011_account_655,other,account_type_2011_6_charge_finance,f, -lu_2011_account_6558,6558,Intérêts sur autres emprunts et dettes,lu_2011_account_655,other,account_type_2011_6_charge_finance,f,account_financial_report_135 -lu_2011_account_656,656,Pertes de change,lu_2011_account_65,other,account_type_2011_6_charge_finance,f,account_financial_report_135 -lu_2011_account_657,657,Quote-part de perte dans les entreprises collectives (autres que les sociétés de capitaux),lu_2011_account_65,other,account_type_2011_6_charge_finance,f,account_financial_report_135 -lu_2011_account_658,658,Autres charges financières (différence et frais de paiement (-)),lu_2011_account_65,other,account_type_2011_6_charge_finance,f,account_financial_report_135 -lu_2011_account_659,659,Dotations aux provisions financières,lu_2011_account_65,other,account_type_2011_6_charge_finance,f,account_financial_report_135 -lu_2011_account_66,66,Charges exceptionnelles,lu_2011_account_6,view,account_type_2011_6_charge_exception,f,account_financial_report_136 -lu_2011_account_661,661,Dotations aux corrections de valeur exceptionnelles sur immobilisations incorporelles et corporelles,lu_2011_account_66,view,account_type_2011_6_charge_exception,f, -lu_2011_account_6611,6611,sur immobilisations incorporelles,lu_2011_account_661,other,account_type_2011_6_charge_exception,f, -lu_2011_account_6612,6612,sur immobilisations corporelles,lu_2011_account_661,other,account_type_2011_6_charge_exception,f, -lu_2011_account_662,662,Dotations aux corrections de valeur exceptionnelles sur éléments de l’actif circulant,lu_2011_account_66,view,account_type_2011_6_charge_exception,f, -lu_2011_account_6621,6621,sur stocks,lu_2011_account_662,other,account_type_2011_6_charge_exception,f, -lu_2011_account_6622,6622,sur créances,lu_2011_account_662,other,account_type_2011_6_charge_exception,f, -lu_2011_account_663,663,Valeur comptable des immobilisations incorporelles et corporelles cédées,lu_2011_account_66,view,account_type_2011_6_charge_exception,f, -lu_2011_account_6631,6631,Immobilisations incorporelles,lu_2011_account_663,other,account_type_2011_6_charge_exception,f, -lu_2011_account_6632,6632,Immobilisations corporelles,lu_2011_account_663,other,account_type_2011_6_charge_exception,f, -lu_2011_account_664,664,Valeur comptable des immobilisations financières cédées,lu_2011_account_66,view,account_type_2011_6_charge_exception,f, -lu_2011_account_6641,6641,Parts dans des entreprises liées,lu_2011_account_664,other,account_type_2011_6_charge_exception,f, -lu_2011_account_6642,6642,Créances sur des entreprises liées,lu_2011_account_664,other,account_type_2011_6_charge_exception,f, -lu_2011_account_6643,6643,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_664,other,account_type_2011_6_charge_exception,f, -lu_2011_account_6644,6644,Créances sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_664,other,account_type_2011_6_charge_exception,f, -lu_2011_account_6645,6645,Titres ayant le caractère d’immobilisations,lu_2011_account_664,other,account_type_2011_6_charge_exception,f, -lu_2011_account_6646,6646,Prêts et créances immobilisées,lu_2011_account_664,other,account_type_2011_6_charge_exception,f, -lu_2011_account_6647,6647,Actions propres ou parts propres,lu_2011_account_664,other,account_type_2011_6_charge_exception,f, -lu_2011_account_665,665,Valeur comptable des créances de l’actif circulant financier cédées,lu_2011_account_66,view,account_type_2011_6_charge_exception,f, -lu_2011_account_6651,6651,Sur des entreprises liées et sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_665,other,account_type_2011_6_charge_exception,f, -lu_2011_account_6652,6652,Sur autres créances,lu_2011_account_665,other,account_type_2011_6_charge_exception,f, -lu_2011_account_668,668,Autres charges exceptionnelles,lu_2011_account_66,view,account_type_2011_6_charge_exception,f, -lu_2011_account_6681,6681,Pénalités sur marchés et dédits payés sur achats et ventes,lu_2011_account_668,other,account_type_2011_6_charge_exception,f, -lu_2011_account_6682,6682,"Amendes et pénalités fiscales, sociales et pénales",lu_2011_account_668,other,account_type_2011_6_charge_exception,f, -lu_2011_account_6683,6683,Dommages et intérêts,lu_2011_account_668,other,account_type_2011_6_charge_exception,f, -lu_2011_account_6684,6684,Malis provenant de clauses d’indexation,lu_2011_account_668,other,account_type_2011_6_charge_exception,f, -lu_2011_account_6688,6688,Autres charges exceptionnelles diverses,lu_2011_account_668,other,account_type_2011_6_charge_exception,f, -lu_2011_account_669,669,Dotations aux provisions exceptionnelles,lu_2011_account_66,other,account_type_2011_6_charge_exception,f, -lu_2011_account_67,67,Impôts sur le résultat,lu_2011_account_6,view,account_type_2011_6_charge_impot,f,account_financial_report_137 -lu_2011_account_671,671,Impôt sur le revenu des collectivités,lu_2011_account_67,view,account_type_2011_6_charge_impot,f, -lu_2011_account_6711,6711,Exercice courant,lu_2011_account_671,other,account_type_2011_6_charge_impot,f, -lu_2011_account_6712,6712,Exercices antérieurs,lu_2011_account_671,other,account_type_2011_6_charge_impot,f, -lu_2011_account_672,672,Impôt commercial,lu_2011_account_67,view,account_type_2011_6_charge_impot,f, -lu_2011_account_6721,6721,Exercice courant,lu_2011_account_672,other,account_type_2011_6_charge_impot,f, -lu_2011_account_6722,6722,Exercices antérieurs,lu_2011_account_672,other,account_type_2011_6_charge_impot,f, -lu_2011_account_673,673,Impôts étrangers sur le résultat,lu_2011_account_67,view,account_type_2011_6_charge_impot,f, -lu_2011_account_6731,6731,Retenues d’impôt à la source,lu_2011_account_673,other,account_type_2011_6_charge_impot,f, -lu_2011_account_6732,6732,Impôts supportés par les établissements stables,lu_2011_account_673,view,account_type_2011_6_charge_impot,f, -lu_2011_account_67321,67321,Exercice courant,lu_2011_account_6732,other,account_type_2011_6_charge_impot,f, -lu_2011_account_67322,67322,Exercices antérieurs,lu_2011_account_6732,other,account_type_2011_6_charge_impot,f, -lu_2011_account_6733,6733,Impôts supportés par les entreprises non résidentes,lu_2011_account_673,other,account_type_2011_6_charge_impot,f, -lu_2011_account_6738,6738,Autres impôts étrangers,lu_2011_account_673,other,account_type_2011_6_charge_impot,f, -lu_2011_account_679,679,Dotations aux provisions pour impôts sur le résultat,lu_2011_account_67,view,account_type_2011_6_charge_impot,f, -lu_2011_account_6791,6791,Dotations aux provisions pour impôts,lu_2011_account_679,other,account_type_2011_6_charge_impot,f, -lu_2011_account_6792,6792,Dotations aux provisions pour impôts différés,lu_2011_account_679,other,account_type_2011_6_charge_impot,f, -lu_2011_account_68,68,Autres impôts ne figurant pas sous le poste ci-dessus,lu_2011_account_6,view,account_type_2011_6_charge_impot,f,account_financial_report_138 -lu_2011_account_681,681,Impôt sur la fortune,lu_2011_account_68,view,account_type_2011_6_charge_impot,f, -lu_2011_account_6811,6811,Exercice courant,lu_2011_account_681,other,account_type_2011_6_charge_impot,f, -lu_2011_account_6812,6812,Exercices antérieurs,lu_2011_account_681,other,account_type_2011_6_charge_impot,f, -lu_2011_account_682,682,Taxe d’abonnement,lu_2011_account_68,other,account_type_2011_6_charge_impot,f, -lu_2011_account_683,683,Impôts étrangers,lu_2011_account_68,other,account_type_2011_6_charge_impot,f, -lu_2011_account_688,688,Autres impôts et taxes,lu_2011_account_68,other,account_type_2011_6_charge_impot,f, -lu_2011_account_689,689,Dotations aux provisions pour autres impôts,lu_2011_account_68,other,account_type_2011_6_charge_impot,f, -lu_2011_account_7,7,CLASSE 7 - COMPTES DE PRODUITS,lu_2011_account_resultat,view,account.data_account_type_view,f, -lu_2011_account_70,70,Montant net du chiffre d’affaires,lu_2011_account_7,view,account_type_2011_7_produit_exploitation,f,account_financial_report_141 -lu_2011_account_701,701,Ventes sur commandes en cours,lu_2011_account_70,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7011,7011,Produits,lu_2011_account_701,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7012,7012,Prestations de services,lu_2011_account_701,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7013,7013,Immeubles en construction,lu_2011_account_701,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_702,702,Ventes de produits finis,lu_2011_account_70,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_703,703,Ventes de produits intermédiaires,lu_2011_account_70,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_704,704,Ventes de produits résiduels,lu_2011_account_70,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_705,705,Ventes d’éléments destinés à la revente,lu_2011_account_70,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7051,7051,Ventes de marchandises,lu_2011_account_705,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7052,7052,Ventes de terrains et d’immeubles existants (promotion immobilière),lu_2011_account_705,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7053,7053,Ventes d’autres éléments destinés à la revente,lu_2011_account_705,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_706,706,Prestations de services,lu_2011_account_70,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_708,708,Autres éléments du chiffre d’affaires,lu_2011_account_70,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7081,7081,Commissions et courtages,lu_2011_account_708,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7082,7082,Locations,lu_2011_account_708,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_70821,70821,Loyer immobilier,lu_2011_account_7082,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_70822,70822,Loyer mobilier,lu_2011_account_7082,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7083,7083,Ventes d’emballages,lu_2011_account_708,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7088,7088,Autres éléments divers du chiffre d’affaires,lu_2011_account_708,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_709,709,"Rabais, remises et ristournes accordés par l’entreprise",lu_2011_account_70,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7091,7091,sur ventes sur commandes en cours,lu_2011_account_709,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7092,7092,sur ventes de produits finis,lu_2011_account_709,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7093,7093,sur ventes de produits intermédiaires,lu_2011_account_709,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7094,7094,sur ventes de produits résiduels,lu_2011_account_709,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7095,7095,sur ventes d’éléments destinés à la revente,lu_2011_account_709,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7096,7096,sur prestations de services,lu_2011_account_709,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7098,7098,sur autres éléments du chiffre d’affaires,lu_2011_account_709,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_71,71,"Variation des stocks de produits finis, d’en cours de fabrication et des commandes en cours",lu_2011_account_7,view,account_type_2011_7_produit_exploitation,f,account_financial_report_142 -lu_2011_account_711,711,Variation des stocks de produits en cours de fabrication et de commandes en cours,lu_2011_account_71,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7111,7111,Variation des stocks de produits en cours,lu_2011_account_711,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7112,7112,Variation des stocks de commandes en cours – produits,lu_2011_account_711,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7113,7113,Variation des stocks de commandes en cours – prestations de services,lu_2011_account_711,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7114,7114,Variation des stocks d’immeubles en construction,lu_2011_account_711,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_712,712,Variation des stocks de produits finis et marchandises,lu_2011_account_71,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7121,7121,Variation des stocks de produits finis,lu_2011_account_712,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7122,7122,Variation des stocks de produits intermédiaires,lu_2011_account_712,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7123,7123,Variation des stocks de produits résiduels,lu_2011_account_712,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7126,7126,Variation des stocks de marchandises,lu_2011_account_712,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7127,7127,"Variation des stocks de marchandises en voie d’acheminement, mises en dépôt ou données en consignation",lu_2011_account_712,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_72,72,Production immobilisée,lu_2011_account_7,view,account_type_2011_7_produit_exploitation,f,account_financial_report_143 -lu_2011_account_721,721,Immobilisations incorporelles,lu_2011_account_72,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7211,7211,Frais de recherche et développement,lu_2011_account_721,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7212,7212,"Concessions, brevets, licences, marques, droits et valeurs similaires",lu_2011_account_721,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_72121,72121,Concessions,lu_2011_account_7212,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_72122,72122,Brevets,lu_2011_account_7212,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_72123,72123,Licences informatiques,lu_2011_account_7212,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_72124,72124,Marques et franchises,lu_2011_account_7212,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_72125,72125,Droits et valeurs similaires,lu_2011_account_7212,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_721251,721251,Droits d’auteur et de reproduction,lu_2011_account_72125,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_721258,721258,Autres droits et valeurs similaires,lu_2011_account_72125,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_722,722,Immobilisations corporelles,lu_2011_account_72,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7221,7221,Terrains et constructions,lu_2011_account_722,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7222,7222,Installations techniques et machines,lu_2011_account_722,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7223,7223,"Autres installations, outillage, mobilier et matériel roulant",lu_2011_account_722,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_73,73,Reprises de corrections de valeur des éléments d’actif non financiers,lu_2011_account_7,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_732,732,Reprises de corrections de valeur sur immobilisations incorporelles,lu_2011_account_73,view,account_type_2011_7_produit_exploitation,f,account_financial_report_145 -lu_2011_account_7321,7321,Frais de recherche et de développement,lu_2011_account_732,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7322,7322,"Concessions, brevets, licences, marques ainsi que droits et valeurs similaires",lu_2011_account_732,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7323,7323,Fonds de commerce dans la mesure où il a été acquis à titre onéreux,lu_2011_account_732,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7324,7324,Acomptes versés et immobilisations incorporelles en cours,lu_2011_account_732,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_733,733,Reprises de corrections de valeur sur immobilisations corporelles,lu_2011_account_73,view,account_type_2011_7_produit_exploitation,f,account_financial_report_145 -lu_2011_account_7331,7331,Terrains et constructions,lu_2011_account_733,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_73311,73311,Terrains,lu_2011_account_7331,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_73312,73312,Agencements et aménagements de terrains,lu_2011_account_7331,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_73313,73313,Constructions,lu_2011_account_7331,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_73314,73314,Constructions sur sol d’autrui,lu_2011_account_7331,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7332,7332,Installations techniques et machines,lu_2011_account_733,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7333,7333,"Autres installations, outillage, mobilier et matériel roulant",lu_2011_account_733,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7334,7334,Acomptes versés et immobilisations corporelles en cours,lu_2011_account_733,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_734,734,Reprises de corrections de valeur sur stocks,lu_2011_account_73,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7341,7341,Matières premières et consommables,lu_2011_account_734,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7342,7342,Produits en cours de fabrication et commandes en cours,lu_2011_account_734,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7343,7343,Produits finis et marchandises,lu_2011_account_734,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7344,7344,Terrains et immeubles destinés à la revente,lu_2011_account_734,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7345,7345,Acomptes versés,lu_2011_account_734,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_735,735,Reprises de corrections de valeur sur créances de l’actif circulant,lu_2011_account_73,view,account_type_2011_7_produit_exploitation,f,account_financial_report_146 -lu_2011_account_7351,7351,Créances résultant de ventes et prestations de services,lu_2011_account_735,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7352,7352,Créances sur des entreprises liées et des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_735,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7353,7353,Autres créances,lu_2011_account_735,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_74,74,Autres produits d’exploitation,lu_2011_account_7,view,account_type_2011_7_produit_exploitation,f,account_financial_report_147 -lu_2011_account_741,741,"Redevances pour concessions, brevets, licences, marques, droits et valeurs similaires",lu_2011_account_74,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7411,7411,Concessions,lu_2011_account_741,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7412,7412,Brevets,lu_2011_account_741,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7413,7413,Licences informatiques,lu_2011_account_741,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7414,7414,Marques et franchises,lu_2011_account_741,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7415,7415,Droits et valeurs similaires,lu_2011_account_741,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_74151,74151,Droits d’auteur et de reproduction,lu_2011_account_7415,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_74158,74158,Autres droits et valeurs similaires,lu_2011_account_7415,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_742,742,Revenus des immeubles non affectés aux activités professionnelles,lu_2011_account_74,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_743,743,"Jetons de présence, tantièmes et rémunérations assimilées",lu_2011_account_74,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_744,744,Subventions d’exploitation,lu_2011_account_74,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7441,7441,Subventions sur produits,lu_2011_account_744,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7442,7442,Bonifications d’intérêt,lu_2011_account_744,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7443,7443,Montants compensatoires,lu_2011_account_744,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7444,7444,Subventions destinées à promouvoir l’emploi,lu_2011_account_744,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_74441,74441,Primes d’apprentissage reçues,lu_2011_account_7444,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_74442,74442,Autres subventions destinées à promouvoir l’emploi,lu_2011_account_7444,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7448,7448,Autres subventions d’exploitation,lu_2011_account_744,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_745,745,Ristournes perçues des coopératives (provenant des excédents),lu_2011_account_74,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_746,746,Indemnités d’assurance touchées,lu_2011_account_74,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_747,747,Reprises de plus-values immunisées et de subventions d’investissement en capital,lu_2011_account_74,view,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7471,7471,Plus-values immunisées non réinvesties,lu_2011_account_747,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7472,7472,Plus-values immunisées réinvesties,lu_2011_account_747,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_7473,7473,Subventions d’investissement en capital,lu_2011_account_747,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_748,748,Autres produits d’exploitation divers,lu_2011_account_74,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_749,749,Reprises sur provisions d’exploitation,lu_2011_account_74,other,account_type_2011_7_produit_exploitation,f, -lu_2011_account_75,75,Produits financiers,lu_2011_account_7,view,account_type_2011_7_produit_financier,f, -lu_2011_account_751,751,Reprises sur corrections de valeur et ajustements pour juste valeur sur immobilisations financières,lu_2011_account_75,view,account_type_2011_7_produit_financier,f, -lu_2011_account_7511,7511,Reprises sur corrections de valeur sur immobilisations financières,lu_2011_account_751,view,account_type_2011_7_produit_financier,f, -lu_2011_account_75111,75111,Parts dans des entreprises liées,lu_2011_account_7511,other,account_type_2011_7_produit_financier,f, -lu_2011_account_75112,75112,Créances sur des entreprises liées,lu_2011_account_7511,other,account_type_2011_7_produit_financier,f, -lu_2011_account_75113,75113,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_7511,other,account_type_2011_7_produit_financier,f, -lu_2011_account_75114,75114,Créances sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_7511,other,account_type_2011_7_produit_financier,f, -lu_2011_account_75115,75115,Titres ayant le caractère d’immobilisations,lu_2011_account_7511,other,account_type_2011_7_produit_financier,f, -lu_2011_account_75116,75116,Prêts et créances immobilisées,lu_2011_account_7511,other,account_type_2011_7_produit_financier,f, -lu_2011_account_75117,75117,Actions propres ou parts propres,lu_2011_account_7511,other,account_type_2011_7_produit_financier,f, -lu_2011_account_7512,7512,Ajustements pour juste valeur sur immobilisations financières,lu_2011_account_751,other,account_type_2011_7_produit_financier,f, -lu_2011_account_752,752,Revenus des immobilisations financières,lu_2011_account_75,view,account_type_2011_7_produit_financier,f, -lu_2011_account_7521,7521,Parts dans des entreprises liées,lu_2011_account_752,other,account_type_2011_7_produit_financier,f,account_financial_report_149 -lu_2011_account_7522,7522,Créances sur des entreprises liées,lu_2011_account_752,other,account_type_2011_7_produit_financier,f, -lu_2011_account_7523,7523,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_752,other,account_type_2011_7_produit_financier,f,account_financial_report_150 -lu_2011_account_7524,7524,Créances sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_752,other,account_type_2011_7_produit_financier,f, -lu_2011_account_7525,7525,Titres ayant le caractère d’immobilisations,lu_2011_account_752,other,account_type_2011_7_produit_financier,f, -lu_2011_account_7526,7526,Prêts et créances immobilisées,lu_2011_account_752,other,account_type_2011_7_produit_financier,f, -lu_2011_account_7527,7527,Actions propres ou parts propres,lu_2011_account_752,other,account_type_2011_7_produit_financier,f, -lu_2011_account_753,753,Reprises sur corrections de valeur et ajustements pour juste valeur sur éléments financiers de l’actif circulant,lu_2011_account_75,view,account_type_2011_7_produit_financier,f, -lu_2011_account_7531,7531,Reprises sur corrections de valeur sur créances sur des entreprises liées et des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_753,other,account_type_2011_7_produit_financier,f,account_financial_report_152 -lu_2011_account_7532,7532,Reprises sur corrections de valeur sur autres créances,lu_2011_account_753,other,account_type_2011_7_produit_financier,f,account_financial_report_153 -lu_2011_account_7533,7533,Reprises sur corrections de valeur sur valeurs mobilières,lu_2011_account_753,view,account_type_2011_7_produit_financier,f, -lu_2011_account_75331,75331,Parts dans les entreprises liées,lu_2011_account_7533,other,account_type_2011_7_produit_financier,f, -lu_2011_account_75332,75332,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_7533,other,account_type_2011_7_produit_financier,f, -lu_2011_account_75333,75333,Actions propres ou parts propres,lu_2011_account_7533,other,account_type_2011_7_produit_financier,f, -lu_2011_account_75338,75338,Autres valeurs mobilières,lu_2011_account_7533,other,account_type_2011_7_produit_financier,f, -lu_2011_account_7534,7534,Ajustements pour juste valeur sur éléments financiers de l’actif circulant,lu_2011_account_753,other,account_type_2011_7_produit_financier,f, -lu_2011_account_754,754,Plus-value de cession et autres produits de valeurs mobilières,lu_2011_account_75,view,account_type_2011_7_produit_financier,f, -lu_2011_account_7541,7541,Plus-value de cession de valeurs mobilières,lu_2011_account_754,view,account_type_2011_7_produit_financier,f, -lu_2011_account_75411,75411,Parts dans les entreprises liées,lu_2011_account_7541,other,account_type_2011_7_produit_financier,f, -lu_2011_account_75412,75412,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_7541,other,account_type_2011_7_produit_financier,f, -lu_2011_account_75413,75413,Actions propres ou parts propres,lu_2011_account_7541,other,account_type_2011_7_produit_financier,f, -lu_2011_account_75418,75418,Autres valeurs mobilières,lu_2011_account_7541,other,account_type_2011_7_produit_financier,f, -lu_2011_account_7548,7548,Autres produits de valeurs mobilières,lu_2011_account_754,view,account_type_2011_7_produit_financier,f, -lu_2011_account_75481,75481,Parts dans les entreprises liées,lu_2011_account_7548,other,account_type_2011_7_produit_financier,f, -lu_2011_account_75482,75482,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_7548,other,account_type_2011_7_produit_financier,f, -lu_2011_account_75483,75483,Actions propres ou parts propres,lu_2011_account_7548,other,account_type_2011_7_produit_financier,f, -lu_2011_account_75488,75488,Autres valeurs mobilières,lu_2011_account_7548,other,account_type_2011_7_produit_financier,f, -lu_2011_account_755,755,Autres intérêts et escomptes,lu_2011_account_75,view,account_type_2011_7_produit_financier,f, -lu_2011_account_7552,7552,Intérêts bancaires et assimilés,lu_2011_account_755,view,account_type_2011_7_produit_financier,f,account_financial_report_156 -lu_2011_account_75521,75521,Intérêts sur comptes courants,lu_2011_account_7552,other,account_type_2011_7_produit_financier,f, -lu_2011_account_75522,75522,Intérêts sur comptes à terme,lu_2011_account_7552,other,account_type_2011_7_produit_financier,f, -lu_2011_account_75523,75523,Intérêts sur leasings financiers,lu_2011_account_7552,other,account_type_2011_7_produit_financier,f, -lu_2011_account_7553,7553,Intérêts sur créances commerciales,lu_2011_account_755,other,account_type_2011_7_produit_financier,f,account_financial_report_156 -lu_2011_account_7554,7554,Intérêts sur des entreprises liées et sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_755,other,account_type_2011_7_produit_financier,f,account_financial_report_155 -lu_2011_account_7555,7555,Escomptes d’effets de commerce,lu_2011_account_755,other,account_type_2011_7_produit_financier,f, -lu_2011_account_7556,7556,Escomptes obtenus,lu_2011_account_755,other,account_type_2011_7_produit_financier,f, -lu_2011_account_7558,7558,Intérêts sur autres créances,lu_2011_account_755,other,account_type_2011_7_produit_financier,f, -lu_2011_account_756,756,Gains de change,lu_2011_account_75,other,account_type_2011_7_produit_financier,f, -lu_2011_account_757,757,Quote-part de bénéfice dans les entreprises collectives (autres que les sociétés de capitaux),lu_2011_account_75,other,account_type_2011_7_produit_financier,f, -lu_2011_account_758,758,Autres produits financiers,lu_2011_account_75,other,account_type_2011_7_produit_financier,f,account_financial_report_156 -lu_2011_account_759,759,Reprises sur provisions financières,lu_2011_account_75,other,account_type_2011_7_produit_financier,f, -lu_2011_account_76,76,Produits exceptionnels,lu_2011_account_7,view,account_type_2011_7_produit_exceptionnel,f,account_financial_report_157 -lu_2011_account_761,761,Reprises sur corrections de valeur exceptionnelles sur immobilisations incorporelles et corporelles,lu_2011_account_76,view,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7611,7611,Immobilisations incorporelles,lu_2011_account_761,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7612,7612,Immobilisations corporelles,lu_2011_account_761,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_762,762,Reprises sur corrections de valeur exceptionnelles sur éléments de l’actif circulant,lu_2011_account_76,view,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7621,7621,Sur stocks,lu_2011_account_762,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7622,7622,Sur créances de l’actif circulant,lu_2011_account_762,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_763,763,Produits de cession d’immobilisations incorporelles et corporelles,lu_2011_account_76,view,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7631,7631,Immobilisations incorporelles,lu_2011_account_763,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7632,7632,Immobilisations corporelles,lu_2011_account_763,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_764,764,Produits de cession d’immobilisations financières,lu_2011_account_76,view,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7641,7641,Parts dans les entreprises liées,lu_2011_account_764,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7642,7642,Créances sur entreprises liées,lu_2011_account_764,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7643,7643,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_764,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7644,7644,Créances sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_764,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7645,7645,Titres ayant le caractère d’immobilisations,lu_2011_account_764,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7646,7646,Prêts et créances immobilisés,lu_2011_account_764,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7647,7647,Actions propres ou parts propres,lu_2011_account_764,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_765,765,Produits de cession sur créances de l’actif circulant financier,lu_2011_account_76,view,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7651,7651,Créances sur des entreprises liées et sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_765,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7652,7652,Autres créances,lu_2011_account_765,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_768,768,Autres produits exceptionnels,lu_2011_account_76,view,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7681,7681,Pénalités sur marchés et dédits perçus sur achats et sur ventes,lu_2011_account_768,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7682,7682,Libéralités reçues,lu_2011_account_768,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7683,7683,Rentrées sur créances amorties,lu_2011_account_768,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7684,7684,Subventions exceptionnelles,lu_2011_account_768,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7685,7685,Bonis provenant de clauses d’indexation,lu_2011_account_768,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7686,7686,Bonis provenant du rachat par l’entreprise d’actions et d’obligations émises par elle-même,lu_2011_account_768,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7688,7688,Autres produits exceptionnels divers,lu_2011_account_768,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_769,769,Reprises sur provisions exceptionnelles,lu_2011_account_76,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_77,77,Régularisations d’impôts sur le résultat,lu_2011_account_7,view,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_771,771,Régularisations d’impôt sur le revenu des collectivités,lu_2011_account_77,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_772,772,Régularisations d’impôt commercial,lu_2011_account_77,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_773,773,Régularisations d’impôts étrangers sur le résultat,lu_2011_account_77,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_779,779,Reprises sur provisions pour impôts sur le résultat,lu_2011_account_77,view,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7791,7791,Reprises sur provisions pour impôts,lu_2011_account_779,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_7792,7792,Reprises sur provisions pour impôts différés,lu_2011_account_779,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_78,78,Régularisations d’autres impôts ne figurant pas sous le poste ci-dessus,lu_2011_account_7,view,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_781,781,Régularisations d’impôt sur la fortune,lu_2011_account_78,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_782,782,Régularisations de taxes d’abonnement,lu_2011_account_78,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_783,783,Régularisations d’impôts étrangers,lu_2011_account_78,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_788,788,Régularisations d’autres impôts et taxes,lu_2011_account_78,other,account_type_2011_7_produit_exceptionnel,f, -lu_2011_account_789,789,Reprises sur provisions pour autres impôts,lu_2011_account_78,other,account_type_2011_7_produit_exceptionnel,f, +id,code,name,parent_id/id,type,user_type/id,reconcile,financial_report_ids/id
+lu_2011_account_0,0,Plan de compte Luxembourgeois - Loi de Juin 2009 (THAMINI & ADN & ACSONE),,view,account.data_account_type_view,f,
+lu_2011_account_bilan,bilan,TOTAL CLASSES 1 A 5,lu_2011_account_0,view,account.data_account_type_view,f,
+lu_2011_account_1,1,"CLASSE 1 - COMPTES DE CAPITAUX, DE PROVISIONS ET DE DETTES FINANCIERES",lu_2011_account_bilan,view,account_type_2011_1_capital,f,
+lu_2011_account_10,10,Capital ou dotation des succursales et comptes de l'exploitant,lu_2011_account_1,view,account_type_2011_1_capital,f,
+lu_2011_account_101,101,Capital souscrit (Sociétés de capitaux - Montant total),lu_2011_account_10,other,account_type_2011_1_capital,f,account_financial_report_68
+lu_2011_account_102,102,Capital souscrit non appelé (Sociétés de capitaux),lu_2011_account_10,other,account_type_2011_1_capital,f,account_financial_report_17
+lu_2011_account_103,103,Capital souscrit appelé et non versé (Sociétés de capitaux),lu_2011_account_10,other,account_type_2011_1_capital,f,account_financial_report_18
+lu_2011_account_104,104,Capital des entreprises commerçants personnes physiques et des sociétés de personnes,lu_2011_account_10,view,account_type_2011_1_capital,f,account_financial_report_68
+lu_2011_account_1041,1041,Commerçants personnes physiques,lu_2011_account_104,other,account_type_2011_1_capital,f,
+lu_2011_account_1042,1042,Sociétés de personnes,lu_2011_account_104,other,account_type_2011_1_capital,f,
+lu_2011_account_105,105,Dotation des succursales,lu_2011_account_10,other,account_type_2011_1_capital,f,account_financial_report_68
+lu_2011_account_106,106,Comptes de l'exploitant ou des coexploitants,lu_2011_account_10,view,account_type_2011_1_capital,f,account_financial_report_68
+lu_2011_account_1061,1061,Prélèvements privés de l'exploitant ou des coexploitants,lu_2011_account_106,view,account_type_2011_1_capital,f,
+lu_2011_account_10611,10611,Prélèvements en numéraire (train de vie),lu_2011_account_1061,other,account_type_2011_1_capital,f,
+lu_2011_account_10612,10612,"Prélèvements en nature de marchandises, de produits finis et services (au prix de revient)",lu_2011_account_1061,other,account_type_2011_1_capital,f,
+lu_2011_account_10613,10613,Part personnelle des frais de maladie,lu_2011_account_1061,other,account_type_2011_1_capital,f,
+lu_2011_account_10614,10614,Primes d'assurances privées,lu_2011_account_1061,view,account_type_2011_1_capital,f,
+lu_2011_account_106141,106141,Vie,lu_2011_account_10614,other,account_type_2011_1_capital,f,
+lu_2011_account_106142,106142,Accident,lu_2011_account_10614,other,account_type_2011_1_capital,f,
+lu_2011_account_106143,106143,Incendie,lu_2011_account_10614,other,account_type_2011_1_capital,f,
+lu_2011_account_106144,106144,Responsabilité civile,lu_2011_account_10614,other,account_type_2011_1_capital,f,
+lu_2011_account_106145,106145,Multirisques,lu_2011_account_10614,other,account_type_2011_1_capital,f,
+lu_2011_account_106148,106148,Autres primes d'assurances privées,lu_2011_account_10614,other,account_type_2011_1_capital,f,
+lu_2011_account_10615,10615,Cotisations,lu_2011_account_1061,view,account_type_2011_1_capital,f,
+lu_2011_account_106151,106151,Assurances sociales (assurance dépendance),lu_2011_account_10615,other,account_type_2011_1_capital,f,
+lu_2011_account_106152,106152,Allocations familiales,lu_2011_account_10615,other,account_type_2011_1_capital,f,
+lu_2011_account_106153,106153,Cotisations pour mutuelles,lu_2011_account_10615,other,account_type_2011_1_capital,f,
+lu_2011_account_106154,106154,"Caisse de décès, médico-chirurgicale, Prestaplus",lu_2011_account_10615,other,account_type_2011_1_capital,f,
+lu_2011_account_106158,106158,Autres cotisations,lu_2011_account_10615,other,account_type_2011_1_capital,f,
+lu_2011_account_10616,10616,Prélèvements en nature (quote-part privée dans les frais généraux),lu_2011_account_1061,view,account_type_2011_1_capital,f,
+lu_2011_account_106161,106161,Salaires,lu_2011_account_10616,other,account_type_2011_1_capital,f,
+lu_2011_account_106162,106162,Loyer,lu_2011_account_10616,other,account_type_2011_1_capital,f,
+lu_2011_account_106163,106163,"Chauffage, gaz, électricité",lu_2011_account_10616,other,account_type_2011_1_capital,f,
+lu_2011_account_106164,106164,Eau,lu_2011_account_10616,other,account_type_2011_1_capital,f,
+lu_2011_account_106165,106165,Téléphone,lu_2011_account_10616,other,account_type_2011_1_capital,f,
+lu_2011_account_106166,106166,Voiture,lu_2011_account_10616,other,account_type_2011_1_capital,f,
+lu_2011_account_106168,106168,Autres prélèvements en nature,lu_2011_account_10616,other,account_type_2011_1_capital,f,
+lu_2011_account_10617,10617,Acquisitions,lu_2011_account_1061,view,account_type_2011_1_capital,f,
+lu_2011_account_106171,106171,Mobilier privé,lu_2011_account_10617,other,account_type_2011_1_capital,f,
+lu_2011_account_106172,106172,Voiture privée,lu_2011_account_10617,other,account_type_2011_1_capital,f,
+lu_2011_account_106173,106173,Titres privés,lu_2011_account_10617,other,account_type_2011_1_capital,f,
+lu_2011_account_106174,106174,Immeubles privés,lu_2011_account_10617,other,account_type_2011_1_capital,f,
+lu_2011_account_106178,106178,Autres acquisitions,lu_2011_account_10617,other,account_type_2011_1_capital,f,
+lu_2011_account_10618,10618,Impôts,lu_2011_account_1061,view,account_type_2011_1_capital,f,
+lu_2011_account_106181,106181,Impôt sur le revenu payé,lu_2011_account_10618,other,account_type_2011_1_capital,f,
+lu_2011_account_106182,106182,Impôt sur la fortune payé,lu_2011_account_10618,other,account_type_2011_1_capital,f,
+lu_2011_account_106183,106183,Impôt commercial - arriérés payés,lu_2011_account_10618,other,account_type_2011_1_capital,f,
+lu_2011_account_106188,106188,Autres impôts,lu_2011_account_10618,other,account_type_2011_1_capital,f,
+lu_2011_account_10619,10619,Prélèvements privés particuliers,lu_2011_account_1061,view,account_type_2011_1_capital,f,
+lu_2011_account_106191,106191,Réparations aux immeubles privés,lu_2011_account_10619,other,account_type_2011_1_capital,f,
+lu_2011_account_106192,106192,Placements sur comptes financiers privés,lu_2011_account_10619,other,account_type_2011_1_capital,f,
+lu_2011_account_106193,106193,Remboursements de dettes privées,lu_2011_account_10619,other,account_type_2011_1_capital,f,
+lu_2011_account_106194,106194,Dons et dotations aux enfants,lu_2011_account_10619,other,account_type_2011_1_capital,f,
+lu_2011_account_106195,106195,Droits de succession et droits de mutation par décès,lu_2011_account_10619,other,account_type_2011_1_capital,f,
+lu_2011_account_106198,106198,Autres prélèvements privés particuliers,lu_2011_account_10619,other,account_type_2011_1_capital,f,
+lu_2011_account_1062,1062,Suppléments d'apports privés de l'exploitant ou des coexploitants,lu_2011_account_106,view,account_type_2011_1_capital,f,
+lu_2011_account_10621,10621,Héritage ou donation,lu_2011_account_1062,other,account_type_2011_1_capital,f,
+lu_2011_account_10622,10622,Avoirs privés,lu_2011_account_1062,other,account_type_2011_1_capital,f,
+lu_2011_account_10623,10623,Emprunts privés,lu_2011_account_1062,other,account_type_2011_1_capital,f,
+lu_2011_account_10624,10624,Cessions,lu_2011_account_1062,view,account_type_2011_1_capital,f,
+lu_2011_account_106241,106241,Mobilier privé,lu_2011_account_10624,other,account_type_2011_1_capital,f,
+lu_2011_account_106242,106242,Voiture privée,lu_2011_account_10624,other,account_type_2011_1_capital,f,
+lu_2011_account_106243,106243,Titres privés,lu_2011_account_10624,other,account_type_2011_1_capital,f,
+lu_2011_account_106244,106244,Immeubles privés,lu_2011_account_10624,other,account_type_2011_1_capital,f,
+lu_2011_account_106248,106248,Autres cessions,lu_2011_account_10624,other,account_type_2011_1_capital,f,
+lu_2011_account_10625,10625,Loyers encaissés,lu_2011_account_1062,other,account_type_2011_1_capital,f,
+lu_2011_account_10626,10626,Salaires ou rentes touchés,lu_2011_account_1062,other,account_type_2011_1_capital,f,
+lu_2011_account_10627,10627,Allocations familiales reçues,lu_2011_account_1062,other,account_type_2011_1_capital,f,
+lu_2011_account_10628,10628,Remboursements d'impôts,lu_2011_account_1062,view,account_type_2011_1_capital,f,
+lu_2011_account_106281,106281,Impôt sur le revenu,lu_2011_account_10628,other,account_type_2011_1_capital,f,
+lu_2011_account_106283,106283,Impôt sur la fortune,lu_2011_account_10628,other,account_type_2011_1_capital,f,
+lu_2011_account_106284,106284,Impôt commercial,lu_2011_account_10628,other,account_type_2011_1_capital,f,
+lu_2011_account_106288,106288,Autres remboursements d'impôts,lu_2011_account_10628,other,account_type_2011_1_capital,f,
+lu_2011_account_10629,10629,Quote-part professionnelle de frais privés,lu_2011_account_1062,other,account_type_2011_1_capital,f,
+lu_2011_account_11,11,Primes d'émission et primes assimilées,lu_2011_account_1,view,account_type_2011_1_capital,f,account_financial_report_69
+lu_2011_account_111,111,Primes d'émission,lu_2011_account_11,other,account_type_2011_1_capital,f,
+lu_2011_account_112,112,Primes de fusion,lu_2011_account_11,other,account_type_2011_1_capital,f,
+lu_2011_account_113,113,Primes d'apport,lu_2011_account_11,other,account_type_2011_1_capital,f,
+lu_2011_account_114,114,Primes de conversion d'obligations en actions,lu_2011_account_11,other,account_type_2011_1_capital,f,
+lu_2011_account_115,115,"Apport en capitaux propres non rémunéré par des titres (""Capital contribution"")",lu_2011_account_11,other,account_type_2011_1_capital,f,
+lu_2011_account_12,12,Réserves de réévaluation,lu_2011_account_1,view,account_type_2011_1_capital,f,account_financial_report_70
+lu_2011_account_121,121,Réserves de réévaluation en application de la juste valeur,lu_2011_account_12,other,account_type_2011_1_capital,f,
+lu_2011_account_122,122,Réserves de mise en équivalence (Participations valorisées suivant l'art. 58),lu_2011_account_12,other,account_type_2011_1_capital,f,
+lu_2011_account_123,123,Plus-values sur écarts de conversion immunisées,lu_2011_account_12,other,account_type_2011_1_capital,f,
+lu_2011_account_128,128,Autres réserves de réévaluation,lu_2011_account_12,other,account_type_2011_1_capital,f,
+lu_2011_account_13,13,Réserves,lu_2011_account_1,view,account_type_2011_1_capital,f,
+lu_2011_account_131,131,Réserve légale,lu_2011_account_13,other,account_type_2011_1_capital,f,account_financial_report_72
+lu_2011_account_132,132,Réserve pour actions propres ou parts propres,lu_2011_account_13,other,account_type_2011_1_capital,f,account_financial_report_73
+lu_2011_account_133,133,Réserves statutaires,lu_2011_account_13,other,account_type_2011_1_capital,f,account_financial_report_74
+lu_2011_account_138,138,Autres réserves,lu_2011_account_13,view,account_type_2011_1_capital,f,account_financial_report_75
+lu_2011_account_1381,1381,Réserve pour l'impôt sur la fortune,lu_2011_account_138,other,account_type_2011_1_capital,f,
+lu_2011_account_1382,1382,Autres réserves indisponibles,lu_2011_account_138,other,account_type_2011_1_capital,f,
+lu_2011_account_1383,1383,Autres réserves disponibles,lu_2011_account_138,other,account_type_2011_1_capital,f,
+lu_2011_account_14,14,Résultats,lu_2011_account_1,view,account_type_2011_1_capital,f,
+lu_2011_account_141,141,Résultats reportés,lu_2011_account_14,other,account_type_2011_1_capital,f,account_financial_report_76
+lu_2011_account_142,142,Résultat de l'exercice,lu_2011_account_14,other,account_type_2011_1_capital,f,account_financial_report_77
+lu_2011_account_15,15,Acomptes sur dividendes,lu_2011_account_1,other,account_type_2011_1_capital,f,account_financial_report_78
+lu_2011_account_16,16,Subventions d'investissement en capital,lu_2011_account_1,view,account_type_2011_1_capital,f,account_financial_report_79
+lu_2011_account_161,161,Terrains et constructions,lu_2011_account_16,other,account_type_2011_1_capital,f,
+lu_2011_account_162,162,Installations techniques et machines,lu_2011_account_16,other,account_type_2011_1_capital,f,
+lu_2011_account_163,163,"Autres installations, outillage, mobilier et matériel roulant",lu_2011_account_16,other,account_type_2011_1_capital,f,
+lu_2011_account_168,168,Autres subventions d'investissement en capital,lu_2011_account_16,other,account_type_2011_1_capital,f,
+lu_2011_account_17,17,Plus-values immunisées,lu_2011_account_1,view,account_type_2011_1_capital,f,account_financial_report_80
+lu_2011_account_171,171,Plus-values immunisées à réinvestir,lu_2011_account_17,other,account_type_2011_1_capital,f,
+lu_2011_account_172,172,Plus-values immunisées réinvesties,lu_2011_account_17,other,account_type_2011_1_capital,f,
+lu_2011_account_18,18,Provisions,lu_2011_account_1,view,account_type_2011_1_provision,f,
+lu_2011_account_181,181,Provisions pour pensions et obligations similaires,lu_2011_account_18,other,account_type_2011_1_provision,f,account_financial_report_83
+lu_2011_account_182,182,Provisions pour impôts,lu_2011_account_18,view,account_type_2011_1_provision,f,account_financial_report_84
+lu_2011_account_1821,1821,Provisions pour impôt sur le revenu des collectivités,lu_2011_account_182,other,account_type_2011_1_provision,f,
+lu_2011_account_1822,1822,Provisions pour impôt commercial,lu_2011_account_182,other,account_type_2011_1_provision,f,
+lu_2011_account_1823,1823,Provisions pour impôt sur la fortune,lu_2011_account_182,other,account_type_2011_1_provision,f,
+lu_2011_account_1828,1828,Autres provisions pour impôts,lu_2011_account_182,other,account_type_2011_1_provision,f,
+lu_2011_account_183,183,Provisions pour impôts différés,lu_2011_account_18,other,account_type_2011_1_provision,f,account_financial_report_84
+lu_2011_account_188,188,Autres provisions,lu_2011_account_18,view,account_type_2011_1_provision,f,account_financial_report_85
+lu_2011_account_1881,1881,Provisions d'exploitation,lu_2011_account_188,other,account_type_2011_1_provision,f,
+lu_2011_account_1882,1882,Provisions financières,lu_2011_account_188,other,account_type_2011_1_provision,f,
+lu_2011_account_1883,1883,Provisions exceptionnelles,lu_2011_account_188,other,account_type_2011_1_provision,f,
+lu_2011_account_19,19,Dettes financières et dettes assimilées,lu_2011_account_1,view,account_type_2011_1_provision,f,
+lu_2011_account_191,191,Dettes subordonnées,lu_2011_account_19,view,account_type_2011_1_provision,f,account_financial_report_81
+lu_2011_account_1911,1911,dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_191,view,account_type_2011_1_provision,f,
+lu_2011_account_19111,19111,Montant principal,lu_2011_account_1911,other,account_type_2011_1_provision,f,
+lu_2011_account_19112,19112,Intérêts courus,lu_2011_account_1911,other,account_type_2011_1_provision,f,
+lu_2011_account_1912,1912,dont la durée résiduelle est supérieure à un an,lu_2011_account_191,view,account_type_2011_1_provision,f,
+lu_2011_account_19121,19121,Montant principal,lu_2011_account_1912,other,account_type_2011_1_provision,f,
+lu_2011_account_19122,19122,Intérêts courus,lu_2011_account_1912,other,account_type_2011_1_provision,f,
+lu_2011_account_192,192,Emprunts obligataires convertibles,lu_2011_account_19,view,account_type_2011_1_provision,f,
+lu_2011_account_1921,1921,dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_192,view,account_type_2011_1_provision,f,account_financial_report_89
+lu_2011_account_19211,19211,Montant principal,lu_2011_account_1921,other,account_type_2011_1_provision,f,
+lu_2011_account_19212,19212,Intérêts courus,lu_2011_account_1921,other,account_type_2011_1_provision,f,
+lu_2011_account_1922,1922,dont la durée résiduelle est supérieure à un an,lu_2011_account_192,view,account_type_2011_1_provision,f,account_financial_report_90
+lu_2011_account_19221,19221,Montant principal,lu_2011_account_1922,other,account_type_2011_1_provision,f,
+lu_2011_account_19222,19222,Intérêts courus,lu_2011_account_1922,other,account_type_2011_1_provision,f,
+lu_2011_account_193,193,Emprunts obligataires non convertibles,lu_2011_account_19,view,account_type_2011_1_provision,f,
+lu_2011_account_1931,1931,dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_193,view,account_type_2011_1_provision,f,account_financial_report_92
+lu_2011_account_19311,19311,Montant principal,lu_2011_account_1931,other,account_type_2011_1_provision,f,
+lu_2011_account_19312,19312,Intérêts courus,lu_2011_account_1931,other,account_type_2011_1_provision,f,
+lu_2011_account_1932,1932,dont la durée résiduelle est supérieure à un an,lu_2011_account_193,view,account_type_2011_1_provision,f,account_financial_report_93
+lu_2011_account_19321,19321,Montant principal,lu_2011_account_1932,other,account_type_2011_1_provision,f,
+lu_2011_account_19322,19322,Intérêts courus,lu_2011_account_1932,other,account_type_2011_1_provision,f,
+lu_2011_account_194,194,Dettes envers des établissements de crédit,lu_2011_account_19,view,account_type_2011_1_provision,f,
+lu_2011_account_1941,1941,dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_194,view,account_type_2011_1_provision,f,account_financial_report_95
+lu_2011_account_19411,19411,Montant principal,lu_2011_account_1941,other,account_type_2011_1_provision,f,
+lu_2011_account_19412,19412,Intérêts courus,lu_2011_account_1941,other,account_type_2011_1_provision,f,
+lu_2011_account_1942,1942,dont la durée résiduelle est supérieure à un an,lu_2011_account_194,view,account_type_2011_1_provision,f,account_financial_report_96
+lu_2011_account_19421,19421,Montant principal,lu_2011_account_1942,other,account_type_2011_1_provision,f,
+lu_2011_account_19422,19422,Intérêts courus,lu_2011_account_1942,other,account_type_2011_1_provision,f,
+lu_2011_account_195,195,Dettes de leasing financier,lu_2011_account_19,view,account_type_2011_1_provision,f,
+lu_2011_account_1951,1951,dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_195,other,account_type_2011_1_provision,f,account_financial_report_95
+lu_2011_account_1952,1952,dont la durée résiduelle est supérieure à un an,lu_2011_account_195,other,account_type_2011_1_provision,f,account_financial_report_96
+lu_2011_account_198,198,Autres emprunts et dettes assimilées,lu_2011_account_19,view,account_type_2011_1_provision,f,
+lu_2011_account_1981,1981,dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_198,view,account_type_2011_1_provision,f,account_financial_report_116
+lu_2011_account_19811,19811,Autres emprunts,lu_2011_account_1981,other,account_type_2011_1_provision,f,
+lu_2011_account_19812,19812,Rentes viagères capitalisées,lu_2011_account_1981,other,account_type_2011_1_provision,f,
+lu_2011_account_19813,19813,Autres dettes assimilées,lu_2011_account_1981,other,account_type_2011_1_provision,f,
+lu_2011_account_19814,19814,Intérêts courus sur autres emprunts et dettes assimilées,lu_2011_account_1981,other,account_type_2011_1_provision,f,
+lu_2011_account_1982,1982,dont la durée résiduelle est supérieure à un an,lu_2011_account_198,view,account_type_2011_1_provision,f,account_financial_report_117
+lu_2011_account_19821,19821,Autres emprunts,lu_2011_account_1982,other,account_type_2011_1_provision,f,
+lu_2011_account_19822,19822,Rentes viagères capitalisées,lu_2011_account_1982,other,account_type_2011_1_provision,f,
+lu_2011_account_19823,19823,Autres dettes assimilées,lu_2011_account_1982,other,account_type_2011_1_provision,f,
+lu_2011_account_19824,19824,Intérêts courus sur autres emprunts et dettes assimilées,lu_2011_account_1982,other,account_type_2011_1_provision,f,
+lu_2011_account_2,2,CLASSE 2 - COMPTES DE FRAIS D’ETABLISSEMENT ET D’ACTIFS IMMOBILISES,lu_2011_account_bilan,view,account.data_account_type_view,f,
+lu_2011_account_20,20,Frais d'établissement et frais assimilés,lu_2011_account_2,view,account_type_2011_2_immo,f,account_financial_report_19
+lu_2011_account_201,201,Frais de constitution,lu_2011_account_20,other,account_type_2011_2_immo,f,
+lu_2011_account_202,202,Frais de premier établissement,lu_2011_account_20,view,account_type_2011_2_immo,f,
+lu_2011_account_2021,2021,Frais de prospection,lu_2011_account_202,other,account_type_2011_2_immo,f,
+lu_2011_account_2022,2022,Frais de publicité,lu_2011_account_202,other,account_type_2011_2_immo,f,
+lu_2011_account_203,203,"Frais d'augmentation de capital et d'opérations diverses (fusions, scissions, transformations)",lu_2011_account_20,other,account_type_2011_2_immo,f,
+lu_2011_account_204,204,Frais d'émission d'emprunts,lu_2011_account_20,other,account_type_2011_2_immo,f,
+lu_2011_account_208,208,Autres frais assimilés,lu_2011_account_20,other,account_type_2011_2_immo,f,
+lu_2011_account_21,21,Immobilisations incorporelles,lu_2011_account_2,view,account_type_2011_2_immo,f,
+lu_2011_account_211,211,Frais de recherche et de développement,lu_2011_account_21,other,account_type_2011_2_immo,f,account_financial_report_22
+lu_2011_account_212,212,"Concessions, brevets, licences, marques ainsi que droits et valeurs similaires",lu_2011_account_21,view,account_type_2011_2_immo,f,
+lu_2011_account_2121,2121,Acquis à titre onéreux (Actifs incorporels non produits),lu_2011_account_212,view,account_type_2011_2_immo,f,account_financial_report_24
+lu_2011_account_21211,21211,Concessions,lu_2011_account_2121,other,account_type_2011_2_immo,f,
+lu_2011_account_21212,21212,Brevets,lu_2011_account_2121,other,account_type_2011_2_immo,f,
+lu_2011_account_21213,21213,Licences informatiques (logiciels et progiciels informatiques),lu_2011_account_2121,other,account_type_2011_2_immo,f,
+lu_2011_account_21214,21214,Marques et franchises,lu_2011_account_2121,other,account_type_2011_2_immo,f,
+lu_2011_account_21215,21215,Droits et valeurs similaires acquis à titre onéreux,lu_2011_account_2121,view,account_type_2011_2_immo,f,
+lu_2011_account_212151,212151,Droits d'auteur et de reproduction,lu_2011_account_21215,other,account_type_2011_2_immo,f,
+lu_2011_account_212152,212152,Droits d'émission,lu_2011_account_21215,other,account_type_2011_2_immo,f,
+lu_2011_account_212158,212158,Autres droits et valeurs similaires acquis à titre onéreux,lu_2011_account_21215,other,account_type_2011_2_immo,f,
+lu_2011_account_2122,2122,Créés par l'entreprise elle-même (Actifs incorporels produits),lu_2011_account_212,view,account_type_2011_2_immo,f,account_financial_report_25
+lu_2011_account_21221,21221,Concessions,lu_2011_account_2122,other,account_type_2011_2_immo,f,
+lu_2011_account_21222,21222,Brevets,lu_2011_account_2122,other,account_type_2011_2_immo,f,
+lu_2011_account_21223,21223,Licences informatiques (logiciels et progiciels informatiques),lu_2011_account_2122,other,account_type_2011_2_immo,f,
+lu_2011_account_21224,21224,Marques et franchises,lu_2011_account_2122,other,account_type_2011_2_immo,f,
+lu_2011_account_21225,21225,Droits et valeurs similaires créés par l'entreprise elle-même,lu_2011_account_2122,view,account_type_2011_2_immo,f,
+lu_2011_account_212251,212251,Droits d'auteur et de reproduction,lu_2011_account_21225,other,account_type_2011_2_immo,f,
+lu_2011_account_212252,212252,Droits d'émission,lu_2011_account_21225,other,account_type_2011_2_immo,f,
+lu_2011_account_212258,212258,Autres droits et valeurs similaires créés par l'entreprise elle-même,lu_2011_account_21225,other,account_type_2011_2_immo,f,
+lu_2011_account_213,213,"Fonds de commerce, dans la mesure où il a été acquis à titre onéreux",lu_2011_account_21,other,account_type_2011_2_immo,f,account_financial_report_26
+lu_2011_account_214,214,Acomptes versés et immobilisations incorporelles en cours,lu_2011_account_21,view,account_type_2011_2_immo,f,account_financial_report_27
+lu_2011_account_2141,2141,Frais de recherche et de développement,lu_2011_account_214,other,account_type_2011_2_immo,f,
+lu_2011_account_2142,2142,"Concessions, brevets, licences, marques ainsi que droits et valeurs similaires",lu_2011_account_214,other,account_type_2011_2_immo,f,
+lu_2011_account_2143,2143,Fonds de commerce,lu_2011_account_214,other,account_type_2011_2_immo,f,
+lu_2011_account_22,22,Immobilisations corporelles,lu_2011_account_2,view,account_type_2011_2_immo,f,
+lu_2011_account_221,221,Terrains et constructions,lu_2011_account_22,view,account_type_2011_2_immo,f,account_financial_report_29
+lu_2011_account_2211,2211,Terrains,lu_2011_account_221,view,account_type_2011_2_immo,f,
+lu_2011_account_22111,22111,Terrains nus,lu_2011_account_2211,other,account_type_2011_2_immo,f,
+lu_2011_account_22112,22112,Terrains aménagés,lu_2011_account_2211,other,account_type_2011_2_immo,f,
+lu_2011_account_22113,22113,Sous-sols et sursols,lu_2011_account_2211,other,account_type_2011_2_immo,f,
+lu_2011_account_22114,22114,Terrains de gisement,lu_2011_account_2211,other,account_type_2011_2_immo,f,
+lu_2011_account_22115,22115,Terrains bâtis,lu_2011_account_2211,other,account_type_2011_2_immo,f,
+lu_2011_account_22118,22118,Autres terrains,lu_2011_account_2211,other,account_type_2011_2_immo,f,
+lu_2011_account_2212,2212,Agencements et aménagements de terrains,lu_2011_account_221,view,account_type_2011_2_immo,f,
+lu_2011_account_22121,22121,Agencements et aménagements de terrains nus,lu_2011_account_2212,other,account_type_2011_2_immo,f,
+lu_2011_account_22122,22122,Agencements et aménagements de terrains aménagés,lu_2011_account_2212,other,account_type_2011_2_immo,f,
+lu_2011_account_22123,22123,Agencements et aménagements de sous-sols et sursols,lu_2011_account_2212,other,account_type_2011_2_immo,f,
+lu_2011_account_22124,22124,Agencements et aménagements de terrains de gisement,lu_2011_account_2212,other,account_type_2011_2_immo,f,
+lu_2011_account_22125,22125,Agencements et aménagements de terrains bâtis,lu_2011_account_2212,other,account_type_2011_2_immo,f,
+lu_2011_account_22128,22128,Agencements et aménagements d'autres terrains,lu_2011_account_2212,other,account_type_2011_2_immo,f,
+lu_2011_account_2213,2213,Constructions,lu_2011_account_221,view,account_type_2011_2_immo,f,
+lu_2011_account_22131,22131,Constructions sur sol propre,lu_2011_account_2213,other,account_type_2011_2_immo,f,
+lu_2011_account_22132,22132,Constructions sur sol d'autrui,lu_2011_account_2213,other,account_type_2011_2_immo,f,
+lu_2011_account_222,222,Installations techniques et machines,lu_2011_account_22,view,account_type_2011_2_immo,f,account_financial_report_30
+lu_2011_account_2221,2221,Installations techniques,lu_2011_account_222,other,account_type_2011_2_immo,f,
+lu_2011_account_2222,2222,Machines,lu_2011_account_222,other,account_type_2011_2_immo,f,
+lu_2011_account_223,223,"Autres installations, outillage, mobilier et matériel roulant",lu_2011_account_22,view,account_type_2011_2_immo,f,account_financial_report_31
+lu_2011_account_2231,2231,Equipement de transport et de manutention,lu_2011_account_223,other,account_type_2011_2_immo,f,
+lu_2011_account_2232,2232,Véhicules de transport,lu_2011_account_223,other,account_type_2011_2_immo,f,
+lu_2011_account_2233,2233,Outillage,lu_2011_account_223,other,account_type_2011_2_immo,f,
+lu_2011_account_2234,2234,Mobilier,lu_2011_account_223,other,account_type_2011_2_immo,f,
+lu_2011_account_2235,2235,Matériel informatique (hardware),lu_2011_account_223,other,account_type_2011_2_immo,f,
+lu_2011_account_2236,2236,Cheptel,lu_2011_account_223,other,account_type_2011_2_immo,f,
+lu_2011_account_2237,2237,Emballages récupérables,lu_2011_account_223,other,account_type_2011_2_immo,f,
+lu_2011_account_2238,2238,Autres installations,lu_2011_account_223,other,account_type_2011_2_immo,f,
+lu_2011_account_224,224,Acomptes versés et immobilisations corporelles en cours,lu_2011_account_22,view,account_type_2011_2_immo,f,account_financial_report_32
+lu_2011_account_2241,2241,Terrains et constructions,lu_2011_account_224,view,account_type_2011_2_immo,f,
+lu_2011_account_22411,22411,Terrains,lu_2011_account_2241,other,account_type_2011_2_immo,f,
+lu_2011_account_22412,22412,Agencements et aménagements de terrains,lu_2011_account_2241,other,account_type_2011_2_immo,f,
+lu_2011_account_22413,22413,Constructions,lu_2011_account_2241,other,account_type_2011_2_immo,f,
+lu_2011_account_2242,2242,Installations techniques et machines,lu_2011_account_224,other,account_type_2011_2_immo,f,
+lu_2011_account_2243,2243,"Autres installations, outillage, mobilier et matériel roulant",lu_2011_account_224,other,account_type_2011_2_immo,f,
+lu_2011_account_23,23,Immobilisations financières,lu_2011_account_2,view,account_type_2011_2_immo,f,
+lu_2011_account_231,231,Parts dans des entreprises liées,lu_2011_account_23,other,account_type_2011_2_immo,f,account_financial_report_34
+lu_2011_account_232,232,Créances sur des entreprises liées,lu_2011_account_23,other,account_type_2011_2_immo,f,account_financial_report_35
+lu_2011_account_233,233,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_23,other,account_type_2011_2_immo,f,account_financial_report_36
+lu_2011_account_234,234,Créances sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_23,other,account_type_2011_2_immo,f,account_financial_report_37
+lu_2011_account_235,235,Titres ayant le caractère d'immobilisations,lu_2011_account_23,view,account_type_2011_2_immo,f,account_financial_report_38
+lu_2011_account_2351,2351,Titres immobilisés (droit de propriété),lu_2011_account_235,view,account_type_2011_2_immo,f,
+lu_2011_account_23511,23511,Actions,lu_2011_account_2351,other,account_type_2011_2_immo,f,
+lu_2011_account_23518,23518,Autres titres immobilisés (droit de propriété),lu_2011_account_2351,other,account_type_2011_2_immo,f,
+lu_2011_account_2352,2352,Titres immobilisés (droit de créance),lu_2011_account_235,view,account_type_2011_2_immo,f,
+lu_2011_account_23521,23521,Obligations,lu_2011_account_2352,other,account_type_2011_2_immo,f,
+lu_2011_account_23528,23528,Autres titres immobilisés (droit de créance),lu_2011_account_2352,other,account_type_2011_2_immo,f,
+lu_2011_account_2358,2358,Autres titres ayant le caractère d'immobilisations,lu_2011_account_235,other,account_type_2011_2_immo,f,
+lu_2011_account_236,236,Prêts et créances immobilisées,lu_2011_account_23,view,account_type_2011_2_immo,f,account_financial_report_39
+lu_2011_account_2361,2361,Prêts,lu_2011_account_236,view,account_type_2011_2_immo,f,
+lu_2011_account_23611,23611,Prêts participatifs,lu_2011_account_2361,other,account_type_2011_2_immo,f,
+lu_2011_account_23612,23612,Prêts aux associés,lu_2011_account_2361,other,account_type_2011_2_immo,f,
+lu_2011_account_23613,23613,Prêts au personnel,lu_2011_account_2361,other,account_type_2011_2_immo,f,
+lu_2011_account_23618,23618,Autres prêts,lu_2011_account_2361,other,account_type_2011_2_immo,f,
+lu_2011_account_2362,2362,Dépôts et cautionnements versés,lu_2011_account_236,view,account_type_2011_2_immo,f,
+lu_2011_account_23621,23621,Dépôts,lu_2011_account_2362,other,account_type_2011_2_immo,f,
+lu_2011_account_23622,23622,Cautionnements,lu_2011_account_2362,other,account_type_2011_2_immo,f,
+lu_2011_account_2363,2363,Créances immobilisées,lu_2011_account_236,other,account_type_2011_2_immo,f,
+lu_2011_account_237,237,Actions propres ou parts propres,lu_2011_account_23,other,account_type_2011_2_immo,f,account_financial_report_40
+lu_2011_account_3,3,CLASSE 3 - COMPTES DE STOCKS,lu_2011_account_bilan,view,account.data_account_type_view,f,
+lu_2011_account_30,30,Matières premières et consommables,lu_2011_account_3,view,account_type_2011_3_stock,f,account_financial_report_43
+lu_2011_account_301,301,Matières premières,lu_2011_account_30,other,account_type_2011_3_stock,f,
+lu_2011_account_302,302,Matières consommables,lu_2011_account_30,other,account_type_2011_3_stock,f,
+lu_2011_account_303,303,Fournitures consommables,lu_2011_account_30,view,account_type_2011_3_stock,f,
+lu_2011_account_3031,3031,Combustibles,lu_2011_account_303,other,account_type_2011_3_stock,f,
+lu_2011_account_3032,3032,Produits d'entretien,lu_2011_account_303,other,account_type_2011_3_stock,f,
+lu_2011_account_3033,3033,Fournitures d'atelier et d'usine,lu_2011_account_303,other,account_type_2011_3_stock,f,
+lu_2011_account_3034,3034,Fournitures de magasin,lu_2011_account_303,other,account_type_2011_3_stock,f,
+lu_2011_account_3035,3035,Fournitures de bureau,lu_2011_account_303,other,account_type_2011_3_stock,f,
+lu_2011_account_3036,3036,Carburants,lu_2011_account_303,other,account_type_2011_3_stock,f,
+lu_2011_account_3037,3037,Lubrifiants,lu_2011_account_303,other,account_type_2011_3_stock,f,
+lu_2011_account_3038,3038,Autres fournitures consommables,lu_2011_account_303,other,account_type_2011_3_stock,f,
+lu_2011_account_304,304,Emballages,lu_2011_account_30,view,account_type_2011_3_stock,f,
+lu_2011_account_3041,3041,Emballages non-récupérables,lu_2011_account_304,other,account_type_2011_3_stock,f,
+lu_2011_account_3042,3042,Emballages récupérables,lu_2011_account_304,other,account_type_2011_3_stock,f,
+lu_2011_account_3043,3043,Emballages à usage mixte,lu_2011_account_304,other,account_type_2011_3_stock,f,
+lu_2011_account_305,305,Approvisionnements,lu_2011_account_30,other,account_type_2011_3_stock,f,
+lu_2011_account_31,31,Produits en cours de fabrication et commandes en cours,lu_2011_account_3,view,account_type_2011_3_stock,f,account_financial_report_44
+lu_2011_account_311,311,Produits en cours de fabrication,lu_2011_account_31,other,account_type_2011_3_stock,f,
+lu_2011_account_312,312,Commandes en cours – Produits,lu_2011_account_31,other,account_type_2011_3_stock,f,
+lu_2011_account_313,313,Commandes en cours – Prestations de services,lu_2011_account_31,other,account_type_2011_3_stock,f,
+lu_2011_account_314,314,Immeubles en construction,lu_2011_account_31,other,account_type_2011_3_stock,f,
+lu_2011_account_32,32,Produits finis et marchandises,lu_2011_account_3,view,account_type_2011_3_stock,f,account_financial_report_45
+lu_2011_account_321,321,Produits finis,lu_2011_account_32,other,account_type_2011_3_stock,f,
+lu_2011_account_322,322,Produits intermédiaires,lu_2011_account_32,other,account_type_2011_3_stock,f,
+lu_2011_account_323,323,Produits résiduels,lu_2011_account_32,view,account_type_2011_3_stock,f,
+lu_2011_account_3231,3231,Déchets,lu_2011_account_323,other,account_type_2011_3_stock,f,
+lu_2011_account_3232,3232,Rebuts,lu_2011_account_323,other,account_type_2011_3_stock,f,
+lu_2011_account_3233,3233,Matières de récupération,lu_2011_account_323,other,account_type_2011_3_stock,f,
+lu_2011_account_326,326,Marchandises,lu_2011_account_32,other,account_type_2011_3_stock,f,
+lu_2011_account_327,327,"Marchandises en voie d'acheminement, mises en dépôt ou données en consignation",lu_2011_account_32,other,account_type_2011_3_stock,f,
+lu_2011_account_33,33,Terrains et immeubles destinés à la revente,lu_2011_account_3,view,account_type_2011_3_stock,f,account_financial_report_45
+lu_2011_account_331,331,Terrains,lu_2011_account_33,other,account_type_2011_3_stock,f,
+lu_2011_account_332,332,Immeubles,lu_2011_account_33,view,account_type_2011_3_stock,f,
+lu_2011_account_3321,3321,Immeubles acquis,lu_2011_account_332,other,account_type_2011_3_stock,f,
+lu_2011_account_3322,3322,Immeubles construits,lu_2011_account_332,other,account_type_2011_3_stock,f,
+lu_2011_account_34,34,Acomptes versés,lu_2011_account_3,view,account_type_2011_3_stock,f,account_financial_report_46
+lu_2011_account_341,341,Acomptes versés sur matières premières et consommables,lu_2011_account_34,other,account_type_2011_3_stock,f,
+lu_2011_account_342,342,Acomptes versés sur produits en cours de fabrication et commandes en cours,lu_2011_account_34,other,account_type_2011_3_stock,f,
+lu_2011_account_343,343,Acomptes versés sur produits finis et marchandises,lu_2011_account_34,other,account_type_2011_3_stock,f,
+lu_2011_account_344,344,Acomptes versés sur terrains et immeubles destinés à la revente,lu_2011_account_34,other,account_type_2011_3_stock,f,
+lu_2011_account_4,4,CLASSE 4 - COMPTES DE TIERS,lu_2011_account_bilan,view,account.data_account_type_view,f,
+lu_2011_account_40,40,Créances résultant de ventes et prestations de services,lu_2011_account_4,view,account_type_2011_4_creance,f,
+lu_2011_account_401,401,Créances dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_40,view,account_type_2011_4_creance,f,account_financial_report_49
+lu_2011_account_4011,4011,Clients,lu_2011_account_401,receivable,account_type_2011_4_creance,t,
+lu_2011_account_4012,4012,Clients – Effets à recevoir,lu_2011_account_401,receivable,account_type_2011_4_creance,t,
+lu_2011_account_4013,4013,Clients douteux ou litigieux,lu_2011_account_401,receivable,account_type_2011_4_creance,t,
+lu_2011_account_4014,4014,Clients – Factures à établir,lu_2011_account_401,receivable,account_type_2011_4_creance,t,
+lu_2011_account_4015,4015,Clients créditeurs,lu_2011_account_401,receivable,account_type_2011_4_creance,t,
+lu_2011_account_4019,4019,Corrections de valeur,lu_2011_account_401,other,account_type_2011_4_creance,f,
+lu_2011_account_402,402,Créances dont la durée résiduelle est supérieure à un an,lu_2011_account_40,view,account_type_2011_4_creance,f,account_financial_report_50
+lu_2011_account_4021,4021,Clients,lu_2011_account_402,receivable,account_type_2011_4_creance,t,
+lu_2011_account_4022,4022,Clients – Effets à recevoir,lu_2011_account_402,receivable,account_type_2011_4_creance,t,
+lu_2011_account_4023,4023,Clients douteux ou litigieux,lu_2011_account_402,receivable,account_type_2011_4_creance,t,
+lu_2011_account_4024,4024,Clients – Factures à établir,lu_2011_account_402,receivable,account_type_2011_4_creance,t,
+lu_2011_account_4025,4025,Clients créditeurs,lu_2011_account_402,receivable,account_type_2011_4_creance,t,
+lu_2011_account_4029,4029,Corrections de valeur,lu_2011_account_402,other,account_type_2011_4_creance,f,
+lu_2011_account_41,41,Créances sur des entreprises liées et sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_4,view,account_type_2011_4_creance,f,
+lu_2011_account_411,411,Créances sur des entreprises liées,lu_2011_account_41,view,account_type_2011_4_creance,f,
+lu_2011_account_4111,4111,Créances dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_411,view,account_type_2011_4_creance,f,account_financial_report_52
+lu_2011_account_41111,41111,Ventes de marchandises et de prestations de services,lu_2011_account_4111,other,account_type_2011_4_creance,f,
+lu_2011_account_41112,41112,Prêts et avances,lu_2011_account_4111,other,account_type_2011_4_creance,f,
+lu_2011_account_41113,41113,Intérêts courus,lu_2011_account_4111,other,account_type_2011_4_creance,f,
+lu_2011_account_41114,41114,Dividendes à recevoir,lu_2011_account_4111,other,account_type_2011_4_creance,f,
+lu_2011_account_41118,41118,Autres créances,lu_2011_account_4111,other,account_type_2011_4_creance,f,
+lu_2011_account_41119,41119,Corrections de valeur,lu_2011_account_4111,other,account_type_2011_4_creance,f,
+lu_2011_account_4112,4112,Créances dont la durée résiduelle est supérieure à un an,lu_2011_account_411,view,account_type_2011_4_creance,f,account_financial_report_53
+lu_2011_account_41121,41121,Ventes de marchandises et de prestations de services,lu_2011_account_4112,other,account_type_2011_4_creance,f,
+lu_2011_account_41122,41122,Prêts et avances,lu_2011_account_4112,other,account_type_2011_4_creance,f,
+lu_2011_account_41123,41123,Intérêts courus,lu_2011_account_4112,other,account_type_2011_4_creance,f,
+lu_2011_account_41124,41124,Dividendes à recevoir,lu_2011_account_4112,other,account_type_2011_4_creance,f,
+lu_2011_account_41128,41128,Autres créances,lu_2011_account_4112,other,account_type_2011_4_creance,f,
+lu_2011_account_41129,41129,Corrections de valeur,lu_2011_account_4112,other,account_type_2011_4_creance,f,
+lu_2011_account_412,412,Créances sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_41,view,account_type_2011_4_creance,f,
+lu_2011_account_4121,4121,Créances dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_412,view,account_type_2011_4_creance,f,account_financial_report_55
+lu_2011_account_41211,41211,Ventes de marchandises et de prestations de service,lu_2011_account_4121,other,account_type_2011_4_creance,f,
+lu_2011_account_41212,41212,Prêts et avances,lu_2011_account_4121,other,account_type_2011_4_creance,f,
+lu_2011_account_41213,41213,Intérêts courus,lu_2011_account_4121,other,account_type_2011_4_creance,f,
+lu_2011_account_41214,41214,Dividendes à recevoir,lu_2011_account_4121,other,account_type_2011_4_creance,f,
+lu_2011_account_41218,41218,Autres créances,lu_2011_account_4121,other,account_type_2011_4_creance,f,
+lu_2011_account_41219,41219,Corrections de valeur,lu_2011_account_4121,other,account_type_2011_4_creance,f,
+lu_2011_account_4122,4122,Créances dont la durée résiduelle est supérieure à un an,lu_2011_account_412,view,account_type_2011_4_creance,f,account_financial_report_56
+lu_2011_account_41221,41221,Ventes de marchandises et de prestations de service,lu_2011_account_4122,other,account_type_2011_4_creance,f,
+lu_2011_account_41222,41222,Prêts et avances,lu_2011_account_4122,other,account_type_2011_4_creance,f,
+lu_2011_account_41223,41223,Intérêts courus,lu_2011_account_4122,other,account_type_2011_4_creance,f,
+lu_2011_account_41224,41224,Dividendes à recevoir,lu_2011_account_4122,other,account_type_2011_4_creance,f,
+lu_2011_account_41228,41228,Autres créances,lu_2011_account_4122,other,account_type_2011_4_creance,f,
+lu_2011_account_41229,41229,Corrections de valeur,lu_2011_account_4122,other,account_type_2011_4_creance,f,
+lu_2011_account_42,42,Autres créances,lu_2011_account_4,view,account_type_2011_4_creance,f,
+lu_2011_account_421,421,Autres créances dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_42,view,account_type_2011_4_creance,f,account_financial_report_58
+lu_2011_account_4211,4211,Personnel – Avances et acomptes,lu_2011_account_421,view,account_type_2011_4_creance,f,
+lu_2011_account_42111,42111,Avances et acomptes,lu_2011_account_4211,other,account_type_2011_4_creance,f,
+lu_2011_account_42119,42119,Corrections de valeur,lu_2011_account_4211,other,account_type_2011_4_creance,f,
+lu_2011_account_4212,4212,Créances sur associés ou actionnaires,lu_2011_account_421,view,account_type_2011_4_creance,f,
+lu_2011_account_42121,42121,Montant principal,lu_2011_account_4212,other,account_type_2011_4_creance,f,
+lu_2011_account_42122,42122,Intérêts courus,lu_2011_account_4212,other,account_type_2011_4_creance,f,
+lu_2011_account_42129,42129,Corrections de valeur sur créances,lu_2011_account_4212,other,account_type_2011_4_creance,f,
+lu_2011_account_4213,4213,Etat – Subventions à recevoir,lu_2011_account_421,view,account_type_2011_4_creance,f,
+lu_2011_account_42131,42131,Subventions d'investissement,lu_2011_account_4213,other,account_type_2011_4_creance,f,
+lu_2011_account_42132,42132,Subventions d'exploitation,lu_2011_account_4213,other,account_type_2011_4_creance,f,
+lu_2011_account_42138,42138,Autres subventions,lu_2011_account_4213,other,account_type_2011_4_creance,f,
+lu_2011_account_4214,4214,Administration des Contributions Directes (ACD),lu_2011_account_421,other,account_type_2011_4_creance,f,
+lu_2011_account_4215,4215,Administration des Douanes et Accises (ADA),lu_2011_account_421,other,account_type_2011_4_creance,f,
+lu_2011_account_4216,4216,Administration de l'Enregistrement et des Domaines (AED),lu_2011_account_421,view,account_type_2011_4_creance,f,
+lu_2011_account_42161,42161,Taxe sur la valeur ajoutée – TVA,lu_2011_account_4216,view,account_type_2011_4_creance,f,
+lu_2011_account_421611,421611,TVA en amont,lu_2011_account_42161,other,account_type_2011_4_creance,f,
+lu_2011_account_421612,421612,TVA à recevoir,lu_2011_account_42161,other,account_type_2011_4_creance,f,
+lu_2011_account_421613,421613,TVA acomptes versés,lu_2011_account_42161,other,account_type_2011_4_creance,f,
+lu_2011_account_421618,421618,TVA – Autres créances,lu_2011_account_42161,other,account_type_2011_4_creance,f,
+lu_2011_account_42162,42162,Impôts indirects,lu_2011_account_4216,view,account_type_2011_4_creance,f,
+lu_2011_account_421621,421621,Droits d'enregistrement,lu_2011_account_42162,other,account_type_2011_4_creance,f,
+lu_2011_account_421622,421622,Taxe d'abonnement,lu_2011_account_42162,other,account_type_2011_4_creance,f,
+lu_2011_account_421623,421623,Droits d'hypothèques,lu_2011_account_42162,other,account_type_2011_4_creance,f,
+lu_2011_account_421624,421624,Droits de timbre,lu_2011_account_42162,other,account_type_2011_4_creance,f,
+lu_2011_account_421628,421628,Autres impôts indirects,lu_2011_account_42162,other,account_type_2011_4_creance,f,
+lu_2011_account_42168,42168,AED – Autres créances,lu_2011_account_4216,other,account_type_2011_4_creance,f,
+lu_2011_account_4217,4217,Créances sur la sécurité sociale et autres organismes sociaux,lu_2011_account_421,view,account_type_2011_4_creance,f,
+lu_2011_account_42171,42171,Centre Commun de Sécurité Sociale (CCSS),lu_2011_account_4217,other,account_type_2011_4_creance,f,
+lu_2011_account_42172,42172,Mutualité des employeurs,lu_2011_account_4217,other,account_type_2011_4_creance,f,
+lu_2011_account_42178,42178,Autres organismes sociaux,lu_2011_account_4217,other,account_type_2011_4_creance,f,
+lu_2011_account_4218,4218,Créances diverses,lu_2011_account_421,view,account_type_2011_4_creance,f,
+lu_2011_account_42181,42181,Impôts étrangers,lu_2011_account_4218,view,account_type_2011_4_creance,f,
+lu_2011_account_421811,421811,TVA étrangères,lu_2011_account_42181,other,account_type_2011_4_creance,f,
+lu_2011_account_421818,421818,Autres impôts étrangers,lu_2011_account_42181,other,account_type_2011_4_creance,f,
+lu_2011_account_42188,42188,Autres créances diverses,lu_2011_account_4218,other,account_type_2011_4_creance,f,
+lu_2011_account_42189,42189,Corrections de valeur,lu_2011_account_4218,other,account_type_2011_4_creance,f,
+lu_2011_account_422,422,Autres créances dont la durée résiduelle est supérieure à un an,lu_2011_account_42,view,account_type_2011_4_creance,f,account_financial_report_59
+lu_2011_account_4221,4221,Personnel – Avances et acomptes,lu_2011_account_422,view,account_type_2011_4_creance,f,
+lu_2011_account_42211,42211,Avances et acomptes,lu_2011_account_4221,other,account_type_2011_4_creance,f,
+lu_2011_account_42219,42219,Corrections de valeur,lu_2011_account_4221,other,account_type_2011_4_creance,f,
+lu_2011_account_4222,4222,Associés ou actionnaires,lu_2011_account_422,view,account_type_2011_4_creance,f,
+lu_2011_account_42221,42221,Montant principal,lu_2011_account_4222,other,account_type_2011_4_creance,f,
+lu_2011_account_42222,42222,Intérêts courus,lu_2011_account_4222,other,account_type_2011_4_creance,f,
+lu_2011_account_42229,42229,Corrections de valeur sur créances,lu_2011_account_4222,other,account_type_2011_4_creance,f,
+lu_2011_account_4223,4223,Etat – Subventions à recevoir,lu_2011_account_422,view,account_type_2011_4_creance,f,
+lu_2011_account_42231,42231,Subventions d'investissement,lu_2011_account_4223,other,account_type_2011_4_creance,f,
+lu_2011_account_42232,42232,Subventions d'exploitation,lu_2011_account_4223,other,account_type_2011_4_creance,f,
+lu_2011_account_42238,42238,Autres subventions,lu_2011_account_4223,other,account_type_2011_4_creance,f,
+lu_2011_account_4224,4224,Administration des Contributions Directes (ACD),lu_2011_account_422,other,account_type_2011_4_creance,f,
+lu_2011_account_4225,4225,Administration des Douanes et Accises (ADA),lu_2011_account_422,other,account_type_2011_4_creance,f,
+lu_2011_account_4226,4226,Administration de l'Enregistrement et des Domaines (AED),lu_2011_account_422,view,account_type_2011_4_creance,f,
+lu_2011_account_42261,42261,Taxe sur la valeur ajoutée – TVA,lu_2011_account_4226,view,account_type_2011_4_creance,f,
+lu_2011_account_422611,422611,TVA en amont,lu_2011_account_42261,view,account_type_2011_4_creance,f,
+lu_2011_account_4226111,4226111,TVA en amont – Pays,lu_2011_account_422611,other,account_type_2011_4_creance,f,
+lu_2011_account_4226112,4226112,TVA en amont – Intracommunautaire,lu_2011_account_422611,other,account_type_2011_4_creance,f,
+lu_2011_account_4226113,4226113,TVA en amont – Triangulaire,lu_2011_account_422611,other,account_type_2011_4_creance,f,
+lu_2011_account_4226114,4226114,TVA en amont – Exonérations spéciales,lu_2011_account_422611,other,account_type_2011_4_creance,f,
+lu_2011_account_422612,422612,TVA à recevoir,lu_2011_account_42261,other,account_type_2011_4_creance,f,
+lu_2011_account_422613,422613,TVA acomptes versés,lu_2011_account_42261,other,account_type_2011_4_creance,f,
+lu_2011_account_422618,422618,TVA – Autres créances,lu_2011_account_42261,other,account_type_2011_4_creance,f,
+lu_2011_account_42262,42262,Impôts indirects,lu_2011_account_4226,view,account_type_2011_4_creance,f,
+lu_2011_account_422621,422621,Droits d'enregistrement,lu_2011_account_42262,other,account_type_2011_4_creance,f,
+lu_2011_account_422622,422622,Taxe d'abonnement,lu_2011_account_42262,other,account_type_2011_4_creance,f,
+lu_2011_account_422623,422623,Droits d'hypothèques,lu_2011_account_42262,other,account_type_2011_4_creance,f,
+lu_2011_account_422624,422624,Droits de timbre,lu_2011_account_42262,other,account_type_2011_4_creance,f,
+lu_2011_account_422628,422628,Autres impôts indirects,lu_2011_account_42262,other,account_type_2011_4_creance,f,
+lu_2011_account_4227,4227,Créances sur la sécurité sociale et autres organismes sociaux,lu_2011_account_422,view,account_type_2011_4_creance,f,
+lu_2011_account_42271,42271,Centre Commun de Sécurité Sociale (CCSS),lu_2011_account_4227,other,account_type_2011_4_creance,f,
+lu_2011_account_42272,42272,Mutualité des employeurs,lu_2011_account_4227,other,account_type_2011_4_creance,f,
+lu_2011_account_42278,42278,Autres organismes sociaux,lu_2011_account_4227,other,account_type_2011_4_creance,f,
+lu_2011_account_4228,4228,Créances diverses,lu_2011_account_422,view,account_type_2011_4_creance,f,
+lu_2011_account_42281,42281,Impôts étrangers,lu_2011_account_4228,view,account_type_2011_4_creance,f,
+lu_2011_account_422811,422811,TVA étrangères,lu_2011_account_42281,other,account_type_2011_4_creance,f,
+lu_2011_account_422818,422818,Autres impôts étrangers,lu_2011_account_42281,other,account_type_2011_4_creance,f,
+lu_2011_account_42288,42288,Autres créances diverses,lu_2011_account_4228,other,account_type_2011_4_creance,f,
+lu_2011_account_42289,42289,Corrections de valeur sur autres créances diverses,lu_2011_account_4228,other,account_type_2011_4_creance,f,
+lu_2011_account_43,43,Acomptes reçus sur commandes pour autant qu'ils ne sont pas déduits des stocks de façon distincte,lu_2011_account_4,view,account_type_2011_4_dette,f,
+lu_2011_account_431,431,Acomptes reçus dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_43,other,account_type_2011_4_dette,f,account_financial_report_98
+lu_2011_account_432,432,Acomptes reçus dont la durée résiduelle est supérieure à un an,lu_2011_account_43,other,account_type_2011_4_dette,f,account_financial_report_99
+lu_2011_account_44,44,Dettes sur achats et prestations de services et dettes représentées par des effets de commerce,lu_2011_account_4,view,account_type_2011_4_dette,f,
+lu_2011_account_441,441,Dettes sur achats et prestations de services,lu_2011_account_44,view,account_type_2011_4_dette,f,
+lu_2011_account_4411,4411,Dettes sur achats et prestations de services dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_441,view,account_type_2011_4_dette,f,account_financial_report_101
+lu_2011_account_44111,44111,Fournisseurs,lu_2011_account_4411,payable,account_type_2011_4_dette,t,
+lu_2011_account_44112,44112,Fournisseurs – Factures non parvenues,lu_2011_account_4411,payable,account_type_2011_4_dette,t,
+lu_2011_account_44113,44113,Fournisseurs débiteurs,lu_2011_account_4411,view,account_type_2011_4_dette,f,
+lu_2011_account_441131,441131,Fournisseurs – Avances et acomptes versés sur commandes,lu_2011_account_44113,payable,account_type_2011_4_dette,t,
+lu_2011_account_441132,441132,Fournisseurs – Créances pour emballages et matériel à rendre,lu_2011_account_44113,payable,account_type_2011_4_dette,t,
+lu_2011_account_441133,441133,Fournisseurs – Autres avoirs,lu_2011_account_44113,payable,account_type_2011_4_dette,t,
+lu_2011_account_441134,441134,"Rabais, remises, ristournes à obtenir et autres avoirs non encore reçus",lu_2011_account_44113,payable,account_type_2011_4_dette,t,
+lu_2011_account_4412,4412,Dettes sur achats et prestations de services dont la durée résiduelle est supérieure à un an,lu_2011_account_441,view,account_type_2011_4_dette,f,account_financial_report_102
+lu_2011_account_44121,44121,Fournisseurs,lu_2011_account_4412,payable,account_type_2011_4_dette,t,
+lu_2011_account_44122,44122,Fournisseurs – Factures non parvenues,lu_2011_account_4412,payable,account_type_2011_4_dette,t,
+lu_2011_account_44123,44123,Fournisseurs débiteurs,lu_2011_account_4412,view,account_type_2011_4_dette,f,
+lu_2011_account_441231,441231,Fournisseurs – Avances et acomptes versés sur commandes,lu_2011_account_44123,payable,account_type_2011_4_dette,t,
+lu_2011_account_441232,441232,Fournisseurs – Créances pour emballages et matériel à rendre,lu_2011_account_44123,payable,account_type_2011_4_dette,t,
+lu_2011_account_441233,441233,Fournisseurs – Autres avoirs,lu_2011_account_44123,payable,account_type_2011_4_dette,t,
+lu_2011_account_441234,441234,"Rabais, remises, ristournes à obtenir et autres avoirs non encore reçus",lu_2011_account_44123,payable,account_type_2011_4_dette,t,
+lu_2011_account_442,442,Dettes représentées par des effets de commerce,lu_2011_account_44,view,account_type_2011_4_dette,f,
+lu_2011_account_4421,4421,Dettes représentées par des effets de commerce dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_442,other,account_type_2011_4_dette,f,account_financial_report_104
+lu_2011_account_4422,4422,Dettes représentées par des effets de commerce dont la durée résiduelle est supérieure à un an,lu_2011_account_442,other,account_type_2011_4_dette,f,account_financial_report_105
+lu_2011_account_45,45,Dettes envers des entreprises liées et des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_4,view,account_type_2011_4_dette,f,
+lu_2011_account_451,451,Dettes envers des entreprises liées,lu_2011_account_45,view,account_type_2011_4_dette,f,
+lu_2011_account_4511,4511,Dettes envers des entreprises liées dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_451,view,account_type_2011_4_dette,f,account_financial_report_107
+lu_2011_account_45111,45111,Ventes de marchandises et de prestations de services,lu_2011_account_4511,other,account_type_2011_4_dette,f,
+lu_2011_account_45112,45112,Prêts et avances,lu_2011_account_4511,other,account_type_2011_4_dette,f,
+lu_2011_account_45113,45113,Intérêts courus,lu_2011_account_4511,other,account_type_2011_4_dette,f,
+lu_2011_account_45114,45114,Dividendes à payer,lu_2011_account_4511,other,account_type_2011_4_dette,f,
+lu_2011_account_45118,45118,Autres dettes,lu_2011_account_4511,other,account_type_2011_4_dette,f,
+lu_2011_account_4512,4512,Dettes envers des entreprises liées dont la durée résiduelle est supérieure à un an,lu_2011_account_451,view,account_type_2011_4_dette,f,account_financial_report_108
+lu_2011_account_45121,45121,Ventes de marchandises et de prestations de services,lu_2011_account_4512,other,account_type_2011_4_dette,f,
+lu_2011_account_45122,45122,Prêts et avances,lu_2011_account_4512,other,account_type_2011_4_dette,f,
+lu_2011_account_45123,45123,Intérêts courus,lu_2011_account_4512,other,account_type_2011_4_dette,f,
+lu_2011_account_45124,45124,Dividendes à payer,lu_2011_account_4512,other,account_type_2011_4_dette,f,
+lu_2011_account_45128,45128,Autres dettes,lu_2011_account_4512,other,account_type_2011_4_dette,f,
+lu_2011_account_452,452,Dettes envers des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_45,view,account_type_2011_4_dette,f,
+lu_2011_account_4521,4521,Dettes envers des entreprises avec lesquelles la société a un lien de participation dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_452,view,account_type_2011_4_dette,f,account_financial_report_110
+lu_2011_account_45211,45211,Ventes de marchandises et de prestations de services,lu_2011_account_4521,other,account_type_2011_4_dette,f,
+lu_2011_account_45212,45212,Prêts et avances,lu_2011_account_4521,other,account_type_2011_4_dette,f,
+lu_2011_account_45213,45213,Intérêts courus,lu_2011_account_4521,other,account_type_2011_4_dette,f,
+lu_2011_account_45214,45214,Dividendes à payer,lu_2011_account_4521,other,account_type_2011_4_dette,f,
+lu_2011_account_45218,45218,Autres dettes,lu_2011_account_4521,other,account_type_2011_4_dette,f,
+lu_2011_account_4522,4522,Dettes envers des entreprises avec lesquelles la société a un lien de participation dont la durée résiduelle est supérieure à un an,lu_2011_account_452,view,account_type_2011_4_dette,f,account_financial_report_111
+lu_2011_account_45221,45221,Ventes de marchandises et de prestations de services,lu_2011_account_4522,other,account_type_2011_4_dette,f,
+lu_2011_account_45222,45222,Prêts et avances,lu_2011_account_4522,other,account_type_2011_4_dette,f,
+lu_2011_account_45223,45223,Intérêts courus,lu_2011_account_4522,other,account_type_2011_4_dette,f,
+lu_2011_account_45224,45224,Dividendes à payer,lu_2011_account_4522,other,account_type_2011_4_dette,f,
+lu_2011_account_45228,45228,Autres dettes,lu_2011_account_4522,other,account_type_2011_4_dette,f,
+lu_2011_account_46,46,Dettes fiscales et dettes envers la sécurité sociale,lu_2011_account_4,view,account_type_2011_4_dette,f,
+lu_2011_account_461,461,Dettes fiscales,lu_2011_account_46,view,account_type_2011_4_dette,f,account_financial_report_113
+lu_2011_account_4611,4611,Administrations communales,lu_2011_account_461,view,account_type_2011_4_dette,f,
+lu_2011_account_46111,46111,Impôts communaux,lu_2011_account_4611,other,account_type_2011_4_dette,f,
+lu_2011_account_46112,46112,Taxes communales,lu_2011_account_4611,other,account_type_2011_4_dette,f,
+lu_2011_account_4612,4612,Administration des Contributions Directes (ACD),lu_2011_account_461,view,account_type_2011_4_dette,f,
+lu_2011_account_46121,46121,Impôt sur le revenu des collectivités,lu_2011_account_4612,view,account_type_2011_4_dette,f,
+lu_2011_account_461211,461211,Impôt sur le revenu des collectivités – charge fiscale estimée,lu_2011_account_46121,other,account_type_2011_4_dette,f,
+lu_2011_account_461212,461212,Impôt sur le revenu des collectivités – dette fiscale à payer,lu_2011_account_46121,other,account_type_2011_4_dette,f,
+lu_2011_account_46122,46122,Impôt commercial,lu_2011_account_4612,view,account_type_2011_4_dette,f,
+lu_2011_account_461221,461221,Impôt commercial – charge fiscale estimée,lu_2011_account_46122,other,account_type_2011_4_dette,f,
+lu_2011_account_461222,461222,Impôt commercial – dette fiscale à payer,lu_2011_account_46122,other,account_type_2011_4_dette,f,
+lu_2011_account_46123,46123,Impôt sur la fortune,lu_2011_account_4612,view,account_type_2011_4_dette,f,
+lu_2011_account_461231,461231,Impôt sur la fortune – charge fiscale estimée,lu_2011_account_46123,other,account_type_2011_4_dette,f,
+lu_2011_account_461232,461232,Impôt sur la fortune – dette fiscale à payer,lu_2011_account_46123,other,account_type_2011_4_dette,f,
+lu_2011_account_46124,46124,Retenue d'impôt sur traitements et salaires,lu_2011_account_4612,other,account_type_2011_4_dette,f,
+lu_2011_account_46125,46125,Retenue d'impôt sur revenus de capitaux mobiliers,lu_2011_account_4612,other,account_type_2011_4_dette,f,
+lu_2011_account_46126,46126,Retenue d'impôt sur les tantièmes,lu_2011_account_4612,other,account_type_2011_4_dette,f,
+lu_2011_account_46128,46128,ACD – Autres dettes,lu_2011_account_4612,other,account_type_2011_4_dette,f,
+lu_2011_account_4613,4613,Administration des Douanes et Accises (ADA),lu_2011_account_461,view,account_type_2011_4_dette,f,
+lu_2011_account_46131,46131,Taxe sur les véhicules automoteurs,lu_2011_account_4613,other,account_type_2011_4_dette,f,
+lu_2011_account_46132,46132,Droits d'accises et taxe de consommation,lu_2011_account_4613,other,account_type_2011_4_dette,f,
+lu_2011_account_46138,46138,ADA – Autres dettes,lu_2011_account_4613,other,account_type_2011_4_dette,f,
+lu_2011_account_4614,4614,Administration de l'Enregistrement et des Domaines (AED),lu_2011_account_461,view,account_type_2011_4_dette,f,
+lu_2011_account_46141,46141,Taxe sur la valeur ajoutée – TVA,lu_2011_account_4614,view,account_type_2011_4_dette,f,
+lu_2011_account_461411,461411,TVA en aval,lu_2011_account_46141,view,account_type_2011_4_dette,f,
+lu_2011_account_4614111,4614111,TVA en aval – Pays,lu_2011_account_461411,other,account_type_2011_4_dette,f,
+lu_2011_account_4614112,4614112,TVA en aval – Intracommunautaire,lu_2011_account_461411,other,account_type_2011_4_dette,f,
+lu_2011_account_4614113,4614113,TVA en aval – Extracommunautaire,lu_2011_account_461411,other,account_type_2011_4_dette,f,
+lu_2011_account_4614114,4614114,TVA en aval – Triangulaire,lu_2011_account_461411,other,account_type_2011_4_dette,f,
+lu_2011_account_4614115,4614115,TVA en aval – Exonérations spéciales,lu_2011_account_461411,other,account_type_2011_4_dette,f,
+lu_2011_account_461412,461412,TVA due,lu_2011_account_46141,other,account_type_2011_4_dette,f,
+lu_2011_account_461413,461413,TVA acomptes reçus,lu_2011_account_46141,other,account_type_2011_4_dette,f,
+lu_2011_account_461418,461418,TVA – Autres dettes,lu_2011_account_46141,other,account_type_2011_4_dette,f,
+lu_2011_account_46142,46142,Impôts indirects,lu_2011_account_4614,view,account_type_2011_4_dette,f,
+lu_2011_account_461421,461421,Droits d'enregistrement,lu_2011_account_46142,other,account_type_2011_4_dette,f,
+lu_2011_account_461422,461422,Taxe d'abonnement,lu_2011_account_46142,other,account_type_2011_4_dette,f,
+lu_2011_account_461423,461423,Droits d'hypothèques,lu_2011_account_46142,other,account_type_2011_4_dette,f,
+lu_2011_account_461424,461424,Droits de timbre,lu_2011_account_46142,other,account_type_2011_4_dette,f,
+lu_2011_account_461428,461428,Autres impôts indirects,lu_2011_account_46142,other,account_type_2011_4_dette,f,
+lu_2011_account_4615,4615,Administrations fiscales étrangères,lu_2011_account_461,other,account_type_2011_4_dette,f,
+lu_2011_account_462,462,Dettes au titre de la sécurité sociale,lu_2011_account_46,view,account_type_2011_4_dette,f,account_financial_report_114
+lu_2011_account_4621,4621,Centre Commun de Sécurité Sociale (CCSS),lu_2011_account_462,other,account_type_2011_4_dette,f,
+lu_2011_account_4622,4622,Organismes de sécurité sociale étrangers,lu_2011_account_462,other,account_type_2011_4_dette,f,
+lu_2011_account_4628,4628,Autres organismes sociaux,lu_2011_account_462,other,account_type_2011_4_dette,f,
+lu_2011_account_47,47,Autres dettes,lu_2011_account_4,view,account_type_2011_4_dette,f,
+lu_2011_account_471,471,Autres dettes dont la durée résiduelle est inférieure ou égale à un an,lu_2011_account_47,view,account_type_2011_4_dette,f,account_financial_report_116
+lu_2011_account_4711,4711,Dépôts et cautionnements reçus,lu_2011_account_471,view,account_type_2011_4_dette,f,
+lu_2011_account_47111,47111,Dépôts,lu_2011_account_4711,other,account_type_2011_4_dette,f,
+lu_2011_account_47112,47112,Cautionnements,lu_2011_account_4711,other,account_type_2011_4_dette,f,
+lu_2011_account_47113,47113,Intérêts courus,lu_2011_account_4711,other,account_type_2011_4_dette,f,
+lu_2011_account_4712,4712,Dettes envers associés et actionnaires,lu_2011_account_471,view,account_type_2011_4_dette,f,
+lu_2011_account_47121,47121,Montant principal,lu_2011_account_4712,other,account_type_2011_4_dette,f,
+lu_2011_account_47122,47122,Intérêts courus,lu_2011_account_4712,other,account_type_2011_4_dette,f,
+lu_2011_account_4713,4713,"Dettes envers administrateurs, gérants et commissaires",lu_2011_account_471,other,account_type_2011_4_dette,f,
+lu_2011_account_4714,4714,Dettes envers le personnel,lu_2011_account_471,view,account_type_2011_4_dette,f,
+lu_2011_account_47141,47141,Personnel – Rémunérations dues,lu_2011_account_4714,other,account_type_2011_4_dette,f,
+lu_2011_account_47142,47142,Personnel – Dépôts,lu_2011_account_4714,other,account_type_2011_4_dette,f,
+lu_2011_account_47143,47143,"Personnel – Oppositions, saisies",lu_2011_account_4714,other,account_type_2011_4_dette,f,
+lu_2011_account_47148,47148,Personnel – Autres,lu_2011_account_4714,other,account_type_2011_4_dette,f,
+lu_2011_account_4715,4715,Etat – Droits d'émission à restituer,lu_2011_account_471,other,account_type_2011_4_dette,f,
+lu_2011_account_4718,4718,Autres dettes diverses,lu_2011_account_471,other,account_type_2011_4_dette,f,
+lu_2011_account_472,472,Autres dettes dont la durée résiduelle est supérieure à un an,lu_2011_account_47,view,account_type_2011_4_dette,f,account_financial_report_117
+lu_2011_account_4721,4721,Dépôts et cautionnements reçus,lu_2011_account_472,view,account_type_2011_4_dette,f,
+lu_2011_account_47211,47211,Dépôts,lu_2011_account_4721,other,account_type_2011_4_dette,f,
+lu_2011_account_47212,47212,Cautionnements,lu_2011_account_4721,other,account_type_2011_4_dette,f,
+lu_2011_account_47213,47213,Intérêts courus,lu_2011_account_4721,other,account_type_2011_4_dette,f,
+lu_2011_account_4722,4722,Dettes envers associés et actionnaires,lu_2011_account_472,view,account_type_2011_4_dette,f,
+lu_2011_account_47221,47221,Montant principal,lu_2011_account_4722,other,account_type_2011_4_dette,f,
+lu_2011_account_47222,47222,Intérêts courus,lu_2011_account_4722,other,account_type_2011_4_dette,f,
+lu_2011_account_4723,4723,"Dettes envers administrateurs, gérants et commissaires",lu_2011_account_472,other,account_type_2011_4_dette,f,
+lu_2011_account_4724,4724,Dettes envers le personnel,lu_2011_account_472,view,account_type_2011_4_dette,f,
+lu_2011_account_47241,47241,Personnel – Rémunérations dues,lu_2011_account_4724,other,account_type_2011_4_dette,f,
+lu_2011_account_47242,47242,Personnel – Dépôts,lu_2011_account_4724,other,account_type_2011_4_dette,f,
+lu_2011_account_47243,47243,"Personnel – Oppositions, saisies",lu_2011_account_4724,other,account_type_2011_4_dette,f,
+lu_2011_account_47248,47248,Personnel – Autres,lu_2011_account_4724,other,account_type_2011_4_dette,f,
+lu_2011_account_4726,4726,Etat – Droits d'émission à restituer,lu_2011_account_472,other,account_type_2011_4_dette,f,
+lu_2011_account_4728,4728,Autres dettes diverses,lu_2011_account_472,other,account_type_2011_4_dette,f,
+lu_2011_account_48,48,Comptes de régularisation,lu_2011_account_4,view,account.data_account_type_view,f,
+lu_2011_account_481,481,Charges à reporter,lu_2011_account_48,other,account_type_2011_4_regul_actif,f,account_financial_report_65
+lu_2011_account_482,482,Produits à reporter,lu_2011_account_48,other,account_type_2011_4_regul_passif,f,account_financial_report_118
+lu_2011_account_483,483,Etat - Droits d'émission alloués,lu_2011_account_48,other,account_type_2011_4_regul_passif,f,account_financial_report_118
+lu_2011_account_484,484,Comptes transitoires ou d'attente – Actif,lu_2011_account_48,other,account_type_2011_4_regul_actif,f,account_financial_report_65
+lu_2011_account_485,485,Comptes transitoires ou d'attente – Passif,lu_2011_account_48,other,account_type_2011_4_regul_passif,f,account_financial_report_118
+lu_2011_account_486,486,Comptes de liaison – Actif,lu_2011_account_48,other,account_type_2011_4_regul_actif,f,account_financial_report_65
+lu_2011_account_487,487,Comptes de liaison – Passif,lu_2011_account_48,other,account_type_2011_4_regul_passif,f,account_financial_report_118
+lu_2011_account_5,5,CLASSE 5 - COMPTES FINANCIERS,lu_2011_account_bilan,view,account.data_account_type_view,f,
+lu_2011_account_50,50,Valeurs mobilières,lu_2011_account_5,view,account_type_2011_5_disponibilite,f,
+lu_2011_account_501,501,Parts dans des entreprises liées,lu_2011_account_50,other,account_type_2011_5_disponibilite,f,account_financial_report_61
+lu_2011_account_502,502,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_50,other,account_type_2011_5_disponibilite,f,account_financial_report_61
+lu_2011_account_503,503,Actions propres ou parts propres,lu_2011_account_50,other,account_type_2011_5_disponibilite,f,account_financial_report_62
+lu_2011_account_508,508,Autres valeurs mobilières,lu_2011_account_50,view,account_type_2011_5_disponibilite,f,account_financial_report_63
+lu_2011_account_5081,5081,Actions – Titres cotés,lu_2011_account_508,other,account_type_2011_5_disponibilite,f,
+lu_2011_account_5082,5082,Actions – Titres non cotés,lu_2011_account_508,other,account_type_2011_5_disponibilite,f,
+lu_2011_account_5083,5083,Obligations et autres titres de créance émis par la société et rachetés par elle,lu_2011_account_508,other,account_type_2011_5_disponibilite,f,
+lu_2011_account_5084,5084,Obligations – Titres cotés,lu_2011_account_508,other,account_type_2011_5_disponibilite,f,
+lu_2011_account_5085,5085,Obligations – Titres non cotés,lu_2011_account_508,other,account_type_2011_5_disponibilite,f,
+lu_2011_account_5088,5088,Autres valeurs mobilières diverses,lu_2011_account_508,other,account_type_2011_5_disponibilite,f,
+lu_2011_account_51,51,"Avoirs en banques, avoirs en comptes de chèques postaux, chèques et encaisse",lu_2011_account_5,view,account_type_2011_5_disponibilite,f,account_financial_report_64
+lu_2011_account_511,511,Chèques à encaisser,lu_2011_account_51,other,account_type_2011_5_disponibilite,f,
+lu_2011_account_512,512,Valeurs à l'encaissement,lu_2011_account_51,other,account_type_2011_5_disponibilite,f,
+lu_2011_account_513,513,Banques,lu_2011_account_51,view,account_type_2011_5_disponibilite,f,
+lu_2011_account_5131,5131,Banques comptes courants,lu_2011_account_513,view,account_type_2011_5_disponibilite,f,
+lu_2011_account_5132,5132,Banques comptes à terme,lu_2011_account_513,view,account_type_2011_5_disponibilite,f,
+lu_2011_account_514,514,Compte chèque postal,lu_2011_account_51,other,account_type_2011_5_disponibilite,f,
+lu_2011_account_516,516,Caisse,lu_2011_account_51,other,account_type_2011_5_disponibilite,f,
+lu_2011_account_517,517,Virements internes,lu_2011_account_51,other,account_type_2011_5_disponibilite,t,
+lu_2011_account_518,518,Autres avoirs,lu_2011_account_51,other,account_type_2011_5_disponibilite,f,
+lu_2011_account_resultat,resultat,TOTAL CLASSES 6 ET 7,lu_2011_account_0,view,account.data_account_type_view,,"account_financial_report_77,account_financial_report_161"
+lu_2011_account_6,6,CLASSE 6 - COMPTES DE CHARGES,lu_2011_account_resultat,view,account.data_account_type_view,f,
+lu_2011_account_60,60,Consommation de marchandises et de matières premières et consommables,lu_2011_account_6,view,account_type_2011_6_charge_exploitation,f,account_financial_report_120
+lu_2011_account_601,601,Matières premières,lu_2011_account_60,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_602,602,Matières consommables,lu_2011_account_60,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_603,603,Fournitures consommables,lu_2011_account_60,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6031,6031,Combustibles,lu_2011_account_603,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_60311,60311,Solides,lu_2011_account_6031,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_60312,60312,Liquides,lu_2011_account_6031,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_60313,60313,Gaz comprimé,lu_2011_account_6031,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6032,6032,Produits d'entretien,lu_2011_account_603,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6033,6033,Fournitures d'atelier et d'usine,lu_2011_account_603,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6034,6034,Fournitures de magasin,lu_2011_account_603,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6035,6035,Fournitures de bureau,lu_2011_account_603,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6036,6036,Carburants,lu_2011_account_603,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6037,6037,Lubrifiants,lu_2011_account_603,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6038,6038,Autres fournitures consommables,lu_2011_account_603,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_604,604,Emballages,lu_2011_account_60,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6041,6041,Emballages non récupérables,lu_2011_account_604,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6042,6042,Emballages récupérables,lu_2011_account_604,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6043,6043,Emballages à usage mixte,lu_2011_account_604,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_605,605,Approvisionnements,lu_2011_account_60,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_606,606,Achats de biens destinés à la revente,lu_2011_account_60,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6061,6061,Terrains,lu_2011_account_606,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6062,6062,Immeubles,lu_2011_account_606,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6063,6063,Marchandises,lu_2011_account_606,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_607,607,Variation des stocks,lu_2011_account_60,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6071,6071,Variation des stocks de matières premières,lu_2011_account_607,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6072,6072,Variation des stocks de matières consommables,lu_2011_account_607,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6073,6073,Variation des stocks de fournitures consommables,lu_2011_account_607,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6074,6074,Variation des stocks d'emballages,lu_2011_account_607,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6075,6075,Variation des stocks d'approvisionnements,lu_2011_account_607,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6076,6076,Variation des stocks de biens destinés à la revente,lu_2011_account_607,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_608,608,Achats non stockés et achats incorporés aux ouvrages et produits,lu_2011_account_60,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6081,6081,Achats non stockés de matières et fournitures,lu_2011_account_608,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_60811,60811,Fournitures non stockables,lu_2011_account_6081,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_608111,608111,Eau,lu_2011_account_60811,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_608112,608112,Electricité,lu_2011_account_60811,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_608113,608113,Gaz de canalisation,lu_2011_account_60811,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_60812,60812,Fournitures d'entretien et de petit équipement,lu_2011_account_6081,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_60813,60813,Fournitures administratives,lu_2011_account_6081,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_60814,60814,Carburants,lu_2011_account_6081,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_60815,60815,Lubrifiants,lu_2011_account_6081,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_60816,60816,Vêtements professionnels,lu_2011_account_6081,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_60818,60818,Autres matières et fournitures non stockées,lu_2011_account_6081,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6082,6082,Achats incorporés aux ouvrages et produits,lu_2011_account_608,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_60821,60821,Achats d'études et prestations de service (incorporés aux ouvrages et produits),lu_2011_account_6082,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_608211,608211,Travail à façon,lu_2011_account_60821,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_608212,608212,Recherche et développement,lu_2011_account_60821,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_608213,608213,Frais d'architectes et d'ingénieurs,lu_2011_account_60821,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_60822,60822,"Achats de matériel, équipements, pièces détachées et travaux (incorporés aux ouvrages et produits)",lu_2011_account_6082,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_60828,60828,Autres achats d'études et de prestations de service,lu_2011_account_6082,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_609,609,"Rabais, remises et ristournes obtenus",lu_2011_account_60,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6091,6091,Matières premières,lu_2011_account_609,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6092,6092,Matières consommables,lu_2011_account_609,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6093,6093,Fournitures consommables,lu_2011_account_609,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6094,6094,Emballages,lu_2011_account_609,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6095,6095,Approvisionnements,lu_2011_account_609,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6096,6096,Achats de biens destinés à la revente,lu_2011_account_609,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6098,6098,Achats non stockés et achats incorporés aux ouvrages et produits,lu_2011_account_609,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6099,6099,"Rabais, remises et ristournes non affectés",lu_2011_account_609,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61,61,Autres charges externes,lu_2011_account_6,view,account_type_2011_6_charge_exploitation,f,account_financial_report_121
+lu_2011_account_611,611,Loyers et charges locatives,lu_2011_account_61,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6111,6111,Locations immobilières,lu_2011_account_611,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61111,61111,Terrains,lu_2011_account_6111,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61112,61112,Bâtiments,lu_2011_account_6111,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6112,6112,Locations mobilières,lu_2011_account_611,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61121,61121,Installations techniques et machines,lu_2011_account_6112,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61122,61122,"Autres installations, outillages et machines",lu_2011_account_6112,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61123,61123,Matériel roulant,lu_2011_account_6112,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6113,6113,Charges locatives et de copropriété,lu_2011_account_611,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6114,6114,Leasing immobilier,lu_2011_account_611,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61141,61141,Terrains,lu_2011_account_6114,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61142,61142,Bâtiments,lu_2011_account_6114,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6115,6115,Leasing mobilier,lu_2011_account_611,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61151,61151,Installations techniques et machines,lu_2011_account_6115,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61152,61152,"Autres installations, outillages et machines",lu_2011_account_6115,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61153,61153,Matériel roulant,lu_2011_account_6115,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6116,6116,Malis sur emballages,lu_2011_account_611,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_612,612,"Sous-traitance, entretiens et réparations",lu_2011_account_61,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6121,6121,"Sous-traitance générale (non incorporée directement aux ouvrages, travaux et produits)",lu_2011_account_612,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6122,6122,Entretien et réparations,lu_2011_account_612,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61221,61221,Sur installations techniques et machines,lu_2011_account_6122,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61222,61222,"Sur autres installations, outillages et machines",lu_2011_account_6122,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61223,61223,Sur matériel roulant,lu_2011_account_6122,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6123,6123,Contrats de maintenance,lu_2011_account_612,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6124,6124,Etudes et recherches (non incorporées dans les produits),lu_2011_account_612,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_613,613,Rémunérations d'intermédiaires et honoraires,lu_2011_account_61,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6131,6131,Commissions et courtages,lu_2011_account_613,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61311,61311,Commissions et courtages sur achats,lu_2011_account_6131,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61312,61312,Commissions et courtages sur ventes,lu_2011_account_6131,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61313,61313,Rémunérations des transitaires,lu_2011_account_6131,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6132,6132,Traitement informatique,lu_2011_account_613,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6133,6133,Services bancaires et assimilés,lu_2011_account_613,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61331,61331,"Frais sur titres (achat, vente, garde)",lu_2011_account_6133,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61332,61332,Commissions et frais sur émission d'emprunts,lu_2011_account_6133,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61333,61333,Frais de compte,lu_2011_account_6133,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61334,61334,Frais sur cartes de crédit,lu_2011_account_6133,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61335,61335,Frais sur effets,lu_2011_account_6133,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61336,61336,Rémunérations d'affacturage,lu_2011_account_6133,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61337,61337,Location de coffres,lu_2011_account_6133,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61338,61338,Autres frais et commissions bancaires (hors intérêts et frais assimilés),lu_2011_account_6133,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6134,6134,Honoraires,lu_2011_account_613,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61341,61341,Honoraires juridiques,lu_2011_account_6134,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61342,61342,Honoraires comptables et d'audit,lu_2011_account_6134,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61343,61343,Honoraires fiscaux,lu_2011_account_6134,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61348,61348,Autres honoraires,lu_2011_account_6134,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6135,6135,Frais d'actes et de contentieux,lu_2011_account_613,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6136,6136,Frais de recrutement de personnel,lu_2011_account_613,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6138,6138,Autres rémunérations d'intermédiaires et honoraires,lu_2011_account_613,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_614,614,Primes d'assurance,lu_2011_account_61,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6141,6141,Assurances sur biens de l'actif,lu_2011_account_614,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61411,61411,Bâtiments,lu_2011_account_6141,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61412,61412,Véhicules,lu_2011_account_6141,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61413,61413,Installations,lu_2011_account_6141,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61418,61418,Sur autres biens de l'actif,lu_2011_account_6141,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6142,6142,Assurances sur biens pris en location,lu_2011_account_614,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6143,6143,Assurance-transport,lu_2011_account_614,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61431,61431,sur achats,lu_2011_account_6143,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61432,61432,sur ventes,lu_2011_account_6143,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61438,61438,sur autres biens,lu_2011_account_6143,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6144,6144,Assurance risque d'exploitation,lu_2011_account_614,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6145,6145,Assurance insolvabilité clients,lu_2011_account_614,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6146,6146,Assurance responsabilité civile,lu_2011_account_614,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6148,6148,Autres assurances,lu_2011_account_614,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_615,615,Frais de marketing et de communication,lu_2011_account_61,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6151,6151,Frais de marketing et de publicité,lu_2011_account_615,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61511,61511,Annonces et insertions,lu_2011_account_6151,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61512,61512,Echantillons,lu_2011_account_6151,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61513,61513,Foires et expositions,lu_2011_account_6151,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61514,61514,Cadeaux à la clientèle,lu_2011_account_6151,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61515,61515,Catalogues et imprimés et publications,lu_2011_account_6151,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61516,61516,Dons courants,lu_2011_account_6151,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61517,61517,Sponsoring,lu_2011_account_6151,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61518,61518,Autres achats de services publicitaires,lu_2011_account_6151,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6152,6152,Frais de déplacements et de représentation,lu_2011_account_615,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61521,61521,Voyages et déplacements,lu_2011_account_6152,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_615211,615211,Direction (respectivement exploitant et associés),lu_2011_account_61521,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_615212,615212,Personnel,lu_2011_account_61521,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61522,61522,Frais de déménagement de l'entreprise,lu_2011_account_6152,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61523,61523,Missions,lu_2011_account_6152,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61524,61524,Réceptions et frais de représentation,lu_2011_account_6152,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6153,6153,Frais postaux et frais de télécommunications,lu_2011_account_615,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61531,61531,Timbres,lu_2011_account_6153,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61532,61532,Téléphone et autres frais de télécommunication,lu_2011_account_6153,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61538,61538,"Autres frais postaux (location de boîtes postales, etc.)",lu_2011_account_6153,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_616,616,Transports de biens et transports collectifs du personnel,lu_2011_account_61,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6161,6161,Transports sur achats,lu_2011_account_616,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6162,6162,Transports sur ventes,lu_2011_account_616,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6163,6163,Transports entre établissements ou chantiers,lu_2011_account_616,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6164,6164,Transports administratifs,lu_2011_account_616,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6165,6165,Transports collectifs du personnel,lu_2011_account_616,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6168,6168,Autres transports,lu_2011_account_616,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_617,617,Personnel extérieur à l'entreprise,lu_2011_account_61,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6171,6171,Personnel intérimaire,lu_2011_account_617,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6172,6172,Personnel prêté à l'entreprise,lu_2011_account_617,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_618,618,Charges externes diverses,lu_2011_account_61,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6181,6181,Documentation,lu_2011_account_618,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61811,61811,Documentation générale,lu_2011_account_6181,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_61812,61812,Documentation technique,lu_2011_account_6181,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6182,6182,"Frais de colloques, séminaires, conférences",lu_2011_account_618,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6183,6183,Elimination des déchets industriels,lu_2011_account_618,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6184,6184,Elimination de déchets non industriels,lu_2011_account_618,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6185,6185,Evacuation des eaux usées,lu_2011_account_618,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6186,6186,Frais de surveillance,lu_2011_account_618,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6187,6187,Cotisations aux associations professionnelles,lu_2011_account_618,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6188,6188,Autres charges externes diverses,lu_2011_account_618,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_619,619,"Rabais, remises et ristournes obtenus sur autres charges externes",lu_2011_account_61,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_62,62,Frais de personnel,lu_2011_account_6,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_621,621,Rémunérations des salariés,lu_2011_account_62,view,account_type_2011_6_charge_exploitation,f,account_financial_report_123
+lu_2011_account_6211,6211,Salaires bruts,lu_2011_account_621,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_62111,62111,Salaires de base,lu_2011_account_6211,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_62112,62112,Suppléments pour travail,lu_2011_account_6211,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_621121,621121,Dimanche,lu_2011_account_62112,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_621122,621122,Jours fériés légaux,lu_2011_account_62112,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_621123,621123,Heures supplémentaires,lu_2011_account_62112,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_621128,621128,Autres suppléments,lu_2011_account_62112,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_62113,62113,Primes de ménage,lu_2011_account_6211,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_62114,62114,"Gratifications, primes et commissions",lu_2011_account_6211,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_62115,62115,Avantages en nature,lu_2011_account_6211,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_62116,62116,Indemnités de licenciement,lu_2011_account_6211,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_62117,62117,Trimestre de faveur,lu_2011_account_6211,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6218,6218,Autres avantages,lu_2011_account_621,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6219,6219,Remboursements sur salaires,lu_2011_account_621,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_62191,62191,Remboursements mutualité,lu_2011_account_6219,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_62192,62192,"Remboursements pour congé politique, sportif, culturel, éducatif et mandats sociaux",lu_2011_account_6219,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_62193,62193,Remboursements trimestre de faveur,lu_2011_account_6219,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_622,622,Autre personnel,lu_2011_account_62,view,account_type_2011_6_charge_exploitation,f,account_financial_report_123
+lu_2011_account_6221,6221,Etudiants,lu_2011_account_622,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6222,6222,Salaires occasionnels,lu_2011_account_622,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6228,6228,Autre personnel temporaire,lu_2011_account_622,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_623,623,Charges sociales (part patronale),lu_2011_account_62,view,account_type_2011_6_charge_exploitation,f,account_financial_report_124
+lu_2011_account_6231,6231,Charges sociales salariés,lu_2011_account_623,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_62311,62311,Caisse Nationale de Santé,lu_2011_account_6231,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_62312,62312,Caisse Nationale d'Assurance-Pension,lu_2011_account_6231,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_62318,62318,Cotisations patronales complémentaires,lu_2011_account_6231,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6232,6232,Assurance accidents du travail,lu_2011_account_623,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6233,6233,Service de santé au travail,lu_2011_account_623,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6238,6238,Autres charges sociales patronales,lu_2011_account_623,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6239,6239,Remboursements de charges sociales,lu_2011_account_623,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_624,624,Pensions complémentaires,lu_2011_account_62,view,account_type_2011_6_charge_exploitation,f,account_financial_report_125
+lu_2011_account_6241,6241,Primes à des fonds de pensions extérieurs,lu_2011_account_624,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6242,6242,Dotation aux provisions pour pensions complémentaires,lu_2011_account_624,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6243,6243,Retenue d'impôt sur pension complémentaire,lu_2011_account_624,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6244,6244,Prime d'assurance insolvabilité,lu_2011_account_624,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6245,6245,Pensions complémentaires versées par l'employeur,lu_2011_account_624,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_628,628,Autres charges sociales,lu_2011_account_62,view,account_type_2011_6_charge_exploitation,f,account_financial_report_126
+lu_2011_account_6281,6281,Médecine du travail,lu_2011_account_628,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6288,6288,Autres charges sociales diverses,lu_2011_account_628,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_63,63,Dotations aux corrections de valeur des éléments d'actif non financiers,lu_2011_account_6,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_631,631,Dotations aux corrections de valeur sur frais d'établissement et frais assimilés,lu_2011_account_63,view,account_type_2011_6_charge_exploitation,f,account_financial_report_128
+lu_2011_account_6311,6311,Frais de constitution,lu_2011_account_631,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6312,6312,Frais de premier établissement,lu_2011_account_631,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6313,6313,Frais d'augmentation de capital et d'opérations diverses,lu_2011_account_631,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6314,6314,Frais d'émission d'emprunts,lu_2011_account_631,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6318,6318,Autres frais assimilés,lu_2011_account_631,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_632,632,Dotations aux corrections de valeur sur immobilisations incorporelles,lu_2011_account_63,view,account_type_2011_6_charge_exploitation,f,account_financial_report_128
+lu_2011_account_6321,6321,Frais de recherche et de développement,lu_2011_account_632,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6322,6322,"Concessions, brevets, licences, marques ainsi que droits et valeurs similaires",lu_2011_account_632,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6323,6323,Fonds de commerce dans la mesure où il a été acquis à titre onéreux,lu_2011_account_632,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6324,6324,Acomptes versés et immobilisations incorporelles en cours,lu_2011_account_632,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_633,633,Dotations aux corrections de valeur sur immobilisations corporelles,lu_2011_account_63,view,account_type_2011_6_charge_exploitation,f,account_financial_report_128
+lu_2011_account_6331,6331,Terrains et constructions,lu_2011_account_633,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_63311,63311,Terrains,lu_2011_account_6331,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_63312,63312,Agencements et aménagements de terrains,lu_2011_account_6331,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_63313,63313,Constructions,lu_2011_account_6331,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6332,6332,Installations techniques et machines,lu_2011_account_633,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6333,6333,"Autres installations, outillage, mobilier et matériel roulant",lu_2011_account_633,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6334,6334,Acomptes versés et immobilisations corporelles en cours,lu_2011_account_633,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_634,634,Dotations aux corrections de valeur sur stocks,lu_2011_account_63,view,account_type_2011_6_charge_exploitation,f,account_financial_report_129
+lu_2011_account_6341,6341,Matières premières et consommables,lu_2011_account_634,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6342,6342,Produits en cours de fabrication et commandes en cours,lu_2011_account_634,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6343,6343,Produits finis et marchandises,lu_2011_account_634,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6344,6344,Terrains et immeubles destinés à la revente,lu_2011_account_634,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6345,6345,Acomptes versés,lu_2011_account_634,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_635,635,Dotations aux corrections de valeur sur créances de l'actif circulant,lu_2011_account_63,view,account_type_2011_6_charge_exploitation,f,account_financial_report_129
+lu_2011_account_6351,6351,Créances résultant de ventes et prestations de services,lu_2011_account_635,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6352,6352,Créances sur des entreprises liées et des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_635,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6353,6353,Autres créances,lu_2011_account_635,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_64,64,Autres charges d'exploitation,lu_2011_account_6,view,account_type_2011_6_charge_exploitation,f,account_financial_report_130
+lu_2011_account_641,641,"Redevances pour concessions, brevets, licences, marques, droits et valeurs similaires",lu_2011_account_64,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6411,6411,Concessions,lu_2011_account_641,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6412,6412,Brevets,lu_2011_account_641,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6413,6413,Licences informatiques,lu_2011_account_641,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6414,6414,Marques et franchises,lu_2011_account_641,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6415,6415,Droits et valeurs similaires,lu_2011_account_641,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_64151,64151,Droits d'auteur et de reproduction,lu_2011_account_6415,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_64158,64158,Autres droits et valeurs similaires,lu_2011_account_6415,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_642,642,Indemnités,lu_2011_account_64,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_643,643,Jetons de présence,lu_2011_account_64,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_644,644,Tantièmes,lu_2011_account_64,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_645,645,Pertes sur créances irrécouvrables,lu_2011_account_64,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6451,6451,Créances résultant de ventes et de prestations de services,lu_2011_account_645,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6452,6452,Créances sur des entreprises liées et sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_645,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6453,6453,Autres créances,lu_2011_account_645,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_646,646,"Impôts, taxes et versements assimilés",lu_2011_account_64,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6461,6461,Impôt foncier,lu_2011_account_646,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6462,6462,TVA non déductible,lu_2011_account_646,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6463,6463,Droits sur les marchandises en provenance de l'étranger,lu_2011_account_646,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_64631,64631,Droits d'accises et taxe de consommation sur marchandises en provenance de l'étranger,lu_2011_account_6463,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_64632,64632,Droits de douane,lu_2011_account_6463,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_64633,64633,Montants compensatoires,lu_2011_account_6463,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6464,6464,Droits d'accises à la production et taxe de consommation,lu_2011_account_646,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6465,6465,"Droits d'enregistrement et de timbre, droits d'hypothèques",lu_2011_account_646,view,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_64651,64651,Droits d'enregistrement,lu_2011_account_6465,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_64652,64652,Taxe d'abonnement,lu_2011_account_6465,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_64653,64653,Droits d'hypothèques,lu_2011_account_6465,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_64654,64654,Droits de timbre,lu_2011_account_6465,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_64658,64658,"Autres droits d'enregistrement et de timbre, droits d'hypothèques",lu_2011_account_6465,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6466,6466,Taxes sur les véhicules,lu_2011_account_646,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6467,6467,Taxe de cabaretage,lu_2011_account_646,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6468,6468,Autres droits et impôts,lu_2011_account_646,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_6469,6469,Dotations aux provisions pour impôts,lu_2011_account_646,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_647,647,Dotations aux plus-values immunisées,lu_2011_account_64,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_648,648,Autres charges d'exploitation diverses,lu_2011_account_64,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_649,649,Dotations aux provisions d'exploitation,lu_2011_account_64,other,account_type_2011_6_charge_exploitation,f,
+lu_2011_account_65,65,Charges financières,lu_2011_account_6,view,account_type_2011_6_charge_finance,f,
+lu_2011_account_651,651,Dotations aux corrections de valeur et ajustements pour juste valeur sur immobilisations financières,lu_2011_account_65,view,account_type_2011_6_charge_finance,f,account_financial_report_131
+lu_2011_account_6511,6511,Dotations aux corrections de valeur sur immobilisations financières,lu_2011_account_651,view,account_type_2011_6_charge_finance,f,
+lu_2011_account_65111,65111,Parts dans des entreprises liées,lu_2011_account_6511,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_65112,65112,Créances sur des entreprises liées,lu_2011_account_6511,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_65113,65113,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_6511,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_65114,65114,Créances sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_6511,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_65115,65115,Titres ayant le caractère d'immobilisations,lu_2011_account_6511,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_65116,65116,Prêts et créances immobilisées,lu_2011_account_6511,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_65117,65117,Actions propres ou parts propres,lu_2011_account_6511,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_6512,6512,Ajustements pour juste valeur sur immobilisations financières,lu_2011_account_651,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_653,653,Dotations aux corrections de valeur et ajustements pour juste valeur sur éléments financiers de l'actif circulant,lu_2011_account_65,view,account_type_2011_6_charge_finance,f,account_financial_report_132
+lu_2011_account_6531,6531,Dotations aux corrections de valeur sur valeurs mobilières,lu_2011_account_653,view,account_type_2011_6_charge_finance,f,
+lu_2011_account_65311,65311,Parts dans des entreprises liées,lu_2011_account_6531,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_65312,65312,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_6531,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_65313,65313,Actions propres ou parts propres,lu_2011_account_6531,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_65318,65318,Autres valeurs mobilières,lu_2011_account_6531,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_6532,6532,Dotations aux corrections de valeur sur créances sur des entreprises liées et sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_653,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_6533,6533,Dotations aux corrections de valeur sur autres créances,lu_2011_account_653,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_6534,6534,Ajustements pour juste valeur sur éléments financiers de l'actif circulant,lu_2011_account_653,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_654,654,Moins-values de cession de valeurs mobilières,lu_2011_account_65,view,account_type_2011_6_charge_finance,f,account_financial_report_135
+lu_2011_account_6541,6541,Parts dans des entreprises liées,lu_2011_account_654,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_6542,6542,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_654,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_6543,6543,Actions propres ou parts propres,lu_2011_account_654,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_6548,6548,Autres valeurs mobilières,lu_2011_account_654,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_655,655,Intérêts et escomptes,lu_2011_account_65,view,account_type_2011_6_charge_finance,f,account_financial_report_135
+lu_2011_account_6551,6551,Intérêts des dettes financières,lu_2011_account_655,view,account_type_2011_6_charge_finance,f,
+lu_2011_account_65511,65511,Intérêts des dettes subordonnées,lu_2011_account_6551,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_65512,65512,Intérêts des emprunts obligataires,lu_2011_account_6551,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_6552,6552,Intérêts bancaires et assimilés,lu_2011_account_655,view,account_type_2011_6_charge_finance,f,
+lu_2011_account_65521,65521,Intérêts bancaires sur comptes courants,lu_2011_account_6552,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_65522,65522,Intérêts bancaires sur opérations de financement,lu_2011_account_6552,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_65523,65523,Intérêts sur leasings financiers,lu_2011_account_6552,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_6553,6553,Intérêts sur dettes commerciales,lu_2011_account_655,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_6554,6554,Intérêts sur des entreprises liées et sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_655,other,account_type_2011_6_charge_finance,f,account_financial_report_134
+lu_2011_account_6555,6555,Escomptes et frais sur effets,lu_2011_account_655,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_6556,6556,Escomptes accordés,lu_2011_account_655,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_6558,6558,Intérêts sur autres emprunts et dettes,lu_2011_account_655,other,account_type_2011_6_charge_finance,f,
+lu_2011_account_656,656,Pertes de change,lu_2011_account_65,other,account_type_2011_6_charge_finance,f,account_financial_report_135
+lu_2011_account_657,657,Quote-part de perte dans les entreprises collectives (autres que les sociétés de capitaux),lu_2011_account_65,other,account_type_2011_6_charge_finance,f,account_financial_report_135
+lu_2011_account_658,658,Autres charges financières,lu_2011_account_65,other,account_type_2011_6_charge_finance,f,account_financial_report_135
+lu_2011_account_659,659,Dotations aux provisions financières,lu_2011_account_65,other,account_type_2011_6_charge_finance,f,account_financial_report_135
+lu_2011_account_66,66,Charges exceptionnelles,lu_2011_account_6,view,account_type_2011_6_charge_exception,f,account_financial_report_136
+lu_2011_account_661,661,Dotations aux corrections de valeur exceptionnelles sur immobilisations incorporelles et corporelles,lu_2011_account_66,view,account_type_2011_6_charge_exception,f,
+lu_2011_account_6611,6611,Sur immobilisations incorporelles,lu_2011_account_661,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_6612,6612,Sur immobilisations corporelles,lu_2011_account_661,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_662,662,Dotations aux corrections de valeur exceptionnelles sur éléments de l'actif circulant,lu_2011_account_66,view,account_type_2011_6_charge_exception,f,
+lu_2011_account_6621,6621,Sur stocks,lu_2011_account_662,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_6622,6622,Sur créances,lu_2011_account_662,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_663,663,Valeur comptable des immobilisations incorporelles et corporelles cédées,lu_2011_account_66,view,account_type_2011_6_charge_exception,f,
+lu_2011_account_6631,6631,Immobilisations incorporelles,lu_2011_account_663,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_6632,6632,Immobilisations corporelles,lu_2011_account_663,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_664,664,Valeur comptable des immobilisations financières cédées,lu_2011_account_66,view,account_type_2011_6_charge_exception,f,
+lu_2011_account_6641,6641,Parts dans des entreprises liées,lu_2011_account_664,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_6642,6642,Créances sur des entreprises liées,lu_2011_account_664,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_6643,6643,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_664,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_6644,6644,Créances sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_664,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_6645,6645,Titres ayant le caractère d'immobilisations,lu_2011_account_664,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_6646,6646,Prêts et créances immobilisées,lu_2011_account_664,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_6647,6647,Actions propres ou parts propres,lu_2011_account_664,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_665,665,Valeur comptable des créances de l'actif circulant financier cédées,lu_2011_account_66,view,account_type_2011_6_charge_exception,f,
+lu_2011_account_6651,6651,Sur des entreprises liées et sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_665,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_6652,6652,Sur autres créances,lu_2011_account_665,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_668,668,Autres charges exceptionnelles,lu_2011_account_66,view,account_type_2011_6_charge_exception,f,
+lu_2011_account_6681,6681,Pénalités sur marchés et dédits payés sur achats et ventes,lu_2011_account_668,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_6682,6682,"Amendes et pénalités fiscales, sociales et pénales",lu_2011_account_668,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_6683,6683,Dommages et intérêts,lu_2011_account_668,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_6684,6684,Malis provenant de clauses d'indexation,lu_2011_account_668,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_6688,6688,Autres charges exceptionnelles diverses,lu_2011_account_668,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_669,669,Dotations aux provisions exceptionnelles,lu_2011_account_66,other,account_type_2011_6_charge_exception,f,
+lu_2011_account_67,67,Impôts sur le résultat,lu_2011_account_6,view,account_type_2011_6_charge_impot,f,account_financial_report_137
+lu_2011_account_671,671,Impôt sur le revenu des collectivités,lu_2011_account_67,view,account_type_2011_6_charge_impot,f,
+lu_2011_account_6711,6711,Exercice courant,lu_2011_account_671,other,account_type_2011_6_charge_impot,f,
+lu_2011_account_6712,6712,Exercices antérieurs,lu_2011_account_671,other,account_type_2011_6_charge_impot,f,
+lu_2011_account_672,672,Impôt commercial,lu_2011_account_67,view,account_type_2011_6_charge_impot,f,
+lu_2011_account_6721,6721,Exercice courant,lu_2011_account_672,other,account_type_2011_6_charge_impot,f,
+lu_2011_account_6722,6722,Exercices antérieurs,lu_2011_account_672,other,account_type_2011_6_charge_impot,f,
+lu_2011_account_673,673,Impôts étrangers sur le résultat,lu_2011_account_67,view,account_type_2011_6_charge_impot,f,
+lu_2011_account_6731,6731,Retenues d'impôt à la source,lu_2011_account_673,other,account_type_2011_6_charge_impot,f,
+lu_2011_account_6732,6732,Impôts supportés par les établissements stables,lu_2011_account_673,view,account_type_2011_6_charge_impot,f,
+lu_2011_account_67321,67321,Exercice courant,lu_2011_account_6732,other,account_type_2011_6_charge_impot,f,
+lu_2011_account_67322,67322,Exercices antérieurs,lu_2011_account_6732,other,account_type_2011_6_charge_impot,f,
+lu_2011_account_6733,6733,Impôts supportés par les entreprises non résidentes,lu_2011_account_673,other,account_type_2011_6_charge_impot,f,
+lu_2011_account_6738,6738,Autres impôts étrangers,lu_2011_account_673,other,account_type_2011_6_charge_impot,f,
+lu_2011_account_679,679,Dotations aux provisions pour impôts sur le résultat,lu_2011_account_67,view,account_type_2011_6_charge_impot,f,
+lu_2011_account_6791,6791,Dotations aux provisions pour impôts,lu_2011_account_679,other,account_type_2011_6_charge_impot,f,
+lu_2011_account_6792,6792,Dotations aux provisions pour impôts différés,lu_2011_account_679,other,account_type_2011_6_charge_impot,f,
+lu_2011_account_68,68,Autres impôts ne figurant pas sous le poste ci-dessus,lu_2011_account_6,view,account_type_2011_6_charge_impot,f,account_financial_report_138
+lu_2011_account_681,681,Impôt sur la fortune,lu_2011_account_68,view,account_type_2011_6_charge_impot,f,
+lu_2011_account_6811,6811,Exercice courant,lu_2011_account_681,other,account_type_2011_6_charge_impot,f,
+lu_2011_account_6812,6812,Exercices antérieurs,lu_2011_account_681,other,account_type_2011_6_charge_impot,f,
+lu_2011_account_682,682,Taxe d'abonnement,lu_2011_account_68,other,account_type_2011_6_charge_impot,f,
+lu_2011_account_683,683,Impôts étrangers,lu_2011_account_68,other,account_type_2011_6_charge_impot,f,
+lu_2011_account_688,688,Autres impôts et taxes,lu_2011_account_68,other,account_type_2011_6_charge_impot,f,
+lu_2011_account_689,689,Dotations aux provisions pour autres impôts,lu_2011_account_68,other,account_type_2011_6_charge_impot,f,
+lu_2011_account_7,7,CLASSE 7 - COMPTES DE PRODUITS,lu_2011_account_resultat,view,account.data_account_type_view,f,
+lu_2011_account_70,70,Montant net du chiffre d'affaires,lu_2011_account_7,view,account_type_2011_7_produit_exploitation,f,account_financial_report_141
+lu_2011_account_701,701,Ventes sur commandes en cours,lu_2011_account_70,view,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7011,7011,Produits,lu_2011_account_701,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7012,7012,Prestations de services,lu_2011_account_701,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7013,7013,Immeubles en construction,lu_2011_account_701,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_702,702,Ventes de produits finis,lu_2011_account_70,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_703,703,Ventes de produits intermédiaires,lu_2011_account_70,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_704,704,Ventes de produits résiduels,lu_2011_account_70,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_705,705,Ventes d'éléments destinés à la revente,lu_2011_account_70,view,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7051,7051,Ventes de marchandises,lu_2011_account_705,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7052,7052,Ventes de terrains et d'immeubles existants (promotion immobilière),lu_2011_account_705,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7053,7053,Ventes d'autres éléments destinés à la revente,lu_2011_account_705,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_706,706,Prestations de services,lu_2011_account_70,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_708,708,Autres éléments du chiffre d'affaires,lu_2011_account_70,view,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7081,7081,Commissions et courtages,lu_2011_account_708,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7082,7082,Locations,lu_2011_account_708,view,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_70821,70821,Loyer immobilier,lu_2011_account_7082,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_70822,70822,Loyer mobilier,lu_2011_account_7082,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7083,7083,Ventes d'emballages,lu_2011_account_708,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7088,7088,Autres éléments divers du chiffre d'affaires,lu_2011_account_708,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_709,709,"Rabais, remises et ristournes accordés par l'entreprise",lu_2011_account_70,view,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7091,7091,Sur ventes sur commandes en cours,lu_2011_account_709,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7092,7092,Sur ventes de produits finis,lu_2011_account_709,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7093,7093,Sur ventes de produits intermédiaires,lu_2011_account_709,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7094,7094,Sur ventes de produits résiduels,lu_2011_account_709,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7095,7095,Sur ventes d'éléments destinés à la revente,lu_2011_account_709,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7096,7096,Sur prestations de services,lu_2011_account_709,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7098,7098,Sur autres éléments du chiffre d'affaires,lu_2011_account_709,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_71,71,"Variation des stocks de produits finis, d'en cours de fabrication et des commandes en cours",lu_2011_account_7,view,account_type_2011_7_produit_exploitation,f,account_financial_report_142
+lu_2011_account_711,711,Variation des stocks de produits en cours de fabrication et de commandes en cours,lu_2011_account_71,view,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7111,7111,Variation des stocks de produits en cours,lu_2011_account_711,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7112,7112,Variation des stocks de commandes en cours – produits,lu_2011_account_711,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7113,7113,Variation des stocks de commandes en cours – prestations de services,lu_2011_account_711,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7114,7114,Variation des stocks d'immeubles en construction,lu_2011_account_711,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_712,712,Variation des stocks de produits finis et marchandises,lu_2011_account_71,view,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7121,7121,Variation des stocks de produits finis,lu_2011_account_712,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7122,7122,Variation des stocks de produits intermédiaires,lu_2011_account_712,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7123,7123,Variation des stocks de produits résiduels,lu_2011_account_712,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7126,7126,Variation des stocks de marchandises,lu_2011_account_712,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7127,7127,"Variation des stocks de marchandises en voie d'acheminement, mises en dépôt ou données en consignation",lu_2011_account_712,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_72,72,Production immobilisée,lu_2011_account_7,view,account_type_2011_7_produit_exploitation,f,account_financial_report_143
+lu_2011_account_721,721,Immobilisations incorporelles,lu_2011_account_72,view,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7211,7211,Frais de recherche et développement,lu_2011_account_721,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7212,7212,"Concessions, brevets, licences, marques, droits et valeurs similaires",lu_2011_account_721,view,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_72121,72121,Concessions,lu_2011_account_7212,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_72122,72122,Brevets,lu_2011_account_7212,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_72123,72123,Licences informatiques,lu_2011_account_7212,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_72124,72124,Marques et franchises,lu_2011_account_7212,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_72125,72125,Droits et valeurs similaires,lu_2011_account_7212,view,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_721251,721251,Droits d'auteur et de reproduction,lu_2011_account_72125,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_721258,721258,Autres droits et valeurs similaires,lu_2011_account_72125,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_722,722,Immobilisations corporelles,lu_2011_account_72,view,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7221,7221,Terrains et constructions,lu_2011_account_722,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7222,7222,Installations techniques et machines,lu_2011_account_722,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7223,7223,"Autres installations, outillage, mobilier et matériel roulant",lu_2011_account_722,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_73,73,Reprises de corrections de valeur des éléments d'actif non financiers,lu_2011_account_7,view,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_732,732,Reprises de corrections de valeur sur immobilisations incorporelles,lu_2011_account_73,view,account_type_2011_7_produit_exploitation,f,account_financial_report_145
+lu_2011_account_7321,7321,Frais de recherche et de développement,lu_2011_account_732,view,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7322,7322,"Concessions, brevets, licences, marques ainsi que droits et valeurs similaires",lu_2011_account_732,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7323,7323,"Fonds de commerce, dans la mesure où il a été acquis à titre onéreux",lu_2011_account_732,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7324,7324,Acomptes versés et immobilisations incorporelles en cours,lu_2011_account_732,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_733,733,Reprises de corrections de valeur sur immobilisations corporelles,lu_2011_account_73,view,account_type_2011_7_produit_exploitation,f,account_financial_report_145
+lu_2011_account_7331,7331,Terrains et constructions,lu_2011_account_733,view,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_73311,73311,Terrains,lu_2011_account_7331,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_73312,73312,Agencements et aménagements de terrains,lu_2011_account_7331,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_73313,73313,Constructions,lu_2011_account_7331,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_73314,73314,Constructions sur sol d'autrui,lu_2011_account_7331,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7332,7332,Installations techniques et machines,lu_2011_account_733,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7333,7333,"Autres installations, outillage, mobilier et matériel roulant",lu_2011_account_733,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7334,7334,Acomptes versés et immobilisations corporelles en cours,lu_2011_account_733,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_734,734,Reprises de corrections de valeur sur stocks,lu_2011_account_73,view,account_type_2011_7_produit_exploitation,f,account_financial_report_146
+lu_2011_account_7341,7341,Matières premières et consommables,lu_2011_account_734,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7342,7342,Produits en cours de fabrication et commandes en cours,lu_2011_account_734,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7343,7343,Produits finis et marchandises,lu_2011_account_734,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7344,7344,Terrains et immeubles destinés à la revente,lu_2011_account_734,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7345,7345,Acomptes versés,lu_2011_account_734,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_735,735,Reprises de corrections de valeur sur créances de l'actif circulant,lu_2011_account_73,view,account_type_2011_7_produit_exploitation,f,account_financial_report_146
+lu_2011_account_7351,7351,Créances résultant de ventes et prestations de services,lu_2011_account_735,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7352,7352,Créances sur des entreprises liées et sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_735,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7353,7353,Autres créances,lu_2011_account_735,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_74,74,Autres produits d'exploitation,lu_2011_account_7,view,account_type_2011_7_produit_exploitation,f,account_financial_report_147
+lu_2011_account_741,741,"Redevances pour concessions, brevets, licences, marques, droits et valeurs similaires",lu_2011_account_74,view,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7411,7411,Concessions,lu_2011_account_741,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7412,7412,Brevets,lu_2011_account_741,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7413,7413,Licences informatiques,lu_2011_account_741,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7414,7414,Marques et franchises,lu_2011_account_741,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7415,7415,Droits et valeurs similaires,lu_2011_account_741,view,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_74151,74151,Droits d'auteur et de reproduction,lu_2011_account_7415,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_74158,74158,Autres droits et valeurs similaires,lu_2011_account_7415,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_742,742,Revenus des immeubles non affectés aux activités professionnelles,lu_2011_account_74,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_743,743,"Jetons de présence, tantièmes et rémunérations assimilées",lu_2011_account_74,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_744,744,Subventions d'exploitation,lu_2011_account_74,view,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7441,7441,Subventions sur produits,lu_2011_account_744,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7442,7442,Bonifications d'intérêt,lu_2011_account_744,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7443,7443,Montants compensatoires,lu_2011_account_744,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7444,7444,Subventions destinées à promouvoir l'emploi,lu_2011_account_744,view,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_74441,74441,Primes d'apprentissage reçues,lu_2011_account_7444,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_74442,74442,Autres subventions destinées à promouvoir l'emploi,lu_2011_account_7444,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7448,7448,Autres subventions d'exploitation,lu_2011_account_744,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_745,745,Ristournes perçues des coopératives (provenant des excédents),lu_2011_account_74,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_746,746,Indemnités d'assurance touchées,lu_2011_account_74,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_747,747,Reprises de plus-values immunisées et de subventions d'investissement en capital,lu_2011_account_74,view,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7471,7471,Plus-values immunisées non réinvesties,lu_2011_account_747,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7472,7472,Plus-values immunisées réinvesties,lu_2011_account_747,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_7473,7473,Subventions d'investissement en capital,lu_2011_account_747,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_748,748,Autres produits d'exploitation divers,lu_2011_account_74,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_749,749,Reprises sur provisions d'exploitation,lu_2011_account_74,other,account_type_2011_7_produit_exploitation,f,
+lu_2011_account_75,75,Produits financiers,lu_2011_account_7,view,account_type_2011_7_produit_financier,f,
+lu_2011_account_751,751,Reprises sur corrections de valeur et ajustements pour juste valeur sur immobilisations financières,lu_2011_account_75,view,account_type_2011_7_produit_financier,f,
+lu_2011_account_7511,7511,Reprises sur corrections de valeur sur immobilisations financières,lu_2011_account_751,view,account_type_2011_7_produit_financier,f,
+lu_2011_account_75111,75111,Parts dans des entreprises liées,lu_2011_account_7511,other,account_type_2011_7_produit_financier,f,account_financial_report_149
+lu_2011_account_75112,75112,Créances sur des entreprises liées,lu_2011_account_7511,other,account_type_2011_7_produit_financier,f,account_financial_report_149
+lu_2011_account_75113,75113,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_7511,other,account_type_2011_7_produit_financier,f,account_financial_report_150
+lu_2011_account_75114,75114,Créances sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_7511,other,account_type_2011_7_produit_financier,f,account_financial_report_150
+lu_2011_account_75115,75115,Titres ayant le caractère d'immobilisations,lu_2011_account_7511,other,account_type_2011_7_produit_financier,f,account_financial_report_150
+lu_2011_account_75116,75116,Prêts et créances immobilisées,lu_2011_account_7511,other,account_type_2011_7_produit_financier,f,account_financial_report_150
+lu_2011_account_75117,75117,Actions propres ou parts propres,lu_2011_account_7511,other,account_type_2011_7_produit_financier,f,account_financial_report_150
+lu_2011_account_7512,7512,Ajustements pour juste valeur sur immobilisations financières,lu_2011_account_751,other,account_type_2011_7_produit_financier,f,account_financial_report_150
+lu_2011_account_752,752,Revenus des immobilisations financières,lu_2011_account_75,view,account_type_2011_7_produit_financier,f,
+lu_2011_account_7521,7521,Parts dans des entreprises liées,lu_2011_account_752,other,account_type_2011_7_produit_financier,f,account_financial_report_149
+lu_2011_account_7522,7522,Créances sur des entreprises liées,lu_2011_account_752,other,account_type_2011_7_produit_financier,f,account_financial_report_149
+lu_2011_account_7523,7523,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_752,other,account_type_2011_7_produit_financier,f,account_financial_report_150
+lu_2011_account_7524,7524,Créances sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_752,other,account_type_2011_7_produit_financier,f,account_financial_report_150
+lu_2011_account_7525,7525,Titres ayant le caractère d'immobilisations,lu_2011_account_752,other,account_type_2011_7_produit_financier,f,account_financial_report_150
+lu_2011_account_7526,7526,Prêts et créances immobilisées,lu_2011_account_752,other,account_type_2011_7_produit_financier,f,account_financial_report_150
+lu_2011_account_7527,7527,Actions propres ou parts propres,lu_2011_account_752,other,account_type_2011_7_produit_financier,f,account_financial_report_150
+lu_2011_account_753,753,Reprises sur corrections de valeur et ajustements pour juste valeur sur éléments financiers de l'actif circulant,lu_2011_account_75,view,account_type_2011_7_produit_financier,f,
+lu_2011_account_7531,7531,Reprises sur corrections de valeur sur créances sur des entreprises liées et sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_753,other,account_type_2011_7_produit_financier,f,account_financial_report_152
+lu_2011_account_7532,7532,Reprises sur corrections de valeur sur autres créances,lu_2011_account_753,other,account_type_2011_7_produit_financier,f,account_financial_report_153
+lu_2011_account_7533,7533,Reprises sur corrections de valeur sur valeurs mobilières,lu_2011_account_753,view,account_type_2011_7_produit_financier,f,
+lu_2011_account_75331,75331,Parts dans des entreprises liées,lu_2011_account_7533,other,account_type_2011_7_produit_financier,f,account_financial_report_152
+lu_2011_account_75332,75332,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_7533,other,account_type_2011_7_produit_financier,f,account_financial_report_153
+lu_2011_account_75333,75333,Actions propres ou parts propres,lu_2011_account_7533,other,account_type_2011_7_produit_financier,f,account_financial_report_153
+lu_2011_account_75338,75338,Autres valeurs mobilières,lu_2011_account_7533,other,account_type_2011_7_produit_financier,f,account_financial_report_153
+lu_2011_account_7534,7534,Ajustements pour juste valeur sur éléments financiers de l'actif circulant,lu_2011_account_753,other,account_type_2011_7_produit_financier,f,account_financial_report_153
+lu_2011_account_754,754,Plus-value de cession et autres produits de valeurs mobilières,lu_2011_account_75,view,account_type_2011_7_produit_financier,f,
+lu_2011_account_7541,7541,Plus-value de cession de valeurs mobilières,lu_2011_account_754,view,account_type_2011_7_produit_financier,f,
+lu_2011_account_75411,75411,Parts dans des entreprises liées,lu_2011_account_7541,other,account_type_2011_7_produit_financier,f,account_financial_report_152
+lu_2011_account_75412,75412,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_7541,other,account_type_2011_7_produit_financier,f,account_financial_report_153
+lu_2011_account_75413,75413,Actions propres ou parts propres,lu_2011_account_7541,other,account_type_2011_7_produit_financier,f,account_financial_report_153
+lu_2011_account_75418,75418,Autres valeurs mobilières,lu_2011_account_7541,other,account_type_2011_7_produit_financier,f,account_financial_report_153
+lu_2011_account_7548,7548,Autres produits de valeurs mobilières,lu_2011_account_754,view,account_type_2011_7_produit_financier,f,
+lu_2011_account_75481,75481,Parts dans des entreprises liées,lu_2011_account_7548,other,account_type_2011_7_produit_financier,f,account_financial_report_152
+lu_2011_account_75482,75482,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_7548,other,account_type_2011_7_produit_financier,f,account_financial_report_153
+lu_2011_account_75483,75483,Actions propres ou parts propres,lu_2011_account_7548,other,account_type_2011_7_produit_financier,f,account_financial_report_153
+lu_2011_account_75488,75488,Autres valeurs mobilières,lu_2011_account_7548,other,account_type_2011_7_produit_financier,f,account_financial_report_153
+lu_2011_account_755,755,Autres intérêts et escomptes,lu_2011_account_75,view,account_type_2011_7_produit_financier,f,
+lu_2011_account_7552,7552,Intérêts bancaires et assimilés,lu_2011_account_755,view,account_type_2011_7_produit_financier,f,account_financial_report_156
+lu_2011_account_75521,75521,Intérêts sur comptes courants,lu_2011_account_7552,other,account_type_2011_7_produit_financier,f,
+lu_2011_account_75522,75522,Intérêts sur comptes à terme,lu_2011_account_7552,other,account_type_2011_7_produit_financier,f,
+lu_2011_account_75523,75523,Intérêts sur leasings financiers,lu_2011_account_7552,other,account_type_2011_7_produit_financier,f,
+lu_2011_account_7553,7553,Intérêts sur créances commerciales,lu_2011_account_755,other,account_type_2011_7_produit_financier,f,account_financial_report_156
+lu_2011_account_7554,7554,Intérêts sur des entreprises liées et des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_755,other,account_type_2011_7_produit_financier,f,account_financial_report_155
+lu_2011_account_7555,7555,Escomptes d'effets de commerce,lu_2011_account_755,other,account_type_2011_7_produit_financier,f,account_financial_report_156
+lu_2011_account_7556,7556,Escomptes obtenus,lu_2011_account_755,other,account_type_2011_7_produit_financier,f,account_financial_report_156
+lu_2011_account_7558,7558,Intérêts sur autres créances,lu_2011_account_755,other,account_type_2011_7_produit_financier,f,account_financial_report_156
+lu_2011_account_756,756,Gains de change,lu_2011_account_75,other,account_type_2011_7_produit_financier,f,
+lu_2011_account_757,757,Quote-part de bénéfice dans les entreprises collectives (autres que les sociétés de capitaux),lu_2011_account_75,other,account_type_2011_7_produit_financier,f,
+lu_2011_account_758,758,Autres produits financiers,lu_2011_account_75,other,account_type_2011_7_produit_financier,f,account_financial_report_156
+lu_2011_account_759,759,Reprises sur provisions financières,lu_2011_account_75,other,account_type_2011_7_produit_financier,f,
+lu_2011_account_76,76,Produits exceptionnels,lu_2011_account_7,view,account_type_2011_7_produit_exceptionnel,f,account_financial_report_157
+lu_2011_account_761,761,Reprises sur corrections de valeur exceptionnelles sur immobilisations incorporelles et corporelles,lu_2011_account_76,view,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7611,7611,Immobilisations incorporelles,lu_2011_account_761,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7612,7612,Immobilisations corporelles,lu_2011_account_761,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_762,762,Reprises sur corrections de valeur exceptionnelles sur éléments de l'actif circulant,lu_2011_account_76,view,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7621,7621,Sur stocks,lu_2011_account_762,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7622,7622,Sur créances de l'actif circulant,lu_2011_account_762,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_763,763,Produits de cession d'immobilisations incorporelles et corporelles,lu_2011_account_76,view,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7631,7631,Immobilisations incorporelles,lu_2011_account_763,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7632,7632,Immobilisations corporelles,lu_2011_account_763,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_764,764,Produits de cession d'immobilisations financières,lu_2011_account_76,view,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7641,7641,Parts dans des entreprises liées,lu_2011_account_764,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7642,7642,Créances sur des entreprises liées,lu_2011_account_764,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7643,7643,Parts dans des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_764,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7644,7644,Créances sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_764,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7645,7645,Titres ayant le caractère d'immobilisations,lu_2011_account_764,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7646,7646,Prêts et créances immobilisés,lu_2011_account_764,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7647,7647,Actions propres ou parts propres,lu_2011_account_764,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_765,765,Produits de cession sur créances de l'actif circulant financier,lu_2011_account_76,view,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7651,7651,Créances sur des entreprises liées et sur des entreprises avec lesquelles la société a un lien de participation,lu_2011_account_765,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7652,7652,Autres créances,lu_2011_account_765,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_768,768,Autres produits exceptionnels,lu_2011_account_76,view,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7681,7681,Pénalités sur marchés et dédits perçus sur achats et sur ventes,lu_2011_account_768,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7682,7682,Libéralités reçues,lu_2011_account_768,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7683,7683,Rentrées sur créances amorties,lu_2011_account_768,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7684,7684,Subventions exceptionnelles,lu_2011_account_768,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7685,7685,Bonis provenant de clauses d'indexation,lu_2011_account_768,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7686,7686,Bonis provenant du rachat par l'entreprise d'actions et d'obligations émises par elle-même,lu_2011_account_768,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7688,7688,Autres produits exceptionnels divers,lu_2011_account_768,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_769,769,Reprises sur provisions exceptionnelles,lu_2011_account_76,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_77,77,Régularisations d'impôts sur le résultat,lu_2011_account_7,view,account_type_2011_7_produit_exceptionnel,f,account_financial_report_137
+lu_2011_account_771,771,Régularisations d'impôt sur le revenu des collectivités,lu_2011_account_77,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_772,772,Régularisations d'impôt commercial,lu_2011_account_77,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_773,773,Régularisations d'impôts étrangers sur le résultat,lu_2011_account_77,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_779,779,Reprises sur provisions pour impôts sur le résultat,lu_2011_account_77,view,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7791,7791,Reprises sur provisions pour impôts,lu_2011_account_779,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_7792,7792,Reprises sur provisions pour impôts différés,lu_2011_account_779,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_78,78,Régularisations d'autres impôts ne figurant pas sous le poste ci-dessus,lu_2011_account_7,view,account_type_2011_7_produit_exceptionnel,f,account_financial_report_138
+lu_2011_account_781,781,Régularisations d'impôt sur la fortune,lu_2011_account_78,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_782,782,Régularisations de taxes d'abonnement,lu_2011_account_78,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_783,783,Régularisations d'impôts étrangers,lu_2011_account_78,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_788,788,Régularisations d'autres impôts et taxes,lu_2011_account_78,other,account_type_2011_7_produit_exceptionnel,f,
+lu_2011_account_789,789,Reprises sur provisions pour autres impôts,lu_2011_account_78,other,account_type_2011_7_produit_exceptionnel,f,
diff --git a/addons/mail/__openerp__.py b/addons/mail/__openerp__.py index 63cd0888986..8f072dd9082 100644 --- a/addons/mail/__openerp__.py +++ b/addons/mail/__openerp__.py @@ -87,10 +87,12 @@ Main Features 'static/src/js/mail.js', 'static/src/js/mail_followers.js', 'static/src/js/many2many_tags_email.js', + 'static/src/js/suggestions.js', ], 'qweb': [ 'static/src/xml/mail.xml', 'static/src/xml/mail_followers.xml', + 'static/src/xml/suggestions.xml', ], } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mail/controllers/main.py b/addons/mail/controllers/main.py index 4c6f6e56064..ef3a60987d6 100644 --- a/addons/mail/controllers/main.py +++ b/addons/mail/controllers/main.py @@ -1,4 +1,7 @@ import base64 + +import openerp +from openerp import SUPERUSER_ID import openerp.addons.web.http as oeweb from openerp.addons.web.controllers.main import content_disposition @@ -20,3 +23,18 @@ class MailController(oeweb.Controller): headers=[('Content-Type', 'application/octet-stream'), ('Content-Disposition', content_disposition(filename, req))]) return req.not_found() + + @oeweb.jsonrequest + def receive(self, req): + """ End-point to receive mail from an external SMTP server. """ + dbs = req.jsonrequest.get('databases') + for db in dbs: + message = dbs[db].decode('base64') + try: + registry = openerp.registry(db) + with registry.cursor() as cr: + mail_thread = registry['mail.thread'] + mail_thread.message_process(cr, SUPERUSER_ID, None, message) + except psycopg2.Error: + pass + return True diff --git a/addons/mail/mail_alias.py b/addons/mail/mail_alias.py index 870695e074e..97d2842d15c 100644 --- a/addons/mail/mail_alias.py +++ b/addons/mail/mail_alias.py @@ -39,6 +39,7 @@ def remove_accents(input_str): nkfd_form = unicodedata.normalize('NFKD', input_str) return u''.join([c for c in nkfd_form if not unicodedata.combining(c)]) + class mail_alias(osv.Model): """A Mail Alias is a mapping of an email address with a given OpenERP Document model. It is used by OpenERP's mail gateway when processing incoming emails @@ -47,7 +48,7 @@ class mail_alias(osv.Model): of that alias. If the message is a reply it will be attached to the existing discussion on the corresponding record, otherwise a new record of the corresponding model will be created. - + This is meant to be used in combination with a catch-all email configuration on the company's mail server, so that as soon as a new mail.alias is created, it becomes immediately usable and OpenERP will accept email for it. @@ -63,9 +64,8 @@ class mail_alias(osv.Model): return dict.fromkeys(ids, domain or "") _columns = { - 'alias_name': fields.char('Alias', required=True, - help="The name of the email alias, e.g. 'jobs' " - "if you want to catch emails for <jobs@example.my.openerp.com>",), + 'alias_name': fields.char('Alias', + help="The name of the email alias, e.g. 'jobs' if you want to catch emails for <jobs@example.my.openerp.com>",), 'alias_model_id': fields.many2one('ir.model', 'Aliased Model', required=True, ondelete="cascade", help="The model (OpenERP Document Kind) to which this alias " "corresponds. Any incoming email that does not reply to an " @@ -87,13 +87,29 @@ class mail_alias(osv.Model): "messages will be attached, even if they did not reply to it. " "If set, this will disable the creation of new records completely."), 'alias_domain': fields.function(_get_alias_domain, string="Alias domain", type='char', size=None), + 'alias_parent_model_id': fields.many2one('ir.model', 'Parent Model', + help="Parent model holding the alias. The model holding the alias reference\n" + "is not necessarily the model given by alias_model_id\n" + "(example: project (parent_model) and task (model))"), + 'alias_parent_thread_id': fields.integer('Parent Record Thread ID', + help="ID of the parent record holding the alias (example: project holding the task creation alias)"), + 'alias_contact': fields.selection([ + ('everyone', 'Everyone'), + ('partners', 'Authenticated Partners'), + ('followers', 'Followers only'), + ], string='Alias Contact Security', required=True, + help="Policy to post a message on the document using the mailgateway.\n" + "- everyone: everyone can post\n" + "- partners: only authenticated partners\n" + "- followers: only followers of the related document\n"), } _defaults = { 'alias_defaults': '{}', - 'alias_user_id': lambda self,cr,uid,context: uid, + 'alias_user_id': lambda self, cr, uid, context: uid, # looks better when creating new aliases - even if the field is informative only - 'alias_domain': lambda self,cr,uid,context: self._get_alias_domain(cr, SUPERUSER_ID,[1],None,None)[1] + 'alias_domain': lambda self, cr, uid, context: self._get_alias_domain(cr, SUPERUSER_ID, [1], None, None)[1], + 'alias_contact': 'everyone', } _sql_constraints = [ @@ -139,13 +155,15 @@ class mail_alias(osv.Model): return new_name def migrate_to_alias(self, cr, child_model_name, child_table_name, child_model_auto_init_fct, - alias_id_column, alias_key, alias_prefix='', alias_force_key='', alias_defaults={}, context=None): + alias_model_name, alias_id_column, alias_key, alias_prefix='', alias_force_key='', alias_defaults={}, + alias_generate_name=False, context=None): """ Installation hook to create aliases for all users and avoid constraint errors. :param child_model_name: model name of the child class (i.e. res.users) :param child_table_name: table name of the child class (i.e. res_users) :param child_model_auto_init_fct: pointer to the _auto_init function (i.e. super(res_users,self)._auto_init(cr, context=context)) + :param alias_model_name: name of the aliased model :param alias_id_column: alias_id column (i.e. self._columns['alias_id']) :param alias_key: name of the column used for the unique name (i.e. 'login') :param alias_prefix: prefix for the unique name (i.e. 'jobs' + ...) @@ -153,6 +171,8 @@ class mail_alias(osv.Model): if empty string, not taken into account :param alias_defaults: dict, keys = mail.alias columns, values = child model column name used for default values (i.e. {'job_id': 'id'}) + :param alias_generate_name: automatically generate alias name using prefix / alias key; + default alias_name value is False because since 8.0 it is not required anymore """ if context is None: context = {} @@ -170,13 +190,17 @@ class mail_alias(osv.Model): no_alias_ids = child_class_model.search(cr, SUPERUSER_ID, [('alias_id', '=', False)], context={'active_test': False}) # Use read() not browse(), to avoid prefetching uninitialized inherited fields for obj_data in child_class_model.read(cr, SUPERUSER_ID, no_alias_ids, [alias_key]): - alias_vals = {'alias_name': '%s%s' % (alias_prefix, obj_data[alias_key])} + alias_vals = {'alias_name': False} + if alias_generate_name: + alias_vals['alias_name'] = '%s%s' % (alias_prefix, obj_data[alias_key]) if alias_force_key: alias_vals['alias_force_thread_id'] = obj_data[alias_force_key] alias_vals['alias_defaults'] = dict((k, obj_data[v]) for k, v in alias_defaults.iteritems()) - alias_id = mail_alias.create_unique_alias(cr, SUPERUSER_ID, alias_vals, model_name=context.get('alias_model_name', child_model_name)) + alias_vals['alias_parent_thread_id'] = obj_data['id'] + alias_create_ctx = dict(context, alias_model_name=alias_model_name, alias_parent_model_name=child_model_name) + alias_id = mail_alias.create(cr, SUPERUSER_ID, alias_vals, context=alias_create_ctx) child_class_model.write(cr, SUPERUSER_ID, obj_data['id'], {'alias_id': alias_id}) - _logger.info('Mail alias created for %s %s (uid %s)', child_model_name, obj_data[alias_key], obj_data['id']) + _logger.info('Mail alias created for %s %s (id %s)', child_model_name, obj_data[alias_key], obj_data['id']) # Finally attempt to reinstate the missing constraint try: @@ -189,22 +213,53 @@ class mail_alias(osv.Model): # set back the unique alias_id constraint alias_id_column.required = True - return res - def create_unique_alias(self, cr, uid, vals, model_name=None, context=None): - """Creates an email.alias record according to the values provided in ``vals``, - with 2 alterations: the ``alias_name`` value may be suffixed in order to - make it unique (and certain unsafe characters replaced), and - he ``alias_model_id`` value will set to the model ID of the ``model_name`` - value, if provided, + def create(self, cr, uid, vals, context=None): + """ Creates an email.alias record according to the values provided in ``vals``, + with 2 alterations: the ``alias_name`` value may be suffixed in order to + make it unique (and certain unsafe characters replaced), and + he ``alias_model_id`` value will set to the model ID of the ``model_name`` + context value, if provided. """ - # when an alias name appears to already be an email, we keep the local part only - alias_name = remove_accents(vals['alias_name']).lower().split('@')[0] - alias_name = re.sub(r'[^\w+.]+', '-', alias_name) - alias_name = self._find_unique(cr, uid, alias_name, context=context) - vals['alias_name'] = alias_name + if context is None: + context = {} + model_name = context.get('alias_model_name') + parent_model_name = context.get('alias_parent_model_name') + if vals.get('alias_name'): + # when an alias name appears to already be an email, we keep the local part only + alias_name = remove_accents(vals['alias_name']).lower().split('@')[0] + alias_name = re.sub(r'[^\w+.]+', '-', alias_name) + alias_name = self._find_unique(cr, uid, alias_name, context=context) + vals['alias_name'] = alias_name if model_name: model_id = self.pool.get('ir.model').search(cr, uid, [('model', '=', model_name)], context=context)[0] vals['alias_model_id'] = model_id - return self.create(cr, uid, vals, context=context) + if parent_model_name: + model_id = self.pool.get('ir.model').search(cr, uid, [('model', '=', parent_model_name)], context=context)[0] + vals['alias_parent_model_id'] = model_id + return super(mail_alias, self).create(cr, uid, vals, context=context) + + def open_document(self, cr, uid, ids, context=None): + alias = self.browse(cr, uid, ids, context=context)[0] + if not alias.alias_model_id or not alias.alias_force_thread_id: + return False + return { + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': alias.alias_model_id.model, + 'res_id': alias.alias_force_thread_id, + 'type': 'ir.actions.act_window', + } + + def open_parent_document(self, cr, uid, ids, context=None): + alias = self.browse(cr, uid, ids, context=context)[0] + if not alias.alias_parent_model_id or not alias.alias_parent_thread_id: + return False + return { + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': alias.alias_parent_model_id.model, + 'res_id': alias.alias_parent_thread_id, + 'type': 'ir.actions.act_window', + } diff --git a/addons/mail/mail_alias_view.xml b/addons/mail/mail_alias_view.xml index e0d8e173ebc..248bf7e8f3a 100644 --- a/addons/mail/mail_alias_view.xml +++ b/addons/mail/mail_alias_view.xml @@ -9,13 +9,23 @@ <field name="arch" type="xml"> <form string="Alias" version="7.0"> <sheet> - <label for="alias_name" class="oe_edit_only"/> <h2><field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline"/></h2> + <div class="oe_right oe_button_box"> + <button name="open_document" string="Open Document" + type="object" class="oe_link" + attrs="{'invisible': ['|', ('alias_model_id', '=', False), ('alias_force_thread_id', '=', 0)]}"/> + <button name="open_parent_document" string="Open Parent Document" + type="object" class="oe_link" + attrs="{'invisible': ['|', ('alias_parent_model_id', '=', False), ('alias_parent_thread_id', '=', 0)]}"/> + </div> <group> <field name="alias_model_id"/> - <field name="alias_user_id"/> <field name="alias_force_thread_id"/> <field name="alias_defaults"/> + <field name="alias_contact"/> + <field name="alias_user_id"/> + <field name="alias_parent_model_id"/> + <field name="alias_parent_thread_id"/> </group> </sheet> </form> @@ -32,6 +42,7 @@ <field name="alias_model_id"/> <field name="alias_user_id"/> <field name="alias_defaults"/> + <field name="alias_contact"/> </tree> </field> </record> @@ -44,8 +55,13 @@ <search string="Search Alias"> <field name="alias_name"/> <field name="alias_model_id"/> + <field name="alias_force_thread_id"/> + <field name="alias_parent_model_id"/> + <field name="alias_parent_thread_id"/> + <separator/> + <filter string="Active" name="active" domain="[('alias_name', '!=', False)]"/> <group expand="0" string="Group By..."> - <filter string="User" name="User" icon="terp-personal" context="{'group_by':'alias_user_id'}"/> + <filter string="User" name="User" context="{'group_by':'alias_user_id'}"/> <filter string="Model" name="Model" context="{'group_by':'alias_model_id'}"/> </group> </search> @@ -55,6 +71,10 @@ <record id="action_view_mail_alias" model="ir.actions.act_window"> <field name="name">Aliases</field> <field name="res_model">mail.alias</field> + <field name="context">{ + 'search_default_active': True, + } + </field> </record> <menuitem id="mail_alias_menu" diff --git a/addons/mail/mail_followers.py b/addons/mail/mail_followers.py index 98e88b664e6..9d96a6ff59c 100644 --- a/addons/mail/mail_followers.py +++ b/addons/mail/mail_followers.py @@ -150,11 +150,17 @@ class mail_notification(osv.Model): return footer - def _notify(self, cr, uid, msg_id, partners_to_notify=None, context=None): + def _notify(self, cr, uid, msg_id, partners_to_notify=None, context=None, + force_send=False, user_signature=True): """ Send by email the notification depending on the user preferences :param list partners_to_notify: optional list of partner ids restricting the notifications to process + :param bool force_send: if True, the generated mail.mail is + immediately sent after being created, as if the scheduler + was executed for this message only. + :param bool user_signature: if True, the generated mail.mail body is + the body of the related mail.message with the author's signature """ if context is None: context = {} @@ -189,8 +195,9 @@ class mail_notification(osv.Model): # add signature body_html = msg.body user_id = msg.author_id and msg.author_id.user_ids and msg.author_id.user_ids[0] and msg.author_id.user_ids[0].id or None - signature_company = self.get_signature_footer(cr, uid, user_id, res_model=msg.model, res_id=msg.res_id, context=context) - body_html = tools.append_content_to_html(body_html, signature_company, plaintext=False, container_tag='div') + if user_signature: + signature_company = self.get_signature_footer(cr, uid, user_id, res_model=msg.model, res_id=msg.res_id, context=context) + body_html = tools.append_content_to_html(body_html, signature_company, plaintext=False, container_tag='div') references = False if msg.parent_id: @@ -203,13 +210,9 @@ class mail_notification(osv.Model): 'recipient_ids': [(4, id) for id in notify_partner_ids], 'references': references, } - if msg.email_from: - mail_values['email_from'] = msg.email_from - if msg.reply_to: - mail_values['reply_to'] = msg.reply_to mail_mail = self.pool.get('mail.mail') email_notif_id = mail_mail.create(cr, uid, mail_values, context=context) - try: - return mail_mail.send(cr, uid, [email_notif_id], context=context) - except Exception: - return False + + if force_send: + mail_mail.send(cr, uid, [email_notif_id], context=context) + return True diff --git a/addons/mail/mail_followers_view.xml b/addons/mail/mail_followers_view.xml index a9d1d80240b..515be85132a 100644 --- a/addons/mail/mail_followers_view.xml +++ b/addons/mail/mail_followers_view.xml @@ -66,11 +66,11 @@ <!-- Add followers related menu entries in Settings/Email --> <menuitem name="Followers" id="menu_email_followers" parent="base.menu_email" - action="action_view_followers" sequence="30" groups="base.group_no_one"/> --> + action="action_view_followers" sequence="30" groups="base.group_no_one"/> <!-- Add notifications related menu entry in Settings/Email --> <menuitem name="Notifications" id="menu_email_notifications" parent="base.menu_email" - action="action_view_notifications" sequence="35" groups="base.group_no_one"/> + action="action_view_notifications" sequence="13" groups="base.group_no_one"/> </data> </openerp> diff --git a/addons/mail/mail_group.py b/addons/mail/mail_group.py index 977608f487e..9e363065481 100644 --- a/addons/mail/mail_group.py +++ b/addons/mail/mail_group.py @@ -93,17 +93,16 @@ class mail_group(osv.Model): 'public': 'groups', 'group_public_id': _get_default_employee_group, 'image': _get_default_image, - 'alias_domain': False, # always hide alias during creation } def _generate_header_description(self, cr, uid, group, context=None): header = '' if group.description: header = '%s' % group.description - if group.alias_id and group.alias_id.alias_name and group.alias_id.alias_domain: + if group.alias_id and group.alias_name and group.alias_domain: if header: header = '%s<br/>' % header - return '%sGroup email gateway: %s@%s' % (header, group.alias_id.alias_name, group.alias_id.alias_domain) + return '%sGroup email gateway: %s@%s' % (header, group.alias_name, group.alias_domain) return header def _subscribe_users(self, cr, uid, ids, context=None): @@ -114,15 +113,8 @@ class mail_group(osv.Model): self.message_subscribe(cr, uid, ids, partner_ids, context=context) def create(self, cr, uid, vals, context=None): - mail_alias = self.pool.get('mail.alias') - if not vals.get('alias_id'): - vals.pop('alias_name', None) # prevent errors during copy() - alias_id = mail_alias.create_unique_alias(cr, uid, - # Using '+' allows using subaddressing for those who don't - # have a catchall domain setup. - {'alias_name': "group+" + vals['name']}, - model_name=self._name, context=context) - vals['alias_id'] = alias_id + if context is None: + context = {} # get parent menu menu_parent = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'mail', 'mail_group_root') @@ -134,8 +126,10 @@ class mail_group(osv.Model): vals['menu_id'] = menu_id # Create group and alias - mail_group_id = super(mail_group, self).create(cr, uid, vals, context=context) - mail_alias.write(cr, uid, [vals['alias_id']], {"alias_force_thread_id": mail_group_id}, context) + create_context = dict(context, alias_model_name=self._name, alias_parent_model_name=self._name) + mail_group_id = super(mail_group, self).create(cr, uid, vals, context=create_context) + group = self.browse(cr, uid, mail_group_id, context=context) + self.pool.get('mail.alias').write(cr, uid, [group.alias_id.id], {"alias_force_thread_id": mail_group_id, 'alias_parent_thread_id': mail_group_id}, context) group = self.browse(cr, uid, mail_group_id, context=context) # Create client action for this group and link the menu to it @@ -208,3 +202,12 @@ class mail_group(osv.Model): """ Wrapper because message_unsubscribe_users take a user_ids=None that receive the context without the wrapper. """ return self.message_unsubscribe_users(cr, uid, ids, context=context) + + def get_suggested_thread(self, cr, uid, removed_suggested_threads=None, context=None): + """Show the suggestion of groups if display_groups_suggestions if the + user perference allows it.""" + user = self.pool.get('res.users').browse(cr, uid, uid, context) + if not user.display_groups_suggestions: + return [] + else: + return super(mail_group, self).get_suggested_thread(cr, uid, removed_suggested_threads, context) diff --git a/addons/mail/mail_group_view.xml b/addons/mail/mail_group_view.xml index 04212b2f58a..8bf61dbdb1e 100644 --- a/addons/mail/mail_group_view.xml +++ b/addons/mail/mail_group_view.xml @@ -44,7 +44,7 @@ <div class="oe_group_details"> <h4><a type="open"><field name="name"/></a></h4> <div class="oe_kanban_alias" t-if="record.alias_id.value"> - <span class="oe_e">%%</span><small><field name="alias_id"/></small> + <span class="oe_e oe_e_alias">%%</span><small><field name="alias_id"/></small> </div> <div class="oe_grey"> <field name="description"/> @@ -78,17 +78,19 @@ <label for="name" string="Group Name"/> </div> <h1><field name="name" readonly="0"/></h1> - <div name="group_alias" + <group colspan="2" name="group_alias" attrs="{'invisible': [('alias_domain', '=', False)]}"> - <label for="alias_id" string="Email Alias"/> - <field name="alias_id" class="oe_inline oe_read_only" required="0" nolabel="1"/> - <span name="edit_alias" class="oe_edit_only"> - <field name="alias_name" class="oe_inline" - attrs="{'required': [('alias_id', '!=', False)]}"/> - @ - <field name="alias_domain" class="oe_inline" readonly="1"/> - </span> - </div> + <label for="alias_id" string="%%" class="oe_e oe_e_alias" style="min-width: 20px;"/> + <div name="alias_def"> + <field name="alias_id" class="oe_read_only oe_inline" + string="Email Alias" required="0"/> + <div class="oe_edit_only oe_inline" name="edit_alias" style="display: inline;" > + <field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/> + </div> + </div> + <label for="alias_contact" string="V" class="oe_e oe_e_alias" style="min-width: 20px;"/> + <field name="alias_contact" class="oe_inline" nolabel="1"/> + </group> </div> <field name="description" placeholder="Topics discussed in this group..."/> <div class="oe_clear"/> diff --git a/addons/mail/mail_mail.py b/addons/mail/mail_mail.py index bd2b9c3f18a..d9e00353d49 100644 --- a/addons/mail/mail_mail.py +++ b/addons/mail/mail_mail.py @@ -55,7 +55,6 @@ class mail_mail(osv.Model): 'auto_delete': fields.boolean('Auto Delete', help="Permanently delete this email after sending it, to save space"), 'references': fields.text('References', help='Message references, such as identifiers of previous messages', readonly=1), - 'email_from': fields.char('From', help='Message sender, taken from user preferences.'), 'email_to': fields.text('To', help='Message recipients (emails)'), 'recipient_ids': fields.many2many('res.partner', string='To (Partners)'), 'email_cc': fields.char('Cc', help='Carbon copy message recipients'), @@ -67,16 +66,13 @@ class mail_mail(osv.Model): } def _get_default_from(self, cr, uid, context=None): - this = self.pool.get('res.users').browse(cr, SUPERUSER_ID, uid, context=context) - if this.alias_domain: - return '%s <%s@%s>' % (this.name, this.alias_name, this.alias_domain) - elif this.email: - return '%s <%s>' % (this.name, this.email) - raise osv.except_osv(_('Invalid Action!'), _("Unable to send email, please configure the sender's email address or alias.")) + """ Kept for compatibility + TDE TODO: remove me in 8.0 + """ + return self.pool['mail.message']._get_default_from(cr, uid, context=context) _defaults = { 'state': 'outgoing', - 'email_from': lambda self, cr, uid, ctx=None: self._get_default_from(cr, uid, ctx), } def default_get(self, cr, uid, fields, context=None): @@ -93,19 +89,25 @@ class mail_mail(osv.Model): # if value specified: directly return it if values.get('reply_to'): return values.get('reply_to') + format_name = True # whether to use a 'Followers of Pigs <pigs@openerp.com' format + email_reply_to = None - mailgateway = True # tells whether the answer will go through the mailgateway, leading to the formatting of reply_to <Followers of ...> ir_config_parameter = self.pool.get("ir.config_parameter") catchall_domain = ir_config_parameter.get_param(cr, uid, "mail.catchall.domain", context=context) - # model, res_id, email_from, reply_to: comes from values OR related message - message = None + # model, res_id, email_from: comes from values OR related message + model, res_id, email_from = values.get('model'), values.get('res_id'), values.get('email_from') if values.get('mail_message_id'): message = self.pool.get('mail.message').browse(cr, uid, values.get('mail_message_id'), context=context) - model = values.get('model', message and message.model or False) - res_id = values.get('res_id', message and message.res_id or False) - email_from = values.get('email_from', message and message.email_from or False) - email_reply_to = message and message.reply_to or False + if message.reply_to: + email_reply_to = message.reply_to + format_name = False + if not model: + model = message.model + if not res_id: + res_id = message.res_id + if not email_from: + email_from = message.email_from # if model and res_id: try to use ``message_get_reply_to`` that returns the document alias if not email_reply_to and model and res_id and hasattr(self.pool[model], 'message_get_reply_to'): @@ -115,16 +117,16 @@ class mail_mail(osv.Model): catchall_alias = ir_config_parameter.get_param(cr, uid, "mail.catchall.alias", context=context) if catchall_domain and catchall_alias: email_reply_to = '%s@%s' % (catchall_alias, catchall_domain) - # no alias reply_to -> reply_to will be the email_from, only the email part + + # still no reply_to -> reply_to will be the email_from if not email_reply_to and email_from: - emails = tools.email_split(email_from) - if emails: - email_reply_to = emails[0] - if emails[0].split('@')[1] != catchall_domain: - mailgateway = False + email_reply_to = email_from # format 'Document name <email_address>' - if email_reply_to and model and res_id and mailgateway: + if email_reply_to and model and res_id and format_name: + emails = tools.email_split(email_reply_to) + if emails: + email_reply_to = emails[0] document_name = self.pool[model].name_get(cr, SUPERUSER_ID, [res_id], context=context)[0] if document_name: # sanitize document name diff --git a/addons/mail/mail_mail_view.xml b/addons/mail/mail_mail_view.xml index 7384cc24a75..f3728d4653a 100644 --- a/addons/mail/mail_mail_view.xml +++ b/addons/mail/mail_mail_view.xml @@ -115,7 +115,7 @@ <field name="res_model">mail.mail</field> <field name="view_type">form</field> <field name="view_mode">tree,form</field> - <field name="context">{'search_default_outgoing': 1, 'search_default_type_email': 1}</field> + <field name="context">{'search_default_outgoing': 1}</field> <field name="search_view_id" ref="view_mail_search"/> </record> diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index 252179614c6..9d6829f3f6e 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -196,6 +196,14 @@ class mail_message(osv.Model): def _needaction_domain_get(self, cr, uid, context=None): return [('to_read', '=', True)] + def _get_default_from(self, cr, uid, context=None): + this = self.pool.get('res.users').browse(cr, SUPERUSER_ID, uid, context=context) + if this.alias_domain: + return '%s <%s@%s>' % (this.name, this.alias_name, this.alias_domain) + elif this.email: + return '%s <%s>' % (this.name, this.email) + raise osv.except_osv(_('Invalid Action!'), _("Unable to send email, please configure the sender's email address or alias.")) + def _get_default_author(self, cr, uid, context=None): return self.pool.get('res.users').read(cr, uid, uid, ['partner_id'], context=context)['partner_id'][0] @@ -204,7 +212,7 @@ class mail_message(osv.Model): 'date': lambda *a: fields.datetime.now(), 'author_id': lambda self, cr, uid, ctx=None: self._get_default_author(cr, uid, ctx), 'body': '', - 'email_from': lambda self, cr, uid, ctx=None: self.pool.get('mail.mail')._get_default_from(cr, uid, ctx), + 'email_from': lambda self, cr, uid, ctx=None: self._get_default_from(cr, uid, ctx), } #------------------------------------------------------ @@ -329,8 +337,10 @@ class mail_message(osv.Model): for key, message in message_tree.iteritems(): if message.author_id: partner_ids |= set([message.author_id.id]) - if message.notified_partner_ids: + if message.subtype_id and message.notified_partner_ids: # take notified people of message with a subtype partner_ids |= set([partner.id for partner in message.notified_partner_ids]) + elif not message.subtype_id and message.partner_ids: # take specified people of message without a subtype (log) + partner_ids |= set([partner.id for partner in message.partner_ids]) if message.attachment_ids: attachment_ids |= set([attachment.id for attachment in message.attachment_ids]) # Read partners as SUPERUSER -> display the names like classic m2o even if no access @@ -350,9 +360,12 @@ class mail_message(osv.Model): else: author = (0, message.email_from) partner_ids = [] - for partner in message.notified_partner_ids: - if partner.id in partner_tree: - partner_ids.append(partner_tree[partner.id]) + if message.subtype_id: + partner_ids = [partner_tree[partner.id] for partner in message.notified_partner_ids + if partner.id in partner_tree] + else: + partner_ids = [partner_tree[partner.id] for partner in message.partner_ids + if partner.id in partner_tree] attachment_ids = [] for attachment in message.attachment_ids: if attachment.id in attachments_tree: @@ -766,7 +779,9 @@ class mail_message(osv.Model): elif not values.get('message_id'): values['message_id'] = tools.generate_tracking_message_id('private') newid = super(mail_message, self).create(cr, uid, values, context) - self._notify(cr, uid, newid, context=context) + self._notify(cr, uid, newid, context=context, + force_send=context.get('mail_notify_force_send', True), + user_signature=context.get('mail_notify_user_signature', True)) # TDE FIXME: handle default_starred. Why not setting an inv on starred ? # Because starred will call set_message_starred, that looks for notifications. # When creating a new mail_message, it will create a notification to a message @@ -880,20 +895,16 @@ class mail_message(osv.Model): return '' return result - def _notify(self, cr, uid, newid, context=None): + def _notify(self, cr, uid, newid, context=None, force_send=False, user_signature=True): """ Add the related record followers to the destination partner_ids if is not a private message. Call mail_notification.notify to manage the email sending """ notification_obj = self.pool.get('mail.notification') message = self.browse(cr, uid, newid, context=context) - partners_to_notify = set([]) - # message has no subtype_id: pure log message -> no partners, no one notified - if not message.subtype_id: - return True - # all followers of the mail.message document have to be added as partners and notified - if message.model and message.res_id: + # all followers of the mail.message document have to be added as partners and notified if a subtype is defined (otherwise: log message) + if message.subtype_id and message.model and message.res_id: fol_obj = self.pool.get("mail.followers") # browse as SUPERUSER because rules could restrict the search results fol_ids = fol_obj.search(cr, SUPERUSER_ID, [ @@ -903,7 +914,7 @@ class mail_message(osv.Model): ], context=context) partners_to_notify |= set(fo.partner_id for fo in fol_obj.browse(cr, SUPERUSER_ID, fol_ids, context=context)) # remove me from notified partners, unless the message is written on my own wall - if message.author_id and message.model == "res.partner" and message.res_id == message.author_id.id: + if message.subtype_id and message.author_id and message.model == "res.partner" and message.res_id == message.author_id.id: partners_to_notify |= set([message.author_id]) elif message.author_id: partners_to_notify -= set([message.author_id]) @@ -914,7 +925,8 @@ class mail_message(osv.Model): # notify if partners_to_notify: - notification_obj._notify(cr, uid, newid, partners_to_notify=[p.id for p in partners_to_notify], context=context) + notification_obj._notify(cr, uid, newid, partners_to_notify=[p.id for p in partners_to_notify], context=context, + force_send=force_send, user_signature=user_signature) message.refresh() # An error appear when a user receive a notification without notifying diff --git a/addons/mail/mail_message_view.xml b/addons/mail/mail_message_view.xml index 02f4ef7fdbe..e4442e366e3 100644 --- a/addons/mail/mail_message_view.xml +++ b/addons/mail/mail_message_view.xml @@ -30,9 +30,9 @@ <field name="subject"/> <field name="author_id"/> <field name="email_from"/> + <field name="reply_to"/> <field name="date"/> <field name="type"/> - <field name="subtype_id"/> </group> <group> <field name="model"/> @@ -40,6 +40,7 @@ <field name="parent_id"/> <field name="partner_ids" widget="many2many_tags"/> <field name="notified_partner_ids" widget="many2many_tags"/> + <field name="subtype_id"/> </group> </group> <field name="body"/> diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index a46f416f44b..403cfab7d61 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -25,7 +25,6 @@ import dateutil import email import logging import pytz -import re import time import xmlrpclib from email.message import Message @@ -102,21 +101,22 @@ class mail_thread(osv.AbstractModel): if catchall_domain and model and res_id: # specific res_id -> find its alias (i.e. section_id specified) object_id = self.pool.get(model).browse(cr, uid, res_id, context=context) # check that the alias effectively creates new records - if object_id.alias_id and object_id.alias_id.alias_model_id and \ + if object_id.alias_id and object_id.alias_id.alias_name and \ + object_id.alias_id.alias_model_id and \ object_id.alias_id.alias_model_id.model == self._name and \ object_id.alias_id.alias_force_thread_id == 0: alias = object_id.alias_id elif catchall_domain and model: # no specific res_id given -> generic help message, take an example alias (i.e. alias of some section_id) model_id = self.pool.get('ir.model').search(cr, uid, [("model", "=", self._name)], context=context)[0] alias_obj = self.pool.get('mail.alias') - alias_ids = alias_obj.search(cr, uid, [("alias_model_id", "=", model_id), ('alias_force_thread_id', '=', 0)], context=context, order='id ASC') + alias_ids = alias_obj.search(cr, uid, [("alias_model_id", "=", model_id), ("alias_name", "!=", False), ('alias_force_thread_id', '=', 0)], context=context, order='id ASC') if alias_ids and len(alias_ids) == 1: # if several aliases -> incoherent to propose one guessed from nowhere, therefore avoid if several aliases alias = alias_obj.browse(cr, uid, alias_ids[0], context=context) if alias: alias_email = alias.name_get()[0][1] return _("""<p class='oe_view_nocontent_create'> - Click here to add a new %(document)s or send an email to: <a href='mailto:%(email)s'>%(email)s</a> + Click here to add new %(document)s or send an email to: <a href='mailto:%(email)s'>%(email)s</a> </p> %(static_help)s""" ) % { @@ -126,7 +126,7 @@ class mail_thread(osv.AbstractModel): } if document_name != 'document' and help and help.find("oe_view_nocontent_create") == -1: - return _("<p class='oe_view_nocontent_create'>Click here to add a new %(document)s</p>%(static_help)s") % { + return _("<p class='oe_view_nocontent_create'>Click here to add new %(document)s</p>%(static_help)s") % { 'document': document_name, 'static_help': help or '', } @@ -240,21 +240,41 @@ class mail_thread(osv.AbstractModel): fol_obj.create(cr, SUPERUSER_ID, {'res_model': self._name, 'res_id': id, 'partner_id': partner_id}) def _search_followers(self, cr, uid, obj, name, args, context): + """Search function for message_follower_ids + + Do not use with operator 'not in'. Use instead message_is_followers + """ fol_obj = self.pool.get('mail.followers') res = [] for field, operator, value in args: assert field == name + # TOFIX make it work with not in + assert operator != "not in", "Do not search message_follower_ids with 'not in'" fol_ids = fol_obj.search(cr, SUPERUSER_ID, [('res_model', '=', self._name), ('partner_id', operator, value)]) res_ids = [fol.res_id for fol in fol_obj.browse(cr, SUPERUSER_ID, fol_ids)] res.append(('id', 'in', res_ids)) return res + def _search_is_follower(self, cr, uid, obj, name, args, context): + """Search function for message_is_follower""" + res = [] + for field, operator, value in args: + assert field == name + partner_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).partner_id.id + if (operator == '=' and value) or (operator == '!=' and not value): # is a follower + res_ids = self.search(cr, uid, [('message_follower_ids', 'in', [partner_id])], context=context) + else: # is not a follower or unknown domain + mail_ids = self.search(cr, uid, [('message_follower_ids', 'in', [partner_id])], context=context) + res_ids = self.search(cr, uid, [('id', 'not in', mail_ids)], context=context) + res.append(('id', 'in', res_ids)) + return res + _columns = { - 'message_is_follower': fields.function(_get_followers, - type='boolean', string='Is a Follower', multi='_get_followers,'), + 'message_is_follower': fields.function(_get_followers, type='boolean', + fnct_search=_search_is_follower, string='Is a Follower', multi='_get_followers,'), 'message_follower_ids': fields.function(_get_followers, fnct_inv=_set_followers, - fnct_search=_search_followers, type='many2many', - obj='res.partner', string='Followers', multi='_get_followers'), + fnct_search=_search_followers, type='many2many', + obj='res.partner', string='Followers', multi='_get_followers'), 'message_ids': fields.one2many('mail.message', 'res_id', domain=lambda self: [('model', '=', self._name)], auto_join=True, @@ -543,6 +563,8 @@ class mail_thread(osv.AbstractModel): #------------------------------------------------------ def message_get_reply_to(self, cr, uid, ids, context=None): + """ Returns the preferred reply-to email address that is basically + the alias of the document, if it exists. """ if not self._inherits.get('mail.alias'): return [False for id in ids] return ["%s@%s" % (record['alias_name'], record['alias_domain']) @@ -559,34 +581,130 @@ class mail_thread(osv.AbstractModel): ret_dict = {} for model_name in self.pool.obj_list(): model = self.pool[model_name] - if 'mail.thread' in getattr(model, '_inherit', []): + if hasattr(model, "message_process") and hasattr(model, "message_post"): ret_dict[model_name] = model._description return ret_dict def _message_find_partners(self, cr, uid, message, header_fields=['From'], context=None): """ Find partners related to some header fields of the message. - TDE TODO: merge me with other partner finding methods in 8.0 """ - partner_obj = self.pool.get('res.partner') - partner_ids = [] + :param string message: an email.message instance """ s = ', '.join([decode(message.get(h)) for h in header_fields if message.get(h)]) - for email_address in tools.email_split(s): - related_partners = partner_obj.search(cr, uid, [('email', 'ilike', email_address), ('user_ids', '!=', False)], limit=1, context=context) - if not related_partners: - related_partners = partner_obj.search(cr, uid, [('email', 'ilike', email_address)], limit=1, context=context) - partner_ids += related_partners - return partner_ids + return filter(lambda x: x, self._find_partner_from_emails(cr, uid, None, tools.email_split(s), context=context)) + + def message_route_verify(self, cr, uid, message, message_dict, route, update_author=True, assert_model=True, create_fallback=True, context=None): + """ Verify route validity. Check and rules: + 1 - if thread_id -> check that document effectively exists; otherwise + fallback on a message_new by resetting thread_id + 2 - check that message_update exists if thread_id is set; or at least + that message_new exist + [ - find author_id if udpate_author is set] + 3 - if there is an alias, check alias_contact: + 'followers' and thread_id: + check on target document that the author is in the followers + 'followers' and alias_parent_thread_id: + check on alias parent document that the author is in the + followers + 'partners': check that author_id id set + """ + + assert isinstance(route, (list, tuple)), 'A route should be a list or a tuple' + assert len(route) == 5, 'A route should contain 5 elements: model, thread_id, custom_values, uid, alias record' - def _message_find_user_id(self, cr, uid, message, context=None): - """ TDE TODO: check and maybe merge me with other user finding methods in 8.0 """ - from_local_part = tools.email_split(decode(message.get('From')))[0] - # FP Note: canonification required, the minimu: .lower() - user_ids = self.pool.get('res.users').search(cr, uid, ['|', - ('login', '=', from_local_part), - ('email', '=', from_local_part)], context=context) - return user_ids[0] if user_ids else uid + message_id = message.get('Message-Id') + email_from = decode_header(message, 'From') + author_id = message_dict.get('author_id') + model, thread_id, alias = route[0], route[1], route[4] + model_pool = None + + def _create_bounce_email(): + mail_mail = self.pool.get('mail.mail') + mail_id = mail_mail.create(cr, uid, { + 'body_html': '<div><p>Hello,</p>' + '<p>The following email sent to %s cannot be accepted because this is ' + 'a private email address. Only allowed people can contact us at this address.</p></div>' + '<blockquote>%s</blockquote>' % (message.get('to'), message_dict.get('body')), + 'subject': 'Re: %s' % message.get('subject'), + 'email_to': message.get('from'), + 'auto_delete': True, + }, context=context) + mail_mail.send(cr, uid, [mail_id], context=context) + + def _warn(message): + _logger.warning('Routing mail with Message-Id %s: route %s: %s', + message_id, route, message) + + # Wrong model + if model and not model in self.pool: + if assert_model: + assert model in self.pool, 'Routing: unknown target model %s' % model + _warn('unknown target model %s' % model) + return () + elif model: + model_pool = self.pool[model] + + # Private message: should not contain any thread_id + if not model and thread_id: + if assert_model: + assert thread_id == 0, 'Routing: posting a message without model should be with a null res_id (private message).' + _warn('posting a message without model should be with a null res_id (private message), resetting thread_id') + thread_id = 0 + + # Existing Document: check if exists; if not, fallback on create if allowed + if thread_id and not model_pool.exists(cr, uid, thread_id): + if create_fallback: + _warn('reply to missing document (%s,%s), fall back on new document creation' % (model, thread_id)) + thread_id = None + elif assert_model: + assert model_pool.exists(cr, uid, thread_id), 'Routing: reply to missing document (%s,%s)' % (model, thread_id) + else: + _warn('reply to missing document (%s,%s), skipping' % (model, thread_id)) + return () + + # Existing Document: check model accepts the mailgateway + if thread_id and not hasattr(model_pool, 'message_update'): + if create_fallback: + _warn('model %s does not accept document update, fall back on document creation' % model) + thread_id = None + elif assert_model: + assert hasattr(model_pool, 'message_update'), 'Routing: model %s does not accept document update, crashing' % model + else: + _warn('model %s does not accept document update, skipping' % model) + return () + + # New Document: check model accepts the mailgateway + if not thread_id and not hasattr(model_pool, 'message_new'): + if assert_model: + assert hasattr(model_pool, 'message_new'), 'Model %s does not accept document creation, crashing' % model + _warn('model %s does not accept document creation, skipping' % model) + return () + + # Update message author if asked + # We do it now because we need it for aliases (contact settings) + if not author_id and update_author: + author_ids = self._find_partner_from_emails(cr, uid, thread_id, [email_from], model=model, context=context) + if author_ids: + author_id = author_ids[0] + message_dict['author_id'] = author_id - def message_route(self, cr, uid, message, model=None, thread_id=None, + # Alias: check alias_contact settings + if alias and alias.alias_contact == 'followers' and (thread_id or alias.alias_parent_thread_id): + if thread_id: + obj = self.pool[model].browse(cr, uid, thread_id, context=context) + else: + obj = self.pool[alias.alias_parent_model_id.model].browse(cr, uid, alias.alias_parent_thread_id, context=context) + if not author_id or not author_id in [fol.id for fol in obj.message_follower_ids]: + _warn('alias %s restricted to internal followers, skipping' % alias.alias_name) + _create_bounce_email() + return () + elif alias and alias.alias_contact == 'partners' and not author_id: + _warn('alias %s does not accept unknown author, skipping' % alias.alias_name) + _create_bounce_email() + return () + + return (model, thread_id, route[2], route[3], route[4]) + + def message_route(self, cr, uid, message, message_dict, model=None, thread_id=None, custom_values=None, context=None): """Attempt to figure out the correct target model, thread_id, custom_values and user_id to use for an incoming message. @@ -606,6 +724,7 @@ class mail_thread(osv.AbstractModel): 4. If all the above fails, raise an exception. :param string message: an email.message instance + :param dict message_dict: dictionary holding message variables :param string model: the fallback model to use if the message does not match any of the currently configured mail aliases (may be None if a matching alias is supposed to be present) @@ -616,9 +735,12 @@ class mail_thread(osv.AbstractModel): :param int thread_id: optional ID of the record/thread from ``model`` to which this mail should be attached. Only used if the message does not reply to an existing thread and does not match any mail alias. - :return: list of [model, thread_id, custom_values, user_id] + :return: list of [model, thread_id, custom_values, user_id, alias] """ assert isinstance(message, Message), 'message must be an email.message.Message at this point' + fallback_model = model + + # Get email.message.Message variables for future processing message_id = message.get('Message-Id') email_from = decode_header(message, 'From') email_to = decode_header(message, 'To') @@ -628,18 +750,20 @@ class mail_thread(osv.AbstractModel): # 1. Verify if this is a reply to an existing thread thread_references = references or in_reply_to ref_match = thread_references and tools.reference_re.search(thread_references) - if ref_match: thread_id = int(ref_match.group(1)) - model = ref_match.group(2) or model + model = ref_match.group(2) or fallback_model if thread_id and model in self.pool: model_obj = self.pool[model] if model_obj.exists(cr, uid, thread_id) and hasattr(model_obj, 'message_update'): _logger.info('Routing mail from %s to %s with Message-Id %s: direct reply to model: %s, thread_id: %s, custom_values: %s, uid: %s', email_from, email_to, message_id, model, thread_id, custom_values, uid) - return [(model, thread_id, custom_values, uid)] + route = self.message_route_verify(cr, uid, message, message_dict, + (model, thread_id, custom_values, uid, None), + update_author=True, assert_model=True, create_fallback=True, context=context) + return route and [route] or [] - # Verify whether this is a reply to a private message + # 2. Reply to a private message if in_reply_to: message_ids = self.pool.get('mail.message').search(cr, uid, [ ('message_id', '=', in_reply_to), @@ -649,9 +773,12 @@ class mail_thread(osv.AbstractModel): message = self.pool.get('mail.message').browse(cr, uid, message_ids[0], context=context) _logger.info('Routing mail from %s to %s with Message-Id %s: direct reply to a private message: %s, custom_values: %s, uid: %s', email_from, email_to, message_id, message.id, custom_values, uid) - return [(message.model, message.res_id, custom_values, uid)] + route = self.message_route_verify(cr, uid, message, message_dict, + (message.model, message.res_id, custom_values, uid, None), + update_author=True, assert_model=True, create_fallback=True, context=context) + return route and [route] or [] - # 2. Look for a matching mail.alias entry + # 3. Look for a matching mail.alias entry # Delivered-To is a safe bet in most modern MTAs, but we have to fallback on To + Cc values # for all the odd MTAs out there, as there is no standard header for the envelope's `rcpt_to` value. rcpt_tos = \ @@ -676,14 +803,16 @@ class mail_thread(osv.AbstractModel): # user_id = self._message_find_user_id(cr, uid, message, context=context) user_id = uid _logger.info('No matching user_id for the alias %s', alias.alias_name) - routes.append((alias.alias_model_id.model, alias.alias_force_thread_id, \ - eval(alias.alias_defaults), user_id)) - _logger.info('Routing mail from %s to %s with Message-Id %s: direct alias match: %r', - email_from, email_to, message_id, routes) + route = (alias.alias_model_id.model, alias.alias_force_thread_id, eval(alias.alias_defaults), user_id, alias) + _logger.info('Routing mail from %s to %s with Message-Id %s: direct alias match: %r', + email_from, email_to, message_id, route) + route = self.message_route_verify(cr, uid, message, message_dict, route, + update_author=True, assert_model=True, create_fallback=True, context=context) + if route: + routes.append(route) return routes - # 3. Fallback to the provided parameters, if they work - model_pool = self.pool.get(model) + # 4. Fallback to the provided parameters, if they work if not thread_id: # Legacy: fallback to matching [ID] in the Subject match = tools.res_re.search(decode_header(message, 'Subject')) @@ -693,16 +822,18 @@ class mail_thread(osv.AbstractModel): thread_id = int(thread_id) except: thread_id = False - assert thread_id and hasattr(model_pool, 'message_update') or hasattr(model_pool, 'message_new'), \ + _logger.info('Routing mail from %s to %s with Message-Id %s: fallback to model:%s, thread_id:%s, custom_values:%s, uid:%s', + email_from, email_to, message_id, fallback_model, thread_id, custom_values, uid) + route = self.message_route_verify(cr, uid, message, message_dict, + (fallback_model, thread_id, custom_values, uid, None), + update_author=True, assert_model=True, context=context) + if route: + return [route] + + # AssertionError if no routes found and if no bounce occured + assert False, \ "No possible route found for incoming message from %s to %s (Message-Id %s:)." \ "Create an appropriate mail.alias or force the destination model." % (email_from, email_to, message_id) - if thread_id and not model_pool.exists(cr, uid, thread_id): - _logger.warning('Received mail reply to missing document %s! Ignoring and creating new document instead for Message-Id %s', - thread_id, message_id) - thread_id = None - _logger.info('Routing mail from %s to %s with Message-Id %s: fallback to model:%s, thread_id:%s, custom_values:%s, uid:%s', - email_from, email_to, message_id, model, thread_id, custom_values, uid) - return [(model, thread_id, custom_values, uid)] def message_process(self, cr, uid, model, message, custom_values=None, save_original=False, strip_attachments=False, @@ -756,25 +887,21 @@ class mail_thread(osv.AbstractModel): msg = self.message_parse(cr, uid, msg_txt, save_original=save_original, context=context) if strip_attachments: msg.pop('attachments', None) + # postpone setting msg.partner_ids after message_post, to avoid double notifications + partner_ids = msg.pop('partner_ids', []) if msg.get('message_id'): # should always be True as message_parse generate one if missing existing_msg_ids = self.pool.get('mail.message').search(cr, SUPERUSER_ID, [ ('message_id', '=', msg.get('message_id')), ], context=context) if existing_msg_ids: - _logger.info('Ignored mail from %s to %s with Message-Id %s:: found duplicated Message-Id during processing', + _logger.info('Ignored mail from %s to %s with Message-Id %s: found duplicated Message-Id during processing', msg.get('from'), msg.get('to'), msg.get('message_id')) return False # find possible routes for the message - routes = self.message_route(cr, uid, msg_txt, model, - thread_id, custom_values, - context=context) - - # postpone setting msg.partner_ids after message_post, to avoid double notifications - partner_ids = msg.pop('partner_ids', []) - + routes = self.message_route(cr, uid, msg_txt, msg, model, thread_id, custom_values, context=context) thread_id = False - for model, thread_id, custom_values, user_id in routes: + for model, thread_id, custom_values, user_id, alias in routes: if self._name == 'mail.thread': context.update({'thread_model': model}) if model: @@ -785,15 +912,17 @@ class mail_thread(osv.AbstractModel): # disabled subscriptions during message_new/update to avoid having the system user running the # email gateway become a follower of all inbound messages - nosub_ctx = dict(context, mail_create_nosubscribe=True) + nosub_ctx = dict(context, mail_create_nosubscribe=True, mail_create_nolog=True) if thread_id and hasattr(model_pool, 'message_update'): model_pool.message_update(cr, user_id, [thread_id], msg, context=nosub_ctx) else: - nosub_ctx = dict(nosub_ctx, mail_create_nolog=True) thread_id = model_pool.message_new(cr, user_id, msg, custom_values, context=nosub_ctx) else: assert thread_id == 0, "Posting a message without model should be with a null res_id, to create a private message." model_pool = self.pool.get('mail.thread') + if not hasattr(model_pool, 'message_post'): + context['thread_model'] = model + model_pool = self.pool['mail.thread'] new_msg_id = model_pool.message_post(cr, uid, [thread_id], context=context, subtype='mail.mt_comment', **msg) if partner_ids: @@ -923,7 +1052,6 @@ class mail_thread(osv.AbstractModel): """ msg_dict = { 'type': 'email', - 'author_id': False, } if not isinstance(message, Message): if isinstance(message, unicode): @@ -946,12 +1074,7 @@ class mail_thread(osv.AbstractModel): msg_dict['from'] = decode(message.get('from')) msg_dict['to'] = decode(message.get('to')) msg_dict['cc'] = decode(message.get('cc')) - - if message.get('From'): - author_ids = self._message_find_partners(cr, uid, message, ['From'], context=context) - if author_ids: - msg_dict['author_id'] = author_ids[0] - msg_dict['email_from'] = decode(message.get('from')) + msg_dict['email_from'] = decode(message.get('from')) partner_ids = self._message_find_partners(cr, uid, message, ['To', 'Cc'], context=context) msg_dict['partner_ids'] = [(4, partner_id) for partner_id in partner_ids] @@ -1005,7 +1128,7 @@ class mail_thread(osv.AbstractModel): partner_id, partner_name<partner_email> or partner_name, reason """ if email and not partner: # get partner info from email - partner_info = self.message_get_partner_info_from_emails(cr, uid, [email], context=context, res_id=obj.id)[0] + partner_info = self.message_partner_info_from_emails(cr, uid, obj.id, [email], context=context)[0] if partner_info.get('partner_id'): partner = self.pool.get('res.partner').browse(cr, SUPERUSER_ID, [partner_info.get('partner_id')], context=context)[0] if email and email in [val[1] for val in result[obj.id]]: # already existing email -> skip @@ -1033,53 +1156,76 @@ class mail_thread(osv.AbstractModel): self._message_add_suggested_recipient(cr, uid, result, obj, partner=obj.user_id.partner_id, reason=self._all_columns['user_id'].column.string, context=context) return result - def message_get_partner_info_from_emails(self, cr, uid, emails, link_mail=False, context=None, res_id=None): - """ Wrapper with weird order parameter because of 7.0 fix. + def _find_partner_from_emails(self, cr, uid, id, emails, model=None, context=None, check_followers=True): + """ Utility method to find partners from email addresses. The rules are : + 1 - check in document (model | self, id) followers + 2 - try to find a matching partner that is also an user + 3 - try to find a matching partner - TDE TODO: remove me in 8.0 """ - return self.message_find_partner_from_emails(cr, uid, res_id, emails, link_mail=link_mail, context=context) + :param list emails: list of email addresses + :param string model: model to fetch related record; by default self + is used. + :param boolean check_followers: check in document followers + """ + partner_obj = self.pool['res.partner'] + partner_ids = [] + obj = None + if id and (model or self._name != 'mail.thread') and check_followers: + if model: + obj = self.pool[model].browse(cr, uid, id, context=context) + else: + obj = self.browse(cr, uid, id, context=context) + for contact in emails: + partner_id = False + email_address = tools.email_split(contact) + if not email_address: + partner_ids.append(partner_id) + continue + email_address = email_address[0] + # first try: check in document's followers + if obj: + for follower in obj.message_follower_ids: + if follower.email == email_address: + partner_id = follower.id + # second try: check in partners that are also users + if not partner_id: + ids = partner_obj.search(cr, SUPERUSER_ID, [ + ('email', 'ilike', email_address), + ('user_ids', '!=', False) + ], limit=1, context=context) + if ids: + partner_id = ids[0] + # third try: check in partners + if not partner_id: + ids = partner_obj.search(cr, SUPERUSER_ID, [ + ('email', 'ilike', email_address) + ], limit=1, context=context) + if ids: + partner_id = ids[0] + partner_ids.append(partner_id) + return partner_ids - def message_find_partner_from_emails(self, cr, uid, id, emails, link_mail=False, context=None): + def message_partner_info_from_emails(self, cr, uid, id, emails, link_mail=False, context=None): """ Convert a list of emails into a list partner_ids and a list new_partner_ids. The return value is non conventional because it is meant to be used by the mail widget. - :return dict: partner_ids and new_partner_ids - - TDE TODO: merge me with other partner finding methods in 8.0 """ + :return dict: partner_ids and new_partner_ids """ mail_message_obj = self.pool.get('mail.message') - partner_obj = self.pool.get('res.partner') + partner_ids = self._find_partner_from_emails(cr, uid, id, emails, context=context) result = list() - if id and self._name != 'mail.thread': - obj = self.browse(cr, SUPERUSER_ID, id, context=context) - else: - obj = None - for email in emails: - partner_info = {'full_name': email, 'partner_id': False} - m = re.search(r"((.+?)\s*<)?([^<>]+@[^<>]+)>?", email, re.IGNORECASE | re.DOTALL) - if not m: - continue - email_address = m.group(3) - # first try: check in document's followers - if obj: - for follower in obj.message_follower_ids: - if follower.email == email_address: - partner_info['partner_id'] = follower.id - # second try: check in partners - if not partner_info.get('partner_id'): - ids = partner_obj.search(cr, SUPERUSER_ID, [('email', 'ilike', email_address), ('user_ids', '!=', False)], limit=1, context=context) - if not ids: - ids = partner_obj.search(cr, SUPERUSER_ID, [('email', 'ilike', email_address)], limit=1, context=context) - if ids: - partner_info['partner_id'] = ids[0] + for idx in range(len(emails)): + email_address = emails[idx] + partner_id = partner_ids[idx] + partner_info = {'full_name': email_address, 'partner_id': partner_id} result.append(partner_info) # link mail with this from mail to the new partner id if link_mail and partner_info['partner_id']: message_ids = mail_message_obj.search(cr, SUPERUSER_ID, [ '|', - ('email_from', '=', email), - ('email_from', 'ilike', '<%s>' % email), + ('email_from', '=', email_address), + ('email_from', 'ilike', '<%s>' % email_address), ('author_id', '=', False) ], context=context) if message_ids: @@ -1128,22 +1274,11 @@ class mail_thread(osv.AbstractModel): model = False if thread_id: model = context.get('thread_model', self._name) if self._name == 'mail.thread' else self._name - if model != self._name: + if model != self._name and hasattr(self.pool[model], 'message_post'): del context['thread_model'] return self.pool[model].message_post(cr, uid, thread_id, body=body, subject=subject, type=type, subtype=subtype, parent_id=parent_id, attachments=attachments, context=context, content_subtype=content_subtype, **kwargs) - # 0: Parse email-from, try to find a better author_id based on document's followers for incoming emails - email_from = kwargs.get('email_from') - if email_from and thread_id and type == 'email' and kwargs.get('author_id'): - email_list = tools.email_split(email_from) - doc = self.browse(cr, uid, thread_id, context=context) - if email_list and doc: - author_ids = self.pool.get('res.partner').search(cr, uid, [ - ('email', 'ilike', email_list[0]), - ('id', 'in', [f.id for f in doc.message_follower_ids]) - ], limit=1, context=context) - if author_ids: - kwargs['author_id'] = author_ids[0] + #0: Find the message's author, because we need it for private discussion author_id = kwargs.get('author_id') if author_id is None: # keep False values author_id = self.pool.get('mail.message')._get_default_author(cr, uid, context=context) @@ -1255,21 +1390,6 @@ class mail_thread(osv.AbstractModel): return msg_id #------------------------------------------------------ - # Compatibility methods: do not use - # TDE TODO: remove me in 8.0 - #------------------------------------------------------ - - def message_create_partners_from_emails(self, cr, uid, emails, context=None): - return {'partner_ids': [], 'new_partner_ids': []} - - def message_post_user_api(self, cr, uid, thread_id, body='', parent_id=False, - attachment_ids=None, content_subtype='plaintext', - context=None, **kwargs): - return self.message_post(cr, uid, thread_id, body=body, parent_id=parent_id, - attachment_ids=attachment_ids, content_subtype=content_subtype, - context=context, **kwargs) - - #------------------------------------------------------ # Followers API #------------------------------------------------------ @@ -1287,7 +1407,10 @@ class mail_thread(osv.AbstractModel): def message_subscribe(self, cr, uid, ids, partner_ids, subtype_ids=None, context=None): """ Add partners to the records followers. """ - user_pid = self.pool.get('res.users').read(cr, uid, uid, ['partner_id'], context=context)['partner_id'][0] + mail_followers_obj = self.pool.get('mail.followers') + subtype_obj = self.pool.get('mail.message.subtype') + + user_pid = self.pool.get('res.users').browse(cr, uid, uid, context=context).partner_id.id if set(partner_ids) == set([user_pid]): try: self.check_access_rights(cr, uid, 'read') @@ -1296,27 +1419,35 @@ class mail_thread(osv.AbstractModel): else: self.check_access_rights(cr, uid, 'write') - # subscribe partners - self.write(cr, SUPERUSER_ID, ids, {'message_follower_ids': [(4, pid) for pid in partner_ids]}, context=context) - - # subtype specified: update the subscriptions - fol_obj = self.pool.get('mail.followers') - if subtype_ids is not None: - fol_ids = fol_obj.search(cr, SUPERUSER_ID, [('res_model', '=', self._name), ('res_id', 'in', ids), ('partner_id', 'in', partner_ids)], context=context) - fol_obj.write(cr, SUPERUSER_ID, fol_ids, {'subtype_ids': [(6, 0, subtype_ids)]}, context=context) - # no subtypes: default ones for new subscription, do not update existing subscriptions - else: - # search new subscriptions: subtype_ids is False - fol_ids = fol_obj.search(cr, SUPERUSER_ID, [ - ('res_model', '=', self._name), - ('res_id', 'in', ids), - ('partner_id', 'in', partner_ids), - ('subtype_ids', '=', False) - ], context=context) - if fol_ids: - subtype_obj = self.pool.get('mail.message.subtype') - subtype_ids = subtype_obj.search(cr, uid, [('default', '=', True), '|', ('res_model', '=', self._name), ('res_model', '=', False)], context=context) - fol_obj.write(cr, SUPERUSER_ID, fol_ids, {'subtype_ids': [(6, 0, subtype_ids)]}, context=context) + for record in self.browse(cr, SUPERUSER_ID, ids, context=context): + existing_pids = set([f.id for f in record.message_follower_ids + if f.id in partner_ids]) + new_pids = set(partner_ids) - existing_pids + + # subtype_ids specified: update already subscribed partners + if subtype_ids and existing_pids: + fol_ids = mail_followers_obj.search(cr, SUPERUSER_ID, [ + ('res_model', '=', self._name), + ('res_id', '=', record.id), + ('partner_id', 'in', list(existing_pids)), + ], context=context) + mail_followers_obj.write(cr, SUPERUSER_ID, fol_ids, {'subtype_ids': [(6, 0, subtype_ids)]}, context=context) + # subtype_ids not specified: do not update already subscribed partner, fetch default subtypes for new partners + else: + subtype_ids = subtype_obj.search(cr, uid, [ + ('default', '=', True), + '|', + ('res_model', '=', self._name), + ('res_model', '=', False) + ], context=context) + # subscribe new followers + for new_pid in new_pids: + mail_followers_obj.create(cr, SUPERUSER_ID, { + 'res_model': self._name, + 'res_id': record.id, + 'partner_id': new_pid, + 'subtype_ids': [(6, 0, subtype_ids)], + }, context=context) return True @@ -1454,4 +1585,33 @@ class mail_thread(osv.AbstractModel): ''', (ids, self._name, partner_id)) return True -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + #------------------------------------------------------ + # Thread suggestion + #------------------------------------------------------ + + def get_suggested_thread(self, cr, uid, removed_suggested_threads=None, context=None): + """Return a list of suggested threads, sorted by the numbers of followers""" + if context is None: + context = {} + + # TDE HACK: originally by MAT from portal/mail_mail.py but not working until the inheritance graph bug is not solved in trunk + # TDE FIXME: relocate in portal when it won't be necessary to reload the hr.employee model in an additional bridge module + if self.pool['res.groups']._all_columns.get('is_portal'): + user = self.pool.get('res.users').browse(cr, SUPERUSER_ID, uid, context=context) + if any(group.is_portal for group in user.groups_id): + return [] + + threads = [] + if removed_suggested_threads is None: + removed_suggested_threads = [] + + thread_ids = self.search(cr, uid, [('id', 'not in', removed_suggested_threads), ('message_is_follower', '=', False)], context=context) + for thread in self.browse(cr, uid, thread_ids, context=context): + data = { + 'id': thread.id, + 'popularity': len(thread.message_follower_ids), + 'name': thread.name, + 'image_small': thread.image_small + } + threads.append(data) + return sorted(threads, key=lambda x: (x['popularity'], x['id']), reverse=True)[:3] diff --git a/addons/mail/mail_thread_view.xml b/addons/mail/mail_thread_view.xml index c9c5141d303..7b5e7f299f6 100644 --- a/addons/mail/mail_thread_view.xml +++ b/addons/mail/mail_thread_view.xml @@ -17,7 +17,8 @@ ], 'view_mailbox': True, 'view_inbox': True, - 'read_action': 'read' + 'read_action': 'read', + 'show_compose_message': False }""/> <field name="help" type="html"> <p> diff --git a/addons/mail/res_partner.py b/addons/mail/res_partner.py index 8527e60aba0..8da2441f3bc 100644 --- a/addons/mail/res_partner.py +++ b/addons/mail/res_partner.py @@ -18,6 +18,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## + from openerp.tools.translate import _ from openerp.osv import fields, osv @@ -52,21 +53,4 @@ class res_partner_mail(osv.Model): self._message_add_suggested_recipient(cr, uid, recipients, partner, partner=partner, reason=_('Partner Profile')) return recipients - def message_post(self, cr, uid, thread_id, **kwargs): - """ Override related to res.partner. In case of email message, set it as - private: - - add the target partner in the message partner_ids - - set thread_id as None, because this will trigger the 'private' - aspect of the message (model=False, res_id=False) - """ - if isinstance(thread_id, (list, tuple)): - thread_id = thread_id[0] - if kwargs.get('type') == 'email': - partner_ids = kwargs.get('partner_ids', []) - if thread_id not in [command[1] for command in partner_ids]: - partner_ids.append((4, thread_id)) - kwargs['partner_ids'] = partner_ids - thread_id = False - return super(res_partner_mail, self).message_post(cr, uid, thread_id, **kwargs) - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py index 5545745b235..7bc39c438d1 100644 --- a/addons/mail/res_users.py +++ b/addons/mail/res_users.py @@ -23,11 +23,13 @@ from openerp.osv import fields, osv from openerp import SUPERUSER_ID from openerp.tools.translate import _ + class res_users(osv.Model): """ Update of res.users class - add a preference about sending emails about notifications - make a new user follow itself - add a welcome message + - add suggestion preference """ _name = 'res.users' _inherit = ['res.users'] @@ -37,10 +39,11 @@ class res_users(osv.Model): 'alias_id': fields.many2one('mail.alias', 'Alias', ondelete="cascade", required=True, help="Email address internally associated with this user. Incoming "\ "emails will appear in the user's notifications."), + 'display_groups_suggestions': fields.boolean("Display Groups Suggestions"), } _defaults = { - 'alias_domain': False, # always hide alias during creation + 'display_groups_suggestions': True, } def __init__(self, pool, cr): @@ -51,34 +54,29 @@ class res_users(osv.Model): init_res = super(res_users, self).__init__(pool, cr) # duplicate list to avoid modifying the original reference self.SELF_WRITEABLE_FIELDS = list(self.SELF_WRITEABLE_FIELDS) - self.SELF_WRITEABLE_FIELDS.append('notification_email_send') + self.SELF_WRITEABLE_FIELDS.extend(['notification_email_send', 'display_groups_suggestions']) # duplicate list to avoid modifying the original reference self.SELF_READABLE_FIELDS = list(self.SELF_READABLE_FIELDS) - self.SELF_READABLE_FIELDS.extend(['notification_email_send', 'alias_domain', 'alias_name']) + self.SELF_READABLE_FIELDS.extend(['notification_email_send', 'alias_domain', 'alias_name', 'display_groups_suggestions']) return init_res def _auto_init(self, cr, context=None): """ Installation hook: aliases, partner following themselves """ # create aliases for all users and avoid constraint errors - res = self.pool.get('mail.alias').migrate_to_alias(cr, self._name, self._table, super(res_users, self)._auto_init, - self._columns['alias_id'], 'login', alias_force_key='id', context=context) - return res + return self.pool.get('mail.alias').migrate_to_alias(cr, self._name, self._table, super(res_users, self)._auto_init, + self._name, self._columns['alias_id'], 'login', alias_force_key='id', context=context) def create(self, cr, uid, data, context=None): - # create default alias same as the login if not data.get('login', False): raise osv.except_osv(_('Invalid Action!'), _('You may not create a user. To create new users, you should use the "Settings > Users" menu.')) + if context is None: + context = {} - mail_alias = self.pool.get('mail.alias') - alias_id = mail_alias.create_unique_alias(cr, uid, {'alias_name': data['login']}, model_name=self._name, context=context) - data['alias_id'] = alias_id - data.pop('alias_name', None) # prevent errors during copy() - - # create user - user_id = super(res_users, self).create(cr, uid, data, context=context) + create_context = dict(context, alias_model_name=self._name, alias_parent_model_name=self._name) + user_id = super(res_users, self).create(cr, uid, data, context=create_context) user = self.browse(cr, uid, user_id, context=context) - # alias - mail_alias.write(cr, SUPERUSER_ID, [alias_id], {"alias_force_thread_id": user_id}, context) + self.pool.get('mail.alias').write(cr, SUPERUSER_ID, [user.alias_id.id], {"alias_force_thread_id": user_id, "alias_parent_thread_id": user_id}, context) + # create a welcome message self._create_welcome_message(cr, uid, user, context=context) return user_id @@ -92,12 +90,6 @@ class res_users(osv.Model): return self.pool.get('res.partner').message_post(cr, SUPERUSER_ID, [user.partner_id.id], body=body, context=context) - def write(self, cr, uid, ids, vals, context=None): - # User alias is sync'ed with login - if vals.get('login'): - vals['alias_name'] = vals['login'] - return super(res_users, self).write(cr, uid, ids, vals, context=context) - def unlink(self, cr, uid, ids, context=None): # Cascade-delete mail aliases as well, as they should not exist without the user. alias_pool = self.pool.get('mail.alias') @@ -109,7 +101,7 @@ class res_users(osv.Model): def _message_post_get_pid(self, cr, uid, thread_id, context=None): assert thread_id, "res.users does not support posting global messages" if context and 'thread_model' in context: - context['thread_model'] = 'res.partner' + context['thread_model'] = 'res.users' if isinstance(thread_id, (list, tuple)): thread_id = thread_id[0] return self.browse(cr, SUPERUSER_ID, thread_id).partner_id.id @@ -118,44 +110,32 @@ class res_users(osv.Model): """ Redirect the posting of message on res.users to the related partner. This is done because when giving the context of Chatter on the various mailboxes, we do not have access to the current partner_id. """ + if isinstance(thread_id, (list, tuple)): + thread_id = thread_id[0] + partner_ids = kwargs.get('partner_ids', []) partner_id = self._message_post_get_pid(cr, uid, thread_id, context=context) - return self.pool.get('res.partner').message_post(cr, uid, partner_id, context=context, **kwargs) + if partner_id not in [command[1] for command in partner_ids]: + partner_ids.append(partner_id) + kwargs['partner_ids'] = partner_ids + return self.pool.get('mail.thread').message_post(cr, uid, False, **kwargs) def message_update(self, cr, uid, ids, msg_dict, update_vals=None, context=None): - for id in ids: - partner_id = self.browse(cr, SUPERUSER_ID, id).partner_id.id - self.pool.get('res.partner').message_update(cr, uid, [partner_id], msg_dict, update_vals=update_vals, context=context) return True def message_subscribe(self, cr, uid, ids, partner_ids, subtype_ids=None, context=None): - for id in ids: - partner_id = self.browse(cr, SUPERUSER_ID, id).partner_id.id - self.pool.get('res.partner').message_subscribe(cr, uid, [partner_id], partner_ids, subtype_ids=subtype_ids, context=context) return True def message_get_partner_info_from_emails(self, cr, uid, emails, link_mail=False, context=None): - return self.pool.get('res.partner').message_get_partner_info_from_emails(cr, uid, emails, link_mail=link_mail, context=context) + return self.pool.get('mail.thread').message_get_partner_info_from_emails(cr, uid, emails, link_mail=link_mail, context=context) def message_get_suggested_recipients(self, cr, uid, ids, context=None): - partner_ids = [] - for id in ids: - partner_ids.append(self.browse(cr, SUPERUSER_ID, id).partner_id.id) - return self.pool.get('res.partner').message_get_suggested_recipients(cr, uid, partner_ids, context=context) - - #------------------------------------------------------ - # Compatibility methods: do not use - # TDE TODO: remove me in 8.0 - #------------------------------------------------------ - - def message_post_user_api(self, cr, uid, thread_id, context=None, **kwargs): - """ Redirect the posting of message on res.users to the related partner. - This is done because when giving the context of Chatter on the - various mailboxes, we do not have access to the current partner_id. """ - partner_id = self._message_post_get_pid(cr, uid, thread_id, context=context) - return self.pool.get('res.partner').message_post_user_api(cr, uid, partner_id, context=context, **kwargs) + return dict.fromkeys(ids, list()) - def message_create_partners_from_emails(self, cr, uid, emails, context=None): - return self.pool.get('res.partner').message_create_partners_from_emails(cr, uid, emails, context=context) + def stop_showing_groups_suggestions(self, cr, uid, user_id, context=None): + """Update display_groups_suggestions value to False""" + if context is None: + context = {} + self.write(cr, uid, user_id, {"display_groups_suggestions": False}, context) class res_users_mail_group(osv.Model): diff --git a/addons/mail/res_users_view.xml b/addons/mail/res_users_view.xml index 1cacadfc898..2bf54b4bafd 100644 --- a/addons/mail/res_users_view.xml +++ b/addons/mail/res_users_view.xml @@ -22,15 +22,25 @@ <field name="model">res.users</field> <field name="inherit_id" ref="base.view_users_form"/> <field name="arch" type="xml"> - <data> - <field name="signature" position="before"> - <field name="notification_email_send"/> - </field> - <field name="signature" position="before"> - <field name="alias_domain" invisible="1"/> - <field name="alias_id" readonly="1" required="0" attrs="{'invisible': [('alias_domain', '=', False)]}"/> - </field> - </data> + <data> + <field name="signature" position="before"> + <field name="notification_email_send"/> + </field> + <field name="signature" position="before"> + <label for="alias_id" string="Messaging Alias" class="oe_read_only" + attrs="{'invisible': [('alias_domain', '=', False)]}"/> + <field name="alias_id" class="oe_read_only" required="0" nolabel="1" + attrs="{'invisible': [('alias_domain', '=', False)]}"/> + <label for="alias_name" string="Messaging Alias" class="oe_edit_only" + attrs="{'invisible': [('alias_domain', '=', False)]}"/> + <div class="oe_edit_only" attrs="{'invisible': [('alias_domain', '=', False)]}"> + <field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/> + </div> + <field name="alias_contact" string="Alias Accepts Emails From" + attrs="{'invisible': [('alias_domain', '=', False)]}"/> + <field name="display_groups_suggestions" groups="base.group_no_one"/> + </field> + </data> </field> </record> diff --git a/addons/mail/static/src/css/mail.css b/addons/mail/static/src/css/mail.css index 958c2bccd5f..211133afaf8 100644 --- a/addons/mail/static/src/css/mail.css +++ b/addons/mail/static/src/css/mail.css @@ -22,10 +22,20 @@ width: 32px; height: 32px; padding: 0px; - margin: 0px + margin: 0px; border-radius: 0px; } +/* ---- GENERIC FOR MAIL-RELATED STUFF ---- */ +.openerp .oe_e.oe_e_alias { + font-size: 30px; + line-height: 15px; + vertical-align: top; + margin-right: 3px; + color: white; + text-shadow: 0px 0px 2px black; +} + /* ------------ MAIL WIDGET --------------- */ .openerp .oe_mail, .openerp .oe_mail *{ -webkit-box-sizing: border-box; @@ -665,8 +675,72 @@ .openerp .oe_mail_wall .oe_mail{ margin: 16px; width: 600px; + display: inline-block; } .openerp .oe_mail .oe_view_nocontent > p { padding-left: 15px; } + + +/* ------------- WALL SIDEBAR ------------- */ + +.openerp .oe_mail_wall .oe_mail_wall_aside { + margin: 16px; + position: relative; + display: inline-block; + vertical-align: top; + width: 260px; +} +.openerp .oe_mail_wall_aside .oe_sidebar_suggestion { + background-color: #EDEDF6; + border-radius: 2px; + padding-top: 1px; +} +.openerp .oe_sidebar_suggestion .oe_suggest_title h2 { + font-size: 14px; + font-weight: bold; + margin-left: 10px; + padding: 0px; +} +.openerp .oe_sidebar_suggestion .oe_suggest_items .oe_suggested_item { + border-radius: 2px; + width: 100%; + margin-left: 10px; + min-height: 67px; /* image_small 66x66px */ +} +.openerp .oe_sidebar_suggestion .oe_suggest_items .oe_suggested_item_image { + float: left; + padding-right: 10px; +} +.openerp .oe_sidebar_suggestion .oe_suggest_items .oe_suggested_item_image img { + border-radius: 2px; + border: solid 1px rgba(0,0,0,0.03); +} +.openerp .oe_sidebar_suggestion .oe_suggest_items .oe_suggested_item_content button { + margin-top: 10px; +} +.openerp .oe_sidebar_suggestion .oe_suggest_items .oe_suggested_item_content a.oe_suggestion_item_name { + text-overflow: ellipsis; + overflow: hidden; + width: 90%; +} +.openerp .oe_sidebar_suggestion .oe_suggest_title a.oe_suggestion_remove { + line-height: 15px; + margin-top: -2px; + float: right; + visibility: hidden; + margin-right: 7px; +} +.openerp .oe_sidebar_suggestion .oe_suggest_items .oe_suggested_item_content a.oe_suggestion_remove_item { + line-height: 15px; + margin-top: -2px; + float: right; + visibility: hidden; + margin-right: 16px; +} +.openerp .oe_sidebar_suggestion .oe_suggest_title:hover a.oe_suggestion_remove, +.openerp .oe_sidebar_suggestion .oe_suggest_items:hover a.oe_suggestion_remove_item { + visibility: visible; +} + diff --git a/addons/mail/static/src/css/mail_group.css b/addons/mail/static/src/css/mail_group.css index 4f2b8a16dd0..9560a4765d0 100644 --- a/addons/mail/static/src/css/mail_group.css +++ b/addons/mail/static/src/css/mail_group.css @@ -48,7 +48,6 @@ text-align: center; overflow: hidden; -moz-border-radius: 3px; - border-collapse: separate; -webkit-border-radius: 3px; -o-border-radius: 3px; -ms-border-radius: 3px; diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index 7df6cdbef0d..21b0f5a9a87 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -4,8 +4,8 @@ openerp.mail = function (session) { var mail = session.mail = {}; - openerp_mail_followers(session, mail); // import mail_followers.js - openerp_FieldMany2ManyTagsEmail(session); // import manyy2many_tags_email.js + openerp_mail_followers(session, mail); // import mail_followers.js + openerp_FieldMany2ManyTagsEmail(session); // import manyy2many_tags_email.js /** * ------------------------------------------------------------ @@ -237,8 +237,15 @@ openerp.mail = function (session) { this.format_data(); + // update record_name: Partner profile + if (this.model == 'res.partner') { + this.record_name = 'Partner Profile of ' + this.record_name; + } + else if (this.model == 'hr.employee') { + this.record_name = 'News from ' + this.record_name; + } // record options and data - this.show_record_name = this.options.show_record_name && this.record_name && !this.thread_level && this.model != 'res.partner'; + this.show_record_name = this.options.show_record_name && this.record_name && !this.thread_level; this.options.show_read = false; this.options.show_unread = false; if (this.options.show_read_unread_button) { @@ -257,8 +264,10 @@ openerp.mail = function (session) { /* Convert date, timerelative and avatar in displayable data. */ format_data: function () { + //formating and add some fields for render this.date = this.date ? session.web.str_to_datetime(this.date) : false; + this.display_date = this.date.toString('ddd MMM dd yyyy HH:mm'); if (this.date && new Date().getTime()-this.date.getTime() < 7*24*60*60*1000) { this.timerelative = $.timeago(this.date); } @@ -623,10 +632,7 @@ openerp.mail = function (session) { // have unknown names -> call message_get_partner_info_from_emails to try to find partner_id var find_done = $.Deferred(); if (names_to_find.length > 0) { - var values = { - 'res_id': this.context.default_res_id, - } - find_done = self.parent_thread.ds_thread._model.call('message_get_partner_info_from_emails', [names_to_find], values); + find_done = self.parent_thread.ds_thread._model.call('message_partner_info_from_emails', [this.context.default_res_id, names_to_find]); } else { find_done.resolve([]); @@ -672,11 +678,7 @@ openerp.mail = function (session) { var new_names_to_find = _.difference(names_to_find, names_to_remove); find_done = $.Deferred(); if (new_names_to_find.length > 0) { - var values = { - 'link_mail': true, - 'res_id': self.context.default_res_id, - } - find_done = self.parent_thread.ds_thread._model.call('message_get_partner_info_from_emails', [new_names_to_find], values); + find_done = self.parent_thread.ds_thread._model.call('message_partner_info_from_emails', [self.context.default_res_id, new_names_to_find, true]); } else { find_done.resolve([]); @@ -745,7 +747,7 @@ openerp.mail = function (session) { } // create object and attach to the thread object thread.message_fetch([["id", "=", message_id]], false, [message_id], function (arg, data) { - var message = thread.create_message_object( data[0] ); + var message = thread.create_message_object( data.slice(-1)[0] ); // insert the message on dom thread.insert_message( message, root ? undefined : self.$el, root ); }); @@ -978,8 +980,8 @@ openerp.mail = function (session) { expender: function () { this.$('.oe_msg_body:first').expander({ slicePoint: this.options.truncate_limit, - expandText: 'read more', - userCollapseText: 'read less', + expandText: _t('read more'), + userCollapseText: _t('read less'), detailClass: 'oe_msg_tail', moreClass: 'oe_mail_expand', lessClass: 'oe_mail_reduce', @@ -1842,6 +1844,19 @@ openerp.mail = function (session) { /** * ------------------------------------------------------------ + * Aside Widget + * ------------------------------------------------------------ + * + * This widget handles the display of a sidebar on the Wall. Its main use + * is to display group and employees suggestion (if hr is installed). + */ + mail.WallSidebar = session.web.Widget.extend({ + template: 'mail.wall.sidebar', + }); + + + /** + * ------------------------------------------------------------ * Wall Widget * ------------------------------------------------------------ * @@ -1901,6 +1916,9 @@ openerp.mail = function (session) { if (! this.searchview.has_defaults) { this.message_render(); } + // render sidebar + var wall_sidebar = new mail.WallSidebar(this); + wall_sidebar.appendTo(this.$el.find('.oe_mail_wall_aside')); }, /** @@ -2018,4 +2036,16 @@ openerp.mail = function (session) { }); }, }); + + + /** + * ------------------------------------------------------------ + * Sub-widgets loading + * ------------------------------------------------------------ + * + * Load here widgets that could depend on widgets defined in mail.js + */ + + openerp.mail.suggestions(session, mail); // import suggestion.js (suggestion widget) + }; diff --git a/addons/mail/static/src/js/suggestions.js b/addons/mail/static/src/js/suggestions.js new file mode 100644 index 00000000000..4d0fcec32bf --- /dev/null +++ b/addons/mail/static/src/js/suggestions.js @@ -0,0 +1,77 @@ +openerp.mail.suggestions = function(session, mail) { + var _t = session.web._t; + var QWeb = session.web.qweb; + + var suggestions = session.suggestions = {}; + var removed_suggested_group = session.suggestions.removed_suggested_group = []; + + suggestions.Groups = session.web.Widget.extend({ + events: { + 'click .oe_suggestion_remove.oe_suggestion_group': 'stop_group_suggestion', + 'click .oe_suggestion_remove_item.oe_suggestion_group': 'remove_group_suggestion', + 'click .oe_suggestion_join': 'join_group', + }, + + init: function () { + this._super.apply(this, arguments); + this.mail_group = new session.web.DataSetSearch(this, 'mail.group'); + this.res_users = new session.web.DataSetSearch(this, 'res.users'); + this.groups = []; + }, + + start: function () { + this._super.apply(this, arguments); + return this.fetch_suggested_groups(); + }, + + fetch_suggested_groups: function () { + var self = this; + var group = self.mail_group.call('get_suggested_thread', {'removed_suggested_threads': removed_suggested_group}).then(function (res) { + _(res).each(function (result) { + result['image']=self.session.url('/web/binary/image', {model: 'mail.group', field: 'image_small', id: result.id}); + }); + self.groups = res; + }); + return $.when(group).then(this.proxy('display_suggested_groups')); + }, + + display_suggested_groups: function () { + var suggested_groups = this.$('.oe_sidebar_suggestion.oe_suggestion_group'); + if (suggested_groups) { + suggested_groups.empty(); + } + if (this.groups.length === 0) { + return this.$el.empty(); + } + return this.$el.empty().html(QWeb.render('mail.suggestions.groups', {'widget': this})); + }, + + join_group: function (event) { + var self = this; + return this.mail_group.call('message_subscribe_users', [[$(event.currentTarget).attr('id')],[this.session.uid]]).then(function(res) { + self.fetch_suggested_groups(); + }); + }, + + remove_group_suggestion: function (event) { + removed_suggested_group.push($(event.currentTarget).attr('id')); + return this.fetch_suggested_groups(); + }, + + stop_group_suggestion: function (event) { + var self = this; + return this.res_users.call('stop_showing_groups_suggestions', [this.session.uid]).then(function(res) { + self.$(".oe_sidebar_suggestion.oe_suggestion_group").hide(); + }); + } + }); + + session.mail.WallSidebar.include({ + start: function () { + this._super.apply(this, arguments); + var sug_groups = new suggestions.Groups(this); + return sug_groups.appendTo(this.$('.oe_suggestions_groups')); + }, + }); + +}; diff --git a/addons/mail/static/src/xml/mail.xml b/addons/mail/static/src/xml/mail.xml index f5004941a8d..94ee1ff452f 100644 --- a/addons/mail/static/src/xml/mail.xml +++ b/addons/mail/static/src/xml/mail.xml @@ -121,9 +121,11 @@ To: <t t-if="!widget.is_private"> <span class="oe_all_follower"> - Followers of - <t t-if="widget.parent_thread.parent_message.record_name" t-raw="'"' + widget.parent_thread.parent_message.record_name + '"'"/> - <t t-if="!widget.parent_thread.parent_message.record_name">this document</t> + <t t-if="widget.parent_thread.parent_message.record_name" t-raw="'"' + widget.parent_thread.parent_message.record_name + '"'"> + Followers of <t t-raw="'"' + widget.parent_thread.parent_message.record_name + '"'"/> + </t> + <t t-if="!widget.parent_thread.parent_message.record_name and widget.options.view_inbox">My Followers</t> + <t t-if="!widget.parent_thread.parent_message.record_name and !widget.options.view_inbox">Followers of this document</t> </span> </t> <t t-if="!widget.is_private and (widget.partner_ids.length or (widget.author_id and widget.author_id[0]))"> and </t> @@ -197,9 +199,17 @@ </tbody> </table> <div class="oe_mail-placeholder"></div> + <aside class="oe_mail_wall_aside"></aside> </div> <!-- + Empty template that holds the sidebar of the Wall + --> + <t t-name="mail.wall.sidebar"> + <div class="oe_mail_wall_sidebar"></div> + </t> + + <!-- display message on the wall when there are no message --> <t t-name="mail.wall_no_message"> @@ -271,16 +281,16 @@ <span class='oe_subtle'>•</span> </t> </t> - <t t-if="widget.type == 'comment' and ! widget.subtype"> + <t t-if="widget.type == 'comment' and ! widget.subtype and widget.partner_ids.length == 0"> logged a note </t> - <t t-if="(widget.type == 'comment' or widget.type == 'email') and widget.subtype"> + <t t-if="(widget.type == 'comment' or widget.type == 'email') and (widget.subtype or widget.partner_ids.length > 0)"> to <t t-if="widget.partner_ids.length == 0"> nobody </t> </t> - <t t-if="widget.type == 'notification' or ( (widget.type == 'email' or widget.type == 'comment') and widget.subtype)" + <t t-if="widget.type == 'notification' or ( (widget.type == 'email' or widget.type == 'comment') and (widget.subtype or widget.partner_ids.length > 0))" t-foreach="widget.partner_ids.slice(0, 3)" t-as="partner"> <span t-attf-class="oe_partner_follower"> <a t-if="widget.options.show_link" t-attf-href="#model=res.partner&id=#{partner[0]}"><t t-raw="partner[1]"/></a> @@ -295,7 +305,10 @@ notified </t> <span class='oe_subtle'>•</span> - <span t-att-title="widget.date"><t t-if="widget.timerelative" t-raw="widget.timerelative"/><t t-if="!widget.timerelative" t-raw="widget.date"/></span> + <span t-att-title="widget.date"> + <t t-if="widget.timerelative" t-raw="widget.timerelative"/> + <t t-if="!widget.timerelative" t-raw="widget.display_date"/> + </span> <span t-if="!widget.options.readonly" class='oe_subtle'>•</span> <t t-if="!widget.options.readonly" t-call="mail.thread.message.vote"/> </div> @@ -339,7 +352,4 @@ </a> </span> - <!-- mail.thread.message.star - Template used to display stared/unstared message in a mail.message - --> </template> diff --git a/addons/mail/static/src/xml/suggestions.xml b/addons/mail/static/src/xml/suggestions.xml new file mode 100644 index 00000000000..9157dcbe32e --- /dev/null +++ b/addons/mail/static/src/xml/suggestions.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<template> + + <!-- Groups placeholder in sidebar --> + <t t-extend="mail.wall.sidebar"> + <t t-jquery=".oe_mail_wall_sidebar" t-operation="append"> + <div class="oe_suggestions_groups"></div> + </t> + </t> + + + <!-- Suggested groups --> + <div t-name="mail.suggestions.groups" class="oe_sidebar_suggestion oe_suggestion_group"> + <div class="oe_suggest_title"> + <a class="oe_suggestion_remove oe_suggestion_group oe_e">X</a> + <h2>Suggested Groups</h2> + </div> + <div class="oe_suggest_items"> + <t t-foreach="widget.groups" t-as="result"> + <div class="oe_suggested_item"> + <div class="oe_suggested_item_image"> + <a t-attf-href="#model=mail.group&id=#{result.id}"> + <img t-attf-src="{result.image}" t-attf-alt="{result.name}"/> + </a> + </div> + <div class="oe_suggested_item_content"> + <a class="oe_suggestion_item_name" t-attf-href="#model=mail.group&id=#{result.id}"><t t-esc="result.name"/></a> + <a class="oe_suggestion_remove_item oe_suggestion_group oe_e" t-attf-id="{result.id}">X</a> + <br/> + <button t-att-id="result.id" class="oe_suggestion_join">Join Group</button> + </div> + </div> + </t> + </div> + </div> + + +</template> diff --git a/addons/mail/tests/test_mail_base.py b/addons/mail/tests/test_mail_base.py index a3b90288f0b..b0f9f72b6f7 100644 --- a/addons/mail/tests/test_mail_base.py +++ b/addons/mail/tests/test_mail_base.py @@ -69,10 +69,11 @@ class TestMailBase(common.TransactionCase): self.group_employee_id = group_employee_ref and group_employee_ref[1] or False # Test users to use through the various tests + self.res_users.write(cr, uid, uid, {'name': 'Administrator'}) self.user_raoul_id = self.res_users.create(cr, uid, - {'name': 'Raoul Grosbedon', 'signature': 'SignRaoul', 'email': 'raoul@raoul.fr', 'login': 'raoul', 'groups_id': [(6, 0, [self.group_employee_id])]}) + {'name': 'Raoul Grosbedon', 'signature': 'SignRaoul', 'email': 'raoul@raoul.fr', 'login': 'raoul', 'alias_name': 'raoul', 'groups_id': [(6, 0, [self.group_employee_id])]}) self.user_bert_id = self.res_users.create(cr, uid, - {'name': 'Bert Tartignole', 'signature': 'SignBert', 'email': 'bert@bert.fr', 'login': 'bert', 'groups_id': [(6, 0, [])]}) + {'name': 'Bert Tartignole', 'signature': 'SignBert', 'email': 'bert@bert.fr', 'login': 'bert', 'alias_name': 'bert', 'groups_id': [(6, 0, [])]}) self.user_raoul = self.res_users.browse(cr, uid, self.user_raoul_id) self.user_bert = self.res_users.browse(cr, uid, self.user_bert_id) self.user_admin = self.res_users.browse(cr, uid, uid) @@ -82,7 +83,7 @@ class TestMailBase(common.TransactionCase): # Test 'pigs' group to use through the various tests self.group_pigs_id = self.mail_group.create(cr, uid, - {'name': 'Pigs', 'description': 'Fans of Pigs, unite !'}, + {'name': 'Pigs', 'description': 'Fans of Pigs, unite !', 'alias_name': 'group+pigs'}, {'mail_create_nolog': True}) self.group_pigs = self.mail_group.browse(cr, uid, self.group_pigs_id) diff --git a/addons/mail/tests/test_mail_features.py b/addons/mail/tests/test_mail_features.py index 46f4555349d..91ede8b8449 100644 --- a/addons/mail/tests/test_mail_features.py +++ b/addons/mail/tests/test_mail_features.py @@ -22,7 +22,7 @@ from openerp.addons.mail.mail_mail import mail_mail from openerp.addons.mail.mail_thread import mail_thread from openerp.addons.mail.tests.test_mail_base import TestMailBase -from openerp.tools import mute_logger +from openerp.tools import mute_logger, email_split from openerp.tools.mail import html_sanitize @@ -32,17 +32,17 @@ class test_mail(TestMailBase): """ Test basic mail.alias setup works, before trying to use them for routing """ cr, uid = self.cr, self.uid self.user_valentin_id = self.res_users.create(cr, uid, - {'name': 'Valentin Cognito', 'email': 'valentin.cognito@gmail.com', 'login': 'valentin.cognito'}) + {'name': 'Valentin Cognito', 'email': 'valentin.cognito@gmail.com', 'login': 'valentin.cognito', 'alias_name': 'valentin.cognito'}) self.user_valentin = self.res_users.browse(cr, uid, self.user_valentin_id) self.assertEquals(self.user_valentin.alias_name, self.user_valentin.login, "Login should be used as alias") self.user_pagan_id = self.res_users.create(cr, uid, - {'name': 'Pagan Le Marchant', 'email': 'plmarchant@gmail.com', 'login': 'plmarchant@gmail.com'}) + {'name': 'Pagan Le Marchant', 'email': 'plmarchant@gmail.com', 'login': 'plmarchant@gmail.com', 'alias_name': 'plmarchant@gmail.com'}) self.user_pagan = self.res_users.browse(cr, uid, self.user_pagan_id) self.assertEquals(self.user_pagan.alias_name, 'plmarchant', "If login is an email, the alias should keep only the local part") self.user_barty_id = self.res_users.create(cr, uid, - {'name': 'Bartholomew Ironside', 'email': 'barty@gmail.com', 'login': 'b4r+_#_R3wl$$'}) + {'name': 'Bartholomew Ironside', 'email': 'barty@gmail.com', 'login': 'b4r+_#_R3wl$$', 'alias_name': 'b4r+_#_R3wl$$'}) self.user_barty = self.res_users.browse(cr, uid, self.user_barty_id) self.assertEquals(self.user_barty.alias_name, 'b4r+_-_r3wl-', 'Disallowed chars should be replaced by hyphens') @@ -479,7 +479,7 @@ class test_mail(TestMailBase): 'message_post: notification email sent to more than one email address instead of a precise partner') self.assertIn(sent_email['email_to'][0], test_emailto, 'message_post: notification email email_to incorrect') - self.assertEqual(sent_email['reply_to'], 'r@r', # was '"Followers of Pigs" <r@r>', but makes no sense + self.assertEqual(email_split(sent_email['reply_to']), ['r@r'], # was '"Followers of Pigs" <r@r>', but makes no sense 'message_post: notification email reply_to incorrect: should have raoul email') self.assertEqual(_mail_subject, sent_email['subject'], 'message_post: notification email subject incorrect') diff --git a/addons/mail/tests/test_mail_gateway.py b/addons/mail/tests/test_mail_gateway.py index 5615e22b2c2..2e0ba336dc4 100644 --- a/addons/mail/tests/test_mail_gateway.py +++ b/addons/mail/tests/test_mail_gateway.py @@ -20,7 +20,7 @@ ############################################################################## from openerp.addons.mail.tests.test_mail_base import TestMailBase -from openerp.tools import mute_logger +from openerp.tools import mute_logger, email_split MAIL_TEMPLATE = """Return-Path: <whatever-2a840@postmaster.twitter.com> To: {to} @@ -99,20 +99,20 @@ class TestMailgateway(TestMailBase): # -------------------------------------------------- # Do: find partner with email -> first partner should be found - partner_info = self.mail_thread.message_find_partner_from_emails(cr, uid, None, ['Maybe Raoul <test@test.fr>'], link_mail=False)[0] + partner_info = self.mail_thread.message_partner_info_from_emails(cr, uid, None, ['Maybe Raoul <test@test.fr>'], link_mail=False)[0] self.assertEqual(partner_info['full_name'], 'Maybe Raoul <test@test.fr>', - 'mail_thread: message_find_partner_from_emails did not handle email') + 'mail_thread: message_partner_info_from_emails did not handle email') self.assertEqual(partner_info['partner_id'], p_a_id, - 'mail_thread: message_find_partner_from_emails wrong partner found') + 'mail_thread: message_partner_info_from_emails wrong partner found') # Data: add some data about partners # 2 - User BRaoul p_b_id = self.res_partner.create(cr, uid, {'name': 'BRaoul', 'email': 'test@test.fr', 'user_ids': [(4, user_raoul.id)]}) # Do: find partner with email -> first user should be found - partner_info = self.mail_thread.message_find_partner_from_emails(cr, uid, None, ['Maybe Raoul <test@test.fr>'], link_mail=False)[0] + partner_info = self.mail_thread.message_partner_info_from_emails(cr, uid, None, ['Maybe Raoul <test@test.fr>'], link_mail=False)[0] self.assertEqual(partner_info['partner_id'], p_b_id, - 'mail_thread: message_find_partner_from_emails wrong partner found') + 'mail_thread: message_partner_info_from_emails wrong partner found') # -------------------------------------------------- # CASE1: with object @@ -120,90 +120,106 @@ class TestMailgateway(TestMailBase): # Do: find partner in group where there is a follower with the email -> should be taken self.mail_group.message_subscribe(cr, uid, [group_pigs.id], [p_b_id]) - partner_info = self.mail_group.message_find_partner_from_emails(cr, uid, group_pigs.id, ['Maybe Raoul <test@test.fr>'], link_mail=False)[0] + partner_info = self.mail_group.message_partner_info_from_emails(cr, uid, group_pigs.id, ['Maybe Raoul <test@test.fr>'], link_mail=False)[0] self.assertEqual(partner_info['partner_id'], p_b_id, - 'mail_thread: message_find_partner_from_emails wrong partner found') + 'mail_thread: message_partner_info_from_emails wrong partner found') def test_05_mail_message_mail_mail(self): """ Tests designed for testing email values based on mail.message, aliases, ... """ - cr, uid = self.cr, self.uid - - # Data: clean catchall domain + cr, uid, user_raoul_id = self.cr, self.uid, self.user_raoul_id + + # Data: update + generic variables + reply_to1 = '_reply_to1@example.com' + reply_to2 = '_reply_to2@example.com' + email_from1 = 'from@example.com' + alias_domain = 'schlouby.fr' + raoul_from = 'Raoul Grosbedon <raoul@raoul.fr>' + raoul_from_alias = 'Raoul Grosbedon <raoul@schlouby.fr>' + raoul_reply = '"Followers of Pigs" <raoul@raoul.fr>' + raoul_reply_alias = '"Followers of Pigs" <group+pigs@schlouby.fr>' + # Data: remove alias_domain to see emails with alias param_ids = self.registry('ir.config_parameter').search(cr, uid, [('key', '=', 'mail.catchall.domain')]) self.registry('ir.config_parameter').unlink(cr, uid, param_ids) - # Do: create a mail_message with a reply_to, without message-id - msg_id = self.mail_message.create(cr, uid, {'subject': 'Subject', 'body': 'Body', 'reply_to': 'custom@example.com'}) - msg = self.mail_message.browse(cr, uid, msg_id) + # Do: free message; specified values > default values + msg_id = self.mail_message.create(cr, user_raoul_id, {'reply_to': reply_to1, 'email_from': email_from1}) + msg = self.mail_message.browse(cr, user_raoul_id, msg_id) # Test: message content self.assertIn('reply_to', msg.message_id, 'mail_message: message_id should be specific to a mail_message with a given reply_to') - self.assertEqual('custom@example.com', msg.reply_to, - 'mail_message: incorrect reply_to') - # Do: create a mail_mail with the previous mail_message and specified reply_to - mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'reply_to': 'other@example.com', 'state': 'cancel'}) - mail = self.mail_mail.browse(cr, uid, mail_id) - # Test: mail_mail content - self.assertEqual(mail.reply_to, 'other@example.com', - 'mail_mail: reply_to should be equal to the one coming from creation values') + self.assertEqual(msg.reply_to, reply_to1, + 'mail_message: incorrect reply_to: should come from values') + self.assertEqual(msg.email_from, email_from1, + 'mail_message: incorrect email_from: should come from values') # Do: create a mail_mail with the previous mail_message - self.mail_message.write(cr, uid, [msg_id], {'reply_to': 'custom@example.com'}) - msg.refresh() - mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'}) - mail = self.mail_mail.browse(cr, uid, mail_id) + mail_id = self.mail_mail.create(cr, user_raoul_id, {'mail_message_id': msg_id, 'state': 'cancel'}) + mail = self.mail_mail.browse(cr, user_raoul_id, mail_id) # Test: mail_mail content - self.assertEqual(mail.reply_to, msg.reply_to, - 'mail_mail: reply_to should be equal to the one coming from the mail_message') - - # Do: create a mail_message without a reply_to - msg_id = self.mail_message.create(cr, uid, {'subject': 'Subject', 'body': 'Body', 'model': 'mail.group', 'res_id': self.group_pigs_id, 'email_from': False}) - msg = self.mail_message.browse(cr, uid, msg_id) + self.assertEqual(mail.reply_to, reply_to1, + 'mail_mail: incorrect reply_to: should come from mail.message') + self.assertEqual(mail.email_from, email_from1, + 'mail_mail: incorrect email_from: should come from mail.message') + # Do: create a mail_mail with the previous mail_message + specified reply_to + mail_id = self.mail_mail.create(cr, user_raoul_id, {'mail_message_id': msg_id, 'state': 'cancel', 'reply_to': reply_to2}) + mail = self.mail_mail.browse(cr, user_raoul_id, mail_id) + # Test: mail_mail content + self.assertEqual(mail.reply_to, reply_to2, + 'mail_mail: incorrect reply_to: should come from values') + self.assertEqual(mail.email_from, email_from1, + 'mail_mail: incorrect email_from: should come from mail.message') + + # Do: mail_message attached to a document + msg_id = self.mail_message.create(cr, user_raoul_id, {'model': 'mail.group', 'res_id': self.group_pigs_id}) + msg = self.mail_message.browse(cr, user_raoul_id, msg_id) # Test: message content self.assertIn('mail.group', msg.message_id, 'mail_message: message_id should contain model') self.assertIn('%s' % self.group_pigs_id, msg.message_id, 'mail_message: message_id should contain res_id') self.assertFalse(msg.reply_to, - 'mail_message: should not generate a reply_to address when not specified') + 'mail_message: incorrect reply_to: should not be generated if not specified') + self.assertEqual(msg.email_from, raoul_from, + 'mail_message: incorrect email_from: should be Raoul') # Do: create a mail_mail based on the previous mail_message - mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'}) - mail = self.mail_mail.browse(cr, uid, mail_id) - # Test: mail_mail content - self.assertFalse(mail.reply_to, - 'mail_mail: reply_to should not have been guessed') - # Update message - self.mail_message.write(cr, uid, [msg_id], {'email_from': 'someone@example.com'}) - msg.refresh() - # Do: create a mail_mail based on the previous mail_message - mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'}) - mail = self.mail_mail.browse(cr, uid, mail_id) + mail_id = self.mail_mail.create(cr, user_raoul_id, {'mail_message_id': msg_id, 'state': 'cancel'}) + mail = self.mail_mail.browse(cr, user_raoul_id, mail_id) # Test: mail_mail content - self.assertEqual(mail.reply_to, msg.email_from, - 'mail_mail: reply_to should be equal to mail_message.email_from when having no document or default alias') + self.assertEqual(mail.reply_to, raoul_reply, + 'mail_mail: incorrect reply_to: should be Raoul') # Data: set catchall domain - self.registry('ir.config_parameter').set_param(cr, uid, 'mail.catchall.domain', 'schlouby.fr') + self.registry('ir.config_parameter').set_param(cr, uid, 'mail.catchall.domain', alias_domain) self.registry('ir.config_parameter').unlink(cr, uid, self.registry('ir.config_parameter').search(cr, uid, [('key', '=', 'mail.catchall.alias')])) # Update message - self.mail_message.write(cr, uid, [msg_id], {'email_from': False, 'reply_to': False}) + self.mail_message.write(cr, user_raoul_id, [msg_id], {'email_from': False, 'reply_to': False}) msg.refresh() # Do: create a mail_mail based on the previous mail_message - mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'}) - mail = self.mail_mail.browse(cr, uid, mail_id) + mail_id = self.mail_mail.create(cr, user_raoul_id, {'mail_message_id': msg_id, 'state': 'cancel'}) + mail = self.mail_mail.browse(cr, user_raoul_id, mail_id) # Test: mail_mail content - self.assertEqual(mail.reply_to, '"Followers of Pigs" <group+pigs@schlouby.fr>', - 'mail_mail: reply_to should equal the mail.group alias') + self.assertEqual(mail.reply_to, raoul_reply_alias, + 'mail_mail: incorrect reply_to: should be Pigs alias') + + # Update message: test alias on email_from + msg_id = self.mail_message.create(cr, user_raoul_id, {}) + msg = self.mail_message.browse(cr, user_raoul_id, msg_id) + # Do: create a mail_mail based on the previous mail_message + mail_id = self.mail_mail.create(cr, user_raoul_id, {'mail_message_id': msg_id, 'state': 'cancel'}) + mail = self.mail_mail.browse(cr, user_raoul_id, mail_id) + # Test: mail_mail content + self.assertEqual(mail.reply_to, raoul_from_alias, + 'mail_mail: incorrect reply_to: should be message email_from using Raoul alias') # Update message - self.mail_message.write(cr, uid, [msg_id], {'res_id': False, 'email_from': 'someone@schlouby.fr', 'reply_to': False}) + self.mail_message.write(cr, user_raoul_id, [msg_id], {'res_id': False, 'email_from': 'someone@schlouby.fr', 'reply_to': False}) msg.refresh() # Do: create a mail_mail based on the previous mail_message - mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'}) - mail = self.mail_mail.browse(cr, uid, mail_id) + mail_id = self.mail_mail.create(cr, user_raoul_id, {'mail_message_id': msg_id, 'state': 'cancel'}) + mail = self.mail_mail.browse(cr, user_raoul_id, mail_id) # Test: mail_mail content self.assertEqual(mail.reply_to, msg.email_from, - 'mail_mail: reply_to should equal the mail_message email_from') + 'mail_mail: incorrect reply_to: should be message email_from') # Data: set catchall alias self.registry('ir.config_parameter').set_param(self.cr, self.uid, 'mail.catchall.alias', 'gateway') @@ -214,7 +230,7 @@ class TestMailgateway(TestMailBase): # Do: create a mail_mail based on the previous mail_message mail_id = self.mail_mail.create(cr, uid, {'mail_message_id': msg_id, 'state': 'cancel'}) mail = self.mail_mail.browse(cr, uid, mail_id) - # Test: mail_mail content + # Test: mail_mail Content-Type self.assertEqual(mail.reply_to, 'gateway@schlouby.fr', 'mail_mail: reply_to should equal the catchall email alias') @@ -255,7 +271,10 @@ class TestMailgateway(TestMailBase): alias_id = self.mail_alias.create(cr, uid, { 'alias_name': 'groups', 'alias_user_id': False, - 'alias_model_id': self.mail_group_model_id}) + 'alias_model_id': self.mail_group_model_id, + 'alias_parent_model_id': self.mail_group_model_id, + 'alias_parent_thread_id': self.group_pigs_id, + 'alias_contact': 'everyone'}) # -------------------------------------------------- # Test1: new record creation @@ -296,12 +315,42 @@ class TestMailgateway(TestMailBase): # Data: unlink group frog_group.unlink() - # Do: incoming email from a known partner on an alias with known recipients, alias is owned by user that can create a group - self.mail_alias.write(cr, uid, [alias_id], {'alias_user_id': self.user_raoul_id}) + # Do: incoming email from an unknown partner on a Partners only alias -> bounce + self._init_mock_build_email() + self.mail_alias.write(cr, uid, [alias_id], {'alias_contact': 'partners'}) + frog_groups = format_and_process(MAIL_TEMPLATE, to='groups@example.com, other2@gmail.com') + # Test: no group created + self.assertTrue(len(frog_groups) == 0) + # Test: email bounced + sent_emails = self._build_email_kwargs_list + self.assertEqual(len(sent_emails), 1, + 'message_process: incoming email on Partners alias should send a bounce email') + self.assertIn('Frogs', sent_emails[0].get('subject'), + 'message_process: bounce email on Partners alias should contain the original subject') + self.assertIn('test.sylvie.lelitre@agrolait.com', sent_emails[0].get('email_to'), + 'message_process: bounce email on Partners alias should have original email sender as recipient') + + # Do: incoming email from an unknown partner on a Followers only alias -> bounce + self._init_mock_build_email() + self.mail_alias.write(cr, uid, [alias_id], {'alias_contact': 'followers'}) + frog_groups = format_and_process(MAIL_TEMPLATE, to='groups@example.com, other3@gmail.com') + # Test: no group created + self.assertTrue(len(frog_groups) == 0) + # Test: email bounced + sent_emails = self._build_email_kwargs_list + self.assertEqual(len(sent_emails), 1, + 'message_process: incoming email on Followers alias should send a bounce email') + self.assertIn('Frogs', sent_emails[0].get('subject'), + 'message_process: bounce email on Followers alias should contain the original subject') + self.assertIn('test.sylvie.lelitre@agrolait.com', sent_emails[0].get('email_to'), + 'message_process: bounce email on Followers alias should have original email sender as recipient') + + # Do: incoming email from a known partner on a Partners alias -> ok (+ test on alias.user_id) + self.mail_alias.write(cr, uid, [alias_id], {'alias_user_id': self.user_raoul_id, 'alias_contact': 'partners'}) p1id = self.res_partner.create(cr, uid, {'name': 'Sylvie Lelitre', 'email': 'test.sylvie.lelitre@agrolait.com'}) - p2id = self.res_partner.create(cr, uid, {'name': 'Other Poilvache', 'email': 'other@gmail.com'}) + p2id = self.res_partner.create(cr, uid, {'name': 'Other Poilvache', 'email': 'other4@gmail.com'}) self._init_mock_build_email() - frog_groups = format_and_process(MAIL_TEMPLATE, to='groups@example.com, other@gmail.com') + frog_groups = format_and_process(MAIL_TEMPLATE, to='groups@example.com, other4@gmail.com') sent_emails = self._build_email_kwargs_list # Test: one group created by Raoul self.assertEqual(len(frog_groups), 1, 'message_process: a new mail.group should have been created') @@ -313,24 +362,37 @@ class TestMailgateway(TestMailBase): self.assertEqual(len(frog_group.message_ids), 1, 'message_process: newly created group should have the incoming email in message_ids') msg = frog_group.message_ids[0] - # Test: message: unknown email address -> message has email_from, not author_id + # Test: message: author found self.assertEqual(p1id, msg.author_id.id, 'message_process: message on created group should have Sylvie as author_id') self.assertIn('Sylvie Lelitre <test.sylvie.lelitre@agrolait.com>', msg.email_from, 'message_process: message on created group should have have an email_from') - # Test: author (not recipient and not raoul (as alias owner)) added as follower + # Test: author (not recipient and not Raoul (as alias owner)) added as follower frog_follower_ids = set([p.id for p in frog_group.message_follower_ids]) self.assertEqual(frog_follower_ids, set([p1id]), 'message_process: newly created group should have 1 follower (author, not creator, not recipients)') # Test: sent emails: no-one, no bounce effet + sent_emails = self._build_email_kwargs_list self.assertEqual(len(sent_emails), 0, 'message_process: should not bounce incoming emails') # Data: unlink group frog_group.unlink() - # Do: incoming email from a known partner that is also an user that can create a mail.group - self.res_users.create(cr, uid, {'partner_id': p1id, 'login': 'sylvie', 'groups_id': [(6, 0, [self.group_employee_id])]}) - frog_groups = format_and_process(MAIL_TEMPLATE, to='groups@example.com, other@gmail.com') + # Do: incoming email from a not follower Partner on a Followers only alias -> bounce + self._init_mock_build_email() + self.mail_alias.write(cr, uid, [alias_id], {'alias_user_id': False, 'alias_contact': 'followers'}) + frog_groups = format_and_process(MAIL_TEMPLATE, to='groups@example.com, other5@gmail.com') + # Test: no group created + self.assertTrue(len(frog_groups) == 0) + # Test: email bounced + sent_emails = self._build_email_kwargs_list + self.assertEqual(len(sent_emails), 1, + 'message_process: incoming email on Partners alias should send a bounce email') + + # Do: incoming email from a parent document follower on a Followers only alias -> ok + self._init_mock_build_email() + self.mail_group.message_subscribe(cr, uid, [self.group_pigs_id], [p1id]) + frog_groups = format_and_process(MAIL_TEMPLATE, to='groups@example.com, other6@gmail.com') # Test: one group created by Raoul (or Sylvie maybe, if we implement it) self.assertEqual(len(frog_groups), 1, 'message_process: a new mail.group should have been created') frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) @@ -342,15 +404,63 @@ class TestMailgateway(TestMailBase): self.assertEqual(frog_follower_ids, set([p1id]), 'message_process: newly created group should have 1 follower (author, not creator, not recipients)') # Test: sent emails: no-one, no bounce effet + sent_emails = self._build_email_kwargs_list self.assertEqual(len(sent_emails), 0, 'message_process: should not bounce incoming emails') # -------------------------------------------------- - # Test2: discussion update + # Test2: update-like alias + # -------------------------------------------------- + + # Do: Pigs alias is restricted, should bounce + self._init_mock_build_email() + self.mail_group.write(cr, uid, [frog_group.id], {'alias_name': 'frogs', 'alias_contact': 'followers', 'alias_force_thread_id': frog_group.id}) + frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.com', + msg_id='<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>', + to='frogs@example.com>', subject='Re: news') + # Test: no group 'Re: news' created, still only 1 Frogs group + self.assertEqual(len(frog_groups), 0, + 'message_process: reply on Frogs should not have created a new group with new subject') + frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')]) + self.assertEqual(len(frog_groups), 1, + 'message_process: reply on Frogs should not have created a duplicate group with old subject') + frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) + # Test: email bounced + sent_emails = self._build_email_kwargs_list + self.assertEqual(len(sent_emails), 1, + 'message_process: incoming email on Followers alias should send a bounce email') + self.assertIn('Re: news', sent_emails[0].get('subject'), + 'message_process: bounce email on Followers alias should contain the original subject') + + # Do: Pigs alias is restricted, should accept Followers + self._init_mock_build_email() + self.mail_group.message_subscribe(cr, uid, [frog_group.id], [p2id]) + frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.com', + msg_id='<1198923581.41972151344608186799.JavaMail.diff1@agrolait.com>', + to='frogs@example.com>', subject='Re: cats') + # Test: no group 'Re: news' created, still only 1 Frogs group + self.assertEqual(len(frog_groups), 0, + 'message_process: reply on Frogs should not have created a new group with new subject') + frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')]) + self.assertEqual(len(frog_groups), 1, + 'message_process: reply on Frogs should not have created a duplicate group with old subject') + frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) + # Test: one new message + self.assertEqual(len(frog_group.message_ids), 2, 'message_process: group should contain 2 messages after reply') + # Test: sent emails: 1 (Sylvie copy of the incoming email, but no bounce) + sent_emails = self._build_email_kwargs_list + self.assertEqual(len(sent_emails), 1, + 'message_process: one email should have been generated') + self.assertIn('test.sylvie.lelitre@agrolait.com', sent_emails[0].get('email_to')[0], + 'message_process: email should be sent to Sylvie') + self.mail_group.message_unsubscribe(cr, uid, [frog_group.id], [p2id]) + + # -------------------------------------------------- + # Test3: discussion and replies # -------------------------------------------------- # Do: even with a wrong destination, a reply should end up in the correct thread - frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other@gmail.com', + frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.com', msg_id='<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>', to='erroneous@example.com>', subject='Re: news', extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id) @@ -362,14 +472,14 @@ class TestMailgateway(TestMailBase): 'message_process: reply on Frogs should not have created a duplicate group with old subject') frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) # Test: one new message - self.assertEqual(len(frog_group.message_ids), 2, 'message_process: group should contain 2 messages after reply') + self.assertEqual(len(frog_group.message_ids), 3, 'message_process: group should contain 2 messages after reply') # Test: author (and not recipient) added as follower frog_follower_ids = set([p.id for p in frog_group.message_follower_ids]) self.assertEqual(frog_follower_ids, set([p1id, p2id]), 'message_process: after reply, group should have 2 followers') # Do: due to some issue, same email goes back into the mailgateway - frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other@gmail.com', + frog_groups = format_and_process(MAIL_TEMPLATE, email_from='other4@gmail.com', msg_id='<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>', subject='Re: news', extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id) # Test: no group 'Re: news' created, still only 1 Frogs group @@ -380,20 +490,18 @@ class TestMailgateway(TestMailBase): 'message_process: reply on Frogs should not have created a duplicate group with old subject') frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) # Test: no new message - self.assertEqual(len(frog_group.message_ids), 2, 'message_process: message with already existing message_id should not have been duplicated') + self.assertEqual(len(frog_group.message_ids), 3, 'message_process: message with already existing message_id should not have been duplicated') # Test: message_id is still unique msg_ids = self.mail_message.search(cr, uid, [('message_id', 'ilike', '<1198923581.41972151344608186760.JavaMail.diff1@agrolait.com>')]) self.assertEqual(len(msg_ids), 1, 'message_process: message with already existing message_id should not have been duplicated') # -------------------------------------------------- - # Test3: email_from and partner finding + # Test4: email_from and partner finding # -------------------------------------------------- # Data: extra partner with Raoul's email -> test the 'better author finding' extra_partner_id = self.res_partner.create(cr, uid, {'name': 'A-Raoul', 'email': 'test_raoul@email.com'}) - # extra_user_id = self.res_users.create(cr, uid, {'name': 'B-Raoul', 'email': self.user_raoul.email}) - # extra_user_pid = self.res_users.browse(cr, uid, extra_user_id).partner_id.id # Do: post a new message, with a known partner -> duplicate emails -> partner format_and_process(MAIL_TEMPLATE, email_from='Lombrik Lubrik <test_raoul@email.com>', @@ -438,7 +546,7 @@ class TestMailgateway(TestMailBase): self.res_users.write(cr, uid, self.user_raoul_id, {'email': raoul_email}) # -------------------------------------------------- - # Test4: misc gateway features + # Test5: misc gateway features # -------------------------------------------------- # Do: incoming email with model that does not accepts incoming emails must raise @@ -472,7 +580,7 @@ class TestMailgateway(TestMailBase): frog_group = self.mail_group.browse(cr, uid, frog_groups[0]) msg = frog_group.message_ids[0] # Test: plain text content should be wrapped and stored as html - self.assertEqual(msg.body, '<pre>\nPlease call me as soon as possible this afternoon!\n\n--\nSylvie\n</pre>', + self.assertIn('<pre>\nPlease call me as soon as possible this afternoon!\n\n--\nSylvie\n</pre>', msg.body, 'message_process: plaintext incoming email incorrectly parsed') @mute_logger('openerp.addons.mail.mail_thread', 'openerp.osv.orm') diff --git a/addons/mail/wizard/mail_compose_message.py b/addons/mail/wizard/mail_compose_message.py index 7bf4d47d1ff..7685a27f1ed 100644 --- a/addons/mail/wizard/mail_compose_message.py +++ b/addons/mail/wizard/mail_compose_message.py @@ -126,7 +126,6 @@ class mail_compose_message(osv.TransientModel): _defaults = { 'composition_mode': 'comment', - 'email_from': lambda self, cr, uid, ctx={}: self.pool.get('mail.mail')._get_default_from(cr, uid, context=ctx), 'body': lambda self, cr, uid, ctx={}: '', 'subject': lambda self, cr, uid, ctx={}: False, 'partner_ids': lambda self, cr, uid, ctx={}: [], @@ -158,7 +157,7 @@ class mail_compose_message(osv.TransientModel): return super(mail_compose_message, self).check_access_rule(cr, uid, ids, operation, context=context) - def _notify(self, cr, uid, newid, context=None): + def _notify(self, cr, uid, newid, context=None, force_send=False, user_signature=True): """ Override specific notify method of mail.message, because we do not want that feature in the wizard. """ return @@ -235,6 +234,9 @@ class mail_compose_message(osv.TransientModel): for wizard in self.browse(cr, uid, ids, context=context): mass_mail_mode = wizard.composition_mode == 'mass_mail' active_model_pool = self.pool[wizard.model if wizard.model else 'mail.thread'] + if not hasattr(active_model_pool, 'message_post'): + context['thread_model'] = wizard.model + active_model_pool = self.pool['mail.thread'] # wizard works in batch mode: [res_id] or active_ids res_ids = active_ids if mass_mail_mode and wizard.model and active_ids else [wizard.res_id] @@ -257,13 +259,15 @@ class mail_compose_message(osv.TransientModel): new_attach_id = ir_attachment_obj.copy(cr, uid, attach_id, {'res_model': self._name, 'res_id': wizard.id}, context=context) attachment_ids.append(new_attach_id) post_values['attachment_ids'] = attachment_ids - post_values.update(email_dict) # email_from: mass mailing only can specify another email_from if email_dict.get('email_from'): post_values['email_from'] = email_dict.pop('email_from') # replies redirection: mass mailing only if not wizard.same_thread: post_values['reply_to'] = email_dict.pop('reply_to') + else: + email_dict.pop('reply_to') + post_values.update(email_dict) # clean the context (hint: mass mailing sets some default values that # could be wrongly interpreted by mail_mail) context.pop('default_email_to', None) @@ -280,11 +284,10 @@ class mail_compose_message(osv.TransientModel): elif mass_mail_mode: # mass mail: is a log pushed to recipients unless specified, author not added if not wizard.notify: subtype = False - context = dict(context, mail_create_nosubscribe=True) # add context key to avoid subscribing the author - msg_id = active_model_pool.message_post(cr, uid, [res_id], type='comment', subtype=subtype, context=context, **post_values) - # mass_mailing, post without notify: notify specific partners - if mass_mail_mode and not wizard.notify and post_values['partner_ids']: - self.pool.get('mail.notification')._notify(cr, uid, msg_id, post_values['partner_ids'], context=context) + context = dict(context, + mail_notify_force_send=False, # do not send emails directly but use the queue instead + mail_create_nosubscribe=True) # add context key to avoid subscribing the author + active_model_pool.message_post(cr, uid, [res_id], type='comment', subtype=subtype, context=context, **post_values) return {'type': 'ir.actions.act_window_close'} diff --git a/addons/marketing_campaign/__init__.py b/addons/marketing_campaign/__init__.py index 23796d1baaf..d37d8604380 100644 --- a/addons/marketing_campaign/__init__.py +++ b/addons/marketing_campaign/__init__.py @@ -20,7 +20,6 @@ ############################################################################## import marketing_campaign -import res_partner import report # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/marketing_campaign/__openerp__.py b/addons/marketing_campaign/__openerp__.py index a51347fd1bb..0a37f8aae0b 100644 --- a/addons/marketing_campaign/__openerp__.py +++ b/addons/marketing_campaign/__openerp__.py @@ -59,7 +59,6 @@ input segments, workflow. 'marketing_campaign_view.xml', 'marketing_campaign_data.xml', 'marketing_campaign_workflow.xml', - 'res_partner_view.xml', 'report/campaign_analysis_view.xml', 'security/marketing_campaign_security.xml', 'security/ir.model.access.csv' diff --git a/addons/marketing_campaign/res_partner_view.xml b/addons/marketing_campaign/res_partner_view.xml deleted file mode 100644 index 63c65ccd97f..00000000000 --- a/addons/marketing_campaign/res_partner_view.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0"?> -<openerp> - <data> - - <!-- Partners inherited form --> - <record id="view_workitem_partner_info_form" model="ir.ui.view"> - <field name="name">res.partner.workitem.info.inherit</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_form"/> - <field name="arch" type="xml"> - <xpath expr="//page[@name='page_history']" position="attributes"> - <attribute name="invisible">False</attribute> - </xpath> - <xpath expr="//page[@name='page_history']" position="inside"> - <group name="grp_campaign" string="Campaigns"> - <field name="workitem_ids" colspan="4" nolabel="1"/> - </group> - </xpath> - </field> - </record> - </data> -</openerp> - diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml index 2af1e876c70..992ff4be602 100644 --- a/addons/mrp/mrp_view.xml +++ b/addons/mrp/mrp_view.xml @@ -440,7 +440,7 @@ <field name="model">mrp.bom</field> <field name="field_parent">child_complete_ids</field> <field name="arch" type="xml"> - <tree string="Bill of Materials" colors="blue:method"> + <tree string="Bill of Materials"> <field name="sequence" invisible="1"/> <field name="name" invisible="1"/> <field name="product_id"/> @@ -448,7 +448,6 @@ <field name="product_uom" groups="product.group_uom"/> <field name="code"/> <field name="type"/> - <field name="method"/> <field name="routing_id" groups="mrp.group_mrp_routings"/> <field name="date_start"/> <field name="date_stop"/> @@ -460,19 +459,18 @@ <field name="model">mrp.bom</field> <field name="field_parent">child_complete_ids</field> <field name="arch" type="xml"> - <tree string="BoM Structure" colors="blue:method"> + <tree string="BoM Structure"> <field name="sequence" invisible="1"/> <field name="name" groups="base.group_no_one"/> <field name="code"/> <field name="product_id"/> - <field name="bom_id"/> + <field name="bom_id" groups="product.group_mrp_properties"/> <field name="product_qty"/> <field name="product_uom" groups="product.group_uom"/> <field name="type"/> - <field name="method"/> <field name="routing_id" groups="mrp.group_mrp_routings"/> - <field name="date_start"/> - <field name="date_stop"/> + <field name="date_start" groups="product.group_mrp_properties"/> + <field name="date_stop" groups="product.group_mrp_properties"/> </tree> </field> </record> @@ -545,6 +543,7 @@ <field name="type">ir.actions.act_window</field> <field name="res_model">mrp.bom</field> <field name="domain">[('bom_id', '=',active_ids)]</field> + <field name="view_type">tree</field> <field name="view_id" ref="mrp_bom_tree_view"/> </record> <record id="ir_BOM_structure" model="ir.values"> diff --git a/addons/point_of_sale/i18n/he.po b/addons/point_of_sale/i18n/he.po new file mode 100644 index 00000000000..31f12afc166 --- /dev/null +++ b/addons/point_of_sale/i18n/he.po @@ -0,0 +1,4053 @@ +# Hebrew translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:04+0000\n" +"PO-Revision-Date: 2013-06-09 16:04+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Hebrew <he@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-11 05:40+0000\n" +"X-Generator: Launchpad (build 16667)\n" + +#. module: point_of_sale +#: field:report.transaction.pos,product_nb:0 +msgid "Product Nb." +msgstr "מס' מוצר" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_trans_pos_tree_today +msgid "Sales by day" +msgstr "מחיר לפי יום" + +#. module: point_of_sale +#: model:ir.actions.act_window,help:point_of_sale.pos_category_action +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to define a new category.\n" +" </p><p>\n" +" Categories are used to browse your products through the\n" +" touchscreen interface.\n" +" </p><p>\n" +" If you put a photo on the category, the layout of the\n" +" touchscreen interface will automatically. We suggest not to " +"put\n" +" a photo on categories for small (1024x768) screens.\n" +" </p>\n" +" " +msgstr "" +"<p class=\"oe_view_nocontent_create\">\n" +" לחץ כדי להגדיר קטגוריה חדש.\n" +" </p><p>\n" +" קטגרויות נועדו לכך שתוכל לנווט במוצרים שלך\n" +" באמצעות מסך המגע.\n" +" </p><p>\n" +" במידה ותבחר תמונה עבור הקטגוריה תראה אותה בקטלוג\n" +" מוצרים בתוך הקופה שלך. אנו מציעים לא להשתמש בתמונות\n" +" עבור מסכים קטנים כגון 1024X768.\n" +" </p>\n" +" " + +#. module: point_of_sale +#: view:pos.receipt:0 +msgid "Print the Receipt of the Sale" +msgstr "הדפס קבלה עבור המכירה" + +#. module: point_of_sale +#: field:pos.session,cash_register_balance_end:0 +msgid "Computed Balance" +msgstr "יתרה מחושבת" + +#. module: point_of_sale +#: view:pos.session:0 +#: view:report.pos.order:0 +msgid "Today" +msgstr "נוכחי" + +#. module: point_of_sale +#: field:pos.config,iface_electronic_scale:0 +msgid "Electronic Scale Interface" +msgstr "ממשק משקל דיגיטלי" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.plain_water +msgid "Plain Water" +msgstr "מיים רגילים" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.poire_conference_product_template +msgid "Conference pears" +msgstr "אגסים" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:398 +#, python-format +msgid "ã" +msgstr "ã" + +#. module: point_of_sale +#: field:pos.config,journal_id:0 +#: field:pos.order,sale_journal:0 +msgid "Sale Journal" +msgstr "יומן מכירות" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.spa_2l_product_template +msgid "Spa Reine 2L" +msgstr "ספא רני 2 ליטר" + +#. module: point_of_sale +#: model:ir.actions.report.xml,name:point_of_sale.pos_lines_detail +#: report:pos.details:0 +#: report:pos.details_summary:0 +msgid "Details of Sales" +msgstr "פרטי מכירות" + +#. module: point_of_sale +#: constraint:pos.config:0 +msgid "You cannot have two cash controls in one Point Of Sale !" +msgstr "לא ניתן לשייך שתי בקרי מזומן לקופה רושמת אחת!" + +#. module: point_of_sale +#: field:pos.payment.report.user,user_id:0 +#: field:pos.sale.user,user_id:0 +#: field:pos.sales.user.today,user_id:0 +#: view:report.pos.order:0 +#: field:report.pos.order,user_id:0 +msgid "Salesperson" +msgstr "איש מכירות" + +#. module: point_of_sale +#: view:report.pos.order:0 +#: field:report.pos.order,day:0 +msgid "Day" +msgstr "יום" + +#. module: point_of_sale +#: field:report.sales.by.margin.pos,product_name:0 +#: field:report.sales.by.margin.pos.month,product_name:0 +msgid "Product Name" +msgstr "שם המוצר" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.pamplemousse_rouge_pamplemousse_product_template +msgid "Red grapefruit" +msgstr "אשכולית אדומה" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:1373 +#, python-format +msgid "Assign a Custom EAN" +msgstr "שייך מספר סידורי מותאם אישית" + +#. module: point_of_sale +#: view:pos.session.opening:0 +msgid "" +"You may have to control your cash amount in your cash register, before\n" +" being able to start selling through the " +"touchscreen interface." +msgstr "" +"יתכן ותצתרך לעשות ספירת מזומנים, לפני\n" +" שתוכל להתחיל למכור באמצעות קופה רושמת." + +#. module: point_of_sale +#: report:account.statement:0 +#: field:pos.box.entries,amount:0 +#: report:pos.invoice:0 +#: field:pos.make.payment,amount:0 +#: report:pos.user.product:0 +#: field:report.transaction.pos,amount:0 +msgid "Amount" +msgstr "סכום" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_box_out +#: view:pos.session:0 +msgid "Take Money Out" +msgstr "הוצא את הכסף" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:105 +#, python-format +msgid "not used" +msgstr "לא בשימוש" + +#. module: point_of_sale +#: field:pos.config,iface_vkeyboard:0 +msgid "Virtual KeyBoard Interface" +msgstr "ממשק מקלדת וירטואלית" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:96 +#, python-format +msgid "+/-" +msgstr "+/-" + +#. module: point_of_sale +#: field:pos.ean_wizard,ean13_pattern:0 +msgid "Reference" +msgstr "ייחוס" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:1066 +#: code:addons/point_of_sale/point_of_sale.py:1083 +#: report:pos.invoice:0 +#: report:pos.lines:0 +#, python-format +msgid "Tax" +msgstr "מס" + +#. module: point_of_sale +#: report:pos.user.product:0 +msgid "Starting Date" +msgstr "תאריך התחלה" + +#. module: point_of_sale +#: constraint:pos.session:0 +msgid "You cannot create two active sessions with the same responsible!" +msgstr "אתה לא יכול ליצור שני מפגשים פעילים עם אותו אחראי!" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:473 +#, python-format +msgid "Weighting" +msgstr "שוקל" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.fenouil_fenouil_product_template +msgid "Fennel" +msgstr "שומר" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:472 +#, python-format +msgid "Help needed" +msgstr "צריך עזרה" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:760 +#, python-format +msgid "Configuration Error!" +msgstr "שגיאת הגדרות!" + +#. module: point_of_sale +#: report:account.statement:0 +#: model:ir.model,name:point_of_sale.model_res_partner +#: field:report.pos.order,partner_id:0 +msgid "Partner" +msgstr "שותף" + +#. module: point_of_sale +#: view:pos.session:0 +msgid "Closing Cash Control" +msgstr "סגירת קופת מזומנים" + +#. module: point_of_sale +#: report:pos.details:0 +#: report:pos.details_summary:0 +msgid "Total of the day" +msgstr "סה\"כ ליום" + +#. module: point_of_sale +#: view:report.pos.order:0 +#: field:report.pos.order,average_price:0 +msgid "Average Price" +msgstr "מחיר ממוצע" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Accounting Information" +msgstr "פרטי חשבון" + +#. module: point_of_sale +#: field:pos.session.opening,show_config:0 +msgid "Show Config" +msgstr "הצג הגדרות" + +#. module: point_of_sale +#: report:pos.lines:0 +msgid "Disc. (%)" +msgstr "תיאור (%)" + +#. module: point_of_sale +#: report:pos.details:0 +#: report:pos.details_summary:0 +msgid "Total discount" +msgstr "סה\"כ הנחה" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:441 +#, python-format +msgid "Debug Window" +msgstr "חלון ניפוי שגיאות" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:241 +#: code:addons/point_of_sale/static/src/xml/pos.xml:613 +#, python-format +msgid "Change:" +msgstr "עודף:" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_regular_2l_product_template +msgid "Coca-Cola Regular 2L" +msgstr "קוקה קולה רגילה 2 ליטר" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_trans_pos_tree_month +msgid "Sales by month" +msgstr "מכירות לפי חודש" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.soda_orange +msgid "Orange" +msgstr "תפוז" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_user_pos_today +#: view:report.sales.by.user.pos:0 +#: view:report.sales.by.user.pos.month:0 +msgid "Sales by User" +msgstr "מכירות למשתמש" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Disc.(%)" +msgstr "תיאור (%)" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:1031 +#, python-format +msgid "Please define income account for this product: \"%s\" (id:%d)." +msgstr "אנה הגדר חשבון הכנסות עבור מוצר זה: \"%s\" (id:%d)" + +#. module: point_of_sale +#: view:report.pos.order:0 +#: field:report.pos.order,price_total:0 +msgid "Total Price" +msgstr "סה\"כ מחיר" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.leffe_brune_33cl_product_template +msgid "Leffe Brune 33cl" +msgstr "לף קהה 330 מ\"ל" + +#. module: point_of_sale +#: help:pos.config,iface_self_checkout:0 +msgid "" +"Check this if this point of sale should open by default in a self checkout " +"mode. If unchecked, OpenERP uses the normal cashier mode by default." +msgstr "" +"סמן כאן במידה וקופה זה תומכת ברכישה אצמעית. במידה ולא סומן, OpenERP יגדיר " +"קופה רגילה כברירת מחדל." + +#. module: point_of_sale +#: model:ir.actions.report.xml,name:point_of_sale.pos_sales_user +#: report:pos.sales.user:0 +msgid "Sales Report" +msgstr "דוח מכירות" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.beverage +msgid "Beverages" +msgstr "משקאות" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_session_opening +#: model:ir.ui.menu,name:point_of_sale.menu_pos_session_opening +msgid "Your Session" +msgstr "חשבון מכירות שלך" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.stella_50cl_product_template +msgid "Stella Artois 50cl" +msgstr "סטלה ארטוס 0.5 ליטר" + +#. module: point_of_sale +#: view:pos.details:0 +msgid "Dates" +msgstr "תאריכים" + +#. module: point_of_sale +#: field:pos.category,parent_id:0 +msgid "Parent Category" +msgstr "קטגוריית אב" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:482 +#, python-format +msgid "Open Cashbox" +msgstr "פתח מגירה" + +#. module: point_of_sale +#: view:pos.session.opening:0 +msgid "Select your Point of Sale" +msgstr "אנה בחר את הקופה שלך" + +#. module: point_of_sale +#: field:report.sales.by.margin.pos,total:0 +#: field:report.sales.by.margin.pos.month,total:0 +msgid "Margin" +msgstr "שוליים" + +#. module: point_of_sale +#: field:pos.discount,discount:0 +#: field:pos.order.line,discount:0 +msgid "Discount (%)" +msgstr "הנחה (%)" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_speciale_product_template +msgid "Dr. Oetker Ristorante Speciale" +msgstr "דר. אוייטקר מומחה מסעדנות" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:480 +#, python-format +msgid "Payment Request" +msgstr "בקשת תשלום" + +#. module: point_of_sale +#: field:product.product,to_weight:0 +msgid "To Weight" +msgstr "עבור משקל" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:476 +#, python-format +msgid "Hardware Events" +msgstr "איורעי חומרה" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:301 +#, python-format +msgid "You should assign a Point of Sale to your session." +msgstr "הינך חייב לבחור קופה לחשבון המכירות שלך" + +#. module: point_of_sale +#: view:pos.order.line:0 +msgid "Total qty" +msgstr "כמות כוללת" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.fanta_orange_33cl_product_template +msgid "Fanta Orange 33cl" +msgstr "פאנטה תופזים 330 מ\"ל" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:423 +#, python-format +msgid "" +"Please set your profit and loss accounts on your payment method '%s'. This " +"will allow OpenERP to post the difference of %.2f in your ending balance. To " +"close this session, you can update the 'Closing Cash Control' to avoid any " +"difference." +msgstr "" +"אנה בחר חשבון הרווח וההפסד שלך עבור שיתת תשלום '%s'. זה יאפשר לOpenERP להזין " +"הפרשי %.2f בתוך חשבון הסופי שלך. על מנת לסגור חשבון מכירות זה, אתה יכול " +"לעדכן את 'סיגרת קופת מזומנים' על מנת לא לגרום להפרשים." + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:315 +#: code:addons/point_of_sale/point_of_sale.py:514 +#, python-format +msgid "error!" +msgstr "שגיא!" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_user_pos_month +msgid "Sales by User Monthly" +msgstr "מכירות חודשיות לפי משתמש" + +#. module: point_of_sale +#: help:pos.session,cash_register_difference:0 +msgid "" +"Difference between the counted cash control at the closing and the computed " +"balance." +msgstr "הפרשים בין ספירה ידנית לספירה ממוחשבת." + +#. module: point_of_sale +#: view:pos.session.opening:0 +msgid ") is \"" +msgstr ") הוא \"" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.Onions_product_template +msgid "Onions" +msgstr "בצלים" + +#. module: point_of_sale +#: view:pos.session:0 +msgid "Validate & Open Session" +msgstr "אמת ופתח יומן מכירות" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:99 +#: selection:pos.session,state:0 +#: selection:pos.session.opening,pos_state:0 +#, python-format +msgid "In Progress" +msgstr "בתהליך" + +#. module: point_of_sale +#: view:pos.session:0 +#: field:pos.session,opening_details_ids:0 +msgid "Opening Cash Control" +msgstr "פתח קופת מזומנים" + +#. module: point_of_sale +#: help:res.users,ean13:0 +msgid "BarCode" +msgstr "ברקוד" + +#. module: point_of_sale +#: help:pos.category,image_medium:0 +msgid "" +"Medium-sized image of the category. It is automatically resized as a " +"128x128px image, with aspect ratio preserved. Use this field in form views " +"or some kanban views." +msgstr "" +"תמונה בגודל בינוני עבור קטגוריה זו. התמונות יוקטנו אוטומטית לגודל 128X128 " +"פיקסל, תוך כדי שמירה על יחס התמונה." + +#. module: point_of_sale +#: view:pos.session.opening:0 +msgid "Open Session" +msgstr "פתח הפעלה" + +#. module: point_of_sale +#: model:ir.ui.menu,name:point_of_sale.menu_point_of_sale +msgid "Daily Operations" +msgstr "פעולות יומיות" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:42 +#, python-format +msgid "Google Chrome" +msgstr "גוגל כרום" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.sparkling_water +msgid "Sparkling Water" +msgstr "מים מוגזים" + +#. module: point_of_sale +#: view:account.bank.statement:0 +msgid "Search Cash Statements" +msgstr "חיפוש דוחות מזומנים" + +#. module: point_of_sale +#: view:account.bank.statement:0 +#: field:pos.config,state:0 +#: view:pos.order:0 +#: field:pos.order,state:0 +#: report:pos.sales.user:0 +#: report:pos.sales.user.today:0 +#: field:pos.session,state:0 +#: field:pos.session.opening,pos_state_str:0 +#: field:report.pos.order,state:0 +msgid "Status" +msgstr "סטטוס" + +#. module: point_of_sale +#: selection:report.pos.order,month:0 +msgid "August" +msgstr "אוגוסט" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.pepsi_max_lemon_33cl_product_template +msgid "Pepsi Max Cool Lemon 33cl" +msgstr "פפסי מקס בטעם לימון 330 מ\"ל" + +#. module: point_of_sale +#: selection:report.pos.order,month:0 +msgid "June" +msgstr "יוני" + +#. module: point_of_sale +#: view:pos.order.line:0 +msgid "POS Order line" +msgstr "שורת הזמנה בקופה" + +#. module: point_of_sale +#: view:pos.config:0 +msgid "Point of Sale Configuration" +msgstr "הגדרות קופה רושמת" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:359 +#, python-format +msgid "Your order has to be validated by a cashier." +msgstr "הזמנת חייבת לעבור עימות על ידי קופאי" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.fanta_orange_50cl_product_template +msgid "Fanta Orange 50cl" +msgstr "פנטה תפוזים 0.5 ליטר" + +#. module: point_of_sale +#: field:pos.category,child_id:0 +msgid "Children Categories" +msgstr "קטגוריות ילדים" + +#. module: point_of_sale +#: model:ir.actions.act_window,help:point_of_sale.action_pos_session +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to start a new session.\n" +" </p><p>\n" +" A session is a period of time, usually one day, during " +"which\n" +" you sell through the point of sale. The user has to check " +"the\n" +" currencies in your cash registers at the beginning and the " +"end\n" +" of each session.\n" +" </p><p>\n" +" Note that you should better to use the menu <i>Your " +"Session</i>\n" +" to quickly open a new session.\n" +" </p>\n" +" " +msgstr "" +"<p class=\"oe_view_nocontent_create\">\n" +" לחץ כאן על מנת לפתוח יומן מכירות חדש.\n" +" </p><p>\n" +" יומן מכירות הינה תקופת עבודה בקופה, בדרך כלל\n" +" יום מכירות אחד, באה הינך מוכר באמצעות הקופה.\n" +" משתמש חייב לבחור מטבעה בכל תחילת וסוף יום.\n" +" </p><p>\n" +" שים לב, עדיף שתשתמש ב <i>יומן מכירות שלך</i>\n" +" על מנת לפתוח במהירות יומן מכירות.\n" +" </p>\n" +" " + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:888 +#, python-format +msgid "Customer Invoice" +msgstr "חשבונית לקוח" + +#. module: point_of_sale +#: view:pos.session.opening:0 +msgid "" +"You can continue sales from the touchscreen interface by clicking on \"Start " +"Selling\" or close the cash register session." +msgstr "" +"הינך יכול להמשיך את המכירות שלך על ידי לחיצה על \"התחל למכור\" או לסגור את " +"יומן המכירות הנוכחי." + +#. module: point_of_sale +#: report:account.statement:0 +#: report:all.closed.cashbox.of.the.day:0 +#: field:pos.session,stop_at:0 +msgid "Closing Date" +msgstr "תריך סגירה" + +#. module: point_of_sale +#: view:pos.session:0 +msgid "Opening Cashbox Lines" +msgstr "שורת פתיחה של קופת מזומנים" + +#. module: point_of_sale +#: selection:report.pos.order,month:0 +msgid "October" +msgstr "אוקטובר" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_light_1l_product_template +msgid "Coca-Cola Light 1L" +msgstr "קוקה קולה דיאט 1 ליטר" + +#. module: point_of_sale +#: report:pos.details:0 +#: report:pos.details_summary:0 +msgid "Summary" +msgstr "סיכום" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_naturel_45g_product_template +msgid "Lays Natural 45g" +msgstr "לייס בטעם טבעי 45 גר'" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.chaudfontaine_50cl_product_template +msgid "Chaudfontaine 50cl" +msgstr "Chaudfontaine 50 מ\"ל" + +#. module: point_of_sale +#: report:pos.invoice:0 +#: report:pos.lines:0 +#: field:pos.order.line,qty:0 +#: field:report.sales.by.user.pos,qty:0 +#: field:report.sales.by.user.pos.month,qty:0 +msgid "Quantity" +msgstr "כמות" + +#. module: point_of_sale +#: field:pos.order.line,name:0 +msgid "Line No" +msgstr "שורה מס'" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:453 +#, python-format +msgid "Set Weight" +msgstr "קבע משקל" + +#. module: point_of_sale +#: view:account.bank.statement:0 +msgid "Period" +msgstr "תקופה" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Net Total:" +msgstr "סה\"כ נטו:" + +#. module: point_of_sale +#: model:ir.actions.client,name:point_of_sale.action_client_pos_menu +msgid "Open POS Menu" +msgstr "פתח תפריט קופה" + +#. module: point_of_sale +#: report:pos.details_summary:0 +msgid "Mode of Payment" +msgstr "צורת תשלום" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_confirm +msgid "Post POS Journal Entries" +msgstr "הזן ערך לתוך יומן" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:457 +#, python-format +msgid "Barcode Scanner" +msgstr "סורק ברקודים" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.pomme_granny_smith_product_template +msgid "Granny Smith apples" +msgstr "תפוחי ספתה טובה" + +#. module: point_of_sale +#: help:product.product,expense_pdt:0 +msgid "" +"Check if, this is a product you can use to take cash from a statement for " +"the point of sale backend, example: money lost, transfer to bank, etc." +msgstr "" +"סמן כאן במידה ומוצר זה יכול להשתמש ביתרה מיוחדת כגון: חוב אבוד, העבורת לבנק " +"וכו'." + +#. module: point_of_sale +#: view:report.pos.order:0 +#: field:report.pos.order,total_discount:0 +msgid "Total Discount" +msgstr "סה\"כ הנחה" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:39 +#, python-format +msgid "" +"The Point of Sale is not supported by Microsoft Internet Explorer. Please " +"use\n" +" a modern browser like" +msgstr "" +"קופה רושמת זו אינה תומכת באינטרנט אקספלורר, אנה השתמש בדפדפן\n" +" מודרני יותר על מנת להשתמש בקופה רושמת." + +#. module: point_of_sale +#: view:pos.session.opening:0 +msgid "Click to start a session." +msgstr "הקלק על מנת לפתוח יומן מכירות" + +#. module: point_of_sale +#: view:pos.details:0 +#: view:pos.payment.report:0 +#: view:pos.payment.report.user:0 +#: view:pos.sale.user:0 +msgid "Print Report" +msgstr "הדפס דוח" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_bolognese_product_template +msgid "Dr. Oetker Ristorante Bolognese" +msgstr "" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.pizza +msgid "Pizza" +msgstr "פיצה" + +#. module: point_of_sale +#: view:pos.session:0 +msgid "= Theoretical Balance" +msgstr "= יתרה טאורטית" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_return.py:85 +#: code:addons/point_of_sale/wizard/pos_return.py:240 +#, python-format +msgid "Add Product" +msgstr "הוסף מוצר" + +#. module: point_of_sale +#: field:pos.config,name:0 +msgid "Point of Sale Name" +msgstr "שם קופה רושמת" + +#. module: point_of_sale +#: field:report.transaction.pos,invoice_am:0 +msgid "Invoice Amount" +msgstr "סכום חשבונית" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.coke +msgid "Coke" +msgstr "קוקה קולה" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Tel. :" +msgstr "טל:" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:254 +#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_receipt +#, python-format +msgid "Receipt" +msgstr "קבלה" + +#. module: point_of_sale +#: field:report.sales.by.margin.pos,net_margin_per_qty:0 +#: field:report.sales.by.margin.pos.month,net_margin_per_qty:0 +msgid "Net margin per Qty" +msgstr "רווח נקי לכמות" + +#. module: point_of_sale +#: view:pos.confirm:0 +msgid "Post All Orders" +msgstr "פרסם את כל ההזמנות" + +#. module: point_of_sale +#: report:account.statement:0 +#: report:all.closed.cashbox.of.the.day:0 +#: field:pos.session,cash_register_balance_end_real:0 +msgid "Ending Balance" +msgstr "יתרה סופית" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_box_out.py:89 +#, python-format +msgid "please check that account is set to %s." +msgstr "אנה בדוק שחשבון זה מקושר ל %s." + +#. module: point_of_sale +#: help:pos.category,image:0 +msgid "" +"This field holds the image used as image for the cateogry, limited to " +"1024x1024px." +msgstr "" +"בשדה זה נמצאת תמונה של קטגוריה, מוגבל לגודל מקסימאלי 1024X1024 פיקסלים." + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.pepsi_max_50cl_product_template +msgid "Pepsi Max 50cl" +msgstr "פפסי מאקס 50 מ\"ל" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.san_pellegrino_1l_product_template +msgid "San Pellegrino 1L" +msgstr "סאן פלגרינו 1 ליטר" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_open_statement.py:49 +#, python-format +msgid "" +"You have to define which payment method must be available in the point of " +"sale by reusing existing bank and cash through \"Accounting / Configuration " +"/ Journals / Journals\". Select a journal and check the field \"PoS Payment " +"Method\" from the \"Point of Sale\" tab. You can also create new payment " +"methods directly from menu \"PoS Backend / Configuration / Payment Methods\"." +msgstr "" +"הינך חייב לבחור בצורת תשלום שתהיה זמינה בקופה על ידי שימוש בחשבון בנק קיים " +"דרך : \"חשבונות\\ הגדרות\\ יומנים\\ יומים\". בחר יומן זמין וסמן בשורת \"צורת " +"תשלום עבור קופה רושמת\". אתה יכול ליצור צורת תשלום חדשה ישירות מתוך התפריט : " +"\"הגדרות\\ צורות תשלום\"." + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.rouges_noyau_fruits +msgid "Berries" +msgstr "פירות יער" + +#. module: point_of_sale +#: view:pos.ean_wizard:0 +msgid "Ean13 Generator" +msgstr "מחולל EAN 13" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.spa_1l_product_template +msgid "Spa Reine 1L" +msgstr "" + +#. module: point_of_sale +#: constraint:res.partner:0 +#: constraint:res.users:0 +msgid "Error: Invalid ean code" +msgstr "שגיאה : קוד EAN אינו תקין" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.legumes_racine +msgid "Root vegetables" +msgstr "ירקות שורש" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.act_pos_open_statement +#: model:ir.model,name:point_of_sale.model_pos_open_statement +#: view:pos.open.statement:0 +msgid "Open Statements" +msgstr "פתח דוחות" + +#. module: point_of_sale +#: field:pos.details,date_end:0 +#: field:pos.sale.user,date_end:0 +msgid "Date End" +msgstr "תאריך סיום" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.pomme_jonagold_product_template +msgid "Jonagold apples" +msgstr "" + +#. module: point_of_sale +#: view:account.bank.statement:0 +#: report:account.statement:0 +#: report:all.closed.cashbox.of.the.day:0 +#: model:ir.model,name:point_of_sale.model_account_journal +#: field:report.pos.order,journal_id:0 +msgid "Journal" +msgstr "יומן" + +#. module: point_of_sale +#: view:pos.session:0 +msgid "Statements" +msgstr "דוחות" + +#. module: point_of_sale +#: report:pos.details:0 +msgid "Sales total(Revenue)" +msgstr "סה\"כ מכירות (רווחים)" + +#. module: point_of_sale +#: help:pos.config,group_by:0 +msgid "" +"Check this if you want to group the Journal Items by Product while closing a " +"Session" +msgstr "" +"סמן כאן במידה והינך רוצה לשלב פרטי יומן על ידי מוצרים בזמן סגירת יומן מכירות" + +#. module: point_of_sale +#: report:pos.details:0 +#: report:pos.details_summary:0 +msgid "Total paid" +msgstr "שולם סה\"כ" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_session_opening +msgid "pos.session.opening" +msgstr "" + +#. module: point_of_sale +#: view:res.users:0 +msgid "Edit EAN" +msgstr "ערוך EAN" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_open_statement.py:80 +#, python-format +msgid "List of Cash Registers" +msgstr "רשימת קופות מזומן" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.maes_50cl_product_template +msgid "Maes 50cl" +msgstr "" + +#. module: point_of_sale +#: view:report.pos.order:0 +msgid "Not Invoiced" +msgstr "ללא חשבונית" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_pickles_250g_product_template +msgid "250g Lays Pickels" +msgstr "" + +#. module: point_of_sale +#: field:pos.session.opening,pos_session_id:0 +msgid "PoS Session" +msgstr "יומן מכירות" + +#. module: point_of_sale +#: selection:report.pos.order,month:0 +msgid "March" +msgstr "מרץ" + +#. module: point_of_sale +#: model:ir.actions.report.xml,name:point_of_sale.pos_users_product_re +#: report:pos.user.product:0 +msgid "User's Product" +msgstr "מוצרי משתמש" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:1173 +#, python-format +msgid "" +"You have to select a pricelist in the sale form !\n" +"Please set one before choosing a product." +msgstr "" +"הינך חייב לבחור מחירון עבור מכירה זו!\n" +"אנה בחר אחד לפני בחירת המוצר." + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.fanta_orange_2l_product_template +msgid "Fanta Orange 2L" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.perrier_1l_product_template +msgid "Perrier 1L" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.spa_33cl_product_template +msgid "Spa Reine 33cl" +msgstr "" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_discount +msgid "Add a Global Discount" +msgstr "הוסף הנחה כוללת" + +#. module: point_of_sale +#: view:pos.config:0 +msgid "Journals" +msgstr "יומנים" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_prosciutto_product_template +msgid "Dr. Oetker Ristorante Prosciutto" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_light_paprika_170g_product_template +#: model:product.template,name:point_of_sale.lays_paprika_170g_product_template +msgid "Lays Light Paprika 170g" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_light_lemon_50cl_product_template +msgid "Coca-Cola Light Lemon 50cl" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/point_of_sale.py:520 +#: code:addons/point_of_sale/static/src/xml/pos.xml:689 +#: code:addons/point_of_sale/static/src/xml/pos.xml:744 +#, python-format +msgid "return" +msgstr "חזרה" + +#. module: point_of_sale +#: view:product.product:0 +msgid "Set a Custom EAN" +msgstr "בחר מספר EAN מותאם אישית" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:235 +#, python-format +msgid "Remaining:" +msgstr "נותרו:" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.legumes +msgid "Fresh vegetables" +msgstr "ירקות טריים" + +#. module: point_of_sale +#: view:pos.session:0 +msgid "tab of the" +msgstr "לשונית של" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:478 +#, python-format +msgid "Scan Item Success" +msgstr "סירקת המוצר הושלמה" + +#. module: point_of_sale +#: report:account.statement:0 +#: report:all.closed.cashbox.of.the.day:0 +#: field:pos.session,cash_register_balance_start:0 +msgid "Starting Balance" +msgstr "יתרת התחלה" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_naturel_oven_150g_product_template +msgid "Oven Baked Lays Natural 150g" +msgstr "" + +#. module: point_of_sale +#: sql_constraint:pos.session:0 +msgid "The name of this POS Session must be unique !" +msgstr "שם יומן מכירות זה חייב להיות ייחודי !" + +#. module: point_of_sale +#: view:pos.session:0 +msgid "Opening Subtotal" +msgstr "יתרת פתיחה" + +#. module: point_of_sale +#: view:pos.session:0 +msgid "payment method." +msgstr "צורת תשלום." + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Re-Print" +msgstr "הדפס מחדש" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.chimay_bleu_75cl_product_template +msgid "Chimay Bleu 75cl" +msgstr "" + +#. module: point_of_sale +#: report:pos.payment.report.user:0 +msgid "Payment By User" +msgstr "תשלומים ללקוח" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:215 +#: code:addons/point_of_sale/static/src/xml/pos.xml:285 +#: code:addons/point_of_sale/wizard/pos_payment.py:79 +#: model:ir.actions.act_window,name:point_of_sale.action_pos_payment +#: report:pos.details:0 +#: view:pos.order:0 +#, python-format +msgid "Payment" +msgstr "תשלום" + +#. module: point_of_sale +#: view:report.pos.order:0 +#: field:report.pos.order,nbr:0 +msgid "# of Lines" +msgstr "# שורות" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:89 +#, python-format +msgid "Disc" +msgstr "הנחה" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "(update)" +msgstr "(עדכן)" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.ijsboerke_vanille_2,5l_product_template +msgid "IJsboerke Vanilla 2.5L" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_details +#: model:ir.ui.menu,name:point_of_sale.menu_pos_details +msgid "Sale Details" +msgstr "פרטי מכירה" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.evian_2l_product_template +msgid "2L Evian" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:373 +#: code:addons/point_of_sale/point_of_sale.py:474 +#: code:addons/point_of_sale/wizard/pos_session_opening.py:33 +#, python-format +msgid "Start Point Of Sale" +msgstr "התחלה יומן מכירות" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.pils +msgid "Pils" +msgstr "כדורים" + +#. module: point_of_sale +#: help:pos.session,cash_register_balance_end_real:0 +msgid "Computed using the cash control lines" +msgstr "מחושב לפי שורות קופה" + +#. module: point_of_sale +#: report:all.closed.cashbox.of.the.day:0 +msgid "St.Name" +msgstr "רחוב" + +#. module: point_of_sale +#: report:pos.details_summary:0 +msgid "Sales total" +msgstr "סה\"כ מכירות" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:741 +#, python-format +msgid "ABC" +msgstr "ABC" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.ijsboerke_dame_blanche_2,5l_product_template +msgid "IJsboerke 2.5L White Lady" +msgstr "" + +#. module: point_of_sale +#: field:pos.order,lines:0 +msgid "Order Lines" +msgstr "שורות הזמנה" + +#. module: point_of_sale +#: view:report.transaction.pos:0 +msgid "Total Transaction" +msgstr "סה\"כ עסקה" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.chaudfontaine_petillante_50cl_product_template +msgid "Chaudfontaine Petillante 50cl" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:485 +#, python-format +msgid "Read Weighting Scale" +msgstr "קראה משקל דיגיטלי" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:426 +#, python-format +msgid "0.00 €" +msgstr "0.00 ₪" + +#. module: point_of_sale +#: field:pos.order.line,create_date:0 +msgid "Creation Date" +msgstr "תאריך יצירה" + +#. module: point_of_sale +#: model:ir.actions.report.xml,name:point_of_sale.pos_sales_user_today +msgid "Today's Sales" +msgstr "מכירות להיום" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:264 +#: code:addons/point_of_sale/static/src/xml/pos.xml:324 +#, python-format +msgid "Welcome" +msgstr "ברוכים הבאים" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_box_entries.py:46 +#, python-format +msgid "" +"You do not have any open cash register. You must create a payment method or " +"open a cash register." +msgstr "" +"לא נמצאו קופות מזומנים. הינך חייב ליצור שיתת תשלום או לפתוח קופת מזומנים." + +#. module: point_of_sale +#: view:report.sales.by.margin.pos:0 +#: view:report.sales.by.margin.pos.month:0 +#: view:report.sales.by.user.pos:0 +#: view:report.sales.by.user.pos.month:0 +#: view:report.transaction.pos:0 +msgid "POS " +msgstr "קופה " + +#. module: point_of_sale +#: report:account.statement:0 +#: report:pos.user.product:0 +msgid "Total :" +msgstr "סה\"כ:" + +#. module: point_of_sale +#: view:report.pos.order:0 +msgid "My Sales" +msgstr "המכירות שלי" + +#. module: point_of_sale +#: view:pos.config:0 +msgid "Set to Deprecated" +msgstr "הגדר לחסרי ערך" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.limon_product_template +msgid "Stringers" +msgstr "סטרינגרים" + +#. module: point_of_sale +#: field:pos.order,pricelist_id:0 +msgid "Pricelist" +msgstr "מחירון" + +#. module: point_of_sale +#: report:pos.details:0 +#: report:pos.details_summary:0 +msgid "Total invoiced" +msgstr "סה\"כ עם חשבונית" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_category +#: field:product.product,pos_categ_id:0 +msgid "Point of Sale Category" +msgstr "קטגוריית קופה" + +#. module: point_of_sale +#: view:report.pos.order:0 +#: field:report.pos.order,product_qty:0 +msgid "# of Qty" +msgstr "# כמות" + +#. module: point_of_sale +#: help:pos.config,sequence_id:0 +msgid "" +"This sequence is automatically created by OpenERP but you can change it to " +"customize the reference numbers of your orders." +msgstr "" +"רצף זה נוצר באופן אוטומטי על ידי OpenERP אבל אתה יכול לשנות את זה כדי להתאים " +"אישית את התייחסות למספרים של ההזמנות שלך." + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:324 +#, python-format +msgid "Choose your type of receipt:" +msgstr "בחר את סוג הקבלה שלך:" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_report_sales_by_margin_pos_month +msgid "Sales by margin monthly" +msgstr "מכירות לפי מרווח חודשי" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.poivron_jaunes_product_template +msgid "Yellow Peppers" +msgstr "" + +#. module: point_of_sale +#: view:pos.order:0 +#: field:pos.order,date_order:0 +#: field:report.sales.by.margin.pos,date_order:0 +#: field:report.sales.by.margin.pos.month,date_order:0 +#: field:report.sales.by.user.pos,date_order:0 +#: field:report.sales.by.user.pos.month,date_order:0 +msgid "Order Date" +msgstr "תאריך הזמנה" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.stella_33cl_product_template +msgid "Stella Artois 33cl" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_naturel_300g_product_template +msgid "Lays Natural XXL 300g" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:479 +#, python-format +msgid "Scan Item Unrecognized" +msgstr "סרוק פריט ללא קטגוריה" + +#. module: point_of_sale +#: report:all.closed.cashbox.of.the.day:0 +msgid "Today's Closed Cashbox" +msgstr "דוח מזומנים להיום" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:920 +#, python-format +msgid "Selected orders do not have the same session!" +msgstr "הזמנות שנבחרו לא בוצעו באותו יומן מכירות!" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Draft Invoice" +msgstr "חשבונית ברירת מחדל" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_paprika_oven_150g_product_template +msgid "Oven Baked Lays Paprika 150g" +msgstr "" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Fiscal Position Remark :" +msgstr "הערת מצב פיסקלי:" + +#. module: point_of_sale +#: selection:report.pos.order,month:0 +msgid "September" +msgstr "ספטמבר" + +#. module: point_of_sale +#: report:account.statement:0 +#: report:all.closed.cashbox.of.the.day:0 +#: field:pos.session,start_at:0 +msgid "Opening Date" +msgstr "תאריך פתיחה" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_session +#: model:ir.ui.menu,name:point_of_sale.menu_pos_session_all +msgid "All Sessions" +msgstr "כל היומנים" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:663 +#, python-format +msgid "tab" +msgstr "לשונית" + +#. module: point_of_sale +#: report:pos.lines:0 +msgid "Taxes :" +msgstr "מיסים:" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:271 +#, python-format +msgid "Thank you for shopping with us." +msgstr "תודה על כך שעשיתה קניות אתנו." + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_light_2l_product_template +msgid "Coca-Cola Light 2L" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_funghi_product_template +msgid "Dr. Oetker Ristorante Funghi" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.pos_category_action +#: model:ir.ui.menu,name:point_of_sale.menu_pos_category +msgid "Product Categories" +msgstr "קטגוריות מוצרים" + +#. module: point_of_sale +#: help:pos.config,journal_id:0 +msgid "Accounting journal used to post sales entries." +msgstr "יומן מכירות להזנת מכירות." + +#. module: point_of_sale +#: field:report.transaction.pos,disc:0 +msgid "Disc." +msgstr "תיאור" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:467 +#, python-format +msgid "Invalid Ean" +msgstr "EAN שגוי" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lindemans_kriek_37,5cl_product_template +msgid "Lindemans Kriek 37.5cl" +msgstr "" + +#. module: point_of_sale +#: view:pos.config:0 +msgid "Point of Sale Config" +msgstr "הגדרות קופה" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_zero_33cl_product_template +msgid "Coca-Cola Zero 33cl" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:405 +#, python-format +msgid "ä" +msgstr "ä" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "VAT :" +msgstr "" + +#. module: point_of_sale +#: view:pos.order.line:0 +msgid "POS Order lines" +msgstr "שורות הזמנה לקופה" + +#. module: point_of_sale +#: view:pos.receipt:0 +msgid "Receipt :" +msgstr "קבלה:" + +#. module: point_of_sale +#: field:account.bank.statement,pos_session_id:0 +#: field:account.bank.statement.line,pos_statement_id:0 +#: field:pos.order,amount_return:0 +#: field:pos.session.opening,pos_session_name:0 +#: field:pos.session.opening,pos_session_username:0 +msgid "unknown" +msgstr "לא ידוע" + +#. module: point_of_sale +#: field:product.product,income_pdt:0 +msgid "Point of Sale Cash In" +msgstr "כניסת מזומנים לקופה" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:590 +#, python-format +msgid "Tax:" +msgstr "מע\"מ:" + +#. module: point_of_sale +#: view:pos.session:0 +msgid "+ Transactions" +msgstr "+ עסקאות" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_discount +#: view:pos.discount:0 +msgid "Apply Discount" +msgstr "עדכן הנחה" + +#. module: point_of_sale +#: report:account.statement:0 +#: report:all.closed.cashbox.of.the.day:0 +#: field:pos.box.entries,user_id:0 +#: report:pos.sales.user:0 +#: report:pos.sales.user.today:0 +#: view:pos.session:0 +#: report:pos.user.product:0 +#: field:report.sales.by.margin.pos,user_id:0 +#: field:report.sales.by.margin.pos.month,user_id:0 +#: field:report.sales.by.user.pos,user_id:0 +#: field:report.sales.by.user.pos.month,user_id:0 +#: field:report.transaction.pos,user_id:0 +#: model:res.groups,name:point_of_sale.group_pos_user +msgid "User" +msgstr "משתמש/ת" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:194 +#, python-format +msgid "Kg" +msgstr "ק\"ג" + +#. module: point_of_sale +#: field:product.product,available_in_pos:0 +msgid "Available in the Point of Sale" +msgstr "זמין בקופה" + +#. module: point_of_sale +#: selection:pos.config,state:0 +msgid "Deprecated" +msgstr "מומלץ לשימוש" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_light_decaf_33cl_product_template +msgid "Coca-Cola Light 33cl Decaf" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:338 +#, python-format +msgid "The scanned product was not recognized" +msgstr "מוצר נסרק אינו מזוהה" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_report_transaction_pos +msgid "transaction for the pos" +msgstr "עסקאות לקופה" + +#. module: point_of_sale +#: report:pos.details:0 +#: field:report.transaction.pos,date_create:0 +msgid "Date" +msgstr "תאריך" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_box_entries +msgid "Pos Box Entries" +msgstr "תנועות קופה" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.boon_framboise_37,5cl_product_template +msgid "Boon Framboise 37.5cl" +msgstr "" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_config +msgid "pos.config" +msgstr "" + +#. module: point_of_sale +#: view:pos.ean_wizard:0 +msgid "" +"Enter a reference, it will be converted\n" +" automatically to a valid EAN number." +msgstr "" +"הזן מספק, הוא יומר אוטומטית\n" +" לקוד EAN חוקי לשימוש." + +#. module: point_of_sale +#: field:product.product,expense_pdt:0 +msgid "Point of Sale Cash Out" +msgstr "מכירות במזומן" + +#. module: point_of_sale +#: selection:report.pos.order,month:0 +msgid "November" +msgstr "נובמבר" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:267 +#, python-format +msgid "Please scan an item or your member card" +msgstr "אנה סרוק מוצר או כרטיס חבר מועדון" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.poivron_verts_product_template +msgid "Green Peppers" +msgstr "פלפלים ירוקים" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.timmermans_faro_37,5cl_product_template +msgid "Timmermans Faro 37.5cl" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:410 +#, python-format +msgid "" +"Your ending balance is too different from the theorical cash closing (%.2f), " +"the maximum allowed is: %.2f. You can contact your manager to force it." +msgstr "" +"בסיגרת הקופה נמצאה הבדל של (%.2f), כאשר המקסימום המותר הינו %.2f. אנה צור " +"קשר עם אחראי משמרת." + +#. module: point_of_sale +#: view:pos.session:0 +msgid "Validate Closing & Post Entries" +msgstr "אמת סגירה ותנועות קופה" + +#. module: point_of_sale +#: field:report.transaction.pos,no_trans:0 +msgid "Number of Transaction" +msgstr "מספר עסקאות" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:759 +#, python-format +msgid "" +"There is no receivable account defined to make payment for the partner: " +"\"%s\" (id:%d)." +msgstr "לא נמצא חשבון אשר יכול לקבל כספים עבור שותף : \"%s\" (id:%d)." + +#. module: point_of_sale +#: view:pos.config:0 +#: selection:pos.config,state:0 +msgid "Inactive" +msgstr "לא פעיל" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:313 +#: view:pos.confirm:0 +#: view:pos.details:0 +#: view:pos.discount:0 +#: view:pos.ean_wizard:0 +#: view:pos.make.payment:0 +#: view:pos.open.statement:0 +#: view:pos.payment.report:0 +#: view:pos.payment.report.user:0 +#: view:pos.receipt:0 +#: view:pos.sale.user:0 +#, python-format +msgid "Cancel" +msgstr "ביטול" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:296 +#, python-format +msgid "Please put your product on the scale" +msgstr "אנה מקם את המוצר שלך על משקל דיגיטלי" + +#. module: point_of_sale +#: model:ir.actions.report.xml,name:point_of_sale.pos_details_summary +msgid "Sales (summary)" +msgstr "מכירות (סה\"כ)" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.nectarine_product_template +msgid "Peach" +msgstr "אפרסק" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.timmermans_kriek_37,5cl_product_template +msgid "Timmermans Kriek 37.5cl" +msgstr "" + +#. module: point_of_sale +#: field:pos.config,sequence_id:0 +msgid "Order IDs Sequence" +msgstr "רצף מספרי הזמנות" + +#. module: point_of_sale +#: report:pos.invoice:0 +#: report:pos.lines:0 +#: field:pos.order.line,price_unit:0 +#: report:pos.payment.report.user:0 +msgid "Unit Price" +msgstr "מחיר ליחידה" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:190 +#, python-format +msgid "Product Weighting" +msgstr "משקל המוצר" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:704 +#: code:addons/point_of_sale/static/src/xml/pos.xml:746 +#, python-format +msgid "close" +msgstr "סגור" + +#. module: point_of_sale +#: model:ir.actions.report.xml,name:point_of_sale.report_user_label +msgid "User Labels" +msgstr "תוויות משתמש" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_order_line +msgid "Lines of Point of Sale" +msgstr "שורות קופה" + +#. module: point_of_sale +#: view:pos.order:0 +#: view:report.transaction.pos:0 +msgid "Amount total" +msgstr "סכום כולל" + +#. module: point_of_sale +#: view:pos.session:0 +msgid "End of Session" +msgstr "סוף ההפעלה" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_new_bank_statement_all_tree +#: view:pos.session:0 +msgid "Cash Registers" +msgstr "קופות מזומן" + +#. module: point_of_sale +#: help:pos.session,cash_register_balance_end:0 +msgid "Computed with the initial cash control and the sum of all payments." +msgstr "מחושב עם שליטה הראשונית במזומן והסכום של כל התשלומים." + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:474 +#, python-format +msgid "In Transaction" +msgstr "בעסקה" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.food +msgid "Food" +msgstr "מזון" + +#. module: point_of_sale +#: field:pos.box.entries,ref:0 +msgid "Ref" +msgstr "הפניה" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:94 +#: report:pos.details:0 +#: report:pos.invoice:0 +#: report:pos.lines:0 +#, python-format +msgid "Price" +msgstr "מחיר" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_light_33cl_product_template +msgid "Coca-Cola Light 33cl" +msgstr "" + +#. module: point_of_sale +#: view:report.sales.by.margin.pos:0 +#: view:report.sales.by.margin.pos.month:0 +#: view:report.sales.by.user.pos:0 +#: view:report.sales.by.user.pos.month:0 +#: view:report.transaction.pos:0 +msgid "POS" +msgstr "קופה" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_regular_33cl_product_template +msgid "Coca-Cola Regular 33cl" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:325 +#, python-format +msgid "Ticket" +msgstr "פנייה" + +#. module: point_of_sale +#: field:pos.session,cash_register_difference:0 +msgid "Difference" +msgstr "הפרש" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:549 +#, python-format +msgid "Unable to Delete !" +msgstr "לא ניתן למחיקה!" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.autres_agrumes +msgid "Other Citrus" +msgstr "" + +#. module: point_of_sale +#: report:pos.details:0 +#: report:pos.details_summary:0 +msgid "Start Period" +msgstr "תקופת הדוח" + +#. module: point_of_sale +#: report:account.statement:0 +#: field:pos.category,complete_name:0 +#: field:pos.category,name:0 +#: report:pos.sales.user:0 +#: report:pos.sales.user.today:0 +msgid "Name" +msgstr "שם" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.spa_gazeuse_33cl_product_template +msgid "Spa Barisart 33cl" +msgstr "" + +#. module: point_of_sale +#: view:pos.confirm:0 +msgid "" +"Generate all sale journal entries for non invoiced orders linked to a closed " +"cash register or statement." +msgstr "חולל את כל המכירות להם לא הונפקה חשבונית אשר קשורים לקופה זו." + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.unreferenced_product_product_template +msgid "Unreferenced Products" +msgstr "מוצרים מנותקים מ" + +#. module: point_of_sale +#: view:pos.ean_wizard:0 +msgid "Apply" +msgstr "החל" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:288 +#, python-format +msgid "" +"Please insert your card in the reader and follow the instructions to " +"complete\n" +" your purchase" +msgstr "" +"אנה הכנס את הכרטיס שלך לתוך קורא הכרטיסיפ ועקוב אחר ההוראות להשלמת\n" +" " +" הקניה שלך" + +#. module: point_of_sale +#: help:product.product,income_pdt:0 +msgid "" +"Check if, this is a product you can use to put cash into a statement for the " +"point of sale backend." +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.ijsboerke_moka_2,5l_product_template +msgid "IJsboerke Mocha 2.5L" +msgstr "" + +#. module: point_of_sale +#: field:pos.session,cash_control:0 +msgid "Has Cash Control" +msgstr "יש קופת מזומן" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_order_all +#: model:ir.ui.menu,name:point_of_sale.menu_report_pos_order_all +msgid "Orders Analysis" +msgstr "ניתוח הזמנות" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:563 +#, python-format +msgid "User:" +msgstr "משתמש:" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:316 +#, python-format +msgid "" +"Unable to open the session. You have to assign a sale journal to your point " +"of sale." +msgstr "לא ניתן לפתוח יומן מכירות. הינך חייב לקשר יומן לקופה." + +#. module: point_of_sale +#: view:report.pos.order:0 +msgid "POS ordered created during current year" +msgstr "זמנות קופה שנוצרו במהלך השנה הנוכחית" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.peche_product_template +msgid "Fishing" +msgstr "דייג" + +#. module: point_of_sale +#: report:pos.details:0 +#: report:pos.details_summary:0 +#: report:pos.lines:0 +#: report:pos.payment.report.user:0 +#: report:pos.sales.user:0 +#: report:pos.sales.user.today:0 +#: report:pos.user.product:0 +msgid "Print Date" +msgstr "תאריך הדפסה" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.poireaux_poireaux_product_template +msgid "Leeks" +msgstr "כרישה" + +#. module: point_of_sale +#: help:pos.category,sequence:0 +msgid "" +"Gives the sequence order when displaying a list of product categories." +msgstr "נותן את סדר הרצף בעת הצגת רשימה של קטגוריות מוצר." + +#. module: point_of_sale +#: view:account.bank.statement:0 +#: view:pos.order:0 +#: view:pos.session:0 +#: view:report.pos.order:0 +msgid "Group By..." +msgstr "מקובץ על ידי ..." + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:564 +#, python-format +msgid "Shop:" +msgstr "חנות:" + +#. module: point_of_sale +#: field:account.journal,self_checkout_payment_method:0 +msgid "Self Checkout Payment Method" +msgstr "צורות תשלום ברכישה עצמית" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "POS Orders" +msgstr "הזמנות קופה" + +#. module: point_of_sale +#: model:ir.actions.report.xml,name:point_of_sale.all_closed_cashbox_of_the_day +msgid "All Closed CashBox" +msgstr "כל קופות מזומן סגורות" + +#. module: point_of_sale +#: field:pos.details,user_ids:0 +msgid "Salespeople" +msgstr "אנשי מכירות" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:777 +#: code:addons/point_of_sale/wizard/pos_box_entries.py:118 +#: code:addons/point_of_sale/wizard/pos_box_out.py:91 +#, python-format +msgid "You have to open at least one cashbox." +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:1172 +#, python-format +msgid "No Pricelist !" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.poivron_rouges_product_template +msgid "Red Pepper" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:677 +#, python-format +msgid "caps lock" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.grisette_cerise_25cl_product_template +msgid "Grisette Cherry 25cl" +msgstr "" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Base" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:702 +#: code:addons/point_of_sale/static/src/xml/pos.xml:742 +#, python-format +msgid " " +msgstr "" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.categ_others +msgid "Others" +msgstr "" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.autres_legumes_frais +msgid "Other fresh vegetables" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_open_statement.py:49 +#, python-format +msgid "No Cash Register Defined !" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:515 +#, python-format +msgid "" +"No cash statement found for this session. Unable to record returned cash." +msgstr "" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.oignons_ail_echalotes +msgid "Onions / Garlic / Shallots" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.evian_50cl_product_template +msgid "Evian 50cl" +msgstr "" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Notes" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_light_lemon_2l_product_template +msgid "Coca-Cola Light Lemon 2L" +msgstr "" + +#. module: point_of_sale +#: report:pos.details:0 +#: report:pos.invoice:0 +#: field:pos.order,amount_tax:0 +msgid "Taxes" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_line +#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_line_day +#: model:ir.actions.act_window,name:point_of_sale.action_pos_order_line_form +msgid "Sale line" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:741 +#, python-format +msgid "123" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.product_normal_action +#: model:ir.ui.menu,name:point_of_sale.menu_point_of_sale_product +#: model:ir.ui.menu,name:point_of_sale.menu_pos_products +#: view:pos.order:0 +msgid "Products" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_4formaggi_product_template +msgid "Dr. Oetker Ristorante Quattro Formaggi" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.croky_naturel_45g_product_template +msgid "Croky Natural 45g" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.tomate_en_grappe_product_template +msgid "In Cluster Tomatoes" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.client,name:point_of_sale.action_pos_pos +msgid "Start Point of Sale" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:84 +#: report:pos.details:0 +#: report:pos.payment.report.user:0 +#: report:pos.user.product:0 +#: field:report.sales.by.margin.pos,qty:0 +#: field:report.sales.by.margin.pos.month,qty:0 +#, python-format +msgid "Qty" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_zero_1l_product_template +msgid "Coca-Cola Zero 1L" +msgstr "" + +#. module: point_of_sale +#: report:pos.sales.user:0 +#: report:pos.sales.user.today:0 +#: field:report.pos.order,date:0 +msgid "Date Order" +msgstr "" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Point of Sale Orders" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.spa_et_fruit_50cl_product_template +msgid "Spa Fruit and Orange 50cl" +msgstr "" + +#. module: point_of_sale +#: view:pos.config:0 +#: field:pos.config,journal_ids:0 +#: field:pos.session,journal_ids:0 +msgid "Available Payment Methods" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,help:point_of_sale.product_normal_action +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to add a new product.\n" +" </p><p>\n" +" You must define a product for everything you sell through\n" +" the point of sale interface.\n" +" </p><p>\n" +" Do not forget to set the price and the point of sale " +"category\n" +" in which it should appear. If a product has no point of " +"sale\n" +" category, you can not sell it through the point of sale\n" +" interface.\n" +" </p>\n" +" " +msgstr "" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Extra Info" +msgstr "" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Fax :" +msgstr "" + +#. module: point_of_sale +#: view:pos.session:0 +msgid "Point of Sale Session" +msgstr "" + +#. module: point_of_sale +#: report:account.statement:0 +#: model:ir.actions.report.xml,name:point_of_sale.account_statement +msgid "Statement" +msgstr "" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Source" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:461 +#, python-format +msgid "Admin Badge" +msgstr "" + +#. module: point_of_sale +#: field:pos.make.payment,journal_id:0 +msgid "Payment Mode" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_paprika_45g_product_template +msgid "Lays Paprika 45g" +msgstr "" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_account_bank_statement +#: field:pos.session,statement_ids:0 +msgid "Bank Statement" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:101 +#: selection:pos.session,state:0 +#: selection:pos.session.opening,pos_state:0 +#, python-format +msgid "Closed & Posted" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_sale_user +#: model:ir.model,name:point_of_sale.model_pos_sale_user +#: view:pos.payment.report.user:0 +msgid "Sale by User" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:562 +#, python-format +msgid "Phone:" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.evian_1l_product_template +msgid "Evian 1L" +msgstr "" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.water +msgid "Water" +msgstr "" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_ean_wizard +msgid "pos.ean_wizard" +msgstr "" + +#. module: point_of_sale +#: selection:report.pos.order,month:0 +msgid "July" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_config_pos +#: model:ir.ui.menu,name:point_of_sale.menu_pos_config_pos +#: view:pos.session:0 +msgid "Point of Sales" +msgstr "" + +#. module: point_of_sale +#: report:pos.details:0 +#: report:pos.details_summary:0 +msgid "Qty of product" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.pomme_golden_perlim_product_template +msgid "Golden Apples Perlim" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:100 +#: selection:pos.session,state:0 +#: selection:pos.session.opening,pos_state:0 +#, python-format +msgid "Closing Control" +msgstr "" + +#. module: point_of_sale +#: field:report.pos.order,delay_validation:0 +msgid "Delay Validation" +msgstr "" + +#. module: point_of_sale +#: field:pos.order,nb_print:0 +msgid "Number of Print" +msgstr "" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_make_payment +msgid "Point of Sale Payment" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_light_50cl_product_template +msgid "Coca-Cola Light 50cl" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:466 +#, python-format +msgid "Unknown Product" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:36 +#, python-format +msgid "<![endif]-->" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.jupiler_50cl_product_template +msgid "Jupiler 50cl" +msgstr "" + +#. module: point_of_sale +#: report:pos.details:0 +#: report:pos.details_summary:0 +msgid "End Period" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_light_lemon_33cl_product_template +msgid "Coca-Cola Light Lemon 33cl" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:33 +#, python-format +msgid "<!--[if IE]>" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_ketchup_250g_product_template +msgid "Lays Ketchup 250g" +msgstr "" + +#. module: point_of_sale +#: selection:report.pos.order,state:0 +msgid "Synchronized" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.chimay_rouge_33cl_product_template +msgid "Chimay Red 33cl" +msgstr "" + +#. module: point_of_sale +#: view:report.pos.order:0 +#: field:report.pos.order,month:0 +msgid "Month" +msgstr "" + +#. module: point_of_sale +#: field:pos.category,image_medium:0 +msgid "Medium-sized image" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.papillon_orange_product_template +msgid "Orange Butterfly" +msgstr "" + +#. module: point_of_sale +#: view:report.pos.order:0 +msgid "Year of order date" +msgstr "" + +#. module: point_of_sale +#: help:product.product,to_weight:0 +msgid "" +"Check if the product should be weighted (mainly used with self check-out " +"interface)." +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_new_bank_statement_tree +#: field:pos.box.entries,journal_id:0 +#: field:pos.session,cash_register_id:0 +msgid "Cash Register" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:447 +#, python-format +msgid "Accept Payment" +msgstr "" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_receipt +msgid "Point of sale receipt" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_margin_pos_today +msgid "Sales by User Daily margin" +msgstr "" + +#. module: point_of_sale +#: view:pos.open.statement:0 +msgid "Open Registers" +msgstr "" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.poire +msgid "Pears" +msgstr "" + +#. module: point_of_sale +#: field:report.transaction.pos,journal_id:0 +msgid "Sales Journal" +msgstr "" + +#. module: point_of_sale +#: view:pos.session:0 +msgid "Opening Balance" +msgstr "" + +#. module: point_of_sale +#: view:account.bank.statement:0 +#: selection:report.pos.order,state:0 +msgid "Closed" +msgstr "" + +#. module: point_of_sale +#: field:pos.config,iface_cashdrawer:0 +msgid "Cashdrawer Interface" +msgstr "" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.tomates +msgid "Tomatos" +msgstr "" + +#. module: point_of_sale +#: view:report.pos.order:0 +msgid "POS ordered created by today" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_zero_2l_product_template +msgid "Coca-Cola Zero 2L" +msgstr "" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.oranges +msgid "Oranges" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_all_sales_lines +msgid "All sales lines" +msgstr "" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.beers +msgid "Beers" +msgstr "" + +#. module: point_of_sale +#: help:pos.config,name:0 +msgid "An internal identification of the point of sale" +msgstr "" + +#. module: point_of_sale +#: view:pos.config:0 +#: selection:pos.config,state:0 +msgid "Active" +msgstr "" + +#. module: point_of_sale +#: field:pos.session,name:0 +msgid "Session ID" +msgstr "" + +#. module: point_of_sale +#: view:pos.make.payment:0 +msgid "Pay Order" +msgstr "" + +#. module: point_of_sale +#: view:pos.session:0 +msgid "Summary by Payment Methods" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:470 +#, python-format +msgid "Hardware Status" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:220 +#: code:addons/point_of_sale/static/src/xml/pos.xml:426 +#: code:addons/point_of_sale/static/src/xml/pos.xml:596 +#: report:all.closed.cashbox.of.the.day:0 +#: report:pos.invoice:0 +#: report:pos.lines:0 +#: report:pos.payment.report.user:0 +#, python-format +msgid "Total:" +msgstr "" + +#. module: point_of_sale +#: field:res.users,ean13:0 +msgid "EAN13" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:573 +#, python-format +msgid "% discount" +msgstr "" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_report_sales_by_margin_pos +msgid "Sales by margin" +msgstr "" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Statement lines" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.croky_paprika_45g_product_template +msgid "Croky Paprika 45g" +msgstr "" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Reprint" +msgstr "" + +#. module: point_of_sale +#: field:pos.config,iface_payment_terminal:0 +msgid "Payment Terminal Interface" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:141 +#, python-format +msgid "Search Products" +msgstr "" + +#. module: point_of_sale +#: field:report.transaction.pos,invoice_id:0 +msgid "Nbr Invoice" +msgstr "" + +#. module: point_of_sale +#: field:pos.order.line,price_subtotal_incl:0 +msgid "Subtotal" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.carotte_product_template +msgid "Carrots" +msgstr "" + +#. module: point_of_sale +#: view:pos.open.statement:0 +msgid "" +"The system will open all cash registers, so that you can start recording " +"payments. We suggest you to control the opening balance of each register, " +"using their CashBox tab." +msgstr "" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Done" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:328 +#: model:ir.actions.report.xml,name:point_of_sale.pos_invoice_report +#: report:pos.invoice:0 +#: view:pos.order:0 +#: field:pos.order,invoice_id:0 +#, python-format +msgid "Invoice" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:690 +#: code:addons/point_of_sale/static/src/xml/pos.xml:701 +#, python-format +msgid "shift" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.rochefort_8_33cl_product_template +msgid "Rochefort \"8\" 33cl" +msgstr "" + +#. module: point_of_sale +#: view:account.bank.statement:0 +#: view:pos.session:0 +msgid "Open" +msgstr "" + +#. module: point_of_sale +#: field:pos.order,name:0 +#: field:pos.order.line,order_id:0 +msgid "Order Ref" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:513 +#: code:addons/point_of_sale/static/src/xml/pos.xml:572 +#, python-format +msgid "With a" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.courgette_product_template +msgid "Zucchini" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.timmermans_geuze_37,5cl_product_template +msgid "Timmermans Geuze 37.5cl" +msgstr "" + +#. module: point_of_sale +#: view:pos.session:0 +msgid "Continue Selling" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:444 +#, python-format +msgid "Payment Terminal" +msgstr "" + +#. module: point_of_sale +#: view:account.bank.statement:0 +#: field:pos.session,user_id:0 +msgid "Responsible" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.croky_bolognaise_250g_product_template +msgid "Croky Bolognese 250g" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:460 +#, python-format +msgid "Custom Ean13" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:465 +#, python-format +msgid "1.54€ Lemon" +msgstr "" + +#. module: point_of_sale +#: field:pos.make.payment,payment_name:0 +msgid "Payment Reference" +msgstr "" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_report_sales_by_user_pos_month +msgid "Sales by user monthly" +msgstr "" + +#. module: point_of_sale +#: view:pos.session:0 +msgid "Cashbox Lines" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.report.xml,name:point_of_sale.pos_payment_report_user +msgid "Today's Payment By User" +msgstr "" + +#. module: point_of_sale +#: view:report.sales.by.margin.pos:0 +#: view:report.sales.by.margin.pos.month:0 +msgid "Sales by User Margin" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:427 +#: report:pos.invoice:0 +#, python-format +msgid "Taxes:" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.pepsi_max_33cl_product_template +msgid "Pepsi Max 33cl" +msgstr "" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_report_pos_order +msgid "Point of Sale Orders Statistics" +msgstr "" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_product_product +#: report:pos.details:0 +#: field:pos.order.line,product_id:0 +#: report:pos.payment.report.user:0 +#: report:pos.user.product:0 +#: view:report.pos.order:0 +#: field:report.pos.order,product_id:0 +msgid "Product" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_pollo_product_template +msgid "Dr. Oetker Ristorante Pollo" +msgstr "" + +#. module: point_of_sale +#: constraint:pos.session:0 +msgid "" +"You cannot create two active sessions related to the same point of sale!" +msgstr "" + +#. module: point_of_sale +#: field:pos.category,image_small:0 +msgid "Smal-sized image" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.report.xml,name:point_of_sale.pos_lines_report +msgid "Pos Lines" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:416 +#, python-format +msgid "Point of Sale Profit" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:338 +#, python-format +msgid "Please wait, a cashier is on the way" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_session_opening.py:67 +#: field:pos.box.entries,session_id:0 +#: view:pos.order:0 +#: field:pos.order,session_id:0 +#, python-format +msgid "Session" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.chaudfontaine_33cl_product_template +msgid "Chaudfontaine 33cl" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_margherita_product_template +msgid "Dr. Oetker La Margherita" +msgstr "" + +#. module: point_of_sale +#: view:pos.order:0 +#: selection:pos.order,state:0 +msgid "Posted" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:229 +#, python-format +msgid "Paid:" +msgstr "" + +#. module: point_of_sale +#: report:account.statement:0 +msgid "Statement Name" +msgstr "" + +#. module: point_of_sale +#: field:pos.session,cash_register_total_entry_encoding:0 +msgid "Total Cash Transaction" +msgstr "" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.pommes_de_terre +#: model:product.template,name:point_of_sale.pomme_de_terre_product_template +msgid "Potatoes" +msgstr "" + +#. module: point_of_sale +#: view:pos.session.opening:0 +msgid "\"." +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_payment_report_user +#: model:ir.model,name:point_of_sale.model_pos_payment_report_user +msgid "Sales lines by Users" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:481 +#, python-format +msgid "Payment Status" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.pepsi_2l_product_template +msgid "Pepsi 2L" +msgstr "" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.pomme +msgid "Apples" +msgstr "" + +#. module: point_of_sale +#: report:pos.details:0 +msgid "Order" +msgstr "" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_res_users +#: report:pos.details:0 +msgid "Users" +msgstr "" + +#. module: point_of_sale +#: view:pos.details:0 +msgid "POS Details" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:462 +#, python-format +msgid "Client Badge" +msgstr "" + +#. module: point_of_sale +#: report:pos.lines:0 +msgid "Net Total :" +msgstr "" + +#. module: point_of_sale +#: field:pos.session,cash_journal_id:0 +msgid "Cash Journal" +msgstr "" + +#. module: point_of_sale +#: model:res.groups,name:point_of_sale.group_pos_manager +msgid "Manager" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_poivre_sel_oven_150g_product_template +msgid "Lays Salt and Pepper Oven Baked 150g" +msgstr "" + +#. module: point_of_sale +#: field:pos.details,date_start:0 +#: field:pos.sale.user,date_start:0 +msgid "Date Start" +msgstr "" + +#. module: point_of_sale +#: field:pos.order,amount_total:0 +#: report:pos.payment.report.user:0 +#: view:pos.session:0 +#: field:report.sales.by.user.pos,amount:0 +#: field:report.sales.by.user.pos.month,amount:0 +msgid "Total" +msgstr "" + +#. module: point_of_sale +#: view:pos.sale.user:0 +msgid "Sale By User" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_open_statement +msgid "Open Cash Register" +msgstr "" + +#. module: point_of_sale +#: field:account.journal,amount_authorized_diff:0 +msgid "Amount Authorized Difference" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:311 +#, python-format +msgid "Please be patient, help is on the way" +msgstr "" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_session +msgid "pos.session" +msgstr "" + +#. module: point_of_sale +#: help:pos.session,config_id:0 +msgid "The physical point of sale you will use." +msgstr "" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Search Sales Order" +msgstr "" + +#. module: point_of_sale +#: field:pos.config,iface_self_checkout:0 +msgid "Self Checkout Mode" +msgstr "" + +#. module: point_of_sale +#: field:account.journal,journal_user:0 +msgid "PoS Payment Method" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.pepsi_33cl_product_template +msgid "Pepsi 33cl" +msgstr "" + +#. module: point_of_sale +#: help:pos.order,user_id:0 +msgid "" +"Person who uses the the cash register. It can be a reliever, a student or an " +"interim employee." +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_zero_decaf_33cl_product_template +msgid "Coca-Cola Zero Decaf 33cl" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_payment_report +#: model:ir.model,name:point_of_sale.model_pos_payment_report +#: view:pos.payment.report:0 +msgid "Payment Report" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.fanta_orange_25cl_product_template +msgid "Fanta Orange 25cl" +msgstr "" + +#. module: point_of_sale +#: view:pos.confirm:0 +msgid "Generate Journal Entries" +msgstr "" + +#. module: point_of_sale +#: report:account.statement:0 +#: report:all.closed.cashbox.of.the.day:0 +#: report:pos.details:0 +#: report:pos.details_summary:0 +#: report:pos.lines:0 +#: field:pos.order,company_id:0 +#: field:pos.order.line,company_id:0 +#: report:pos.payment.report.user:0 +#: report:pos.sales.user:0 +#: report:pos.sales.user.today:0 +#: report:pos.user.product:0 +#: field:report.pos.order,company_id:0 +msgid "Company" +msgstr "" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Invoice Date" +msgstr "" + +#. module: point_of_sale +#: field:pos.box.entries,name:0 +msgid "Reason" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.orangina_33cl_product_template +msgid "Orangina 33cl" +msgstr "" + +#. module: point_of_sale +#: view:pos.config:0 +msgid "Set to Inactive" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.chimay_bleu_33cl_product_template +msgid "Chimay Bleu 33cl" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_account_journal_form +#: model:ir.ui.menu,name:point_of_sale.menu_action_account_journal_form_open +msgid "Payment Methods" +msgstr "" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.chips +msgid "Chips" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_spinaci_product_template +msgid "Dr. Oetker Ristorante Spinaci" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:454 +#, python-format +msgid "Reset" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:342 +#, python-format +msgid "Ok" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:278 +#, python-format +msgid "Please scan an item" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_box_in +#: view:pos.session:0 +msgid "Put Money In" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.fanta_zero_orange_1,5l_product_template +msgid "Fanta Orange Zero 1.5L" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.boni_orange_product_template +msgid "Boni Oranges" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:300 +#: code:addons/point_of_sale/point_of_sale.py:409 +#: code:addons/point_of_sale/point_of_sale.py:412 +#: code:addons/point_of_sale/point_of_sale.py:422 +#: code:addons/point_of_sale/point_of_sale.py:459 +#: code:addons/point_of_sale/point_of_sale.py:536 +#: code:addons/point_of_sale/point_of_sale.py:733 +#: code:addons/point_of_sale/point_of_sale.py:777 +#: code:addons/point_of_sale/point_of_sale.py:839 +#: code:addons/point_of_sale/point_of_sale.py:920 +#: code:addons/point_of_sale/point_of_sale.py:1031 +#: code:addons/point_of_sale/report/pos_invoice.py:46 +#: code:addons/point_of_sale/wizard/pos_box.py:22 +#: code:addons/point_of_sale/wizard/pos_box_entries.py:46 +#: code:addons/point_of_sale/wizard/pos_box_entries.py:118 +#: code:addons/point_of_sale/wizard/pos_box_entries.py:123 +#: code:addons/point_of_sale/wizard/pos_box_out.py:89 +#: code:addons/point_of_sale/wizard/pos_box_out.py:91 +#, python-format +msgid "Error!" +msgstr "" + +#. module: point_of_sale +#: report:pos.lines:0 +msgid "No. Of Articles" +msgstr "" + +#. module: point_of_sale +#: selection:pos.order,state:0 +#: selection:report.pos.order,state:0 +msgid "Cancelled" +msgstr "" + +#. module: point_of_sale +#: report:pos.user.product:0 +msgid "Ending Date" +msgstr "" + +#. module: point_of_sale +#: help:product.product,pos_categ_id:0 +msgid "" +"The Point of Sale Category this products belongs to. Those categories are " +"used to group similar products and are specific to the Point of Sale." +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.orangina_1,5l_product_template +msgid "Orangina 1.5L" +msgstr "" + +#. module: point_of_sale +#: view:report.pos.order:0 +msgid "Point of Sale Analysis" +msgstr "" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.ice_cream +msgid "Ice Cream" +msgstr "" + +#. module: point_of_sale +#: field:pos.config,shop_id:0 +#: field:pos.order,shop_id:0 +#: field:report.pos.order,shop_id:0 +msgid "Shop" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_box_entries.py:123 +#, python-format +msgid "Please check that income account is set to %s." +msgstr "" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.belle_vue_kriek_25cl_product_template +msgid "Belle-Vue Kriek 25cl" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.chaudfontaine_petillante_1,5l_product_template +msgid "Chaudfontaine Petillante 1.5l" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.ijsboerke_stracciatella_2,5l_product_template +msgid "IJsboerke Stracciatella 2.5L" +msgstr "" + +#. module: point_of_sale +#: view:report.sales.by.user.pos:0 +#: view:report.sales.by.user.pos.month:0 +#: view:report.transaction.pos:0 +msgid "POS Report" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.chaudfontaine_1,5l_product_template +msgid "Chaudfontaine 1.5l" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:1096 +#, python-format +msgid "Trade Receivables" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:549 +#, python-format +msgid "In order to delete a sale, it must be new or cancelled." +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:71 +#, python-format +msgid "" +"There are pending operations that could not be saved into the database, are " +"you sure you want to exit?" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_regular_50cl_product_template +msgid "Coca-Cola Regular 50cl" +msgstr "" + +#. module: point_of_sale +#: view:pos.confirm:0 +msgid "Generate Entries" +msgstr "" + +#. module: point_of_sale +#: field:pos.box.entries,product_id:0 +msgid "Operation" +msgstr "" + +#. module: point_of_sale +#: field:pos.order,account_move:0 +msgid "Journal Entry" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:757 +#, python-format +msgid "There is no receivable account defined to make payment." +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.citron_product_template +msgid "Lemon" +msgstr "" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Cancelled Invoice" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_zero_50cl_product_template +msgid "Coca-Cola Zero 50cl" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_tonno_product_template +msgid "Dr. Oetker Ristorante Tonno" +msgstr "" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Supplier Invoice" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:460 +#, python-format +msgid "" +"You cannot confirm all orders of this session, because they have not the " +"'paid' status" +msgstr "" + +#. module: point_of_sale +#: view:pos.order:0 +#: selection:pos.order,state:0 +#: selection:report.pos.order,state:0 +msgid "New" +msgstr "" + +#. module: point_of_sale +#: view:pos.open.statement:0 +msgid "Do you want to open cash registers?" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.perrier_50cl_product_template +msgid "50cl Perrier" +msgstr "" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_cash_box_out +msgid "cash.box.out" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.fanta_zero_orange_33cl_product_template +msgid "Fanta Zero Orange 33cl" +msgstr "" + +#. module: point_of_sale +#: help:product.product,available_in_pos:0 +msgid "Check if you want this product to appear in the Point of Sale" +msgstr "" + +#. module: point_of_sale +#: view:report.pos.order:0 +msgid "Day of order date" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.maes_33cl_product_template +msgid "Maes 33cl" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:448 +#, python-format +msgid "Reject Payment" +msgstr "" + +#. module: point_of_sale +#: model:ir.ui.menu,name:point_of_sale.menu_point_config_product +msgid "Configuration" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.orval_33cl_product_template +msgid "Orval 33cl" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:515 +#, python-format +msgid "discount" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.coca_regular_1l_product_template +msgid "Coca-Cola Regular 1L" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:733 +#, python-format +msgid "Unable to cancel the picking." +msgstr "" + +#. module: point_of_sale +#: view:pos.config:0 +msgid "Material Interfaces" +msgstr "" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.fruits +msgid "Fresh Fruits" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lindemans_pecheresse_37,,5cl_product_template +msgid "Lindemans sinful 37.5cl" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_pos_invoice +msgid "Invoices" +msgstr "" + +#. module: point_of_sale +#: selection:report.pos.order,month:0 +msgid "December" +msgstr "" + +#. module: point_of_sale +#: field:pos.category,image:0 +msgid "Image" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.spa_gazeuse_1,5l_product_template +msgid "Spa Barisart 1.5l" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:810 +#: view:pos.order:0 +#, python-format +msgid "Return Products" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.jupiler_33cl_product_template +msgid "Jupiler 33cl" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:484 +#, python-format +msgid "Print Invoice" +msgstr "" + +#. module: point_of_sale +#: field:pos.order,pos_reference:0 +msgid "Receipt Ref" +msgstr "" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_details +msgid "Sales Details" +msgstr "" + +#. module: point_of_sale +#: view:account.journal:0 +#: model:ir.model,name:point_of_sale.model_pos_order +#: model:ir.ui.menu,name:point_of_sale.menu_point_rep +#: model:ir.ui.menu,name:point_of_sale.menu_point_root +#: field:pos.session,config_id:0 +#: field:pos.session.opening,pos_config_id:0 +#: view:product.product:0 +#: view:res.partner:0 +#: view:res.users:0 +msgid "Point of Sale" +msgstr "" + +#. module: point_of_sale +#: view:pos.order:0 +#: field:pos.order,user_id:0 +msgid "Salesman" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:41 +#: view:pos.confirm:0 +#: view:pos.details:0 +#: view:pos.discount:0 +#: view:pos.ean_wizard:0 +#: view:pos.make.payment:0 +#: view:pos.open.statement:0 +#: view:pos.payment.report:0 +#: view:pos.payment.report.user:0 +#: view:pos.receipt:0 +#: view:pos.sale.user:0 +#, python-format +msgid "or" +msgstr "" + +#. module: point_of_sale +#: report:pos.details:0 +#: view:pos.order:0 +#: selection:pos.order,state:0 +#: view:report.pos.order:0 +#: selection:report.pos.order,state:0 +msgid "Invoiced" +msgstr "" + +#. module: point_of_sale +#: view:pos.session.opening:0 +msgid "New Session" +msgstr "" + +#. module: point_of_sale +#: field:pos.config,group_by:0 +msgid "Group Journal Items" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,help:point_of_sale.action_pos_pos_form +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to create a new order.\n" +" </p><p>\n" +" Use this menu to browse your preceeding orders. To record " +"new\n" +" orders, you should better use the menu <i>Your Session</i> " +"for\n" +" the touchscreen interface.\n" +" </p>\n" +" " +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:450 +#, python-format +msgid "Electronic Scale" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.spa_gazeuse_50cl_product_template +msgid "Spa Barisart 50cl" +msgstr "" + +#. module: point_of_sale +#: field:res.users,pos_config:0 +msgid "Default Point of Sale" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_box.py:23 +#, python-format +msgid "There is no cash register for this PoS Session" +msgstr "" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.special_beers +msgid "Special Beers" +msgstr "" + +#. module: point_of_sale +#: field:pos.order.line,notice:0 +msgid "Discount Notice" +msgstr "" + +#. module: point_of_sale +#: view:account.bank.statement:0 +msgid "Cash Statement" +msgstr "" + +#. module: point_of_sale +#: report:pos.details_summary:0 +msgid "Mode of Taxes" +msgstr "" + +#. module: point_of_sale +#: field:pos.order,amount_paid:0 +#: selection:pos.order,state:0 +msgid "Paid" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:464 +#, python-format +msgid "3.141Kg Oranges" +msgstr "" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "PRO-FORMA" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:839 +#, python-format +msgid "Please provide a partner for the sale." +msgstr "" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.fruity_beers +msgid "Fruity Beers" +msgstr "" + +#. module: point_of_sale +#: view:pos.session:0 +msgid "You can define another list of available currencies on the" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:463 +#, python-format +msgid "Soda 33cl" +msgstr "" + +#. module: point_of_sale +#: help:pos.session,cash_register_balance_start:0 +msgid "Computed using the cash control at the opening." +msgstr "" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.raisins +msgid "Grapes" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_trans_pos_tree +#: model:ir.model,name:point_of_sale.model_report_sales_by_user_pos +msgid "Sales by user" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_hawaii_product_template +msgid "Dr. Oetker Ristorante Hawaii" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:483 +#: view:pos.receipt:0 +#, python-format +msgid "Print Receipt" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:420 +#, python-format +msgid "Point of Sale Loss" +msgstr "" + +#. module: point_of_sale +#: field:pos.make.payment,payment_date:0 +msgid "Payment Date" +msgstr "" + +#. module: point_of_sale +#: selection:report.pos.order,month:0 +msgid "January" +msgstr "" + +#. module: point_of_sale +#: view:pos.order.line:0 +msgid "POS Orders lines" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.chaudfontaine_petillante_33cl_product_template +msgid "Chaudfontaine Petillante 33cl" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.pepsi_max_2l_product_template +msgid "Pepsi Max 2L" +msgstr "" + +#. module: point_of_sale +#: field:pos.session,details_ids:0 +msgid "Cash Control" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_vegetale_product_template +msgid "Dr. Oetker Ristorante Vegetable" +msgstr "" + +#. module: point_of_sale +#: model:pos.category,name:point_of_sale.soda +msgid "Soda" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_paprika_300g_product_template +msgid "Lays Paprika XXL 300g" +msgstr "" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Refund" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:417 +#, python-format +msgid "Your shopping cart is empty" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/report/pos_invoice.py:46 +#, python-format +msgid "Please create an invoice for this sale." +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.oetker_mozzarella_product_template +msgid "Dr. Oetker Ristorante Mozzarella" +msgstr "" + +#. module: point_of_sale +#: report:pos.details:0 +#: report:pos.payment.report.user:0 +msgid "Disc(%)" +msgstr "" + +#. module: point_of_sale +#: view:pos.session.opening:0 +msgid "The session" +msgstr "" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "General Information" +msgstr "" + +#. module: point_of_sale +#: view:pos.order.line:0 +msgid "Sum of subtotals" +msgstr "" + +#. module: point_of_sale +#: view:pos.session.opening:0 +msgid "Close Session" +msgstr "" + +#. module: point_of_sale +#: view:pos.order:0 +msgid "Order lines" +msgstr "" + +#. module: point_of_sale +#: view:pos.session.opening:0 +msgid "PoS Session Opening" +msgstr "" + +#. module: point_of_sale +#: field:pos.order.line,price_subtotal:0 +msgid "Subtotal w/o Tax" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:662 +#: code:addons/point_of_sale/static/src/xml/pos.xml:739 +#, python-format +msgid "delete" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.spa_50cl_product_template +msgid "Spa Reine 50cl" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.chicon_flandria_extra_product_template +msgid "Extra Flandria chicory" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.lays_light_naturel_170g_product_template +#: model:product.template,name:point_of_sale.lays_naturel_170g_product_template +msgid "Lays Natural Light 170g" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.leffe_blonde_33cl_product_template +msgid "Leffe Blonde 33cl" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_payment +msgid "Pyament Report" +msgstr "" + +#. module: point_of_sale +#: field:report.transaction.pos,jl_id:0 +msgid "Cash Journals" +msgstr "" + +#. module: point_of_sale +#: view:pos.session:0 +msgid "Session:" +msgstr "" + +#. module: point_of_sale +#: field:pos.config,iface_print_via_proxy:0 +msgid "Print via Proxy" +msgstr "" + +#. module: point_of_sale +#: report:pos.sales.user.today:0 +msgid "Today's Sales By User" +msgstr "" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Customer Code" +msgstr "" + +#. module: point_of_sale +#: report:pos.invoice:0 +#: report:pos.lines:0 +msgid "Description" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.act_pos_config_sessions +#: field:pos.config,session_ids:0 +msgid "Sessions" +msgstr "" + +#. module: point_of_sale +#: selection:report.pos.order,month:0 +msgid "May" +msgstr "" + +#. module: point_of_sale +#: report:pos.lines:0 +msgid "Sales lines" +msgstr "" + +#. module: point_of_sale +#: field:pos.order,note:0 +msgid "Internal Notes" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.ijsboerke_chocolat_2,5l_product_template +msgid "IJsboerke Chocolat 2.5L" +msgstr "" + +#. module: point_of_sale +#: help:pos.category,image_small:0 +msgid "" +"Small-sized image of the category. It is automatically resized as a 64x64px " +"image, with aspect ratio preserved. Use this field anywhere a small image is " +"required." +msgstr "" + +#. module: point_of_sale +#: field:pos.session.opening,pos_state:0 +msgid "Session Status" +msgstr "" + +#. module: point_of_sale +#: field:pos.order,picking_id:0 +msgid "Picking" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,help:point_of_sale.action_account_journal_form +msgid "" +"<p class=\"oe_view_nocontent_create\">\n" +" Click to add a payment method.\n" +" </p><p>\n" +" Payment methods are defined by accounting journals having " +"the\n" +" field <i>PoS Payment Method</i> checked. In order to be " +"useable\n" +" from the touchscreen interface, you must set the payment " +"method\n" +" on the <i>Point of Sale</i> configuration.\n" +" </p>\n" +" " +msgstr "" + +#. module: point_of_sale +#: view:pos.order:0 +#: field:pos.order,partner_id:0 +#: view:report.pos.order:0 +msgid "Customer" +msgstr "" + +#. module: point_of_sale +#: selection:report.pos.order,month:0 +msgid "February" +msgstr "" + +#. module: point_of_sale +#: view:res.partner:0 +msgid "Edit" +msgstr "" + +#. module: point_of_sale +#: view:pos.session.opening:0 +msgid "Click to continue the session." +msgstr "" + +#. module: point_of_sale +#: view:pos.config:0 +msgid "Set to Active" +msgstr "" + +#. module: point_of_sale +#: view:pos.category:0 +msgid "Product PoS Categories" +msgstr "" + +#. module: point_of_sale +#: view:pos.session.opening:0 +msgid "Start Selling" +msgstr "" + +#. module: point_of_sale +#: selection:report.pos.order,month:0 +msgid "April" +msgstr "" + +#. module: point_of_sale +#: view:pos.order:0 +#: field:pos.order,statement_ids:0 +msgid "Payments" +msgstr "" + +#. module: point_of_sale +#: report:pos.invoice:0 +msgid "Supplier Refund" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:593 +#, python-format +msgid "Discount:" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.action_report_sales_by_margin_pos_month +msgid "Sales by User Monthly margin" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.leffe_9_33cl_product_template +msgid "Leffe Brune \"9\" 33cl" +msgstr "" + +#. module: point_of_sale +#: help:account.journal,journal_user:0 +msgid "" +"Check this box if this journal define a payment method that can be used in " +"point of sales." +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:41 +#, python-format +msgid "Mozilla Firefox" +msgstr "" + +#. module: point_of_sale +#: model:product.template,name:point_of_sale.raisins_noir_product_template +msgid "Black Grapes" +msgstr "" + +#. module: point_of_sale +#: field:pos.category,sequence:0 +msgid "Sequence" +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/wizard/pos_return.py:316 +#: view:pos.make.payment:0 +#, python-format +msgid "Make Payment" +msgstr "" + +#. module: point_of_sale +#: constraint:pos.category:0 +msgid "Error ! You cannot create recursive categories." +msgstr "" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_pos_sales_user_today +msgid "Sales User Today" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:351 +#, python-format +msgid "Sorry, we could not create a session for this user." +msgstr "" + +#. module: point_of_sale +#: code:addons/point_of_sale/point_of_sale.py:98 +#: selection:pos.session,state:0 +#: selection:pos.session.opening,pos_state:0 +#, python-format +msgid "Opening Control" +msgstr "" + +#. module: point_of_sale +#: view:report.pos.order:0 +msgid "Month of order date" +msgstr "" + +#. module: point_of_sale +#: view:report.pos.order:0 +#: field:report.pos.order,year:0 +msgid "Year" +msgstr "" + +#. module: point_of_sale +#. openerp-web +#: code:addons/point_of_sale/static/src/xml/pos.xml:505 +#, python-format +msgid "at" +msgstr "" + +#. module: point_of_sale +#: model:ir.model,name:point_of_sale.model_cash_box_in +msgid "cash.box.in" +msgstr "" + +#. module: point_of_sale +#: model:ir.actions.act_window,name:point_of_sale.act_pos_session_orders +#: model:ir.actions.act_window,name:point_of_sale.action_pos_pos_form +#: model:ir.ui.menu,name:point_of_sale.menu_point_ofsale +#: field:pos.session,order_ids:0 +msgid "Orders" +msgstr "" + +#, python-format +#~ msgid "Print" +#~ msgstr "הדפס" + +#, python-format +#~ msgid "Subtotal:" +#~ msgstr "סיכום ביניים:" diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 089c577e940..370aa2e55ff 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -51,7 +51,7 @@ class pos_config(osv.osv): 'journal_ids' : fields.many2many('account.journal', 'pos_config_journal_rel', 'pos_config_id', 'journal_id', 'Available Payment Methods', domain="[('journal_user', '=', True ), ('type', 'in', ['bank', 'cash'])]",), - 'shop_id' : fields.many2one('sale.shop', 'Shop', + 'warehouse_id' : fields.many2one('stock.warehouse', 'Warehouse', required=True), 'journal_id' : fields.many2one('account.journal', 'Sale Journal', domain=[('type', '=', 'sale')], @@ -70,6 +70,7 @@ class pos_config(osv.osv): "to customize the reference numbers of your orders."), 'session_ids': fields.one2many('pos.session', 'config_id', 'Sessions'), 'group_by' : fields.boolean('Group Journal Items', help="Check this if you want to group the Journal Items by Product while closing a Session"), + 'pricelist_id': fields.many2one('product.pricelist','Pricelist', required=True) } def _check_cash_control(self, cr, uid, ids, context=None): @@ -112,15 +113,21 @@ class pos_config(osv.osv): res = self.pool.get('account.journal').search(cr, uid, [('type', '=', 'sale')], limit=1) return res and res[0] or False - def _default_shop(self, cr, uid, context=None): - res = self.pool.get('sale.shop').search(cr, uid, []) + def _default_warehouse(self, cr, uid, context=None): + user = self.pool.get('res.users').browse(cr, uid, uid, context) + res = self.pool.get('stock.warehouse').search(cr, uid, [('company_id', '=', user.company_id.id)], limit=1, context=context) + return res and res[0] or False + + def _default_pricelist(self, cr, uid, context=None): + res = self.pool.get('product.pricelist').search(cr, uid, [('type', '=', 'sale')], limit=1, context=context) return res and res[0] or False _defaults = { 'state' : POS_CONFIG_STATE[0][0], - 'shop_id': _default_shop, + 'warehouse_id': _default_warehouse, 'journal_id': _default_sale_journal, 'group_by' : True, + 'pricelist_id': _default_pricelist } def set_active(self, cr, uid, ids, context=None): @@ -306,7 +313,7 @@ class pos_session(osv.osv): # the .xml files as the CoA is not yet installed. jobj = self.pool.get('pos.config') pos_config = jobj.browse(cr, uid, config_id, context=context) - context.update({'company_id': pos_config.shop_id.company_id.id}) + context.update({'company_id': pos_config.warehouse_id.company_id.id}) if not pos_config.journal_id: jid = jobj.default_get(cr, uid, ['journal_id'], context=context)['journal_id'] if jid: @@ -333,7 +340,7 @@ class pos_session(osv.osv): bank_values = { 'journal_id' : journal.id, 'user_id' : uid, - 'company_id' : pos_config.shop_id.company_id.id + 'company_id' : pos_config.warehouse_id.company_id.id } statement_id = self.pool.get('account.bank.statement').create(cr, uid, bank_values, context=context) bank_statement_ids.append(statement_id) @@ -594,7 +601,7 @@ class pos_order(osv.osv): _columns = { 'name': fields.char('Order Ref', size=64, required=True, readonly=True), 'company_id':fields.many2one('res.company', 'Company', required=True, readonly=True), - 'shop_id': fields.related('session_id', 'config_id', 'shop_id', relation='sale.shop', type='many2one', string='Shop', store=True, readonly=True), + 'warehouse_id': fields.related('session_id', 'config_id', 'warehouse_id', relation='stock.warehouse', type='many2one', string='Warehouse', store=True, readonly=True), 'date_order': fields.datetime('Order Date', readonly=True, select=True), 'user_id': fields.many2one('res.users', 'Salesman', help="Person who uses the the cash register. It can be a reliever, a student or an interim employee."), 'amount_tax': fields.function(_amount_all, string='Taxes', digits_compute=dp.get_precision('Point Of Sale'), multi='all'), @@ -638,8 +645,7 @@ class pos_order(osv.osv): session_ids = self._default_session(cr, uid, context) if session_ids: session_record = self.pool.get('pos.session').browse(cr, uid, session_ids, context=context) - shop = self.pool.get('sale.shop').browse(cr, uid, session_record.config_id.shop_id.id, context=context) - return shop.pricelist_id and shop.pricelist_id.id or False + return session_record.config_id.pricelist_id and session_record.config_id.pricelist_id.id or False return False _defaults = { @@ -690,8 +696,8 @@ class pos_order(osv.osv): 'auto_picking': True, }, context=context) self.write(cr, uid, [order.id], {'picking_id': picking_id}, context=context) - location_id = order.shop_id.warehouse_id.lot_stock_id.id - output_id = order.shop_id.warehouse_id.lot_output_id.id + location_id = order.warehouse_id.lot_stock_id.id + output_id = order.warehouse_id.lot_output_id.id for line in order.lines: if line.product_id and line.product_id.type == 'service': diff --git a/addons/point_of_sale/point_of_sale_view.xml b/addons/point_of_sale/point_of_sale_view.xml index 8a53015b7d7..dbd5e731db1 100644 --- a/addons/point_of_sale/point_of_sale_view.xml +++ b/addons/point_of_sale/point_of_sale_view.xml @@ -84,7 +84,7 @@ <page string="Extra Info"> <group string="General Information"> <field name="company_id" groups="base.group_multi_company"/> - <field name="shop_id" widget="selection"/> + <field name="warehouse_id" widget="selection" groups="stock.group_locations"/> <field name="user_id"/> <field name="pricelist_id" groups="product.group_sale_pricelist" domain="[('type','=','sale')]"/> <field name="picking_id" readonly="1"/> @@ -769,12 +769,16 @@ </header> <sheet> - <group> - <field name="name"/> - <field name="shop_id" widget="selection" groups="stock.group_locations" /> - <field name="journal_id" widget="selection" /> - <field name="sequence_id" readonly="1" groups="base.group_no_one" /> - <field name="group_by" groups="account.group_account_user" /> + <label for="name" class="oe_edit_only"/> + <h1> + <field name="name"/> + </h1> + <group col="4"> + <field name="warehouse_id" widget="selection" groups="stock.group_locations" /> + <field name="pricelist_id" groups="product.group_sale_pricelist"/> + <field name="journal_id" widget="selection"/> + <field name="group_by" groups="account.group_account_user"/> + <field name="sequence_id" readonly="1" groups="base.group_no_one"/> </group> <separator string="Available Payment Methods" colspan="4"/> <field name="journal_ids" colspan="4" nolabel="1"> @@ -809,7 +813,7 @@ <field name="arch" type="xml"> <tree string="Point of Sale Configuration" colors="grey:state == 'inactive'"> <field name="name" /> - <field name="shop_id" /> + <field name="warehouse_id" groups="stock.group_locations"/> <field name="state" /> </tree> </field> @@ -823,7 +827,7 @@ <field name="name" /> <filter string="Active" domain="[('state', '=', 'active')]" /> <filter string="Inactive" domain="[('state', '=', 'inactive')]" /> - <field name="shop_id" /> + <field name="warehouse_id" groups="stock.group_locations" /> </search> </field> </record> diff --git a/addons/point_of_sale/report/pos_order_report.py b/addons/point_of_sale/report/pos_order_report.py index f4df5f0f5f6..f3ee5e317c8 100644 --- a/addons/point_of_sale/report/pos_order_report.py +++ b/addons/point_of_sale/report/pos_order_report.py @@ -41,7 +41,7 @@ class pos_order_report(osv.osv): 'price_total':fields.float('Total Price', readonly=True), 'total_discount':fields.float('Total Discount', readonly=True), 'average_price': fields.float('Average Price', readonly=True,group_operator="avg"), - 'shop_id':fields.many2one('sale.shop', 'Shop', readonly=True), + 'warehouse_id':fields.many2one('stock.warehouse', 'Warehouse', readonly=True), 'company_id':fields.many2one('res.company', 'Company', readonly=True), 'nbr':fields.integer('# of Lines', readonly=True), 'product_qty':fields.integer('# of Qty', readonly=True), @@ -69,7 +69,7 @@ class pos_order_report(osv.osv): s.partner_id as partner_id, s.state as state, s.user_id as user_id, - s.shop_id as shop_id, + s.warehouse_id as warehouse_id, s.company_id as company_id, s.sale_journal as journal_id, l.product_id as product_id @@ -80,7 +80,7 @@ class pos_order_report(osv.osv): group by to_char(s.date_order, 'dd-MM-YYYY'),to_char(s.date_order, 'YYYY'),to_char(s.date_order, 'MM'), to_char(s.date_order, 'YYYY-MM-DD'), s.partner_id,s.state, - s.user_id,s.shop_id,s.company_id,s.sale_journal,l.product_id,s.create_date + s.user_id,s.warehouse_id,s.company_id,s.sale_journal,l.product_id,s.create_date having sum(l.qty * u.factor) != 0)""") diff --git a/addons/point_of_sale/report/pos_order_report_view.xml b/addons/point_of_sale/report/pos_order_report_view.xml index 8d7bf84171a..135b6dcadaa 100644 --- a/addons/point_of_sale/report/pos_order_report_view.xml +++ b/addons/point_of_sale/report/pos_order_report_view.xml @@ -13,7 +13,7 @@ <field name="month" invisible="1"/> <field name="partner_id" invisible="1"/> <field name="product_id" invisible="1"/> - <field name="shop_id" invisible="1"/> + <field name="warehouse_id" invisible="1"/> <!--<field name="journal_id" invisible="1"/>--> <field name="company_id" invisible="1" groups="base.group_multi_company"/> <field name="nbr" sum="# of Lines"/> diff --git a/addons/point_of_sale/report/pos_receipt.rml b/addons/point_of_sale/report/pos_receipt.rml index 0802114bb48..02b8a5b1a1a 100644 --- a/addons/point_of_sale/report/pos_receipt.rml +++ b/addons/point_of_sale/report/pos_receipt.rml @@ -75,7 +75,7 @@ <para style="terp_default_Centre_9">[[ address and display_address(address)]]</para> <para style="terp_default_Centre_9">Tel : [[ address and address.phone ]]</para> <para style="terp_default_Centre_9">User : [[ o.user_id.name ]]</para> - <para style="terp_default_Centre_9">Shop : [[ o.shop_id.name ]]</para> + <para style="terp_default_Centre_9">Warehouse : [[ o.warehouse_id.name ]]</para> <para style="terp_default_Centre_9">Date : [[ o.date_order ]]</para> <para style="P4"> <font color="white"> </font> diff --git a/addons/point_of_sale/security/ir.model.access.csv b/addons/point_of_sale/security/ir.model.access.csv index 1d2c22053fb..b278c48e1f2 100644 --- a/addons/point_of_sale/security/ir.model.access.csv +++ b/addons/point_of_sale/security/ir.model.access.csv @@ -8,7 +8,7 @@ access_account_journal_pos_user,account.journal pos_user,account.model_account_j access_account_move_pos_user,account.move pos_user,account.model_account_move,group_pos_user,1,1,1,0
access_account_account_pos_user,account.account pos_user,account.model_account_account,group_pos_user,1,0,0,0
access_stock_picking_pos_user,stock.picking pos_user,stock.model_stock_picking,group_pos_user,1,1,1,1
-access_sale_shop_pos_user,sale.shop pos_user,sale.model_sale_shop,group_pos_user,1,0,0,0
+access_stock_warehouse_pos_user,stock.warehouse pos_user,stock.model_stock_warehouse,group_pos_user,1,0,0,0
access_pos_order_stock_worker,pos.order stock_worker,model_pos_order,stock.group_stock_user,1,0,0,0
access_stock_move_pos_user,stock.move pos_user,stock.model_stock_move,group_pos_user,1,1,1,1
access_report_sales_by_user_pos,report.sales.by.user.pos,model_report_sales_by_user_pos,group_pos_user,1,0,0,0
diff --git a/addons/point_of_sale/static/src/js/models.js b/addons/point_of_sale/static/src/js/models.js index 13003bcf19f..8cb88303dd1 100644 --- a/addons/point_of_sale/static/src/js/models.js +++ b/addons/point_of_sale/static/src/js/models.js @@ -142,7 +142,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal return self.fetch( 'pos.config', - ['name','journal_ids','shop_id','journal_id', + ['name','journal_ids','warehouse_id','journal_id','pricelist_id', 'iface_self_checkout', 'iface_led', 'iface_cashdrawer', 'iface_payment_terminal', 'iface_electronic_scale', 'iface_barscan', 'iface_vkeyboard', 'iface_print_via_proxy','iface_cashdrawer','state','sequence_id','session_ids'], @@ -157,7 +157,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal self.iface_self_checkout = !!pos_config.iface_self_checkout; self.iface_cashdrawer = !!pos_config.iface_cashdrawer; - return self.fetch('sale.shop',[],[['id','=',pos_config.shop_id[0]]]); + return self.fetch('stock.warehouse',[],[['id','=',pos_config.warehouse_id[0]]]); }).then(function(shops){ self.set('shop',shops[0]); @@ -174,7 +174,7 @@ function openerp_pos_models(instance, module){ //module is instance.point_of_sal ['name', 'list_price','price','pos_categ_id', 'taxes_id', 'ean13', 'to_weight', 'uom_id', 'uos_id', 'uos_coeff', 'mes_type', 'description_sale', 'description'], [['sale_ok','=',true],['available_in_pos','=',true]], - {pricelist: self.get('shop').pricelist_id[0]} // context for price + {pricelist: self.get('pos_config').pricelist_id[0]} // context for price ); }).then(function(products){ self.db.add_products(products); diff --git a/addons/point_of_sale/static/src/js/screens.js b/addons/point_of_sale/static/src/js/screens.js index 0bd399428ed..7a01732c353 100644 --- a/addons/point_of_sale/static/src/js/screens.js +++ b/addons/point_of_sale/static/src/js/screens.js @@ -16,7 +16,8 @@ // hide()s function openerp_pos_screens(instance, module){ //module is instance.point_of_sale - var QWeb = instance.web.qweb; + var QWeb = instance.web.qweb, + _t = instance.web._t; module.ScreenSelector = instance.web.Class.extend({ init: function(options){ @@ -264,7 +265,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa // we add the help button by default. we do this because the buttons are cleared on each refresh so that // the button stay local to each screen this.pos_widget.left_action_bar.add_new_button({ - label: 'help', + label: _t('Help'), icon: '/point_of_sale/static/src/img/icons/png48/help.png', click: function(){ self.help_button_action(); }, }); @@ -454,7 +455,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa },500); this.add_action_button({ - label: 'back', + label: _t('Back'), icon: '/point_of_sale/static/src/img/icons/png48/go-previous.png', click: function(){ clearInterval(this.intervalID); @@ -483,7 +484,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa this.add_action_button({ - label: 'back', + label: _t('Back'), icon: '/point_of_sale/static/src/img/icons/png48/go-previous.png', click: function(){ self.pos_widget.screen_selector.set_current_screen(self.previous_screen); @@ -491,7 +492,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa }); this.validate_button = this.add_action_button({ - label: 'Validate', + label: _t('Validate'), icon: '/point_of_sale/static/src/img/icons/png48/validate.png', click: function(){ self.order_product(); @@ -674,7 +675,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa } this.add_action_button({ - label: 'back', + label: _t('Back'), icon: '/point_of_sale/static/src/img/icons/png48/go-previous.png', click: function(){ self.queue.schedule(self.cancel); @@ -714,7 +715,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa var self = this; this.add_action_button({ - label: 'help', + label: _t('Help'), icon: '/point_of_sale/static/src/img/icons/png48/help.png', click: function(){ $('.goodbye-message').css({opacity:1}).hide(); @@ -768,7 +769,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa if(this.pos_widget.screen_selector.current_mode === 'client'){ this.add_action_button({ - label: 'pay', + label: _t('Pay'), icon: '/point_of_sale/static/src/img/icons/png48/go-next.png', click: function(){ self.pos_widget.screen_selector.set_current_screen(self.client_next_screen); @@ -808,13 +809,13 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa var self = this; this.add_action_button({ - label: 'Print', + label: _t('Print'), icon: '/point_of_sale/static/src/img/icons/png48/printer.png', click: function(){ self.print(); }, }); this.add_action_button({ - label: 'Next Order', + label: _t('Next Order'), icon: '/point_of_sale/static/src/img/icons/png48/go-next.png', click: function() { self.finishOrder(); }, }); @@ -870,7 +871,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa this.set_numpad_state(this.pos_widget.numpad.state); this.back_button = this.add_action_button({ - label: 'Back', + label: _t('Back'), icon: '/point_of_sale/static/src/img/icons/png48/go-previous.png', click: function(){ self.pos_widget.screen_selector.set_current_screen(self.back_screen); @@ -878,7 +879,7 @@ function openerp_pos_screens(instance, module){ //module is instance.point_of_sa }); this.validate_button = this.add_action_button({ - label: 'Validate', + label: _t('Validate'), name: 'validation', icon: '/point_of_sale/static/src/img/icons/png48/validate.png', click: function(){ diff --git a/addons/point_of_sale/static/src/js/widgets.js b/addons/point_of_sale/static/src/js/widgets.js index a533f0a8ee6..5d56943de73 100644 --- a/addons/point_of_sale/static/src/js/widgets.js +++ b/addons/point_of_sale/static/src/js/widgets.js @@ -1,5 +1,6 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sale - var QWeb = instance.web.qweb; + var QWeb = instance.web.qweb, + _t = instance.web._t; // The ImageCache is used to hide the latency of the application cache on-disk access in chrome // that causes annoying flickering on product pictures. Why the hell a simple access to @@ -980,13 +981,13 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa this.onscreen_keyboard.appendTo($(".point-of-sale #content")); this.close_button = new module.HeaderButtonWidget(this,{ - label:'Close', + label: _t('Close'), action: function(){ self.try_close(); }, }); this.close_button.appendTo(this.$('#rightheader')); this.client_button = new module.HeaderButtonWidget(this,{ - label:'Self-Checkout', + label: _t('Self-Checkout'), action: function(){ self.screen_selector.set_user_mode('client'); }, }); this.client_button.appendTo(this.$('#rightheader')); diff --git a/addons/point_of_sale/wizard/pos_return.py b/addons/point_of_sale/wizard/pos_return.py index f0624948ed5..92bb6721f08 100644 --- a/addons/point_of_sale/wizard/pos_return.py +++ b/addons/point_of_sale/wizard/pos_return.py @@ -112,7 +112,7 @@ class pos_return(osv.osv_memory): source_stock_id = property_obj.get(cr, uid, 'property_stock_customer', 'res.partner', context=context).id cr.execute("SELECT s.id FROM stock_location s, stock_warehouse w " "WHERE w.lot_stock_id=s.id AND w.id=%s ", - (order_id.shop_id.warehouse_id.id,)) + (order_id.warehouse_id.id,)) res = cr.fetchone() location_id = res and res[0] or None new_picking = picking_obj.copy(cr, uid, order_id.picking_id.id, {'name':'%s (return)' % order_id.name, @@ -205,7 +205,7 @@ class add_product(osv.osv_memory): stock_dest_id = property_obj.get(cr, uid, 'property_stock_customer', 'res.partner', context=context).id cr.execute("SELECT s.id FROM stock_location s, stock_warehouse w " "WHERE w.lot_stock_id=s.id AND w.id=%s ", - (order_id.shop_id.warehouse_id.id,)) + (order_id.warehouse_id.id,)) res=cr.fetchone() location_id=res and res[0] or None prod_id=prod_obj.browse(cr, uid, prod, context=context) @@ -268,7 +268,7 @@ class add_product(osv.osv_memory): stock_dest_id = property_obj.get(cr, uid, 'property_stock_customer', 'res.partner', context=context).id cr.execute("SELECT s.id FROM stock_location s, stock_warehouse w " " WHERE w.lot_stock_id=s.id AND w.id=%s ", - (order_id.shop_id.warehouse_id.id,)) + (order_id.warehouse_id.id,)) res=cr.fetchone() location_id=res and res[0] or None diff --git a/addons/portal/i18n/th.po b/addons/portal/i18n/th.po new file mode 100644 index 00000000000..ee42af496ca --- /dev/null +++ b/addons/portal/i18n/th.po @@ -0,0 +1,512 @@ +# Thai translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-20 13:55+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Thai <th@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-21 05:36+0000\n" +"X-Generator: Launchpad (build 16677)\n" + +#. module: portal +#: view:portal.payment.acquirer:0 +msgid "Mako" +msgstr "Mako" + +#. module: portal +#: code:addons/portal/wizard/share_wizard.py:50 +#, python-format +msgid "Please select at least one user to share with" +msgstr "" + +#. module: portal +#: view:portal.wizard:0 +msgid "" +"Select which contacts should belong to the portal in the list below.\n" +" The email address of each selected contact must be " +"valid and unique.\n" +" If necessary, you can fix any contact's email " +"address directly in the list." +msgstr "" + +#. module: portal +#: model:mail.group,name:portal.company_jobs +msgid "Company Jobs" +msgstr "" + +#. module: portal +#: view:portal.payment.acquirer:0 +msgid "amount: the total amount to pay, as a float" +msgstr "" + +#. module: portal +#: view:portal.wizard.user:0 +msgid "Contacts" +msgstr "ที่อยู่ติดต่อ" + +#. module: portal +#: view:share.wizard:0 +#: field:share.wizard,group_ids:0 +msgid "Existing groups" +msgstr "" + +#. module: portal +#: view:res.groups:0 +msgid "Portal Groups" +msgstr "" + +#. module: portal +#: field:portal.wizard,welcome_message:0 +msgid "Invitation Message" +msgstr "ข้อความเชื้อเชิญ" + +#. module: portal +#: view:res.groups:0 +msgid "Non-Portal Groups" +msgstr "" + +#. module: portal +#: code:addons/portal/wizard/share_wizard.py:54 +#, python-format +msgid "Please select at least one group to share with" +msgstr "" + +#. module: portal +#: view:share.wizard:0 +msgid "Details" +msgstr "รายละเอียด" + +#. module: portal +#: model:ir.ui.menu,name:portal.portal_orders +msgid "Quotations and Sales Orders" +msgstr "" + +#. module: portal +#: view:portal.payment.acquirer:0 +msgid "reference: the reference number of the document to pay" +msgstr "" + +#. module: portal +#: help:portal.payment.acquirer,visible:0 +msgid "" +"Make this payment acquirer available in portal forms (Customer invoices, " +"etc.)" +msgstr "" + +#. module: portal +#: model:ir.model,name:portal.model_share_wizard +msgid "Share Wizard" +msgstr "" + +#. module: portal +#: field:portal.wizard.user,email:0 +msgid "Email" +msgstr "อีเมล์" + +#. module: portal +#: model:ir.actions.client,help:portal.action_news +msgid "" +"<p>\n" +" Youd don't have unread company's news.\n" +" </p>\n" +" " +msgstr "" + +#. module: portal +#: code:addons/portal/wizard/portal_wizard.py:194 +#, python-format +msgid "" +"You must have an email address in your User Preferences to send emails." +msgstr "" + +#. module: portal +#: model:ir.actions.client,name:portal.action_jobs +#: model:ir.ui.menu,name:portal.portal_jobs +msgid "Jobs" +msgstr "งาน" + +#. module: portal +#: field:portal.wizard,user_ids:0 +msgid "Users" +msgstr "ผู้ใช้งาน" + +#. module: portal +#: code:addons/portal/acquirer.py:82 +#, python-format +msgid "Pay safely online" +msgstr "" + +#. module: portal +#: code:addons/portal/acquirer.py:77 +#, python-format +msgid "No online payment acquirers configured" +msgstr "" + +#. module: portal +#: view:portal.payment.acquirer:0 +msgid "" +"kind: the kind of document on which the payment form is rendered (translated " +"to user language, e.g. \"Invoice\")" +msgstr "" + +#. module: portal +#: help:portal.wizard,portal_id:0 +msgid "The portal that users can be added in or removed from." +msgstr "" + +#. module: portal +#: code:addons/portal/wizard/share_wizard.py:38 +#, python-format +msgid "Users you already shared with" +msgstr "" + +#. module: portal +#: model:ir.actions.client,help:portal.action_jobs +msgid "" +"<p>\n" +" Youd don't have unread job offers.\n" +" </p>\n" +" " +msgstr "" + +#. module: portal +#: view:portal.payment.acquirer:0 +msgid "" +", so it may use Mako expressions.\n" +" The Mako evaluation context provides:" +msgstr "" + +#. module: portal +#: model:ir.ui.menu,name:portal.portal_menu +#: field:portal.wizard,portal_id:0 +#: field:res.groups,is_portal:0 +#: model:res.groups,name:portal.group_portal +msgid "Portal" +msgstr "" + +#. module: portal +#: code:addons/portal/wizard/portal_wizard.py:34 +#, python-format +msgid "Your OpenERP account at %(company)s" +msgstr "" + +#. module: portal +#: model:res.groups,name:portal.group_anonymous +msgid "Anonymous" +msgstr "ผู้ใช้นิรนาม" + +#. module: portal +#: field:portal.wizard.user,in_portal:0 +msgid "In Portal" +msgstr "" + +#. module: portal +#: model:ir.actions.client,name:portal.action_news +#: model:ir.ui.menu,name:portal.portal_company_news +msgid "News" +msgstr "ข่าว" + +#. module: portal +#: model:ir.ui.menu,name:portal.portal_after_sales +msgid "After Sale Services" +msgstr "" + +#. module: portal +#: model:res.groups,comment:portal.group_portal +msgid "" +"Portal members have specific access rights (such as record rules and " +"restricted menus).\n" +" They usually do not belong to the usual OpenERP groups." +msgstr "" + +#. module: portal +#: model:ir.actions.act_window,name:portal.action_acquirer_list +#: view:portal.payment.acquirer:0 +msgid "Payment Acquirers" +msgstr "" + +#. module: portal +#: model:ir.ui.menu,name:portal.portal_projects +msgid "Projects" +msgstr "โครงการ" + +#. module: portal +#: model:ir.actions.client,name:portal.action_mail_inbox_feeds_portal +#: model:ir.ui.menu,name:portal.portal_inbox +msgid "Inbox" +msgstr "กล่องขาเข้า" + +#. module: portal +#: view:share.wizard:0 +#: field:share.wizard,user_ids:0 +msgid "Existing users" +msgstr "" + +#. module: portal +#: field:portal.wizard.user,wizard_id:0 +msgid "Wizard" +msgstr "" + +#. module: portal +#: field:portal.payment.acquirer,name:0 +msgid "Name" +msgstr "ชื่อ" + +#. module: portal +#: model:ir.model,name:portal.model_res_groups +msgid "Access Groups" +msgstr "กลุ่มการเข้าถึง" + +#. module: portal +#: view:portal.payment.acquirer:0 +msgid "uid: the current user id" +msgstr "" + +#. module: portal +#: view:portal.payment.acquirer:0 +msgid "" +"quote(): a method to quote special string character to make them suitable " +"for inclusion in a URL" +msgstr "" + +#. module: portal +#: help:res.groups,is_portal:0 +msgid "If checked, this group is usable as a portal." +msgstr "" + +#. module: portal +#: field:portal.payment.acquirer,form_template:0 +msgid "Payment form template (HTML)" +msgstr "" + +#. module: portal +#: field:portal.wizard.user,partner_id:0 +msgid "Contact" +msgstr "ที่อยู่ติดต่อ" + +#. module: portal +#: model:ir.model,name:portal.model_mail_mail +msgid "Outgoing Mails" +msgstr "" + +#. module: portal +#: code:addons/portal/wizard/portal_wizard.py:193 +#, python-format +msgid "Email required" +msgstr "" + +#. module: portal +#: model:ir.ui.menu,name:portal.portal_messages +msgid "Messaging" +msgstr "Messaging" + +#. module: portal +#: model:res.groups,comment:portal.group_anonymous +msgid "" +"Anonymous users have specific access rights (such as record rules and " +"restricted menus).\n" +" They usually do not belong to the usual OpenERP groups." +msgstr "" + +#. module: portal +#: model:ir.model,name:portal.model_portal_payment_acquirer +msgid "Online Payment Acquirer" +msgstr "" + +#. module: portal +#: model:mail.group,name:portal.company_news_feed +msgid "Company News" +msgstr "ข่าวสารบริษัท" + +#. module: portal +#: code:addons/portal/acquirer.py:76 +#, python-format +msgid "" +"You can finish the configuration in the <a href=\"%s\">Bank&Cash settings</a>" +msgstr "" + +#. module: portal +#: view:portal.payment.acquirer:0 +msgid "cr: the current database cursor" +msgstr "" + +#. module: portal +#: model:ir.actions.client,help:portal.action_mail_inbox_feeds_portal +msgid "" +"<p>\n" +" <b>Good Job!</b> Your inbox is empty.\n" +" </p><p>\n" +" Your inbox contains private messages or emails sent to " +"you\n" +" as well as information related to documents or people " +"you\n" +" follow.\n" +" </p>\n" +" " +msgstr "" +"<p>\n" +" <b>เยี่ยมยอด!</b> คุณอ่านข้อความหมดแล้ว\n" +" </p><p>\n" +" <b>ขอความร่วมมือ</b> ภาษาไทยสำหรับ OpenERP นั้น " +"ยังไม่สมบรูณ์และถูกต้อง \n" +" <p> เลือกหมวด Translations เพื่อแนะนำการแปลได้ที่ </p>\n" +"\n" +" https://launchpad.net/openobject-addons : business " +"application modules\n" +" https://launchpad.net/openobject-server : the " +"framework\n" +" https://launchpad.net/openerp-web : web " +"modules and frontend\n" +" </p>\n" +" " + +#. module: portal +#: view:portal.payment.acquirer:0 +msgid "" +"object: the document on which the payment form is rendered (usually an " +"invoice or sales order record)" +msgstr "" + +#. module: portal +#: help:portal.wizard,welcome_message:0 +msgid "This text is included in the email sent to new users of the portal." +msgstr "" + +#. module: portal +#: model:ir.ui.menu,name:portal.portal_company +msgid "About Us" +msgstr "เกี่ยวกับตัวเอง" + +#. module: portal +#: view:portal.payment.acquirer:0 +msgid "" +"currency: the currency record in which the document is issued (e.g. " +"currency.name could be EUR)" +msgstr "" + +#. module: portal +#: view:portal.payment.acquirer:0 +msgid "Payment Acquirer" +msgstr "" + +#. module: portal +#: code:addons/portal/wizard/portal_wizard.py:35 +#, python-format +msgid "" +"Dear %(name)s,\n" +"\n" +"You have been given access to %(portal)s.\n" +"\n" +"Your login account data is:\n" +"Database: %(db)s\n" +"Username: %(login)s\n" +"\n" +"In order to complete the signin process, click on the following url:\n" +"%(url)s\n" +"\n" +"%(welcome_message)s\n" +"\n" +"--\n" +"OpenERP - Open Source Business Applications\n" +"http://www.openerp.com\n" +msgstr "" + +#. module: portal +#: view:portal.wizard:0 +msgid "or" +msgstr "หรือ" + +#. module: portal +#: model:portal.payment.acquirer,form_template:portal.paypal_acquirer +msgid "" +"\n" +"% if object.company_id.paypal_account:\n" +"<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\" " +"target=\"_blank\">\n" +" <input type=\"hidden\" name=\"cmd\" value=\"_xclick\"/>\n" +" <input type=\"hidden\" name=\"business\" " +"value=\"${object.company_id.paypal_account}\"/>\n" +" <input type=\"hidden\" name=\"item_name\" " +"value=\"${object.company_id.name} ${kind.title()} ${reference}\"/>\n" +" <input type=\"hidden\" name=\"amount\" value=\"${amount}\"/>\n" +" <input type=\"hidden\" name=\"currency_code\" " +"value=\"${currency.name}\"/>\n" +" <input type=\"image\" name=\"submit\" " +"src=\"https://www.paypal.com/en_US/i/btn/btn_paynowCC_LG.gif\"/>\n" +"</form>\n" +"% endif\n" +" " +msgstr "" + +#. module: portal +#: model:ir.model,name:portal.model_portal_wizard_user +msgid "Portal User Config" +msgstr "" + +#. module: portal +#: view:portal.payment.acquirer:0 +msgid "" +"If the template renders to an empty result in a certain context it will be " +"ignored, as if it was inactive." +msgstr "" + +#. module: portal +#: field:portal.payment.acquirer,visible:0 +msgid "Visible" +msgstr "ปรากฏเห็น" + +#. module: portal +#: code:addons/portal/wizard/share_wizard.py:39 +#, python-format +msgid "Existing Groups (e.g Portal Groups)" +msgstr "" + +#. module: portal +#: view:portal.wizard:0 +msgid "Cancel" +msgstr "ยกเลิก" + +#. module: portal +#: view:portal.wizard:0 +msgid "Apply" +msgstr "ใช้งาน" + +#. module: portal +#: view:portal.payment.acquirer:0 +msgid "ctx: the current context dictionary" +msgstr "" + +#. module: portal +#: view:portal.payment.acquirer:0 +msgid "" +"This is an HTML form template to submit a payment through this acquirer.\n" +" The template will be rendered with" +msgstr "" + +#. module: portal +#: code:addons/portal/mail_mail.py:42 +#, python-format +msgid "" +"Access your personal documents through <a href=\"%s\">our Customer Portal</a>" +msgstr "" + +#. module: portal +#: view:portal.payment.acquirer:0 +msgid "Form Template" +msgstr "" + +#. module: portal +#: model:ir.actions.act_window,name:portal.partner_wizard_action +#: model:ir.model,name:portal.model_portal_wizard +#: view:portal.wizard:0 +msgid "Portal Access Management" +msgstr "" diff --git a/addons/portal_anonymous/i18n/en_AU.po b/addons/portal_anonymous/i18n/en_AU.po new file mode 100644 index 00000000000..feb30ee1137 --- /dev/null +++ b/addons/portal_anonymous/i18n/en_AU.po @@ -0,0 +1,25 @@ +# English (Australia) translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-24 01:47+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: English (Australia) <en_AU@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-25 05:14+0000\n" +"X-Generator: Launchpad (build 16677)\n" + +#. module: portal_anonymous +#. openerp-web +#: code:addons/portal_anonymous/static/src/xml/portal_anonymous.xml:8 +#, python-format +msgid "Login" +msgstr "Login" diff --git a/addons/portal_anonymous/i18n/th.po b/addons/portal_anonymous/i18n/th.po new file mode 100644 index 00000000000..80e81054b23 --- /dev/null +++ b/addons/portal_anonymous/i18n/th.po @@ -0,0 +1,25 @@ +# Thai translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-20 14:03+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Thai <th@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-21 05:36+0000\n" +"X-Generator: Launchpad (build 16677)\n" + +#. module: portal_anonymous +#. openerp-web +#: code:addons/portal_anonymous/static/src/xml/portal_anonymous.xml:8 +#, python-format +msgid "Login" +msgstr "เข้าระบบ" diff --git a/addons/portal_crm/i18n/th.po b/addons/portal_crm/i18n/th.po new file mode 100644 index 00000000000..247e487bcd5 --- /dev/null +++ b/addons/portal_crm/i18n/th.po @@ -0,0 +1,546 @@ +# Thai translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-20 14:52+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Thai <th@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-21 05:36+0000\n" +"X-Generator: Launchpad (build 16677)\n" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,type:0 +msgid "Lead" +msgstr "ผู้นำ" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,title:0 +msgid "Title" +msgstr "คำนำหน้าชื่อ" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,probability:0 +msgid "Success Rate (%)" +msgstr "" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Contact us" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_action:0 +msgid "Next Action Date" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,fax:0 +msgid "Fax" +msgstr "โทรสาร" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,zip:0 +msgid "Zip" +msgstr "รหัสไปรษณีย์" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,message_unread:0 +msgid "Unread Messages" +msgstr "ข้อความที่ยังไม่ได้อ่าน" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,company_id:0 +msgid "Company" +msgstr "บริษัท" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,day_open:0 +msgid "Days to Open" +msgstr "" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Thank you for your interest, we'll respond to your request shortly." +msgstr "" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,priority:0 +msgid "Highest" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,mobile:0 +msgid "Mobile" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,description:0 +msgid "Notes" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,message_ids:0 +msgid "Messages" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,color:0 +msgid "Color Index" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_latitude:0 +msgid "Geo Latitude" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_name:0 +msgid "Customer Name" +msgstr "" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,state:0 +msgid "Cancelled" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,message_unread:0 +msgid "If checked new messages require your attention." +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,channel_id:0 +msgid "Communication channel (mail, direct, phone, ...)" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,type_id:0 +msgid "Campaign" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,ref:0 +msgid "Reference" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_action_next:0 +#: field:portal_crm.crm_contact_us,title_action:0 +msgid "Next Action" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,message_summary:0 +msgid "" +"Holds the Chatter summary (number of messages, ...). This summary is " +"directly in html format in order to be inserted in kanban views." +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_id:0 +msgid "Partner" +msgstr "" + +#. module: portal_crm +#: model:ir.actions.act_window,name:portal_crm.action_contact_us +msgid "Contact Us" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,name:0 +msgid "Subject" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,opt_out:0 +msgid "Opt-Out" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,priority:0 +msgid "Priority" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,state_id:0 +msgid "State" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,message_follower_ids:0 +msgid "Followers" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,partner_id:0 +msgid "Linked partner (optional). Usually created when converting the lead." +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,payment_mode:0 +msgid "Payment Mode" +msgstr "" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,state:0 +msgid "New" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,type:0 +msgid "Type" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,email_from:0 +msgid "Email" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,channel_id:0 +msgid "Channel" +msgstr "" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Name" +msgstr "" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,priority:0 +msgid "Lowest" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,create_date:0 +msgid "Creation Date" +msgstr "" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Close" +msgstr "" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,state:0 +msgid "Pending" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,type:0 +msgid "Type is used to separate Leads and Opportunities" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,categ_ids:0 +msgid "Categories" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,stage_id:0 +msgid "Stage" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,user_login:0 +msgid "User Login" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,opt_out:0 +msgid "" +"If opt-out is checked, this contact has refused to receive emails or " +"unsubscribed to a campaign." +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,contact_name:0 +msgid "Contact Name" +msgstr "" + +#. module: portal_crm +#: model:ir.ui.menu,name:portal_crm.portal_company_contact +msgid "Contact" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_address_email:0 +msgid "Partner Contact Email" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,planned_revenue:0 +msgid "Expected Revenue" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,task_ids:0 +msgid "Tasks" +msgstr "" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Contact form" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,company_currency:0 +msgid "Currency" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,write_date:0 +msgid "Update Date" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_deadline:0 +msgid "Expected Closing" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,ref2:0 +msgid "Reference 2" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,user_email:0 +msgid "User Email" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_open:0 +msgid "Opened" +msgstr "" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,state:0 +msgid "In Progress" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,partner_name:0 +msgid "" +"The name of the future partner company that will be created while converting " +"the lead into opportunity" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,planned_cost:0 +msgid "Planned Costs" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,date_deadline:0 +msgid "Estimate of the date on which the opportunity will be won." +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,email_cc:0 +msgid "" +"These email addresses will be added to the CC field of all inbound and " +"outbound emails for this record before being sent. Separate multiple email " +"addresses with a comma" +msgstr "" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,priority:0 +msgid "Low" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_closed:0 +#: selection:portal_crm.crm_contact_us,state:0 +msgid "Closed" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_assign:0 +msgid "Assignation Date" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,state:0 +msgid "Status" +msgstr "" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,priority:0 +msgid "Normal" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,email_cc:0 +msgid "Global CC" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,street2:0 +msgid "Street2" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,id:0 +msgid "ID" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,phone:0 +msgid "Phone" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,message_is_follower:0 +msgid "Is a Follower" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,active:0 +msgid "Active" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,user_id:0 +msgid "Salesperson" +msgstr "พนักงานขาย" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,day_close:0 +msgid "Days to Close" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,company_ids:0 +msgid "Companies" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,message_summary:0 +msgid "Summary" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,section_id:0 +msgid "" +"When sending mails, the default email address is taken from the sales team." +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_address_name:0 +msgid "Partner Contact Name" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_longitude:0 +msgid "Geo Longitude" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,date_assign:0 +msgid "Last date this case was forwarded/assigned to a partner" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,email_from:0 +msgid "Email address of the contact" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,city:0 +msgid "City" +msgstr "" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Submit" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,function:0 +msgid "Function" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,referred:0 +msgid "Referred By" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,partner_assigned_id:0 +msgid "Assigned Partner" +msgstr "" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,type:0 +msgid "Opportunity" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,partner_assigned_id:0 +msgid "Partner this case has been forwarded/assigned to." +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,country_id:0 +msgid "Country" +msgstr "" + +#. module: portal_crm +#: view:portal_crm.crm_contact_us:0 +msgid "Thank you" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,state:0 +msgid "" +"The Status is set to 'Draft', when a case is created. If the case is in " +"progress the Status is set to 'Open'. When the case is over, the Status is " +"set to 'Done'. If the case needs to be reviewed then the Status is set to " +"'Pending'." +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,message_ids:0 +msgid "Messages and communication history" +msgstr "" + +#. module: portal_crm +#: help:portal_crm.crm_contact_us,type_id:0 +msgid "" +"From which campaign (seminar, marketing campaign, mass mailing, ...) did " +"this contact come from?" +msgstr "" + +#. module: portal_crm +#: selection:portal_crm.crm_contact_us,priority:0 +msgid "High" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,section_id:0 +msgid "Sales Team" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,street:0 +msgid "Street" +msgstr "" + +#. module: portal_crm +#: field:portal_crm.crm_contact_us,date_action_last:0 +msgid "Last Action" +msgstr "" + +#. module: portal_crm +#: model:ir.model,name:portal_crm.model_portal_crm_crm_contact_us +msgid "Contact form for the portal" +msgstr "" diff --git a/addons/portal_event/__init__.py b/addons/portal_event/__init__.py index 60fb460545a..71376240d03 100644 --- a/addons/portal_event/__init__.py +++ b/addons/portal_event/__init__.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# Copyright (C) 2004-TODAY OpenERP SA (<http://www.openerp.com>) # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -18,5 +18,3 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## - -import event diff --git a/addons/portal_event/__openerp__.py b/addons/portal_event/__openerp__.py index f97ad81efd9..05d84875647 100644 --- a/addons/portal_event/__openerp__.py +++ b/addons/portal_event/__openerp__.py @@ -2,7 +2,7 @@ ############################################################################## # # OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>). +# Copyright (C) 2004-TODAY OpenERP SA (<http://www.openerp.com>) # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -30,11 +30,13 @@ This module adds event menu and features to your portal if event and portal are ========================================================================================== """, 'author': 'OpenERP SA', - 'depends': ['event','portal'], + 'depends': [ + 'event', + 'portal', + ], 'data': [ - 'event_view.xml', - 'security/portal_security.xml', 'portal_event_view.xml', + 'security/portal_security.xml', 'security/ir.model.access.csv', ], 'installable': True, diff --git a/addons/portal_event/event_view.xml b/addons/portal_event/event_view.xml deleted file mode 100644 index 3dec56fa526..00000000000 --- a/addons/portal_event/event_view.xml +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> - <data> - - <!-- add visibility field to the event form view --> - <record id="view_event_form_portal" model="ir.ui.view"> - <field name="name">portal.event.form</field> - <field name="model">event.event</field> - <field name="inherit_id" ref="event.view_event_form"/> - <field name="arch" type="xml"> - <xpath expr="//page[last()]" position="after"> - <page string="Portal Settings" groups="base.group_user"> - <group> - <field name="visibility"/> - </group> - </page> - </xpath> - </field> - </record> - </data> -</openerp> diff --git a/addons/portal_event/security/portal_security.xml b/addons/portal_event/security/portal_security.xml index 926e4fdd0f2..6177ae5944e 100644 --- a/addons/portal_event/security/portal_security.xml +++ b/addons/portal_event/security/portal_security.xml @@ -2,17 +2,21 @@ <openerp> <data noupdate="1"> - <record id="portal_event_rule" model="ir.rule"> - <field name="name">Portal Visible Events</field> - <field ref="event.model_event_event" name="model_id"/> - <field name="domain_force">['|', ('visibility', '=', 'public'), ('message_follower_ids','in', [user.partner_id.id])]</field> + <record model="ir.rule" id="event_event_portal_anonymous_rule"> + <field name="name">Event: portal and anonymous users: public only</field> + <field name="model_id" ref="event.model_event_event"/> + <field name="domain_force">['|', + ('visibility', '=', 'public'), + ('message_follower_ids', 'in', [user.partner_id.id]) + ] + </field> <field name="groups" eval="[(4, ref('portal.group_portal')), (4, ref('portal.group_anonymous'))]"/> </record> - <record id="portal_registration_rule" model="ir.rule"> - <field name="name">Portal Personal Registrations</field> - <field ref="event.model_event_registration" name="model_id"/> - <field name="domain_force">[('user_id','=',user.id)]</field> + <record model="ir.rule" id="event_registration_portal_anonymous_rule"> + <field name="name">Event/Registration: portal and anonymous users: personal only</field> + <field name="model_id" ref="event.model_event_registration"/> + <field name="domain_force">[('user_id', '=', user.id)]</field> <field name="groups" eval="[(4, ref('portal.group_portal')), (4, ref('portal.group_anonymous'))]"/> </record> diff --git a/addons/portal_hr_employees/hr_employee_view.xml b/addons/portal_hr_employees/hr_employee_view.xml index eca13258ff9..7b038747c60 100644 --- a/addons/portal_hr_employees/hr_employee_view.xml +++ b/addons/portal_hr_employees/hr_employee_view.xml @@ -37,7 +37,7 @@ <field name="model">hr.employee</field> <field name="inherit_id" eval="False"/> <field name="arch" type="xml"> - <kanban> + <kanban create="false"> <field name="last_login"/> <templates> <t t-name="kanban-box"> diff --git a/addons/portal_hr_employees/i18n/th.po b/addons/portal_hr_employees/i18n/th.po new file mode 100644 index 00000000000..c6f7ad2cacf --- /dev/null +++ b/addons/portal_hr_employees/i18n/th.po @@ -0,0 +1,95 @@ +# Thai translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-06-20 13:57+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Thai <th@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-21 05:36+0000\n" +"X-Generator: Launchpad (build 16677)\n" + +#. module: portal_hr_employees +#: view:hr.employee:0 +msgid "Coach" +msgstr "โค้ช" + +#. module: portal_hr_employees +#: model:ir.actions.act_window,name:portal_hr_employees.action_team +#: view:portal_crm.crm_contact_us:0 +msgid "Our Team" +msgstr "" + +#. module: portal_hr_employees +#: view:hr.employee:0 +msgid "Group By..." +msgstr "จัดกลุ่มตาม..." + +#. module: portal_hr_employees +#: view:hr.employee:0 +msgid "Company" +msgstr "บริษัท" + +#. module: portal_hr_employees +#: selection:hr.employee,visibility:0 +msgid "Public" +msgstr "สาธารณะ" + +#. module: portal_hr_employees +#: help:hr.employee,visibility:0 +msgid "Employee's visibility in the portal's contact page" +msgstr "" + +#. module: portal_hr_employees +#: selection:hr.employee,visibility:0 +msgid "Private" +msgstr "ส่วนตัว" + +#. module: portal_hr_employees +#: view:hr.employee:0 +msgid "Manager" +msgstr "ผู้จัดการ" + +#. module: portal_hr_employees +#: model:ir.model,name:portal_hr_employees.model_hr_employee +msgid "Employee" +msgstr "พนักงาน" + +#. module: portal_hr_employees +#: view:hr.employee:0 +msgid "Job" +msgstr "งาน" + +#. module: portal_hr_employees +#: field:hr.employee,visibility:0 +msgid "Visibility" +msgstr "มองเห็นได้" + +#. module: portal_hr_employees +#: field:hr.employee,public_info:0 +msgid "Public Info" +msgstr "" + +#. module: portal_hr_employees +#: model:ir.model,name:portal_hr_employees.model_portal_crm_crm_contact_us +msgid "Contact form for the portal" +msgstr "" + +#. module: portal_hr_employees +#: view:hr.employee:0 +msgid "Department" +msgstr "แผนก" + +#. module: portal_hr_employees +#: view:hr.employee:0 +#: field:portal_crm.crm_contact_us,employee_ids:0 +msgid "Employees" +msgstr "พนักงาน" diff --git a/addons/portal_project/__openerp__.py b/addons/portal_project/__openerp__.py index d502d278c38..8d24b4a2c84 100644 --- a/addons/portal_project/__openerp__.py +++ b/addons/portal_project/__openerp__.py @@ -30,12 +30,13 @@ This module adds project menu and features (tasks) to your portal if project and ====================================================================================================== """, 'author': 'OpenERP SA', - 'depends': ['project','portal'], + 'depends': ['project', 'portal'], 'data': [ 'security/portal_security.xml', 'security/ir.model.access.csv', 'portal_project_view.xml', ], + 'demo': [], 'installable': True, 'auto_install': True, 'category': 'Hidden', diff --git a/addons/portal_project/project.py b/addons/portal_project/project.py index fb783c8a531..71eb00914e0 100644 --- a/addons/portal_project/project.py +++ b/addons/portal_project/project.py @@ -30,7 +30,7 @@ class portal_project(osv.Model): """ Override to add portal option. """ selection = super(portal_project, self)._get_visibility_selection(cr, uid, context=context) idx = [item[0] for item in selection].index('public') - selection.insert((idx + 1), ('portal', 'Portal Users and Employees')) + selection.insert((idx + 1), ('portal', 'Customer related project: visible through portal')) return selection # return [('public', 'All Users'), # ('portal', 'Portal Users and Employees'), diff --git a/addons/portal_sale/security/ir.model.access.csv b/addons/portal_sale/security/ir.model.access.csv index c73be67e8c9..37e27c54d36 100644 --- a/addons/portal_sale/security/ir.model.access.csv +++ b/addons/portal_sale/security/ir.model.access.csv @@ -11,7 +11,6 @@ access_account_move,account.move,account.model_account_move,portal.group_portal, access_account_move_line,account.move.line,account.model_account_move_line,portal.group_portal,1,0,0,0 access_account_move_reconcile,account.move.reconcile,account.model_account_move_reconcile,portal.group_portal,1,0,0,0 access_account_fiscalyear,account.sequence.fiscalyear,account.model_account_sequence_fiscalyear,portal.group_portal,1,0,0,0 -access_sale_shop,sale.shop,sale.model_sale_shop,portal.group_portal,1,0,0,0 access_product_list,product.pricelist,product.model_product_pricelist,portal.group_portal,1,0,0,0 access_res_partner,res.partner,base.model_res_partner,portal.group_portal,1,0,0,0 access_account_tax,account.tax,account.model_account_tax,portal.group_portal,1,0,0,0 diff --git a/addons/procurement/procurement_view.xml b/addons/procurement/procurement_view.xml index 76432157555..a196937619f 100644 --- a/addons/procurement/procurement_view.xml +++ b/addons/procurement/procurement_view.xml @@ -256,7 +256,7 @@ <field name="search_view_id" ref="warehouse_orderpoint_search" /> <field name="help" type="html"> <p class="oe_view_nocontent_create"> - Click to add a reordering rules. + Click to add a reordering rule. </p><p>You can define your minimum stock rules, so that OpenERP will automatically create draft manufacturing orders or request for quotations according to the stock level. Once the virtual stock of a product (= stock on hand minus all confirmed orders and reservations) is below the minimum quantity, OpenERP will generate a procurement request to increase the stock up to the maximum quantity.</p> </field> </record> diff --git a/addons/procurement/wizard/make_procurement_view.xml b/addons/procurement/wizard/make_procurement_view.xml index 9228fcc323b..e611e0e2a30 100644 --- a/addons/procurement/wizard/make_procurement_view.xml +++ b/addons/procurement/wizard/make_procurement_view.xml @@ -10,7 +10,7 @@ <field name="arch" type="xml"> <form string="Procurement Request" version="7.0"> <p class="oe_gray"> - Fill is this for to launch a procurement request for this + Use this assistant to generate a procurement request for this product. According to the product configuration, this may trigger a draft purchase order, a manufacturing order or a new task. diff --git a/addons/product/partner.py b/addons/product/partner.py index fbfee76d0b2..d6b615ed88a 100644 --- a/addons/product/partner.py +++ b/addons/product/partner.py @@ -27,12 +27,10 @@ class res_partner(osv.osv): _inherit = 'res.partner' _columns = { 'property_product_pricelist': fields.property( - 'product.pricelist', type='many2one', relation='product.pricelist', domain=[('type','=','sale')], string="Sale Pricelist", - view_load=True, help="This pricelist will be used, instead of the default one, for sales to the current partner"), } diff --git a/addons/product/partner_view.xml b/addons/product/partner_view.xml index 5117da6044e..95332cf0f32 100644 --- a/addons/product/partner_view.xml +++ b/addons/product/partner_view.xml @@ -8,8 +8,8 @@ <field name="arch" type="xml"> <page string="Sales & Purchases" position="inside"> <group> - <group name="pricelists" groups="product.group_sale_pricelist" attrs="{'invisible': [('is_company','=',False),('parent_id','!=',False)]}"> - <field name="property_product_pricelist"/> + <group name="pricelists" attrs="{'invisible': [('is_company','=',False),('parent_id','!=',False)]}"> + <field name="property_product_pricelist" groups="product.group_sale_pricelist"/> </group> <div name="parent_pricelists" groups="product.group_sale_pricelist" attrs="{'invisible': ['|',('is_company','=',True),('parent_id','=',False)]}"> <p>Pricelists are managed on <button name="open_commercial_entity" type="object" string="the parent company" class="oe_link"/></p> diff --git a/addons/product/product.py b/addons/product/product.py index 656812bebbb..6e1128985aa 100644 --- a/addons/product/product.py +++ b/addons/product/product.py @@ -321,7 +321,7 @@ class product_template(osv.osv): 'uom_id': fields.many2one('product.uom', 'Unit of Measure', required=True, help="Default Unit of Measure used for all stock operation."), 'uom_po_id': fields.many2one('product.uom', 'Purchase Unit of Measure', required=True, help="Default Unit of Measure used for purchase orders. It must be in the same category than the default unit of measure."), 'uos_id' : fields.many2one('product.uom', 'Unit of Sale', - help='Sepcify a unit of measure here if invoicing is made in another unit of measure than inventory. Keep empty to use the default unit of measure.'), + help='Specify a unit of measure here if invoicing is made in another unit of measure than inventory. Keep empty to use the default unit of measure.'), 'uos_coeff': fields.float('Unit of Measure -> UOS Coeff', digits_compute= dp.get_precision('Product UoS'), help='Coefficient to convert default Unit of Measure to Unit of Sale\n' ' uos = uom * coeff'), diff --git a/addons/product/product_data.xml b/addons/product/product_data.xml index 49362e380f4..91d78722d14 100644 --- a/addons/product/product_data.xml +++ b/addons/product/product_data.xml @@ -5,7 +5,7 @@ Resource: product.uom.categ --> <record id="product_category_all" model="product.category"> - <field name="name">All products</field> + <field name="name">All</field> </record> <record id="product_category_1" model="product.category"> <field name="parent_id" ref="product_category_all"/> diff --git a/addons/product/report/product_label.xsl b/addons/product/report/product_label.xsl index 5dbb2d64a28..30fe282b0c9 100644 --- a/addons/product/report/product_label.xsl +++ b/addons/product/report/product_label.xsl @@ -60,6 +60,8 @@ </xsl:if> </xsl:template> + <xsl:param name="pmaxChars" as="xs:integer" select="80"/> + <xsl:template match="lot-line" mode="story"> <blockTable style="mytable" colWidths="2.8cm,5.4cm"> <tr> @@ -75,7 +77,7 @@ <barCode><xsl:value-of select="ean13" /></barCode> </td> <td> - <para style="nospace"><xsl:value-of select="product"/></para><xsl:text>, </xsl:text> + <para style="nospace"><xsl:value-of select="substring(product, 1, pmaxChars)"/></para><xsl:text>, </xsl:text> <para style="nospace"><xsl:value-of select="variant"/></para> </td> </tr> diff --git a/addons/product_visible_discount/product_visible_discount.py b/addons/product_visible_discount/product_visible_discount.py index 4f8a7b0b9cc..a2f0a41847f 100644 --- a/addons/product_visible_discount/product_visible_discount.py +++ b/addons/product_visible_discount/product_visible_discount.py @@ -98,10 +98,10 @@ class sale_order_line(osv.osv): class account_invoice_line(osv.osv): _inherit = "account.invoice.line" - def product_id_change(self, cr, uid, ids, product, uom, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, context=None, company_id=None): - res = super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom, qty, name, type, partner_id, fposition_id, price_unit,currency_id, context=context, company_id=company_id) + def product_id_change(self, cr, uid, ids, product, uom_id, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, context=None, company_id=None): + res = super(account_invoice_line, self).product_id_change(cr, uid, ids, product, uom_id, qty, name, type, partner_id, fposition_id, price_unit,currency_id, context=context, company_id=company_id) - def get_real_price(res_dict, product_id, qty, uom, pricelist): + def get_real_price(res_dict, product_id, qty, uom_id, pricelist): item_obj = self.pool.get('product.pricelist.item') price_type_obj = self.pool.get('product.price.type') product_obj = self.pool.get('product.product') @@ -119,7 +119,7 @@ class account_invoice_line(osv.osv): product_read = product_obj.read(cr, uid, product_id, [field_name], context=context) factor = 1.0 - if uom and uom != product.uom_id.id: + if uom_id and uom_id != product.uom_id.id: product_uom_obj = self.pool.get('product.uom') uom_data = product_uom_obj.browse(cr, uid, product.uom_id.id) factor = uom_data.factor @@ -137,18 +137,18 @@ class account_invoice_line(osv.osv): pricelist =partner_obj.browse(cr, uid, partner_id).property_product_pricelist_purchase.id if not pricelist: raise osv.except_osv(_('No Purchase Pricelist Found!'),_("You must first define a pricelist on the supplier form!")) - price_unit_res = pricelist_obj.price_get(cr, uid, [pricelist], product.id, qty or 1.0, partner_id, {'uom': uom}) + price_unit_res = pricelist_obj.price_get(cr, uid, [pricelist], product.id, qty or 1.0, partner_id, {'uom': uom_id}) price_unit = price_unit_res[pricelist] - real_price = get_real_price(price_unit_res, product.id, qty, uom, pricelist) + real_price = get_real_price(price_unit_res, product.id, qty, uom_id, pricelist) else: if partner_id: pricelist = partner_obj.browse(cr, uid, partner_id).property_product_pricelist.id if not pricelist: raise osv.except_osv(_('No Sale Pricelist Found!'),_("You must first define a pricelist on the customer form!")) - price_unit_res = pricelist_obj.price_get(cr, uid, [pricelist], product.id, qty or 1.0, partner_id, {'uom': uom}) + price_unit_res = pricelist_obj.price_get(cr, uid, [pricelist], product.id, qty or 1.0, partner_id, {'uom': uom_id}) price_unit = price_unit_res[pricelist] - real_price = get_real_price(price_unit_res, product.id, qty, uom, pricelist) + real_price = get_real_price(price_unit_res, product.id, qty, uom_id, pricelist) if pricelist: pricelists=pricelist_obj.read(cr,uid,[pricelist],['visible_discount']) if(len(pricelists)>0 and pricelists[0]['visible_discount'] and real_price != 0): diff --git a/addons/project/project.py b/addons/project/project.py index 28e4bd6e5d2..cadc4d8afb8 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -182,10 +182,10 @@ class project(osv.osv): _('You cannot delete a project containing tasks. You can either delete all the project\'s tasks and then delete the project or simply deactivate the project.')) elif proj.alias_id: alias_ids.append(proj.alias_id.id) - res = super(project, self).unlink(cr, uid, ids, context=context) + res = super(project, self).unlink(cr, uid, ids, context=context) mail_alias.unlink(cr, uid, alias_ids, context=context) return res - + def _get_attached_docs(self, cr, uid, ids, field_name, arg, context): res = {} attachment = self.pool.get('ir.attachment') @@ -196,7 +196,7 @@ class project(osv.osv): task_attachments = attachment.search(cr, uid, [('res_model', '=', 'project.task'), ('res_id', 'in', task_ids)], context=context, count=True) res[id] = (project_attachments or 0) + (task_attachments or 0) return res - + def _task_count(self, cr, uid, ids, field_name, arg, context=None): if context is None: context = {} @@ -209,22 +209,21 @@ class project(osv.osv): return res def _get_alias_models(self, cr, uid, context=None): - """Overriden in project_issue to offer more options""" + """ Overriden in project_issue to offer more options """ return [('project.task', "Tasks")] def _get_visibility_selection(self, cr, uid, context=None): """ Overriden in portal_project to offer more options """ - return [('public', 'Public'), - ('employees', 'Employees Only'), - ('followers', 'Followers Only')] + return [('public', 'Public project'), + ('employees', 'Internal project: all employees can access'), + ('followers', 'Private project: followers Only')] def attachment_tree_view(self, cr, uid, ids, context): task_ids = self.pool.get('project.task').search(cr, uid, [('project_id', 'in', ids)]) domain = [ - '|', + '|', '&', ('res_model', '=', 'project.project'), ('res_id', 'in', ids), - '&', ('res_model', '=', 'project.task'), ('res_id', 'in', task_ids) - ] + '&', ('res_model', '=', 'project.task'), ('res_id', 'in', task_ids)] res_id = ids and ids[0] or False return { 'name': _('Attachments'), @@ -237,6 +236,7 @@ class project(osv.osv): 'limit': 80, 'context': "{'default_res_model': '%s','default_res_id': %d}" % (self._name, res_id) } + # Lambda indirection method to avoid passing a copy of the overridable method when declaring the field _alias_models = lambda self, *args, **kwargs: self._get_alias_models(*args, **kwargs) _visibility_selection = lambda self, *args, **kwargs: self._get_visibility_selection(*args, **kwargs) @@ -370,13 +370,11 @@ class project(osv.osv): default['state'] = 'open' default['line_ids'] = [] default['tasks'] = [] - default.pop('alias_name', None) - default.pop('alias_id', None) proj = self.browse(cr, uid, id, context=context) if not default.get('name', False): default.update(name=_("%s (copy)") % (proj.name)) res = super(project, self).copy(cr, uid, id, default, context) - self.map_tasks(cr,uid,id,res,context) + self.map_tasks(cr, uid, id, res, context=context) return res def duplicate_template(self, cr, uid, ids, context=None): @@ -527,7 +525,7 @@ def Project(): for project in projects: project_gantt = getattr(projects_gantt, 'Project_%d' % (project.id,)) for task in project.tasks: - if task.state in ('done','cancelled'): + if task.state in ('done', 'cancelled'): continue p = getattr(project_gantt, 'Task_%d' % (task.id,)) @@ -547,23 +545,18 @@ def Project(): # ------------------------------------------------ def create(self, cr, uid, vals, context=None): - if context is None: context = {} - # Prevent double project creation when 'use_tasks' is checked! - context = dict(context, project_creation_in_progress=True) - mail_alias = self.pool.get('mail.alias') - if not vals.get('alias_id') and vals.get('name', False): - alias_name = vals.pop('alias_name', None) # prevent errors during copy() - alias_id = mail_alias.create_unique_alias(cr, uid, - # Using '+' allows using subaddressing for those who don't - # have a catchall domain setup. - {'alias_name': alias_name or "project+"+short_name(vals['name'])}, - model_name=vals.get('alias_model', 'project.task'), - context=context) - vals['alias_id'] = alias_id - if vals.get('type', False) not in ('template','contract'): + if context is None: + context = {} + # Prevent double project creation when 'use_tasks' is checked + alias management + create_context = dict(context, project_creation_in_progress=True, + alias_model_name=vals.get('alias_model', 'project.task'), alias_parent_model_name=self._name) + + if vals.get('type', False) not in ('template', 'contract'): vals['type'] = 'contract' - project_id = super(project, self).create(cr, uid, vals, context) - mail_alias.write(cr, uid, [vals['alias_id']], {'alias_defaults': {'project_id': project_id} }, context) + + project_id = super(project, self).create(cr, uid, vals, context=create_context) + project_rec = self.browse(cr, uid, project_id, context=context) + self.pool.get('mail.alias').write(cr, uid, [project_rec.alias_id.id], {'alias_parent_thread_id': project_id, 'alias_defaults': {'project_id': project_id}}, context) return project_id def write(self, cr, uid, ids, vals, context=None): diff --git a/addons/project/project_demo.xml b/addons/project/project_demo.xml index b7dcc2bdb83..b7e1524c2c8 100644 --- a/addons/project/project_demo.xml +++ b/addons/project/project_demo.xml @@ -46,9 +46,12 @@ <record id="project_project_2" model="project.project"> <field name="name">Research & Development</field> <field name="parent_id" ref="all_projects_account"/> - <field name="privacy_visibility">public</field> + <field name="privacy_visibility">followers</field> <field name="user_id" ref="base.user_demo"/> <field name="alias_model">project.task</field> + <field name="message_follower_ids" eval="[(6, 0, [ + ref('base.user_root'), + ref('base.user_demo')])]"/> </record> <!-- We assign after so that default values applies --> @@ -75,6 +78,7 @@ <field name="parent_id" ref="all_projects_account"/> <field name="name">Website Design Templates</field> <field name="user_id" ref="base.user_root"/> + <field name="privacy_visibility">followers</field> <field name="alias_model">project.task</field> <field name="privacy_visibility">employees</field> <field name="members" eval="[(4, ref('base.user_root')), (4,ref('base.user_demo'))]"/> diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml index eb042e5f0c7..33842a9a19c 100644 --- a/addons/project/project_view.xml +++ b/addons/project/project_view.xml @@ -32,6 +32,7 @@ <separator/> <filter string="Deadlines" context="{'deadline_visible': False}" domain="[('date_deadline','<>',False)]" help="Show only tasks having a deadline" icon="terp-gnome-cpu-frequency-applet+"/> + <field name="partner_id"/> <field name="project_id"/> <field name="user_id"/> <group expand="0" string="Group By..."> @@ -89,17 +90,6 @@ <h1> <field name="name" string="Project Name"/> </h1> - <div name="group_alias" - attrs="{'invisible': [('alias_domain', '=', False)]}"> - <label for="alias_id" string="Email Alias"/> - <field name="alias_id" class="oe_inline oe_read_only" required="0" nolabel="1"/> - <span name="edit_alias" class="oe_edit_only"> - <field name="alias_name" class="oe_inline" - attrs="{'required': [('alias_id', '!=', False)]}"/> - @ - <field name="alias_domain" class="oe_inline" readonly="1"/> - </span> - </div> <div name="options_active"> <field name="use_tasks" class="oe_inline"/> <label for="use_tasks"/> @@ -112,17 +102,31 @@ </div> <group> <group> - <field name="privacy_visibility"/> <field name="user_id" string="Project Manager" - attrs="{'readonly':[('state','in',['close', 'cancelled'])]}" - context="{'default_groups_ref': ['base.group_user', 'project.group_project_manager']}"/> - </group> - <group> + attrs="{'readonly':[('state','in',['close', 'cancelled'])]}" + context="{'default_groups_ref': ['base.group_user', 'project.group_project_manager']}"/> <field name="partner_id" on_change="onchange_partner_id(partner_id)"/> - <p colspan="2" attrs="{'invisible': [('analytic_account_id','=',False)]}"> - To invoice or setup invoicing and renewal options, go to the related contract: <field name="analytic_account_id" readonly="1" required="0" class="oe_inline"/>. + <span></span> + <p attrs="{'invisible': [('analytic_account_id','=',False)]}"> + To invoice or setup invoicing and renewal options, go to the related contract: + <field name="analytic_account_id" readonly="1" required="0" class="oe_inline" nolabel="1"/>. </p> </group> + <group name="group_alias" + attrs="{'invisible': [('alias_domain', '=', False)]}"> + <label for="alias_name" string="Email Alias"/> + <div name="alias_def"> + <field name="alias_id" class="oe_read_only oe_inline" + string="Email Alias" required="0"/> + <div class="oe_edit_only oe_inline" name="edit_alias" style="display: inline;" > + <field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/> + </div> + </div> + <label for="alias_model" string="Incoming Emails create"/> + <field name="alias_model" class="oe_inline" nolabel="1"/> + <field name="alias_contact" class="oe_inline" + string="Accept Emails From"/> + </group> </group> <notebook> <page string="Team" name="team"> @@ -145,20 +149,22 @@ </field> </page> <page string="Other Info"> - <group> - <group string="Administration" groups="project.group_time_work_estimation_tasks"> - <field name="planned_hours" widget="float_time"/> - <field name="effective_hours" widget="float_time"/> - <field name="resource_calendar_id"/> - </group> - <group string="Miscellaneous" name="misc"> - <field name="date_start"/> - <field name="date" string="End Date"/> - <field name="priority" groups="base.group_no_one"/> - <field name="active" attrs="{'invisible':[('state','in',['open', 'pending', 'template'])]}"/> - <field name="currency_id" groups="base.group_multi_currency" required="1"/> - <field name="parent_id" string="Parent" help="Append this project to another one using analytic accounts hierarchy" domain="[('id','!=',analytic_account_id)]" context="{'current_model': 'project.project'}" /> - </group> + <group string="Administration"> + <field name="privacy_visibility" widget="radio"/> + <field name="planned_hours" widget="float_time" + groups="project.group_time_work_estimation_tasks"/> + <field name="effective_hours" widget="float_time" + groups="project.group_time_work_estimation_tasks"/> + <field name="resource_calendar_id" + groups="project.group_time_work_estimation_tasks"/> + </group> + <group string="Miscellaneous" name="misc"> + <field name="date_start"/> + <field name="date" string="End Date"/> + <field name="priority" groups="base.group_no_one"/> + <field name="active" attrs="{'invisible':[('state','in',['open', 'pending', 'template'])]}"/> + <field name="currency_id" groups="base.group_multi_currency" required="1"/> + <field name="parent_id" string="Parent" help="Append this project to another one using analytic accounts hierarchy" domain="[('id','!=',analytic_account_id)]" context="{'current_model': 'project.project'}" /> </group> </page> <page string="Project Stages" attrs="{'invisible': [('use_tasks', '=', False)]}" name="project_stages"> @@ -252,7 +258,7 @@ <div class="oe_kanban_content"> <h4><field name="name"/></h4> <div class="oe_kanban_alias" t-if="record.alias_id.value"> - <span class="oe_e">%%</span><small><field name="alias_id"/></small> + <span class="oe_e oe_e_alias">%%</span><small><field name="alias_id"/></small> </div> <div class="oe_kanban_project_list"> <a t-if="record.use_tasks.raw_value" name="%(act_project_project_2_project_task_all)d" type="action" style="margin-right: 10px"> diff --git a/addons/project/res_partner.py b/addons/project/res_partner.py index e4ca63d79d8..e49cacf4f89 100644 --- a/addons/project/res_partner.py +++ b/addons/project/res_partner.py @@ -29,6 +29,14 @@ class res_partner(osv.osv): 'task_ids': fields.one2many('project.task', 'partner_id', 'Tasks'), } + def copy(self, cr, uid, record_id, default=None, context=None): + if default is None: + default = {} + + default['task_ids'] = [] + return super(res_partner, self).copy( + cr, uid, record_id, default=default, context=context) + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/project/res_partner_view.xml b/addons/project/res_partner_view.xml index d668e3c7092..f12189b5163 100644 --- a/addons/project/res_partner_view.xml +++ b/addons/project/res_partner_view.xml @@ -4,28 +4,20 @@ <!-- Partners inherited form --> <record id="view_task_partner_info_form" model="ir.ui.view"> - <field name="name">res.partner.task.info.inherit</field> + <field name="name">res.partner.task.buttons</field> <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_partner_form"/> + <field name="priority" eval="50"/> <field name="arch" type="xml"> - <xpath expr="//page[@name='page_history']" position="attributes"> - <attribute name="invisible">False</attribute> - </xpath> - <xpath expr="//page[@name='page_history']" position="inside"> - <group name="grp_task" string="Tasks"> - <field name="task_ids" colspan="4" nolabel="1"> - <tree string="Tasks" editable="bottom"> - <field name="name"/> - <field name="user_id"/> - <field name="date_deadline"/> - <field name="state" invisible="1"/> - <button name="do_open" states="pending,draft,done,cancelled" string="Start Task" type="object" icon="gtk-media-play" help="For changing to open state" invisible="context.get('set_visible',False)"/> - <button name="action_close" states="draft,pending,open" string="Done" type="object" icon="terp-dialog-close" help="For changing to done state"/> - </tree> - </field> - </group> + <xpath expr="//div[@name='buttons']" position="inside"> + <button class="oe_inline" type="action" + name="%(action_view_task)d" + string="Tasks" + context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}" + groups="project.group_project_user" /> </xpath> </field> </record> + </data> </openerp> diff --git a/addons/project_issue/project_issue.py b/addons/project_issue/project_issue.py index 8bcac4581c3..33e4fcb409c 100644 --- a/addons/project_issue/project_issue.py +++ b/addons/project_issue/project_issue.py @@ -653,6 +653,14 @@ class project_project(osv.Model): elif vals.get('use_issues') and not vals.get('use_tasks'): vals['alias_model'] = 'project.issue' + def on_change_use_tasks_or_issues(self, cr, uid, ids, use_tasks, use_issues, context=None): + values = {} + if use_tasks and not use_issues: + values['alias_model'] = 'project.task' + elif not use_tasks and use_issues: + values['alias_model'] = 'project.issues' + return {'value': values} + def create(self, cr, uid, vals, context=None): self._check_create_write_values(cr, uid, vals, context=context) return super(project_project, self).create(cr, uid, vals, context=context) diff --git a/addons/project_issue/project_issue_view.xml b/addons/project_issue/project_issue_view.xml index 46caba0021e..da3034c72f5 100644 --- a/addons/project_issue/project_issue_view.xml +++ b/addons/project_issue/project_issue_view.xml @@ -283,22 +283,6 @@ </field> </record> - <record id="view_project_feature_filter" model="ir.ui.view"> - <field name="name">Project Issue - Feature Tracker Search</field> - <field name="model">project.issue</field> - <field name="arch" type="xml"> - <search string="Feature Tracker Search"> - <field name="name" string="Feature description"/> - <field name="date"/> - <field name="state" groups="base.group_no_one"/> - <filter icon="terp-check" domain="[('state','in',('open','draft'))]" help="Current Features" name="current_feature"/> - <filter icon="terp-camera_test" domain="[('state','=','open')]" help="Open Features"/> - <field name="user_id"/> - <field name="project_id" string="Project"/> - </search> - </field> - </record> - <record id="act_project_project_2_project_issue_all" model="ir.actions.act_window"> <field name="res_model">project.issue</field> <field name="view_type">form</field> @@ -325,7 +309,8 @@ <field name="inherit_id" ref="project.edit_project"/> <field name="arch" type="xml"> <xpath expr='//div[@name="options_active"]' position='inside'> - <field name="use_issues" class="oe_inline"/> + <field name="use_issues" class="oe_inline" + on_change="on_change_use_tasks_or_issues(use_tasks, use_issues)"/> <label for="use_issues"/> </xpath> <xpath expr='//div[@name="buttons"]' position='inside'> @@ -334,21 +319,12 @@ <xpath expr='//page[@name="project_stages"]' position="attributes"> <attribute name="attrs">{'invisible': [('use_tasks', '=', False),('use_issues','=',False)]}</attribute> </xpath> + <xpath expr='//field[@name="use_tasks"]' position="attributes"> + <attribute name="attrs">{'on_change': 'on_change_use_tasks_or_issues(use_tasks, use_issues)'}</attribute> + </xpath> <field name="priority" position="before"> <field name="project_escalation_id"/> </field> - <xpath expr='//span[@name="edit_alias"]' position='replace'> - <span class="oe_edit_only" name="edit_alias"> - <field name="alias_name" class="oe_inline" attrs="{'required': [('alias_id', '!=', False)]}"/> - @ - <field class="oe_inline" name="alias_domain"/> - <span class="oe_inline" - attrs="{'invisible': ['|', ('use_issues', '!=', True), ('use_tasks', '!=', True)]}"> - <label for="alias_model" string="creates"/> - <field name="alias_model" class="oe_inline"/> - </span> - </span> - </xpath> </field> </record> @@ -384,16 +360,33 @@ </field> </record> + <record id="action_view_issues" model="ir.actions.act_window"> + <field name="res_model">project.issue</field> + <field name="view_type">form</field> + <field name="name">Issues</field> + <field name="view_mode">kanban,tree,form,calendar,graph</field> + <field name="help" type="html"> + <p> + The OpenERP issues tacker allows you to efficiantly manage things + like internal requests, software development bugs, customer + complaints, project troubles, material breakdowns, etc. + </p> + </field> + </record> + <!-- res.partner --> <record model="ir.ui.view" id="res_partner_issues_button_view"> <field name="name">res.partner.issues.button.view</field> <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_partner_form" /> - <field name="priority" eval="10"/> + <field name="priority" eval="50"/> <field name="arch" type="xml"> <xpath expr="//div[@name='buttons']" position="inside"> - <button type="action" string="Issues" attrs="{'invisible': [('customer', '=', False)]}" - name="%(act_project_project_2_project_issue_all)d" context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}" groups="project.group_project_user"/> + <button class="oe_inline" type="action" string="Issues" + attrs="{'invisible': [('customer', '=', False)]}" + name="%(action_view_issues)d" + context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}" + groups="project.group_project_user"/> </xpath> </field> </record> diff --git a/addons/purchase/partner.py b/addons/purchase/partner.py index 5e5af0815e3..52c5d798eeb 100644 --- a/addons/purchase/partner.py +++ b/addons/purchase/partner.py @@ -48,12 +48,10 @@ class res_partner(osv.osv): _columns = { 'property_product_pricelist_purchase': fields.property( - 'product.pricelist', type='many2one', relation='product.pricelist', domain=[('type','=','purchase')], string="Purchase Pricelist", - view_load=True, help="This pricelist will be used, instead of the default one, for purchases from the current partner"), 'purchase_order_count': fields.function(_purchase_order_count, string='# of Purchase Order', type='integer'), 'purchase_order_ids': fields.one2many('purchase.order','partner_id','Purchase Order') diff --git a/addons/purchase/partner_view.xml b/addons/purchase/partner_view.xml index 7b03861759a..25aeb3d8119 100644 --- a/addons/purchase/partner_view.xml +++ b/addons/purchase/partner_view.xml @@ -8,7 +8,7 @@ <field name="priority">36</field> <field name="arch" type="xml"> <field name="property_product_pricelist" position="after"> - <field name="property_product_pricelist_purchase" /> + <field name="property_product_pricelist_purchase" groups="product.group_purchase_pricelist"/> </field> </field> </record> diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 849e558563a..707012fc063 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -186,7 +186,7 @@ class purchase_order(osv.osv): 'warehouse_id': fields.many2one('stock.warehouse', 'Destination Warehouse'), 'location_id': fields.many2one('stock.location', 'Destination', required=True, domain=[('usage','<>','view')], states={'confirmed':[('readonly',True)], 'approved':[('readonly',True)],'done':[('readonly',True)]} ), 'pricelist_id':fields.many2one('product.pricelist', 'Pricelist', required=True, states={'confirmed':[('readonly',True)], 'approved':[('readonly',True)],'done':[('readonly',True)]}, help="The pricelist sets the currency used for this purchase order. It also computes the supplier price for the selected products/quantities."), - 'currency_id': fields.related('pricelist_id', 'currency_id', type="many2one", relation="res.currency", string="Currency",readonly=True, required=True), + 'currency_id': fields.many2one('res.currency','Currency', readonly=True, required=True,states={'draft': [('readonly', False)],'sent': [('readonly', False)]}), 'state': fields.selection(STATE_SELECTION, 'Status', readonly=True, help="The status of the purchase order or the quotation request. A quotation is a purchase order in a 'Draft' status. Then the order has to be confirmed by the user, the status switch to 'Confirmed'. Then the supplier must confirm the order to change the status to 'Approved'. When the purchase order is paid and received, the status becomes 'Done'. If a cancel action occurs in the invoice or in the reception of goods, the status becomes in exception.", select=True), 'order_line': fields.one2many('purchase.order.line', 'order_id', 'Order Lines', states={'approved':[('readonly',True)],'done':[('readonly',True)]}), 'validator' : fields.many2one('res.users', 'Validated by', readonly=True), @@ -237,6 +237,7 @@ class purchase_order(osv.osv): 'pricelist_id': lambda self, cr, uid, context: context.get('partner_id', False) and self.pool.get('res.partner').browse(cr, uid, context['partner_id']).property_product_pricelist_purchase.id, 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'purchase.order', context=c), 'journal_id': _get_journal, + 'currency_id': lambda self, cr, uid, context: self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.currency_id.id } _sql_constraints = [ ('name_uniq', 'unique(name, company_id)', 'Order Reference must be unique per Company!'), @@ -467,6 +468,20 @@ class purchase_order(osv.osv): self.write(cr, uid, [id], {'state' : 'confirmed', 'validator' : uid}) return True + def _choose_account_from_po_line(self, cr, uid, po_line, context=None): + fiscal_obj = self.pool.get('account.fiscal.position') + property_obj = self.pool.get('ir.property') + if po_line.product_id: + acc_id = po_line.product_id.property_account_expense.id + if not acc_id: + acc_id = po_line.product_id.categ_id.property_account_expense_categ.id + if not acc_id: + raise osv.except_osv(_('Error!'), _('Define expense account for this company: "%s" (id:%d).') % (po_line.product_id.name, po_line.product_id.id,)) + else: + acc_id = property_obj.get(cr, uid, 'property_account_expense_categ', 'product.category').id + fpos = po_line.order_id.fiscal_position or False + return fiscal_obj.map_account(cr, uid, fpos, acc_id) + def _prepare_inv_line(self, cr, uid, account_id, order_line, context=None): """Collects require data from purchase order line that is used to create invoice line for that purchase order line @@ -484,6 +499,7 @@ class purchase_order(osv.osv): 'uos_id': order_line.product_uom.id or False, 'invoice_line_tax_id': [(6, 0, [x.id for x in order_line.taxes_id])], 'account_analytic_id': order_line.account_analytic_id.id or False, + 'purchase_line_id': order_line.id, } def action_cancel_draft(self, cr, uid, ids, context=None): @@ -507,8 +523,6 @@ class purchase_order(osv.osv): journal_obj = self.pool.get('account.journal') inv_obj = self.pool.get('account.invoice') inv_line_obj = self.pool.get('account.invoice.line') - fiscal_obj = self.pool.get('account.fiscal.position') - property_obj = self.pool.get('ir.property') for order in self.browse(cr, uid, ids, context=context): pay_acc_id = order.partner_id.property_account_payable.id @@ -520,17 +534,7 @@ class purchase_order(osv.osv): # generate invoice line correspond to PO line and link that to created invoice (inv_id) and PO line inv_lines = [] for po_line in order.order_line: - if po_line.product_id: - acc_id = po_line.product_id.property_account_expense.id - if not acc_id: - acc_id = po_line.product_id.categ_id.property_account_expense_categ.id - if not acc_id: - raise osv.except_osv(_('Error!'), _('Define expense account for this company: "%s" (id:%d).') % (po_line.product_id.name, po_line.product_id.id,)) - else: - acc_id = property_obj.get(cr, uid, 'property_account_expense_categ', 'product.category').id - fpos = order.fiscal_position or False - acc_id = fiscal_obj.map_account(cr, uid, fpos, acc_id) - + acc_id = self._choose_account_from_po_line(cr, uid, po_line, context=context) inv_line_data = self._prepare_inv_line(cr, uid, acc_id, po_line, context=context) inv_line_id = inv_line_obj.create(cr, uid, inv_line_data, context=context) inv_lines.append(inv_line_id) @@ -544,7 +548,7 @@ class purchase_order(osv.osv): 'account_id': pay_acc_id, 'type': 'in_invoice', 'partner_id': order.partner_id.id, - 'currency_id': order.pricelist_id.currency_id.id, + 'currency_id': order.currency_id.id, 'journal_id': len(journal_ids) and journal_ids[0] or False, 'invoice_line': [(6, 0, inv_lines)], 'origin': order.name, @@ -632,6 +636,7 @@ class purchase_order(osv.osv): } def _prepare_order_line_move(self, cr, uid, order, order_line, picking_id, context=None): + ''' prepare the stock move data from the PO line ''' return { 'name': order_line.name or '', 'product_id': order_line.product_id.id, @@ -868,7 +873,7 @@ class purchase_order_line(osv.osv): 'invoice_lines': fields.many2many('account.invoice.line', 'purchase_order_line_invoice_rel', 'order_line_id', 'invoice_id', 'Invoice Lines', readonly=True), 'invoiced': fields.boolean('Invoiced', readonly=True), 'partner_id': fields.related('order_id','partner_id',string='Partner',readonly=True,type="many2one", relation="res.partner", store=True), - 'date_order': fields.related('order_id','date_order',string='Order Date',readonly=True,type="date") + 'date_order': fields.related('order_id','date_order',string='Order Date',readonly=True,type="date"), } _defaults = { @@ -1245,5 +1250,13 @@ class account_invoice(osv.Model): purchase_order_obj.message_post(cr, uid, po_ids, body=_("Invoice paid"), context=context) return res +class account_invoice_line(osv.Model): + """ Override account_invoice_line to add the link to the purchase order line it is related to""" + _inherit = 'account.invoice.line' + _columns = { + 'purchase_line_id': fields.many2one('purchase.order.line', + 'Purchase Order Line', ondelete='set null', select=True, + readonly=True), + } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml index 4432d2b3200..91fb2525be6 100644 --- a/addons/purchase/purchase_view.xml +++ b/addons/purchase/purchase_view.xml @@ -191,7 +191,7 @@ <field name="partner_id" on_change="onchange_partner_id(partner_id)" context="{'search_default_supplier':1,'default_supplier':1,'default_customer':0}" domain="[('supplier','=',True)]"/> <field name="partner_ref"/> <field domain="[('type','=','purchase')]" name="pricelist_id" groups="product.group_purchase_pricelist" on_change="onchange_pricelist(pricelist_id, context)"/> - <field name="currency_id" invisible='1'/> + <field name="currency_id" groups="base.group_multi_currency"/> <field name="journal_id" invisible='1'/> </group> <group> diff --git a/addons/purchase/stock.py b/addons/purchase/stock.py index e64c12a2359..be4169c4624 100644 --- a/addons/purchase/stock.py +++ b/addons/purchase/stock.py @@ -70,7 +70,7 @@ class stock_picking(osv.osv): def get_currency_id(self, cursor, user, picking): if picking.purchase_id: - return picking.purchase_id.pricelist_id.currency_id.id + return picking.purchase_id.currency_id.id else: return super(stock_picking, self).get_currency_id(cursor, user, picking) @@ -129,7 +129,7 @@ class stock_partial_picking(osv.osv_memory): def _product_cost_for_average_update(self, cr, uid, move): if move.picking_id.purchase_id: return {'cost': move.purchase_line_id.price_unit, - 'currency': move.picking_id.purchase_id.pricelist_id.currency_id.id} + 'currency': move.picking_id.purchase_id.currency_id.id} return super(stock_partial_picking, self)._product_cost_for_average_update(cr, uid, move) # Redefinition of the new field in order to update the model stock.picking.in in the orm diff --git a/addons/purchase/stock_view.xml b/addons/purchase/stock_view.xml index 14d1e313e7f..0ba48a63512 100644 --- a/addons/purchase/stock_view.xml +++ b/addons/purchase/stock_view.xml @@ -65,7 +65,9 @@ <field name="context">{"default_type": "in", "contact_display": "partner_address", "search_default_done": 1, "search_default_to_invoice": 1}</field> <field name="search_view_id" ref="stock.view_picking_in_search"/> <field name="help" type="html"> - <p> + <p class="oe_view_nocontent_create"> + Click to create a new incoming shipment. + </p><p> Here you can track all the product receptions of purchase orders where the invoicing is "Based on Incoming Shipments", and for which you have not received a supplier invoice yet. diff --git a/addons/purchase/wizard/purchase_line_invoice.py b/addons/purchase/wizard/purchase_line_invoice.py index f97d82a8456..33df515164b 100644 --- a/addons/purchase/wizard/purchase_line_invoice.py +++ b/addons/purchase/wizard/purchase_line_invoice.py @@ -48,12 +48,11 @@ class purchase_line_invoice(osv.osv_memory): if record_ids: res = False invoices = {} - invoice_obj=self.pool.get('account.invoice') - purchase_line_obj=self.pool.get('purchase.order.line') - property_obj=self.pool.get('ir.property') - account_fiscal_obj=self.pool.get('account.fiscal.position') - invoice_line_obj=self.pool.get('account.invoice.line') - account_jrnl_obj=self.pool.get('account.journal') + invoice_obj = self.pool.get('account.invoice') + purchase_obj = self.pool.get('purchase.order') + purchase_line_obj = self.pool.get('purchase.order.line') + invoice_line_obj = self.pool.get('account.invoice.line') + account_jrnl_obj = self.pool.get('account.journal') def multiple_order_invoice_notes(orders): notes = "" @@ -83,7 +82,7 @@ class purchase_line_invoice(osv.osv_memory): 'account_id': a, 'partner_id': partner.id, 'invoice_line': [(6,0,lines_ids)], - 'currency_id' : orders[0].pricelist_id.currency_id.id, + 'currency_id' : orders[0].currency_id.id, 'comment': multiple_order_invoice_notes(orders), 'payment_term': orders[0].payment_term_id.id, 'fiscal_position': partner.property_account_position.id @@ -93,35 +92,14 @@ class purchase_line_invoice(osv.osv_memory): order.write({'invoice_ids': [(4, inv_id)]}) return inv_id - for line in purchase_line_obj.browse(cr,uid,record_ids): - if (not line.invoiced) and (line.state not in ('draft','cancel')): + for line in purchase_line_obj.browse(cr, uid, record_ids, context=context): + if (not line.invoiced) and (line.state not in ('draft', 'cancel')): if not line.partner_id.id in invoices: invoices[line.partner_id.id] = [] - if line.product_id: - a = line.product_id.property_account_expense.id - if not a: - a = line.product_id.categ_id.property_account_expense_categ.id - if not a: - raise osv.except_osv(_('Error!'), - _('Define expense account for this product: "%s" (id:%d).') % \ - (line.product_id.name, line.product_id.id,)) - else: - a = property_obj.get(cr, uid, - 'property_account_expense_categ', 'product.category', - context=context).id - fpos = line.order_id.fiscal_position or False - a = account_fiscal_obj.map_account(cr, uid, fpos, a) - inv_id = invoice_line_obj.create(cr, uid, { - 'name': line.name, - 'origin': line.order_id.name, - 'account_id': a, - 'price_unit': line.price_unit, - 'quantity': line.product_qty, - 'uos_id': line.product_uom.id, - 'product_id': line.product_id.id or False, - 'invoice_line_tax_id': [(6, 0, [x.id for x in line.taxes_id])], - 'account_analytic_id': line.account_analytic_id and line.account_analytic_id.id or False, - }) + acc_id = purchase_obj._choose_account_from_po_line(cr, uid, line, context=context) + inv_line_data = purchase_obj._prepare_inv_line(cr, uid, acc_id, line, context=context) + inv_line_data.update({'origin': line.order_id.name}) + inv_id = invoice_line_obj.create(cr, uid, inv_line_data, context=context) purchase_line_obj.write(cr, uid, [line.id], {'invoiced': True, 'invoice_lines': [(4, inv_id)]}) invoices[line.partner_id.id].append((line,inv_id)) diff --git a/addons/report_webkit/ir_report.py b/addons/report_webkit/ir_report.py index cea2b4e8329..5a914cfbcf0 100644 --- a/addons/report_webkit/ir_report.py +++ b/addons/report_webkit/ir_report.py @@ -37,10 +37,10 @@ from webkit_report import WebKitParser class ir_actions_report_xml(orm.Model): _inherit = 'ir.actions.report.xml' _columns = { - 'webkit_header': fields.property('ir.header_webkit', + 'webkit_header': fields.property( type='many2one', relation='ir.header_webkit', string='Webkit Header', help="The header linked to the report", - view_load=True, required=True), + required=True), 'webkit_debug': fields.boolean('Webkit debug', help="Enable the webkit engine debugger"), 'report_webkit_data': fields.text('Webkit Template', diff --git a/addons/report_webkit/webkit_report.py b/addons/report_webkit/webkit_report.py index 5e65afaae25..b66c7ce6f3b 100644 --- a/addons/report_webkit/webkit_report.py +++ b/addons/report_webkit/webkit_report.py @@ -242,8 +242,13 @@ class WebKitParser(report_sxw): def translate_call(self, src): """Translate String.""" ir_translation = self.pool['ir.translation'] + name = self.tmpl and 'addons/' + self.tmpl or None res = ir_translation._get_source(self.parser_instance.cr, self.parser_instance.uid, - None, 'report', self.parser_instance.localcontext.get('lang', 'en_US'), src) + name, 'report', self.parser_instance.localcontext.get('lang', 'en_US'), src) + if res == src: + # no translation defined, fallback on None (backward compatibility) + res = ir_translation._get_source(self.parser_instance.cr, self.parser_instance.uid, + None, 'report', self.parser_instance.localcontext.get('lang', 'en_US'), src) if not res : return src return res diff --git a/addons/resource/resource_view.xml b/addons/resource/resource_view.xml index 58f7789dc07..3c9f83905a9 100644 --- a/addons/resource/resource_view.xml +++ b/addons/resource/resource_view.xml @@ -90,7 +90,11 @@ <field name="view_mode">tree,form</field> <field name="view_id" eval="False"/> <field name="search_view_id" ref="view_resource_calendar_search"/> - <field name="help">Define working hours and time table that could be scheduled to your project members</field> + <field name="help" type="html"> + <p class="oe_view_nocontent_create"> + Define working hours and time table that could be scheduled to your project members + </p> + </field> </record> <record id="view_resource_calendar_attendance_tree" model="ir.ui.view"> diff --git a/addons/sale/report/sale_report.py b/addons/sale/report/sale_report.py index 80143379247..d5f07f863b9 100644 --- a/addons/sale/report/sale_report.py +++ b/addons/sale/report/sale_report.py @@ -40,7 +40,6 @@ class sale_report(osv.osv): 'product_uom_qty': fields.float('# of Qty', readonly=True), 'partner_id': fields.many2one('res.partner', 'Partner', readonly=True), - 'shop_id': fields.many2one('sale.shop', 'Shop', readonly=True), 'company_id': fields.many2one('res.company', 'Company', readonly=True), 'user_id': fields.many2one('res.users', 'Salesperson', readonly=True), 'price_total': fields.float('Total Price', readonly=True), @@ -79,7 +78,6 @@ class sale_report(osv.osv): to_char(s.date_order, 'YYYY-MM-DD') as day, s.partner_id as partner_id, s.user_id as user_id, - s.shop_id as shop_id, s.company_id as company_id, extract(epoch from avg(date_trunc('day',s.date_confirm)-date_trunc('day',s.create_date)))/(24*60*60)::decimal(16,2) as delay, s.state, @@ -103,7 +101,6 @@ class sale_report(osv.osv): s.date_confirm, s.partner_id, s.user_id, - s.shop_id, s.company_id, s.state, s.pricelist_id, diff --git a/addons/sale/report/sale_report_view.xml b/addons/sale/report/sale_report_view.xml index 8f725a9eacb..69e9cc5e119 100644 --- a/addons/sale/report/sale_report_view.xml +++ b/addons/sale/report/sale_report_view.xml @@ -13,7 +13,6 @@ <field name="year" invisible="1"/> <field name="day" invisible="1"/> <field name="month" invisible="1"/> - <field name="shop_id" invisible="1"/> <field name="company_id" invisible="1" groups="base.group_multi_company"/> <field name="partner_id" invisible="1"/> <field name="product_id" invisible="1"/> @@ -58,7 +57,6 @@ <field name="product_id"/> <field name="user_id"/> <group expand="0" string="Extended Filters..."> - <field name="shop_id"/> <field name="categ_id"/> <field name="company_id" groups="base.group_multi_company"/> </group> @@ -70,7 +68,6 @@ <filter string="Category of Product" icon="terp-stock_symbol-selection" name="Category" context="{'group_by':'categ_id'}"/> <filter string="Analytic Account" icon="terp-folder-green" context="{'group_by':'analytic_account_id'}" groups="analytic.group_analytic_accounting"/> <filter string="Status" icon="terp-stock_effects-object-colorize" context="{'group_by':'state'}"/> - <filter string="Shop" icon="terp-go-home" context="{'group_by':'shop_id'}"/> <filter string="Company" icon="terp-go-home" groups="base.group_multi_company" context="{'group_by':'company_id'}"/> <filter string="Day" icon="terp-go-today" context="{'group_by':'day'}" help="Ordered date of the sales order"/> <filter string="Month" name="order_month" icon="terp-go-month" context="{'group_by':'month'}" help="Ordered month of the sales order"/> diff --git a/addons/sale/sale.py b/addons/sale/sale.py index f34137f8231..67c6f82ced3 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -28,21 +28,6 @@ from openerp.tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FO import openerp.addons.decimal_precision as dp from openerp import netsvc -class sale_shop(osv.osv): - _name = "sale.shop" - _description = "Sales Shop" - _columns = { - 'name': fields.char('Shop Name', size=64, required=True), - 'payment_default_id': fields.many2one('account.payment.term', 'Default Payment Term', required=True), - 'pricelist_id': fields.many2one('product.pricelist', 'Pricelist'), - 'project_id': fields.many2one('account.analytic.account', 'Analytic Account', domain=[('parent_id', '!=', False)]), - 'company_id': fields.many2one('res.company', 'Company', required=False), - } - _defaults = { - 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'sale.shop', context=c), - } - - class sale_order(osv.osv): _name = "sale.order" _inherit = ['mail.thread', 'ir.needaction_mixin'] @@ -54,16 +39,6 @@ class sale_order(osv.osv): }, } - def onchange_shop_id(self, cr, uid, ids, shop_id, context=None): - v = {} - if shop_id: - shop = self.pool.get('sale.shop').browse(cr, uid, shop_id, context=context) - if shop.project_id.id: - v['project_id'] = shop.project_id.id - if shop.pricelist_id.id: - v['pricelist_id'] = shop.pricelist_id.id - return {'value': v} - def copy(self, cr, uid, id, default=None, context=None): if not default: default = {} @@ -176,17 +151,15 @@ class sale_order(osv.osv): result[line.order_id.id] = True return result.keys() - def _get_default_shop(self, cr, uid, context=None): - company_id = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.id - shop_ids = self.pool.get('sale.shop').search(cr, uid, [('company_id','=',company_id)], context=context) - if not shop_ids: - raise osv.except_osv(_('Error!'), _('There is no default shop for the current user\'s company!')) - return shop_ids[0] + def _get_default_company(self, cr, uid, context=None): + company_id = self.pool.get('res.users')._get_company(cr, uid, context=context) + if not company_id: + raise osv.except_osv(_('Error!'), _('There is no default company for the current user!')) + return company_id _columns = { 'name': fields.char('Order Reference', size=64, required=True, readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}, select=True), - 'shop_id': fields.many2one('sale.shop', 'Shop', required=True, readonly=True, states={'draft': [('readonly', False)], 'sent': [('readonly', False)]}), 'origin': fields.char('Source Document', size=64, help="Reference of the document that generated this sales order request."), 'client_order_ref': fields.char('Customer Reference', size=64), 'state': fields.selection([ @@ -246,16 +219,16 @@ class sale_order(osv.osv): 'invoice_quantity': fields.selection([('order', 'Ordered Quantities')], 'Invoice on', help="The sales order will automatically create the invoice proposition (draft invoice).", required=True, readonly=True, states={'draft': [('readonly', False)]}), 'payment_term': fields.many2one('account.payment.term', 'Payment Term'), 'fiscal_position': fields.many2one('account.fiscal.position', 'Fiscal Position'), - 'company_id': fields.related('shop_id','company_id',type='many2one',relation='res.company',string='Company',store=True,readonly=True) + 'company_id': fields.many2one('res.company', 'Company'), } _defaults = { 'date_order': fields.date.context_today, 'order_policy': 'manual', + 'company_id': _get_default_company, 'state': 'draft', 'user_id': lambda obj, cr, uid, context: uid, 'name': lambda obj, cr, uid, context: '/', 'invoice_quantity': 'order', - 'shop_id': _get_default_shop, 'partner_invoice_id': lambda self, cr, uid, context: context.get('partner_id', False) and self.pool.get('res.partner').address_get(cr, uid, [context['partner_id']], ['invoice'])['invoice'], 'partner_shipping_id': lambda self, cr, uid, context: context.get('partner_id', False) and self.pool.get('res.partner').address_get(cr, uid, [context['partner_id']], ['delivery'])['delivery'], 'note': lambda self, cr, uid, context: self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.sale_note @@ -697,7 +670,7 @@ class sale_order_line(osv.osv): 'order_id': fields.many2one('sale.order', 'Order Reference', required=True, ondelete='cascade', select=True, readonly=True, states={'draft':[('readonly',False)]}), 'name': fields.text('Description', required=True, readonly=True, states={'draft': [('readonly', False)]}), 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of sales order lines."), - 'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)], change_default=True), + 'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)], change_default=True, readonly=True, states={'draft': [('readonly', False)]}), 'invoice_lines': fields.many2many('account.invoice.line', 'sale_order_line_invoice_rel', 'order_line_id', 'invoice_id', 'Invoice Lines', readonly=True), 'invoiced': fields.function(_fnct_line_invoiced, string='Invoiced', type='boolean', store={ diff --git a/addons/sale/sale_data.xml b/addons/sale/sale_data.xml index fc2287cadc0..443895631a9 100644 --- a/addons/sale/sale_data.xml +++ b/addons/sale/sale_data.xml @@ -19,20 +19,6 @@ <field name="object">sale.order</field> </record> - <!-- Resource: sale.shop --> - <record id="sale_shop_1" model="sale.shop"> - <field name="company_id" ref="base.main_company"/> - <field name="payment_default_id" ref="account.account_payment_term_net"/> - <field name="pricelist_id" ref="product.list0"/> - - <!-- Copy the name of any company. Without demo data this will yield - the main company name, which is correct. With demo data it will - be random, but it does not matter much --> - <field model="res.company" name="name" search="[]" use="name"/> - </record> - - <function eval="('default',False,'shop_id', [('sale.order', False)], sale_shop_1, True, False, False, False, True)" id="sale_default_set" model="ir.values" name="set"/> - <!-- notify all employees of module installation --> <record model="mail.message" id="module_install_notification"> <field name="model">mail.group</field> diff --git a/addons/sale/sale_demo.xml b/addons/sale/sale_demo.xml index eb937199aba..144ea49b75d 100644 --- a/addons/sale/sale_demo.xml +++ b/addons/sale/sale_demo.xml @@ -6,7 +6,6 @@ <field name="partner_id" ref="base.res_partner_2"/> <field name="partner_invoice_id" ref="base.res_partner_2"/> <field name="partner_shipping_id" ref="base.res_partner_2"/> - <field name="shop_id" ref="sale_shop_1"/> <field name="user_id" ref="base.user_demo"/> <field name="pricelist_id" ref="product.list0"/> </record> @@ -45,7 +44,6 @@ <field name="partner_id" ref="base.res_partner_7"/> <field name="partner_invoice_id" ref="base.res_partner_address_13"/> <field name="partner_shipping_id" ref="base.res_partner_address_13"/> - <field name="shop_id" ref="sale_shop_1"/> <field name="user_id" ref="base.user_root"/> <field name="pricelist_id" ref="product.list0"/> <field name="order_policy">manual</field> @@ -75,7 +73,6 @@ <field name="partner_id" ref="base.res_partner_14"/> <field name="partner_invoice_id" ref="base.res_partner_14"/> <field name="partner_shipping_id" ref="base.res_partner_14"/> - <field name="shop_id" ref="sale_shop_1"/> <field name="user_id" ref="base.user_root"/> <field name="pricelist_id" ref="product.list0"/> <field name="order_policy">manual</field> @@ -105,7 +102,6 @@ <field name="partner_id" ref="base.res_partner_15"/> <field name="partner_invoice_id" ref="base.res_partner_address_25"/> <field name="partner_shipping_id" ref="base.res_partner_address_25"/> - <field name="shop_id" ref="sale_shop_1"/> <field name="user_id" ref="base.user_root"/> <field name="pricelist_id" ref="product.list0"/> </record> @@ -154,7 +150,6 @@ <field name="partner_id" ref="base.res_partner_2"/> <field name="partner_invoice_id" ref="base.res_partner_2"/> <field name="partner_shipping_id" ref="base.res_partner_2"/> - <field name="shop_id" ref="sale_shop_1"/> <field name="user_id" ref="base.user_demo"/> <field name="pricelist_id" ref="product.list0"/> </record> @@ -193,7 +188,6 @@ <field name="partner_id" ref="base.res_partner_18"/> <field name="partner_invoice_id" ref="base.res_partner_18"/> <field name="partner_shipping_id" ref="base.res_partner_18"/> - <field name="shop_id" ref="sale_shop_1"/> <field name="user_id" ref="base.user_root"/> <field name="pricelist_id" ref="product.list0"/> </record> @@ -261,7 +255,6 @@ <field name="partner_id" ref="base.res_partner_15"/> <field name="partner_invoice_id" ref="base.res_partner_address_25"/> <field name="partner_shipping_id" ref="base.res_partner_address_25"/> - <field name="shop_id" ref="sale_shop_1"/> <field name="user_id" ref="base.user_demo"/> <field name="pricelist_id" ref="product.list0"/> <field name="order_policy">manual</field> diff --git a/addons/sale/sale_unit_test.xml b/addons/sale/sale_unit_test.xml index 18a59320d9c..8d7d54d9640 100644 --- a/addons/sale/sale_unit_test.xml +++ b/addons/sale/sale_unit_test.xml @@ -3,7 +3,6 @@ <data> <!-- Resource: sale.order --> <record id="test_order_1" model="sale.order"> - <field name="shop_id" ref="sale_shop_1"/> <field model="product.pricelist" name="pricelist_id" search="[]"/> <field name="user_id" ref="base.user_root"/> <field model="res.partner" name="partner_id" search="[]"/> diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml index d8d038eb002..967350a88ac 100644 --- a/addons/sale/sale_view.xml +++ b/addons/sale/sale_view.xml @@ -13,59 +13,6 @@ <menuitem id="base.menu_product" name="Products" parent="base.menu_base_partner" sequence="9"/> - - <record id="view_shop_form" model="ir.ui.view"> - <field name="name">sale.shop</field> - <field name="model">sale.shop</field> - <field name="arch" type="xml"> - <form string="Sales Shop" version="7.0"> - <label for="name" class="oe_edit_only"/> - <h1><field name="name"/></h1> - <group name="shop"> - <group> - <field name="payment_default_id"/> - <field domain="[('type','=','sale')]" name="pricelist_id" groups="product.group_sale_pricelist"/> - </group> - <group> - <field name="project_id" groups="analytic.group_analytic_accounting"/> - <field name="company_id" widget="selection" groups="base.group_multi_company"/> - </group> - </group> - </form> - </field> - </record> - - <record id="view_shop_tree" model="ir.ui.view"> - <field name="name">sale.shop</field> - <field name="model">sale.shop</field> - <field name="arch" type="xml"> - <tree string="Sales Shop"> - <field name="name"/> - <field name="pricelist_id" groups="product.group_sale_pricelist"/> - <field name="project_id" groups="analytic.group_analytic_accounting"/> - </tree> - </field> - </record> - - <record id="action_shop_form" model="ir.actions.act_window"> - <field name="name">Shop</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">sale.shop</field> - <field name="view_type">form</field> - <field name="view_mode">tree,form</field> - <field name="view_id" ref="view_shop_tree"/> - <field name="help" type="html"> - <p class="oe_view_nocontent_create"> - Click to define a new sale shop. - </p><p> - Each quotation or sales order must be linked to a shop. The - shop also defines the warehouse from which the products will be - delivered for each particular sales. - </p> - </field> - </record> - - <record id="view_sale_order_calendar" model="ir.ui.view"> <field name="name">sale.order.calendar</field> <field name="model">sale.order</field> @@ -160,7 +107,6 @@ </group> <group> <field name="date_order"/> - <field name="shop_id" groups="base.group_no_one" on_change="onchange_shop_id(shop_id, context)" widget="selection"/> <field name="client_order_ref"/> <field domain="[('type','=','sale')]" name="pricelist_id" groups="product.group_sale_pricelist" on_change="onchange_pricelist_id(pricelist_id,order_line)"/> <field name="currency_id" invisible="1"/> @@ -178,13 +124,13 @@ <group> <field name="state" invisible="1" /> <field name="product_id" - context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}" + context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'uom':product_uom}" groups="base.group_user" on_change="product_id_change(parent.pricelist_id, product_id, product_uom_qty, product_uom, product_uos_qty, product_uos, name, parent.partner_id, False, True, parent.date_order, False, parent.fiscal_position, False, context)"/> <label for="product_uom_qty"/> <div> <field - context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}" + context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'uom':product_uom}" name="product_uom_qty" class="oe_inline" on_change="product_id_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,product_uos,name,parent.partner_id, False, False, parent.date_order, False, parent.fiscal_position, True, context)"/> <field name="product_uom" groups="product.group_uom" class="oe_inline oe_no_button" @@ -222,12 +168,12 @@ <field name="state" invisible="1"/> <field name="th_weight" invisible="1"/> <field name="product_id" - context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}" + context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'uom':product_uom}" groups="base.group_user" on_change="product_id_change(parent.pricelist_id, product_id, product_uom_qty, product_uom, product_uos_qty, product_uos, name, parent.partner_id, False, True, parent.date_order, False, parent.fiscal_position, False, context)"/> <field name="name"/> <field name="product_uom_qty" - context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}" + context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'uom':product_uom}" on_change="product_id_change(parent.pricelist_id, product_id, product_uom_qty, product_uom, product_uos_qty, product_uos, name, parent.partner_id, False, False, parent.date_order, False, parent.fiscal_position, True, context)"/> <field name="product_uom" on_change="product_uom_change(parent.pricelist_id, product_id, product_uom_qty, product_uom, product_uos_qty, product_uos, name, parent.partner_id, False, False, parent.date_order, context)" diff --git a/addons/sale/security/ir.model.access.csv b/addons/sale/security/ir.model.access.csv index 670c863a022..5fea141bd2b 100644 --- a/addons/sale/security/ir.model.access.csv +++ b/addons/sale/security/ir.model.access.csv @@ -1,5 +1,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_sale_shop,sale.shop,model_sale_shop,base.group_user,1,0,0,0
access_sale_order,sale.order,model_sale_order,base.group_sale_salesman,1,1,1,0
access_sale_order_line,sale.order.line,model_sale_order_line,base.group_sale_salesman,1,1,1,1
access_sale_order_line_accountant,sale.order.line accountant,model_sale_order_line,account.group_account_user,1,1,0,0
@@ -19,7 +18,6 @@ access_res_partner_sale_user,res.partner.sale.user,base.model_res_partner,base.g access_res_partner_sale_manager,res.partner.sale.manager,base.model_res_partner,base.group_sale_manager,1,1,1,0
access_product_template_sale_user,product.template sale use,product.model_product_template,base.group_sale_salesman,1,0,0,0
access_product_product_sale_user,product.product sale use,product.model_product_product,base.group_sale_salesman,1,0,0,0
-access_sale_shop_manager,account.journal sale order.user,model_sale_shop,base.group_sale_manager,1,1,1,1
access_account_fiscalyear_user,account.fiscalyear.user,account.model_account_fiscalyear,base.group_sale_salesman,1,0,0,0
access_account_tax_user,account.tax.user,account.model_account_tax,base.group_sale_salesman,1,0,0,0
access_ir_attachment_sales,ir.attachment.sales,base.model_ir_attachment,base.group_sale_salesman,1,1,1,0
@@ -29,8 +27,6 @@ access_res_partner_bank_type_field_user,res.partner.bank.type.field.user,base.mo access_product_uom_user,product.uom.user,product.model_product_uom,base.group_sale_salesman,1,0,0,0
access_product_pricelist_sale_user,product.pricelist.sale.user,product.model_product_pricelist,base.group_sale_salesman,1,0,0,0
access_account_account_salesman,account_account salesman,account.model_account_account,base.group_sale_salesman,1,0,0,0
-access_sale_shop_sale_user,sale.shop.sale.user,model_sale_shop,base.group_sale_salesman,1,0,0,0
-access_sale_shop_sale_manager,sale.shop.sale.manager,model_sale_shop,base.group_sale_manager,1,1,1,1
access_product_uom_categ_sale_manager,product.uom.categ salemanager,product.model_product_uom_categ,base.group_sale_manager,1,1,1,1
access_product_uom_sale_manager,product.uom salemanager,product.model_product_uom,base.group_sale_manager,1,1,1,1
access_product_ul_sale_manager,product.ul salemanager,product.model_product_ul,base.group_sale_manager,1,1,1,1
diff --git a/addons/sale/security/sale_security.xml b/addons/sale/security/sale_security.xml index 49bd0e8716b..557562275d7 100644 --- a/addons/sale/security/sale_security.xml +++ b/addons/sale/security/sale_security.xml @@ -78,13 +78,6 @@ <field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field> </record> - <record model="ir.rule" id="sale_shop_comp_rule"> - <field name="name">Sale Shop multi-company</field> - <field name="model_id" ref="model_sale_shop"/> - <field name="global" eval="True"/> - <field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field> - </record> - <!-- Multi - Salesmen sales order assignation rules --> <record id="sale_order_personal_rule" model="ir.rule"> diff --git a/addons/sale/wizard/sale_make_invoice_advance.py b/addons/sale/wizard/sale_make_invoice_advance.py index 4cb00245ade..c3f1d6cade4 100644 --- a/addons/sale/wizard/sale_make_invoice_advance.py +++ b/addons/sale/wizard/sale_make_invoice_advance.py @@ -31,7 +31,7 @@ class sale_advance_payment_inv(osv.osv_memory): [('all', 'Invoice the whole sales order'), ('percentage','Percentage'), ('fixed','Fixed price (deposit)'), ('lines', 'Some order lines')], 'What do you want to invoice?', required=True, - help="""Use All to create the final invoice. + help="""Use Invoice the whole sale order to create the final invoice. Use Percentage to invoice a percentage of the total amount. Use Fixed Price to invoice a specific amound in advance. Use Some Order Lines to invoice a selection of the sales order lines."""), diff --git a/addons/sale_analytic_plans/sale_analytic_plans.py b/addons/sale_analytic_plans/sale_analytic_plans.py index 522f6b6f0fb..51262343d68 100644 --- a/addons/sale_analytic_plans/sale_analytic_plans.py +++ b/addons/sale_analytic_plans/sale_analytic_plans.py @@ -38,14 +38,4 @@ class sale_order_line(osv.osv): return create_ids -class sale_order(osv.osv): - _inherit = "sale.order" - - def onchange_shop_id(self, cr, uid, ids, shop_id, context=None): - # Remove the project_id from the result of super() call, if any, as this field is not in the view anymore - res = super(sale_order, self).onchange_shop_id(cr, uid, ids, shop_id, context=context) - if res.get('value',{}).get('project_id'): - del(res['value']['project_id']) - return res - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/sale_crm/test/sale_crm.yml b/addons/sale_crm/test/sale_crm.yml index 011fb6ad5a8..21d2cc08195 100644 --- a/addons/sale_crm/test/sale_crm.yml +++ b/addons/sale_crm/test/sale_crm.yml @@ -1,15 +1,4 @@ - - Make sure the main company has at least one shop. -- - !python {model: sale.shop}: | - company_id = self.pool.get('res.users')._get_company(cr, uid, context=context) - shop_ids = self.search(cr, uid, [('company_id', '=', company_id)]) - if not shop_ids: - # take a shop, and assign it to the user's company - shop_ids = self.search(cr, uid, []) - if shop_ids: - self.write(cr, uid, [shop_ids[0]], {'company_id': company_id}) -- I open the wizard "Make sales". - !record {model: crm.make.sale, id: crm_make_sale_0}: diff --git a/addons/sale_crm/wizard/crm_make_sale.py b/addons/sale_crm/wizard/crm_make_sale.py index da770af6d82..b74817059e4 100644 --- a/addons/sale_crm/wizard/crm_make_sale.py +++ b/addons/sale_crm/wizard/crm_make_sale.py @@ -78,11 +78,13 @@ class crm_make_sale(osv.osv_memory): ['default', 'invoice', 'delivery', 'contact']) pricelist = partner.property_product_pricelist.id fpos = partner.property_account_position and partner.property_account_position.id or False + payment_term = partner.property_payment_term and partner.property_payment_term.id or False new_ids = [] for case in case_obj.browse(cr, uid, data, context=context): if not partner and case.partner_id: partner = case.partner_id fpos = partner.property_account_position and partner.property_account_position.id or False + payment_term = partner.property_payment_term and partner.property_payment_term.id or False partner_addr = partner_obj.address_get(cr, uid, [partner.id], ['default', 'invoice', 'delivery', 'contact']) pricelist = partner.property_product_pricelist.id @@ -93,13 +95,13 @@ class crm_make_sale(osv.osv_memory): 'origin': _('Opportunity: %s') % str(case.id), 'section_id': case.section_id and case.section_id.id or False, 'categ_ids': [(6, 0, [categ_id.id for categ_id in case.categ_ids])], - 'shop_id': make.shop_id.id, 'partner_id': partner.id, 'pricelist_id': pricelist, 'partner_invoice_id': partner_addr['invoice'], 'partner_shipping_id': partner_addr['delivery'], 'date_order': fields.date.context_today(self,cr,uid,context=context), 'fiscal_position': fpos, + 'payment_term':payment_term, } if partner.id: vals['user_id'] = partner.user_id and partner.user_id.id or uid @@ -137,18 +139,12 @@ class crm_make_sale(osv.osv_memory): } return value - def _get_shop_id(self, cr, uid, ids, context=None): - cmpny_id = self.pool.get('res.users')._get_company(cr, uid, context=context) - shop = self.pool.get('sale.shop').search(cr, uid, [('company_id', '=', cmpny_id)]) - return shop and shop[0] or False _columns = { - 'shop_id': fields.many2one('sale.shop', 'Shop', required=True), 'partner_id': fields.many2one('res.partner', 'Customer', required=True, domain=[('customer','=',True)]), 'close': fields.boolean('Mark Won', help='Check this to close the opportunity after having created the sales order.'), } _defaults = { - 'shop_id': _get_shop_id, 'close': False, 'partner_id': _selectPartner, } diff --git a/addons/sale_crm/wizard/crm_make_sale_view.xml b/addons/sale_crm/wizard/crm_make_sale_view.xml index 2207cf536e2..695f3e919eb 100644 --- a/addons/sale_crm/wizard/crm_make_sale_view.xml +++ b/addons/sale_crm/wizard/crm_make_sale_view.xml @@ -10,7 +10,6 @@ <form string="Convert to Quotation" version="7.0"> <group col="4"> <field name="partner_id" required="1"/> - <field name="shop_id" required="1" widget="selection" groups="stock.group_locations"/> <field name="close"/> </group> <footer> diff --git a/addons/sale_journal/sale_journal.py b/addons/sale_journal/sale_journal.py index 9e10c826898..73fd5b672f1 100644 --- a/addons/sale_journal/sale_journal.py +++ b/addons/sale_journal/sale_journal.py @@ -43,11 +43,9 @@ class res_partner(osv.osv): _inherit = 'res.partner' _columns = { 'property_invoice_type': fields.property( - 'sale_journal.invoice.type', type = 'many2one', relation = 'sale_journal.invoice.type', string = "Invoicing Type", - view_load = True, group_name = "Accounting Properties", help = "This invoicing type will be used, by default, to invoice the current partner."), } diff --git a/addons/sale_margin/test/sale_margin.yml b/addons/sale_margin/test/sale_margin.yml index 1d6b295b3a1..197f51a9681 100644 --- a/addons/sale_margin/test/sale_margin.yml +++ b/addons/sale_margin/test/sale_margin.yml @@ -23,7 +23,6 @@ partner_invoice_id: base.res_partner_address_7 partner_shipping_id: base.res_partner_address_7 pricelist_id: product.list0 - shop_id: sale.sale_shop_1 - I confirm the sale order - diff --git a/addons/sale_mrp/test/sale_mrp.yml b/addons/sale_mrp/test/sale_mrp.yml index 5be5210b623..f0ec2de6efc 100644 --- a/addons/sale_mrp/test/sale_mrp.yml +++ b/addons/sale_mrp/test/sale_mrp.yml @@ -83,7 +83,6 @@ partner_shipping_id: base.res_partner_address_7 picking_policy: direct pricelist_id: product.list0 - shop_id: sale.sale_shop_1 - I confirm the sale order - diff --git a/addons/sale_stock/__openerp__.py b/addons/sale_stock/__openerp__.py index a1941524868..ac8b9ddce10 100644 --- a/addons/sale_stock/__openerp__.py +++ b/addons/sale_stock/__openerp__.py @@ -57,7 +57,6 @@ You can choose flexible invoicing methods: 'report/sale_report_view.xml', 'process/sale_stock_process.xml', ], - 'data': ['sale_stock_data.xml'], 'demo_xml': ['sale_stock_demo.xml'], 'test': ['test/sale_stock_users.yml', 'test/cancel_order_sale_stock.yml', diff --git a/addons/sale_stock/report/sale_report.py b/addons/sale_stock/report/sale_report.py index 63641020d98..0feb3ee2392 100644 --- a/addons/sale_stock/report/sale_report.py +++ b/addons/sale_stock/report/sale_report.py @@ -27,6 +27,7 @@ class sale_report(osv.osv): _columns = { 'shipped': fields.boolean('Shipped', readonly=True), 'shipped_qty_1': fields.integer('Shipped', readonly=True), + 'warehouse_id': fields.many2one('stock.warehouse', 'Warehouse',readonly=True), 'state': fields.selection([ ('draft', 'Quotation'), ('waiting_date', 'Waiting Schedule'), @@ -57,8 +58,8 @@ class sale_report(osv.osv): to_char(s.date_order, 'YYYY-MM-DD') as day, s.partner_id as partner_id, s.user_id as user_id, - s.shop_id as shop_id, s.company_id as company_id, + s.warehouse_id as warehouse_id, extract(epoch from avg(date_trunc('day',s.date_confirm)-date_trunc('day',s.create_date)))/(24*60*60)::decimal(16,2) as delay, s.state, t.categ_id as categ_id, @@ -83,7 +84,7 @@ class sale_report(osv.osv): s.date_confirm, s.partner_id, s.user_id, - s.shop_id, + s.warehouse_id, s.company_id, s.state, s.shipped, diff --git a/addons/sale_stock/report/sale_report_view.xml b/addons/sale_stock/report/sale_report_view.xml index ae8b12ca168..6642bffcede 100644 --- a/addons/sale_stock/report/sale_report_view.xml +++ b/addons/sale_stock/report/sale_report_view.xml @@ -7,9 +7,20 @@ <field name="inherit_id" ref="sale.view_order_product_tree"/> <field name="arch" type="xml"> <field name="product_uom_qty" position="after"> + <field name="warehouse_id" invisible="1"/> <field name="shipped_qty_1" sum="Shipped"/> </field> </field> </record> + <record id="view_order_product_search_sale_stock_inherit" model="ir.ui.view"> + <field name="name">sale.report.search.sale.stock</field> + <field name="model">sale.report</field> + <field name="inherit_id" ref="sale.view_order_product_search"/> + <field name="arch" type="xml"> + <xpath expr="//group/filter[@string='Status']" position="after"> + <filter string="Warehouse" context="{'group_by':'warehouse_id'}"/> + </xpath> + </field> + </record> </data> </openerp>
\ No newline at end of file diff --git a/addons/sale_stock/res_config.py b/addons/sale_stock/res_config.py index d06b6a81b32..4c3b92f1d33 100644 --- a/addons/sale_stock/res_config.py +++ b/addons/sale_stock/res_config.py @@ -50,9 +50,6 @@ class sale_configuration(osv.osv_memory): 'group_mrp_properties': fields.boolean('Product properties on order lines', implied_group='sale.group_mrp_properties', help="Allows you to tag sales order lines with properties."), - 'group_multiple_shops': fields.boolean("Manage multiple shops", - implied_group='stock.group_locations', - help="This allows to configure and use multiple shops."), 'module_project_timesheet': fields.boolean("Project Timesheet"), 'module_project_mrp': fields.boolean("Project MRP"), } diff --git a/addons/sale_stock/res_config_view.xml b/addons/sale_stock/res_config_view.xml index ad3b91b2a30..93bc8e5980e 100644 --- a/addons/sale_stock/res_config_view.xml +++ b/addons/sale_stock/res_config_view.xml @@ -59,12 +59,6 @@ <label for="group_mrp_properties"/> </div> </div> - <xpath expr="//div[@name='module_sale_margin']" position="before"> - <div> - <field name="group_multiple_shops" class="oe_inline"/> - <label for="group_multiple_shops"/> - </div> - </xpath> <field name="group_invoice_so_lines" position="replace"> <field name="group_invoice_so_lines" on_change="onchange_invoice_methods(group_invoice_so_lines, group_invoice_deli_orders)" class="oe_inline"/> </field> diff --git a/addons/sale_stock/sale_stock.py b/addons/sale_stock/sale_stock.py index e71fb92f842..3f7ac28c900 100644 --- a/addons/sale_stock/sale_stock.py +++ b/addons/sale_stock/sale_stock.py @@ -27,13 +27,6 @@ from openerp.tools.translate import _ import pytz from openerp import SUPERUSER_ID -class sale_shop(osv.osv): - _inherit = "sale.shop" - _columns = { - 'warehouse_id': fields.many2one('stock.warehouse', 'Warehouse'), - } - - class sale_order(osv.osv): _inherit = "sale.order" @@ -70,9 +63,16 @@ class sale_order(osv.osv): vals.update({'invoice_quantity': 'order'}) if vals['order_policy'] == 'picking': vals.update({'invoice_quantity': 'procurement'}) - order = super(sale_order, self).create(cr, uid, vals, context=context) + order = super(sale_order, self).create(cr, uid, vals, context=context) return order + def _get_default_warehouse(self, cr, uid, context=None): + company_id = self.pool.get('res.users')._get_company(cr, uid, context=context) + warehouse_ids = self.pool.get('stock.warehouse').search(cr, uid, [('company_id', '=', company_id)], context=context) + if not warehouse_ids: + raise osv.except_osv(_('Error!'), _('There is no warehouse defined for current company.')) + return warehouse_ids[0] + # This is False def _picked_rate(self, cr, uid, ids, name, arg, context=None): if not ids: @@ -140,11 +140,13 @@ class sale_order(osv.osv): 'picking_ids': fields.one2many('stock.picking.out', 'sale_id', 'Related Picking', readonly=True, help="This is a list of delivery orders that has been generated for this sales order."), 'shipped': fields.boolean('Delivered', readonly=True, help="It indicates that the sales order has been delivered. This field is updated only after the scheduler(s) have been launched."), 'picked_rate': fields.function(_picked_rate, string='Picked', type='float'), + 'warehouse_id': fields.many2one('stock.warehouse', 'Warehouse', required=True), 'invoice_quantity': fields.selection([('order', 'Ordered Quantities'), ('procurement', 'Shipped Quantities')], 'Invoice on', help="The sales order will automatically create the invoice proposition (draft invoice).\ You have to choose if you want your invoice based on ordered ", required=True, readonly=True, states={'draft': [('readonly', False)]}), } _defaults = { + 'warehouse_id': _get_default_warehouse, 'picking_policy': 'direct', 'order_policy': 'manual', 'invoice_quantity': 'order', @@ -162,6 +164,14 @@ class sale_order(osv.osv): return osv.osv.unlink(self, cr, uid, unlink_ids, context=context) + def onchange_warehouse_id(self, cr, uid, ids, warehouse_id, context=None): + val = {} + if warehouse_id: + warehouse = self.pool.get('stock.warehouse').browse(cr, uid, warehouse_id, context=context) + if warehouse.company_id: + val['company_id'] = warehouse.company_id.id + return {'value': val} + def action_view_delivery(self, cr, uid, ids, context=None): ''' This function returns an action that display existing delivery orders of given sales order ids. It can either be a in a list or in a form view, if there is only one delivery order to show. @@ -297,7 +307,7 @@ class sale_order(osv.osv): or line.product_uom_qty, 'product_uos': (line.product_uos and line.product_uos.id)\ or line.product_uom.id, - 'location_id': order.shop_id.warehouse_id.lot_stock_id.id, + 'location_id': order.warehouse_id.lot_stock_id.id, 'procure_method': line.type, 'move_id': move_id, 'company_id': order.company_id.id, @@ -305,8 +315,8 @@ class sale_order(osv.osv): } def _prepare_order_line_move(self, cr, uid, order, line, picking_id, date_planned, context=None): - location_id = order.shop_id.warehouse_id.lot_stock_id.id - output_id = order.shop_id.warehouse_id.lot_output_id.id + location_id = order.warehouse_id.lot_stock_id.id + output_id = order.warehouse_id.lot_output_id.id return { 'name': line.name, 'picking_id': picking_id, @@ -587,9 +597,6 @@ class sale_order_line(osv.osv): return res #update of result obtained in super function - res_packing = self.product_packaging_change(cr, uid, ids, pricelist, product, qty, uom, partner_id, packaging, context=context) - res['value'].update(res_packing.get('value', {})) - warning_msgs = res_packing.get('warning') and res_packing['warning']['message'] or '' product_obj = product_obj.browse(cr, uid, product, context=context) res['value']['delay'] = (product_obj.sale_delay or 0.0) res['value']['type'] = product_obj.procure_method @@ -602,6 +609,11 @@ class sale_order_line(osv.osv): uom = False if not uom2: uom2 = product_obj.uom_id + + # Calling product_packaging_change function after updating UoM + res_packing = self.product_packaging_change(cr, uid, ids, pricelist, product, qty, uom, partner_id, packaging, context=context) + res['value'].update(res_packing.get('value', {})) + warning_msgs = res_packing.get('warning') and res_packing['warning']['message'] or '' compare_qty = float_compare(product_obj.virtual_available * uom2.factor, qty * product_obj.uom_id.factor, precision_rounding=product_obj.uom_id.rounding) if (product_obj.type=='product') and int(compare_qty) == -1 \ and (product_obj.procure_method=='make_to_stock'): diff --git a/addons/sale_stock/sale_stock_data.xml b/addons/sale_stock/sale_stock_data.xml deleted file mode 100644 index bb4944bd87e..00000000000 --- a/addons/sale_stock/sale_stock_data.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> - <data noupdate="1"> - - <!-- Resource: sale.shop --> - <record id="sale.sale_shop_1" model="sale.shop"> - <field name="warehouse_id" ref="stock.warehouse0"/> - </record> - - </data> -</openerp>
\ No newline at end of file diff --git a/addons/sale_stock/sale_stock_demo.xml b/addons/sale_stock/sale_stock_demo.xml index 15b1e60b829..2e7b641659d 100644 --- a/addons/sale_stock/sale_stock_demo.xml +++ b/addons/sale_stock/sale_stock_demo.xml @@ -3,21 +3,37 @@ <data noupdate="1"> <record id="sale.sale_order_1" model="sale.order"> + <field name="warehouse_id" ref="stock.warehouse0"/> <field name="order_policy">prepaid</field> </record> - + + <record id="sale.sale_order_2" model="sale.order"> + <field name="warehouse_id" ref="stock.warehouse0"/> + </record> + + <record id="sale.sale_order_3" model="sale.order"> + <field name="warehouse_id" ref="stock.warehouse0"/> + </record> + <record id="sale.sale_order_4" model="sale.order"> + <field name="warehouse_id" ref="stock.warehouse0"/> <field name="order_policy">prepaid</field> </record> <record id="sale.sale_order_5" model="sale.order"> + <field name="warehouse_id" ref="stock.warehouse0"/> <field name="order_policy">picking</field> </record> <record id="sale.sale_order_6" model="sale.order"> + <field name="warehouse_id" ref="stock.warehouse0"/> <field name="order_policy">picking</field> </record> + <record id="sale.sale_order_8" model="sale.order"> + <field name="warehouse_id" ref="stock.warehouse0"/> + </record> + <!-- Confirm some Sale Orders--> <workflow action="order_confirm" model="sale.order" ref="sale.sale_order_1"/> <workflow action="order_confirm" model="sale.order" ref="sale.sale_order_5"/> diff --git a/addons/sale_stock/sale_stock_view.xml b/addons/sale_stock/sale_stock_view.xml index 9d852405b9e..b66177d374b 100644 --- a/addons/sale_stock/sale_stock_view.xml +++ b/addons/sale_stock/sale_stock_view.xml @@ -2,31 +2,6 @@ <openerp> <data> - <record id="view_sale_shop_form_inherit" model="ir.ui.view"> - <field name="name">sale.shop.inherit.form</field> - <field name="model">sale.shop</field> - <field name="inherit_id" ref="sale.view_shop_form"/> - <field name="arch" type="xml"> - <xpath expr="//group[@name='shop']" position="before"> - <label for="warehouse_id" class="oe_edit_only"/> - <h2><field name="warehouse_id" required="1"/></h2> - </xpath> - </field> - </record> - - <record id="view_shop_tree_inherit" model="ir.ui.view"> - <field name="name">sale.shop.sale.stock</field> - <field name="model">sale.shop</field> - <field name="inherit_id" ref="sale.view_shop_tree"/> - <field name="arch" type="xml"> - <field name="name" position="after"> - <field name="warehouse_id"/> - </field> - </field> - </record> - - <menuitem action="sale.action_shop_form" id="menu_action_shop_form" parent="base.menu_base_config" sequence="35" groups="stock.group_locations"/> - <record id="view_order_form_inherit" model="ir.ui.view"> <field name="name">sale.order.form.sale.stock</field> <field name="model">sale.order</field> @@ -48,17 +23,20 @@ <field name="state" position="replace"> <field name="state" widget="statusbar" statusbar_visible="draft,sent,progress,invoiced,done" statusbar_colors='{"shipping_except":"red","invoice_except":"red","waiting_date":"blue"}'/> </field> - <field name="shop_id" position="replace"> - <field name="shop_id" on_change="onchange_shop_id(shop_id)" widget="selection" groups="stock.group_locations"/> - </field> + <field name="company_id" position="replace"> + <field name="company_id" readonly="True"/> + </field> + <field name="fiscal_position" position="after"> + <field name="warehouse_id" on_change="onchange_warehouse_id(warehouse_id)" widget="selection" groups="stock.group_locations"/> + </field> <field name="product_id" position="replace"> <field name="product_id" - context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}" + context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'uom':product_uom}" groups="base.group_user" on_change="product_id_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,product_uos,name,parent.partner_id, False, True, parent.date_order, product_packaging, parent.fiscal_position, False, context)"/> </field> <field name="product_uom_qty" position="replace"> - <field context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}" + <field context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'uom':product_uom}" name="product_uom_qty" class="oe_inline" on_change="product_id_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,product_uos,name,parent.partner_id, False, False, parent.date_order, product_packaging, parent.fiscal_position, True, context)"/> </field> @@ -78,7 +56,7 @@ groups="sale.group_mrp_properties"/> </xpath> <xpath expr="//page[@string='Order Lines']/field[@name='order_line']/form[@string='Sales Order Lines']/group/group/field[@name='tax_id']" position="before"> - <field name="product_packaging" context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'shop':parent.shop_id, 'uom':product_uom}" on_change="product_packaging_change(parent.pricelist_id, product_id, product_uom_qty, product_uom, parent.partner_id, product_packaging, True, context)" domain="[('product_id','=',product_id)]" groups="product.group_stock_packaging" /> + <field name="product_packaging" context="{'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'uom':product_uom}" on_change="product_packaging_change(parent.pricelist_id, product_id, product_uom_qty, product_uom, parent.partner_id, product_packaging, True, context)" domain="[('product_id','=',product_id)]" groups="product.group_stock_packaging" /> </xpath> <xpath expr="//page[@string='Order Lines']/field[@name='order_line']/form[@string='Sales Order Lines']/div/field[@name='invoice_lines']" position="after"> <label for="move_ids"/> diff --git a/addons/sale_stock/test/picking_order_policy.yml b/addons/sale_stock/test/picking_order_policy.yml index ee909f59523..609cd405bad 100644 --- a/addons/sale_stock/test/picking_order_policy.yml +++ b/addons/sale_stock/test/picking_order_policy.yml @@ -76,8 +76,8 @@ assert picking.note == sale_order.note,"Note is not correspond with sale order." assert picking.invoice_state == (sale_order.order_policy=='picking' and '2binvoiced') or 'none',"Invoice policy is not correspond with sale order." assert len(picking.move_lines) == len(sale_order.order_line), "Total move of delivery order are not corresposning with total sale order lines." - location_id = sale_order.shop_id.warehouse_id.lot_stock_id.id - output_id = sale_order.shop_id.warehouse_id.lot_output_id.id + location_id = sale_order.warehouse_id.lot_stock_id.id + output_id = sale_order.warehouse_id.lot_output_id.id for move in picking.move_lines: order_line = move.sale_line_id sale_order_date = self.date_to_datetime(cr, uid, sale_order.date_order, context) diff --git a/addons/share/static/src/js/share.js b/addons/share/static/src/js/share.js index da72cea602d..2211295ae60 100644 --- a/addons/share/static/src/js/share.js +++ b/addons/share/static/src/js/share.js @@ -14,7 +14,7 @@ openerp.share = function(session) { else rec_name = ''; session.web.pyeval.eval_domains_and_contexts({ domains: [domain], - contexts: [view.dataset.context] + contexts: [Share.get_context()] }).done(function (result) { Share.create({ name: action.name, @@ -25,7 +25,7 @@ openerp.share = function(session) { view_type: view.fields_view.type, invite: invite || false, }).done(function(share_id) { - var step1 = Share.call('go_step_1', [[share_id]]).done(function(result) { + var step1 = Share.call('go_step_1', [[share_id], Share.get_context()]).done(function(result) { var action = result; self.do_action(action); }); diff --git a/addons/stock/partner.py b/addons/stock/partner.py index b8bad4faf95..3aaf1c663e5 100644 --- a/addons/stock/partner.py +++ b/addons/stock/partner.py @@ -25,19 +25,15 @@ class res_partner(osv.osv): _inherit = 'res.partner' _columns = { 'property_stock_customer': fields.property( - 'stock.location', type='many2one', relation='stock.location', string="Customer Location", - view_load=True, help="This stock location will be used, instead of the default one, as the destination location for goods you send to this partner"), 'property_stock_supplier': fields.property( - 'stock.location', type='many2one', relation='stock.location', string="Supplier Location", - view_load=True, help="This stock location will be used, instead of the default one, as the source location for goods you receive from the current partner"), } diff --git a/addons/stock/product.py b/addons/stock/product.py index 29445f671ee..20fc660be0f 100644 --- a/addons/stock/product.py +++ b/addons/stock/product.py @@ -205,7 +205,6 @@ class product_product(osv.osv): location_obj = self.pool.get('stock.location') warehouse_obj = self.pool.get('stock.warehouse') - shop_obj = self.pool.get('sale.shop') states = context.get('states',[]) what = context.get('what',()) @@ -215,11 +214,6 @@ class product_product(osv.osv): if not ids: return res - if context.get('shop', False): - warehouse_id = shop_obj.read(cr, uid, int(context['shop']), ['warehouse_id'])['warehouse_id'][0] - if warehouse_id: - context['warehouse'] = warehouse_id - if context.get('warehouse', False): lot_id = warehouse_obj.read(cr, uid, int(context['warehouse']), ['lot_stock_id'])['lot_stock_id'][0] if lot_id: @@ -372,7 +366,6 @@ class product_product(osv.osv): "In a context with a single Warehouse, this includes " "goods stored in the Stock Location of this Warehouse, or any " "of its children.\n" - "In a context with a single Shop, this includes goods " "stored in the Stock Location of the Warehouse of this Shop, " "or any of its children.\n" "Otherwise, this includes goods stored in any Stock Location " @@ -387,7 +380,6 @@ class product_product(osv.osv): "In a context with a single Warehouse, this includes " "goods stored in the Stock Location of this Warehouse, or any " "of its children.\n" - "In a context with a single Shop, this includes goods " "stored in the Stock Location of the Warehouse of this Shop, " "or any of its children.\n" "Otherwise, this includes goods stored in any Stock Location " @@ -485,37 +477,33 @@ class product_template(osv.osv): _inherit = 'product.template' _columns = { 'property_stock_procurement': fields.property( - 'stock.location', type='many2one', relation='stock.location', string="Procurement Location", - view_load=True, domain=[('usage','like','procurement')], help="This stock location will be used, instead of the default one, as the source location for stock moves generated by procurements."), 'property_stock_production': fields.property( - 'stock.location', type='many2one', relation='stock.location', string="Production Location", - view_load=True, domain=[('usage','like','production')], help="This stock location will be used, instead of the default one, as the source location for stock moves generated by manufacturing orders."), 'property_stock_inventory': fields.property( - 'stock.location', type='many2one', relation='stock.location', string="Inventory Location", - view_load=True, domain=[('usage','like','inventory')], help="This stock location will be used, instead of the default one, as the source location for stock moves generated when you do an inventory."), - 'property_stock_account_input': fields.property('account.account', - type='many2one', relation='account.account', - string='Stock Input Account', view_load=True, + 'property_stock_account_input': fields.property( + type='many2one', + relation='account.account', + string='Stock Input Account', help="When doing real-time inventory valuation, counterpart journal items for all incoming stock moves will be posted in this account, unless " "there is a specific valuation account set on the source location. When not set on the product, the one from the product category is used."), - 'property_stock_account_output': fields.property('account.account', - type='many2one', relation='account.account', - string='Stock Output Account', view_load=True, + 'property_stock_account_output': fields.property( + type='many2one', + relation='account.account', + string='Stock Output Account', help="When doing real-time inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account, unless " "there is a specific valuation account set on the destination location. When not set on the product, the one from the product category is used."), 'sale_delay': fields.float('Customer Lead Time', help="The average delay in days between the confirmation of the customer order and the delivery of the finished products. It's the time you promise to your customers."), @@ -532,27 +520,29 @@ class product_category(osv.osv): _inherit = 'product.category' _columns = { - 'property_stock_journal': fields.property('account.journal', - relation='account.journal', type='many2one', - string='Stock Journal', view_load=True, + 'property_stock_journal': fields.property( + relation='account.journal', + type='many2one', + string='Stock Journal', help="When doing real-time inventory valuation, this is the Accounting Journal in which entries will be automatically posted when stock moves are processed."), - 'property_stock_account_input_categ': fields.property('account.account', - type='many2one', relation='account.account', - string='Stock Input Account', view_load=True, + 'property_stock_account_input_categ': fields.property( + type='many2one', + relation='account.account', + string='Stock Input Account', help="When doing real-time inventory valuation, counterpart journal items for all incoming stock moves will be posted in this account, unless " "there is a specific valuation account set on the source location. This is the default value for all products in this category. It " "can also directly be set on each product"), - 'property_stock_account_output_categ': fields.property('account.account', - type='many2one', relation='account.account', - string='Stock Output Account', view_load=True, + 'property_stock_account_output_categ': fields.property( + type='many2one', + relation='account.account', + string='Stock Output Account', help="When doing real-time inventory valuation, counterpart journal items for all outgoing stock moves will be posted in this account, unless " "there is a specific valuation account set on the destination location. This is the default value for all products in this category. It " "can also directly be set on each product"), - 'property_stock_valuation_account_id': fields.property('account.account', + 'property_stock_valuation_account_id': fields.property( type='many2one', relation='account.account', string="Stock Valuation Account", - view_load=True, help="When real-time inventory valuation is enabled on a product, this account will hold the current value of the products.",), } diff --git a/addons/stock/report/picking.rml b/addons/stock/report/picking.rml index e0788dcb966..0a17f56fc71 100644 --- a/addons/stock/report/picking.rml +++ b/addons/stock/report/picking.rml @@ -258,7 +258,9 @@ <para style="terp_default_Centre_9">[[ (move_lines.prodlot_id and move_lines.prodlot_id.name) or '' ]]</para> </td> <td> - <para style="terp_default_9">[[ move_lines.state ]]</para> + <para style="terp_default_9">Waiting Availability[[ move_lines.state == 'confirmed' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_default_9">Done[[ move_lines.state == 'done' and ' ' or removeParentNode('para') ]]</para> + <para style="terp_default_9">Available[[ move_lines.state == 'assigned' and ' ' or removeParentNode('para') ]]</para> </td> <td> <para style="terp_default_Right_9">[[ (move_lines.location_id and move_lines.location_id.name) or '' ]] </para> diff --git a/addons/stock/stock.py b/addons/stock/stock.py index d5fb48a60f0..d9edd41c5ac 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -1637,7 +1637,7 @@ class stock_move(osv.osv): "* Waiting Availability: This state is reached when the procurement resolution is not straight forward. It may need the scheduler to run, a component to me manufactured...\n"\ "* Available: When products are reserved, it is set to \'Available\'.\n"\ "* Done: When the shipment is processed, the state is \'Done\'."), - 'price_unit': fields.float('Unit Price', digits_compute= dp.get_precision('Account'), help="Technical field used to record the product cost set by the user during a picking confirmation (when average price costing method is used)"), + 'price_unit': fields.float('Unit Price', digits_compute= dp.get_precision('Product Price'), help="Technical field used to record the product cost set by the user during a picking confirmation (when average price costing method is used)"), 'price_currency_id': fields.many2one('res.currency', 'Currency for average price', help="Technical field used to record the currency chosen by the user during a picking confirmation (when average price costing method is used)"), 'company_id': fields.many2one('res.company', 'Company', required=True, select=True), 'backorder_id': fields.related('picking_id','backorder_id',type='many2one', relation="stock.picking", string="Back Order of", select=True), @@ -2192,7 +2192,7 @@ class stock_move(osv.osv): if move.picking_id: pickings.add(move.picking_id.id) if move.move_dest_id and move.move_dest_id.state == 'waiting': - self.write(cr, uid, [move.move_dest_id.id], {'state': 'assigned'}) + self.write(cr, uid, [move.move_dest_id.id], {'state': 'confirmed'}) if context.get('call_unlink',False) and move.move_dest_id.picking_id: wf_service.trg_write(uid, 'stock.picking', move.move_dest_id.picking_id.id, cr) self.write(cr, uid, ids, {'state': 'cancel', 'move_dest_id': False}) @@ -2412,8 +2412,8 @@ class stock_move(osv.osv): # or if it's the same as that of the secondary amount being posted. account_obj = self.pool.get('account.account') src_acct, dest_acct = account_obj.browse(cr, uid, [src_account_id, dest_account_id], context=context) - src_main_currency_id = src_acct.currency_id and src_acct.currency_id.id or src_acct.company_id.currency_id.id - dest_main_currency_id = dest_acct.currency_id and dest_acct.currency_id.id or dest_acct.company_id.currency_id.id + src_main_currency_id = src_acct.company_id.currency_id.id + dest_main_currency_id = dest_acct.company_id.currency_id.id cur_obj = self.pool.get('res.currency') if reference_currency_id != src_main_currency_id: # fix credit line: diff --git a/addons/stock/wizard/stock_partial_move.py b/addons/stock/wizard/stock_partial_move.py index 89744615f22..e1956e202c9 100644 --- a/addons/stock/wizard/stock_partial_move.py +++ b/addons/stock/wizard/stock_partial_move.py @@ -22,6 +22,7 @@ from openerp.osv import fields, osv from openerp.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT import time +from openerp.tools.translate import _ class stock_partial_move_line(osv.osv_memory): _inherit = "stock.partial.picking.line" @@ -67,6 +68,8 @@ class stock_partial_move(osv.osv_memory): } moves_ids = [] for move in partial.move_ids: + if not move.move_id: + raise osv.except_osv(_('Warning !'), _("You have manually created product lines, please delete them to proceed")) move_id = move.move_id.id partial_data['move%s' % (move_id)] = { 'product_id': move.product_id.id, diff --git a/addons/stock/wizard/stock_return_picking.py b/addons/stock/wizard/stock_return_picking.py index c51e1415249..992c64ea134 100644 --- a/addons/stock/wizard/stock_return_picking.py +++ b/addons/stock/wizard/stock_return_picking.py @@ -180,6 +180,8 @@ class stock_return_picking(osv.osv_memory): for v in val_id: data_get = data_obj.browse(cr, uid, v, context=context) mov_id = data_get.move_id.id + if not mov_id: + raise osv.except_osv(_('Warning !'), _("You have manually created product lines, please delete them to proceed")) new_qty = data_get.quantity move = move_obj.browse(cr, uid, mov_id, context=context) new_location = move.location_dest_id.id diff --git a/addons/stock_location/i18n/th.po b/addons/stock_location/i18n/th.po new file mode 100644 index 00000000000..7636c8142c8 --- /dev/null +++ b/addons/stock_location/i18n/th.po @@ -0,0 +1,377 @@ +# Thai translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:06+0000\n" +"PO-Revision-Date: 2013-06-21 04:47+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Thai <th@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-22 05:36+0000\n" +"X-Generator: Launchpad (build 16677)\n" + +#. module: stock_location +#: help:product.pulled.flow,company_id:0 +msgid "Is used to know to which company the pickings and moves belong." +msgstr "" + +#. module: stock_location +#: selection:product.pulled.flow,picking_type:0 +#: selection:stock.location.path,picking_type:0 +msgid "Sending Goods" +msgstr "" + +#. module: stock_location +#: view:product.product:0 +msgid "Pulled Paths" +msgstr "" + +#. module: stock_location +#: selection:product.pulled.flow,type_proc:0 +msgid "Move" +msgstr "" + +#. module: stock_location +#: model:ir.model,name:stock_location.model_stock_location_path +msgid "Pushed Flows" +msgstr "" + +#. module: stock_location +#: selection:stock.location.path,auto:0 +msgid "Automatic No Step Added" +msgstr "" + +#. module: stock_location +#: field:product.pulled.flow,location_src_id:0 +#: field:stock.location.path,location_from_id:0 +msgid "Source Location" +msgstr "" + +#. module: stock_location +#: help:product.pulled.flow,cancel_cascade:0 +msgid "Allow you to cancel moves related to the product pull flow" +msgstr "" + +#. module: stock_location +#: model:ir.model,name:stock_location.model_product_pulled_flow +#: field:product.product,flow_pull_ids:0 +msgid "Pulled Flows" +msgstr "" + +#. module: stock_location +#: help:product.pulled.flow,location_src_id:0 +msgid "Location used by Destination Location to supply" +msgstr "" + +#. module: stock_location +#: selection:product.pulled.flow,picking_type:0 +#: selection:stock.location.path,picking_type:0 +msgid "Internal" +msgstr "" + +#. module: stock_location +#: code:addons/stock_location/procurement_pull.py:98 +#, python-format +msgid "" +"Pulled procurement coming from original location %s, pull rule %s, via " +"original Procurement %s (#%d)" +msgstr "" + +#. module: stock_location +#: model:ir.model,name:stock_location.model_stock_location +msgid "Location" +msgstr "" + +#. module: stock_location +#: field:product.pulled.flow,invoice_state:0 +#: field:stock.location.path,invoice_state:0 +msgid "Invoice Status" +msgstr "" + +#. module: stock_location +#: help:stock.location.path,auto:0 +msgid "" +"This is used to define paths the product has to follow within the location " +"tree.\n" +"The 'Automatic Move' value will create a stock move after the current one " +"that will be validated automatically. With 'Manual Operation', the stock " +"move has to be validated by a worker. With 'Automatic No Step Added', the " +"location is replaced in the original move." +msgstr "" + +#. module: stock_location +#: view:product.product:0 +msgid "Conditions" +msgstr "" + +#. module: stock_location +#: model:stock.location,name:stock_location.location_pack_zone +msgid "Pack Zone" +msgstr "" + +#. module: stock_location +#: model:stock.location,name:stock_location.location_gate_b +msgid "Gate B" +msgstr "" + +#. module: stock_location +#: model:stock.location,name:stock_location.location_gate_a +msgid "Gate A" +msgstr "" + +#. module: stock_location +#: selection:product.pulled.flow,type_proc:0 +msgid "Buy" +msgstr "" + +#. module: stock_location +#: view:product.product:0 +msgid "Pushed flows" +msgstr "" + +#. module: stock_location +#: model:stock.location,name:stock_location.location_dispatch_zone +msgid "Dispatch Zone" +msgstr "" + +#. module: stock_location +#: view:product.product:0 +msgid "Pulled flows" +msgstr "" + +#. module: stock_location +#: field:product.pulled.flow,company_id:0 +#: field:stock.location.path,company_id:0 +msgid "Company" +msgstr "" + +#. module: stock_location +#: model:ir.model,name:stock_location.model_stock_move +msgid "Stock Move" +msgstr "" + +#. module: stock_location +#: help:stock.move,cancel_cascade:0 +msgid "If checked, when this move is cancelled, cancel the linked move too" +msgstr "" + +#. module: stock_location +#: selection:product.pulled.flow,type_proc:0 +msgid "Produce" +msgstr "" + +#. module: stock_location +#: selection:product.pulled.flow,procure_method:0 +msgid "Make to Order" +msgstr "" + +#. module: stock_location +#: selection:product.pulled.flow,procure_method:0 +msgid "Make to Stock" +msgstr "" + +#. module: stock_location +#: code:addons/stock_location/procurement_pull.py:118 +#, python-format +msgid "Pulled from another location." +msgstr "" + +#. module: stock_location +#: field:product.pulled.flow,partner_address_id:0 +msgid "Partner Address" +msgstr "" + +#. module: stock_location +#: selection:product.pulled.flow,invoice_state:0 +#: selection:stock.location.path,invoice_state:0 +msgid "To Be Invoiced" +msgstr "" + +#. module: stock_location +#: help:stock.location.path,delay:0 +msgid "Number of days to do this transition" +msgstr "" + +#. module: stock_location +#: help:product.pulled.flow,name:0 +msgid "This field will fill the packing Origin and the name of its moves" +msgstr "" + +#. module: stock_location +#: field:product.pulled.flow,type_proc:0 +msgid "Type of Procurement" +msgstr "" + +#. module: stock_location +#: field:product.pulled.flow,name:0 +msgid "Name" +msgstr "" + +#. module: stock_location +#: help:product.product,path_ids:0 +msgid "" +"These rules set the right path of the product in the whole location tree." +msgstr "" + +#. module: stock_location +#: selection:stock.location.path,auto:0 +msgid "Manual Operation" +msgstr "" + +#. module: stock_location +#: model:ir.model,name:stock_location.model_product_product +#: field:product.pulled.flow,product_id:0 +msgid "Product" +msgstr "" + +#. module: stock_location +#: field:product.pulled.flow,picking_type:0 +#: field:stock.location.path,picking_type:0 +msgid "Shipping Type" +msgstr "" + +#. module: stock_location +#: help:product.pulled.flow,procure_method:0 +msgid "" +"'Make to Stock': When needed, take from the stock or wait until re-" +"supplying. 'Make to Order': When needed, purchase or produce for the " +"procurement request." +msgstr "" + +#. module: stock_location +#: help:product.pulled.flow,location_id:0 +msgid "Is the destination location that needs supplying" +msgstr "" + +#. module: stock_location +#: field:stock.location.path,product_id:0 +msgid "Products" +msgstr "" + +#. module: stock_location +#: model:stock.location,name:stock_location.stock_location_qualitytest0 +msgid "Quality Control" +msgstr "" + +#. module: stock_location +#: selection:product.pulled.flow,invoice_state:0 +#: selection:stock.location.path,invoice_state:0 +msgid "Not Applicable" +msgstr "" + +#. module: stock_location +#: field:stock.location.path,delay:0 +msgid "Delay (days)" +msgstr "" + +#. module: stock_location +#: code:addons/stock_location/procurement_pull.py:67 +#, python-format +msgid "" +"Picking for pulled procurement coming from original location %s, pull rule " +"%s, via original Procurement %s (#%d)" +msgstr "" + +#. module: stock_location +#: field:product.product,path_ids:0 +msgid "Pushed Flow" +msgstr "" + +#. module: stock_location +#: code:addons/stock_location/procurement_pull.py:89 +#, python-format +msgid "" +"Move for pulled procurement coming from original location %s, pull rule %s, " +"via original Procurement %s (#%d)" +msgstr "" + +#. module: stock_location +#: view:product.product:0 +msgid "Push Flow" +msgstr "" + +#. module: stock_location +#: view:product.product:0 +msgid "Pull Flow" +msgstr "" + +#. module: stock_location +#: model:ir.model,name:stock_location.model_procurement_order +msgid "Procurement" +msgstr "" + +#. module: stock_location +#: field:product.pulled.flow,location_id:0 +#: field:stock.location.path,location_dest_id:0 +msgid "Destination Location" +msgstr "" + +#. module: stock_location +#: field:stock.location.path,auto:0 +#: selection:stock.location.path,auto:0 +msgid "Automatic Move" +msgstr "" + +#. module: stock_location +#: selection:product.pulled.flow,picking_type:0 +#: selection:stock.location.path,picking_type:0 +msgid "Getting Goods" +msgstr "" + +#. module: stock_location +#: view:product.product:0 +msgid "Action Type" +msgstr "" + +#. module: stock_location +#: field:product.pulled.flow,procure_method:0 +msgid "Procure Method" +msgstr "" + +#. module: stock_location +#: help:product.pulled.flow,picking_type:0 +#: help:stock.location.path,picking_type:0 +msgid "" +"Depending on the company, choose whatever you want to receive or send " +"products" +msgstr "" + +#. module: stock_location +#: model:stock.location,name:stock_location.location_order +msgid "Order Processing" +msgstr "" + +#. module: stock_location +#: field:stock.location.path,name:0 +msgid "Operation" +msgstr "" + +#. module: stock_location +#: view:stock.location.path:0 +msgid "Location Paths" +msgstr "" + +#. module: stock_location +#: field:product.pulled.flow,journal_id:0 +#: field:stock.location.path,journal_id:0 +msgid "Journal" +msgstr "" + +#. module: stock_location +#: field:product.pulled.flow,cancel_cascade:0 +#: field:stock.move,cancel_cascade:0 +msgid "Cancel Cascade" +msgstr "" + +#. module: stock_location +#: selection:product.pulled.flow,invoice_state:0 +#: selection:stock.location.path,invoice_state:0 +msgid "Invoiced" +msgstr "" diff --git a/addons/stock_location/stock_location_demo_cpu1.xml b/addons/stock_location/stock_location_demo_cpu1.xml index d9a220daef6..c756dac2566 100644 --- a/addons/stock_location/stock_location_demo_cpu1.xml +++ b/addons/stock_location/stock_location_demo_cpu1.xml @@ -75,17 +75,5 @@ <field name="product_id" ref="product.product_product_9"/> </record> - <record id="sale_shop2" model="sale.shop"> - <field name="name">Chicago Shop</field> - <field name="warehouse_id" ref="stock.stock_warehouse_shop0"/> - <field name="company_id" ref="stock.res_company_1"/> - <field model="account.payment.term" name="payment_default_id" search="[]"/> - </record> - <record id="sale_shop3" model="sale.shop"> - <field name="name">Birmingham shop</field> - <field name="warehouse_id" ref="stock.stock_warehouse_shop1"/> - <field name="company_id" ref="stock.res_company_2"/> - <field model="account.payment.term" name="payment_default_id" search="[]"/> - </record> </data> </openerp>
\ No newline at end of file diff --git a/addons/survey/survey.py b/addons/survey/survey.py index ad96145741b..37a0c6ed773 100644 --- a/addons/survey/survey.py +++ b/addons/survey/survey.py @@ -498,7 +498,7 @@ class survey_question(osv.osv): def create(self, cr, uid, vals, context=None): minimum_ans = 0 maximum_ans = 0 - page = self.pool.get('survey.page').browse(cr, uid, vals['page_id'], context=context).title + page = self.pool.get('survey.page').browse(cr, uid, int(vals.get('page_id', 0)), context=context).title if vals.has_key('answer_choice_ids') and not len(vals['answer_choice_ids']): if vals.has_key('type') and vals['type'] not in ['descriptive_text', 'single_textbox', 'comment','table']: raise osv.except_osv(_('Warning!'),_('You must enter one or more answers for question "%s" of page %s .') % (vals['question'], page)) diff --git a/addons/survey/survey_view.xml b/addons/survey/survey_view.xml index f41d257cf63..2a94dc59e62 100644 --- a/addons/survey/survey_view.xml +++ b/addons/survey/survey_view.xml @@ -772,6 +772,7 @@ <field name="arch" type="xml"> <form string="Survey Question"> <field name="question" colspan="4"/> + <field name="page_id"/> <field name="sequence"/> <field name="tot_resp"/> <field name="type" on_change="on_change_type(type)"/> diff --git a/addons/survey/wizard/survey_answer.py b/addons/survey/wizard/survey_answer.py index 6d473754988..7e58c8a10eb 100644 --- a/addons/survey/wizard/survey_answer.py +++ b/addons/survey/wizard/survey_answer.py @@ -1038,6 +1038,7 @@ class survey_question_wiz(osv.osv_memory): 'type': 'ir.actions.act_window', 'target': 'new', 'view_id': view_id, + 'page_id': int(context.get('page_id',0)), 'context': context } diff --git a/addons/survey/wizard/survey_browse_answer.xml b/addons/survey/wizard/survey_browse_answer.xml index cb50eb955bb..4f2adb85743 100644 --- a/addons/survey/wizard/survey_browse_answer.xml +++ b/addons/survey/wizard/survey_browse_answer.xml @@ -11,15 +11,15 @@ <field name="model">survey.browse.answer</field> <field name="arch" type="xml"> <form string="Survey" version="7.0"> - <header> - <button name="action_next" string="Start" type="object" class="oe_highlight"/> - or - <button string="Cancel" class="oe_link" special="cancel" /> - </header> <group col="4"> <field name="survey_id"/> <field name="response_id" domain="[('survey_id','=', survey_id)]"/> </group> + <footer> + <button name="action_next" string="Start" type="object" class="oe_highlight"/> + or + <button string="Cancel" class="oe_link" special="cancel" /> + </footer> </form> </field> </record> diff --git a/addons/survey/wizard/survey_print.xml b/addons/survey/wizard/survey_print.xml index 40056234fe8..b539b844654 100644 --- a/addons/survey/wizard/survey_print.xml +++ b/addons/survey/wizard/survey_print.xml @@ -9,11 +9,6 @@ <field name="model">survey.print</field> <field name="arch" type="xml"> <form string="Survey Print" version="7.0"> - <header> - <button name="action_next" string="Print" type="object" class="oe_highlight"/> - or - <button string="Cancel" class="oe_link" special="cancel" /> - </header> <group col="4"> <separator string="Survey" colspan="4"/> <field name="survey_ids" nolabel="1" colspan="4" /> @@ -23,6 +18,11 @@ <field name="page_number" colspan="4"/> <field name="without_pagebreak" colspan="4"/> </group> + <footer> + <button name="action_next" string="Print" type="object" class="oe_highlight"/> + or + <button string="Cancel" class="oe_link" special="cancel" /> + </footer> </form> </field> </record> diff --git a/addons/survey/wizard/survey_print_answer.xml b/addons/survey/wizard/survey_print_answer.xml index c2363695292..f3c8d01a62c 100644 --- a/addons/survey/wizard/survey_print_answer.xml +++ b/addons/survey/wizard/survey_print_answer.xml @@ -9,11 +9,6 @@ <field name="model">survey.print.answer</field> <field name="arch" type="xml"> <form string="Print Answer" version="7.0"> - <header> - <button name="action_next" string="Print" type="object" class="oe_highlight"/> - or - <button string="Cancel" class="oe_link" special="cancel" /> - </header> <group col="4"> <separator string="Answer" colspan="4"/> <field name="response_ids" nolabel="1" colspan="4" /> @@ -23,6 +18,11 @@ <field name="page_number" colspan="4"/> <field name="without_pagebreak" colspan="4"/> </group> + <footer> + <button name="action_next" string="Print" type="object" class="oe_highlight"/> + or + <button string="Cancel" class="oe_link" special="cancel" /> + </footer> </form> </field> </record> diff --git a/addons/survey/wizard/survey_print_statistics.xml b/addons/survey/wizard/survey_print_statistics.xml index 97d976b98f6..6d63cf8b9bf 100644 --- a/addons/survey/wizard/survey_print_statistics.xml +++ b/addons/survey/wizard/survey_print_statistics.xml @@ -9,12 +9,12 @@ <field name="model">survey.print.statistics</field> <field name="arch" type="xml"> <form string="Survey Print Statistics" version="7.0"> - <header> + <field name="survey_ids"/> + <footer> <button name="action_next" string="Print" type="object" class="oe_highlight"/> or <button string="Cancel" class="oe_link" special="cancel" /> - </header> - <field name="survey_ids"/> + </footer> </form> </field> </record> diff --git a/addons/survey/wizard/survey_selection.xml b/addons/survey/wizard/survey_selection.xml index de1231b53fb..56f5f5cda33 100644 --- a/addons/survey/wizard/survey_selection.xml +++ b/addons/survey/wizard/survey_selection.xml @@ -10,15 +10,15 @@ <field name="model">survey.name.wiz</field> <field name="arch" type="xml"> <form string="Survey" version="7.0"> - <header> - <button name="action_next" string="Start" type="object" class="oe_highlight"/> - or - <button string="Cancel" class="oe_link" special="cancel" /> - </header> <group> <field name="survey_id" on_change="on_change_survey(survey_id)"/> </group> <field name="note" placeholder="Add Description" attrs="{'readonly': [('survey_id','=',False)]}"/> + <footer> + <button name="action_next" string="Start" type="object" class="oe_highlight"/> + or + <button string="Cancel" class="oe_link" special="cancel" /> + </footer> </form> </field> </record> diff --git a/addons/survey/wizard/survey_send_invitation.xml b/addons/survey/wizard/survey_send_invitation.xml index a611973d772..fb3d7edf856 100644 --- a/addons/survey/wizard/survey_send_invitation.xml +++ b/addons/survey/wizard/survey_send_invitation.xml @@ -9,11 +9,6 @@ <field name="model">survey.send.invitation</field> <field name="arch" type="xml"> <form string="Send Invitation" version="7.0"> - <header> - <button name="action_send" string="_Send" type="object" class="oe_highlight"/> - or - <button string="Cancel" class="oe_link" special="cancel" /> - </header> <group col="4"> <separator string="Select Partner" colspan="4"/> <field name="partner_ids" nolabel="1" colspan="4" widget="many2many_tags"/> @@ -28,6 +23,11 @@ <separator string="Message" colspan="4"/> <field name="mail" nolabel="1" colspan="4"/> </group> + <footer> + <button name="action_send" string="_Send" type="object" class="oe_highlight"/> + or + <button string="Cancel" class="oe_link" special="cancel" /> + </footer> </form> </field> </record> diff --git a/addons/warning/warning_view.xml b/addons/warning/warning_view.xml index 1df38771e9c..04a35530bd2 100644 --- a/addons/warning/warning_view.xml +++ b/addons/warning/warning_view.xml @@ -41,7 +41,7 @@ <record id="product_warning_form_view" model="ir.ui.view"> <field name="name">product.warning.form.inherit</field> <field name="model">product.product</field> - <field name="inherit_id" ref="procurement.product_template_form_view_procurement"/> + <field name="inherit_id" ref="product.product_normal_form_view"/> <field name="arch" type="xml"> <notebook position="inside"> <page string="Warnings"> diff --git a/addons/web_shortcuts/i18n/th.po b/addons/web_shortcuts/i18n/th.po new file mode 100644 index 00000000000..e520bfe2f20 --- /dev/null +++ b/addons/web_shortcuts/i18n/th.po @@ -0,0 +1,25 @@ +# Thai translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2012-12-21 17:06+0000\n" +"PO-Revision-Date: 2013-06-17 05:48+0000\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: Thai <th@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-06-18 05:46+0000\n" +"X-Generator: Launchpad (build 16673)\n" + +#. module: web_shortcuts +#. openerp-web +#: code:addons/web_shortcuts/static/src/xml/web_shortcuts.xml:21 +#, python-format +msgid "Add / Remove Shortcut..." +msgstr "เพิ่ม / ลบ ทางลัด ..." |
