[Merge] Merged with main addons
bzr revid: mansi.mk.179@gmail.com-20130812091443-xn1p6tvotr435163
This commit is contained in:
@@ -0,0 +1,361 @@
|
||||
# Russian 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-08-05 10:40+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Russian <ru@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-08-06 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build 16718)\n"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: help:account.bank.statement.line.global,name:0
|
||||
msgid "Originator to Beneficiary Information"
|
||||
msgstr "Информация от плательщика получателю"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
#: selection:account.bank.statement.line,state:0
|
||||
msgid "Confirmed"
|
||||
msgstr "Подтверждено"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement:0
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Glob. Id"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: selection:account.bank.statement.line.global,type:0
|
||||
msgid "CODA"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line.global,parent_id:0
|
||||
msgid "Parent Code"
|
||||
msgstr "Основной код"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Debit"
|
||||
msgstr "Дебет"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:cancel.statement.line:0
|
||||
#: model:ir.actions.act_window,name:account_bank_statement_extensions.action_cancel_statement_line
|
||||
#: model:ir.model,name:account_bank_statement_extensions.model_cancel_statement_line
|
||||
msgid "Cancel selected statement lines"
|
||||
msgstr "Отмена выбранных позиций выписки"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line,val_date:0
|
||||
msgid "Value Date"
|
||||
msgstr "Дата зачисления"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Group By..."
|
||||
msgstr "Группировать по ..."
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
#: selection:account.bank.statement.line,state:0
|
||||
msgid "Draft"
|
||||
msgstr "Черновик"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Statement"
|
||||
msgstr "Выписка"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:confirm.statement.line:0
|
||||
#: model:ir.actions.act_window,name:account_bank_statement_extensions.action_confirm_statement_line
|
||||
#: model:ir.model,name:account_bank_statement_extensions.model_confirm_statement_line
|
||||
msgid "Confirm selected statement lines"
|
||||
msgstr "Подтверждение выбранных позиций выписки"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: report:bank.statement.balance.report:0
|
||||
#: model:ir.actions.report.xml,name:account_bank_statement_extensions.bank_statement_balance_report
|
||||
msgid "Bank Statement Balances Report"
|
||||
msgstr "Отчет об остатках банковской выписки"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:cancel.statement.line:0
|
||||
msgid "Cancel Lines"
|
||||
msgstr "Отменить позиции"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line.global:0
|
||||
#: model:ir.model,name:account_bank_statement_extensions.model_account_bank_statement_line_global
|
||||
msgid "Batch Payment Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line,state:0
|
||||
msgid "Status"
|
||||
msgstr "Статус"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: code:addons/account_bank_statement_extensions/account_bank_statement.py:129
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Delete operation not allowed. Please go to the associated bank "
|
||||
"statement in order to delete and/or modify bank statement line."
|
||||
msgstr ""
|
||||
"Операция удаления запрещена. Пожалуйста, обратитесь к соответствующей "
|
||||
"банковской выписке для удаления/изменения позиции."
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:confirm.statement.line:0
|
||||
msgid "or"
|
||||
msgstr "или"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:confirm.statement.line:0
|
||||
msgid "Confirm Lines"
|
||||
msgstr "Подтвердить позиции"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line.global:0
|
||||
msgid "Transactions"
|
||||
msgstr "Операции"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line.global,type:0
|
||||
msgid "Type"
|
||||
msgstr "Тип"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
#: report:bank.statement.balance.report:0
|
||||
msgid "Journal"
|
||||
msgstr "Журнал"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Confirmed Statement Lines."
|
||||
msgstr "Подтвержденные позиции выписки."
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Credit Transactions."
|
||||
msgstr "Операции по кредиту"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: model:ir.actions.act_window,help:account_bank_statement_extensions.action_cancel_statement_line
|
||||
msgid "cancel selected statement lines."
|
||||
msgstr "отменить выбранные позиции выписки"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line,counterparty_number:0
|
||||
msgid "Counterparty Number"
|
||||
msgstr "Число контрагентов"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: report:bank.statement.balance.report:0
|
||||
msgid "Closing Balance"
|
||||
msgstr "Итоговый баланс"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: report:bank.statement.balance.report:0
|
||||
msgid "Date"
|
||||
msgstr "Дата"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
#: field:account.bank.statement.line,globalisation_amount:0
|
||||
msgid "Glob. Amount"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Debit Transactions."
|
||||
msgstr "Операции по дебету"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Extended Filters..."
|
||||
msgstr "Расширенные фильтры..."
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:confirm.statement.line:0
|
||||
msgid "Confirmed lines cannot be changed anymore."
|
||||
msgstr "Нельзя изменить подтвержденные позиции."
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:cancel.statement.line:0
|
||||
msgid "Are you sure you want to cancel the selected Bank Statement lines ?"
|
||||
msgstr ""
|
||||
"Вы уверены, что хотите отменить выбранные позиции банковской выписки ?"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: report:bank.statement.balance.report:0
|
||||
msgid "Name"
|
||||
msgstr "Название"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line.global,name:0
|
||||
msgid "OBI"
|
||||
msgstr "Назначение"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: selection:account.bank.statement.line.global,type:0
|
||||
msgid "ISO 20022"
|
||||
msgstr "ISO 20022"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Notes"
|
||||
msgstr "Примечания"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: selection:account.bank.statement.line.global,type:0
|
||||
msgid "Manual"
|
||||
msgstr "Ручной"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Bank Transaction"
|
||||
msgstr "Банковские операции"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Credit"
|
||||
msgstr "Кредит"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line.global,amount:0
|
||||
msgid "Amount"
|
||||
msgstr "Сумма"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Fin.Account"
|
||||
msgstr "Фин. Счет"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line,counterparty_currency:0
|
||||
msgid "Counterparty Currency"
|
||||
msgstr "Валюта контрагента"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line,counterparty_bic:0
|
||||
msgid "Counterparty BIC"
|
||||
msgstr "БИК контрагента"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line.global,child_ids:0
|
||||
msgid "Child Codes"
|
||||
msgstr "Субкоды"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Search Bank Transactions"
|
||||
msgstr "Поиск банковских операций"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:confirm.statement.line:0
|
||||
msgid "Are you sure you want to confirm the selected Bank Statement lines ?"
|
||||
msgstr ""
|
||||
"Вы уверены, что хотите, подтвердить выбранные позиции банковской выписки ?"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: help:account.bank.statement.line,globalisation_id:0
|
||||
msgid ""
|
||||
"Code to identify transactions belonging to the same globalisation level "
|
||||
"within a batch payment"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Draft Statement Lines."
|
||||
msgstr "Черновики позиций выписки."
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Glob. Am."
|
||||
msgstr ""
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: model:ir.model,name:account_bank_statement_extensions.model_account_bank_statement_line
|
||||
msgid "Bank Statement Line"
|
||||
msgstr "Позиция банковской выписки"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line.global,code:0
|
||||
msgid "Code"
|
||||
msgstr "Код"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line,counterparty_name:0
|
||||
msgid "Counterparty Name"
|
||||
msgstr "Название контрагента"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: model:ir.model,name:account_bank_statement_extensions.model_res_partner_bank
|
||||
msgid "Bank Accounts"
|
||||
msgstr "Банковские счета"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: model:ir.model,name:account_bank_statement_extensions.model_account_bank_statement
|
||||
msgid "Bank Statement"
|
||||
msgstr "Банковская выписка"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Statement Line"
|
||||
msgstr "Позиция выписки"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: sql_constraint:account.bank.statement.line.global:0
|
||||
msgid "The code must be unique !"
|
||||
msgstr "Код должен быть уникальным !"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line.global,bank_statement_line_ids:0
|
||||
#: model:ir.actions.act_window,name:account_bank_statement_extensions.action_bank_statement_line
|
||||
#: model:ir.ui.menu,name:account_bank_statement_extensions.bank_statement_line
|
||||
msgid "Bank Statement Lines"
|
||||
msgstr "Позиции банковской выписки"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: code:addons/account_bank_statement_extensions/account_bank_statement.py:129
|
||||
#, python-format
|
||||
msgid "Warning!"
|
||||
msgstr "Внимание!"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line.global:0
|
||||
msgid "Child Batch Payments"
|
||||
msgstr ""
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:confirm.statement.line:0
|
||||
msgid "Cancel"
|
||||
msgstr "Отмена"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Statement Lines"
|
||||
msgstr "Позиции выписки"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: view:account.bank.statement.line:0
|
||||
msgid "Total Amount"
|
||||
msgstr "Итоговая сумма"
|
||||
|
||||
#. module: account_bank_statement_extensions
|
||||
#: field:account.bank.statement.line,globalisation_id:0
|
||||
msgid "Globalisation ID"
|
||||
msgstr ""
|
||||
@@ -0,0 +1,246 @@
|
||||
# Bosnian 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-08-08 22:05+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Bosnian <bs@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-08-09 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 16723)\n"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: selection:res.company,check_layout:0
|
||||
msgid "Check on Top"
|
||||
msgstr "Ček na vrhu"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: report:account.print.check.top:0
|
||||
msgid "Open Balance"
|
||||
msgstr "Otvoreno saldo"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: view:account.check.write:0
|
||||
#: view:account.voucher:0
|
||||
msgid "Print Check"
|
||||
msgstr "Štampaj ček"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: selection:res.company,check_layout:0
|
||||
msgid "Check in middle"
|
||||
msgstr "Ćek u sredini"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: help:res.company,check_layout:0
|
||||
msgid ""
|
||||
"Check on top is compatible with Quicken, QuickBooks and Microsoft Money. "
|
||||
"Check in middle is compatible with Peachtree, ACCPAC and DacEasy. Check on "
|
||||
"bottom is compatible with Peachtree, ACCPAC and DacEasy only"
|
||||
msgstr ""
|
||||
"Ček na vrhu je kompatibilan sa Quicken, QuickBooks i Microsoft Money. Ček u "
|
||||
"sredini je kompatibilan sa Peachtree, ACCPAC i DacEasy. Ček na dnu je "
|
||||
"kompatibilan sa Peachtree, ACCPAC i DacEasy samo"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: selection:res.company,check_layout:0
|
||||
msgid "Check on bottom"
|
||||
msgstr "Ćek na dnu"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: model:ir.actions.act_window,name:account_check_writing.action_account_check_write
|
||||
msgid "Print Check in Batch"
|
||||
msgstr "Štampaj čekove grupno"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: code:addons/account_check_writing/wizard/account_check_batch_printing.py:59
|
||||
#, python-format
|
||||
msgid "One of the printed check already got a number."
|
||||
msgstr "Jedan od odštampanih čekova je već dobio broj."
|
||||
|
||||
#. module: account_check_writing
|
||||
#: help:account.journal,allow_check_writing:0
|
||||
msgid "Check this if the journal is to be used for writing checks."
|
||||
msgstr ""
|
||||
"Označite ovo ako će se za pisanje čekova koristiti dnevnik knjiženja."
|
||||
|
||||
#. module: account_check_writing
|
||||
#: field:account.journal,allow_check_writing:0
|
||||
msgid "Allow Check writing"
|
||||
msgstr "Dozvoli pisanje čekova"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: report:account.print.check.bottom:0
|
||||
#: report:account.print.check.middle:0
|
||||
#: report:account.print.check.top:0
|
||||
msgid "Description"
|
||||
msgstr "Opis"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: model:ir.model,name:account_check_writing.model_account_journal
|
||||
msgid "Journal"
|
||||
msgstr "Dnevnik knjiženja"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: model:ir.actions.act_window,name:account_check_writing.action_write_check
|
||||
#: model:ir.ui.menu,name:account_check_writing.menu_action_write_check
|
||||
msgid "Write Checks"
|
||||
msgstr "Piši čekove"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: report:account.print.check.bottom:0
|
||||
#: report:account.print.check.middle:0
|
||||
#: report:account.print.check.top:0
|
||||
msgid "Discount"
|
||||
msgstr "Popust"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: report:account.print.check.bottom:0
|
||||
#: report:account.print.check.middle:0
|
||||
#: report:account.print.check.top:0
|
||||
msgid "Original Amount"
|
||||
msgstr "Originalni iznos"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: field:res.company,check_layout:0
|
||||
msgid "Check Layout"
|
||||
msgstr "Raspored čeka"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: field:account.voucher,allow_check:0
|
||||
msgid "Allow Check Writing"
|
||||
msgstr "Dozvoli pisanje čeka"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: report:account.print.check.bottom:0
|
||||
#: report:account.print.check.middle:0
|
||||
#: report:account.print.check.top:0
|
||||
msgid "Payment"
|
||||
msgstr "Plaćanje"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: field:account.journal,use_preprint_check:0
|
||||
msgid "Use Preprinted Check"
|
||||
msgstr "Koristi pred-odštampane čekove"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: model:ir.actions.report.xml,name:account_check_writing.account_print_check_bottom
|
||||
msgid "Print Check (Bottom)"
|
||||
msgstr "Štampaj ček (donji)"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: model:ir.actions.act_window,help:account_check_writing.action_write_check
|
||||
msgid ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Click to create a new check. \n"
|
||||
" </p><p>\n"
|
||||
" The check payment form allows you to track the payment you "
|
||||
"do\n"
|
||||
" to your suppliers using checks. When you select a supplier, "
|
||||
"the\n"
|
||||
" payment method and an amount for the payment, OpenERP will\n"
|
||||
" propose to reconcile your payment with the open supplier\n"
|
||||
" invoices or bills.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Kliknite da kreirate nove čekove. \n"
|
||||
" </p><p>\n"
|
||||
" Forma plaćanje čekom omogućava vam da pratite plaćanja koja "
|
||||
"izvršavate\n"
|
||||
" vašim dobavljačima koristeći čekove. Kada odaberete "
|
||||
"dobavljača,\n"
|
||||
" metodu plaćanja i iznos za plaćanje, OpenERP će predložiti "
|
||||
"da izravna\n"
|
||||
" vašu uplatu sa otvorenom fakturom ili računom dobavljača.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
|
||||
#. module: account_check_writing
|
||||
#: report:account.print.check.bottom:0
|
||||
#: report:account.print.check.middle:0
|
||||
#: report:account.print.check.top:0
|
||||
msgid "Due Date"
|
||||
msgstr "Datum dospijeća"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: model:ir.actions.report.xml,name:account_check_writing.account_print_check_middle
|
||||
msgid "Print Check (Middle)"
|
||||
msgstr "Štampaj ček (srednji)"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: model:ir.model,name:account_check_writing.model_res_company
|
||||
msgid "Companies"
|
||||
msgstr "Kompanije"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: code:addons/account_check_writing/wizard/account_check_batch_printing.py:59
|
||||
#, python-format
|
||||
msgid "Error!"
|
||||
msgstr "Greška!"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: help:account.check.write,check_number:0
|
||||
msgid "The number of the next check number to be printed."
|
||||
msgstr "Broj sljedećeg čeka za štampanje."
|
||||
|
||||
#. module: account_check_writing
|
||||
#: report:account.print.check.bottom:0
|
||||
#: report:account.print.check.middle:0
|
||||
msgid "Balance Due"
|
||||
msgstr "Saldo valute"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: model:ir.actions.report.xml,name:account_check_writing.account_print_check_top
|
||||
msgid "Print Check (Top)"
|
||||
msgstr "Štampaj ček (na vrhu)"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: report:account.print.check.bottom:0
|
||||
#: report:account.print.check.middle:0
|
||||
#: report:account.print.check.top:0
|
||||
msgid "Check Amount"
|
||||
msgstr "Iznos čeka"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: model:ir.model,name:account_check_writing.model_account_voucher
|
||||
msgid "Accounting Voucher"
|
||||
msgstr "Računovodstveni vaučer"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: view:account.check.write:0
|
||||
msgid "or"
|
||||
msgstr "ili"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: field:account.voucher,amount_in_word:0
|
||||
msgid "Amount in Word"
|
||||
msgstr "Pisani iznos"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: model:ir.model,name:account_check_writing.model_account_check_write
|
||||
msgid "Prin Check in Batch"
|
||||
msgstr "Štampaj čekove grupno"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: view:account.check.write:0
|
||||
msgid "Cancel"
|
||||
msgstr "Otkaži"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: field:account.check.write,check_number:0
|
||||
msgid "Next Check Number"
|
||||
msgstr "Sljedeći broj čeka"
|
||||
|
||||
#. module: account_check_writing
|
||||
#: view:account.check.write:0
|
||||
msgid "Check"
|
||||
msgstr "Ček"
|
||||
@@ -0,0 +1,80 @@
|
||||
# Bosnian 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-08-08 22:20+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Bosnian <bs@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-08-09 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 16723)\n"
|
||||
|
||||
#. module: base_status
|
||||
#: code:addons/base_status/base_state.py:107
|
||||
#, python-format
|
||||
msgid "Error !"
|
||||
msgstr "Greška !"
|
||||
|
||||
#. module: base_status
|
||||
#: code:addons/base_status/base_state.py:166
|
||||
#, python-format
|
||||
msgid "%s has been <b>opened</b>."
|
||||
msgstr "%s je bio <b>otvoren</b>."
|
||||
|
||||
#. module: base_status
|
||||
#: code:addons/base_status/base_state.py:199
|
||||
#, python-format
|
||||
msgid "%s has been <b>renewed</b>."
|
||||
msgstr "%s je bio <b>obnovljen</b>."
|
||||
|
||||
#. module: base_status
|
||||
#: code:addons/base_status/base_stage.py:210
|
||||
#, python-format
|
||||
msgid "Error!"
|
||||
msgstr "Greška!"
|
||||
|
||||
#. module: base_status
|
||||
#: code:addons/base_status/base_state.py:107
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You can not escalate, you are already at the top level regarding your sales-"
|
||||
"team category."
|
||||
msgstr ""
|
||||
"Ne možete eskalirati, već ste na najvišem nivou u odnosu na kategoriju "
|
||||
"prodajnog tima."
|
||||
|
||||
#. module: base_status
|
||||
#: code:addons/base_status/base_state.py:193
|
||||
#, python-format
|
||||
msgid "%s is now <b>pending</b>."
|
||||
msgstr "%s je sad <b>Na čekanju</b>."
|
||||
|
||||
#. module: base_status
|
||||
#: code:addons/base_status/base_state.py:187
|
||||
#, python-format
|
||||
msgid "%s has been <b>canceled</b>."
|
||||
msgstr "%s je bio <b>otkazan</b>."
|
||||
|
||||
#. module: base_status
|
||||
#: code:addons/base_status/base_stage.py:210
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You are already at the top level of your sales-team category.\n"
|
||||
"Therefore you cannot escalate furthermore."
|
||||
msgstr ""
|
||||
"Već ste na najvišem nivou vaše kategorije prodajnog tima.\n"
|
||||
"Zato ne možete dalje eskalirati."
|
||||
|
||||
#. module: base_status
|
||||
#: code:addons/base_status/base_state.py:181
|
||||
#, python-format
|
||||
msgid "%s has been <b>closed</b>."
|
||||
msgstr "%s je bio <b>zatvoren</b>."
|
||||
@@ -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-07-23 03:21+0000\n"
|
||||
"PO-Revision-Date: 2013-08-06 09:41+0000\n"
|
||||
"Last-Translator: fanvil <fanvil@hotmail.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-07-24 05:31+0000\n"
|
||||
"X-Generator: Launchpad (build 16700)\n"
|
||||
"X-Launchpad-Export-Date: 2013-08-07 04:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16721)\n"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.lead.report:0
|
||||
@@ -185,7 +185,7 @@ msgstr "预计结束月份"
|
||||
msgid ""
|
||||
"Holds the Chatter summary (number of messages, ...). This summary is "
|
||||
"directly in html format in order to be inserted in kanban views."
|
||||
msgstr "保留复杂的摘要(消息数量,……等)。为了插入到看板视图,这一摘要直接是是HTML格式。"
|
||||
msgstr "保留复杂的摘要(消息数量,……等)。这一摘要直接是是HTML格式,以便插入到看板视图。"
|
||||
|
||||
#. module: crm
|
||||
#: code:addons/crm/crm_lead.py:640
|
||||
@@ -583,6 +583,7 @@ msgid ""
|
||||
" If the call needs to be done then the status is set "
|
||||
"to 'Not Held'."
|
||||
msgstr ""
|
||||
"当一个案子新建时,状态被设为‘待处理’,当案子进行中,状态被设为‘打开’,当电话结束,状态被设为‘挂起’。如果需要电话,状态设为‘未挂起’"
|
||||
|
||||
#. module: crm
|
||||
#: field:crm.case.section,message_summary:0
|
||||
@@ -843,7 +844,7 @@ msgstr "参考2"
|
||||
msgid ""
|
||||
"Link between stages and sales teams. When set, this limitate the current "
|
||||
"stage to the selected sales teams."
|
||||
msgstr ""
|
||||
msgstr "在阶段和销售团队之间建立链接。设置后将限制此阶段只能用于被选中的销售团队。"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.case.stage:0
|
||||
@@ -979,7 +980,7 @@ msgstr "下一动作"
|
||||
#: code:addons/crm/crm_lead.py:780
|
||||
#, python-format
|
||||
msgid "<b>Partner</b> set to <em>%s</em>."
|
||||
msgstr ""
|
||||
msgstr "<b>业务伙伴</b> 设给 <em>%s</em>."
|
||||
|
||||
#. module: crm
|
||||
#: selection:crm.lead.report,state:0
|
||||
@@ -1338,7 +1339,7 @@ msgstr "发送邮件的时候,默认的邮件地址来自销售团队。"
|
||||
msgid ""
|
||||
"Phone Calls Assigned to the current user or with a team having the current "
|
||||
"user as team leader"
|
||||
msgstr ""
|
||||
msgstr "被分配给当前用户或者当前用户领导的销售团队的电话沟通任务。"
|
||||
|
||||
#. module: crm
|
||||
#: view:crm.segmentation:0
|
||||
@@ -2884,7 +2885,7 @@ msgstr "发现日期"
|
||||
#. module: crm
|
||||
#: view:crm.lead:0
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
msgstr "在"
|
||||
|
||||
#. module: crm
|
||||
#: model:crm.case.stage,name:crm.stage_lead1
|
||||
|
||||
@@ -8,19 +8,19 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2013-06-27 16:03+0000\n"
|
||||
"PO-Revision-Date: 2012-12-12 12:51+0000\n"
|
||||
"Last-Translator: Pedro Manuel Baeza <pedro.baeza@gmail.com>\n"
|
||||
"PO-Revision-Date: 2013-08-07 02:00+0000\n"
|
||||
"Last-Translator: Alejandro Santana <alejandrosantana@anubia.es>\n"
|
||||
"Language-Team: Spanish <es@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-28 05:42+0000\n"
|
||||
"X-Generator: Launchpad (build 16681)\n"
|
||||
"X-Launchpad-Export-Date: 2013-08-08 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build 16723)\n"
|
||||
|
||||
#. module: google_drive
|
||||
#: model:ir.ui.menu,name:google_drive.menu_google_drive_config
|
||||
msgid "Google Drive configuration"
|
||||
msgstr ""
|
||||
msgstr "Configuración de Google Drive"
|
||||
|
||||
#. module: google_drive
|
||||
#: code:addons/google_drive/google_drive.py:48
|
||||
@@ -39,6 +39,11 @@ msgid ""
|
||||
"in your Google Drive and in OpenERP attachment will be named\n"
|
||||
" 'Agrolait_SO0001_Sales'."
|
||||
msgstr ""
|
||||
"El nombre del documento adjunto puede contener información fija o variable. "
|
||||
"Para distinguir documentos en Google Drive, use palabras y campos fijos. "
|
||||
"Así, en el ejemplo anterior, si se escribió 'Agrolait_%(name)s_Sales' en el "
|
||||
"campo de nombre de GoogleDrive, el documento en su Google Drive y en los "
|
||||
"adjuntos de OpenERP se llamarán 'Agrolait_SO0001_Sales'."
|
||||
|
||||
#. module: google_drive
|
||||
#: view:google.drive.config:0
|
||||
@@ -46,16 +51,18 @@ msgid ""
|
||||
"- If filter is not specified, link of google document will appear in "
|
||||
"\"More\" option for all users for all opportunities."
|
||||
msgstr ""
|
||||
"- Si no especifica un filtro, el enlace del documento de Google aparecerá en "
|
||||
"la opción \"Más\" para todos los usuarios para todas las oportunidades."
|
||||
|
||||
#. module: google_drive
|
||||
#: view:google.drive.config:0
|
||||
msgid "To create a new filter:"
|
||||
msgstr ""
|
||||
msgstr "Para crear un nuevo filtro:"
|
||||
|
||||
#. module: google_drive
|
||||
#: model:ir.model,name:google_drive.model_base_config_settings
|
||||
msgid "base.config.settings"
|
||||
msgstr ""
|
||||
msgstr "base.config.settings"
|
||||
|
||||
#. module: google_drive
|
||||
#: model:ir.actions.act_window,help:google_drive.action_google_drive_users_config
|
||||
@@ -73,17 +80,29 @@ msgid ""
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Pulse para añadir una plantilla.\n"
|
||||
" </p>\n"
|
||||
" <p>\n"
|
||||
" Enlace sus propias plantillas de Google Drive a "
|
||||
"cualquier registro de OpenERP. Si tiene documentos realmente específicos que "
|
||||
"quiere que su colaborador rellene (como usar una hoja de cálculo para "
|
||||
"controlar la calidad de su producto o revisar los detalles de entrega de "
|
||||
"cada pedido en un país extranjero,...) es muy sencillo gestionarlo. "
|
||||
"Enlácelos en OpenERP y úselos para colaborar con sus empleados.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
|
||||
#. module: google_drive
|
||||
#: code:addons/google_drive/google_drive.py:150
|
||||
#, python-format
|
||||
msgid "Incorrect URL!"
|
||||
msgstr ""
|
||||
msgstr "¡URL incorrecta!"
|
||||
|
||||
#. module: google_drive
|
||||
#: view:base.config.settings:0
|
||||
msgid "Configure your templates"
|
||||
msgstr ""
|
||||
msgstr "Configure sus plantillas"
|
||||
|
||||
#. module: google_drive
|
||||
#: help:google.drive.config,name_template:0
|
||||
@@ -91,6 +110,8 @@ msgid ""
|
||||
"Choose how the new google drive will be named, on google side. Eg. "
|
||||
"gdoc_%(field_name)s"
|
||||
msgstr ""
|
||||
"Elija el nombre de la nueva unidad de Google Drive, en el lado de Google. "
|
||||
"P.ej.: gdoc_%(field_name)s"
|
||||
|
||||
#. module: google_drive
|
||||
#: view:google.drive.config:0
|
||||
@@ -98,6 +119,8 @@ msgid ""
|
||||
"- Go to the OpenERP document you want to filter. For instance, go to "
|
||||
"Opportunities and search on Sales Department."
|
||||
msgstr ""
|
||||
"- Vaya al documento de OpenERP que quiera filtrar. Por ejemplo, vaya a "
|
||||
"Oportunidades y busque en el Departamento de ventas."
|
||||
|
||||
#. module: google_drive
|
||||
#: view:google.drive.config:0
|
||||
@@ -105,6 +128,8 @@ msgid ""
|
||||
"- In this \"Search\" view, select the option \"Save Current Filter\", enter "
|
||||
"the name (Ex: Sales Department)"
|
||||
msgstr ""
|
||||
"- En esta vista de \"Búsqueda\", seleccione la opción \"Guardar filtro "
|
||||
"actual\" e introduzca el nombre (p.ej.: Departamento de ventas)"
|
||||
|
||||
#. module: google_drive
|
||||
#: view:google.drive.config:0
|
||||
@@ -113,6 +138,9 @@ msgid ""
|
||||
"\"More\" options will appear for all users in opportunities of Sales "
|
||||
"Department."
|
||||
msgstr ""
|
||||
"- Si selecciona \"Compartir con todos los usuarios\", el enlace al documento "
|
||||
"de Google en la opción \"Más\" aparecerá para todos los usuarios en las "
|
||||
"oportunidades del Departamento de ventas."
|
||||
|
||||
#. module: google_drive
|
||||
#: view:google.drive.config:0
|
||||
@@ -121,23 +149,28 @@ msgid ""
|
||||
"\"More\" options will not appear for other users in opportunities of Sales "
|
||||
"Department."
|
||||
msgstr ""
|
||||
"- Si no selecciona \"Compartir con todos los usuarios\", el enlace al "
|
||||
"documento de Google en la opción \"Más\" no aparecerá para otros usuarios en "
|
||||
"las oportunidades del Departamento de ventas."
|
||||
|
||||
#. module: google_drive
|
||||
#: code:addons/google_drive/google_drive.py:48
|
||||
#, python-format
|
||||
msgid "At least one key cannot be found in your Google Drive name pattern"
|
||||
msgstr ""
|
||||
"No se ha podido encontrar al menos una clave de su patrón de nombres de "
|
||||
"Google Drive"
|
||||
|
||||
#. module: google_drive
|
||||
#: code:addons/google_drive/google_drive.py:150
|
||||
#, python-format
|
||||
msgid "Please enter a valid Google Document URL."
|
||||
msgstr ""
|
||||
msgstr "Por favor, introduzca una URL de documento de Google válida."
|
||||
|
||||
#. module: google_drive
|
||||
#: field:google.drive.config,google_drive_client_id:0
|
||||
msgid "Google Client "
|
||||
msgstr ""
|
||||
msgstr "Cliente de Google "
|
||||
|
||||
#. module: google_drive
|
||||
#: view:google.drive.config:0
|
||||
@@ -145,43 +178,45 @@ msgid ""
|
||||
"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu"
|
||||
"a4/edit"
|
||||
msgstr ""
|
||||
"https://docs.google.com/document/d/1vOtpJK9scIQz6taD9tJRIETWbEw3fSiaQHArsJYcu"
|
||||
"a4/edit"
|
||||
|
||||
#. module: google_drive
|
||||
#: field:google.drive.config,filter_id:0
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
msgstr "Filtro"
|
||||
|
||||
#. module: google_drive
|
||||
#: field:google.drive.config,name_template:0
|
||||
msgid "Google Drive Name Pattern"
|
||||
msgstr ""
|
||||
msgstr "Patrón de nombres de Google Drive"
|
||||
|
||||
#. module: google_drive
|
||||
#: help:base.config.settings,google_drive_uri:0
|
||||
msgid "The URL to generate the authorization code from Google"
|
||||
msgstr ""
|
||||
msgstr "La URL para generar el código de autorización de Google"
|
||||
|
||||
#. module: google_drive
|
||||
#: model:ir.filters,name:google_drive.filter_partner
|
||||
msgid "Customer"
|
||||
msgstr ""
|
||||
msgstr "Cliente"
|
||||
|
||||
#. module: google_drive
|
||||
#: field:google.drive.config,google_drive_resource_id:0
|
||||
msgid "Resource Id"
|
||||
msgstr ""
|
||||
msgstr "ID del recurso"
|
||||
|
||||
#. module: google_drive
|
||||
#: code:addons/google_drive/google_drive.py:91
|
||||
#, python-format
|
||||
msgid "The Google Template cannot be found. Maybe it has been deleted."
|
||||
msgstr ""
|
||||
msgstr "No se encuentra la plantilla de Google. Tal vez se haya eliminado."
|
||||
|
||||
#. module: google_drive
|
||||
#: model:ir.actions.act_window,name:google_drive.action_google_drive_users_config
|
||||
#: model:ir.ui.menu,name:google_drive.menu_google_drive_model_config
|
||||
msgid "Google Drive Templates"
|
||||
msgstr ""
|
||||
msgstr "Plantillas de Google Drive"
|
||||
|
||||
#. module: google_drive
|
||||
#: code:addons/google_drive/google_drive.py:81
|
||||
@@ -190,23 +225,27 @@ msgid ""
|
||||
"Something went wrong during the token generation. Please request again an "
|
||||
"authorization code in %(menu:base_setup.menu_general_configuration)s."
|
||||
msgstr ""
|
||||
"Algo ha ido mal durante la creación del testigo. Por favor, solicite un "
|
||||
"código de autorización otra vez en "
|
||||
"%(menu:base_setup.menu_general_configuration)s."
|
||||
|
||||
#. module: google_drive
|
||||
#: code:addons/google_drive/google_drive.py:124
|
||||
#, python-format
|
||||
msgid "Google Drive Error!"
|
||||
msgstr ""
|
||||
msgstr "¡Error de Google Drive!"
|
||||
|
||||
#. module: google_drive
|
||||
#: field:base.config.settings,google_drive_uri:0
|
||||
msgid "URI"
|
||||
msgstr ""
|
||||
msgstr "URI"
|
||||
|
||||
#. module: google_drive
|
||||
#: code:addons/google_drive/google_drive.py:124
|
||||
#, python-format
|
||||
msgid "Creating google drive may only be done by one at a time."
|
||||
msgstr ""
|
||||
"Es posible que la creación de Google Drive sólo se pueda hacer de una en una."
|
||||
|
||||
#. module: google_drive
|
||||
#: field:google.drive.config,model:0
|
||||
@@ -217,38 +256,40 @@ msgstr "Modelo"
|
||||
#. module: google_drive
|
||||
#: view:google.drive.config:0
|
||||
msgid "Google Drive Configuration"
|
||||
msgstr ""
|
||||
msgstr "Configuración de Google Drive"
|
||||
|
||||
#. module: google_drive
|
||||
#: field:google.drive.config,name:0
|
||||
msgid "Template Name"
|
||||
msgstr ""
|
||||
msgstr "Nombre de la plantilla"
|
||||
|
||||
#. module: google_drive
|
||||
#: constraint:google.drive.config:0
|
||||
msgid ""
|
||||
"Model of selected filter is not matching with model of current template."
|
||||
msgstr ""
|
||||
"El modelo del filtro seleccionado no coincide con el modelo de la plantilla "
|
||||
"actual."
|
||||
|
||||
#. module: google_drive
|
||||
#: field:google.drive.config,google_drive_template_url:0
|
||||
msgid "Template URL"
|
||||
msgstr ""
|
||||
msgstr "URL de la plantilla"
|
||||
|
||||
#. module: google_drive
|
||||
#: view:base.config.settings:0
|
||||
msgid "and paste it here"
|
||||
msgstr ""
|
||||
msgstr "y péguela aquí"
|
||||
|
||||
#. module: google_drive
|
||||
#: field:base.config.settings,google_drive_authorization_code:0
|
||||
msgid "Authorization Code"
|
||||
msgstr ""
|
||||
msgstr "Cídigo de autorización"
|
||||
|
||||
#. module: google_drive
|
||||
#: model:ir.model,name:google_drive.model_google_drive_config
|
||||
msgid "Google Drive templates config"
|
||||
msgstr ""
|
||||
msgstr "Configuración de plantillas de Google Drive"
|
||||
|
||||
#. module: google_drive
|
||||
#: code:addons/google_drive/google_drive.py:64
|
||||
@@ -257,3 +298,6 @@ msgid ""
|
||||
"You haven't configured 'Authorization Code' generated from google, Please "
|
||||
"generate and configure it in %(menu:base_setup.menu_general_configuration)s."
|
||||
msgstr ""
|
||||
"No ha configurado el 'código de autorización' generado por Google. Por "
|
||||
"favor, genérelo y configúrelo en "
|
||||
"%(menu:base_setup.menu_general_configuration)s."
|
||||
|
||||
@@ -19,13 +19,16 @@
|
||||
##############################################################################
|
||||
|
||||
import simplejson
|
||||
import logging
|
||||
from lxml import etree
|
||||
import re
|
||||
import requests
|
||||
import urllib
|
||||
import urllib2
|
||||
|
||||
from openerp.osv import osv
|
||||
from openerp import SUPERUSER_ID
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
class config(osv.osv):
|
||||
_inherit = 'google.drive.config'
|
||||
@@ -83,7 +86,14 @@ class config(osv.osv):
|
||||
</entry>
|
||||
</feed>''' % (spreadsheet_key, spreadsheet_key, spreadsheet_key, formula.replace('"', '"'), spreadsheet_key, spreadsheet_key, config_formula.replace('"', '"'))
|
||||
|
||||
requests.post('https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/batch?v=3&access_token=%s' % (spreadsheet_key, access_token), data=request, headers={'content-type': 'application/atom+xml', 'If-Match': '*'})
|
||||
try:
|
||||
req = urllib2.Request(
|
||||
'https://spreadsheets.google.com/feeds/cells/%s/od6/private/full/batch?%s' % (spreadsheet_key, urllib.urlencode({'v': 3, 'access_token': access_token})),
|
||||
data=request,
|
||||
headers={'content-type': 'application/atom+xml', 'If-Match': '*'})
|
||||
urllib2.urlopen(req)
|
||||
except (urllib2.HTTPError, urllib2.URLError):
|
||||
_logger.warning("An error occured while writting the formula on the Google Spreadsheet.")
|
||||
|
||||
description = '''
|
||||
formula: %s
|
||||
|
||||
@@ -83,7 +83,6 @@ Main Features
|
||||
'static/src/css/mail_group.css',
|
||||
],
|
||||
'js': [
|
||||
'static/lib/jquery.expander/jquery.expander.js',
|
||||
'static/src/js/mail.js',
|
||||
'static/src/js/mail_followers.js',
|
||||
'static/src/js/many2many_tags_email.js',
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -139,10 +139,16 @@ class mail_mail(osv.Model):
|
||||
# notification field: if not set, set if mail comes from an existing mail.message
|
||||
if 'notification' not in values and values.get('mail_message_id'):
|
||||
values['notification'] = True
|
||||
mail_id = super(mail_mail, self).create(cr, uid, values, context=context)
|
||||
|
||||
# reply_to: if not set, set with default values that require creation values
|
||||
# but delegate after creation because of mail_message.message_id automatic
|
||||
# creation using existence of reply_to
|
||||
if not values.get('reply_to'):
|
||||
values['reply_to'] = self._get_reply_to(cr, uid, values, context=context)
|
||||
return super(mail_mail, self).create(cr, uid, values, context=context)
|
||||
reply_to = self._get_reply_to(cr, uid, values, context=context)
|
||||
if reply_to:
|
||||
self.write(cr, uid, [mail_id], {'reply_to': reply_to}, context=context)
|
||||
return mail_id
|
||||
|
||||
def unlink(self, cr, uid, ids, context=None):
|
||||
# cascade-delete the parent message for all mails that are not created for a notification
|
||||
|
||||
@@ -395,15 +395,21 @@ class mail_message(osv.Model):
|
||||
has_voted = uid in [user.id for user in message.vote_user_ids]
|
||||
|
||||
try:
|
||||
body_html = html_email_clean(message.body)
|
||||
if parent_id:
|
||||
max_length = 300
|
||||
else:
|
||||
max_length = 100
|
||||
body_short = html_email_clean(message.body, remove=False, shorten=True, max_length=max_length)
|
||||
|
||||
except Exception:
|
||||
body_html = '<p><b>Encoding Error : </b><br/>Unable to convert this message (id: %s).</p>' % message.id
|
||||
body_short = '<p><b>Encoding Error : </b><br/>Unable to convert this message (id: %s).</p>' % message.id
|
||||
_logger.exception(Exception)
|
||||
|
||||
return {'id': message.id,
|
||||
'type': message.type,
|
||||
'subtype': message.subtype_id.name if message.subtype_id else False,
|
||||
'body': body_html,
|
||||
'body': message.body,
|
||||
'body_short': body_short,
|
||||
'model': message.model,
|
||||
'res_id': message.res_id,
|
||||
'record_name': message.record_name,
|
||||
|
||||
@@ -682,6 +682,12 @@ class mail_thread(osv.AbstractModel):
|
||||
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
|
||||
# Private message: should have a parent_id (only answers)
|
||||
if not model and not message_dict.get('parent_id'):
|
||||
if assert_model:
|
||||
assert message_dict.get('parent_id'), 'Routing: posting a message without model should be with a parent_id (private mesage).'
|
||||
_warn('posting a message without model should be with a parent_id (private mesage), skipping')
|
||||
return ()
|
||||
|
||||
# Existing Document: check if exists; if not, fallback on create if allowed
|
||||
if thread_id and not model_pool.exists(cr, uid, thread_id):
|
||||
@@ -695,7 +701,7 @@ class mail_thread(osv.AbstractModel):
|
||||
return ()
|
||||
|
||||
# Existing Document: check model accepts the mailgateway
|
||||
if thread_id and not hasattr(model_pool, 'message_update'):
|
||||
if thread_id and model 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
|
||||
@@ -706,7 +712,7 @@ class mail_thread(osv.AbstractModel):
|
||||
return ()
|
||||
|
||||
# New Document: check model accepts the mailgateway
|
||||
if not thread_id and not hasattr(model_pool, 'message_new'):
|
||||
if not thread_id and model 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)
|
||||
@@ -798,16 +804,16 @@ class mail_thread(osv.AbstractModel):
|
||||
|
||||
# 2. Reply to a private message
|
||||
if in_reply_to:
|
||||
message_ids = self.pool.get('mail.message').search(cr, uid, [
|
||||
mail_message_ids = self.pool.get('mail.message').search(cr, uid, [
|
||||
('message_id', '=', in_reply_to),
|
||||
'!', ('message_id', 'ilike', 'reply_to')
|
||||
], limit=1, context=context)
|
||||
if message_ids:
|
||||
message = self.pool.get('mail.message').browse(cr, uid, message_ids[0], context=context)
|
||||
if mail_message_ids:
|
||||
mail_message = self.pool.get('mail.message').browse(cr, uid, mail_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)
|
||||
email_from, email_to, message_id, mail_message.id, custom_values, uid)
|
||||
route = self.message_route_verify(cr, uid, message, message_dict,
|
||||
(message.model, message.res_id, custom_values, uid, None),
|
||||
(mail_message.model, mail_message.res_id, custom_values, uid, None),
|
||||
update_author=True, assert_model=True, create_fallback=True, context=context)
|
||||
return route and [route] or []
|
||||
|
||||
|
||||
@@ -1,385 +0,0 @@
|
||||
/*!
|
||||
* jQuery Expander Plugin v1.4.2
|
||||
*
|
||||
* Date: Fri Mar 16 14:29:56 2012 EDT
|
||||
* Requires: jQuery v1.3+
|
||||
*
|
||||
* Copyright 2011, Karl Swedberg
|
||||
* Dual licensed under the MIT and GPL licenses (just like jQuery):
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
(function($) {
|
||||
$.expander = {
|
||||
version: '1.4.2',
|
||||
defaults: {
|
||||
// the number of characters at which the contents will be sliced into two parts.
|
||||
slicePoint: 100,
|
||||
|
||||
// whether to keep the last word of the summary whole (true) or let it slice in the middle of a word (false)
|
||||
preserveWords: true,
|
||||
|
||||
// a threshold of sorts for whether to initially hide/collapse part of the element's contents.
|
||||
// If after slicing the contents in two there are fewer words in the second part than
|
||||
// the value set by widow, we won't bother hiding/collapsing anything.
|
||||
widow: 4,
|
||||
|
||||
// text displayed in a link instead of the hidden part of the element.
|
||||
// clicking this will expand/show the hidden/collapsed text
|
||||
expandText: 'read more',
|
||||
expandPrefix: '… ',
|
||||
|
||||
expandAfterSummary: false,
|
||||
|
||||
// class names for summary element and detail element
|
||||
summaryClass: 'summary',
|
||||
detailClass: 'details',
|
||||
|
||||
// class names for <span> around "read-more" link and "read-less" link
|
||||
moreClass: 'read-more',
|
||||
lessClass: 'read-less',
|
||||
|
||||
// number of milliseconds after text has been expanded at which to collapse the text again.
|
||||
// when 0, no auto-collapsing
|
||||
collapseTimer: 0,
|
||||
|
||||
// effects for expanding and collapsing
|
||||
expandEffect: 'fadeIn',
|
||||
expandSpeed: 250,
|
||||
collapseEffect: 'fadeOut',
|
||||
collapseSpeed: 200,
|
||||
|
||||
// allow the user to re-collapse the expanded text.
|
||||
userCollapse: true,
|
||||
|
||||
// text to use for the link to re-collapse the text
|
||||
userCollapseText: 'read less',
|
||||
userCollapsePrefix: ' ',
|
||||
|
||||
|
||||
// all callback functions have the this keyword mapped to the element in the jQuery set when .expander() is called
|
||||
|
||||
onSlice: null, // function() {}
|
||||
beforeExpand: null, // function() {},
|
||||
afterExpand: null, // function() {},
|
||||
onCollapse: null // function(byUser) {}
|
||||
}
|
||||
};
|
||||
|
||||
$.fn.expander = function(options) {
|
||||
var meth = 'init';
|
||||
|
||||
if (typeof options == 'string') {
|
||||
meth = options;
|
||||
options = {};
|
||||
}
|
||||
|
||||
var opts = $.extend({}, $.expander.defaults, options),
|
||||
rSelfClose = /^<(?:area|br|col|embed|hr|img|input|link|meta|param).*>$/i,
|
||||
rAmpWordEnd = opts.wordEnd || /(&(?:[^;]+;)?|[a-zA-Z\u00C0-\u0100]+)$/,
|
||||
rOpenCloseTag = /<\/?(\w+)[^>]*>/g,
|
||||
rOpenTag = /<(\w+)[^>]*>/g,
|
||||
rCloseTag = /<\/(\w+)>/g,
|
||||
rLastCloseTag = /(<\/[^>]+>)\s*$/,
|
||||
rTagPlus = /^<[^>]+>.?/,
|
||||
delayedCollapse;
|
||||
|
||||
var methods = {
|
||||
init: function() {
|
||||
this.each(function() {
|
||||
var i, l, tmp, newChar, summTagless, summOpens, summCloses,
|
||||
lastCloseTag, detailText, detailTagless,
|
||||
$thisDetails, $readMore,
|
||||
openTagsForDetails = [],
|
||||
closeTagsForsummaryText = [],
|
||||
defined = {},
|
||||
thisEl = this,
|
||||
$this = $(this),
|
||||
$summEl = $([]),
|
||||
o = $.meta ? $.extend({}, opts, $this.data()) : opts,
|
||||
hasDetails = !!$this.find('.' + o.detailClass).length,
|
||||
hasBlocks = !!$this.find('*').filter(function() {
|
||||
var display = $(this).css('display');
|
||||
return (/^block|table|list/).test(display);
|
||||
}).length,
|
||||
el = hasBlocks ? 'div' : 'span',
|
||||
detailSelector = el + '.' + o.detailClass,
|
||||
moreSelector = 'span.' + o.moreClass,
|
||||
expandSpeed = o.expandSpeed || 0,
|
||||
allHtml = $.trim( $this.html() ),
|
||||
allText = $.trim( $this.text() ),
|
||||
summaryText = allHtml.slice(0, o.slicePoint);
|
||||
|
||||
// bail out if we've already set up the expander on this element
|
||||
if ( $.data(this, 'expander') ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$.data(this, 'expander', true);
|
||||
|
||||
// determine which callback functions are defined
|
||||
$.each(['onSlice','beforeExpand', 'afterExpand', 'onCollapse'], function(index, val) {
|
||||
defined[val] = $.isFunction(o[val]);
|
||||
});
|
||||
|
||||
// back up if we're in the middle of a tag or word
|
||||
summaryText = backup(summaryText);
|
||||
|
||||
// summary text sans tags length
|
||||
summTagless = summaryText.replace(rOpenCloseTag, '').length;
|
||||
|
||||
// add more characters to the summary, one for each character in the tags
|
||||
while (summTagless < o.slicePoint) {
|
||||
newChar = allHtml.charAt(summaryText.length);
|
||||
if (newChar == '<') {
|
||||
newChar = allHtml.slice(summaryText.length).match(rTagPlus)[0];
|
||||
}
|
||||
summaryText += newChar;
|
||||
summTagless++;
|
||||
}
|
||||
|
||||
summaryText = backup(summaryText, o.preserveWords);
|
||||
|
||||
// separate open tags from close tags and clean up the lists
|
||||
summOpens = summaryText.match(rOpenTag) || [];
|
||||
summCloses = summaryText.match(rCloseTag) || [];
|
||||
|
||||
// filter out self-closing tags
|
||||
tmp = [];
|
||||
$.each(summOpens, function(index, val) {
|
||||
if ( !rSelfClose.test(val) ) {
|
||||
tmp.push(val);
|
||||
}
|
||||
});
|
||||
summOpens = tmp;
|
||||
|
||||
// strip close tags to just the tag name
|
||||
l = summCloses.length;
|
||||
for (i = 0; i < l; i++) {
|
||||
summCloses[i] = summCloses[i].replace(rCloseTag, '$1');
|
||||
}
|
||||
|
||||
// tags that start in summary and end in detail need:
|
||||
// a). close tag at end of summary
|
||||
// b). open tag at beginning of detail
|
||||
$.each(summOpens, function(index, val) {
|
||||
var thisTagName = val.replace(rOpenTag, '$1');
|
||||
var closePosition = $.inArray(thisTagName, summCloses);
|
||||
if (closePosition === -1) {
|
||||
openTagsForDetails.push(val);
|
||||
closeTagsForsummaryText.push('</' + thisTagName + '>');
|
||||
|
||||
} else {
|
||||
summCloses.splice(closePosition, 1);
|
||||
}
|
||||
});
|
||||
|
||||
// reverse the order of the close tags for the summary so they line up right
|
||||
closeTagsForsummaryText.reverse();
|
||||
|
||||
// create necessary summary and detail elements if they don't already exist
|
||||
if ( !hasDetails ) {
|
||||
|
||||
// end script if there is no detail text or if detail has fewer words than widow option
|
||||
detailText = allHtml.slice(summaryText.length);
|
||||
detailTagless = $.trim( detailText.replace(rOpenCloseTag, '') );
|
||||
|
||||
if ( detailTagless === '' || detailTagless.split(/\s+/).length < o.widow ) {
|
||||
return;
|
||||
}
|
||||
// otherwise, continue...
|
||||
lastCloseTag = closeTagsForsummaryText.pop() || '';
|
||||
summaryText += closeTagsForsummaryText.join('');
|
||||
detailText = openTagsForDetails.join('') + detailText;
|
||||
|
||||
} else {
|
||||
// assume that even if there are details, we still need readMore/readLess/summary elements
|
||||
// (we already bailed out earlier when readMore el was found)
|
||||
// but we need to create els differently
|
||||
|
||||
// remove the detail from the rest of the content
|
||||
detailText = $this.find(detailSelector).remove().html();
|
||||
|
||||
// The summary is what's left
|
||||
summaryText = $this.html();
|
||||
|
||||
// allHtml is the summary and detail combined (this is needed when content has block-level elements)
|
||||
allHtml = summaryText + detailText;
|
||||
|
||||
lastCloseTag = '';
|
||||
}
|
||||
o.moreLabel = $this.find(moreSelector).length ? '' : buildMoreLabel(o);
|
||||
|
||||
if (hasBlocks) {
|
||||
detailText = allHtml;
|
||||
}
|
||||
summaryText += lastCloseTag;
|
||||
|
||||
// onSlice callback
|
||||
o.summary = summaryText;
|
||||
o.details = detailText;
|
||||
o.lastCloseTag = lastCloseTag;
|
||||
|
||||
if (defined.onSlice) {
|
||||
// user can choose to return a modified options object
|
||||
// one last chance for user to change the options. sneaky, huh?
|
||||
// but could be tricky so use at your own risk.
|
||||
tmp = o.onSlice.call(thisEl, o);
|
||||
|
||||
// so, if the returned value from the onSlice function is an object with a details property, we'll use that!
|
||||
o = tmp && tmp.details ? tmp : o;
|
||||
}
|
||||
|
||||
// build the html with summary and detail and use it to replace old contents
|
||||
var html = buildHTML(o, hasBlocks);
|
||||
|
||||
$this.html( html );
|
||||
|
||||
// set up details and summary for expanding/collapsing
|
||||
$thisDetails = $this.find(detailSelector);
|
||||
$readMore = $this.find(moreSelector);
|
||||
$thisDetails.hide();
|
||||
$readMore.find('a').unbind('click.expander').bind('click.expander', expand);
|
||||
|
||||
$summEl = $this.find('div.' + o.summaryClass);
|
||||
|
||||
if ( o.userCollapse && !$this.find('span.' + o.lessClass).length ) {
|
||||
$this
|
||||
.find(detailSelector)
|
||||
.append('<span class="' + o.lessClass + '">' + o.userCollapsePrefix + '<a href="#">' + o.userCollapseText + '</a></span>');
|
||||
}
|
||||
|
||||
$this
|
||||
.find('span.' + o.lessClass + ' a')
|
||||
.unbind('click.expander')
|
||||
.bind('click.expander', function(event) {
|
||||
event.preventDefault();
|
||||
clearTimeout(delayedCollapse);
|
||||
var $detailsCollapsed = $(this).closest(detailSelector);
|
||||
reCollapse(o, $detailsCollapsed);
|
||||
if (defined.onCollapse) {
|
||||
o.onCollapse.call(thisEl, true);
|
||||
}
|
||||
});
|
||||
|
||||
function expand(event) {
|
||||
event.preventDefault();
|
||||
$readMore.hide();
|
||||
$summEl.hide();
|
||||
if (defined.beforeExpand) {
|
||||
o.beforeExpand.call(thisEl);
|
||||
}
|
||||
|
||||
$thisDetails.stop(false, true)[o.expandEffect](expandSpeed, function() {
|
||||
$thisDetails.css({zoom: ''});
|
||||
if (defined.afterExpand) {o.afterExpand.call(thisEl);}
|
||||
delayCollapse(o, $thisDetails, thisEl);
|
||||
});
|
||||
}
|
||||
|
||||
}); // this.each
|
||||
},
|
||||
destroy: function() {
|
||||
if ( !this.data('expander') ) {
|
||||
return;
|
||||
}
|
||||
this.removeData('expander');
|
||||
this.each(function() {
|
||||
var $this = $(this),
|
||||
o = $.meta ? $.extend({}, opts, $this.data()) : opts,
|
||||
details = $this.find('.' + o.detailClass).contents();
|
||||
|
||||
$this.find('.' + o.moreClass).remove();
|
||||
$this.find('.' + o.summaryClass).remove();
|
||||
$this.find('.' + o.detailClass).after(details).remove();
|
||||
$this.find('.' + o.lessClass).remove();
|
||||
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// run the methods (almost always "init")
|
||||
if ( methods[meth] ) {
|
||||
methods[ meth ].call(this);
|
||||
}
|
||||
|
||||
// utility functions
|
||||
function buildHTML(o, blocks) {
|
||||
var el = 'span',
|
||||
summary = o.summary;
|
||||
if ( blocks ) {
|
||||
el = 'div';
|
||||
// if summary ends with a close tag, tuck the moreLabel inside it
|
||||
if ( rLastCloseTag.test(summary) && !o.expandAfterSummary) {
|
||||
summary = summary.replace(rLastCloseTag, o.moreLabel + '$1');
|
||||
} else {
|
||||
// otherwise (e.g. if ends with self-closing tag) just add moreLabel after summary
|
||||
// fixes #19
|
||||
summary += o.moreLabel;
|
||||
}
|
||||
|
||||
// and wrap it in a div
|
||||
summary = '<div class="' + o.summaryClass + '">' + summary + '</div>';
|
||||
} else {
|
||||
summary += o.moreLabel;
|
||||
}
|
||||
|
||||
return [
|
||||
summary,
|
||||
'<',
|
||||
el + ' class="' + o.detailClass + '"',
|
||||
'>',
|
||||
o.details,
|
||||
'</' + el + '>'
|
||||
].join('');
|
||||
}
|
||||
|
||||
function buildMoreLabel(o) {
|
||||
var ret = '<span class="' + o.moreClass + '">' + o.expandPrefix;
|
||||
ret += '<a href="#">' + o.expandText + '</a></span>';
|
||||
return ret;
|
||||
}
|
||||
|
||||
function backup(txt, preserveWords) {
|
||||
if ( txt.lastIndexOf('<') > txt.lastIndexOf('>') ) {
|
||||
txt = txt.slice( 0, txt.lastIndexOf('<') );
|
||||
}
|
||||
if (preserveWords) {
|
||||
txt = txt.replace(rAmpWordEnd,'');
|
||||
}
|
||||
|
||||
return $.trim(txt);
|
||||
}
|
||||
|
||||
function reCollapse(o, el) {
|
||||
el.stop(true, true)[o.collapseEffect](o.collapseSpeed, function() {
|
||||
var prevMore = el.prev('span.' + o.moreClass).show();
|
||||
if (!prevMore.length) {
|
||||
el.parent().children('div.' + o.summaryClass).show()
|
||||
.find('span.' + o.moreClass).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function delayCollapse(option, $collapseEl, thisEl) {
|
||||
if (option.collapseTimer) {
|
||||
delayedCollapse = setTimeout(function() {
|
||||
reCollapse(option, $collapseEl);
|
||||
if ( $.isFunction(option.onCollapse) ) {
|
||||
option.onCollapse.call(thisEl, false);
|
||||
}
|
||||
}, option.collapseTimer);
|
||||
}
|
||||
}
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
// plugin defaults
|
||||
$.fn.expander.defaults = $.expander.defaults;
|
||||
})(jQuery);
|
||||
@@ -118,6 +118,9 @@
|
||||
text-overflow:ellipsis;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.openerp .oe_mail .oe_msg .oe_msg_content .oe_msg_body .oe_mail_cleaned {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* a) Indented Messages */
|
||||
|
||||
|
||||
@@ -225,6 +225,7 @@ openerp.mail = function (session) {
|
||||
this.name = datasets.name || false,
|
||||
this.record_name = datasets.record_name || false,
|
||||
this.body = datasets.body || '',
|
||||
this.body_short = datasets.body_short || '',
|
||||
this.vote_nb = datasets.vote_nb || 0,
|
||||
this.has_voted = datasets.has_voted || false,
|
||||
this.is_favorite = datasets.is_favorite || false,
|
||||
@@ -944,7 +945,6 @@ openerp.mail = function (session) {
|
||||
|
||||
start: function () {
|
||||
this._super.apply(this, arguments);
|
||||
this.expender();
|
||||
this.bind_events();
|
||||
if(this.thread_level < this.options.display_indented_thread) {
|
||||
this.create_thread();
|
||||
@@ -967,6 +967,8 @@ openerp.mail = function (session) {
|
||||
this.$('.oe_reply').on('click', this.on_message_reply);
|
||||
this.$('.oe_star').on('click', this.on_star);
|
||||
this.$('.oe_msg_vote').on('click', this.on_vote);
|
||||
this.$('.oe_mail_expand').on('click', this.on_expand);
|
||||
this.$('.oe_mail_reduce').on('click', this.on_expand);
|
||||
this.$('.oe_mail_action_model').on('click', this.on_record_clicked);
|
||||
},
|
||||
|
||||
@@ -995,15 +997,11 @@ openerp.mail = function (session) {
|
||||
return false;
|
||||
},
|
||||
|
||||
expender: function () {
|
||||
this.$('.oe_msg_body:first').expander({
|
||||
slicePoint: this.options.truncate_limit,
|
||||
expandText: _t('read more'),
|
||||
userCollapseText: _t('read less'),
|
||||
detailClass: 'oe_msg_tail',
|
||||
moreClass: 'oe_mail_expand',
|
||||
lessClass: 'oe_mail_reduce',
|
||||
});
|
||||
on_expand: function (event) {
|
||||
event.stopPropagation();
|
||||
this.$('.oe_msg_body_short:first').toggle();
|
||||
this.$('.oe_msg_body_long:first').toggle();
|
||||
return false;
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
@@ -266,7 +266,13 @@
|
||||
<t t-if="widget.subject" t-raw="widget.subject"/>
|
||||
</h1>
|
||||
<div class="oe_msg_body">
|
||||
<t t-raw="widget.body"/>
|
||||
<t t-if="widget.body_short">
|
||||
<div class="oe_msg_body_short"><t t-raw="widget.body_short"/></div>
|
||||
<div class="oe_msg_body_long" style="display: none;"><t t-raw="widget.body"/><span class="oe_mail_reduce"><a href="#">read less</a></span></div>
|
||||
</t>
|
||||
<t t-if="! widget.body_short">
|
||||
<t t-raw="widget.body"/>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oe_msg_footer">
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
##############################################################################
|
||||
|
||||
from openerp.addons.mail.tests.test_mail_base import TestMailBase
|
||||
from openerp.tools import mute_logger, email_split
|
||||
from openerp.tools import mute_logger
|
||||
|
||||
MAIL_TEMPLATE = """Return-Path: <whatever-2a840@postmaster.twitter.com>
|
||||
To: {to}
|
||||
@@ -101,9 +101,9 @@ class TestMailgateway(TestMailBase):
|
||||
# Do: find partner with email -> first partner should be found
|
||||
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_partner_info_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_partner_info_from_emails wrong partner found')
|
||||
'mail_thread: message_partner_info_from_emails wrong partner found')
|
||||
|
||||
# Data: add some data about partners
|
||||
# 2 - User BRaoul
|
||||
@@ -112,7 +112,7 @@ class TestMailgateway(TestMailBase):
|
||||
# Do: find partner with email -> first user should be found
|
||||
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_partner_info_from_emails wrong partner found')
|
||||
'mail_thread: message_partner_info_from_emails wrong partner found')
|
||||
|
||||
# --------------------------------------------------
|
||||
# CASE1: with object
|
||||
@@ -122,7 +122,7 @@ class TestMailgateway(TestMailBase):
|
||||
self.mail_group.message_subscribe(cr, uid, [group_pigs.id], [p_b_id])
|
||||
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_partner_info_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, ... """
|
||||
@@ -146,46 +146,46 @@ class TestMailgateway(TestMailBase):
|
||||
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')
|
||||
'mail_message: message_id should be specific to a mail_message with a given reply_to')
|
||||
self.assertEqual(msg.reply_to, reply_to1,
|
||||
'mail_message: incorrect reply_to: should come from values')
|
||||
'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')
|
||||
'mail_message: incorrect email_from: should come from values')
|
||||
# Do: create a mail_mail with 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, reply_to1,
|
||||
'mail_mail: incorrect reply_to: should come from mail.message')
|
||||
'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')
|
||||
'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')
|
||||
'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')
|
||||
'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')
|
||||
'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')
|
||||
'mail_message: message_id should contain res_id')
|
||||
self.assertFalse(msg.reply_to,
|
||||
'mail_message: incorrect reply_to: should not be generated if 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')
|
||||
'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, 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_reply,
|
||||
'mail_mail: incorrect reply_to: should be Raoul')
|
||||
'mail_mail: incorrect reply_to: should be Raoul')
|
||||
|
||||
# Data: set catchall domain
|
||||
self.registry('ir.config_parameter').set_param(cr, uid, 'mail.catchall.domain', alias_domain)
|
||||
@@ -199,7 +199,7 @@ class TestMailgateway(TestMailBase):
|
||||
mail = self.mail_mail.browse(cr, user_raoul_id, mail_id)
|
||||
# Test: mail_mail content
|
||||
self.assertEqual(mail.reply_to, raoul_reply_alias,
|
||||
'mail_mail: incorrect reply_to: should be Pigs 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, {})
|
||||
@@ -209,7 +209,7 @@ class TestMailgateway(TestMailBase):
|
||||
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')
|
||||
'mail_mail: incorrect reply_to: should be message email_from using Raoul alias')
|
||||
|
||||
# Update message
|
||||
self.mail_message.write(cr, user_raoul_id, [msg_id], {'res_id': False, 'email_from': 'someone@schlouby.fr', 'reply_to': False})
|
||||
@@ -219,7 +219,7 @@ class TestMailgateway(TestMailBase):
|
||||
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: incorrect reply_to: should be 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')
|
||||
@@ -232,21 +232,21 @@ class TestMailgateway(TestMailBase):
|
||||
mail = self.mail_mail.browse(cr, uid, mail_id)
|
||||
# Test: mail_mail Content-Type
|
||||
self.assertEqual(mail.reply_to, 'gateway@schlouby.fr',
|
||||
'mail_mail: reply_to should equal the catchall email alias')
|
||||
'mail_mail: reply_to should equal the catchall email alias')
|
||||
|
||||
# Do: create a mail_mail
|
||||
mail_id = self.mail_mail.create(cr, uid, {'state': 'cancel'})
|
||||
mail = self.mail_mail.browse(cr, uid, mail_id)
|
||||
# Test: mail_mail content
|
||||
self.assertEqual(mail.reply_to, 'gateway@schlouby.fr',
|
||||
'mail_mail: reply_to should equal the catchall email alias')
|
||||
'mail_mail: reply_to should equal the catchall email alias')
|
||||
|
||||
# Do: create a mail_mail
|
||||
mail_id = self.mail_mail.create(cr, uid, {'state': 'cancel', 'reply_to': 'someone@example.com'})
|
||||
mail = self.mail_mail.browse(cr, uid, mail_id)
|
||||
# Test: mail_mail content
|
||||
self.assertEqual(mail.reply_to, 'someone@example.com',
|
||||
'mail_mail: reply_to should equal the rpely_to given to create')
|
||||
'mail_mail: reply_to should equal the rpely_to given to create')
|
||||
|
||||
@mute_logger('openerp.addons.mail.mail_thread', 'openerp.osv.orm')
|
||||
def test_10_message_process(self):
|
||||
@@ -254,9 +254,9 @@ class TestMailgateway(TestMailBase):
|
||||
cr, uid, user_raoul = self.cr, self.uid, self.user_raoul
|
||||
|
||||
def format_and_process(template, to='groups@example.com, other@gmail.com', subject='Frogs',
|
||||
extra='', email_from='Sylvie Lelitre <test.sylvie.lelitre@agrolait.com>',
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail@agrolait.com>',
|
||||
model=None):
|
||||
extra='', email_from='Sylvie Lelitre <test.sylvie.lelitre@agrolait.com>',
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail@agrolait.com>',
|
||||
model=None):
|
||||
self.assertEqual(self.mail_group.search(cr, uid, [('name', '=', subject)]), [])
|
||||
mail = template.format(to=to, subject=subject, extra=extra, email_from=email_from, msg_id=msg_id)
|
||||
self.mail_thread.message_process(cr, uid, model, mail)
|
||||
@@ -289,29 +289,29 @@ class TestMailgateway(TestMailBase):
|
||||
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
|
||||
res = self.mail_group.perm_read(cr, uid, [frog_group.id], details=False)
|
||||
self.assertEqual(res[0].get('create_uid'), uid,
|
||||
'message_process: group should have been created by uid as alias_user__id is False on the alias')
|
||||
'message_process: group should have been created by uid as alias_user__id is False on the alias')
|
||||
# Test: one message that is the incoming email
|
||||
self.assertEqual(len(frog_group.message_ids), 1,
|
||||
'message_process: newly created group should have the incoming email in message_ids')
|
||||
'message_process: newly created group should have the incoming email in message_ids')
|
||||
msg = frog_group.message_ids[0]
|
||||
self.assertEqual('Frogs', msg.subject,
|
||||
'message_process: newly created group should have the incoming email as first message')
|
||||
'message_process: newly created group should have the incoming email as first message')
|
||||
self.assertIn('Please call me as soon as possible this afternoon!', msg.body,
|
||||
'message_process: newly created group should have the incoming email as first message')
|
||||
'message_process: newly created group should have the incoming email as first message')
|
||||
self.assertEqual('email', msg.type,
|
||||
'message_process: newly created group should have an email as first message')
|
||||
'message_process: newly created group should have an email as first message')
|
||||
self.assertEqual('Discussions', msg.subtype_id.name,
|
||||
'message_process: newly created group should not have a log first message but an email')
|
||||
'message_process: newly created group should not have a log first message but an email')
|
||||
# Test: message: unknown email address -> message has email_from, not author_id
|
||||
self.assertFalse(msg.author_id,
|
||||
'message_process: message on created group should not have an author_id')
|
||||
'message_process: message on created group should not have an author_id')
|
||||
self.assertIn('test.sylvie.lelitre@agrolait.com', msg.email_from,
|
||||
'message_process: message on created group should have an email_from')
|
||||
'message_process: message on created group should have an email_from')
|
||||
# Test: followers: nobody
|
||||
self.assertEqual(len(frog_group.message_follower_ids), 0, 'message_process: newly create group should not have any follower')
|
||||
# Test: sent emails: no-one
|
||||
self.assertEqual(len(sent_emails), 0,
|
||||
'message_process: should create emails without any follower added')
|
||||
'message_process: should create emails without any follower added')
|
||||
# Data: unlink group
|
||||
frog_group.unlink()
|
||||
|
||||
@@ -324,11 +324,11 @@ class TestMailgateway(TestMailBase):
|
||||
# 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')
|
||||
'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')
|
||||
'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')
|
||||
'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()
|
||||
@@ -339,11 +339,11 @@ class TestMailgateway(TestMailBase):
|
||||
# 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')
|
||||
'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')
|
||||
'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')
|
||||
'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'})
|
||||
@@ -357,24 +357,24 @@ class TestMailgateway(TestMailBase):
|
||||
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
|
||||
res = self.mail_group.perm_read(cr, uid, [frog_group.id], details=False)
|
||||
self.assertEqual(res[0].get('create_uid'), self.user_raoul_id,
|
||||
'message_process: group should have been created by alias_user_id')
|
||||
'message_process: group should have been created by alias_user_id')
|
||||
# Test: one message that is the incoming email
|
||||
self.assertEqual(len(frog_group.message_ids), 1,
|
||||
'message_process: newly created group should have the incoming email in message_ids')
|
||||
'message_process: newly created group should have the incoming email in message_ids')
|
||||
msg = frog_group.message_ids[0]
|
||||
# Test: message: author found
|
||||
self.assertEqual(p1id, msg.author_id.id,
|
||||
'message_process: message on created group should have Sylvie as author_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')
|
||||
'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
|
||||
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)')
|
||||
'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')
|
||||
'message_process: should not bounce incoming emails')
|
||||
# Data: unlink group
|
||||
frog_group.unlink()
|
||||
|
||||
@@ -387,7 +387,7 @@ class TestMailgateway(TestMailBase):
|
||||
# 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')
|
||||
'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()
|
||||
@@ -398,15 +398,15 @@ class TestMailgateway(TestMailBase):
|
||||
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
|
||||
# Test: one message that is the incoming email
|
||||
self.assertEqual(len(frog_group.message_ids), 1,
|
||||
'message_process: newly created group should have the incoming email in message_ids')
|
||||
'message_process: newly created group should have the incoming email in message_ids')
|
||||
# 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]),
|
||||
'message_process: newly created group should have 1 follower (author, not creator, not recipients)')
|
||||
'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')
|
||||
'message_process: should not bounce incoming emails')
|
||||
|
||||
# --------------------------------------------------
|
||||
# Test2: update-like alias
|
||||
@@ -416,43 +416,43 @@ class TestMailgateway(TestMailBase):
|
||||
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')
|
||||
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')
|
||||
'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')
|
||||
'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')
|
||||
'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')
|
||||
'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')
|
||||
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')
|
||||
'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')
|
||||
'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')
|
||||
'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')
|
||||
'message_process: email should be sent to Sylvie')
|
||||
self.mail_group.message_unsubscribe(cr, uid, [frog_group.id], [p2id])
|
||||
|
||||
# --------------------------------------------------
|
||||
@@ -461,40 +461,40 @@ class TestMailgateway(TestMailBase):
|
||||
|
||||
# Do: even with a wrong destination, a reply should end up in the correct thread
|
||||
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)
|
||||
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)
|
||||
# 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')
|
||||
'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')
|
||||
'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), 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')
|
||||
'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='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)
|
||||
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
|
||||
self.assertEqual(len(frog_groups), 0,
|
||||
'message_process: reply on Frogs should not have created a new group with new subject')
|
||||
'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')
|
||||
'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), 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')
|
||||
'message_process: message with already existing message_id should not have been duplicated')
|
||||
|
||||
# --------------------------------------------------
|
||||
# Test4: email_from and partner finding
|
||||
@@ -505,28 +505,28 @@ class TestMailgateway(TestMailBase):
|
||||
|
||||
# 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>',
|
||||
to='erroneous@example.com>', subject='Re: news (2)',
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.new1@agrolait.com>',
|
||||
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
|
||||
to='erroneous@example.com>', subject='Re: news (2)',
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.new1@agrolait.com>',
|
||||
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
|
||||
frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')])
|
||||
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
|
||||
# Test: author is A-Raoul (only existing)
|
||||
self.assertEqual(frog_group.message_ids[0].author_id.id, extra_partner_id,
|
||||
'message_process: email_from -> author_id wrong')
|
||||
'message_process: email_from -> author_id wrong')
|
||||
|
||||
# Do: post a new message, with a known partner -> duplicate emails -> user
|
||||
frog_group.message_unsubscribe([extra_partner_id])
|
||||
raoul_email = self.user_raoul.email
|
||||
self.res_users.write(cr, uid, self.user_raoul_id, {'email': 'test_raoul@email.com'})
|
||||
format_and_process(MAIL_TEMPLATE, email_from='Lombrik Lubrik <test_raoul@email.com>',
|
||||
to='erroneous@example.com>', subject='Re: news (3)',
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.new2@agrolait.com>',
|
||||
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
|
||||
to='erroneous@example.com>', subject='Re: news (3)',
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.new2@agrolait.com>',
|
||||
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
|
||||
frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')])
|
||||
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
|
||||
# Test: author is Raoul (user), not A-Raoul
|
||||
self.assertEqual(frog_group.message_ids[0].author_id.id, self.partner_raoul_id,
|
||||
'message_process: email_from -> author_id wrong')
|
||||
'message_process: email_from -> author_id wrong')
|
||||
|
||||
# Do: post a new message, with a known partner -> duplicate emails -> partner because is follower
|
||||
frog_group.message_unsubscribe([self.partner_raoul_id])
|
||||
@@ -534,14 +534,14 @@ class TestMailgateway(TestMailBase):
|
||||
raoul_email = self.user_raoul.email
|
||||
self.res_users.write(cr, uid, self.user_raoul_id, {'email': 'test_raoul@email.com'})
|
||||
format_and_process(MAIL_TEMPLATE, email_from='Lombrik Lubrik <test_raoul@email.com>',
|
||||
to='erroneous@example.com>', subject='Re: news (3)',
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.new3@agrolait.com>',
|
||||
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
|
||||
to='erroneous@example.com>', subject='Re: news (3)',
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.new3@agrolait.com>',
|
||||
extra='In-Reply-To: <12321321-openerp-%d-mail.group@example.com>\n' % frog_group.id)
|
||||
frog_groups = self.mail_group.search(cr, uid, [('name', '=', 'Frogs')])
|
||||
frog_group = self.mail_group.browse(cr, uid, frog_groups[0])
|
||||
# Test: author is Raoul (user), not A-Raoul
|
||||
self.assertEqual(frog_group.message_ids[0].author_id.id, extra_partner_id,
|
||||
'message_process: email_from -> author_id wrong')
|
||||
'message_process: email_from -> author_id wrong')
|
||||
|
||||
self.res_users.write(cr, uid, self.user_raoul_id, {'email': raoul_email})
|
||||
|
||||
@@ -551,37 +551,37 @@ class TestMailgateway(TestMailBase):
|
||||
|
||||
# Do: incoming email with model that does not accepts incoming emails must raise
|
||||
self.assertRaises(AssertionError,
|
||||
format_and_process,
|
||||
MAIL_TEMPLATE,
|
||||
to='noone@example.com', subject='spam', extra='', model='res.country',
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.new4@agrolait.com>')
|
||||
format_and_process,
|
||||
MAIL_TEMPLATE,
|
||||
to='noone@example.com', subject='spam', extra='', model='res.country',
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.new4@agrolait.com>')
|
||||
|
||||
# Do: incoming email without model and without alias must raise
|
||||
self.assertRaises(AssertionError,
|
||||
format_and_process,
|
||||
MAIL_TEMPLATE,
|
||||
to='noone@example.com', subject='spam', extra='',
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.new5@agrolait.com>')
|
||||
format_and_process,
|
||||
MAIL_TEMPLATE,
|
||||
to='noone@example.com', subject='spam', extra='',
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.new5@agrolait.com>')
|
||||
|
||||
# Do: incoming email with model that accepting incoming emails as fallback
|
||||
frog_groups = format_and_process(MAIL_TEMPLATE,
|
||||
to='noone@example.com',
|
||||
subject='Spammy', extra='', model='mail.group',
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.new6@agrolait.com>')
|
||||
to='noone@example.com',
|
||||
subject='Spammy', extra='', model='mail.group',
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.new6@agrolait.com>')
|
||||
self.assertEqual(len(frog_groups), 1,
|
||||
'message_process: erroneous email but with a fallback model should have created a new mail.group')
|
||||
'message_process: erroneous email but with a fallback model should have created a new mail.group')
|
||||
|
||||
# Do: incoming email in plaintext should be stored as html
|
||||
frog_groups = format_and_process(MAIL_TEMPLATE_PLAINTEXT,
|
||||
to='groups@example.com', subject='Frogs Return', extra='',
|
||||
msg_id='<deadcafe.1337@smtp.agrolait.com>')
|
||||
to='groups@example.com', subject='Frogs Return', extra='',
|
||||
msg_id='<deadcafe.1337@smtp.agrolait.com>')
|
||||
# Test: one group created with one message
|
||||
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])
|
||||
msg = frog_group.message_ids[0]
|
||||
# Test: plain text content should be wrapped and stored as html
|
||||
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')
|
||||
'message_process: plaintext incoming email incorrectly parsed')
|
||||
|
||||
@mute_logger('openerp.addons.mail.mail_thread', 'openerp.osv.orm')
|
||||
def test_20_thread_parent_resolution(self):
|
||||
@@ -602,26 +602,26 @@ class TestMailgateway(TestMailBase):
|
||||
# Reply to msg1, make sure the reply is properly attached using the various reply identification mechanisms
|
||||
# 0. Direct alias match
|
||||
reply_msg1 = format(MAIL_TEMPLATE, to='Pretty Pigs <group+pigs@example.com>',
|
||||
extra='In-Reply-To: %s' % msg1.message_id,
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.2@agrolait.com>')
|
||||
extra='In-Reply-To: %s' % msg1.message_id,
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.2@agrolait.com>')
|
||||
self.mail_group.message_process(cr, uid, None, reply_msg1)
|
||||
|
||||
# 1. In-Reply-To header
|
||||
reply_msg2 = format(MAIL_TEMPLATE, to='erroneous@example.com',
|
||||
extra='In-Reply-To: %s' % msg1.message_id,
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.3@agrolait.com>')
|
||||
extra='In-Reply-To: %s' % msg1.message_id,
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.3@agrolait.com>')
|
||||
self.mail_group.message_process(cr, uid, None, reply_msg2)
|
||||
|
||||
# 2. References header
|
||||
reply_msg3 = format(MAIL_TEMPLATE, to='erroneous@example.com',
|
||||
extra='References: <2233@a.com>\r\n\t<3edss_dsa@b.com> %s' % msg1.message_id,
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.4@agrolait.com>')
|
||||
extra='References: <2233@a.com>\r\n\t<3edss_dsa@b.com> %s' % msg1.message_id,
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.4@agrolait.com>')
|
||||
self.mail_group.message_process(cr, uid, None, reply_msg3)
|
||||
|
||||
# 3. Subject contains [<ID>] + model passed to message+process -> only attached to group, but not to mail (not in msg1.child_ids)
|
||||
reply_msg4 = format(MAIL_TEMPLATE, to='erroneous@example.com',
|
||||
extra='', subject='Re: [%s] 1' % self.group_pigs_id,
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.5@agrolait.com>')
|
||||
extra='', subject='Re: [%s] 1' % self.group_pigs_id,
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail.5@agrolait.com>')
|
||||
self.mail_group.message_process(cr, uid, 'mail.group', reply_msg4)
|
||||
|
||||
group_pigs.refresh()
|
||||
@@ -633,12 +633,19 @@ class TestMailgateway(TestMailBase):
|
||||
""" Testing private discussion between partners. """
|
||||
cr, uid = self.cr, self.uid
|
||||
|
||||
def format(template, to='Pretty Pigs <group+pigs@example.com>, other@gmail.com', subject='Re: 1',
|
||||
extra='', email_from='Sylvie Lelitre <test.sylvie.lelitre@agrolait.com>',
|
||||
msg_id='<1198923581.41972151344608186760.JavaMail@agrolait.com>'):
|
||||
return template.format(to=to, subject=subject, extra=extra, email_from=email_from, msg_id=msg_id)
|
||||
|
||||
# Do: Raoul writes to Bert and Administrator, with a thread_model in context that should not be taken into account
|
||||
msg1_pids = [self.partner_admin_id, self.partner_bert_id]
|
||||
msg1_id = self.mail_thread.message_post(cr, self.user_raoul_id, False,
|
||||
partner_ids=msg1_pids,
|
||||
subtype='mail.mt_comment',
|
||||
context={'thread_model': 'mail.group'})
|
||||
msg1_id = self.mail_thread.message_post(
|
||||
cr, self.user_raoul_id, False,
|
||||
partner_ids=msg1_pids,
|
||||
subtype='mail.mt_comment',
|
||||
context={'thread_model': 'mail.group'}
|
||||
)
|
||||
|
||||
# Test: message recipients
|
||||
msg = self.mail_message.browse(cr, uid, msg1_id)
|
||||
@@ -647,16 +654,26 @@ class TestMailgateway(TestMailBase):
|
||||
test_pids = msg1_pids
|
||||
test_nids = msg1_pids
|
||||
self.assertEqual(set(msg_pids), set(test_pids),
|
||||
'message_post: private discussion: incorrect recipients')
|
||||
'message_post: private discussion: incorrect recipients')
|
||||
self.assertEqual(set(msg_nids), set(test_nids),
|
||||
'message_post: private discussion: incorrect notified recipients')
|
||||
'message_post: private discussion: incorrect notified recipients')
|
||||
self.assertEqual(msg.model, False,
|
||||
'message_post: private discussion: context key "thread_model" not correctly ignored when having no res_id')
|
||||
'message_post: private discussion: context key "thread_model" not correctly ignored when having no res_id')
|
||||
# Test: message reply_to and message-id
|
||||
self.assertFalse(msg.reply_to,
|
||||
'message_post: private discussion: initial message should not have any reply_to specified')
|
||||
self.assertIn('openerp-private', msg.message_id,
|
||||
'message_post: private discussion: message-id should contain the private keyword')
|
||||
|
||||
# Do: Bert replies through mailgateway (is a customer)
|
||||
msg2_id = self.mail_thread.message_post(cr, uid, False,
|
||||
author_id=self.partner_bert_id,
|
||||
parent_id=msg1_id, subtype='mail.mt_comment')
|
||||
reply_message = format(MAIL_TEMPLATE, to='not_important@mydomain.com',
|
||||
email_from='bert@bert.fr',
|
||||
extra='In-Reply-To: %s' % msg.message_id,
|
||||
msg_id='<test30.JavaMail.0@agrolait.com>')
|
||||
self.mail_thread.message_process(cr, uid, None, reply_message)
|
||||
|
||||
# Test: last mail_message created
|
||||
msg2_id = self.mail_message.search(cr, uid, [], limit=1)[0]
|
||||
|
||||
# Test: message recipients
|
||||
msg = self.mail_message.browse(cr, uid, msg2_id)
|
||||
@@ -664,14 +681,32 @@ class TestMailgateway(TestMailBase):
|
||||
msg_nids = [p.id for p in msg.notified_partner_ids]
|
||||
test_pids = [self.partner_admin_id, self.partner_raoul_id]
|
||||
test_nids = test_pids
|
||||
self.assertEqual(msg.author_id.id, self.partner_bert_id,
|
||||
'message_post: private discussion: wrong author through mailgatewya based on email')
|
||||
self.assertEqual(set(msg_pids), set(test_pids),
|
||||
'message_post: private discussion: incorrect recipients when replying')
|
||||
'message_post: private discussion: incorrect recipients when replying')
|
||||
self.assertEqual(set(msg_nids), set(test_nids),
|
||||
'message_post: private discussion: incorrect notified recipients when replying')
|
||||
'message_post: private discussion: incorrect notified recipients when replying')
|
||||
|
||||
# Do: Bert replies through chatter (is a customer)
|
||||
msg3_id = self.mail_thread.message_post(
|
||||
cr, uid, False,
|
||||
author_id=self.partner_bert_id,
|
||||
parent_id=msg1_id, subtype='mail.mt_comment')
|
||||
|
||||
# Test: message recipients
|
||||
msg = self.mail_message.browse(cr, uid, msg3_id)
|
||||
msg_pids = [p.id for p in msg.partner_ids]
|
||||
msg_nids = [p.id for p in msg.notified_partner_ids]
|
||||
test_pids = [self.partner_admin_id, self.partner_raoul_id]
|
||||
test_nids = test_pids
|
||||
self.assertEqual(set(msg_pids), set(test_pids),
|
||||
'message_post: private discussion: incorrect recipients when replying')
|
||||
self.assertEqual(set(msg_nids), set(test_nids),
|
||||
'message_post: private discussion: incorrect notified recipients when replying')
|
||||
|
||||
# Do: Administrator replies
|
||||
msg3_id = self.mail_thread.message_post(cr, uid, False,
|
||||
parent_id=msg2_id, subtype='mail.mt_comment')
|
||||
msg3_id = self.mail_thread.message_post(cr, uid, False, parent_id=msg3_id, subtype='mail.mt_comment')
|
||||
|
||||
# Test: message recipients
|
||||
msg = self.mail_message.browse(cr, uid, msg3_id)
|
||||
@@ -680,6 +715,6 @@ class TestMailgateway(TestMailBase):
|
||||
test_pids = [self.partner_bert_id, self.partner_raoul_id]
|
||||
test_nids = test_pids
|
||||
self.assertEqual(set(msg_pids), set(test_pids),
|
||||
'message_post: private discussion: incorrect recipients when replying')
|
||||
'message_post: private discussion: incorrect recipients when replying')
|
||||
self.assertEqual(set(msg_nids), set(test_nids),
|
||||
'message_post: private discussion: incorrect notified recipients when replying')
|
||||
'message_post: private discussion: incorrect notified recipients when replying')
|
||||
|
||||
+38
-17
@@ -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-11-28 14:03+0000\n"
|
||||
"Last-Translator: hifly <Unknown>\n"
|
||||
"PO-Revision-Date: 2013-08-07 16:09+0000\n"
|
||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@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-03-16 05:02+0000\n"
|
||||
"X-Generator: Launchpad (build 16532)\n"
|
||||
"X-Launchpad-Export-Date: 2013-08-08 04:39+0000\n"
|
||||
"X-Generator: Launchpad (build 16723)\n"
|
||||
|
||||
#. module: mrp
|
||||
#: help:mrp.config.settings,module_mrp_repair:0
|
||||
@@ -69,7 +69,7 @@ msgstr "周期数"
|
||||
msgid ""
|
||||
"The 'Minimum stock rule' allows the system to create procurement orders "
|
||||
"automatically as soon as the minimum stock is reached."
|
||||
msgstr "最小库存规则允许系统在达到最小库存数量的时候立即创建补货单"
|
||||
msgstr "最小库存规则允许系统在达到最小库存数量的时会自动创建补货单"
|
||||
|
||||
#. module: mrp
|
||||
#: code:addons/mrp/report/price.py:130
|
||||
@@ -199,7 +199,7 @@ msgstr "用于外购的物料"
|
||||
#. module: mrp
|
||||
#: model:ir.ui.menu,name:mrp.menu_mrp_production_order_action
|
||||
msgid "Order Planning"
|
||||
msgstr ""
|
||||
msgstr "制造单计划"
|
||||
|
||||
#. module: mrp
|
||||
#: field:mrp.config.settings,module_mrp_operations:0
|
||||
@@ -286,7 +286,7 @@ msgstr "从一个生产订单生产几个产品"
|
||||
msgid ""
|
||||
"The selection of the right Bill of Material to use will depend on the "
|
||||
"properties specified on the sales order and the Bill of Material."
|
||||
msgstr ""
|
||||
msgstr "被正确使用的BOM依赖于销售单和BOM中指定的属性"
|
||||
|
||||
#. module: mrp
|
||||
#: view:mrp.bom:0
|
||||
@@ -294,7 +294,7 @@ msgid ""
|
||||
"When processing a sales order for this product, the delivery order\n"
|
||||
" will contain the raw materials, instead of "
|
||||
"the finished product."
|
||||
msgstr ""
|
||||
msgstr "当处理该产品的销售单时,发运单将以原料来替代成品"
|
||||
|
||||
#. module: mrp
|
||||
#: report:mrp.production.order:0
|
||||
@@ -490,6 +490,16 @@ msgid ""
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" 创建新属性\n"
|
||||
" </p><p>\n"
|
||||
" 当同一个产品有多种组成的方式,\n"
|
||||
" OpenERP会根据属性来选择合适的BoM。\n"
|
||||
" 你可以给每个物料清单分配若干个属性,\n"
|
||||
" 当销售人员创建销售订单,根据需要指定几个属性,\n"
|
||||
" 然后OpenERP 会根据其来自动选择相应的BoM。\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
|
||||
#. module: mrp
|
||||
#: view:mrp.production:0
|
||||
@@ -499,7 +509,7 @@ msgid "Scheduled Date"
|
||||
msgstr "下单日期"
|
||||
|
||||
#. module: mrp
|
||||
#: code:addons/mrp/procurement.py:124
|
||||
#: code:addons/mrp/procurement.py:129
|
||||
#, python-format
|
||||
msgid "Manufacturing Order <em>%s</em> created."
|
||||
msgstr "生产订单 <em>%s</em> 创建。"
|
||||
@@ -684,7 +694,7 @@ msgid "Work Center Load"
|
||||
msgstr "工作中心负载"
|
||||
|
||||
#. module: mrp
|
||||
#: code:addons/mrp/procurement.py:50
|
||||
#: code:addons/mrp/procurement.py:55
|
||||
#, python-format
|
||||
msgid "No BoM defined for this product !"
|
||||
msgstr "该产品尚未定义物料清单!"
|
||||
@@ -991,7 +1001,7 @@ msgid "BoM Type"
|
||||
msgstr "物料清单类型"
|
||||
|
||||
#. module: mrp
|
||||
#: code:addons/mrp/procurement.py:52
|
||||
#: code:addons/mrp/procurement.py:57
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Procurement '%s' has an exception: 'No BoM defined for this product !'"
|
||||
@@ -1120,7 +1130,7 @@ msgstr "生产订单"
|
||||
#. module: mrp
|
||||
#: selection:mrp.production,state:0
|
||||
msgid "Awaiting Raw Materials"
|
||||
msgstr ""
|
||||
msgstr "等待原材料"
|
||||
|
||||
#. module: mrp
|
||||
#: field:mrp.bom,position:0
|
||||
@@ -1629,6 +1639,17 @@ msgid ""
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" 点击创建属性组\n"
|
||||
" </p><p>\n"
|
||||
" 可以定义特定的属性组用来分配到BoM和销售订单。\n"
|
||||
" 根据销售人员在销售订单上选取的属性,OpenERP可以\n"
|
||||
" 自动选择相应的BoM。\n"
|
||||
" </p><p>\n"
|
||||
" 例如,在属性组“保修” ,你有两个属性:1年保修,3年保修。\n"
|
||||
" 根据销售订单上的选择,OpenERP会自动选择对应的BoM排单生产。\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
|
||||
#. module: mrp
|
||||
#: field:mrp.workcenter,capacity_per_cycle:0
|
||||
@@ -1774,8 +1795,8 @@ msgid ""
|
||||
"the quantity selected and it will finish the production order when total "
|
||||
"ordered quantities are produced."
|
||||
msgstr ""
|
||||
"'废料' 模式会仅消耗对应成品数量的原材料而无产成品产出。\n"
|
||||
"'报工' 模式会消耗对应成品数量的原材料而且产出对应数量的产成品。"
|
||||
"'投料' 模式会仅消耗对应成品数量的原材料暂无产成品产出。\n"
|
||||
"'投料并产出' 模式会消耗对应成品数量的原材料并立即产出对应数量的产成品。"
|
||||
|
||||
#. module: mrp
|
||||
#: view:mrp.production:0
|
||||
@@ -1981,7 +2002,7 @@ msgstr "新建"
|
||||
#. module: mrp
|
||||
#: selection:mrp.product.produce,mode:0
|
||||
msgid "Consume Only"
|
||||
msgstr "废料"
|
||||
msgstr "投料"
|
||||
|
||||
#. module: mrp
|
||||
#: view:mrp.production:0
|
||||
@@ -2161,7 +2182,7 @@ msgstr "用户"
|
||||
#. module: mrp
|
||||
#: selection:mrp.product.produce,mode:0
|
||||
msgid "Consume & Produce"
|
||||
msgstr "报工"
|
||||
msgstr "投料并产出"
|
||||
|
||||
#. module: mrp
|
||||
#: field:mrp.bom,bom_id:0
|
||||
@@ -2191,7 +2212,7 @@ msgstr "产品类型是可库存或消耗品"
|
||||
#. module: mrp
|
||||
#: selection:mrp.production,state:0
|
||||
msgid "Production Started"
|
||||
msgstr "生产开始了"
|
||||
msgstr "已开始生产"
|
||||
|
||||
#. module: mrp
|
||||
#: model:process.node,name:mrp.process_node_procureproducts0
|
||||
|
||||
@@ -0,0 +1,284 @@
|
||||
# Bosnian 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-08-06 16:51+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Bosnian <bs@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-08-07 04:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16721)\n"
|
||||
|
||||
#. module: note
|
||||
#: field:note.note,memo:0
|
||||
msgid "Note Content"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: view:note.stage:0
|
||||
msgid "Stages of Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: model:note.stage,name:note.demo_note_stage_04
|
||||
#: model:note.stage,name:note.note_stage_02
|
||||
msgid "This Week"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: model:ir.model,name:note.model_base_config_settings
|
||||
msgid "base.config.settings"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: model:ir.model,name:note.model_note_tag
|
||||
msgid "Note Tag"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: model:res.groups,name:note.group_note_fancy
|
||||
msgid "Notes / Fancy mode"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: model:ir.model,name:note.model_note_note
|
||||
#: view:note.note:0
|
||||
msgid "Note"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: view:note.note:0
|
||||
msgid "Group By..."
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: field:note.note,message_follower_ids:0
|
||||
msgid "Followers"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: model:ir.actions.act_window,help:note.action_note_note
|
||||
msgid ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Click to add a personal note.\n"
|
||||
" </p><p>\n"
|
||||
" Use notes to organize personal tasks or notes. All\n"
|
||||
" notes are private; no one else will be able to see them. "
|
||||
"However\n"
|
||||
" you can share some notes with other people by inviting "
|
||||
"followers\n"
|
||||
" on the note. (Useful for meeting minutes, especially if\n"
|
||||
" you activate the pad feature for collaborative writings).\n"
|
||||
" </p><p>\n"
|
||||
" You can customize how you process your notes/tasks by adding,\n"
|
||||
" removing or modifying columns.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: model:note.stage,name:note.demo_note_stage_01
|
||||
#: model:note.stage,name:note.note_stage_01
|
||||
msgid "Today"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: model:ir.model,name:note.model_res_users
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: view:note.note:0
|
||||
msgid "í"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: view:note.stage:0
|
||||
msgid "Stage of Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: field:note.note,message_unread:0
|
||||
msgid "Unread Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: field:note.note,current_partner_id:0
|
||||
msgid "unknown"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: view:note.note:0
|
||||
msgid "By sticky note Category"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: help:note.note,message_unread:0
|
||||
msgid "If checked new messages require your attention."
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: field:note.stage,name:0
|
||||
msgid "Stage Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: field:note.note,message_is_follower:0
|
||||
msgid "Is a Follower"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: model:note.stage,name:note.demo_note_stage_02
|
||||
msgid "Tomorrow"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: view:note.note:0
|
||||
#: field:note.note,open:0
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: help:note.stage,user_id:0
|
||||
msgid "Owner of the note stage."
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: model:ir.ui.menu,name:note.menu_notes_stage
|
||||
msgid "Categories"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: view:note.note:0
|
||||
#: field:note.note,stage_id:0
|
||||
msgid "Stage"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: field:note.tag,name:0
|
||||
msgid "Tag Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: field:note.note,message_ids:0
|
||||
msgid "Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: view:base.config.settings:0
|
||||
#: model:ir.actions.act_window,name:note.action_note_note
|
||||
#: model:ir.ui.menu,name:note.menu_note_notes
|
||||
#: view:note.note:0
|
||||
#: model:note.stage,name:note.note_stage_04
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: model:note.stage,name:note.demo_note_stage_03
|
||||
#: model:note.stage,name:note.note_stage_03
|
||||
msgid "Later"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: model:ir.model,name:note.model_note_stage
|
||||
msgid "Note Stage"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: field:note.note,message_summary:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: field:note.note,stage_ids:0
|
||||
msgid "Stages of Users"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: field:note.note,name:0
|
||||
msgid "Note Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: model:ir.actions.act_window,name:note.action_note_stage
|
||||
#: view:note.note:0
|
||||
msgid "Stages"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: help:note.note,message_ids:0
|
||||
msgid "Messages and communication history"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: view:note.note:0
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: field:note.note,color:0
|
||||
msgid "Color Index"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: field:note.note,sequence:0
|
||||
#: field:note.stage,sequence:0
|
||||
msgid "Sequence"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: view:note.note:0
|
||||
#: field:note.note,tag_ids:0
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: view:note.note:0
|
||||
msgid "Archive"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: field:base.config.settings,module_note_pad:0
|
||||
msgid "Use collaborative pads (etherpad)"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: help:note.note,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: note
|
||||
#: field:base.config.settings,group_note_fancy:0
|
||||
msgid "Use fancy layouts for notes"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: field:note.note,current_partner_id:0
|
||||
#: field:note.stage,user_id:0
|
||||
msgid "Owner"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: help:note.stage,sequence:0
|
||||
msgid "Used to order the note stages"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: field:note.note,date_done:0
|
||||
msgid "Date done"
|
||||
msgstr ""
|
||||
|
||||
#. module: note
|
||||
#: field:note.stage,fold:0
|
||||
msgid "Folded by Default"
|
||||
msgstr ""
|
||||
@@ -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-07-26 07:07+0000\n"
|
||||
"PO-Revision-Date: 2013-08-06 09:45+0000\n"
|
||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@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-07-27 05:02+0000\n"
|
||||
"X-Generator: Launchpad (build 16700)\n"
|
||||
"X-Launchpad-Export-Date: 2013-08-07 04:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16721)\n"
|
||||
|
||||
#. module: point_of_sale
|
||||
#: field:report.transaction.pos,product_nb:0
|
||||
@@ -42,6 +42,15 @@ msgid ""
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" 单击定义一个新的产品类别。\n"
|
||||
" </p><p>\n"
|
||||
" 产品类别用于通过触摸屏浏览产品。\n"
|
||||
" </p><p>\n"
|
||||
" "
|
||||
"为产品类别上传图片后,触摸屏布局将会自动调整。因此,针对分辨率小于(1024x768)的显示设备,我们建议不要为产品类别上传图片。\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
|
||||
#. module: point_of_sale
|
||||
#: view:pos.receipt:0
|
||||
@@ -285,7 +294,7 @@ msgstr "调试窗口"
|
||||
#: code:addons/point_of_sale/static/src/xml/pos.xml:613
|
||||
#, python-format
|
||||
msgid "Change:"
|
||||
msgstr "零钞"
|
||||
msgstr "找零:"
|
||||
|
||||
#. module: point_of_sale
|
||||
#: model:product.template,name:point_of_sale.coca_regular_2l_product_template
|
||||
@@ -739,6 +748,8 @@ msgid ""
|
||||
"use\n"
|
||||
" a modern browser like"
|
||||
msgstr ""
|
||||
"销售点功能不支持 Microsoft Internet Explorer 浏览器,请使用更现代化的浏览器如:Mozilla Firefox 和 "
|
||||
"Google Chrome 等"
|
||||
|
||||
#. module: point_of_sale
|
||||
#: view:pos.session.opening:0
|
||||
@@ -934,7 +945,7 @@ msgstr "付款合计"
|
||||
#. module: point_of_sale
|
||||
#: model:ir.model,name:point_of_sale.model_pos_session_opening
|
||||
msgid "pos.session.opening"
|
||||
msgstr ""
|
||||
msgstr "pos.session.opening"
|
||||
|
||||
#. module: point_of_sale
|
||||
#: view:res.users:0
|
||||
@@ -1077,7 +1088,7 @@ 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 ""
|
||||
msgstr "Oven Baked Lays Natural 150g"
|
||||
|
||||
#. module: point_of_sale
|
||||
#: sql_constraint:pos.session:0
|
||||
@@ -1142,7 +1153,7 @@ msgstr "(更新)"
|
||||
#. module: point_of_sale
|
||||
#: model:product.template,name:point_of_sale.ijsboerke_vanille_2,5l_product_template
|
||||
msgid "IJsboerke Vanilla 2.5L"
|
||||
msgstr ""
|
||||
msgstr "IJsboerke Vanilla 2.5L"
|
||||
|
||||
#. module: point_of_sale
|
||||
#: model:ir.actions.act_window,name:point_of_sale.action_report_pos_details
|
||||
@@ -1161,7 +1172,7 @@ msgstr "2L 依云"
|
||||
#: code:addons/point_of_sale/wizard/pos_session_opening.py:33
|
||||
#, python-format
|
||||
msgid "Start Point Of Sale"
|
||||
msgstr ""
|
||||
msgstr "启动销售点"
|
||||
|
||||
#. module: point_of_sale
|
||||
#: model:pos.category,name:point_of_sale.pils
|
||||
@@ -3420,7 +3431,7 @@ msgstr "销售明细"
|
||||
#: view:res.partner:0
|
||||
#: view:res.users:0
|
||||
msgid "Point of Sale"
|
||||
msgstr "POS"
|
||||
msgstr "销售点"
|
||||
|
||||
#. module: point_of_sale
|
||||
#: view:pos.order:0
|
||||
|
||||
@@ -0,0 +1,546 @@
|
||||
# Bosnian 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-08-06 08:35+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Bosnian <bs@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-08-07 04:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16721)\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 ""
|
||||
@@ -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-07-14 04:15+0000\n"
|
||||
"Last-Translator: Alan <shuchuan.wu@gmail.com>\n"
|
||||
"PO-Revision-Date: 2013-08-06 09:36+0000\n"
|
||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@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-07-15 04:51+0000\n"
|
||||
"X-Generator: Launchpad (build 16696)\n"
|
||||
"X-Launchpad-Export-Date: 2013-08-07 04:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16721)\n"
|
||||
|
||||
#. module: project
|
||||
#: view:project.project:0
|
||||
@@ -749,7 +749,7 @@ msgstr "待处理任务草稿"
|
||||
#. module: project
|
||||
#: field:project.project,alias_model:0
|
||||
msgid "Alias Model"
|
||||
msgstr ""
|
||||
msgstr "别名模型"
|
||||
|
||||
#. module: project
|
||||
#: help:report.project.task.user,closing_days:0
|
||||
@@ -854,7 +854,7 @@ msgstr "增加筛选条件"
|
||||
#. module: project
|
||||
#: model:ir.ui.menu,name:project.menu_tasks_config
|
||||
msgid "GTD"
|
||||
msgstr ""
|
||||
msgstr "GTD"
|
||||
|
||||
#. module: project
|
||||
#: help:project.task,state:0
|
||||
@@ -1214,7 +1214,7 @@ msgstr "%s (副本)"
|
||||
#. module: project
|
||||
#: model:mail.message.subtype,name:project.mt_project_task_stage
|
||||
msgid "Task Stage Changed"
|
||||
msgstr ""
|
||||
msgstr "任务阶段已改变"
|
||||
|
||||
#. module: project
|
||||
#: view:project.task:0
|
||||
@@ -1706,6 +1706,12 @@ msgid ""
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" 单击创建新任务。\n"
|
||||
" </p><p>\n"
|
||||
"OpenERP 系统的任务管理允许你为了更高效地完成工作而管理任务管道。你可以跟踪任务进度、与他人讨论任务、附加文档附件等。\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
|
||||
#. module: project
|
||||
#: field:project.task,date_end:0
|
||||
@@ -2013,7 +2019,7 @@ msgstr "准备好下一个阶段"
|
||||
#. module: project
|
||||
#: field:project.task.type,case_default:0
|
||||
msgid "Default for New Projects"
|
||||
msgstr ""
|
||||
msgstr "默认用于新项目"
|
||||
|
||||
#. module: project
|
||||
#: view:project.task:0
|
||||
@@ -2051,6 +2057,8 @@ msgid ""
|
||||
"resource allocation.\n"
|
||||
" This installs the module project_long_term."
|
||||
msgstr ""
|
||||
"用于长期项目管理的模块,能够跟踪计划、排程和资源控制。\n"
|
||||
" 将会安装模块“project_long_term”。"
|
||||
|
||||
#. module: project
|
||||
#: model:mail.message.subtype,description:project.mt_task_closed
|
||||
@@ -2083,6 +2091,8 @@ msgid ""
|
||||
"Provides timesheet support for the issues/bugs management in project.\n"
|
||||
" This installs the module project_issue_sheet."
|
||||
msgstr ""
|
||||
"为项目中的问题/错误管理提供时间表支持。\n"
|
||||
" 将安装模块“project_issue_sheet”。"
|
||||
|
||||
#. module: project
|
||||
#: selection:project.project,privacy_visibility:0
|
||||
|
||||
@@ -0,0 +1,984 @@
|
||||
# Bosnian 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-08-06 17:46+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Bosnian <bs@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-08-07 04:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16721)\n"
|
||||
|
||||
#. module: project_issue
|
||||
#: model:project.category,name:project_issue.project_issue_category_03
|
||||
msgid "Deadly bug"
|
||||
msgstr "Ubojita greška"
|
||||
|
||||
#. module: project_issue
|
||||
#: help:project.config.settings,fetchmail_issue:0
|
||||
msgid ""
|
||||
"Allows you to configure your incoming mail server, and create issues from "
|
||||
"incoming emails."
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue.report,delay_open:0
|
||||
msgid "Avg. Delay to Open"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
#: view:project.issue.report:0
|
||||
msgid "Group By..."
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,working_hours_open:0
|
||||
msgid "Working Hours to Open the Issue"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:mail.message.subtype,description:project_issue.mt_issue_started
|
||||
msgid "Issue started"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,date_open:0
|
||||
msgid "Opened"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue.report,opening_date:0
|
||||
msgid "Date of Opening"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue.report,month:0
|
||||
msgid "March"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,progress:0
|
||||
msgid "Progress (%)"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
#: field:project.issue,message_unread:0
|
||||
msgid "Unread Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,company_id:0
|
||||
#: view:project.issue.report:0
|
||||
#: field:project.issue.report,company_id:0
|
||||
msgid "Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,email_cc:0
|
||||
msgid "Watchers Emails"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: help:project.issue,kanban_state:0
|
||||
msgid ""
|
||||
"A Issue's kanban state indicates special situations affecting it:\n"
|
||||
" * Normal is the default situation\n"
|
||||
" * Blocked indicates something is preventing the progress of this issue\n"
|
||||
" * Ready for next stage indicates the issue is ready to be pulled to the "
|
||||
"next stage"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: help:project.issue,message_unread:0
|
||||
msgid "If checked new messages require your attention."
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: help:account.analytic.account,use_issues:0
|
||||
msgid "Check this field if this project manages issues"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,day_open:0
|
||||
msgid "Days to Open"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: code:addons/project_issue/project_issue.py:479
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You cannot escalate this issue.\n"
|
||||
"The relevant Project has not configured the Escalation Project!"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: constraint:project.project:0
|
||||
msgid "Error! You cannot assign escalation to the same project!"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue,priority:0
|
||||
#: selection:project.issue.report,priority:0
|
||||
msgid "Highest"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: help:project.issue,inactivity_days:0
|
||||
msgid "Difference in days between last action and current date"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue.report:0
|
||||
#: field:project.issue.report,day:0
|
||||
msgid "Day"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,days_since_creation:0
|
||||
msgid "Days since creation date"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,task_id:0
|
||||
#: view:project.issue.report:0
|
||||
#: field:project.issue.report,task_id:0
|
||||
msgid "Task"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:mail.message.subtype,name:project_issue.mt_project_issue_stage
|
||||
msgid "Issue Stage Changed"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,message_ids:0
|
||||
msgid "Messages"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,inactivity_days:0
|
||||
msgid "Days since last action"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:ir.model,name:project_issue.model_project_project
|
||||
#: view:project.issue:0
|
||||
#: field:project.issue,project_id:0
|
||||
#: view:project.issue.report:0
|
||||
#: field:project.issue.report,project_id:0
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:ir.actions.act_window,help:project_issue.project_issue_categ_act0
|
||||
msgid ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Click to report a new issue.\n"
|
||||
" </p><p>\n"
|
||||
" The OpenERP issues tacker allows you to efficiantly manage "
|
||||
"things\n"
|
||||
" like internal requests, software development bugs, customer\n"
|
||||
" complaints, project troubles, material breakdowns, etc.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue,state:0
|
||||
#: selection:project.issue.report,state:0
|
||||
msgid "Cancelled"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,description:0
|
||||
msgid "Private Note"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue.report,date_closed:0
|
||||
msgid "Date of Closing"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "Issue Tracker Search"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,color:0
|
||||
msgid "Color Index"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue.report,working_hours_open:0
|
||||
msgid "Avg. Working Hours to Open"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:ir.model,name:project_issue.model_account_analytic_account
|
||||
msgid "Analytic Account"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: help:project.issue,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: project_issue
|
||||
#: help:project.project,project_escalation_id:0
|
||||
msgid ""
|
||||
"If any issue is escalated from the current Project, it will be listed under "
|
||||
"the project selected here."
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "Extra Info"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:ir.actions.act_window,help:project_issue.action_project_issue_report
|
||||
msgid ""
|
||||
"This report on the project issues allows you to analyse the quality of your "
|
||||
"support or after-sales services. You can track the issues per age. You can "
|
||||
"analyse the time required to open or close an issue, the number of email to "
|
||||
"exchange and the time spent on average by issues."
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "Edit..."
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "Responsible"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "Statistics"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,kanban_state:0
|
||||
msgid "Kanban State"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: code:addons/project_issue/project_issue.py:366
|
||||
#, python-format
|
||||
msgid "Project issue <b>converted</b> to task."
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
#: field:project.issue,priority:0
|
||||
#: view:project.issue.report:0
|
||||
#: field:project.issue.report,priority:0
|
||||
msgid "Priority"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
#: field:project.issue,version_id:0
|
||||
#: view:project.issue.report:0
|
||||
#: field:project.issue.report,version_id:0
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,message_follower_ids:0
|
||||
msgid "Followers"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
#: selection:project.issue,state:0
|
||||
#: view:project.issue.report:0
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:ir.actions.act_window,name:project_issue.project_issue_categ_action
|
||||
msgid "Issue Categories"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,email_from:0
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,channel_id:0
|
||||
#: field:project.issue.report,channel_id:0
|
||||
msgid "Channel"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue,priority:0
|
||||
#: selection:project.issue.report,priority:0
|
||||
msgid "Lowest"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: code:addons/project_issue/project_issue.py:388
|
||||
#, python-format
|
||||
msgid "%s (copy)"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "Unassigned Issues"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,create_date:0
|
||||
#: view:project.issue.report:0
|
||||
#: field:project.issue.report,creation_date:0
|
||||
msgid "Creation Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:ir.actions.act_window,name:project_issue.project_issue_version_action
|
||||
#: model:ir.ui.menu,name:project_issue.menu_project_issue_version_act
|
||||
msgid "Versions"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "To Do Issues"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:ir.model,name:project_issue.model_project_issue_version
|
||||
msgid "project.issue.version"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.config.settings,fetchmail_issue:0
|
||||
msgid "Create issues from an incoming email account "
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
#: selection:project.issue,state:0
|
||||
#: view:project.issue.report:0
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue.report,month:0
|
||||
msgid "July"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:ir.ui.menu,name:project_issue.menu_project_issue_category_act
|
||||
msgid "Categories"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
#: field:project.issue,stage_id:0
|
||||
#: view:project.issue.report:0
|
||||
#: field:project.issue.report,stage_id:0
|
||||
msgid "Stage"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:ir.actions.act_window,name:project_issue.action_project_issue_report
|
||||
#: model:ir.ui.menu,name:project_issue.menu_project_issue_report_tree
|
||||
#: view:project.issue.report:0
|
||||
msgid "Issues Analysis"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: code:addons/project_issue/project_issue.py:516
|
||||
#, python-format
|
||||
msgid "No Subject"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:ir.actions.act_window,name:project_issue.action_view_my_project_issue_tree
|
||||
msgid "My Project Issues"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
#: field:project.issue,partner_id:0
|
||||
#: view:project.issue.report:0
|
||||
#: field:project.issue.report,partner_id:0
|
||||
msgid "Contact"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: code:addons/project_issue/project_issue.py:371
|
||||
#, python-format
|
||||
msgid "Tasks"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue.report,nbr:0
|
||||
msgid "# of Issues"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue.report,month:0
|
||||
msgid "September"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue.report,month:0
|
||||
msgid "December"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,categ_ids:0
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "Issue Tracker Tree"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:project.category,name:project_issue.project_issue_category_01
|
||||
msgid "Little problem"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.project:0
|
||||
msgid "creates"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:crm.case.categ,name:project_issue.feature_request_categ
|
||||
msgid "Feature Requests"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,write_date:0
|
||||
msgid "Update Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "Project:"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "Open Features"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,date_action_next:0
|
||||
msgid "Next Action"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
#: selection:project.issue,kanban_state:0
|
||||
msgid "Blocked"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,user_email:0
|
||||
msgid "User Email"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue.report:0
|
||||
msgid "#Number of Project Issues"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: help:project.issue,channel_id:0
|
||||
msgid "Communication channel."
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: help:project.issue,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: project_issue
|
||||
#: model:crm.case.categ,name:project_issue.bug_categ
|
||||
msgid "Maintenance"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue.report,state:0
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue,priority:0
|
||||
#: selection:project.issue.report,priority:0
|
||||
msgid "Low"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,date_closed:0
|
||||
#: selection:project.issue.report,state:0
|
||||
msgid "Closed"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue.report,delay_close:0
|
||||
msgid "Avg. Delay to Close"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue,state:0
|
||||
#: view:project.issue.report:0
|
||||
#: selection:project.issue.report,state:0
|
||||
msgid "Pending"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
#: field:project.issue,state:0
|
||||
#: field:project.issue.report,state:0
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue.report:0
|
||||
msgid "#Project Issues"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue.report,month:0
|
||||
msgid "August"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue,kanban_state:0
|
||||
#: selection:project.issue,priority:0
|
||||
#: selection:project.issue.report,priority:0
|
||||
msgid "Normal"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.project,issue_count:0
|
||||
msgid "unknown"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "Category:"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue.report,month:0
|
||||
msgid "June"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: help:project.issue,message_ids:0
|
||||
msgid "Messages and communication history"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "New Issues"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,day_close:0
|
||||
msgid "Days to Close"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,message_is_follower:0
|
||||
msgid "Is a Follower"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: help:project.issue,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: project_issue
|
||||
#: field:project.issue,active:0
|
||||
#: field:project.issue.version,active:0
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue.report,month:0
|
||||
msgid "November"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: code:addons/project_issue/project_issue.py:479
|
||||
#, python-format
|
||||
msgid "Warning!"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue.report:0
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue.report,month:0
|
||||
msgid "October"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: help:project.issue,days_since_creation:0
|
||||
msgid "Difference in days between creation date and current date"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue.report,month:0
|
||||
msgid "January"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "Feature Tracker Tree"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: help:project.issue,email_from:0
|
||||
msgid "These people will receive email."
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,message_summary:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,date:0
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,user_id:0
|
||||
#: view:project.issue.report:0
|
||||
#: field:project.issue.report,user_id:0
|
||||
msgid "Assigned to"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.config.settings:0
|
||||
msgid "Configure"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:mail.message.subtype,description:project_issue.mt_issue_closed
|
||||
msgid "Issue closed"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "Current Features"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue.version:0
|
||||
msgid "Issue Version"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue.version,name:0
|
||||
msgid "Version Number"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue.report,state:0
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:account.analytic.account,use_issues:0
|
||||
#: model:ir.actions.act_window,name:project_issue.act_project_project_2_project_issue_all
|
||||
#: model:ir.actions.act_window,name:project_issue.project_issue_categ_act0
|
||||
#: model:ir.ui.menu,name:project_issue.menu_project_confi
|
||||
#: model:ir.ui.menu,name:project_issue.menu_project_issue_track
|
||||
#: view:project.issue:0
|
||||
#: view:project.project:0
|
||||
msgid "Issues"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
#: selection:project.issue,state:0
|
||||
msgid "In Progress"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
#: view:project.issue.report:0
|
||||
msgid "To Do"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:ir.model,name:project_issue.model_project_issue
|
||||
#: view:project.issue.report:0
|
||||
msgid "Project Issue"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "Creation Month"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: help:project.issue,progress:0
|
||||
msgid "Computed as: Time Spent / Total Time."
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
#: selection:project.issue,kanban_state:0
|
||||
msgid "Ready for next stage"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue.report:0
|
||||
#: field:project.issue.report,section_id:0
|
||||
msgid "Sale Team"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
#: view:project.issue.report:0
|
||||
#: field:project.issue.report,month:0
|
||||
msgid "Month"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
#: field:project.issue,name:0
|
||||
#: view:project.project:0
|
||||
msgid "Issue"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:project.category,name:project_issue.project_issue_category_02
|
||||
msgid "PBCK"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "Feature Tracker Search"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,section_id:0
|
||||
msgid "Sales Team"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue.report,month:0
|
||||
msgid "May"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:ir.model,name:project_issue.model_project_config_settings
|
||||
msgid "project.config.settings"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:mail.message.subtype,name:project_issue.mt_issue_closed
|
||||
#: model:mail.message.subtype,name:project_issue.mt_project_issue_closed
|
||||
msgid "Issue Closed"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue.report:0
|
||||
#: field:project.issue.report,email:0
|
||||
msgid "# Emails"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:mail.message.subtype,name:project_issue.mt_issue_new
|
||||
#: model:mail.message.subtype,name:project_issue.mt_project_issue_new
|
||||
msgid "Issue Created"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:mail.message.subtype,name:project_issue.mt_issue_blocked
|
||||
#: model:mail.message.subtype,name:project_issue.mt_project_issue_blocked
|
||||
msgid "Issue Blocked"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue.report,month:0
|
||||
msgid "February"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:mail.message.subtype,description:project_issue.mt_issue_stage
|
||||
#: model:mail.message.subtype,description:project_issue.mt_project_issue_stage
|
||||
msgid "Stage changed"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "Feature description"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.project,project_escalation_id:0
|
||||
msgid "Project Escalation"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:ir.actions.act_window,help:project_issue.project_issue_version_action
|
||||
msgid ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" Click to add a new version.\n"
|
||||
" </p><p>\n"
|
||||
" Define here the different versions of your products on "
|
||||
"which\n"
|
||||
" you can work on issues.\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: help:project.issue,section_id:0
|
||||
msgid ""
|
||||
"Sales team to which Case belongs to. Define "
|
||||
"Responsible user and Email account for mail gateway."
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:board.board:0
|
||||
msgid "My Issues"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: help:project.issue.report,delay_open:0
|
||||
msgid "Number of Days to open the project issue."
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue.report,month:0
|
||||
msgid "April"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "⇒ Escalate"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue:0
|
||||
msgid "References"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:mail.message.subtype,description:project_issue.mt_issue_new
|
||||
msgid "Issue created"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,working_hours_close:0
|
||||
msgid "Working Hours to Close the Issue"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,id:0
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:mail.message.subtype,description:project_issue.mt_issue_blocked
|
||||
msgid "Issue blocked"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:ir.model,name:project_issue.model_project_issue_report
|
||||
msgid "project.issue.report"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: help:project.issue.report,delay_close:0
|
||||
msgid "Number of Days to close the project issue"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue.report,working_hours_close:0
|
||||
msgid "Avg. Working Hours to Close"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:mail.message.subtype,name:project_issue.mt_issue_stage
|
||||
msgid "Stage Changed"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: selection:project.issue,priority:0
|
||||
#: selection:project.issue.report,priority:0
|
||||
msgid "High"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,date_deadline:0
|
||||
msgid "Deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,date_action_last:0
|
||||
msgid "Last Action"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: view:project.issue.report:0
|
||||
#: field:project.issue.report,name:0
|
||||
msgid "Year"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: field:project.issue,duration:0
|
||||
msgid "Duration"
|
||||
msgstr ""
|
||||
|
||||
#. module: project_issue
|
||||
#: model:mail.message.subtype,name:project_issue.mt_issue_started
|
||||
#: model:mail.message.subtype,name:project_issue.mt_project_issue_started
|
||||
msgid "Issue Started"
|
||||
msgstr ""
|
||||
@@ -0,0 +1,629 @@
|
||||
# Bosnian 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-08-08 22:26+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Bosnian <bs@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-08-09 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 16723)\n"
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:842
|
||||
#, python-format
|
||||
msgid "Invitation to collaborate about %s"
|
||||
msgstr "Poziv za razgovor o %s"
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:780
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The share engine has not been able to fetch a record_id for your invitation."
|
||||
msgstr ""
|
||||
"Sistem za dijeljenje nije bio u mogućnosti da uhvati record_id za vašu "
|
||||
"pozivnicu."
|
||||
|
||||
#. module: share
|
||||
#: view:share.wizard:0
|
||||
msgid "Include an Optional Personal Message"
|
||||
msgstr "Uključi opcionalnu personalnu poruku"
|
||||
|
||||
#. module: share
|
||||
#: field:share.wizard,embed_option_title:0
|
||||
msgid "Display title"
|
||||
msgstr "Prikaži naslov"
|
||||
|
||||
#. module: share
|
||||
#: view:share.wizard:0
|
||||
msgid "Access granted!"
|
||||
msgstr "Pristup odobren!"
|
||||
|
||||
#. module: share
|
||||
#: field:share.wizard,record_name:0
|
||||
msgid "Record name"
|
||||
msgstr "Ime zapisa"
|
||||
|
||||
#. module: share
|
||||
#: help:share.wizard,message:0
|
||||
msgid ""
|
||||
"An optional personal message, to be included in the email notification."
|
||||
msgstr ""
|
||||
"Opcionalna personalna poruka, da bude uključena u email obavještenje."
|
||||
|
||||
#. module: share
|
||||
#: field:share.wizard,user_type:0
|
||||
msgid "Sharing method"
|
||||
msgstr "Metoda djeljenja"
|
||||
|
||||
#. module: share
|
||||
#: field:share.wizard,name:0
|
||||
msgid "Share Title"
|
||||
msgstr "Djeli naslov"
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:848
|
||||
#: code:addons/share/wizard/share_wizard.py:877
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The documents are not attached, you can view them online directly on my "
|
||||
"OpenERP server at:\n"
|
||||
" %s\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"Ovi dokumenti nisu zakačeni, možete ih pregledati online direktno na mom "
|
||||
"OpenERP serveru na:\n"
|
||||
" %s\n"
|
||||
"\n"
|
||||
|
||||
#. module: share
|
||||
#: model:ir.module.category,name:share.module_category_share
|
||||
msgid "Sharing"
|
||||
msgstr "Dijeljeno"
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:843
|
||||
#: code:addons/share/wizard/share_wizard.py:875
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Hello,\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"Pozdrav,\n"
|
||||
"\n"
|
||||
|
||||
#. module: share
|
||||
#: field:share.wizard,share_root_url:0
|
||||
msgid "Share Access URL"
|
||||
msgstr "Dijeli URL pristupa"
|
||||
|
||||
#. module: share
|
||||
#: field:share.wizard,email_1:0
|
||||
#: field:share.wizard,email_2:0
|
||||
#: field:share.wizard,email_3:0
|
||||
msgid "New user email"
|
||||
msgstr "Novi korisnički email"
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:887
|
||||
#, python-format
|
||||
msgid "You may use your current login (%s) and password to view them.\n"
|
||||
msgstr ""
|
||||
"Možete koristiti vašu trenutnu prijavu (%s) i šifru da ih pregledate..\n"
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:621
|
||||
#, python-format
|
||||
msgid "(Modified)"
|
||||
msgstr "(promjenjeno)"
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:665
|
||||
#, python-format
|
||||
msgid "You must be a member of the Share/User group to use the share wizard."
|
||||
msgstr ""
|
||||
"Morate biti član Dijeli/Korisnik grupe da bi ste koristili čarobnjak "
|
||||
"dijeljenja."
|
||||
|
||||
#. module: share
|
||||
#. openerp-web
|
||||
#: code:addons/share/static/src/js/share.js:63
|
||||
#, python-format
|
||||
msgid "Embed"
|
||||
msgstr "Ugradi"
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:599
|
||||
#, python-format
|
||||
msgid "Sharing filter created by user %s (%s) for group %s"
|
||||
msgstr "Djeljeni filter kreiran od strane korisnika %s (%s) za grupu %s"
|
||||
|
||||
#. module: share
|
||||
#: field:share.wizard,embed_url:0
|
||||
#: field:share.wizard.result.line,share_url:0
|
||||
msgid "Share URL"
|
||||
msgstr "URL djeljenja"
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:849
|
||||
#: code:addons/share/wizard/share_wizard.py:881
|
||||
#, python-format
|
||||
msgid "These are your credentials to access this protected area:\n"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: view:share.wizard:0
|
||||
msgid "Access info"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#. openerp-web
|
||||
#: code:addons/share/static/src/js/share.js:60
|
||||
#: view:share.wizard:0
|
||||
#, python-format
|
||||
msgid "Share"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:571
|
||||
#, python-format
|
||||
msgid "(Duplicated for modified sharing permissions)"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:669
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Please indicate the emails of the persons to share with, one per line."
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: help:share.wizard,domain:0
|
||||
msgid "Optional domain for further data filtering"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: view:share.wizard:0
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:662
|
||||
#, python-format
|
||||
msgid "Action and Access Mode are required to create a shared access."
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:850
|
||||
#: code:addons/share/wizard/share_wizard.py:882
|
||||
#, python-format
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: view:share.wizard:0
|
||||
msgid "Sharing Options"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#. openerp-web
|
||||
#: code:addons/share/static/src/xml/share.xml:9
|
||||
#, python-format
|
||||
msgid "Invite"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: view:share.wizard:0
|
||||
msgid "Embedded code options"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: view:share.wizard:0
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: view:share.wizard:0
|
||||
msgid ""
|
||||
"Please select the action that opens the screen containing the data you want "
|
||||
"to share."
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: field:res.groups,share:0
|
||||
msgid "Share Group"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:835
|
||||
#: code:addons/share/wizard/share_wizard.py:866
|
||||
#, python-format
|
||||
msgid "Email required"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: view:share.wizard:0
|
||||
msgid ""
|
||||
"Optionally, you may specify an additional domain restriction that will be "
|
||||
"applied to the shared data."
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: view:res.groups:0
|
||||
msgid "Non-Share Groups"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: view:share.wizard:0
|
||||
msgid ""
|
||||
"An email notification with instructions has been sent to the following "
|
||||
"people:"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:77
|
||||
#, python-format
|
||||
msgid "Direct link or embed code"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:856
|
||||
#: code:addons/share/wizard/share_wizard.py:890
|
||||
#, python-format
|
||||
msgid ""
|
||||
"OpenERP is a powerful and user-friendly suite of Business Applications (CRM, "
|
||||
"Sales, HR, etc.)\n"
|
||||
"It is open source and can be found on http://www.openerp.com."
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: field:share.wizard,action_id:0
|
||||
msgid "Action to share"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: help:share.wizard,record_name:0
|
||||
msgid "Name of the shared record, if sharing a precise record"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: field:res.users,share:0
|
||||
msgid "Share User"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: field:share.wizard.result.line,user_id:0
|
||||
msgid "unknown"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:61
|
||||
#: code:addons/share/wizard/share_wizard.py:657
|
||||
#, python-format
|
||||
msgid "Sharing access cannot be created."
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:780
|
||||
#, python-format
|
||||
msgid "Record id not found"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: help:res.groups,share:0
|
||||
msgid "Group created to set access rights for sharing data with some users."
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: view:res.groups:0
|
||||
msgid "Share Groups"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: help:share.wizard,action_id:0
|
||||
msgid ""
|
||||
"The action that opens the screen containing the data you wish to share."
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:546
|
||||
#, python-format
|
||||
msgid "(Copy for sharing)"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: field:share.wizard.result.line,newly_created:0
|
||||
msgid "Newly created"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: help:share.wizard,name:0
|
||||
msgid "Title for the share (displayed to users as menu and shortcut name)"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:636
|
||||
#, python-format
|
||||
msgid "Indirect sharing filter created by user %s (%s) for group %s"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: help:share.wizard,share_root_url:0
|
||||
msgid "Main access page for users that are granted shared access"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:206
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You must configure your email address in the user preferences before using "
|
||||
"the Share button."
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: model:res.groups,name:share.group_share_user
|
||||
msgid "User"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:658
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Sorry, the current screen and filter you are trying to share are not "
|
||||
"supported at the moment.\n"
|
||||
"You may want to try a simpler filter."
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: view:share.wizard:0
|
||||
msgid "Use this link"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:852
|
||||
#: code:addons/share/wizard/share_wizard.py:884
|
||||
#, python-format
|
||||
msgid "Database"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: view:share.wizard:0
|
||||
msgid "Share with these People (one email per line)"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: field:share.wizard,domain:0
|
||||
msgid "Domain"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: view:res.groups:0
|
||||
msgid "{'search_default_no_share':1}"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: view:share.wizard:0
|
||||
#: field:share.wizard,result_line_ids:0
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: help:share.wizard,embed_code:0
|
||||
msgid ""
|
||||
"Embed this code in your documents to provide a link to the shared document."
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:513
|
||||
#, python-format
|
||||
msgid "Copied access for sharing"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:817
|
||||
#, python-format
|
||||
msgid "Invitation"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: model:ir.actions.act_window,name:share.action_share_wizard_step1
|
||||
msgid "Share your documents"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: view:share.wizard:0
|
||||
msgid "Or insert the following code where you want to embed your documents"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:886
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The documents have been automatically added to your current OpenERP "
|
||||
"documents.\n"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: model:ir.model,name:share.model_share_wizard_result_line
|
||||
msgid "share.wizard.result.line"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: field:share.wizard,embed_code:0
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: help:share.wizard,user_type:0
|
||||
msgid "Select the type of user(s) you would like to share data with."
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:844
|
||||
#, python-format
|
||||
msgid ""
|
||||
"I have shared %s (%s) with you!\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: field:share.wizard,view_type:0
|
||||
msgid "Current View Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: selection:share.wizard,access_mode:0
|
||||
msgid "Can view"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: selection:share.wizard,access_mode:0
|
||||
msgid "Can edit"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: view:share.wizard:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: help:res.users,share:0
|
||||
msgid ""
|
||||
"External user with limited access, created only for the purpose of sharing "
|
||||
"data."
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: model:ir.actions.act_window,name:share.action_share_wizard
|
||||
#: model:ir.model,name:share.model_share_wizard
|
||||
#: field:share.wizard.result.line,share_wizard_id:0
|
||||
msgid "Share Wizard"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:793
|
||||
#, python-format
|
||||
msgid "Shared access created!"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: model:res.groups,comment:share.group_share_user
|
||||
msgid ""
|
||||
"\n"
|
||||
"Members of this groups have access to the sharing wizard, which allows them "
|
||||
"to invite external users to view or edit some of their documents."
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:853
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The documents have been automatically added to your subscriptions.\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: model:ir.model,name:share.model_res_users
|
||||
msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:876
|
||||
#, python-format
|
||||
msgid ""
|
||||
"I've shared %s with you!\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: model:ir.model,name:share.model_res_groups
|
||||
msgid "Access Groups"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: field:share.wizard,invite:0
|
||||
msgid "Invite users to OpenSocial record"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:851
|
||||
#: code:addons/share/wizard/share_wizard.py:883
|
||||
#: field:share.wizard.result.line,password:0
|
||||
#, python-format
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:77
|
||||
#: field:share.wizard,new_users:0
|
||||
#, python-format
|
||||
msgid "Emails"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: field:share.wizard,embed_option_search:0
|
||||
msgid "Display search view"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: field:share.wizard,message:0
|
||||
msgid "Personal Message"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:835
|
||||
#: code:addons/share/wizard/share_wizard.py:866
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The current user must have an email address configured in User Preferences "
|
||||
"to be able to send outgoing emails."
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: code:addons/share/wizard/share_wizard.py:205
|
||||
#, python-format
|
||||
msgid "No email address configured"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: field:share.wizard.result.line,login:0
|
||||
msgid "Login"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: view:res.users:0
|
||||
msgid "Regular users only (no share user)"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: field:share.wizard,access_mode:0
|
||||
msgid "Access Mode"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: view:share.wizard:0
|
||||
msgid "Sharing: preparation"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: model:ir.model,name:share.model_ir_model_access
|
||||
msgid "ir.model.access"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: view:share.wizard:0
|
||||
msgid "or"
|
||||
msgstr ""
|
||||
|
||||
#. module: share
|
||||
#: help:share.wizard,access_mode:0
|
||||
msgid "Access rights to be granted on the shared documents."
|
||||
msgstr ""
|
||||
@@ -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-07-27 18:34+0000\n"
|
||||
"PO-Revision-Date: 2013-08-06 09:26+0000\n"
|
||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@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-07-28 05:54+0000\n"
|
||||
"X-Generator: Launchpad (build 16700)\n"
|
||||
"X-Launchpad-Export-Date: 2013-08-07 04:46+0000\n"
|
||||
"X-Generator: Launchpad (build 16721)\n"
|
||||
|
||||
#. module: stock
|
||||
#: field:stock.inventory.line.split,line_exist_ids:0
|
||||
@@ -1432,6 +1432,13 @@ msgid ""
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" 创建一个新的凭证。\n"
|
||||
" </p><p>\n"
|
||||
" 根据所执行操作的类型 或者 工人/团队 将要执行的操作,库存凭证系统允许你指定每个库存操作对应到指定的凭证。\n"
|
||||
" 例如库存凭证可以是:质量控制,分拣单,包装 等等。\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
|
||||
#. module: stock
|
||||
#: help:stock.location,chained_auto_packing:0
|
||||
@@ -2332,7 +2339,7 @@ msgstr "供货商库位"
|
||||
#. module: stock
|
||||
#: view:stock.location.product:0
|
||||
msgid "View Products Inventory"
|
||||
msgstr "查看产品存货清单"
|
||||
msgstr "查看产品库存"
|
||||
|
||||
#. module: stock
|
||||
#: view:stock.move:0
|
||||
@@ -2415,6 +2422,13 @@ msgid ""
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" 创建一个库存移库单。\n"
|
||||
" </p><p>\n"
|
||||
" 此菜单给你在一个特定产品上面的库存操作的完整的可追溯性。\n"
|
||||
" 你能过滤该产品,查看该产品所有已经发生和未发生的移库。\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
|
||||
#. module: stock
|
||||
#: view:stock.location:0
|
||||
@@ -2989,6 +3003,13 @@ msgid ""
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" 添加一个库位。\n"
|
||||
" </p><p>\n"
|
||||
" 这是你的公司的仓库和库位的结构。\n"
|
||||
" 您能点击一个库位,获得产品的清单,和它们在每个库位及其子库位中的库存情况。\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
|
||||
#. module: stock
|
||||
#: field:stock.location,stock_real:0
|
||||
@@ -3151,6 +3172,10 @@ msgid ""
|
||||
"needs, etc.\n"
|
||||
" This installs the module stock_location."
|
||||
msgstr ""
|
||||
"提供推送物流。这个特性的典型使用是:\n"
|
||||
" 管理产品的生产链,管理每个产品的默认库位,,\n"
|
||||
" 根据业务需要定义仓库的内路线等等。\n"
|
||||
"这需要安装模块 stock_location 。"
|
||||
|
||||
#. module: stock
|
||||
#: view:stock.inventory:0
|
||||
@@ -3212,6 +3237,13 @@ msgid ""
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" 添加一个追踪号码。\n"
|
||||
" </p><p>\n"
|
||||
" 这是所有包装的一个列表。当你选择了一个包装,你\n"
|
||||
" 能获得包含在这个包装中的产品的上下游的可追踪性。\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
|
||||
#. module: stock
|
||||
#: code:addons/stock/stock.py:2501
|
||||
@@ -3381,6 +3413,13 @@ msgid ""
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" 单击开始一次盘点。\n"
|
||||
" </p><p>\n"
|
||||
" "
|
||||
"定期盘点通常用于清点每个库位的商品数量。你可以每年定期使用本功能一次来做总体盘点,也可以在任何你需要的时候进行以便符合当前某个产品的存量级别。\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
|
||||
#. module: stock
|
||||
#: view:stock.return.picking:0
|
||||
@@ -3540,7 +3579,7 @@ msgstr "货架 1"
|
||||
#: help:stock.picking.in,date:0
|
||||
#: help:stock.picking.out,date:0
|
||||
msgid "Creation time, usually the time of the order."
|
||||
msgstr ""
|
||||
msgstr "创建时间,通常是下单的时间。"
|
||||
|
||||
#. module: stock
|
||||
#: field:stock.tracking,name:0
|
||||
@@ -3981,7 +4020,7 @@ msgstr "关注者"
|
||||
#: code:addons/stock/stock.py:2590
|
||||
#, python-format
|
||||
msgid "Cannot consume a move with negative or zero quantity."
|
||||
msgstr ""
|
||||
msgstr "消耗的移库数量不能小于等于0。"
|
||||
|
||||
#. module: stock
|
||||
#: help:stock.config.settings,decimal_precision:0
|
||||
@@ -4068,6 +4107,8 @@ msgid ""
|
||||
" to be invoiced when you send or deliver goods.\n"
|
||||
" This installs the module stock_invoice_directly."
|
||||
msgstr ""
|
||||
"当您发送或交付货物,如果交付要开票,将能自动运行开票向导。\n"
|
||||
"这需要安装模块 stock_invoice_directly。"
|
||||
|
||||
#. module: stock
|
||||
#: field:stock.location,chained_journal_id:0
|
||||
@@ -4423,7 +4464,7 @@ msgid ""
|
||||
"This allows you to manage products by using serial numbers. When you select "
|
||||
"a serial number on product moves, you can get the upstream or downstream "
|
||||
"traceability of that product."
|
||||
msgstr ""
|
||||
msgstr "允许你使用序列号管理产品。当你在产品移库时选择了一个序列号,你能获得对产品的上游和下游的可追溯性。"
|
||||
|
||||
#. module: stock
|
||||
#: code:addons/stock/wizard/stock_fill_inventory.py:124
|
||||
@@ -4482,6 +4523,12 @@ msgid ""
|
||||
" </p>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<p class=\"oe_view_nocontent_create\">\n"
|
||||
" 单击新增一个产品的发货单。\n"
|
||||
" </p><p>\n"
|
||||
" 你在此处会发现该产品相关的所有调拨历史,以及所有你需要发货给客户的产品。\n"
|
||||
" </p>\n"
|
||||
" "
|
||||
|
||||
#. module: stock
|
||||
#: model:ir.actions.act_window,name:stock.action_location_form
|
||||
|
||||
Reference in New Issue
Block a user