+
+
diff --git a/addons/account/company_view.xml b/addons/account/company_view.xml
index 0cc67f23cfe..b8c595f3ca0 100644
--- a/addons/account/company_view.xml
+++ b/addons/account/company_view.xml
@@ -24,7 +24,7 @@
-
+
diff --git a/addons/account/i18n/ja.po b/addons/account/i18n/ja.po
index b710dc3e5a6..754305865a8 100644
--- a/addons/account/i18n/ja.po
+++ b/addons/account/i18n/ja.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
-"PO-Revision-Date: 2012-05-29 21:49+0000\n"
+"PO-Revision-Date: 2012-06-01 01:29+0000\n"
"Last-Translator: Akira Hiyama \n"
"Language-Team: Japanese \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-05-30 05:21+0000\n"
-"X-Generator: Launchpad (build 15316)\n"
+"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
#. module: account
#: view:account.invoice.report:0
@@ -1662,7 +1662,7 @@ msgstr "切り離された仕訳帳順序"
#. module: account
#: view:account.invoice:0
msgid "Responsible"
-msgstr "責任担当"
+msgstr "担当"
#. module: account
#: model:ir.actions.act_window,name:account.action_report_account_type_sales_tree_all
@@ -1679,7 +1679,7 @@ msgstr "請求書のキャンセル:現在の請求書をキャンセルする
#. module: account
#: model:ir.ui.menu,name:account.periodical_processing_invoicing
msgid "Invoicing"
-msgstr "請求"
+msgstr "請求中"
#. module: account
#: code:addons/account/report/account_partner_balance.py:115
@@ -2615,7 +2615,7 @@ msgstr "銀行消し込み"
#. module: account
#: report:account.invoice:0
msgid "Disc.(%)"
-msgstr "ディスク(%)"
+msgstr "割引(%)"
#. module: account
#: report:account.general.ledger:0
@@ -4445,7 +4445,7 @@ msgstr ""
#: view:account.tax:0
#: view:account.tax.template:0
msgid "Keep empty to use the income account"
-msgstr "損益勘定を使うためは空のままとして下さい。"
+msgstr "収益勘定を使うためは空のままとして下さい。"
#. module: account
#: code:addons/account/account.py:3299
@@ -5300,7 +5300,7 @@ msgstr "年度エントリー仕訳帳の末尾"
#: code:addons/account/wizard/account_move_journal.py:63
#, python-format
msgid "Configuration Error !"
-msgstr "設定エラー。"
+msgstr "設定エラーです。"
#. module: account
#: field:account.payment.term.line,value_amount:0
@@ -5592,7 +5592,7 @@ msgstr "買掛金合計"
#: model:account.account.type,name:account.data_account_type_income
#: model:account.financial.report,name:account.account_financial_report_income0
msgid "Income"
-msgstr "収益"
+msgstr "収入"
#. module: account
#: selection:account.bank.statement.line,type:0
@@ -5888,7 +5888,7 @@ msgstr "サブスクリプション期間中"
#. module: account
#: report:account.invoice:0
msgid "Fiscal Position Remark :"
-msgstr "会計ポジション注釈:"
+msgstr "会計ポジションの注釈:"
#. module: account
#: view:analytic.entries.report:0
@@ -8156,7 +8156,7 @@ msgstr "一部が支払済の請求書のキャンセルはできません。ま
#. module: account
#: field:account.chart.template,property_account_income_categ:0
msgid "Income Category Account"
-msgstr "収益分類のアカウント"
+msgstr "収入分類のアカウント"
#. module: account
#: field:account.account,adjusted_balance:0
@@ -9454,7 +9454,7 @@ msgstr ""
#. module: account
#: view:account.analytic.account:0
msgid "Pending"
-msgstr "保留"
+msgstr "保留中"
#. module: account
#: model:process.transition,name:account.process_transition_analyticinvoice0
diff --git a/addons/account/i18n/pt.po b/addons/account/i18n/pt.po
index 256f903bbd0..ce81967607a 100644
--- a/addons/account/i18n/pt.po
+++ b/addons/account/i18n/pt.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
-"PO-Revision-Date: 2012-05-10 17:57+0000\n"
-"Last-Translator: Fabien (Open ERP) \n"
+"PO-Revision-Date: 2012-05-31 15:04+0000\n"
+"Last-Translator: ThinkOpen Solutions \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: 2012-05-11 04:51+0000\n"
-"X-Generator: Launchpad (build 15225)\n"
+"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
#. module: account
#: view:account.invoice.report:0
@@ -93,7 +93,7 @@ msgstr "Antiguidade de saldos de clientes até hoje."
#. module: account
#: model:process.transition,name:account.process_transition_invoiceimport0
msgid "Import from invoice or payment"
-msgstr "Importar da fatura ou do pagamento"
+msgstr "Importar da fatura ou pagamento"
#. module: account
#: model:ir.model,name:account.model_wizard_multi_charts_accounts
@@ -274,7 +274,7 @@ msgstr ""
#. module: account
#: report:account.overdue:0
msgid "Sub-Total :"
-msgstr "Sub-total :"
+msgstr "Sub-Total :"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_use_model_create_entry
@@ -404,12 +404,12 @@ msgstr "account.bank.accounts.wizard"
#: field:account.move.line,date_created:0
#: field:account.move.reconcile,create_date:0
msgid "Creation date"
-msgstr "Data de criação"
+msgstr "Data da Criação"
#. module: account
#: selection:account.journal,type:0
msgid "Purchase Refund"
-msgstr "Nota de Crédito de Compras"
+msgstr "Reembolso da Compra"
#. module: account
#: selection:account.journal,type:0
@@ -686,7 +686,7 @@ msgstr "Fechar periodo"
#. module: account
#: model:ir.model,name:account.model_account_common_partner_report
msgid "Account Common Partner Report"
-msgstr "Relatório Comum de Conta de Paceiros"
+msgstr "Relatório Comum de Conta de Parceiros"
#. module: account
#: field:account.fiscalyear.close,period_id:0
@@ -715,7 +715,7 @@ msgstr "Todos os movimentos a conciliar devem ser da mesma empresa."
#: model:ir.actions.act_window,name:account.action_aged_receivable
#, python-format
msgid "Receivable Accounts"
-msgstr "Contas a receber"
+msgstr "Contas a Receber"
#. module: account
#: constraint:account.move.line:0
@@ -873,6 +873,10 @@ msgid ""
"or Loss you'd realized if those transactions were ended today. Only for "
"accounts having a secondary currency set."
msgstr ""
+"Ao fazer transações multi-moeda, pode perder ou ganhar alguma quantia devida "
+"a alterações da taxa de câmbio. Este menu dá uma previsão do ganho ou perda "
+"que percebeu se essas transações foram terminadas hoje. Somente para contas "
+"com um conjunto moeda secundária."
#. module: account
#: selection:account.entries.report,month:0
@@ -881,7 +885,7 @@ msgstr ""
#: selection:report.account.sales,month:0
#: selection:report.account_type.sales,month:0
msgid "September"
-msgstr "setembro"
+msgstr "Setembro"
#. module: account
#: selection:account.subscription,period_type:0
@@ -1000,7 +1004,7 @@ msgstr "Responsabilidade"
#. module: account
#: view:account.entries.report:0
msgid "Extended Filters..."
-msgstr "Filtros Extendidos..."
+msgstr "Filtros Avançados..."
#. module: account
#: model:ir.ui.menu,name:account.menu_account_central_journal
@@ -1157,7 +1161,7 @@ msgstr "Em disputa"
#: model:ir.actions.act_window,name:account.action_view_bank_statement_tree
#: model:ir.ui.menu,name:account.journal_cash_move_lines
msgid "Cash Registers"
-msgstr "Registos de Caixa"
+msgstr "Caixa Registadora"
#. module: account
#: report:account.analytic.account.journal:0
@@ -1289,7 +1293,7 @@ msgid ""
"You can not use this general account in this journal, check the tab 'Entry "
"Controls' on the related journal !"
msgstr ""
-"Não pode usar esta conta geral nesta diário, verificar 'Controles de "
+"Não pode usar esta conta geral neste diário, verificar 'Controles de "
"Entrada' do guia do diário relacionado!"
#. module: account
@@ -1434,7 +1438,7 @@ msgstr "Saldo de abertura"
#. module: account
#: view:account.invoice:0
msgid "Reset to Draft"
-msgstr "Voltar a rascunho"
+msgstr "Redefinir para rascunho"
#. module: account
#: view:wizard.multi.charts.accounts:0
@@ -1518,7 +1522,7 @@ msgstr "Calcular impostos"
#: field:account.chart.template,code_digits:0
#: field:wizard.multi.charts.accounts,code_digits:0
msgid "# of Digits"
-msgstr "Nº de dígitos"
+msgstr "# de Dígitos"
#. module: account
#: field:account.journal,entry_posted:0
@@ -1529,7 +1533,7 @@ msgstr "Saltar o estado \"Rascunho\" para lançamentos manuais"
#: view:account.invoice.report:0
#: field:account.invoice.report,price_total:0
msgid "Total Without Tax"
-msgstr "Total, com taxas"
+msgstr "Total sem Impostos"
#. module: account
#: model:ir.actions.act_window,help:account.action_move_journal_line
@@ -1547,7 +1551,7 @@ msgstr ""
#. module: account
#: view:account.entries.report:0
msgid "# of Entries "
-msgstr "Nº. de movimentos "
+msgstr "# de Entradas "
#. module: account
#: help:account.fiscal.position,active:0
@@ -1652,7 +1656,7 @@ msgstr "Conta de imposto para notas de crédito"
#: view:account.bank.statement:0
#: field:account.bank.statement,line_ids:0
msgid "Statement lines"
-msgstr "Linhas de extrato"
+msgstr "Linhas do extrato"
#. module: account
#: model:ir.actions.act_window,help:account.action_bank_statement_tree
@@ -1681,7 +1685,7 @@ msgstr "Data/Código"
#: view:analytic.entries.report:0
#: field:analytic.entries.report,general_account_id:0
msgid "General Account"
-msgstr "Contas gerais"
+msgstr "Conta Geral"
#. module: account
#: field:res.partner,debit_limit:0
@@ -1730,8 +1734,8 @@ msgid ""
"Cancel Invoice: Creates the refund invoice, validate and reconcile it to "
"cancel the current invoice."
msgstr ""
-"Anular fatura: Cria uma nota de crédito, valida-a e aloca-a à fatura atual, "
-"Ficando as duas no estado pago."
+"Cancelar fatura: Cria uma nota de crédito, valida-a e aloca-a à fatura "
+"atual, Ficando as duas no estado pago."
#. module: account
#: model:ir.ui.menu,name:account.periodical_processing_invoicing
@@ -1865,7 +1869,7 @@ msgstr "Erro!"
#. module: account
#: sql_constraint:account.move.line:0
msgid "Wrong credit or debit value in accounting entry !"
-msgstr "Valor de crédito ou débito errado no movimento contabilístico !"
+msgstr "Valor de Crédito ou débito errado na entrada de contabilidade!"
#. module: account
#: view:account.invoice.report:0
@@ -1898,7 +1902,7 @@ msgstr "Baseado em"
#: field:account.invoice,move_id:0
#: field:account.invoice,move_name:0
msgid "Journal Entry"
-msgstr "Lançamento de diário"
+msgstr "Entradas no diário"
#. module: account
#: view:account.tax:0
@@ -1932,7 +1936,7 @@ msgstr "Venda / Compra Diário"
#. module: account
#: view:account.analytic.account:0
msgid "Analytic account"
-msgstr "Conta analítica"
+msgstr "Conta Analítica"
#. module: account
#: code:addons/account/account_bank_statement.py:339
@@ -2045,7 +2049,7 @@ msgstr ""
#: view:account.invoice:0
#: view:report.invoice.created:0
msgid "Untaxed Amount"
-msgstr "Valor sem Impostos"
+msgstr "Montante sem Impostos"
#. module: account
#: help:account.tax,active:0
@@ -2053,7 +2057,7 @@ msgid ""
"If the active field is set to False, it will allow you to hide the tax "
"without removing it."
msgstr ""
-"Se o campo activo for definido como 'Falso', ele permitirá que oculte o "
+"Se o campo ativo for definido como 'Falso', ele permitirá que oculte o "
"imposto sem o remover."
#. module: account
@@ -2123,7 +2127,7 @@ msgstr "Importar da fatura"
#: selection:report.account.sales,month:0
#: selection:report.account_type.sales,month:0
msgid "January"
-msgstr "janeiro"
+msgstr "Janeiro"
#. module: account
#: view:account.journal:0
@@ -2261,7 +2265,7 @@ msgstr "ECNJ"
#: view:account.subscription:0
#: selection:account.subscription,state:0
msgid "Running"
-msgstr "Em execução"
+msgstr "Em Funcionamento"
#. module: account
#: view:account.chart.template:0
@@ -2307,7 +2311,7 @@ msgstr "# de Qt. de Artigos "
#. module: account
#: model:ir.model,name:account.model_product_template
msgid "Product Template"
-msgstr "Template Artigo"
+msgstr "Template do Artigo"
#. module: account
#: report:account.account.balance:0
@@ -2505,7 +2509,7 @@ msgstr "Progresso de 30% ao fim de 30 dias"
#. module: account
#: view:account.entries.report:0
msgid "Unreconciled entries"
-msgstr "Movimentos Dereconciliado"
+msgstr "Movimentos Desreconciliados"
#. module: account
#: field:account.invoice.tax,base_code_id:0
@@ -2606,7 +2610,7 @@ msgstr ""
#. module: account
#: view:account.analytic.cost.ledger.journal.report:0
msgid "Select period"
-msgstr "Seleccione o período"
+msgstr "Selecione o período"
#. module: account
#: model:ir.ui.menu,name:account.menu_account_pp_statements
@@ -2679,7 +2683,7 @@ msgstr "Erro de Configuração!"
#. module: account
#: field:account.invoice.report,price_average:0
msgid "Average Price"
-msgstr "Preço médio"
+msgstr "Preço Médio"
#. module: account
#: report:account.overdue:0
@@ -2824,8 +2828,8 @@ msgid ""
"always skipping that state."
msgstr ""
"Marque esta caixa se não pretende que os novos movimentos do diário passem "
-"através do estado \"rascunho\" e vão directamente para o estado "
-"\"Publicado\" sem qualquer validação manual.\n"
+"através do estado 'rascunho' e vão diretamente para o estado 'Publicado' sem "
+"qualquer validação manual.\n"
"Note que os movimentos do diário que são automaticamente criados pelo "
"sistema também ignoram este estado."
@@ -2949,7 +2953,7 @@ msgstr "Obrigatório"
#: field:product.category,property_account_expense_categ:0
#: field:product.template,property_account_expense:0
msgid "Expense Account"
-msgstr "Conta de gastos"
+msgstr "Conta de Despesas"
#. module: account
#: help:account.invoice,period_id:0
@@ -2999,7 +3003,7 @@ msgid ""
msgstr ""
"A data de maturidade dos movimentos gerados por este modelo. Pode escolher "
"entre a data de criação ou a data de criação dos movimentos mais os termos "
-"de pagamento dos Paceiros."
+"de pagamento dos Parceiros."
#. module: account
#: model:ir.ui.menu,name:account.menu_finance_accounting
@@ -3023,7 +3027,7 @@ msgstr "Lucro e prejuízo"
#: model:ir.model,name:account.model_account_fiscal_position
#: field:res.partner,property_account_position:0
msgid "Fiscal Position"
-msgstr "Posição fiscal"
+msgstr "Posição Fiscal"
#. module: account
#: code:addons/account/account_invoice.py:735
@@ -3044,7 +3048,7 @@ msgstr "Um parceiro por página"
#: field:account.account,child_parent_ids:0
#: field:account.account.template,child_parent_ids:0
msgid "Children"
-msgstr "Contas-filho"
+msgstr "Descendentes"
#. module: account
#: selection:account.invoice,type:0
@@ -3097,7 +3101,7 @@ msgstr "Transação a dinheiro"
#. module: account
#: view:res.partner:0
msgid "Bank account"
-msgstr "Conta bancária"
+msgstr "Conta Bancária"
#. module: account
#: field:account.chart.template,tax_template_ids:0
@@ -3190,7 +3194,7 @@ msgstr "BNK"
#. module: account
#: field:account.move.line,analytic_lines:0
msgid "Analytic lines"
-msgstr "Linhas da analítica"
+msgstr "Linhas analíticas"
#. module: account
#: view:account.invoice:0
@@ -3220,7 +3224,7 @@ msgstr "Começa em"
#. module: account
#: model:ir.model,name:account.model_account_partner_ledger
msgid "Account Partner Ledger"
-msgstr "Balancete de Contas de Terceiro"
+msgstr "Balancete de Contas do Parceiro"
#. module: account
#: help:account.journal.column,sequence:0
@@ -8774,7 +8778,7 @@ msgstr "Diário de Compra"
#: view:account.invoice.refund:0
msgid "Refund Invoice: Creates the refund invoice, ready for editing."
msgstr ""
-"Nota de crédito: Emite uma nota de crédito, para ser editada / confirmada à "
+"Estornar fatura: Emite uma nota de crédito, para ser editada / confirmada à "
"mão."
#. module: account
@@ -10690,7 +10694,7 @@ msgstr ""
#. module: account
#: view:account.payment.term:0
msgid "Description on Invoices"
-msgstr ""
+msgstr "Descrição de Faturas"
#. module: account
#: model:ir.model,name:account.model_account_analytic_chart
diff --git a/addons/account/i18n/zh_TW.po b/addons/account/i18n/zh_TW.po
index f5aa3781e50..bcbea9aec5d 100644
--- a/addons/account/i18n/zh_TW.po
+++ b/addons/account/i18n/zh_TW.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
-"PO-Revision-Date: 2012-05-23 07:32+0000\n"
-"Last-Translator: VTTW \n"
+"PO-Revision-Date: 2012-06-05 02:38+0000\n"
+"Last-Translator: Boyce Huang \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: 2012-05-24 11:09+0000\n"
-"X-Generator: Launchpad (build 15288)\n"
+"X-Launchpad-Export-Date: 2012-06-05 04:54+0000\n"
+"X-Generator: Launchpad (build 15353)\n"
#. module: account
#: view:account.invoice.report:0
@@ -419,7 +419,7 @@ msgstr "貸方合計"
#. module: account
#: view:account.move.line.unreconcile.select:0
msgid "Open for Unreconciliation"
-msgstr ""
+msgstr "開啟反核銷"
#. module: account
#: field:account.account.template,chart_template_id:0
@@ -2737,7 +2737,7 @@ msgstr "要設置期初餘額需在憑證簿設置中勾選合併選項"
#: model:ir.actions.act_window,name:account.action_tax_code_list
#: model:ir.ui.menu,name:account.menu_action_tax_code_list
msgid "Tax Codes"
-msgstr ""
+msgstr "稅碼"
#. module: account
#: view:account.account:0
@@ -4593,7 +4593,7 @@ msgstr "已付"
#. module: account
#: view:account.period.close:0
msgid "Are you sure?"
-msgstr ""
+msgstr "您確定嗎?"
#. module: account
#: help:account.move.line,statement_id:0
@@ -5930,7 +5930,7 @@ msgstr "銷售稅(%)"
#. module: account
#: view:account.addtmpl.wizard:0
msgid "Create an Account Based on this Template"
-msgstr ""
+msgstr "根據這個範本建立使用者"
#. module: account
#: view:account.account.type:0
@@ -7868,7 +7868,7 @@ msgstr "反向輔助核算餘額 -"
#. module: account
#: view:account.move.bank.reconcile:0
msgid "Open for Bank Reconciliation"
-msgstr ""
+msgstr "開啟銀行核銷"
#. module: account
#: view:account.analytic.line:0
@@ -9126,7 +9126,7 @@ msgstr "為了對賬,您必須在賬簿中定義一個銀行帳號。"
#. module: account
#: view:account.move.line.reconcile:0
msgid "Reconciliation Transactions"
-msgstr ""
+msgstr "核銷交易"
#. module: account
#: model:ir.actions.act_window,name:account.action_account_common_menu
diff --git a/addons/account/res_config_view.xml b/addons/account/res_config_view.xml
index 1cf1e40f02b..41a0b121735 100644
--- a/addons/account/res_config_view.xml
+++ b/addons/account/res_config_view.xml
@@ -16,10 +16,10 @@
form
-
+
-
+
diff --git a/addons/account_analytic_analysis/i18n/pt.po b/addons/account_analytic_analysis/i18n/pt.po
index afdf9c25f17..20c8677e066 100644
--- a/addons/account_analytic_analysis/i18n/pt.po
+++ b/addons/account_analytic_analysis/i18n/pt.po
@@ -7,25 +7,25 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
-"PO-Revision-Date: 2010-12-09 09:33+0000\n"
-"Last-Translator: OpenERP Administrators \n"
+"PO-Revision-Date: 2012-05-31 15:05+0000\n"
+"Last-Translator: Marcelo Almeida \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: 2012-02-09 06:32+0000\n"
-"X-Generator: Launchpad (build 14763)\n"
+"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
#. module: account_analytic_analysis
#: field:account.analytic.account,revenue_per_hour:0
msgid "Revenue per Time (real)"
-msgstr ""
+msgstr "Receita por hora (real)"
#. module: account_analytic_analysis
#: help:account.analytic.account,remaining_ca:0
msgid "Computed using the formula: Max Invoice Price - Invoiced Amount."
msgstr ""
-"Processado com a fórmula: Preço Máximo da Factura - Montante Facturado."
+"Calculado utilizando a fórmula: Valor Máximo da Fatura - Valor da Fatura"
#. module: account_analytic_analysis
#: help:account.analytic.account,last_worked_date:0
@@ -38,11 +38,13 @@ msgid ""
"The contracts to be renewed because the deadline is passed or the working "
"hours are higher than the allocated hours"
msgstr ""
+"Os contratos a serem renovados, porque o prazo é passado ou as horas de "
+"trabalho são maiores do que as horas atribuídas"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Pending contracts to renew with your customer"
-msgstr ""
+msgstr "Contratos pendentes de renovação com o seu cliente"
#. module: account_analytic_analysis
#: help:account.analytic.account,hours_qtt_non_invoiced:0
@@ -50,31 +52,33 @@ msgid ""
"Number of time (hours/days) (from journal of type 'general') that can be "
"invoiced if you invoice based on analytic account."
msgstr ""
+"Número de tempo (horas ou dias) (de Diário do tipo 'geral') que podem ser "
+"faturados, se fatura com base na conta analítica"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Analytic Accounts with a past deadline in one month."
-msgstr ""
+msgstr "Contas Analíticas com um prazo limite ultrapassando um mês."
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Group By..."
-msgstr ""
+msgstr "Grupo por..."
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "End Date"
-msgstr ""
+msgstr "Data final"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Create Invoice"
-msgstr ""
+msgstr "Criar Fatura"
#. module: account_analytic_analysis
#: field:account.analytic.account,last_invoice_date:0
msgid "Last Invoice Date"
-msgstr "Data da última factura"
+msgstr "Data da última fatura"
#. module: account_analytic_analysis
#: help:account.analytic.account,theorical_margin:0
@@ -87,16 +91,18 @@ msgid ""
"Number of time you spent on the analytic account (from timesheet). It "
"computes quantities on all journal of type 'general'."
msgstr ""
+"Número de tempo que gastou na conta analítica (da folha de horas). Ele "
+"calcula quantidades em todos os Diários do tipo 'geral'."
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Contracts in progress"
-msgstr ""
+msgstr "Contractos em progresso"
#. module: account_analytic_analysis
#: field:account.analytic.account,is_overdue_quantity:0
msgid "Overdue Quantity"
-msgstr ""
+msgstr "Quantidade em atraso"
#. module: account_analytic_analysis
#: model:ir.actions.act_window,help:account_analytic_analysis.action_account_analytic_overdue
@@ -108,6 +114,12 @@ msgid ""
"pending accounts and reopen or close the according to the negotiation with "
"the customer."
msgstr ""
+"Vai encontrar aqui os contratos a serem renovados, porque o prazo é passado "
+"ou as horas de trabalho são maiores do que as horas atribuídas. OpenERP "
+"define automaticamente essas contas analíticas para o estado pendente, a fim "
+"de emitir um aviso durante a gravação da folha de horas. Vendedores devem "
+"rever todas as contas pendentes e reabrir ou fechar o acordo com a "
+"negociação com o cliente."
#. module: account_analytic_analysis
#: field:account.analytic.account,ca_theorical:0
@@ -117,7 +129,7 @@ msgstr "Retorno Teórico"
#. module: account_analytic_analysis
#: field:account.analytic.account,hours_qtt_non_invoiced:0
msgid "Uninvoiced Time"
-msgstr ""
+msgstr "Tempo não faturado"
#. module: account_analytic_analysis
#: help:account.analytic.account,last_worked_invoiced_date:0
@@ -125,13 +137,13 @@ msgid ""
"If invoice from the costs, this is the date of the latest work or cost that "
"have been invoiced."
msgstr ""
-"Se facturado dos custos, esta é a data do último trabalho ou dos custos que "
-"foram facturados."
+"Se faturado dos custos, esta é a data do último trabalho ou dos custos que "
+"foram faturados."
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "To Renew"
-msgstr ""
+msgstr "Para renovar"
#. module: account_analytic_analysis
#: field:account.analytic.account,last_worked_date:0
@@ -141,24 +153,26 @@ msgstr "Data do Último Custo/Trabalho"
#. module: account_analytic_analysis
#: field:account.analytic.account,hours_qtt_invoiced:0
msgid "Invoiced Time"
-msgstr ""
+msgstr "Tempo faturado"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid ""
"A contract in OpenERP is an analytic account having a partner set on it."
msgstr ""
+"Um contrato em OpenERP é um relato analítico a ter num conjunto parceiro "
+"sobre ele."
#. module: account_analytic_analysis
#: field:account.analytic.account,remaining_hours:0
msgid "Remaining Time"
-msgstr ""
+msgstr "Tempo Restante"
#. module: account_analytic_analysis
#: model:ir.actions.act_window,name:account_analytic_analysis.action_account_analytic_overdue
#: model:ir.ui.menu,name:account_analytic_analysis.menu_action_account_analytic_overdue
msgid "Contracts to Renew"
-msgstr ""
+msgstr "Contratos para renovar"
#. module: account_analytic_analysis
#: field:account.analytic.account,theorical_margin:0
@@ -168,7 +182,7 @@ msgstr "Margem Teórica"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid " +1 Month"
-msgstr ""
+msgstr " +1 mês"
#. module: account_analytic_analysis
#: help:account.analytic.account,ca_theorical:0
@@ -177,29 +191,29 @@ msgid ""
"if all these costs have been invoiced at the normal sale price provided by "
"the pricelist."
msgstr ""
-"Baseado nos custos que teve no projecto, qual é que seria o rendimento se "
-"todos estes custos fossem facturados ao preço normal da venda fornecidos "
-"pela tabela de preço."
+"Baseado nos custos que teve no projeto, qual é que seria o rendimento se "
+"todos estes custos fossem faturados ao preço normal da venda fornecidos pela "
+"tabela de preço."
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Pending"
-msgstr ""
+msgstr "Pendente"
#. module: account_analytic_analysis
#: field:account.analytic.account,ca_to_invoice:0
msgid "Uninvoiced Amount"
-msgstr "Montante não Facturado"
+msgstr "Montante não Faturado"
#. module: account_analytic_analysis
#: help:account.analytic.account,real_margin:0
msgid "Computed using the formula: Invoiced Amount - Total Costs."
-msgstr "Processado ao utilizar a fórmula: Montante Facturado - Custo Total."
+msgstr "Processado ao utilizar a fórmula: Montante Faturado - Custo Total."
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Parent"
-msgstr ""
+msgstr "Ascendente"
#. module: account_analytic_analysis
#: field:account.analytic.account,user_ids:0
@@ -221,17 +235,17 @@ msgstr "Resumo de horas por utilizador"
#. module: account_analytic_analysis
#: field:account.analytic.account,ca_invoiced:0
msgid "Invoiced Amount"
-msgstr "Montante Facturado"
+msgstr "Montante Faturado"
#. module: account_analytic_analysis
#: field:account.analytic.account,last_worked_invoiced_date:0
msgid "Date of Last Invoiced Cost"
-msgstr "Data do Último Custo Facturado"
+msgstr "Data do Último Custo Faturado"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Contract"
-msgstr ""
+msgstr "Contrato"
#. module: account_analytic_analysis
#: field:account.analytic.account,real_margin_rate:0
@@ -246,7 +260,7 @@ msgstr "Margem Real"
#. module: account_analytic_analysis
#: help:account.analytic.account,ca_invoiced:0
msgid "Total customer invoiced amount for this account."
-msgstr "Montante da facturação total do cliente para esta conta"
+msgstr "Montante da faturação total do cliente para esta conta"
#. module: account_analytic_analysis
#: model:ir.model,name:account_analytic_analysis.model_account_analytic_analysis_summary_month
@@ -266,7 +280,7 @@ msgstr "Receita Restante"
#. module: account_analytic_analysis
#: help:account.analytic.account,remaining_hours:0
msgid "Computed using the formula: Maximum Time - Total Time"
-msgstr ""
+msgstr "Cálculo utilizando a fórmula: Tempo máximo - Tempo Total"
#. module: account_analytic_analysis
#: help:account.analytic.account,hours_qtt_invoiced:0
@@ -274,6 +288,8 @@ msgid ""
"Number of time (hours/days) that can be invoiced plus those that already "
"have been invoiced."
msgstr ""
+"Número de tempo (horas ou dias) que pode ser faturado mais aqueles que já "
+"tenham sido faturados."
#. module: account_analytic_analysis
#: help:account.analytic.account,ca_to_invoice:0
@@ -281,13 +297,13 @@ msgid ""
"If invoice from analytic account, the remaining amount you can invoice to "
"the customer based on the total costs."
msgstr ""
-"Se facturado a partir da conta analítica, o montante restante que pode "
-"facturar ao cliente baseado nos custos totais."
+"Se faturado a partir da conta analítica, o montante restante que pode "
+"faturar ao cliente baseado nos custos totais."
#. module: account_analytic_analysis
#: help:account.analytic.account,revenue_per_hour:0
msgid "Computed using the formula: Invoiced Amount / Total Time"
-msgstr ""
+msgstr "Calculado através da fórmula: Valor faturado / Tempo Total"
#. module: account_analytic_analysis
#: field:account.analytic.account,total_cost:0
@@ -312,38 +328,38 @@ msgstr "Conta Analítica"
#: model:ir.actions.act_window,name:account_analytic_analysis.action_account_analytic_overdue_all
#: model:ir.ui.menu,name:account_analytic_analysis.menu_action_account_analytic_overdue_all
msgid "Contracts"
-msgstr ""
+msgstr "Contractos"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Manager"
-msgstr ""
+msgstr "Gestor"
#. module: account_analytic_analysis
#: model:ir.actions.act_window,name:account_analytic_analysis.action_hr_tree_invoiced_all
#: model:ir.ui.menu,name:account_analytic_analysis.menu_action_hr_tree_invoiced_all
msgid "All Uninvoiced Entries"
-msgstr "Todas os Movimentos não Facturados"
+msgstr "Todos os Movimentos não Faturados"
#. module: account_analytic_analysis
#: help:account.analytic.account,last_invoice_date:0
msgid "If invoice from the costs, this is the date of the latest invoiced."
-msgstr ""
+msgstr "Se for fatura dos custos, esta é a data da última faturada."
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Associated Partner"
-msgstr ""
+msgstr "Parceiro associado"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Open"
-msgstr ""
+msgstr "Abrir"
#. module: account_analytic_analysis
#: view:account.analytic.account:0
msgid "Contracts that are not assigned to an account manager."
-msgstr ""
+msgstr "Contratos que não são atribuídos a um gestor de conta."
#. module: account_analytic_analysis
#: field:account.analytic.account,hours_quantity:0
@@ -358,18 +374,12 @@ msgid ""
"Total of costs for this account. It includes real costs (from invoices) and "
"indirect costs, like time spent on timesheets."
msgstr ""
-"Total de custos para esta conta. Que inclui custos reais (das facturas) e "
+"Total de custos para esta conta. Que inclui custos reais (das faturas) e "
"custos indirectos, como o tempo gasto em folha de horas."
#~ msgid "Invoicing"
#~ msgstr "Facturação"
-#~ msgid ""
-#~ "Number of hours that can be invoiced plus those that already have been "
-#~ "invoiced."
-#~ msgstr ""
-#~ "Número de horas que podem ser facturadas mais as que já foram facturadas."
-
#~ msgid "Hours summary by user"
#~ msgstr "Resumo de horas por utilizador"
@@ -505,7 +515,15 @@ msgstr ""
#~ "Pode também ver o relatório sumário de contas analíticas\n"
#~ "por utilizador bem como por mês.\n"
+#~ msgid ""
+#~ "Number of hours that can be invoiced plus those that already have been "
+#~ "invoiced."
+#~ msgstr ""
+#~ "Número de horas que podem ser facturadas mais aquelas que já tenham sido "
+#~ "facturadas."
+
#~ msgid ""
#~ "Error! The currency has to be the same as the currency of the selected "
#~ "company"
-#~ msgstr "Erro! A divisa tem que ser a mesma que a da empresa seleccionada"
+#~ msgstr ""
+#~ "Erro! A divisa tem que ser a mesma que a divisa da empresa seleccionada"
diff --git a/addons/account_anglo_saxon/i18n/ja.po b/addons/account_anglo_saxon/i18n/ja.po
index 5ab1b013742..a2d2eb88dc6 100644
--- a/addons/account_anglo_saxon/i18n/ja.po
+++ b/addons/account_anglo_saxon/i18n/ja.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
-"PO-Revision-Date: 2012-05-29 06:22+0000\n"
+"PO-Revision-Date: 2012-05-31 06:16+0000\n"
"Last-Translator: Akira Hiyama \n"
"Language-Team: Japanese \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-05-30 05:21+0000\n"
-"X-Generator: Launchpad (build 15316)\n"
+"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
#. module: account_anglo_saxon
#: sql_constraint:purchase.order:0
@@ -35,7 +35,7 @@ msgstr "製品分類"
#. module: account_anglo_saxon
#: sql_constraint:stock.picking:0
msgid "Reference must be unique per Company!"
-msgstr "参照は会社内で固有でなければいけません"
+msgstr "参照は会社ごとにユニークでなければいけません。"
#. module: account_anglo_saxon
#: constraint:product.category:0
diff --git a/addons/account_asset/account_asset_view.xml b/addons/account_asset/account_asset_view.xml
index 1affcf7a85c..5e1a5f68d95 100644
--- a/addons/account_asset/account_asset_view.xml
+++ b/addons/account_asset/account_asset_view.xml
@@ -83,10 +83,7 @@
-
+
+
diff --git a/addons/account_check_writing/i18n/ja.po b/addons/account_check_writing/i18n/ja.po
index a9ce55b0cd8..6f65f35354d 100644
--- a/addons/account_check_writing/i18n/ja.po
+++ b/addons/account_check_writing/i18n/ja.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
-"PO-Revision-Date: 2012-05-10 18:14+0000\n"
-"Last-Translator: Raphael Collet (OpenERP) \n"
+"PO-Revision-Date: 2012-06-01 06:41+0000\n"
+"Last-Translator: Akira Hiyama \n"
"Language-Team: Japanese \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-05-11 05:15+0000\n"
-"X-Generator: Launchpad (build 15225)\n"
+"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
#. module: account_check_writing
#: selection:res.company,check_layout:0
@@ -100,7 +100,7 @@ msgstr "小切手の振出"
#: report:account.print.check.middle:0
#: report:account.print.check.top:0
msgid "Discount"
-msgstr "割引き"
+msgstr "割引"
#. module: account_check_writing
#: report:account.print.check.bottom:0
diff --git a/addons/account_coda/i18n/pt.po b/addons/account_coda/i18n/pt.po
index 0d99a5515a6..42facc9739f 100644
--- a/addons/account_coda/i18n/pt.po
+++ b/addons/account_coda/i18n/pt.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-08 00:35+0000\n"
-"PO-Revision-Date: 2010-12-20 19:21+0000\n"
-"Last-Translator: Rui Franco (multibase.pt) \n"
+"PO-Revision-Date: 2012-05-31 15:12+0000\n"
+"Last-Translator: ThinkOpen Solutions \n"
"Language-Team: Portuguese \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-05-11 05:09+0000\n"
-"X-Generator: Launchpad (build 15225)\n"
+"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_09_21
@@ -1780,6 +1780,8 @@ msgstr "Pagamentos de salários coletivos"
#: model:account.coda.trans.code,comment:account_coda.actcc_80_17
msgid "Collected for unsealed deposit of securities, and other parcels"
msgstr ""
+"Recolhidos para o depósito de valores mobiliários sem lacre, e outras "
+"parcelas"
#. module: account_coda
#: model:account.coda.comm.type,description:account_coda.acct_004
@@ -1853,7 +1855,7 @@ msgstr "Documentário de taxas gerais de crédito"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_80_25
msgid "Renting of direct debit box"
-msgstr ""
+msgstr "Locação de caixa de débito direto"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_11_52
@@ -1871,6 +1873,9 @@ msgid ""
"globalisation of which this record is the first.\n"
"The same code will be repeated at the end of the globalisation."
msgstr ""
+"O valor que é mencionado (1 a 9), especifica o nível de hierarquia da "
+"globalização do que este disco é o primeiro.\n"
+"O mesmo código será repetido no final da globalização."
#. module: account_coda
#: field:coda.bank.account,description2:0
@@ -1880,7 +1885,7 @@ msgstr "Descrição da Conta Secundária"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_211
msgid "Credit arrangement fee | Additional credit arrangement fee"
-msgstr ""
+msgstr "Taxa de arranjo de Crédito | taxa de arranjo de crédito adicional"
#. module: account_coda
#: view:coda.bank.statement:0
@@ -1925,7 +1930,7 @@ msgstr ""
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_035
msgid "Charges foreign documentary bill"
-msgstr ""
+msgstr "Encargos conta documentário estrangeiro"
#. module: account_coda
#: model:account.coda.trans.code,comment:account_coda.actcc_80_39
@@ -2191,6 +2196,8 @@ msgid ""
"Credit transfer or cash payment with reconstituted structured format "
"communication"
msgstr ""
+"Transferência de crédito ou pagamento em dinheiro com a comunicação "
+"reconstituída do formato estruturado"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_07_86
@@ -2279,7 +2286,7 @@ msgstr "Pesquisar Extratos Bancários CODA"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_410
msgid "Reclamation charges"
-msgstr ""
+msgstr "Taxas de Contestação"
#. module: account_coda
#: model:ir.actions.act_window,help:account_coda.action_coda_bank_statements
@@ -2347,7 +2354,7 @@ msgstr "Assistente em estado incorreto. Por favor, clique no botão Cancelar!"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_418
msgid "Endorsement commission"
-msgstr ""
+msgstr "Comissão de Averbamento"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_005
@@ -2381,6 +2388,10 @@ msgid ""
"credit transfers with a structured communication As a matter of principle, "
"this type will also be used when no detailed data (type 6 or 7) is following."
msgstr ""
+"Montante foi totalizado pelo banco; por exemplo, : O montante total de uma "
+"série de transferências de crédito com uma comunicação estruturada como uma "
+"questão de princípio, este tipo também será usado quando nenhum dado "
+"detalhado (tipo 6 ou 7) está a seguir."
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_03_37
@@ -2400,7 +2411,7 @@ msgstr "Levantamento de dinheiro pela sua filial ou agentes"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_049
msgid "Fiscal stamps/stamp duty"
-msgstr ""
+msgstr "Selos fiscais / imposto de selo"
#. module: account_coda
#: model:account.coda.trans.code,comment:account_coda.actcc_03_58
@@ -2414,7 +2425,7 @@ msgstr ""
#. module: account_coda
#: view:account.coda.import:0
msgid "Select Your File :"
-msgstr ""
+msgstr "Selecione o seu ficheiro:"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_80_06
@@ -2485,7 +2496,7 @@ msgstr "Pesquisar ficheiros CODA"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_07_52
msgid "Remittance of commercial paper - credit under usual reserve"
-msgstr ""
+msgstr "Remessa de papel comercial - crédito sob reserva habitual"
#. module: account_coda
#: help:coda.bank.account,active:0
@@ -2499,7 +2510,7 @@ msgstr ""
#. module: account_coda
#: model:account.coda.trans.code,comment:account_coda.actcc_07_54
msgid "Among other things advances or promissory notes"
-msgstr ""
+msgstr "Entre outras coisas avanços ou notas promissórias"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_80_10
@@ -2543,7 +2554,7 @@ msgstr "Para os profissionais, tais como seguros e corretores"
#: model:account.coda.trans.code,comment:account_coda.actcc_80_19
msgid ""
"Collected for securities, gold, pass-books, etc. placed in safe custody"
-msgstr ""
+msgstr "Títulos Coletados, ouro, passa-livros, etc. colocados sob custódia"
#. module: account_coda
#: model:account.coda.trans.code,comment:account_coda.actcc_09_19
@@ -2551,6 +2562,8 @@ msgid ""
"Used in case of payments accepted under reserve of count, result of "
"overcrediting"
msgstr ""
+"Usado no caso de pagamentos aceites com reserva de contagem, resultado sobre "
+"crédito"
#. module: account_coda
#: code:addons/account_coda/wizard/account_coda_import.py:630
@@ -2597,7 +2610,7 @@ msgstr "Comissão para as despesas de manutenção"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_11_03
msgid "Subscription to securities"
-msgstr ""
+msgstr "Subscrição de valores"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_425
@@ -2659,6 +2672,7 @@ msgstr "Bonificação de juros"
#: model:account.coda.trans.code,description:account_coda.actcf_41
msgid "International credit transfers - non-SEPA credit transfers"
msgstr ""
+"Transferências internacionais de crédito - transferências de crédito não SEPA"
#. module: account_coda
#: model:account.coda.trans.code,comment:account_coda.actcc_03_87
@@ -2856,6 +2870,7 @@ msgstr ""
#: model:account.coda.trans.code,description:account_coda.actcf_35
msgid "Closing (periodical settlements for interest, costs,…)"
msgstr ""
+"Encerramento (estabelecimentos periódicos relativos aos juros, custos, ...)"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_04_51
@@ -3057,6 +3072,8 @@ msgid ""
"Costs charged for calculating the amount of the tax to be paid (e.g. "
"Fiscomat)."
msgstr ""
+"Custos cobrados para o cálculo do montante do imposto a ser pago (Fiscomat "
+"por exemplo)."
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_014
@@ -3181,7 +3198,7 @@ msgstr "Subsídio"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_04_06
msgid "Payment with tank card"
-msgstr ""
+msgstr "Pagamento com cartão de depósito"
#. module: account_coda
#: model:account.coda.comm.type,description:account_coda.acct_107
@@ -3496,13 +3513,14 @@ msgstr "Licitações"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_43_07
msgid "Unpaid foreign cheque"
-msgstr ""
+msgstr "Cheque estrangeiro Não remunerado"
#. module: account_coda
#: model:account.coda.trans.code,comment:account_coda.actcc_11_03
msgid ""
"Bonds, shares, tap issues of CDs, with or without payment of interest, etc."
msgstr ""
+"Obrigações, ações, questões de CDs, com ou sem pagamento de juros, etc"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_09_66
@@ -3512,7 +3530,7 @@ msgstr "Resgate de cupões de gasolina"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_058
msgid "Capital premium"
-msgstr ""
+msgstr "Prémio Capital"
#. module: account_coda
#: model:account.coda.trans.code,description:account_coda.actcc_11_15
@@ -3528,7 +3546,7 @@ msgstr "Moeda da contraparte"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_202
msgid "Advising commission | Additional advising commission"
-msgstr ""
+msgstr "Comissões da Assessoria | comissão adicional aconselhada"
#. module: account_coda
#: field:coda.bank.account,find_partner:0
@@ -3736,6 +3754,8 @@ msgstr "Pagamento do cheque"
#: model:account.coda.trans.code,comment:account_coda.actcc_43_07
msgid "Foreign cheque remitted for collection that returns unpaid"
msgstr ""
+"Cheques estrangeiros remetidos para a recolha que retorna como não "
+"remunerados"
#. module: account_coda
#: model:account.coda.trans.code,comment:account_coda.actcc_80_07
@@ -3982,7 +4002,7 @@ msgstr "Custos de ATM no estrangeiro"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_018
msgid "Tental guarantee charges"
-msgstr ""
+msgstr "Tental taxas de garantia"
#. module: account_coda
#: model:account.coda.trans.category,description:account_coda.actrca_430
diff --git a/addons/account_followup/report/account_followup_report.xml b/addons/account_followup/report/account_followup_report.xml
index 6568af1c441..5ba0e147bf8 100644
--- a/addons/account_followup/report/account_followup_report.xml
+++ b/addons/account_followup/report/account_followup_report.xml
@@ -18,8 +18,7 @@
-
-
+
diff --git a/addons/account_payment/account_payment_view.xml b/addons/account_payment/account_payment_view.xml
index 032ef38411a..892c8636caf 100644
--- a/addons/account_payment/account_payment_view.xml
+++ b/addons/account_payment/account_payment_view.xml
@@ -101,16 +101,13 @@
form
-
+
-
-
-
-
-
+
+
@@ -193,9 +190,6 @@
-
-
-
diff --git a/addons/account_sequence/i18n/sv.po b/addons/account_sequence/i18n/sv.po
new file mode 100644
index 00000000000..cc0491fca54
--- /dev/null
+++ b/addons/account_sequence/i18n/sv.po
@@ -0,0 +1,220 @@
+# Swedish translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:35+0000\n"
+"PO-Revision-Date: 2012-06-04 17:24+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Swedish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-06-05 04:54+0000\n"
+"X-Generator: Launchpad (build 15353)\n"
+
+#. module: account_sequence
+#: view:account.sequence.installer:0
+#: model:ir.actions.act_window,name:account_sequence.action_account_seq_installer
+msgid "Account Sequence Application Configuration"
+msgstr ""
+
+#. module: account_sequence
+#: constraint:account.move:0
+msgid ""
+"You can not create more than one move per period on centralized journal"
+msgstr ""
+
+#. module: account_sequence
+#: constraint:account.move.line:0
+msgid "Company must be the same for its related account and period."
+msgstr "Bolaget måste överenstämma för alla konton och perioder."
+
+#. module: account_sequence
+#: help:account.move,internal_sequence_number:0
+#: help:account.move.line,internal_sequence_number:0
+msgid "Internal Sequence Number"
+msgstr ""
+
+#. module: account_sequence
+#: help:account.sequence.installer,number_next:0
+msgid "Next number of this sequence"
+msgstr "Nästa nummer i sekvensen"
+
+#. module: account_sequence
+#: field:account.sequence.installer,number_next:0
+msgid "Next Number"
+msgstr "Nästa nummer"
+
+#. module: account_sequence
+#: field:account.sequence.installer,number_increment:0
+msgid "Increment Number"
+msgstr "Räkna upp nummer"
+
+#. module: account_sequence
+#: help:account.sequence.installer,number_increment:0
+msgid "The next number of the sequence will be incremented by this number"
+msgstr "Nästa nummer i sekvensen kommer att beräknas utgående från detta"
+
+#. module: account_sequence
+#: view:account.sequence.installer:0
+msgid "Configure Your Account Sequence Application"
+msgstr ""
+
+#. module: account_sequence
+#: view:account.sequence.installer:0
+msgid "Configure"
+msgstr "Inställningar"
+
+#. module: account_sequence
+#: help:account.sequence.installer,suffix:0
+msgid "Suffix value of the record for the sequence"
+msgstr "Suffixvärde för löpnumret"
+
+#. module: account_sequence
+#: field:account.sequence.installer,company_id:0
+msgid "Company"
+msgstr "Bolag"
+
+#. module: account_sequence
+#: help:account.journal,internal_sequence_id:0
+msgid ""
+"This sequence will be used to maintain the internal number for the journal "
+"entries related to this journal."
+msgstr ""
+
+#. module: account_sequence
+#: field:account.sequence.installer,padding:0
+msgid "Number padding"
+msgstr "Numerisk utfyllnad"
+
+#. module: account_sequence
+#: model:ir.model,name:account_sequence.model_account_move_line
+msgid "Journal Items"
+msgstr "Transaktioner"
+
+#. module: account_sequence
+#: field:account.move,internal_sequence_number:0
+#: field:account.move.line,internal_sequence_number:0
+msgid "Internal Number"
+msgstr ""
+
+#. module: account_sequence
+#: constraint:account.move.line:0
+msgid "You can not create journal items on an account of type view."
+msgstr "Du kan inte skapa transaktioner på rubrikkonton."
+
+#. module: account_sequence
+#: help:account.sequence.installer,padding:0
+msgid ""
+"OpenERP will automatically adds some '0' on the left of the 'Next Number' to "
+"get the required padding size."
+msgstr ""
+"OpenERP lägger automatiskt till några '0' till vänster på 'Nästa nummer' för "
+"att få rätt storlek."
+
+#. module: account_sequence
+#: field:account.sequence.installer,name:0
+msgid "Name"
+msgstr "Namn"
+
+#. module: account_sequence
+#: constraint:account.move.line:0
+msgid "You can not create journal items on closed account."
+msgstr "Du kan inte skapa transaktioner på ett stängt konto."
+
+#. module: account_sequence
+#: constraint:account.journal:0
+msgid ""
+"Configuration error! The currency chosen should be shared by the default "
+"accounts too."
+msgstr ""
+"Konfigurationsfel! Vald valuta bör delas mellan standard-konton också."
+
+#. module: account_sequence
+#: sql_constraint:account.move.line:0
+msgid "Wrong credit or debit value in accounting entry !"
+msgstr "Fel kredit- eller debetvärde i bokföringstransaktionerna."
+
+#. module: account_sequence
+#: field:account.journal,internal_sequence_id:0
+msgid "Internal Sequence"
+msgstr ""
+
+#. module: account_sequence
+#: help:account.sequence.installer,prefix:0
+msgid "Prefix value of the record for the sequence"
+msgstr "Prefix för löpnumret"
+
+#. module: account_sequence
+#: model:ir.model,name:account_sequence.model_account_move
+msgid "Account Entry"
+msgstr "Kontotransaktion"
+
+#. module: account_sequence
+#: field:account.sequence.installer,suffix:0
+msgid "Suffix"
+msgstr "Suffix"
+
+#. module: account_sequence
+#: field:account.sequence.installer,config_logo:0
+msgid "Image"
+msgstr "Bild"
+
+#. module: account_sequence
+#: view:account.sequence.installer:0
+msgid "title"
+msgstr "titel"
+
+#. module: account_sequence
+#: sql_constraint:account.journal:0
+msgid "The name of the journal must be unique per company !"
+msgstr "Journalnamnet måste vara unikt per företag!"
+
+#. module: account_sequence
+#: constraint:account.move.line:0
+msgid ""
+"The selected account of your Journal Entry forces to provide a secondary "
+"currency. You should remove the secondary currency on the account or select "
+"a multi-currency view on the journal."
+msgstr ""
+"Valt konto på verifikatet tvingar fram en sekundär valuta. Du kan ta bort "
+"den sekundära valutan på kontot eller välja en flervalutavy för journalen."
+
+#. module: account_sequence
+#: constraint:account.move.line:0
+msgid ""
+"The date of your Journal Entry is not in the defined period! You should "
+"change the date or remove this constraint from the journal."
+msgstr ""
+"Verifikatsdatumet är inte inom den definierade perioden! Du bör ändra datum "
+"eller ta bort denna begränsning från journalen."
+
+#. module: account_sequence
+#: field:account.sequence.installer,prefix:0
+msgid "Prefix"
+msgstr "Prefix"
+
+#. module: account_sequence
+#: sql_constraint:account.journal:0
+msgid "The code of the journal must be unique per company !"
+msgstr "Journalkoden måste vara unik per företag!"
+
+#. module: account_sequence
+#: model:ir.model,name:account_sequence.model_account_sequence_installer
+msgid "account.sequence.installer"
+msgstr ""
+
+#. module: account_sequence
+#: model:ir.model,name:account_sequence.model_account_journal
+msgid "Journal"
+msgstr "Journal"
+
+#. module: account_sequence
+#: view:account.sequence.installer:0
+msgid "You can enhance the Account Sequence Application by installing ."
+msgstr ""
diff --git a/addons/account_voucher/account_voucher_view.xml b/addons/account_voucher/account_voucher_view.xml
index 3b33143648b..fe282138a72 100644
--- a/addons/account_voucher/account_voucher_view.xml
+++ b/addons/account_voucher/account_voucher_view.xml
@@ -17,7 +17,6 @@
-
@@ -41,16 +40,13 @@
form
-
+
-
-
-
-
-
+
+
diff --git a/addons/account_voucher/voucher_payment_receipt_view.xml b/addons/account_voucher/voucher_payment_receipt_view.xml
index 5ceee46b2cd..6b2af93bc62 100644
--- a/addons/account_voucher/voucher_payment_receipt_view.xml
+++ b/addons/account_voucher/voucher_payment_receipt_view.xml
@@ -144,16 +144,13 @@
form
+
+
diff --git a/addons/auction/i18n/pt.po b/addons/auction/i18n/pt.po
new file mode 100644
index 00000000000..8ecba7f56b6
--- /dev/null
+++ b/addons/auction/i18n/pt.po
@@ -0,0 +1,2946 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+# * auction
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 6.0dev\n"
+"Report-Msgid-Bugs-To: support@openerp.com\n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-05-31 15:15+0000\n"
+"Last-Translator: ThinkOpen Solutions \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: 2012-06-01 05:33+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
+
+#. module: auction
+#: model:ir.ui.menu,name:auction.auction_report_menu
+msgid "Reporting"
+msgstr "Relatório"
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_taken
+msgid "Auction taken"
+msgstr "Ação tomada"
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Set to draft"
+msgstr "Definir como Rascunho"
+
+#. module: auction
+#: view:auction.deposit:0
+#: field:auction.deposit,partner_id:0
+#: field:auction.lots,seller_id:0
+#: view:report.auction:0
+#: field:report.auction,seller:0
+msgid "Seller"
+msgstr "Vendedor"
+
+#. module: auction
+#: field:auction.lots,name:0
+msgid "Title"
+msgstr "Título"
+
+#. module: auction
+#: field:auction.lots.sms.send,text:0
+msgid "SMS Message"
+msgstr "Mensagem SMS"
+
+#. module: auction
+#: view:auction.catalog.flagey:0
+#: view:auction.lots.auction.move:0
+#: view:auction.lots.make.invoice.buyer:0
+msgid " "
+msgstr " "
+
+#. module: auction
+#: view:auction.lots.auction.move:0
+msgid "Warning, Erase The Object Adjudication Price and Its Buyer!"
+msgstr "Atenção, apague o Preço de Adjudicação do objeto e o seu comprador!"
+
+#. module: auction
+#: help:auction.pay.buy,statement_id1:0
+msgid "First Bank Statement For Buyer"
+msgstr "Primeiro estrato bancário para o comprador"
+
+#. module: auction
+#: field:auction.bid_line,lot_id:0
+#: field:auction.lot.history,lot_id:0
+msgid "Object"
+msgstr "Objeto"
+
+#. module: auction
+#: field:report.auction.object.date,obj_num:0
+msgid "# of Objects"
+msgstr "Número de objetos"
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Authors"
+msgstr "Autores"
+
+#. module: auction
+#: view:auction.bid:0
+#: report:auction.bids:0
+#: view:auction.lots:0
+#: field:auction.lots,ach_uid:0
+#: field:auction.lots.buyer_map,ach_uid:0
+#: field:auction.lots.make.invoice.buyer,buyer_id:0
+#: field:auction.pay.buy,buyer_id:0
+#: report:buyer.list:0
+#: view:report.auction:0
+#: field:report.auction,buyer:0
+#: report:report.auction.buyer.result:0
+msgid "Buyer"
+msgstr "Comprador"
+
+#. module: auction
+#: field:report.auction,object:0
+msgid "No of objects"
+msgstr "Número de objetos"
+
+#. module: auction
+#: help:auction.lots,paid_vnd:0
+msgid ""
+"When state of Seller Invoice is 'Paid', this field is selected as True."
+msgstr ""
+"Quando o estado da fatura da Loja é 'pago', este campo é selecionado como "
+"True."
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "# of paid items (based on invoices):"
+msgstr "Número de items pagos (com base nas faturas)"
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "Deposit Border"
+msgstr "Limite do Depósito"
+
+#. module: auction
+#: field:auction.lots.make.invoice,amount:0
+#: field:auction.lots.make.invoice.buyer,amount:0
+msgid "Invoiced Amount"
+msgstr "Montante Faturado"
+
+#. module: auction
+#: help:auction.lots,name:0
+msgid "Auction object name"
+msgstr "Nome do objeto leilão"
+
+#. module: auction
+#: model:ir.model,name:auction.model_aie_category
+msgid "aie.category"
+msgstr "aie.category"
+
+#. module: auction
+#: field:auction.deposit.cost,amount:0
+#: field:auction.pay.buy,amount:0
+#: field:auction.pay.buy,amount2:0
+#: field:auction.pay.buy,amount3:0
+msgid "Amount"
+msgstr "Montante"
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_deposit_border
+#: model:ir.ui.menu,name:auction.menu_auction_deposit_border
+msgid "Deposit border"
+msgstr "Limite do Depósito"
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "Reference"
+msgstr "Referência"
+
+#. module: auction
+#: help:auction.dates,state:0
+msgid ""
+"When auction starts the state is 'Draft'.\n"
+" At the end of auction, the state becomes 'Closed'."
+msgstr ""
+"Quando um leilão começa, o seu estado é 'Rascunho'\n"
+" No fim do leilão, o estado passa a 'Fechado'"
+
+#. module: auction
+#: field:auction.dates,account_analytic_id:0
+msgid "Analytic Account"
+msgstr "Conta Analítica"
+
+#. module: auction
+#: help:auction.pay.buy,amount3:0
+msgid "Amount For Third Bank Statement"
+msgstr "Montante para o terceiro extrato bancário"
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Buy object"
+msgstr "Comprar Objeto"
+
+#. module: auction
+#: field:auction.lots,lot_num:0
+msgid "List Number"
+msgstr "Número da Lista"
+
+#. module: auction
+#: report:buyer.list:0
+msgid "Date:"
+msgstr "Data:"
+
+#. module: auction
+#: field:auction.deposit.cost,name:0
+msgid "Cost Name"
+msgstr "Nome do Custo"
+
+#. module: auction
+#: view:auction.dates:0
+#: field:auction.dates,state:0
+#: view:auction.lots:0
+#: field:auction.lots,state:0
+#: view:report.auction:0
+#: field:report.auction,state:0
+msgid "State"
+msgstr "Estado"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "First Auction Date"
+msgstr "Primeira Data do Leilão"
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "January"
+msgstr "Janeiro"
+
+#. module: auction
+#: help:auction.lot.category,active:0
+msgid ""
+"If the active field is set to False, it will allow you to hide the auction "
+"lot category without removing it."
+msgstr ""
+"Se o campo ativo é definido como Falso, ele permitirá que oculte o lote da "
+"categoria leilão sem o remover."
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Ref"
+msgstr "Ref"
+
+#. module: auction
+#: field:report.auction,total_price:0
+msgid "Total Price"
+msgstr "Preço Total"
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Total Adj."
+msgstr "Total Adj."
+
+#. module: auction
+#: view:auction.lots.sms.send:0
+msgid "SMS - Gateway: clickatell','Bulk SMS Send"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,costs:0
+msgid "Deposit cost"
+msgstr "Custo de depósito"
+
+#. module: auction
+#: selection:auction.lots,state:0
+#: selection:report.auction,state:0
+#: selection:report.object.encoded,state:0
+msgid "Unsold"
+msgstr "Não vendido"
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "Search Auction deposit"
+msgstr "Pesquisar depósito do leilão"
+
+#. module: auction
+#: help:auction.lots,lot_num:0
+msgid "List number in depositer inventory"
+msgstr "Número da lista no inventário do depósito"
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "Items"
+msgstr "Items"
+
+#. module: auction
+#: model:account.tax,name:auction.auction_tax5
+#: field:auction.dates,seller_costs:0
+msgid "Seller Costs"
+msgstr "Custos do Vendedor"
+
+#. module: auction
+#: view:auction.bid:0
+#: view:auction.bid_line:0
+#: view:auction.lots:0
+#: field:auction.lots,bid_lines:0
+#: model:ir.actions.report.xml,name:auction.bid_auction
+#: model:ir.ui.menu,name:auction.menu_action_bid_open
+msgid "Bids"
+msgstr "Licitações"
+
+#. module: auction
+#: field:report.auction,gross_revenue:0
+msgid "Gross Revenue"
+msgstr "Receita Bruta"
+
+#. module: auction
+#: view:auction.lots.buyer_map:0
+msgid "Buyer Map"
+msgstr "Mapa do Comprador"
+
+#. module: auction
+#: field:report.object.encoded,obj_ret:0
+msgid "# obj ret"
+msgstr "# obj ret"
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_bid
+msgid "Bid Auctions"
+msgstr "Licitações"
+
+#. module: auction
+#: help:auction.lots,image:0
+msgid "Object Image"
+msgstr "Imagem do Objeto"
+
+#. module: auction
+#: code:addons/auction/wizard/auction_lots_buyer_map.py:70
+#, python-format
+msgid "No buyer is set for this lot."
+msgstr "Nenhum comprador está definido para este lote."
+
+#. module: auction
+#: code:addons/auction/auction.py:578
+#, python-format
+msgid "The Buyer \"%s\" has no Invoice Address."
+msgstr "O comprador \"%s\" não tem um endereço de faturação"
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_auction_object_categories
+msgid "Auction object Categories"
+msgstr "Categorias do objeto do leilão"
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_deposit_cost
+msgid "Auction Deposit Cost"
+msgstr "Custo Depósito Leilão"
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "Deposit Border Form"
+msgstr "Formulário do Limite do Depósito"
+
+#. module: auction
+#: help:auction.lots,statement_id:0
+msgid "Bank statement line for given buyer"
+msgstr "Linha do Extrato Bancário para um Determinado Comprador"
+
+#. module: auction
+#: field:auction.lot.category,aie_categ:0
+msgid "Category"
+msgstr "Categoria"
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_view_auction_buyer_map
+msgid "Map buyer username to Partners"
+msgstr "Mapa do comprador nome de utilizador para Parceiros"
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Search Auction Lots"
+msgstr "Pesquisar lotes do leilão"
+
+#. module: auction
+#: field:report.auction,net_revenue:0
+msgid "Net Revenue"
+msgstr "Receita líquida"
+
+#. module: auction
+#: field:report.auction.adjudication,state:0
+#: field:report.object.encoded,state:0
+msgid "Status"
+msgstr "Estado"
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_auction_lots_sms_send
+msgid "SMS Send"
+msgstr "Enviar SMS"
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "August"
+msgstr "Agosto"
+
+#. module: auction
+#: view:auction.lots:0
+#: selection:auction.lots,state:0
+#: view:report.auction:0
+#: selection:report.auction,state:0
+msgid "Sold"
+msgstr "Vendido"
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "June"
+msgstr "Junho"
+
+#. module: auction
+#: code:addons/auction/wizard/auction_catalog_flagey_report.py:63
+#, python-format
+msgid "No Lots belong to this Auction Date"
+msgstr "Sem Lotes pertencentes a esta Data do Leilão"
+
+#. module: auction
+#: view:auction.lots:0
+msgid "New Object"
+msgstr "Novo Objeto"
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "October"
+msgstr "Outubro"
+
+#. module: auction
+#: field:auction.bid_line,name:0
+msgid "Bid date"
+msgstr "Data da Licitação"
+
+#. module: auction
+#: field:auction.dates,acc_expense:0
+msgid "Expense Account"
+msgstr "Conta de Despesas"
+
+#. module: auction
+#: model:ir.ui.menu,name:auction.menu_wizard_emporte
+msgid "Deliveries Management"
+msgstr "Gestão de Entregas"
+
+#. module: auction
+#: field:auction.lots,obj_desc:0
+msgid "Object Description"
+msgstr "Descrição do Objeto"
+
+#. module: auction
+#: field:auction.lots,artist2_id:0
+msgid "Artist/Author2"
+msgstr "Artista / Autor2"
+
+#. module: auction
+#: view:auction.pay.buy:0
+msgid "Line1"
+msgstr "Linha1"
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lots_make_invoice_buyer
+msgid "Make Invoice for Buyer"
+msgstr "Criar Fatura para o Comprador"
+
+#. module: auction
+#: field:auction.lots,gross_revenue:0
+#: field:report.object.encoded,gross_revenue:0
+msgid "Gross revenue"
+msgstr "Receita Bruta"
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_auction_pay_buy
+msgid "Pay objects of the buyer"
+msgstr "Objetos pagos pelo comprador"
+
+#. module: auction
+#: help:auction.dates,auction2:0
+msgid "End date of auction"
+msgstr "Data de fim do leilão"
+
+#. module: auction
+#: view:auction.lots.sms.send:0
+msgid "Send SMS"
+msgstr "Enviar SMS"
+
+#. module: auction
+#: field:auction.lots,name2:0
+msgid "Short Description (2)"
+msgstr "Pequena descrição (2)"
+
+#. module: auction
+#: report:auction.total.rml:0
+#: model:ir.ui.menu,name:auction.auction_buyers_menu
+msgid "Buyers"
+msgstr "Compradores"
+
+#. module: auction
+#: view:auction.lots:0
+#: view:report.auction:0
+msgid "Object Category"
+msgstr "Categoria do Objeto"
+
+#. module: auction
+#: model:account.tax.code,name:auction.account_tax_code_id4
+msgid "VAT 12%"
+msgstr "IVA 12%"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Buyer Invoices"
+msgstr "Faturas de Compradores"
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.res_w_buyer
+msgid "Results with buyer"
+msgstr "Resultados com o comprador"
+
+#. module: auction
+#: field:auction.bid_line,price:0
+msgid "Maximum Price"
+msgstr "Preço máximo"
+
+#. module: auction
+#: help:auction.dates,auction1:0
+msgid "Start date of auction"
+msgstr "Data de início do leilão"
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lots_auction_move
+msgid "Auction Move"
+msgstr "Movimento Leilão"
+
+#. module: auction
+#: help:auction.dates,buyer_costs:0
+msgid "Account tax for buyer"
+msgstr "Imposto Conta para Comprador"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Next Auction"
+msgstr "Próximo Leilão"
+
+#. module: auction
+#: view:auction.taken:0
+msgid "Select lots which are Sold"
+msgstr "Selecionar os lotes que são vendidos"
+
+#. module: auction
+#: field:auction.lots,statement_id:0
+msgid "Payment"
+msgstr "Pagamento"
+
+#. module: auction
+#: code:addons/auction/auction.py:571
+#: code:addons/auction/auction.py:686
+#, python-format
+msgid "The object \"%s\" has no buyer assigned."
+msgstr "O objeto \"%s\" não tem comprador atribuído"
+
+#. module: auction
+#: selection:auction.deposit,method:0
+msgid "Keep until sold"
+msgstr "Manter até ser vendido"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Last Auction Date"
+msgstr "Data do último leilão"
+
+#. module: auction
+#: field:report.object.encoded,obj_num:0
+msgid "# of Encoded obj."
+msgstr "Número de objetos codificados"
+
+#. module: auction
+#: field:auction.lots,paid_vnd:0
+msgid "Seller Paid"
+msgstr "Vendedor Pago"
+
+#. module: auction
+#: view:board.board:0
+#: view:report.object.encoded:0
+msgid "Objects statistics"
+msgstr "Estatísticas dos Objetos"
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "# of sellers:"
+msgstr "# de vendedores"
+
+#. module: auction
+#: field:report.auction,date:0
+#: field:report.object.encoded,date:0
+msgid "Create Date"
+msgstr "Data de Criação"
+
+#. module: auction
+#: view:auction.dates:0
+#: selection:report.object.encoded,state:0
+msgid "Invoiced"
+msgstr "Faturado"
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "# of items taken away:"
+msgstr "Número de items retirados:"
+
+#. module: auction
+#: model:ir.model,name:auction.model_report_auction
+#: view:report.auction:0
+msgid "Auction's Summary"
+msgstr "Resumos de Leilões"
+
+#. module: auction
+#: report:buyer.list:0
+msgid "%)"
+msgstr "%)"
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Buyer Information"
+msgstr "Informação sobre o comprador"
+
+#. module: auction
+#: help:auction.lots,gross_revenue:0
+msgid "Buyer Price - Seller Price"
+msgstr "Preço Comprador - Preço Vendedor"
+
+#. module: auction
+#: field:auction.lots.make.invoice,objects:0
+#: field:auction.lots.make.invoice.buyer,objects:0
+msgid "# of objects"
+msgstr "# de objetos"
+
+#. module: auction
+#: field:auction.lots,lot_est2:0
+msgid "Maximum Estimation"
+msgstr "Estimativa máxima"
+
+#. module: auction
+#: field:auction.lots,buyer_price:0
+msgid "Buyer price"
+msgstr "Preço do Comprador"
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Bids Details"
+msgstr "Pormenores das licitações"
+
+#. module: auction
+#: field:auction.lots,is_ok:0
+msgid "Buyer's payment"
+msgstr "Pagamento do Comprador"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "End of auction"
+msgstr "Fim do Leilão"
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_auction_catalog_flagey_wizard
+#: model:ir.model,name:auction.model_auction_catalog_flagey
+msgid "Auction Catalog Flagey"
+msgstr "Catálogo de leilão flagey"
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "March"
+msgstr "Março"
+
+#. module: auction
+#: model:account.tax,name:auction.auction_tax4
+msgid "Seller Costs1"
+msgstr "Custos do vendedor 1"
+
+#. module: auction
+#: field:auction.deposit,create_uid:0
+#: field:auction.lots,create_uid:0
+msgid "Created by"
+msgstr "Criado por"
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "# of buyers:"
+msgstr "Número de compradores:"
+
+#. module: auction
+#: field:auction.lots,costs:0
+msgid "Indirect costs"
+msgstr "Custos indiretos"
+
+#. module: auction
+#: help:auction.dates,seller_costs:0
+msgid "Account tax for seller"
+msgstr "Imposto Conta para Vendedor"
+
+#. module: auction
+#: code:addons/auction/wizard/auction_lots_invoice.py:67
+#: code:addons/auction/wizard/auction_lots_numerotate.py:103
+#: code:addons/auction/wizard/auction_lots_numerotate.py:129
+#, python-format
+msgid "UserError"
+msgstr "Erro do Utilizador"
+
+#. module: auction
+#: field:auction.dates,journal_seller_id:0
+msgid "Seller Journal"
+msgstr "Diário do Vendedor"
+
+#. module: auction
+#: view:auction.dates:0
+#: selection:auction.dates,state:0
+#: view:auction.lots:0
+#: selection:auction.lots,state:0
+#: view:report.auction:0
+#: selection:report.auction,state:0
+#: selection:report.auction.adjudication,state:0
+#: selection:report.object.encoded,state:0
+msgid "Draft"
+msgstr "Rascunho"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Invoiced Auction"
+msgstr "Leilão faturado"
+
+#. module: auction
+#: view:auction.catalog.flagey:0
+msgid "Print"
+msgstr "Imprimir"
+
+#. module: auction
+#: view:auction.lots:0
+#: view:report.auction:0
+msgid "Type"
+msgstr "Tipo"
+
+#. module: auction
+#: help:aie.category,child_ids:0
+msgid "children aie category"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,ach_emp:0
+msgid "When state is Taken Away, this field is marked as True"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_auction_taken
+msgid "Gestion emporte"
+msgstr "Substituição de Gestão"
+
+#. module: auction
+#: view:auction.bid:0
+#: report:auction.bids:0
+#: view:auction.dates:0
+#: view:auction.lots:0
+#: field:auction.lots,auction_id:0
+#: report:auction.total.rml:0
+#: model:ir.module.category,name:auction.module_category_auction
+#: model:ir.ui.menu,name:auction.auction_menu_root
+#: view:report.auction:0
+msgid "Auction"
+msgstr "Leilão"
+
+#. module: auction
+#: view:auction.lot.category:0
+#: model:ir.ui.menu,name:auction.menu_auction_object_cat
+msgid "Object Categories"
+msgstr "Categoria de objetos"
+
+#. module: auction
+#: field:auction.lots.sms.send,app_id:0
+msgid "API ID"
+msgstr "ID da API"
+
+#. module: auction
+#: field:auction.bid,name:0
+#: field:auction.bid_line,bid_id:0
+msgid "Bid ID"
+msgstr "ID da licitação"
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "Min Estimate:"
+msgstr "Estimativa mínima:"
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "September"
+msgstr "Setembro"
+
+#. module: auction
+#: field:report.auction,net_margin:0
+msgid "Net Margin"
+msgstr "Margem líquida"
+
+#. module: auction
+#: field:auction.lots,vnd_lim_net:0
+msgid "Net limit ?"
+msgstr "Net Limite?"
+
+#. module: auction
+#: field:aie.category,child_ids:0
+msgid "unknown"
+msgstr "desconhecido"
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "# of commissions:"
+msgstr "Número de comissões"
+
+#. module: auction
+#: field:auction.bid_line,auction:0
+#: field:auction.dates,name:0
+msgid "Auction Name"
+msgstr "Nome do Leilão"
+
+#. module: auction
+#: model:account.tax,name:auction.tax_seller
+msgid "Seller Costs (12%)"
+msgstr "Custos Vendedor (12%)"
+
+#. module: auction
+#: field:aie.category,parent_id:0
+msgid "Parent aie Category"
+msgstr ""
+
+#. module: auction
+#: view:report.auction:0
+msgid "Auction Summary"
+msgstr "Resumo do leilão"
+
+#. module: auction
+#: view:auction.lots.make.invoice:0
+#: view:auction.lots.make.invoice.buyer:0
+msgid "(Keep empty for automatic number)"
+msgstr "(Manter vazio para numerar automaticamente)"
+
+#. module: auction
+#: code:addons/auction/auction.py:578
+#, python-format
+msgid "No Invoice Address"
+msgstr "Sem endereço de faturação"
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.v_huissier
+msgid "Bailiffs Listing"
+msgstr "Listagem de oficiais de justiça"
+
+#. module: auction
+#: code:addons/auction/wizard/auction_lots_numerotate.py:103
+#: code:addons/auction/wizard/auction_lots_numerotate.py:129
+#, python-format
+msgid "This record does not exist !"
+msgstr "Este registo não existe!"
+
+#. module: auction
+#: field:auction.pay.buy,total:0
+msgid "Total Amount"
+msgstr "Montante total"
+
+#. module: auction
+#: help:auction.pay.buy,amount:0
+msgid "Amount For First Bank Statement"
+msgstr "Montante para primeiro extrato bancário"
+
+#. module: auction
+#: model:ir.model,name:auction.model_report_auction_object_date
+#: view:report.auction.object.date:0
+msgid "Objects per day"
+msgstr "Objetos, por dia"
+
+#. module: auction
+#: help:auction.lots,author_right:0
+msgid "Account tax for author commission"
+msgstr ""
+
+#. module: auction
+#: model:product.template,name:auction.monproduit_product_template
+msgid "Oeuvres a 21%"
+msgstr "Obras a 21%"
+
+#. module: auction
+#: field:report.object.encoded,adj:0
+msgid "Adj."
+msgstr "Adj."
+
+#. module: auction
+#: field:auction.lot.history,name:0
+#: field:report.auction.adjudication,date:0
+msgid "Date"
+msgstr "Data"
+
+#. module: auction
+#: field:auction.lots,obj_ret:0
+msgid "Price retired"
+msgstr "Preço retirado"
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "Extra Costs"
+msgstr "Custos extras"
+
+#. module: auction
+#: view:auction.lots.buyer_map:0
+msgid "Map "
+msgstr "Mapa "
+
+#. module: auction
+#: field:auction.lots,paid_ach:0
+msgid "Buyer Invoice Reconciled"
+msgstr "Fatura de comprador reconciliada"
+
+#. module: auction
+#: field:auction.deposit,date_dep:0
+msgid "Deposit date"
+msgstr "Data de depósito"
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.id_deposit
+msgid "Deposits"
+msgstr "Depósitos"
+
+#. module: auction
+#: field:auction.deposit,specific_cost_ids:0
+msgid "Specific Costs"
+msgstr "Custos específicos"
+
+#. module: auction
+#: report:buyer.list:0
+msgid "To pay ("
+msgstr "Para pagar ("
+
+#. module: auction
+#: model:account.tax,name:auction.tax_buyer
+msgid "Buyer Costs (20%)"
+msgstr "Custos Comprador (20%)"
+
+#. module: auction
+#: model:ir.ui.menu,name:auction.menu_board_auction
+msgid "Dashboard"
+msgstr "Painel de Controlo"
+
+#. module: auction
+#: view:auction.dates:0
+#: model:ir.actions.act_window,name:auction.action_auction_dates_next
+#: model:ir.ui.menu,name:auction.auction_date_menu
+#: model:ir.ui.menu,name:auction.menu_auction_dates_next1
+msgid "Auctions"
+msgstr "Leilões"
+
+#. module: auction
+#: view:board.board:0
+msgid "Total Adjudications"
+msgstr "Adjudicação Total"
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lots_make_invoice
+msgid "Make invoice"
+msgstr "Criar Fatura"
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "November"
+msgstr "Novembro"
+
+#. module: auction
+#: view:auction.dates:0
+#: view:auction.lots:0
+msgid "History"
+msgstr "Histórico"
+
+#. module: auction
+#: field:aie.category,code:0
+msgid "Code"
+msgstr "Código"
+
+#. module: auction
+#: report:auction.code_bar_lot:0
+msgid "Nr."
+msgstr "Nº"
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.v_report_barcode_lot
+msgid "Barcode batch"
+msgstr "Código de Barras do Lote"
+
+#. module: auction
+#: report:report.auction.buyer.result:0
+msgid "Num"
+msgstr "Nº"
+
+#. module: auction
+#: view:auction.catalog.flagey:0
+#: view:auction.taken:0
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Buyer's Payment History"
+msgstr "Histórico de Pagamento do Comprador"
+
+#. module: auction
+#: view:auction.artists:0
+#: field:auction.artists,biography:0
+msgid "Biography"
+msgstr "Biografia"
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Inventory"
+msgstr "Inventário"
+
+#. module: auction
+#: view:auction.pay.buy:0
+msgid "Pay"
+msgstr "Pagar"
+
+#. module: auction
+#: view:auction.lots.make.invoice:0
+msgid "Create Invoices for Seller"
+msgstr "Criar faturas para o vendedor"
+
+#. module: auction
+#: field:report.object.encoded,obj_margin:0
+msgid "Net margin"
+msgstr "Margem líquida"
+
+#. module: auction
+#: help:auction.lots,lot_local:0
+msgid "Auction Location"
+msgstr "Local do leilão"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Analytic"
+msgstr "Analítica"
+
+#. module: auction
+#: help:auction.lots,paid_ach:0
+msgid ""
+"When state of Buyer Invoice is 'Paid', this field is selected as True."
+msgstr ""
+"Quando o estado da fatura do Comprador está 'Pago', este campo é selecionado "
+"como True."
+
+#. module: auction
+#: report:bids.lots:0
+#: report:bids.phones.details:0
+msgid "Cat.N"
+msgstr "Cat.N"
+
+#. module: auction
+#: selection:auction.deposit,method:0
+msgid "Decrease limit of 10%"
+msgstr "Diminuição limite de 10%"
+
+#. module: auction
+#: field:auction.dates,adj_total:0
+#: field:report.auction.adjudication,adj_total:0
+msgid "Total Adjudication"
+msgstr "Adjudicação total"
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_auction_lots_make_invoice_buyer
+msgid "Invoice Buyer objects"
+msgstr "Fatura de objetos comprados"
+
+#. module: auction
+#: view:report.auction:0
+msgid "My Auction"
+msgstr "O meu leilão"
+
+#. module: auction
+#: help:auction.lots,gross_margin:0
+msgid "(Gross Revenue*100.0)/ Object Price"
+msgstr ""
+
+#. module: auction
+#: field:auction.bid,contact_tel:0
+msgid "Contact Number"
+msgstr "Número para contato"
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Price"
+msgstr "Preço"
+
+#. module: auction
+#: report:bids.phones.details:0
+msgid "-"
+msgstr "-"
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "Photos"
+msgstr "Fotos"
+
+#. module: auction
+#: field:auction.lots.make.invoice,number:0
+#: field:auction.lots.make.invoice.buyer,number:0
+msgid "Invoice Number"
+msgstr "Número de Fatura"
+
+#. module: auction
+#: code:addons/auction/wizard/auction_lots_buyer_map.py:87
+#: code:addons/auction/wizard/auction_lots_numerotate.py:77
+#: code:addons/auction/wizard/auction_lots_numerotate.py:95
+#: code:addons/auction/wizard/auction_lots_numerotate.py:122
+#: code:addons/auction/wizard/auction_lots_numerotate.py:137
+#: code:addons/auction/wizard/auction_lots_numerotate.py:173
+#, python-format
+msgid "Active IDs not Found"
+msgstr "IDs ativos não encontrados"
+
+#. module: auction
+#: code:addons/auction/wizard/auction_aie_send.py:166
+#: code:addons/auction/wizard/auction_aie_send_result.py:117
+#, python-format
+msgid "Connection to WWW.Auction-in-Europe.com failed !"
+msgstr "A ligação a www.action-in-europe.com falhou!"
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.act_auction_lot_open_bid
+#: model:ir.actions.act_window,name:auction.action_bid_open
+msgid "Open Bids"
+msgstr "Licitações abertas"
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.open_board_auction
+msgid "Auction board"
+msgstr ""
+
+#. module: auction
+#: field:aie.category,name:0
+#: view:auction.artists:0
+#: report:bids.lots:0
+msgid "Name"
+msgstr "Nome"
+
+#. module: auction
+#: field:auction.deposit,name:0
+#: view:auction.lots:0
+#: field:auction.lots,bord_vnd_id:0
+msgid "Depositer Inventory"
+msgstr "Inventório do Depósito"
+
+#. module: auction
+#: code:addons/auction/auction.py:692
+#, python-format
+msgid "The Buyer has no Invoice Address."
+msgstr "O comprador não tem endereço de faturação."
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_report_auction_adjudication_tree
+msgid "Auction Adjudication Report"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots.sms.send,user:0
+msgid "Login"
+msgstr "Iniciar sessão"
+
+#. module: auction
+#: model:ir.model,name:auction.model_report_auction_adjudication
+msgid "report_auction_adjudication"
+msgstr "report_auction_adjudication"
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.seller_lots_3
+msgid "Seller Form"
+msgstr "Formulário do Vendedor"
+
+#. module: auction
+#: field:auction.lots,lot_type:0
+#: field:report.auction,lot_type:0
+msgid "Object category"
+msgstr "Categoria do objeto"
+
+#. module: auction
+#: view:auction.taken:0
+msgid "Mark Lots"
+msgstr "Marca de Lotes"
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lots
+msgid "Auction Object"
+msgstr "Ação Objeto"
+
+#. module: auction
+#: field:auction.lots,obj_num:0
+#: field:auction.lots.enable,confirm_en:0
+msgid "Catalog Number"
+msgstr "Número de catálogo"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Accounting"
+msgstr "Contabilidade"
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.bid_phone
+msgid "Bids phones"
+msgstr "Oferta de telefones"
+
+#. module: auction
+#: field:report.auction,avg_estimation:0
+msgid "Avg estimation"
+msgstr "Estimativa média"
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "Debit:"
+msgstr "Débito:"
+
+#. module: auction
+#: code:addons/auction/wizard/auction_aie_send.py:166
+#: code:addons/auction/wizard/auction_aie_send_result.py:116
+#: code:addons/auction/wizard/auction_lots_buyer_map.py:70
+#: code:addons/auction/wizard/auction_lots_numerotate.py:145
+#, python-format
+msgid "Error"
+msgstr "Erro"
+
+#. module: auction
+#: field:auction.lots,author_right:0
+msgid "Author rights"
+msgstr "Direitos de autor"
+
+#. module: auction
+#: view:auction.bid:0
+#: view:auction.dates:0
+#: view:auction.deposit:0
+#: view:auction.lots:0
+#: view:report.auction:0
+msgid "Group By..."
+msgstr "Agrupar por..."
+
+#. module: auction
+#: view:report.auction:0
+msgid "Auction during last month."
+msgstr "Leilão durante o último mês."
+
+#. module: auction
+#: help:auction.dates,journal_id:0
+msgid "Account journal for buyer"
+msgstr "Diário da conta para o comprador"
+
+#. module: auction
+#: field:auction.bid,bid_lines:0
+#: report:auction.bids:0
+#: report:bids.lots:0
+#: model:ir.model,name:auction.model_auction_bid_line
+msgid "Bid"
+msgstr "Licitação"
+
+#. module: auction
+#: view:report.object.encoded:0
+msgid "Total net rev."
+msgstr "Receita líquida total"
+
+#. module: auction
+#: view:auction.lots.buyer_map:0
+msgid "Update"
+msgstr "Atualizar"
+
+#. module: auction
+#: report:auction.total.rml:0
+#: model:ir.ui.menu,name:auction.auction_seller_menu
+msgid "Sellers"
+msgstr "Vendedores"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Draft Auction"
+msgstr "Rascunho Leilão"
+
+#. module: auction
+#: help:auction.lots,lot_est2:0
+msgid "Maximum Estimate Price"
+msgstr "Preço máximo estimado"
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Notes"
+msgstr "Notas"
+
+#. module: auction
+#: view:auction.lots.auction.move:0
+msgid "Move to Auction date"
+msgstr "Mudar para data de Leilão"
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "# of unsold items:"
+msgstr "Número de items por vender"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Create Invoices"
+msgstr "Criar Faturas"
+
+#. module: auction
+#: field:auction.bid,auction_id:0
+#: view:auction.dates:0
+#: field:auction.lots.auction.move,auction_id:0
+msgid "Auction Date"
+msgstr "Data de leilão"
+
+#. module: auction
+#: report:auction.code_bar_lot:0
+msgid ", ID"
+msgstr ", ID"
+
+#. module: auction
+#: report:buyer.list:0
+msgid "Adj.("
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.lot_list_inv
+msgid "Lots List - Landscape"
+msgstr "Lista de Lotes (na horizontal)"
+
+#. module: auction
+#: view:auction.artists:0
+msgid "Author/Artist"
+msgstr "Autor / Artista"
+
+#. module: auction
+#: field:auction.lots,ach_login:0
+#: field:auction.lots.buyer_map,ach_login:0
+msgid "Buyer Username"
+msgstr "Nome de utilizador do comprador"
+
+#. module: auction
+#: field:auction.lot.category,priority:0
+msgid "Priority"
+msgstr "Prioridade"
+
+#. module: auction
+#: view:board.board:0
+#: model:ir.actions.act_window,name:auction.action_report_latest_objects_tree
+msgid "Latest objects"
+msgstr "Objetos mais recentes"
+
+#. module: auction
+#: field:auction.lots,lot_local:0
+msgid "Location"
+msgstr "Localização"
+
+#. module: auction
+#: view:report.auction:0
+msgid "Month -1"
+msgstr "Mês -1"
+
+#. module: auction
+#: help:auction.lots,is_ok:0
+msgid "When buyer pay for bank statement', this field is marked"
+msgstr ""
+"Quando o comprador pagar por extrato bancário', este campo está marcado"
+
+#. module: auction
+#: field:auction.lots,ach_emp:0
+msgid "Taken Away"
+msgstr "Retirados"
+
+#. module: auction
+#: view:report.object.encoded:0
+msgid "Total gross rev."
+msgstr "Receita bruta total"
+
+#. module: auction
+#: help:auction.lots,lot_est1:0
+msgid "Minimum Estimate Price"
+msgstr "Preço mínimo estimado"
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "Deposit Date"
+msgstr "Data do Depósito"
+
+#. module: auction
+#: code:addons/auction/wizard/auction_lots_numerotate.py:145
+#, python-format
+msgid "This lot does not exist !"
+msgstr "Este lote não existe !"
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "July"
+msgstr "Julho"
+
+#. module: auction
+#: field:auction.bid_line,call:0
+msgid "To be Called"
+msgstr "Para ser Cancelado"
+
+#. module: auction
+#: view:auction.lots:0
+#: model:ir.actions.act_window,name:auction.action_report_auction_lots_estimation_adj_category_tree
+msgid "Min est/Adj/Max est"
+msgstr "Estimativa mínima/Preço de adjudicação/Estimativa máxima"
+
+#. module: auction
+#: field:auction.lots,lot_est1:0
+msgid "Minimum Estimation"
+msgstr "Estimativa mínima"
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lots_sms_send
+msgid "Sms send "
+msgstr "Enviar SMS "
+
+#. module: auction
+#: view:auction.lots.auction.move:0
+#: model:ir.actions.act_window,name:auction.action_auction_lots_auction_move
+msgid "Change Auction Date"
+msgstr "Mudar data de leilão"
+
+#. module: auction
+#: field:auction.artists,birth_death_dates:0
+msgid "Lifespan"
+msgstr "Período de validade"
+
+#. module: auction
+#: view:auction.deposit:0
+#: field:auction.deposit,method:0
+msgid "Withdrawned method"
+msgstr "Método de Arrebatamento"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Buyer Commissions"
+msgstr "Comissões Comprador"
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_report_auction
+#: model:ir.ui.menu,name:auction.menu_report_auction
+msgid "Auction Analysis"
+msgstr "Análise Leilão"
+
+#. module: auction
+#: code:addons/auction/wizard/auction_pay_buy.py:80
+#, python-format
+msgid "Payment aborted !"
+msgstr "Pagamento Cancelado !"
+
+#. module: auction
+#: field:auction.lot.history,price:0
+msgid "Withdrawn price"
+msgstr "Preço Final"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Beginning of the auction"
+msgstr "Inicio do leilão"
+
+#. module: auction
+#: help:auction.pay.buy,statement_id3:0
+msgid "Third Bank Statement For Buyer"
+msgstr ""
+
+#. module: auction
+#: view:report.auction:0
+#: field:report.auction,month:0
+#: field:report.auction.object.date,month:0
+msgid "Month"
+msgstr "Mês"
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "Max Estimate:"
+msgstr "Estimativa máxima"
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Statistical"
+msgstr "Estatística"
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_deposit
+msgid "Auction Deposit Border"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_report_object_encoded_tree
+msgid "Object statistics"
+msgstr "Estatísticas do Objeto"
+
+#. module: auction
+#: help:auction.lots,net_margin:0
+msgid "(Net Revenue * 100)/ Object Price"
+msgstr "(Receita líquida * 100) / Preço do objeto"
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lot_history
+msgid "Lot History"
+msgstr "Histórico do Lote"
+
+#. module: auction
+#: view:auction.lots.make.invoice:0
+#: view:auction.lots.make.invoice.buyer:0
+msgid "Create invoices"
+msgstr "Criar Faturas"
+
+#. module: auction
+#: model:account.tax.code,name:auction.account_tax_code_id5
+msgid "VAT 5%"
+msgstr "IVA 5%"
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lots_buyer_map
+msgid "Map Buyer"
+msgstr ""
+
+#. module: auction
+#: report:buyer.list:0
+msgid "Lot"
+msgstr "Lote"
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_report_auction_object_date_tree
+msgid "Auction Object Date"
+msgstr "Data da ação do objeto"
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_artists
+msgid "auction.artists"
+msgstr "auction.artists"
+
+#. module: auction
+#: field:report.auction,avg_price:0
+msgid "Avg Price."
+msgstr "Preço médio"
+
+#. module: auction
+#: help:auction.pay.buy,statement_id2:0
+msgid "Second Bank Statement For Buyer"
+msgstr ""
+
+#. module: auction
+#: field:auction.dates,journal_id:0
+msgid "Buyer Journal"
+msgstr "Diário do Comprador"
+
+#. module: auction
+#: selection:auction.lots,state:0
+#: selection:report.object.encoded,state:0
+msgid "Paid"
+msgstr "Pago"
+
+#. module: auction
+#: report:bids.lots:0
+#: report:bids.phones.details:0
+msgid "Phone"
+msgstr "Telefone"
+
+#. module: auction
+#: field:auction.lot.category,active:0
+msgid "Active"
+msgstr "Ativo"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Exposition Dates"
+msgstr ""
+
+#. module: auction
+#: model:account.tax,name:auction.auction_tax1
+msgid "TVA"
+msgstr "IVA"
+
+#. module: auction
+#: field:auction.lots,important:0
+msgid "To be Emphatized"
+msgstr "Para realçar"
+
+#. module: auction
+#: report:buyer.list:0
+msgid "Total:"
+msgstr "Total:"
+
+#. module: auction
+#: model:account.tax,name:auction.auction_tax2
+msgid "TVA1"
+msgstr "IVA 1"
+
+#. module: auction
+#: view:report.auction.object.date:0
+msgid "Objects per Day"
+msgstr "Objetos por Dia"
+
+#. module: auction
+#: field:auction.dates,seller_invoice_history:0
+#: field:auction.lots,sel_inv_id:0
+#: view:auction.lots.make.invoice:0
+msgid "Seller Invoice"
+msgstr "Fatura do comprador"
+
+#. module: auction
+#: view:board.board:0
+msgid "Objects by day"
+msgstr "Objetos por dia"
+
+#. module: auction
+#: help:auction.dates,expo2:0
+msgid "Last exposition date for auction"
+msgstr ""
+
+#. module: auction
+#: code:addons/auction/auction.py:571
+#: code:addons/auction/auction.py:686
+#, python-format
+msgid "Missed buyer !"
+msgstr "Perdeu Comprador !"
+
+#. module: auction
+#: report:auction.code_bar_lot:0
+msgid "Flagey"
+msgstr "Flagey"
+
+#. module: auction
+#: view:board.board:0
+msgid "Auction manager "
+msgstr "Gestor de leilão "
+
+#. module: auction
+#: code:addons/auction/wizard/auction_lots_invoice.py:67
+#, python-format
+msgid ""
+"Two different buyers for the same invoice !\n"
+"Please correct this problem before invoicing"
+msgstr ""
+"Dois compradores diferentes para a mesma fatura!\n"
+"Por favor, corrija este problema antes da faturação"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Invoice"
+msgstr "Fatura"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Commissions"
+msgstr "Comissões"
+
+#. module: auction
+#: field:auction.lots,vnd_lim:0
+msgid "Seller limit"
+msgstr "Limite de Vendedores"
+
+#. module: auction
+#: field:auction.deposit,transfer:0
+msgid "Transfer"
+msgstr "Transferência"
+
+#. module: auction
+#: view:auction.pay.buy:0
+msgid "Line3"
+msgstr "Linha3"
+
+#. module: auction
+#: view:auction.pay.buy:0
+msgid "Line2"
+msgstr "Linha2"
+
+#. module: auction
+#: help:auction.lots,obj_ret:0
+msgid "Object Ret"
+msgstr ""
+
+#. module: auction
+#: view:report.auction.adjudication:0
+msgid "Total adjudication"
+msgstr "Adjudicação Total"
+
+#. module: auction
+#: selection:auction.deposit,method:0
+msgid "Contact the Seller"
+msgstr "Contate o Vendedor"
+
+#. module: auction
+#: field:auction.taken,lot_ids:0
+msgid "Lots Emportes"
+msgstr "Importação de Lotes"
+
+#. module: auction
+#: field:auction.lots,net_margin:0
+msgid "Net Margin (%)"
+msgstr "Margem líquida (%)"
+
+#. module: auction
+#: field:auction.lots,product_id:0
+msgid "Product"
+msgstr "Artigo"
+
+#. module: auction
+#: report:buyer.list:0
+msgid ")"
+msgstr ")"
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Seller Information"
+msgstr "Informação sobre o vendedor"
+
+#. module: auction
+#: view:auction.deposit:0
+#: field:auction.deposit,lot_id:0
+#: view:auction.lots:0
+#: model:ir.actions.act_window,name:auction.action_all_objects
+#: model:ir.ui.menu,name:auction.auction_all_objects_menu
+msgid "Objects"
+msgstr "Objetos"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Seller Invoices"
+msgstr "Faturas de vendedor"
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "Paid:"
+msgstr "Pago:"
+
+#. module: auction
+#: field:auction.deposit,total_neg:0
+msgid "Allow Negative Amount"
+msgstr "Permitir um montante negativo"
+
+#. module: auction
+#: help:auction.pay.buy,amount2:0
+msgid "Amount For Second Bank Statement"
+msgstr ""
+
+#. module: auction
+#: field:auction.lot.history,auction_id:0
+#: field:report.auction,auction:0
+#: field:report.auction.adjudication,name:0
+msgid "Auction date"
+msgstr "Data de leilão"
+
+#. module: auction
+#: view:auction.lots.sms.send:0
+msgid "SMS Text"
+msgstr "Texto do SMS"
+
+#. module: auction
+#: field:auction.dates,auction1:0
+msgid "First Auction Day"
+msgstr "Primeiro Dia de Leilão"
+
+#. module: auction
+#: view:auction.lots.make.invoice.buyer:0
+msgid "Create Invoices for Buyer"
+msgstr "Criar faturas para o comprador"
+
+#. module: auction
+#: model:res.groups,name:auction.group_auction_manager
+msgid "Manager"
+msgstr "Gestor"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Names"
+msgstr "Nomes"
+
+#. module: auction
+#: view:auction.artists:0
+#: model:ir.ui.menu,name:auction.menu_auction_artist
+msgid "Artists"
+msgstr "Artistas"
+
+#. module: auction
+#: view:auction.pay.buy:0
+msgid "Pay Objects"
+msgstr "Pagar objetos"
+
+#. module: auction
+#: help:auction.dates,expo1:0
+msgid "Beginning exposition date for auction"
+msgstr "A partir da data de exposição para leilão"
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.act_auction_lot_line_open
+msgid "Open lots"
+msgstr "Lotes Abertos"
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.act_auction_lot_open_deposit
+msgid "Deposit slip"
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lots_enable
+msgid "Lots Enable"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Lots"
+msgstr "Lotes"
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_auction_artist
+msgid "Auction Artists"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,seller_price:0
+msgid "Seller price"
+msgstr "Preço do Vendedor"
+
+#. module: auction
+#: model:account.tax,name:auction.auction_tax20
+msgid "Frais de vente0"
+msgstr ""
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.buy_id_list
+msgid "Buyer List"
+msgstr "Lista de Comprador"
+
+#. module: auction
+#: report:buyer.list:0
+msgid "Buyer costs("
+msgstr "Custos do Comprador("
+
+#. module: auction
+#: field:auction.pay.buy,statement_id1:0
+#: field:auction.pay.buy,statement_id2:0
+#: field:auction.pay.buy,statement_id3:0
+msgid "Statement"
+msgstr "Extrato"
+
+#. module: auction
+#: help:auction.lots,seller_price:0
+#: help:auction.lots.make.invoice,amount:0
+msgid "Seller Price"
+msgstr "Preço Vendedor"
+
+#. module: auction
+#: model:account.tax,name:auction.auction_tax6
+msgid "Frais de vente"
+msgstr "Taxas de Vendas"
+
+#. module: auction
+#: model:account.tax.code,name:auction.account_tax_code_id1
+msgid "VAT 1%"
+msgstr "IVA 1%"
+
+#. module: auction
+#: model:account.tax,name:auction.auction_tax
+msgid "Droit d'auteur"
+msgstr "Direitos de autor"
+
+#. module: auction
+#: field:auction.dates,expo1:0
+msgid "First Exposition Day"
+msgstr "Primeiro Dia de Exposição"
+
+#. module: auction
+#: field:report.auction.object.date,name:0
+msgid "Created date"
+msgstr "Data Criada"
+
+#. module: auction
+#: help:auction.lots,bord_vnd_id:0
+msgid ""
+"Provide deposit information: seller, Withdrawned Method, Object, Deposit "
+"Costs"
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,net_revenue:0
+#: field:report.object.encoded,net_revenue:0
+msgid "Net revenue"
+msgstr "Receitas líquidas"
+
+#. module: auction
+#: code:addons/auction/wizard/auction_catalog_flagey_report.py:63
+#: code:addons/auction/wizard/auction_pay_buy.py:89
+#, python-format
+msgid "Error!"
+msgstr "Erro !"
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_report_latest_doposit_tree
+msgid "Latest Deposits"
+msgstr "Últimos Depósitos"
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "# of items:"
+msgstr "Número de items"
+
+#. module: auction
+#: model:account.tax,name:auction.tax_buyer_author
+msgid "Author rights (4%)"
+msgstr "Direitos de autor (4%)"
+
+#. module: auction
+#: field:report.object.encoded,estimation:0
+msgid "Estimation"
+msgstr "Estimativa"
+
+#. module: auction
+#: view:auction.taken:0
+msgid "OK"
+msgstr "OK"
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.buyer_form_id
+msgid "Buyer Form"
+msgstr "Formulário do Comprador"
+
+#. module: auction
+#: field:auction.bid,partner_id:0
+msgid "Buyer Name"
+msgstr "Nome do comprador"
+
+#. module: auction
+#: view:report.auction:0
+#: field:report.auction,day:0
+msgid "Day"
+msgstr "Dia"
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_auction_lots_make_invoice
+msgid "Invoice Seller objects"
+msgstr "Faturas de Objetos Vendidos"
+
+#. module: auction
+#: field:auction.lots,gross_margin:0
+msgid "Gross Margin (%)"
+msgstr "Margem bruta (%)"
+
+#. module: auction
+#: selection:auction.dates,state:0
+#: selection:report.auction.adjudication,state:0
+msgid "Closed"
+msgstr "Encerrado"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Search Next Auction Dates"
+msgstr "Procurar próximas datas de leilões"
+
+#. module: auction
+#: view:auction.catalog.flagey:0
+msgid "Print Auction Catalog Flagey Report..."
+msgstr ""
+
+#. module: auction
+#: field:auction.lots,ach_avance:0
+msgid "Buyer Advance"
+msgstr "Adiantamento do Comprador"
+
+#. module: auction
+#: field:auction.lots,obj_comm:0
+msgid "Commission"
+msgstr "Comissão"
+
+#. module: auction
+#: view:board.board:0
+msgid "Min/Adj/Max"
+msgstr "Min/adj/Max"
+
+#. module: auction
+#: view:auction.catalog.flagey:0
+msgid "Catalog Flagey Report"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,obj_price:0
+msgid "Object Price"
+msgstr "Preço do objeto"
+
+#. module: auction
+#: view:auction.bid:0
+msgid "Bids Lines"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Catalog"
+msgstr "Catálogo"
+
+#. module: auction
+#: help:auction.lots,auction_id:0
+msgid "Auction for object"
+msgstr "Leilão por objeto"
+
+#. module: auction
+#: field:auction.deposit.cost,account:0
+msgid "Destination Account"
+msgstr "Conta de destino"
+
+#. module: auction
+#: model:ir.ui.menu,name:auction.auction_config_menu
+msgid "Configuration"
+msgstr "Configuração"
+
+#. module: auction
+#: model:ir.actions.act_window,name:auction.action_report_auction_object_date_tree_my
+msgid "My Auction Object Date"
+msgstr ""
+
+#. module: auction
+#: code:addons/auction/wizard/auction_pay_buy.py:80
+#, python-format
+msgid ""
+"You should pay all the total: \"%.2f\" are missing to accomplish the payment."
+msgstr ""
+"Deve pagar a totalidade: \"%.2f\" estão em falta para realizar o pagamento."
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_pay_buy
+msgid "Pay buy"
+msgstr "Pagar Compra"
+
+#. module: auction
+#: model:ir.ui.menu,name:auction.auction_outils_menu
+msgid "Tools Bar Codes"
+msgstr "Ferramenta do Código de Barras"
+
+#. module: auction
+#: field:auction.deposit.cost,deposit_id:0
+msgid "Deposit"
+msgstr "Depósito"
+
+#. module: auction
+#: field:auction.dates,expo2:0
+msgid "Last Exposition Day"
+msgstr "Último Dia de Exposição"
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lots_able
+msgid "Lots able"
+msgstr ""
+
+#. module: auction
+#: model:account.tax.code,name:auction.account_tax_code_id3
+msgid "VAT 10%"
+msgstr "IVA 10%"
+
+#. module: auction
+#: field:auction.artists,name:0
+msgid "Artist/Author Name"
+msgstr "Artista/Nome do Autor"
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "December"
+msgstr "Dezembro"
+
+#. module: auction
+#: view:auction.deposit:0
+#: field:auction.lots,image:0
+msgid "Image"
+msgstr "Imagem"
+
+#. module: auction
+#: help:auction.lots,buyer_price:0
+#: help:auction.lots.make.invoice.buyer,amount:0
+msgid "Buyer Price"
+msgstr "Preço Comprador"
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_lot_category
+msgid "Auction Lots Category"
+msgstr ""
+
+#. module: auction
+#: model:account.tax.code,name:auction.account_tax_code_id2
+msgid "VAT 20%"
+msgstr "IVA 20%"
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_payer_sel
+msgid "Auction payment for seller"
+msgstr ""
+
+#. module: auction
+#: view:auction.lots:0
+#: selection:auction.lots,state:0
+msgid "Taken away"
+msgstr "Retirado"
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.seller_form_id
+msgid "Seller List"
+msgstr "Lista de vendedores"
+
+#. module: auction
+#: view:report.object.encoded:0
+msgid "Total adj."
+msgstr "Total adj."
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "Deposit Costs"
+msgstr "Custos de Depósito"
+
+#. module: auction
+#: field:auction.lot.category,name:0
+msgid "Category Name"
+msgstr "Nome da categoria"
+
+#. module: auction
+#: report:buyer.list:0
+msgid "........."
+msgstr "........."
+
+#. module: auction
+#: view:report.auction:0
+msgid "Auction Summary tree view"
+msgstr ""
+
+#. module: auction
+#: report:report.auction.buyer.result:0
+msgid "Adj"
+msgstr "Adj"
+
+#. module: auction
+#: view:auction.dates:0
+#: model:ir.model,name:auction.model_auction_dates
+msgid "Auction Dates"
+msgstr "Datas de leilão"
+
+#. module: auction
+#: model:ir.ui.menu,name:auction.menu_board_auction_open
+msgid "Auction DashBoard"
+msgstr "Painel Controlo do Leilão"
+
+#. module: auction
+#: view:report.auction:0
+#: field:report.auction,user_id:0
+#: field:report.auction.adjudication,user_id:0
+#: field:report.auction.object.date,user_id:0
+#: field:report.object.encoded,user_id:0
+#: model:res.groups,name:auction.group_auction_user
+msgid "User"
+msgstr "Utilizador"
+
+#. module: auction
+#: view:auction.pay.buy:0
+msgid "Payment Lines"
+msgstr "Linhas de Pagamento"
+
+#. module: auction
+#: code:addons/auction/auction.py:692
+#, python-format
+msgid "Missed Address !"
+msgstr "Endereço Errado !"
+
+#. module: auction
+#: help:auction.lots,net_revenue:0
+msgid "Buyer Price - Seller Price - Indirect Cost"
+msgstr ""
+
+#. module: auction
+#: help:auction.lots,state:0
+msgid ""
+" * The 'Draft' state is used when a object is encoding as a new object. "
+" \n"
+"* The 'Unsold' state is used when object does not sold for long time, user "
+"can also set it as draft state after unsold. \n"
+"* The 'Paid' state is used when user pay for the object \n"
+"* The 'Sold' state is used when user buy the object."
+msgstr ""
+
+#. module: auction
+#: field:auction.artists,pseudo:0
+msgid "Pseudo"
+msgstr "Pseudónimo"
+
+#. module: auction
+#: view:auction.lots:0
+msgid "Not sold"
+msgstr "Por vender"
+
+#. module: auction
+#: model:account.tax,name:auction.auction_tax3
+#: field:auction.dates,buyer_costs:0
+msgid "Buyer Costs"
+msgstr "Custos do Comprador"
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "Auction Date:"
+msgstr "Data de Leilão"
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "Objects Description"
+msgstr "Descrição Objetos"
+
+#. module: auction
+#: field:auction.dates,buyer_invoice_history:0
+#: field:auction.lots,ach_inv_id:0
+#: view:auction.lots.make.invoice.buyer:0
+msgid "Buyer Invoice"
+msgstr "Fatura do comprador"
+
+#. module: auction
+#: report:auction.bids:0
+msgid "Tel"
+msgstr "Tel"
+
+#. module: auction
+#: field:auction.lots,artist_id:0
+msgid "Artist/Author"
+msgstr "Artista/Autor"
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.total_result1
+msgid "Auction Totals with lists"
+msgstr "Totais Leilão com listas"
+
+#. module: auction
+#: view:auction.deposit:0
+msgid "General Information"
+msgstr "Informação Geral"
+
+#. module: auction
+#: view:auction.lots.auction.move:0
+#: view:auction.lots.buyer_map:0
+#: view:auction.lots.make.invoice:0
+#: view:auction.lots.make.invoice.buyer:0
+#: view:auction.lots.sms.send:0
+#: view:auction.pay.buy:0
+msgid "Close"
+msgstr "Fechar"
+
+#. module: auction
+#: model:ir.model,name:auction.model_report_object_encoded
+msgid "Object encoded"
+msgstr "Objeto codificado"
+
+#. module: auction
+#: view:auction.bid:0
+msgid "Search Auction Bid"
+msgstr ""
+
+#. module: auction
+#: report:bids.phones.details:0
+msgid "Est"
+msgstr "Est"
+
+#. module: auction
+#: view:auction.dates:0
+msgid "Seller Commissions"
+msgstr "Comissões Vendedor"
+
+#. module: auction
+#: view:report.object.encoded:0
+msgid "Object statistic"
+msgstr "Estatística do objeto"
+
+#. module: auction
+#: help:auction.dates,journal_seller_id:0
+msgid "Account journal for seller"
+msgstr "Diário da Conta para o vendedor"
+
+#. module: auction
+#: field:auction.dates,auction2:0
+msgid "Last Auction Day"
+msgstr "Último dia de leilão"
+
+#. module: auction
+#: code:addons/auction/wizard/auction_pay_buy.py:89
+#, python-format
+msgid "No auction date for \"%s\": Please set one."
+msgstr ""
+
+#. module: auction
+#: view:auction.deposit:0
+#: field:auction.deposit,info:0
+#: report:bids.phones.details:0
+msgid "Description"
+msgstr "Descrição"
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "May"
+msgstr "Maio"
+
+#. module: auction
+#: field:auction.lots,obj_price:0
+msgid "Adjudication price"
+msgstr "Preço de adjudicação"
+
+#. module: auction
+#: field:auction.dates,acc_income:0
+msgid "Income Account"
+msgstr "Conta de receitas"
+
+#. module: auction
+#: field:auction.lots.sms.send,password:0
+msgid "Password"
+msgstr "Password"
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "February"
+msgstr "Fevereiro"
+
+#. module: auction
+#: selection:report.auction,month:0
+msgid "April"
+msgstr "Abril"
+
+#. module: auction
+#: view:auction.pay.buy:0
+msgid "Pay objects"
+msgstr "Objetos Pagos"
+
+#. module: auction
+#: view:report.object.encoded:0
+msgid "# objects"
+msgstr "Número de objetos"
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "Adjudication:"
+msgstr "Adjudicação:"
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.details_bids_phones
+msgid "Bids per lot (phone)"
+msgstr "Oferta por Lote (telefone)"
+
+#. module: auction
+#: field:report.auction,buyer_login:0
+msgid "Buyer Login"
+msgstr "Login do Comprador"
+
+#. module: auction
+#: field:auction.deposit,tax_id:0
+msgid "Expenses"
+msgstr "Despesas"
+
+#. module: auction
+#: view:report.auction:0
+msgid "Auction during current month."
+msgstr ""
+
+#. module: auction
+#: model:ir.model,name:auction.model_auction_payer
+msgid "Auction payer"
+msgstr ""
+
+#. module: auction
+#: view:report.auction:0
+msgid "Auction during current year."
+msgstr "Leilão durante este ano."
+
+#. module: auction
+#: report:auction.total.rml:0
+msgid "Auction name:"
+msgstr "Nome do Leilão:"
+
+#. module: auction
+#: view:board.board:0
+msgid "Latest deposits"
+msgstr "Depósitos mais recentes"
+
+#. module: auction
+#: model:ir.actions.report.xml,name:auction.art2
+msgid "Artists Biography"
+msgstr "Biografia do Artista"
+
+#. module: auction
+#: view:report.auction:0
+#: field:report.auction,year:0
+msgid "Year"
+msgstr "Ano"
+
+#. module: auction
+#: field:auction.lots,history_ids:0
+msgid "Auction history"
+msgstr "Histórico do Leilão"
+
+#~ msgid "SMS - Gateway: clickatell"
+#~ msgstr "SMS - Gateway: clickatell"
+
+#~ msgid "Provisoire"
+#~ msgstr "Provisório"
+
+#~ msgid "Adjudication by Auction"
+#~ msgstr "Adjudicação por Leilão"
+
+#~ msgid "Numerotation (per lot)"
+#~ msgstr "Numeração (por lote)"
+
+#~ msgid "Antique/Books, manuscripts, eso."
+#~ msgstr "Antiguidades/livros, manuscritos, etc."
+
+#~ msgid "Buyer invoice reconciled"
+#~ msgstr "Factura do comprador reconciliada"
+
+#~ msgid "Objects by Auction"
+#~ msgstr "Objetos por Leilão"
+
+#~ msgid "Antiques"
+#~ msgstr "Antiguidades"
+
+#~ msgid "Dates"
+#~ msgstr "Datas"
+
+#~ msgid "All objects"
+#~ msgstr "Todos os objectos"
+
+#~ msgid "Contact"
+#~ msgstr "Contacto"
+
+#~ msgid "Back"
+#~ msgstr "Anterior"
+
+#~ msgid "Langage"
+#~ msgstr "Linguagem"
+
+#~ msgid "Exit"
+#~ msgstr "Sair"
+
+#~ msgid "Amount paid"
+#~ msgstr "Montante pago"
+
+#~ msgid "Continue"
+#~ msgstr "Continuar"
+
+#~ msgid "Retry"
+#~ msgstr "Repetir"
+
+#~ msgid "The VAT doesn't seem to be correct."
+#~ msgstr "O IVA não parece estar correcto."
+
+#~ msgid "Error ! You can not create recursive associated members."
+#~ msgstr "Erro! Não pode criar membros associados recursivamente."
+
+#~ msgid "Total margin"
+#~ msgstr "Margem Total"
+
+#~ msgid "Definitive (ordre catalogue)"
+#~ msgstr "Definitivo (Catálogo de Ordem)"
+
+#~ msgid "My Encoded Objects Per Day"
+#~ msgstr "Meus Objectos Codificacdos Por Dia"
+
+#~ msgid "Lot history"
+#~ msgstr "Histórico de Lote"
+
+#~ msgid "Bids line"
+#~ msgstr "Linha de Ofertas"
+
+#~ msgid "Antique/Tin / Copper wares"
+#~ msgstr "Antiguidade/Lata/Mercadorias de cobre"
+
+#~ msgid "Mark as taken away"
+#~ msgstr "Marcar como retirado"
+
+#~ msgid "Statements"
+#~ msgstr "Extratos"
+
+#~ msgid "Unclassifieds"
+#~ msgstr "Desclassificados"
+
+#~ msgid "Object Type"
+#~ msgstr "Tipo de Objecto"
+
+#~ msgid "Contemporary Art"
+#~ msgstr "Arte Contemporânea"
+
+#~ msgid "No of sellers"
+#~ msgstr "Nº de vendedores"
+
+#~ msgid "ned"
+#~ msgstr "ned"
+
+#~ msgid "Net margin (%)"
+#~ msgstr "Margem de Net (%)"
+
+#~ msgid "Buyer's auction for all months"
+#~ msgstr "Leilão do Comprador por todos os meses"
+
+#~ msgid "Cont. Art/Painting"
+#~ msgstr "Cont. Arte/Pintura"
+
+#~ msgid "Unsold objects"
+#~ msgstr "Objectos não Bendidos"
+
+#~ msgid "Sold Objects"
+#~ msgstr "Objectos Vendidos"
+
+#~ msgid "Sum net margin"
+#~ msgstr "Somar margem de net"
+
+#~ msgid "Inventory Number"
+#~ msgstr "Número do Inventário"
+
+#~ msgid "Antique/Cartoons"
+#~ msgstr "Antiguidade/Cartoons"
+
+#~ msgid "Error ! You cannot create recursive Hierarchy of Employees."
+#~ msgstr "Erro ! Não pode criar Hierarquias de Funcionários recursivamente."
+
+#~ msgid "Artist/Author 2"
+#~ msgstr "Artista/Autor 2"
+
+#~ msgid "Auction Objects"
+#~ msgstr "Objectos do Leilão"
+
+#~ msgid "Depositer's statistics"
+#~ msgstr "Estatisticas do Depositante"
+
+#~ msgid "Buyer information"
+#~ msgstr "Informação do Comprador"
+
+#~ msgid "auction.dates"
+#~ msgstr "auction.dates"
+
+#~ msgid "My Latest Deposits"
+#~ msgstr "Meus Últimos Depósitos"
+
+#~ msgid "Buyer's Revenues"
+#~ msgstr "Lucros do Comprador"
+
+#~ msgid "eng"
+#~ msgstr "eng"
+
+#~ msgid "Bulk SMS send"
+#~ msgstr "Enviar um Volume de SMS"
+
+#~ msgid "fr"
+#~ msgstr "FR"
+
+#~ msgid "Antique/Old weapons and militaria"
+#~ msgstr "Antiguidade/Velhas armas e militaria"
+
+#~ msgid "Antique/Oriental Arts/Chineese furnitures"
+#~ msgstr "Antigo/Arte Oriental/Móveis Chineses"
+
+#~ msgid "Avg. Est"
+#~ msgstr "Avg.Est"
+
+#~ msgid ""
+#~ "This module provides functionality to \n"
+#~ " manage artists, articles, sellers, buyers and auction.\n"
+#~ " Manage bids, track of sold, paid and unpaid objects.\n"
+#~ " Delivery Management. \n"
+#~ " "
+#~ msgstr ""
+#~ "Este módulo provê funcionalidade para\n"
+#~ " gestão artistica, artigos, vendedores, compradores e leilão.\n"
+#~ " Gestão de oferta, faixa de vendas, pagos e objecto não pagos.\n"
+#~ " Gestão de Entrega. \n"
+#~ " "
+
+#~ msgid "Confirmation set taken away"
+#~ msgstr "Confirmação do conjunto retirado"
+
+#~ msgid "Mark as paid for seller"
+#~ msgstr "Marcar como pago para o vendedor"
+
+#~ msgid "Close + Create all invoices"
+#~ msgstr "Fechar + Criar todas as Facturas"
+
+#~ msgid "Antique/Verreries"
+#~ msgstr "Antiguidade/Artigos de Vidro"
+
+#~ msgid "Antique/Toys"
+#~ msgstr "Antigo/Brinquedos"
+
+#~ msgid "Auction Management"
+#~ msgstr "Gestão de Leilão"
+
+#~ msgid "Define Artists"
+#~ msgstr "Definir Artistas"
+
+#~ msgid "Comparison of estimations"
+#~ msgstr "Comparação das estimativas"
+
+#~ msgid "Code barres du lot"
+#~ msgstr "Código de barras do lote"
+
+#~ msgid "Birth / Death dates"
+#~ msgstr "Datas de Nascimento/Morte"
+
+#~ msgid "Antique/Jewelry"
+#~ msgstr "Antiguidade/Jóias"
+
+#~ msgid "Unclassified objects "
+#~ msgstr "Objectos não Classificados "
+
+#~ msgid "Numerotation"
+#~ msgstr "Numeração"
+
+#~ msgid "Bordereau de dépôt"
+#~ msgstr "Comprovante de Depósito"
+
+#~ msgid "Cont. Art/Arts"
+#~ msgstr "Cont. Arte/Artes"
+
+#~ msgid "comparaison estimate/adjudication "
+#~ msgstr "comparação estimar/adjudicação "
+
+#~ msgid "Adj(EUR)"
+#~ msgstr "Adj(EUR)"
+
+#~ msgid "Cont. Art/Other Media"
+#~ msgstr "Cont. Arte/Outros Mídia"
+
+#~ msgid "Send Image also ?"
+#~ msgstr "Enviar Imagem também?"
+
+#~ msgid "General Informations"
+#~ msgstr "Informações Gerais"
+
+#~ msgid "Auctions results"
+#~ msgstr "Resultados de Leilões"
+
+#~ msgid "Unclassified objects"
+#~ msgstr "Objectos não Classificados"
+
+#~ msgid "Antique/Carpet and textilles"
+#~ msgstr "Antiguidade/Carpete e têxteis"
+
+#~ msgid "New Auction Dates"
+#~ msgstr "Nova Data de Leilão"
+
+#~ msgid "Sum adj"
+#~ msgstr "Soma adj"
+
+#~ msgid "No of Objects"
+#~ msgstr "Nº de Objectos"
+
+#~ msgid "Antique/Painting"
+#~ msgstr "Antiguidade/Pintura"
+
+#~ msgid "Aie Category"
+#~ msgstr "Categoria AIE"
+
+#~ msgid "Check payment for seller"
+#~ msgstr "Verificar o pagamento para o vendedor"
+
+#~ msgid "Send results to Auction-in-europe.com"
+#~ msgstr "Enviar resultados para Auction-in-europe.com"
+
+#~ msgid "Seller's auction"
+#~ msgstr "Leilão do Vendedor"
+
+#~ msgid "Seller's Revenues"
+#~ msgstr "Receitas do Vendedor"
+
+#~ msgid "Buyer's Summary"
+#~ msgstr "Resumo de Comprador"
+
+#~ msgid "Depositer's Statistics"
+#~ msgstr "Estatísticas do Depósito"
+
+#~ msgid "To pay"
+#~ msgstr "Para pagar"
+
+#~ msgid "Enable Taken away"
+#~ msgstr "Permitir Retirada"
+
+#~ msgid "Antique/Others"
+#~ msgstr "Antiguidade/Outros"
+
+#~ msgid "Auction dates"
+#~ msgstr "Data dos Leilões"
+
+#~ msgid "Encoded Objects Per Day"
+#~ msgstr "Codificar Objectos por Dia"
+
+#~ msgid "Auction Reporting on buyer view"
+#~ msgstr "Relatório do Leilão na vista do comprador"
+
+#~ msgid "Payment's history"
+#~ msgstr "Histórico de Pagamentos"
+
+#~ msgid "Auction results"
+#~ msgstr "Resultados dos Leilões"
+
+#~ msgid "Auction's Revenues"
+#~ msgstr "Rendimentos dos Leilões"
+
+#~ msgid "Antique/Metal Ware"
+#~ msgstr "Antiguidade/Peças de Metal"
+
+#~ msgid "de"
+#~ msgstr "de"
+
+#~ msgid "Old Auctions"
+#~ msgstr "Leilões Antigos"
+
+#~ msgid "Cont. Art/Curiosa"
+#~ msgstr "Cont. Arte/Curiosa"
+
+#~ msgid "Auction module"
+#~ msgstr "Módulo Leilão"
+
+#~ msgid "Attendance"
+#~ msgstr "Atendimento"
+
+#~ msgid "Seller information"
+#~ msgstr "Informação do Vendedor"
+
+#~ msgid "Cont. Art/Jewelry"
+#~ msgstr "Cont. Arte/Jóias"
+
+#~ msgid "Next Auctions"
+#~ msgstr "Próximos Leilões"
+
+#~ msgid "#"
+#~ msgstr "#"
+
+#~ msgid "Antique/Miniatures / Collections"
+#~ msgstr "Antiguidade/Miniaturas/Colecções"
+
+#~ msgid "Cont. Art/Photo"
+#~ msgstr "Cont. Arte/Fotografia"
+
+#~ msgid "Bid auctions"
+#~ msgstr "Oferta de Leilão"
+
+#~ msgid "Avg margin"
+#~ msgstr "Margem Avg"
+
+#~ msgid "Antique/Art from the Ivory Coast"
+#~ msgstr "Antiguidade/ Arte para a Costa do Marfim"
+
+#~ msgid "Antique/Religiosa"
+#~ msgstr "Antiguidade/Religiosa"
+
+#~ msgid ""
+#~ "Error: The default UOM and the purchase UOM must be in the same category."
+#~ msgstr ""
+#~ "Erro: O UOM padrão e o UOM de compra devem estar na mesma categoria."
+
+#~ msgid "Unplanned objects"
+#~ msgstr "Objectos não Pagos"
+
+#~ msgid "Cont. Art/Sculpture"
+#~ msgstr "Cont. Arte/Escultura"
+
+#~ msgid "Antique/Argenterie"
+#~ msgstr "Antiguidade/Talheres"
+
+#~ msgid "Detailed lots"
+#~ msgstr "Lotes Detalhados"
+
+#~ msgid "Antique/Lightings"
+#~ msgstr "Antiguidade/Iluminação"
+
+#~ msgid "Antique/Sculpture, bronze, eso."
+#~ msgstr "Antiguidade/Escultura, bronze, etc."
+
+#~ msgid "Numerotate"
+#~ msgstr "Numeração"
+
+#~ msgid "Listing Huissiers"
+#~ msgstr "Listagem de Oficiais de Justiça"
+
+#~ msgid "All objects are assigned to buyers !"
+#~ msgstr "Todos os objectos são atribuidos para os compradores !"
+
+#~ msgid "Able Taken away"
+#~ msgstr "Permissão de Retirada"
+
+#~ msgid "Seller's Summary"
+#~ msgstr "Resumo de Vendedores"
+
+#~ msgid "Send on your website"
+#~ msgstr "Enviar para o seu Website"
+
+#~ msgid "Simplified lots for adjudication"
+#~ msgstr "Lotes Simplificados para adjudicação"
+
+#~ msgid "Sum Adjustication"
+#~ msgstr "Soma da Adjudicação"
+
+#~ msgid "Antique/Porcelain, Ceramics, Glassmaking, ..."
+#~ msgstr "Antiguidade/Porcelanas/Cerâmicas/Vidreiros"
+
+#~ msgid "Object Reference"
+#~ msgstr "Referência do Objecto"
+
+#~ msgid "Cont. Art/Shows"
+#~ msgstr "Cont. Arte/Shows"
+
+#~ msgid "Unsold Objects"
+#~ msgstr "Objectos não Vendidos"
+
+#~ msgid "Avg Adj."
+#~ msgstr "Avg Adj."
+
+#~ msgid "auction.deposit.cost"
+#~ msgstr "auction.deposit.cost"
+
+#~ msgid "Object Inventory"
+#~ msgstr "Inventário do Objecto"
+
+#~ msgid "Antique/Art from the Ivory Coast/African Arts"
+#~ msgstr "Antiguidade/Arte a partir da Costa de Marfim/Artes Africanas"
+
+#~ msgid "Lot Category"
+#~ msgstr "Categoria de Lote"
+
+#~ msgid "Total"
+#~ msgstr "Total"
+
+#~ msgid "Send to website"
+#~ msgstr "Enviar para o Website"
+
+#~ msgid "Old Auction Dates"
+#~ msgstr "Datas Antigas de Leilões"
+
+#~ msgid "Antique/Engravings"
+#~ msgstr "Antiguidade/Gravuras"
+
+#~ msgid "First Number"
+#~ msgstr "Primeiro Número"
+
+#~ msgid ""
+#~ "Warning, this will erase the object adjudication price and its buyer !"
+#~ msgstr ""
+#~ "Aviso, isto vai apagar o preço de adjudicção do objecto e do seu comprador !"
+
+#~ msgid "Bid information"
+#~ msgstr "Informação da Oferta"
+
+#~ msgid "Antique/Musical Instruments"
+#~ msgstr "Antiguidade/Instrumentos Musicais"
+
+#~ msgid "Antique/Graphic Arts"
+#~ msgstr "Antiguidade/Artes Gráficas"
+
+#~ msgid "Antique/Oriental Arts"
+#~ msgstr "Antiguidade/Artes Orientais"
+
+#~ msgid "Sum of adjudication"
+#~ msgstr "Soma de Adjudicação"
+
+#~ msgid "Unmark as taken away"
+#~ msgstr "Desmarcar como retirados"
+
+#~ msgid "Lot Number"
+#~ msgstr "Número de Lote"
+
+#~ msgid "Employee"
+#~ msgstr "Funcionário"
+
+#~ msgid "Report deposit border"
+#~ msgstr "Relatório de deposito limite"
+
+#~ msgid "Auction report"
+#~ msgstr "Relatório do Leilão"
+
+#~ msgid "auction.lot.category"
+#~ msgstr "auction.lot.category"
+
+#~ msgid "Antique/Collectible & art objects"
+#~ msgstr "Antiguidade/Coleção&objectos de arte"
+
+#~ msgid "Buyer's auction"
+#~ msgstr "Leilão de Compradores"
+
+#~ msgid "Antique/Furnitures"
+#~ msgstr "Antiguidade/Móveis"
+
+#~ msgid "Unplanned Objects"
+#~ msgstr "Objectos não Planeados"
+
+#~ msgid "Numerotation (automatic)"
+#~ msgstr "Numeração (automatica)"
+
+#~ msgid "Amount to paid"
+#~ msgstr "Montante para pagar"
+
+#~ msgid "No of buyers"
+#~ msgstr "Nº de compradores"
+
+#~ msgid "Avg adjudication"
+#~ msgstr "Avg de Adjudicação"
+
+#~ msgid "Next Auction Dates"
+#~ msgstr "Próximas Datas de Leilão"
+
+#~ msgid "Report Sign In/Out"
+#~ msgstr "Relatória de Entrada/Saída"
+
+#~ msgid "Objects to sell"
+#~ msgstr "Objectos para vender"
+
+#~ msgid "Short Description"
+#~ msgstr "Pequena Descrição"
+
+#~ msgid "Employees"
+#~ msgstr "Funcionários"
+
+#~ msgid "Antique/Clocks and watches"
+#~ msgstr "Antiguidade/Relógio e relógios"
+
+#~ msgid "Antique/Scientific Instruments"
+#~ msgstr "Antiguidade/ Instrumentos Ciêntificos"
+
+#~ msgid "Confirmation enable taken away"
+#~ msgstr "Confirmar a permissão de retirada"
+
+#~ msgid "Sum of adjustication"
+#~ msgstr "Soma de adjudicação"
+
+#~ msgid "Antique/Wine"
+#~ msgstr "Antiguidade/Vinhos"
+
+#~ msgid "Antique/African Arts"
+#~ msgstr "Antiguidade/Artes Africanas"
+
+#~ msgid "Antique/Posters"
+#~ msgstr "Antiguidade/Cartazes"
+
+#~ msgid "Create Invoices For Seller"
+#~ msgstr "Criar faturas para o vendedor"
+
+#~ msgid "Invalid model name in the action definition."
+#~ msgstr "Nome de modelo inválido na definição da ação"
+
+#~ msgid "Error: Sign in (resp. Sign out) must follow Sign out (resp. Sign in)"
+#~ msgstr "Erro: Entrada (Saída) deve ser seguida de Saída (Entrada)"
+
+#~ msgid "Error ! You can not create recursive accounts."
+#~ msgstr "Erro! Não pode criar contas recursivamente."
+
+#~ msgid "Invalid XML for View Architecture!"
+#~ msgstr "XML inválido para a arquitetura da vista"
+
+#~ msgid "Error: Invalid ean code"
+#~ msgstr "Erro: Código EAN inválido"
+
+#~ msgid ""
+#~ "The Object name must start with x_ and not contain any special character !"
+#~ msgstr ""
+#~ "O nome do Objeto deve começar com x_ e não pode conter nenhum caracter "
+#~ "especial !"
+
+#~ msgid "Create Invoices For Buyer"
+#~ msgstr "Criar faturas para o comprador"
+
+#~ msgid "Auction Reporting on seller view"
+#~ msgstr "Relatório do Leilão na vista do vendedor"
+
+#~ msgid "Error: UOS must be in a different category than the UOM"
+#~ msgstr "Erro: UdV deve estar numa categoria diferente da UdM"
+
+#~ msgid "Auction buyer reporting form view"
+#~ msgstr "Formulário do comprador do Leilão"
+
+#~ msgid "Auction reporting2 form view"
+#~ msgstr "Formulário de relatorios do Leilão"
diff --git a/addons/auth_openid/i18n/gu.po b/addons/auth_openid/i18n/gu.po
new file mode 100644
index 00000000000..20022b1dfa6
--- /dev/null
+++ b/addons/auth_openid/i18n/gu.po
@@ -0,0 +1,112 @@
+# Gujarati translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 01:37+0100\n"
+"PO-Revision-Date: 2012-05-31 11:08+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Gujarati \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
+
+#. #-#-#-#-# auth_openid.pot (OpenERP Server 6.1rc1) #-#-#-#-#
+#. module: auth_openid
+#. #-#-#-#-# auth_openid.pot.web (PROJECT VERSION) #-#-#-#-#
+#. openerp-web
+#: view:res.users:0
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:12
+msgid "OpenID"
+msgstr ""
+
+#. #-#-#-#-# auth_openid.pot (OpenERP Server 6.1rc1) #-#-#-#-#
+#. module: auth_openid
+#. #-#-#-#-# auth_openid.pot.web (PROJECT VERSION) #-#-#-#-#
+#. openerp-web
+#: field:res.users,openid_url:0
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:47
+msgid "OpenID URL"
+msgstr ""
+
+#. module: auth_openid
+#: help:res.users,openid_email:0
+msgid "Used for disambiguation in case of a shared OpenID URL"
+msgstr ""
+
+#. module: auth_openid
+#: sql_constraint:res.users:0
+msgid "You can not have two users with the same login !"
+msgstr "તમે બે વપરાશકર્તાઓને એક જ લોગીન ન કરી શકો!"
+
+#. module: auth_openid
+#: field:res.users,openid_email:0
+msgid "OpenID Email"
+msgstr ""
+
+#. module: auth_openid
+#: constraint:res.users:0
+msgid "The chosen company is not in the allowed companies for this user"
+msgstr "પસંદ કરેલ કંપની માન્ય કંપનીઓમાં આ વપરાશકર્તા માટે નથી"
+
+#. module: auth_openid
+#: field:res.users,openid_key:0
+msgid "OpenID Key"
+msgstr ""
+
+#. module: auth_openid
+#: model:ir.model,name:auth_openid.model_res_users
+msgid "res.users"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:8
+msgid "Password"
+msgstr "પાસવર્ડ"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:9
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:10
+msgid "Google"
+msgstr "ગુગલ"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:10
+msgid "Google Apps"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:11
+msgid "Launchpad"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:20
+msgid "Google Apps Domain:"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:24
+msgid "Username:"
+msgstr "વપરાશકર્તાનું નામ:"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:28
+msgid "OpenID URL:"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:35
+msgid "Google Apps Domain"
+msgstr ""
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:41
+msgid "Username"
+msgstr "વપરાશકર્તા નામ"
diff --git a/addons/auth_openid/i18n/sv.po b/addons/auth_openid/i18n/sv.po
new file mode 100644
index 00000000000..c89dcfe9d9e
--- /dev/null
+++ b/addons/auth_openid/i18n/sv.po
@@ -0,0 +1,114 @@
+# Swedish translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 01:37+0100\n"
+"PO-Revision-Date: 2012-06-04 10:13+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Swedish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-06-05 04:54+0000\n"
+"X-Generator: Launchpad (build 15353)\n"
+
+#. #-#-#-#-# auth_openid.pot (OpenERP Server 6.1rc1) #-#-#-#-#
+#. module: auth_openid
+#. #-#-#-#-# auth_openid.pot.web (PROJECT VERSION) #-#-#-#-#
+#. openerp-web
+#: view:res.users:0
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:12
+msgid "OpenID"
+msgstr "OpenID"
+
+#. #-#-#-#-# auth_openid.pot (OpenERP Server 6.1rc1) #-#-#-#-#
+#. module: auth_openid
+#. #-#-#-#-# auth_openid.pot.web (PROJECT VERSION) #-#-#-#-#
+#. openerp-web
+#: field:res.users,openid_url:0
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:47
+msgid "OpenID URL"
+msgstr "OpenID URL"
+
+#. module: auth_openid
+#: help:res.users,openid_email:0
+msgid "Used for disambiguation in case of a shared OpenID URL"
+msgstr ""
+"Används för att skilja mellan olika användare i fallet med en delad OpenID-"
+"URL"
+
+#. module: auth_openid
+#: sql_constraint:res.users:0
+msgid "You can not have two users with the same login !"
+msgstr "Du kan inte ha två användare med samma användarid !"
+
+#. module: auth_openid
+#: field:res.users,openid_email:0
+msgid "OpenID Email"
+msgstr "OpenID-epost"
+
+#. module: auth_openid
+#: constraint:res.users:0
+msgid "The chosen company is not in the allowed companies for this user"
+msgstr "Detta bolag är inte tillåtet för den här användaren"
+
+#. module: auth_openid
+#: field:res.users,openid_key:0
+msgid "OpenID Key"
+msgstr "OpenID Nyckel"
+
+#. module: auth_openid
+#: model:ir.model,name:auth_openid.model_res_users
+msgid "res.users"
+msgstr "res.users"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:8
+msgid "Password"
+msgstr "Lösenord"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:9
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:10
+msgid "Google"
+msgstr "Google"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:10
+msgid "Google Apps"
+msgstr "Google Apps"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:11
+msgid "Launchpad"
+msgstr "Launchpad"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:20
+msgid "Google Apps Domain:"
+msgstr "Google Apps Domän:"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:24
+msgid "Username:"
+msgstr "Användarnamn:"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:28
+msgid "OpenID URL:"
+msgstr "OpenID URL:"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:35
+msgid "Google Apps Domain"
+msgstr "Google Apps Domän"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/auth_openid/static/src/xml/auth_openid.xml:41
+msgid "Username"
+msgstr "Användarnamn"
diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py
index d7d6501926f..bbededc8eaf 100644
--- a/addons/base_calendar/base_calendar.py
+++ b/addons/base_calendar/base_calendar.py
@@ -814,7 +814,6 @@ class calendar_alarm(osv.osv):
context = {}
mail_message = self.pool.get('mail.message')
current_datetime = datetime.now()
- request_obj = self.pool.get('res.request')
alarm_ids = self.search(cr, uid, [('state', '!=', 'done')], context=context)
mail_to = []
@@ -854,26 +853,28 @@ class calendar_alarm(osv.osv):
ref = alarm.model_id.model + ',' + str(alarm.res_id)
# search for alreay sent requests
- if request_obj.search(cr, uid, [('trigger_date', '=', r_date), ('ref_doc1', '=', ref)], context=context):
- continue
+ #if request_obj.search(cr, uid, [('trigger_date', '=', r_date), ('ref_doc1', '=', ref)], context=context):
+ #continue
- if alarm.action == 'display':
- value = {
- 'name': alarm.name,
- 'act_from': alarm.user_id.id,
- 'act_to': alarm.user_id.id,
- 'body': alarm.description,
- 'trigger_date': r_date,
- 'ref_doc1': ref
- }
- request_id = request_obj.create(cr, uid, value)
- request_ids = [request_id]
- for attendee in res_obj.attendee_ids:
- if attendee.user_id:
- value['act_to'] = attendee.user_id.id
- request_id = request_obj.create(cr, uid, value)
- request_ids.append(request_id)
- request_obj.request_send(cr, uid, request_ids)
+ # Deactivated because of the removing of res.request
+ # TODO: when cleaning calendar module, re-add this in a new mechanism
+ #if alarm.action == 'display':
+ #value = {
+ #'name': alarm.name,
+ #'act_from': alarm.user_id.id,
+ #'act_to': alarm.user_id.id,
+ #'body': alarm.description,
+ #'trigger_date': r_date,
+ #'ref_doc1': ref
+ #}
+ #request_id = request_obj.create(cr, uid, value)
+ #request_ids = [request_id]
+ #for attendee in res_obj.attendee_ids:
+ #if attendee.user_id:
+ #value['act_to'] = attendee.user_id.id
+ #request_id = request_obj.create(cr, uid, value)
+ #request_ids.append(request_id)
+ #request_obj.request_send(cr, uid, request_ids)
if alarm.action == 'email':
sub = '[Openobject Reminder] %s' % (alarm.name)
diff --git a/addons/base_calendar/base_calendar_view.xml b/addons/base_calendar/base_calendar_view.xml
index 6d98e936821..e5e45c07d61 100644
--- a/addons/base_calendar/base_calendar_view.xml
+++ b/addons/base_calendar/base_calendar_view.xml
@@ -9,7 +9,7 @@
form
-
+
-
-
-
-
-
+
+
@@ -85,21 +82,6 @@
-
-
-
-
@@ -229,7 +211,7 @@
form
-
+
-
-
-
-
-
+
+
form
-
+
-
+
diff --git a/addons/base_setup/i18n/gu.po b/addons/base_setup/i18n/gu.po
new file mode 100644
index 00000000000..3563c7da2ff
--- /dev/null
+++ b/addons/base_setup/i18n/gu.po
@@ -0,0 +1,282 @@
+# Gujarati translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-05-31 11:08+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Gujarati \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-06-01 05:32+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
+
+#. module: base_setup
+#: field:user.preferences.config,menu_tips:0
+msgid "Display Tips"
+msgstr ""
+
+#. module: base_setup
+#: selection:base.setup.terminology,partner:0
+msgid "Guest"
+msgstr "અતિથિ"
+
+#. module: base_setup
+#: model:ir.model,name:base_setup.model_product_installer
+msgid "product.installer"
+msgstr ""
+
+#. module: base_setup
+#: selection:product.installer,customers:0
+msgid "Create"
+msgstr "બનાવો"
+
+#. module: base_setup
+#: selection:base.setup.terminology,partner:0
+msgid "Member"
+msgstr "સભ્ય"
+
+#. module: base_setup
+#: field:migrade.application.installer.modules,sync_google_contact:0
+msgid "Sync Google Contact"
+msgstr ""
+
+#. module: base_setup
+#: help:user.preferences.config,context_tz:0
+msgid ""
+"Set default for new user's timezone, used to perform timezone conversions "
+"between the server and the client."
+msgstr ""
+
+#. module: base_setup
+#: selection:product.installer,customers:0
+msgid "Import"
+msgstr "આયાત કરો"
+
+#. module: base_setup
+#: selection:base.setup.terminology,partner:0
+msgid "Donor"
+msgstr ""
+
+#. module: base_setup
+#: model:ir.actions.act_window,name:base_setup.action_base_setup_company
+msgid "Set Company Header and Footer"
+msgstr ""
+
+#. module: base_setup
+#: model:ir.actions.act_window,help:base_setup.action_base_setup_company
+msgid ""
+"Fill in your company data (address, logo, bank accounts) so that it's "
+"printed on your reports. You can click on the button 'Preview Header' in "
+"order to check the header/footer of PDF documents."
+msgstr ""
+
+#. module: base_setup
+#: field:product.installer,customers:0
+msgid "Customers"
+msgstr "ગ્રાહકો"
+
+#. module: base_setup
+#: selection:user.preferences.config,view:0
+msgid "Extended"
+msgstr "વિસ્તૃત"
+
+#. module: base_setup
+#: selection:base.setup.terminology,partner:0
+msgid "Patient"
+msgstr ""
+
+#. module: base_setup
+#: model:ir.actions.act_window,help:base_setup.action_import_create_installer
+msgid ""
+"Create or Import Customers and their contacts manually from this form or "
+"you can import your existing partners by CSV spreadsheet from \"Import "
+"Data\" wizard"
+msgstr ""
+
+#. module: base_setup
+#: view:user.preferences.config:0
+msgid "Define Users's Preferences"
+msgstr ""
+
+#. module: base_setup
+#: model:ir.actions.act_window,name:base_setup.action_user_preferences_config_form
+msgid "Define default users preferences"
+msgstr ""
+
+#. module: base_setup
+#: help:migrade.application.installer.modules,import_saleforce:0
+msgid "For Import Saleforce"
+msgstr ""
+
+#. module: base_setup
+#: help:migrade.application.installer.modules,quickbooks_ippids:0
+msgid "For Quickbooks Ippids"
+msgstr ""
+
+#. module: base_setup
+#: help:user.preferences.config,view:0
+msgid ""
+"If you use OpenERP for the first time we strongly advise you to select the "
+"simplified interface, which has less features but is easier. You can always "
+"switch later from the user preferences."
+msgstr ""
+
+#. module: base_setup
+#: view:base.setup.terminology:0
+#: view:user.preferences.config:0
+msgid "res_config_contents"
+msgstr ""
+
+#. module: base_setup
+#: field:user.preferences.config,view:0
+msgid "Interface"
+msgstr "ઇન્ટરફેસ"
+
+#. module: base_setup
+#: model:ir.model,name:base_setup.model_migrade_application_installer_modules
+msgid "migrade.application.installer.modules"
+msgstr ""
+
+#. module: base_setup
+#: view:base.setup.terminology:0
+msgid ""
+"You can use this wizard to change the terminologies for customers in the "
+"whole application."
+msgstr ""
+
+#. module: base_setup
+#: selection:base.setup.terminology,partner:0
+msgid "Tenant"
+msgstr ""
+
+#. module: base_setup
+#: selection:base.setup.terminology,partner:0
+msgid "Customer"
+msgstr ""
+
+#. module: base_setup
+#: field:user.preferences.config,context_lang:0
+msgid "Language"
+msgstr "ભાષા"
+
+#. module: base_setup
+#: help:user.preferences.config,context_lang:0
+msgid ""
+"Sets default language for the all user interface, when UI translations are "
+"available. If you want to Add new Language, you can add it from 'Load an "
+"Official Translation' wizard from 'Administration' menu."
+msgstr ""
+
+#. module: base_setup
+#: view:user.preferences.config:0
+msgid ""
+"This will set the default preferences for new users and update all existing "
+"ones. Afterwards, users are free to change those values on their own user "
+"preference form."
+msgstr ""
+
+#. module: base_setup
+#: field:base.setup.terminology,partner:0
+msgid "How do you call a Customer"
+msgstr ""
+
+#. module: base_setup
+#: field:migrade.application.installer.modules,quickbooks_ippids:0
+msgid "Quickbooks Ippids"
+msgstr ""
+
+#. module: base_setup
+#: selection:base.setup.terminology,partner:0
+msgid "Client"
+msgstr ""
+
+#. module: base_setup
+#: field:migrade.application.installer.modules,import_saleforce:0
+msgid "Import Saleforce"
+msgstr ""
+
+#. module: base_setup
+#: field:user.preferences.config,context_tz:0
+msgid "Timezone"
+msgstr "ટાઈમઝોન"
+
+#. module: base_setup
+#: model:ir.actions.act_window,name:base_setup.action_partner_terminology_config_form
+msgid "Use another word to say \"Customer\""
+msgstr ""
+
+#. module: base_setup
+#: model:ir.model,name:base_setup.model_base_setup_terminology
+msgid "base.setup.terminology"
+msgstr ""
+
+#. module: base_setup
+#: help:user.preferences.config,menu_tips:0
+msgid ""
+"Check out this box if you want to always display tips on each menu action"
+msgstr ""
+
+#. module: base_setup
+#: field:base.setup.terminology,config_logo:0
+#: field:migrade.application.installer.modules,config_logo:0
+#: field:product.installer,config_logo:0
+#: field:user.preferences.config,config_logo:0
+msgid "Image"
+msgstr "ચિત્ર"
+
+#. module: base_setup
+#: model:ir.model,name:base_setup.model_user_preferences_config
+msgid "user.preferences.config"
+msgstr ""
+
+#. module: base_setup
+#: model:ir.actions.act_window,name:base_setup.action_config_access_other_user
+msgid "Create Additional Users"
+msgstr ""
+
+#. module: base_setup
+#: model:ir.actions.act_window,name:base_setup.action_import_create_installer
+msgid "Create or Import Customers"
+msgstr ""
+
+#. module: base_setup
+#: field:migrade.application.installer.modules,import_sugarcrm:0
+msgid "Import Sugarcrm"
+msgstr ""
+
+#. module: base_setup
+#: help:product.installer,customers:0
+msgid "Import or create customers"
+msgstr ""
+
+#. module: base_setup
+#: selection:user.preferences.config,view:0
+msgid "Simplified"
+msgstr "સરળ"
+
+#. module: base_setup
+#: help:migrade.application.installer.modules,import_sugarcrm:0
+msgid "For Import Sugarcrm"
+msgstr ""
+
+#. module: base_setup
+#: selection:base.setup.terminology,partner:0
+msgid "Partner"
+msgstr "ભાગીદાર"
+
+#. module: base_setup
+#: view:base.setup.terminology:0
+msgid "Specify Your Terminology"
+msgstr ""
+
+#. module: base_setup
+#: help:migrade.application.installer.modules,sync_google_contact:0
+msgid "For Sync Google Contact"
+msgstr ""
diff --git a/addons/base_setup/res_config_view.xml b/addons/base_setup/res_config_view.xml
index 0281263397a..ccf231924fe 100644
--- a/addons/base_setup/res_config_view.xml
+++ b/addons/base_setup/res_config_view.xml
@@ -7,10 +7,10 @@
form
-
+
-
+
diff --git a/addons/base_status/__init__.py b/addons/base_status/__init__.py
new file mode 100644
index 00000000000..e4107f90a37
--- /dev/null
+++ b/addons/base_status/__init__.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2012-today OpenERP SA ()
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+import base_state
+import base_stage
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/base_status/__openerp__.py b/addons/base_status/__openerp__.py
new file mode 100644
index 00000000000..fcb8f54a7ee
--- /dev/null
+++ b/addons/base_status/__openerp__.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2012-today OpenERP SA ()
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+{
+ 'name': 'State/Stage Management',
+ 'version': '1.0',
+ 'category': 'Hidden',
+ 'description': """
+This module handles state and stage. It is derived from the crm_base and
+crm_case classes from crm.
+
+ * ``base_state``: state management
+ * ``base_stage``: stage management
+ """,
+ 'author': 'OpenERP SA',
+ 'website': 'http://www.openerp.com',
+ 'depends': ['base'],
+ 'init_xml': [],
+ 'update_xml': [],
+ 'demo_xml': [],
+ 'installable': True,
+ 'auto_install': False,
+}
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/base_status/base_stage.py b/addons/base_status/base_stage.py
new file mode 100644
index 00000000000..cc6dda19cdf
--- /dev/null
+++ b/addons/base_status/base_stage.py
@@ -0,0 +1,432 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-today OpenERP SA ()
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from osv import fields
+from tools.translate import _
+
+class base_stage(object):
+ """ Base utility mixin class for objects willing to manage their stages.
+ Object that inherit from this class should inherit from mailgate.thread
+ to have access to the mail gateway, as well as Chatter. Objects
+ subclassing this class should define the following colums:
+ - ``date_open`` (datetime field)
+ - ``date_closed`` (datetime field)
+ - ``user_id`` (many2one to res.users)
+ - ``partner_id`` (many2one to res.partner)
+ - ``stage_id`` (many2one to a stage definition model)
+ - ``state`` (selection field, related to the stage_id.state)
+ """
+
+ def _get_default_partner(self, cr, uid, context=None):
+ """ Gives id of partner for current user
+ :param context: if portal not in context returns False
+ """
+ if context is None:
+ context = {}
+ if not context or not context.get('portal'):
+ return False
+ user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+ if hasattr(user, 'partner_address_id') and user.partner_address_id:
+ return user.partner_address_id
+ return user.company_id.partner_id.id
+
+ def _get_default_email(self, cr, uid, context=None):
+ """ Gives default email address for current user
+ :param context: if portal not in context returns False
+ """
+ if context is None:
+ context = {}
+ if not context or not context.get('portal'):
+ return False
+ user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+ return user.user_email
+
+ def _get_default_user(self, cr, uid, context=None):
+ """ Gives current user id
+ :param context: if portal not in context returns False
+ """
+ if context is None:
+ context = {}
+ if not context or not context.get('portal'):
+ return False
+ return uid
+
+ def onchange_partner_address_id(self, cr, uid, ids, add, email=False):
+ """ This function returns value of partner email based on Partner Address
+ :param add: Id of Partner's address
+ :param email: Partner's email ID
+ """
+ data = {'value': {'email_from': False, 'phone':False}}
+ if add:
+ address = self.pool.get('res.partner').browse(cr, uid, add)
+ data['value'] = {'email_from': address and address.email or False ,
+ 'phone': address and address.phone or False}
+ if 'phone' not in self._columns:
+ del data['value']['phone']
+ return data
+
+ def onchange_partner_id(self, cr, uid, ids, part, email=False):
+ """ This function returns value of partner address based on partner
+ :param part: Partner's id
+ :param email: Partner's email ID
+ """
+ data={}
+ if part:
+ addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact'])
+ data.update(self.onchange_partner_address_id(cr, uid, ids, addr['contact'])['value'])
+ return {'value': data}
+
+ def _get_default_section_id(self, cr, uid, context=None):
+ """ Gives default section """
+ return False
+
+ def _get_default_stage_id(self, cr, uid, context=None):
+ """ Gives default stage_id """
+ return self.stage_find(cr, uid, [], None, [('state', '=', 'draft')], context=context)
+
+ def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None):
+ """ Find stage, with a given (optional) domain on the search,
+ ordered by the order parameter. If several stages match the
+ search criterions, the first one will be returned, according
+ to the requested search order.
+ This method is meant to be overriden by subclasses. That way
+ specific behaviors can be achieved for every class inheriting
+ from base_stage.
+
+ :param cases: browse_record of cases
+ :param section_id: section limitating the search, given for
+ a generic search (for example default search).
+ A section models concepts such as Sales team
+ (for CRM), ou departments (for HR).
+ :param domain: a domain on the search of stages
+ :param order: order of the search
+ """
+ return False
+
+ def stage_set_with_state_name(self, cr, uid, cases, state_name, context=None):
+ """ Set a new stage, with a state_name instead of a stage_id
+ :param cases: browse_record of cases
+ """
+ if isinstance(cases, (int, long)):
+ cases = self.browse(cr, uid, cases, context=context)
+ for case in cases:
+ stage_id = self.stage_find(cr, uid, [case], None, [('state', '=', state_name)], context=context)
+ if stage_id:
+ self.stage_set(cr, uid, [case.id], stage_id, context=context)
+ return True
+
+ def stage_set(self, cr, uid, ids, stage_id, context=None):
+ """ Set the new stage. This methods is the right method to call
+ when changing states. It also checks whether an onchange is
+ defined, and execute it.
+ """
+ value = {}
+ if hasattr(self, 'onchange_stage_id'):
+ value = self.onchange_stage_id(cr, uid, ids, stage_id, context=context)['value']
+ value['stage_id'] = stage_id
+ self.stage_set_send_note(cr, uid, ids, stage_id, context=context)
+ return self.write(cr, uid, ids, value, context=context)
+
+ def stage_change(self, cr, uid, ids, op, order, context=None):
+ """ Change the stage and take the next one, based on a condition
+ writen for the 'sequence' field and an operator. This methods
+ checks whether the case has a current stage, and takes its
+ sequence. Otherwise, a default 0 sequence is chosen and this
+ method will therefore choose the first available stage.
+ For example if op is '>' and current stage has a sequence of
+ 10, this will call stage_find, with [('sequence', '>', '10')].
+ """
+ for case in self.browse(cr, uid, ids, context=context):
+ seq = 0
+ if case.stage_id:
+ seq = case.stage_id.sequence or 0
+ section_id = None
+ next_stage_id = self.stage_find(cr, uid, [case], None, [('sequence', op, seq)],order, context=context)
+ if next_stage_id:
+ return self.stage_set(cr, uid, [case.id], next_stage_id, context=context)
+ return False
+
+ def stage_next(self, cr, uid, ids, context=None):
+ """ This function computes next stage for case from its current stage
+ using available stage for that case type
+ """
+ return self.stage_change(cr, uid, ids, '>','sequence', context)
+
+ def stage_previous(self, cr, uid, ids, context=None):
+ """ This function computes previous stage for case from its current
+ stage using available stage for that case type
+ """
+ return self.stage_change(cr, uid, ids, '<', 'sequence desc', context)
+
+ def copy(self, cr, uid, id, default=None, context=None):
+ """ Overrides orm copy method to avoid copying messages,
+ as well as date_closed and date_open columns if they
+ exist."""
+ if default is None:
+ default = {}
+
+ if hasattr(self, '_columns'):
+ if self._columns.get('date_closed'):
+ default.update({ 'date_closed': False, })
+ if self._columns.get('date_open'):
+ default.update({ 'date_open': False })
+ return super(base_stage, self).copy(cr, uid, id, default, context=context)
+
+ def case_escalate(self, cr, uid, ids, context=None):
+ """ Escalates case to parent level """
+ cases = self.browse(cr, uid, ids, context=context)
+ cases[0].state # fill browse record cache, for _action having old and new values
+ for case in cases:
+ data = {'active': True}
+ if case.section_id.parent_id:
+ data['section_id'] = case.section_id.parent_id.id
+ if case.section_id.parent_id.change_responsible:
+ if case.section_id.parent_id.user_id:
+ data['user_id'] = case.section_id.parent_id.user_id.id
+ else:
+ raise osv.except_osv(_('Error !'), _('You can not escalate, you are already at the top level regarding your sales-team category.'))
+ self.write(cr, uid, [case.id], data, context=context)
+ case.case_escalate_send_note(case.section_id.parent_id, context=context)
+ cases = self.browse(cr, uid, ids, context=context)
+ self._action(cr, uid, cases, 'escalate', context=context)
+ return True
+
+ def case_open(self, cr, uid, ids, context=None):
+ """ Opens case """
+ cases = self.browse(cr, uid, ids, context=context)
+ for case in cases:
+ data = {'active': True}
+ if case.stage_id and case.stage_id.state == 'draft':
+ data['date_open'] = fields.datetime.now()
+ if not case.user_id:
+ data['user_id'] = uid
+ self.case_set(cr, uid, [case.id], 'open', data, context=context)
+ self.case_open_send_note(cr, uid, [case.id], context=context)
+ return True
+
+ def case_close(self, cr, uid, ids, context=None):
+ """ Closes case """
+ self.case_set(cr, uid, ids, 'done', {'active': True, 'date_closed': fields.datetime.now()}, context=context)
+ self.case_close_send_note(cr, uid, ids, context=context)
+ return True
+
+ def case_cancel(self, cr, uid, ids, context=None):
+ """ Cancels case """
+ self.case_set(cr, uid, ids, 'cancel', {'active': True}, context=context)
+ self.case_cancel_send_note(cr, uid, ids, context=context)
+ return True
+
+ def case_pending(self, cr, uid, ids, context=None):
+ """ Set case as pending """
+ self.case_set(cr, uid, ids, 'pending', {'active': True}, context=context)
+ self.case_pending_send_note(cr, uid, ids, context=context)
+ return True
+
+ def case_reset(self, cr, uid, ids, context=None):
+ """ Resets case as draft """
+ self.case_set(cr, uid, ids, 'draft', {'active': True}, context=context)
+ self.case_reset_send_note(cr, uid, ids, context=context)
+ return True
+
+ def case_set(self, cr, uid, ids, new_state_name=None, values_to_update=None, new_stage_id=None, context=None):
+ """ Generic method for setting case. This methods wraps the update
+ of the record, as well as call to _action and browse_record
+ case setting to fill the cache.
+
+ :params new_state_name: the new state of the record; this method
+ will call ``stage_set_with_state_name``
+ that will find the stage matching the
+ new state, using the ``stage_find`` method.
+ :params new_stage_id: alternatively, you may directly give the
+ new stage of the record
+ :params state_name: the new value of the state, such as
+ 'draft' or 'close'.
+ :params update_values: values that will be added with the state
+ update when writing values to the record.
+ """
+ cases = self.browse(cr, uid, ids, context=context)
+ cases[0].state # fill browse record cache, for _action having old and new values
+ # 1. update the stage
+ if new_state_name:
+ self.stage_set_with_state_name(cr, uid, cases, new_state_name, context=context)
+ elif not (new_stage_id is None):
+ self.stage_set(cr, uid, ids, new_stage_id, context=context)
+ # 2. update values
+ if values_to_update:
+ self.write(cr, uid, ids, values_to_update, context=context)
+ # 3. call _action for base action rule
+ if new_state_name:
+ self._action(cr, uid, cases, new_state_name, context=context)
+ elif not (new_stage_id is None):
+ new_state_name = self.read(cr, uid, ids, ['state'], context=context)[0]['state']
+ self._action(cr, uid, cases, new_state_name, context=context)
+ return True
+
+ def _action(self, cr, uid, cases, state_to, scrit=None, context=None):
+ if context is None:
+ context = {}
+ context['state_to'] = state_to
+ rule_obj = self.pool.get('base.action.rule')
+ if not rule_obj:
+ return True
+ model_obj = self.pool.get('ir.model')
+ model_ids = model_obj.search(cr, uid, [('model','=',self._name)], context=context)
+ rule_ids = rule_obj.search(cr, uid, [('model_id','=',model_ids[0])], context=context)
+ return rule_obj._action(cr, uid, rule_ids, cases, scrit=scrit, context=context)
+
+ def remind_partner(self, cr, uid, ids, context=None, attach=False):
+ return self.remind_user(cr, uid, ids, context, attach,
+ destination=False)
+
+ def remind_user(self, cr, uid, ids, context=None, attach=False, destination=True):
+ mail_message = self.pool.get('mail.message')
+ for case in self.browse(cr, uid, ids, context=context):
+ if not destination and not case.email_from:
+ return False
+ if not case.user_id.user_email:
+ return False
+ if destination and case.section_id.user_id:
+ case_email = case.section_id.user_id.user_email
+ else:
+ case_email = case.user_id.user_email
+
+ src = case_email
+ dest = case.user_id.user_email or ""
+ body = case.description or ""
+ for message in case.message_ids:
+ if message.email_from and message.body_text:
+ body = message.body_text
+ break
+
+ if not destination:
+ src, dest = dest, case.email_from
+ if body and case.user_id.signature:
+ if body:
+ body += '\n\n%s' % (case.user_id.signature)
+ else:
+ body = '\n\n%s' % (case.user_id.signature)
+
+ body = self.format_body(body)
+
+ attach_to_send = {}
+
+ if attach:
+ attach_ids = self.pool.get('ir.attachment').search(cr, uid, [('res_model', '=', self._name), ('res_id', '=', case.id)])
+ attach_to_send = self.pool.get('ir.attachment').read(cr, uid, attach_ids, ['datas_fname', 'datas'])
+ attach_to_send = dict(map(lambda x: (x['datas_fname'], base64.decodestring(x['datas'])), attach_to_send))
+
+ # Send an email
+ subject = "Reminder: [%s] %s" % (str(case.id), case.name, )
+ mail_message.schedule_with_attach(cr, uid,
+ src,
+ [dest],
+ subject,
+ body,
+ model=self._name,
+ reply_to=case.section_id.reply_to,
+ res_id=case.id,
+ attachments=attach_to_send,
+ context=context
+ )
+ return True
+
+ def _check(self, cr, uid, ids=False, context=None):
+ """ Function called by the scheduler to process cases for date actions.
+ Must be overriden by inheriting classes.
+ """
+ return True
+
+ def format_body(self, body):
+ return self.pool.get('base.action.rule').format_body(body)
+
+ def format_mail(self, obj, body):
+ return self.pool.get('base.action.rule').format_mail(obj, body)
+
+ def message_thread_followers(self, cr, uid, ids, context=None):
+ res = {}
+ for case in self.browse(cr, uid, ids, context=context):
+ l=[]
+ if case.email_cc:
+ l.append(case.email_cc)
+ if case.user_id and case.user_id.user_email:
+ l.append(case.user_id.user_email)
+ res[case.id] = l
+ return res
+
+ # ******************************
+ # Notifications
+ # ******************************
+
+ def case_get_note_msg_prefix(self, cr, uid, id, context=None):
+ """ Default prefix for notifications. For example: "%s has been
+ closed.". As several models will inherit from base_stage,
+ this method returns a void string. Class using base_stage
+ will have to override this method to define the prefix they
+ want to display.
+ """
+ return ''
+
+ def stage_set_send_note(self, cr, uid, ids, stage_id, context=None):
+ """ Send a notification when the stage changes. This method has
+ to be overriden, because each document will have its particular
+ behavior and/or stage model (such as project.task.type or
+ crm.case.stage).
+ """
+ return True
+
+ def case_open_send_note(self, cr, uid, ids, context=None):
+ for id in ids:
+ msg = _('%s has been opened.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
+ self.message_append_note(cr, uid, [id], body=msg, context=context)
+ return True
+
+ def case_close_send_note(self, cr, uid, ids, context=None):
+ for id in ids:
+ msg = _('%s has been closed.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
+ self.message_append_note(cr, uid, [id], body=msg, context=context)
+ return True
+
+ def case_cancel_send_note(self, cr, uid, ids, context=None):
+ for id in ids:
+ msg = _('%s has been canceled.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
+ self.message_append_note(cr, uid, [id], body=msg, context=context)
+ return True
+
+ def case_pending_send_note(self, cr, uid, ids, context=None):
+ for id in ids:
+ msg = _('%s is now pending.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
+ self.message_append_note(cr, uid, [id], body=msg, context=context)
+ return True
+
+ def case_reset_send_note(self, cr, uid, ids, context=None):
+ for id in ids:
+ msg = _('%s has been renewed.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
+ self.message_append_note(cr, uid, [id], body=msg, context=context)
+ return True
+
+ def case_escalate_send_note(self, cr, uid, ids, new_section=None, context=None):
+ for id in ids:
+ if new_section:
+ msg = '%s has been escalated to %s.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context), new_section.name)
+ else:
+ msg = '%s has been escalated.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
+ self.message_append_note(cr, uid, [id], 'System Notification', msg, context=context)
+ return True
diff --git a/addons/base_status/base_state.py b/addons/base_status/base_state.py
new file mode 100644
index 00000000000..5baf71a01b6
--- /dev/null
+++ b/addons/base_status/base_state.py
@@ -0,0 +1,194 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-today OpenERP SA ()
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see .
+#
+##############################################################################
+
+from osv import fields
+from tools.translate import _
+
+class base_state(object):
+ """ Base utility mixin class for objects willing to manage their state.
+ Object subclassing this class should define the following colums:
+ - ``date_open`` (datetime field)
+ - ``date_closed`` (datetime field)
+ - ``user_id`` (many2one to res.users)
+ - ``partner_id`` (many2one to res.partner)
+ - ``state`` (selection field)
+ """
+
+ def _get_default_partner(self, cr, uid, context=None):
+ """ Gives id of partner for current user
+ :param context: if portal not in context returns False
+ """
+ if context is None:
+ context = {}
+ if not context or not context.get('portal'):
+ return False
+ user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+ if hasattr(user, 'partner_address_id') and user.partner_address_id:
+ return user.partner_address_id
+ return user.company_id.partner_id.id
+
+ def _get_default_email(self, cr, uid, context=None):
+ """ Gives default email address for current user
+ :param context: if portal not in context returns False
+ """
+ if context is None:
+ context = {}
+ if not context or not context.get('portal'):
+ return False
+ user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+ return user.user_email
+
+ def _get_default_user(self, cr, uid, context=None):
+ """ Gives current user id
+ :param context: if portal not in context returns False
+ """
+ if context is None:
+ context = {}
+ if not context or not context.get('portal'):
+ return False
+ return uid
+
+ def onchange_partner_address_id(self, cr, uid, ids, add, email=False):
+ """ This function returns value of partner email based on Partner Address
+ :param add: Id of Partner's address
+ :param email: Partner's email ID
+ """
+ data = {'value': {'email_from': False, 'phone':False}}
+ if add:
+ address = self.pool.get('res.partner').browse(cr, uid, add)
+ data['value'] = {'email_from': address and address.email or False ,
+ 'phone': address and address.phone or False}
+ if 'phone' not in self._columns:
+ del data['value']['phone']
+ return data
+
+ def onchange_partner_id(self, cr, uid, ids, part, email=False):
+ """ This function returns value of partner address based on partner
+ :param part: Partner's id
+ :param email: Partner's email ID
+ """
+ data={}
+ if part:
+ addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact'])
+ data.update(self.onchange_partner_address_id(cr, uid, ids, addr['contact'])['value'])
+ return {'value': data}
+
+ def case_open(self, cr, uid, ids, context=None):
+ """ Opens case """
+ cases = self.browse(cr, uid, ids, context=context)
+ for case in cases:
+ values = {'active': True}
+ if case.state == 'draft':
+ values['date_open'] = fields.datetime.now()
+ if not case.user_id:
+ values['user_id'] = uid
+ self.case_set(cr, uid, [case.id], 'open', values, context=context)
+ self.case_open_send_note(cr, uid, [case.id], context=context)
+ return True
+
+ def case_close(self, cr, uid, ids, context=None):
+ """ Closes case """
+ self.case_set(cr, uid, ids, 'done', {'date_closed': fields.datetime.now()}, context=context)
+ self.case_close_send_note(cr, uid, ids, context=context)
+ return True
+
+ def case_cancel(self, cr, uid, ids, context=None):
+ """ Cancels case """
+ self.case_set(cr, uid, ids, 'cancel', {'active': True}, context=context)
+ self.case_cancel_send_note(cr, uid, ids, context=context)
+ return True
+
+ def case_pending(self, cr, uid, ids, context=None):
+ """ Sets case as pending """
+ self.case_set(cr, uid, ids, 'pending', {'active': True}, context=context)
+ self.case_pending_send_note(cr, uid, ids, context=context)
+ return True
+
+ def case_reset(self, cr, uid, ids, context=None):
+ """ Resets case as draft """
+ self.case_set(cr, uid, ids, 'draft', {'active': True}, context=context)
+ self.case_reset_send_note(cr, uid, ids, context=context)
+ return True
+
+ def case_set(self, cr, uid, ids, state_name, update_values=None, context=None):
+ """ Generic method for setting case. This methods wraps the update
+ of the record, as well as call to _action and browse_record
+ case setting to fill the cache.
+
+ :params: state_name: the new value of the state, such as
+ 'draft' or 'close'.
+ :params: update_values: values that will be added with the state
+ update when writing values to the record.
+ """
+ cases = self.browse(cr, uid, ids, context=context)
+ cases[0].state # fill browse record cache, for _action having old and new values
+ if update_values is None:
+ update_values = {}
+ update_values['state'] = state_name
+ self.write(cr, uid, ids, update_values, context=context)
+ self._action(cr, uid, cases, state_name, context=context)
+
+ def _action(self, cr, uid, cases, state_to, scrit=None, context=None):
+ if context is None:
+ context = {}
+ context['state_to'] = state_to
+ rule_obj = self.pool.get('base.action.rule')
+ model_obj = self.pool.get('ir.model')
+ model_ids = model_obj.search(cr, uid, [('model','=',self._name)])
+ rule_ids = rule_obj.search(cr, uid, [('model_id','=',model_ids[0])])
+ return rule_obj._action(cr, uid, rule_ids, cases, scrit=scrit, context=context)
+
+ # ******************************
+ # Notifications
+ # ******************************
+
+ def case_get_note_msg_prefix(self, cr, uid, id, context=None):
+ return ''
+
+ def case_open_send_note(self, cr, uid, ids, context=None):
+ for id in ids:
+ msg = _('%s has been opened.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
+ self.message_append_note(cr, uid, [id], body=msg, context=context)
+ return True
+
+ def case_close_send_note(self, cr, uid, ids, context=None):
+ for id in ids:
+ msg = _('%s has been closed.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
+ self.message_append_note(cr, uid, [id], body=msg, context=context)
+ return True
+
+ def case_cancel_send_note(self, cr, uid, ids, context=None):
+ for id in ids:
+ msg = _('%s has been canceled.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
+ self.message_append_note(cr, uid, [id], body=msg, context=context)
+ return True
+
+ def case_pending_send_note(self, cr, uid, ids, context=None):
+ for id in ids:
+ msg = _('%s is now pending.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
+ self.message_append_note(cr, uid, [id], body=msg, context=context)
+ return True
+
+ def case_reset_send_note(self, cr, uid, ids, context=None):
+ for id in ids:
+ msg = _('%s has been renewed.') % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
+ self.message_append_note(cr, uid, [id], body=msg, context=context)
+ return True
diff --git a/addons/base_synchro/__openerp__.py b/addons/base_synchro/__openerp__.py
index a7e0cff1144..73c8cf13258 100644
--- a/addons/base_synchro/__openerp__.py
+++ b/addons/base_synchro/__openerp__.py
@@ -30,7 +30,7 @@ Synchronization with all objects.
Configure servers and trigger synchronization with its database objects.
""",
- "depends": ["base"],
+ "depends": ["base", "mail"],
"demo_xml": [],
"update_xml": [
"wizard/base_synchro_view.xml",
diff --git a/addons/base_synchro/wizard/base_synchro.py b/addons/base_synchro/wizard/base_synchro.py
index 1192c7768ff..28433b5caac 100644
--- a/addons/base_synchro/wizard/base_synchro.py
+++ b/addons/base_synchro/wizard/base_synchro.py
@@ -234,7 +234,6 @@ class base_synchro(osv.osv_memory):
self.pool.get('base.synchro.obj').write(cr, uid, [object.id], {'synchronize_date': dt})
end_date = time.strftime('%Y-%m-%d, %Hh %Mm %Ss')
if syn_obj.user_id:
- request = pooler.get_pool(cr.dbname).get('res.request')
if not self.report:
self.report.append('No exception.')
summary = '''Here is the synchronization report:
@@ -249,12 +248,8 @@ Records created: %d
Exceptions:
'''% (start_date,end_date,self.report_total, self.report_write,self.report_create)
summary += '\n'.join(self.report)
- request.create(cr, uid, {
- 'name' : "Synchronization report",
- 'act_from' : uid,
- 'act_to' : syn_obj.user_id.id,
- 'body': summary,
- })
+ # Chatter: old res.request transformed into a message added to the destination user
+ self.pool.get('res.users').message_append_note(cr, uid, [syn_obj.user_id.id], body=summary, subject=_('Synchronization Report'), context=context)
return True
def upload_download_multi_thread(self, cr, uid, data, context=None):
diff --git a/addons/base_vat/base_vat_view.xml b/addons/base_vat/base_vat_view.xml
index 6be9d306546..fe43cc0770a 100644
--- a/addons/base_vat/base_vat_view.xml
+++ b/addons/base_vat/base_vat_view.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/addons/board/i18n/gu.po b/addons/board/i18n/gu.po
new file mode 100644
index 00000000000..31d883053f7
--- /dev/null
+++ b/addons/board/i18n/gu.po
@@ -0,0 +1,348 @@
+# Gujarati translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-05-31 11:09+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Gujarati \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
+
+#. module: board
+#: view:res.log.report:0
+msgid " Year "
+msgstr ""
+
+#. module: board
+#: model:ir.model,name:board.model_board_menu_create
+msgid "Menu Create"
+msgstr ""
+
+#. module: board
+#: view:board.menu.create:0
+msgid "Menu Information"
+msgstr ""
+
+#. module: board
+#: view:res.users:0
+msgid "Latest Connections"
+msgstr ""
+
+#. module: board
+#: view:res.log.report:0
+msgid "Log created in last month"
+msgstr ""
+
+#. module: board
+#: view:board.board:0
+#: model:ir.actions.act_window,name:board.open_board_administration_form
+msgid "Administration Dashboard"
+msgstr "સંચાલન ડેશબોર્ડ"
+
+#. module: board
+#: view:res.log.report:0
+msgid "Group By..."
+msgstr "ગ્રુપ દ્વારા..."
+
+#. module: board
+#: view:res.log.report:0
+msgid "Log created in current year"
+msgstr ""
+
+#. module: board
+#: model:ir.model,name:board.model_board_board
+msgid "Board"
+msgstr "બૉર્ડ"
+
+#. module: board
+#: field:board.menu.create,menu_name:0
+msgid "Menu Name"
+msgstr ""
+
+#. module: board
+#: model:ir.actions.act_window,name:board.board_weekly_res_log_report_action
+#: view:res.log.report:0
+msgid "Weekly Global Activity"
+msgstr ""
+
+#. module: board
+#: field:board.board.line,name:0
+msgid "Title"
+msgstr "શીર્ષક"
+
+#. module: board
+#: field:res.log.report,nbr:0
+msgid "# of Entries"
+msgstr ""
+
+#. module: board
+#: view:res.log.report:0
+#: field:res.log.report,month:0
+msgid "Month"
+msgstr "મહિનો"
+
+#. module: board
+#: view:res.log.report:0
+msgid "Log created in current month"
+msgstr ""
+
+#. module: board
+#: model:ir.actions.act_window,name:board.board_monthly_res_log_report_action
+#: view:res.log.report:0
+msgid "Monthly Activity per Document"
+msgstr ""
+
+#. module: board
+#: view:board.board:0
+msgid "Configuration Overview"
+msgstr ""
+
+#. module: board
+#: model:ir.actions.act_window,name:board.action_view_board_list_form
+#: model:ir.ui.menu,name:board.menu_view_board_form
+msgid "Dashboard Definition"
+msgstr ""
+
+#. module: board
+#: selection:res.log.report,month:0
+msgid "March"
+msgstr "માર્ચ"
+
+#. module: board
+#: selection:res.log.report,month:0
+msgid "August"
+msgstr "ઑગસ્ટ"
+
+#. module: board
+#: model:ir.actions.act_window,name:board.action_user_connection_tree
+msgid "User Connections"
+msgstr ""
+
+#. module: board
+#: field:res.log.report,creation_date:0
+msgid "Creation Date"
+msgstr "સર્જન તારીખ"
+
+#. module: board
+#: view:res.log.report:0
+msgid "Log Analysis"
+msgstr ""
+
+#. module: board
+#: field:res.log.report,res_model:0
+msgid "Object"
+msgstr "વસ્તુ"
+
+#. module: board
+#: selection:res.log.report,month:0
+msgid "June"
+msgstr "જૂન"
+
+#. module: board
+#: field:board.board,line_ids:0
+msgid "Action Views"
+msgstr ""
+
+#. module: board
+#: model:ir.model,name:board.model_res_log_report
+msgid "Log Report"
+msgstr ""
+
+#. module: board
+#: code:addons/board/wizard/board_menu_create.py:46
+#, python-format
+msgid "Please Insert Dashboard View(s) !"
+msgstr ""
+
+#. module: board
+#: selection:res.log.report,month:0
+msgid "July"
+msgstr "જુલાઈ"
+
+#. module: board
+#: view:res.log.report:0
+#: field:res.log.report,day:0
+msgid "Day"
+msgstr "દિવસ"
+
+#. module: board
+#: view:board.menu.create:0
+msgid "Create Menu For Dashboard"
+msgstr ""
+
+#. module: board
+#: selection:res.log.report,month:0
+msgid "February"
+msgstr ""
+
+#. module: board
+#: selection:res.log.report,month:0
+msgid "October"
+msgstr ""
+
+#. module: board
+#: model:ir.model,name:board.model_board_board_line
+msgid "Board Line"
+msgstr ""
+
+#. module: board
+#: field:board.menu.create,menu_parent_id:0
+msgid "Parent Menu"
+msgstr ""
+
+#. module: board
+#: view:res.log.report:0
+msgid " Month-1 "
+msgstr ""
+
+#. module: board
+#: selection:res.log.report,month:0
+msgid "January"
+msgstr ""
+
+#. module: board
+#: view:board.board:0
+msgid "Users"
+msgstr ""
+
+#. module: board
+#: selection:res.log.report,month:0
+msgid "November"
+msgstr ""
+
+#. module: board
+#: help:board.board.line,sequence:0
+msgid ""
+"Gives the sequence order when displaying a list of "
+"board lines."
+msgstr ""
+
+#. module: board
+#: selection:res.log.report,month:0
+msgid "April"
+msgstr ""
+
+#. module: board
+#: view:board.board:0
+#: field:board.board,name:0
+#: field:board.board.line,board_id:0
+#: model:ir.ui.menu,name:board.menu_dasboard
+msgid "Dashboard"
+msgstr ""
+
+#. module: board
+#: code:addons/board/wizard/board_menu_create.py:45
+#, python-format
+msgid "User Error!"
+msgstr ""
+
+#. module: board
+#: field:board.board.line,action_id:0
+msgid "Action"
+msgstr ""
+
+#. module: board
+#: field:board.board.line,position:0
+msgid "Position"
+msgstr ""
+
+#. module: board
+#: view:res.log.report:0
+msgid "Model"
+msgstr ""
+
+#. module: board
+#: model:ir.actions.act_window,name:board.board_homepage_action
+msgid "Home Page"
+msgstr ""
+
+#. module: board
+#: model:ir.actions.act_window,name:board.action_latest_activities_tree
+msgid "Latest Activities"
+msgstr ""
+
+#. module: board
+#: selection:board.board.line,position:0
+msgid "Left"
+msgstr ""
+
+#. module: board
+#: field:board.board,view_id:0
+msgid "Board View"
+msgstr ""
+
+#. module: board
+#: selection:board.board.line,position:0
+msgid "Right"
+msgstr ""
+
+#. module: board
+#: field:board.board.line,width:0
+msgid "Width"
+msgstr ""
+
+#. module: board
+#: view:res.log.report:0
+msgid " Month "
+msgstr ""
+
+#. module: board
+#: field:board.board.line,sequence:0
+msgid "Sequence"
+msgstr ""
+
+#. module: board
+#: selection:res.log.report,month:0
+msgid "September"
+msgstr ""
+
+#. module: board
+#: selection:res.log.report,month:0
+msgid "December"
+msgstr ""
+
+#. module: board
+#: view:board.board:0
+#: view:board.menu.create:0
+msgid "Create Menu"
+msgstr ""
+
+#. module: board
+#: field:board.board.line,height:0
+msgid "Height"
+msgstr ""
+
+#. module: board
+#: model:ir.actions.act_window,name:board.action_board_menu_create
+msgid "Create Board Menu"
+msgstr ""
+
+#. module: board
+#: selection:res.log.report,month:0
+msgid "May"
+msgstr ""
+
+#. module: board
+#: view:res.log.report:0
+#: field:res.log.report,name:0
+msgid "Year"
+msgstr ""
+
+#. module: board
+#: view:board.menu.create:0
+msgid "Cancel"
+msgstr ""
+
+#. module: board
+#: view:board.board:0
+msgid "Dashboard View"
+msgstr ""
diff --git a/addons/caldav/i18n/pt.po b/addons/caldav/i18n/pt.po
index 1a27f114f0c..2746ddd853a 100644
--- a/addons/caldav/i18n/pt.po
+++ b/addons/caldav/i18n/pt.po
@@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-08 00:36+0000\n"
-"PO-Revision-Date: 2012-05-10 17:59+0000\n"
-"Last-Translator: Raphael Collet (OpenERP) \n"
+"PO-Revision-Date: 2012-05-31 15:16+0000\n"
+"Last-Translator: ThinkOpen Solutions \n"
"Language-Team: Portuguese \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-05-11 05:13+0000\n"
-"X-Generator: Launchpad (build 15225)\n"
+"X-Launchpad-Export-Date: 2012-06-01 05:33+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
#. module: caldav
#: view:basic.calendar:0
@@ -672,7 +672,7 @@ msgstr ""
#. module: caldav
#: view:caldav.browse:0
msgid "Browse Caldav"
-msgstr ""
+msgstr "Pesquisa Caldav"
#. module: caldav
#: field:user.preference,host_name:0
diff --git a/addons/crm/__openerp__.py b/addons/crm/__openerp__.py
index 2049b3a8cc9..0c9b75b4d41 100644
--- a/addons/crm/__openerp__.py
+++ b/addons/crm/__openerp__.py
@@ -57,6 +57,7 @@ Creates a dashboard for CRM that includes:
'depends': [
'base_action_rule',
'base_setup',
+ 'base_status',
'process',
'mail',
'base_calendar',
@@ -66,7 +67,6 @@ Creates a dashboard for CRM that includes:
],
'init_xml': [
'crm_data.xml',
- 'crm_meeting_data.xml',
'crm_lead_data.xml',
'crm_meeting_data.xml',
'crm_phonecall_data.xml',
diff --git a/addons/crm/board_crm_view.xml b/addons/crm/board_crm_view.xml
index b8e05b68cf5..fd6b95d81f9 100644
--- a/addons/crm/board_crm_view.xml
+++ b/addons/crm/board_crm_view.xml
@@ -11,27 +11,10 @@
-
-
-
-
-
-
-
+
diff --git a/addons/crm/crm.py b/addons/crm/crm.py
index eb6314c5103..65af3f9e530 100644
--- a/addons/crm/crm.py
+++ b/addons/crm/crm.py
@@ -2,7 +2,7 @@
##############################################################################
#
# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
+# Copyright (C) 2004-today OpenERP SA ()
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -19,12 +19,11 @@
#
##############################################################################
-import time
import base64
-import tools
-
+import time
from osv import fields
from osv import osv
+import tools
from tools.translate import _
MAX_LEVEL = 15
@@ -57,8 +56,11 @@ class crm_case_channel(osv.osv):
}
class crm_case_stage(osv.osv):
- """ Stage of case """
-
+ """ Model for case stages. This models the main stages of a document
+ management flow. Main CRM objects (leads, opportunities, project
+ issues, ...) will now use only stages, instead of state and stages.
+ Stages are for example used to display the kanban view of records.
+ """
_name = "crm.case.stage"
_description = "Stage of case"
_rec_name = 'name'
@@ -66,22 +68,34 @@ class crm_case_stage(osv.osv):
_columns = {
'name': fields.char('Stage Name', size=64, required=True, translate=True),
- 'sequence': fields.integer('Sequence', help="Used to order stages."),
+ 'sequence': fields.integer('Sequence', help="Used to order stages. Lower is better."),
'probability': fields.float('Probability (%)', required=True, help="This percentage depicts the default/average probability of the Case for this stage to be a success"),
'on_change': fields.boolean('Change Probability Automatically', help="Setting this stage will change the probability automatically on the opportunity."),
'requirements': fields.text('Requirements'),
- 'section_ids':fields.many2many('crm.case.section', 'section_stage_rel', 'stage_id', 'section_id', 'Sections'),
- 'case_default': fields.boolean('Common to All Teams', help="If you check this field, this stage will be proposed by default on each sales team. It will not assign this stage to existing teams."),
+ 'section_ids':fields.many2many('crm.case.section', 'section_stage_rel', 'stage_id', 'section_id', string='Sections',
+ help="Link between stages and sales teams. When set, this limitate the current stage to the selected sales teams."),
+ 'state': fields.selection(AVAILABLE_STATES, 'State', required=True, help="The related state for the stage. The state of your document will automatically change regarding the selected stage. For example, if a stage is related to the state 'Close', when your document reaches this stage, it will be automatically have the 'closed' state."),
+ 'case_default': fields.boolean('Common to All Teams',
+ help="If you check this field, this stage will be proposed by default on each sales team. It will not assign this stage to existing teams."),
+ 'fold': fields.boolean('Hide in Views when Empty',
+ help="This stage is not visible, for example in status bar or kanban view, when there are no records in that stage to display."),
+ 'type': fields.selection([ ('lead','Lead'),
+ ('opportunity', 'Opportunity'),
+ ('both', 'Both')],
+ string='Type', size=16, required=True,
+ help="This field is used to distinguish stages related to Leads from stages related to Opportunities, or to specify stages available for both types."),
}
_defaults = {
'sequence': lambda *args: 1,
'probability': lambda *args: 0.0,
+ 'state': 'draft',
+ 'fold': False,
+ 'type': 'both',
}
class crm_case_section(osv.osv):
- """Sales Team"""
-
+ """ Model for sales teams. """
_name = "crm.case.section"
_description = "Sales Teams"
_order = "complete_name"
@@ -107,6 +121,7 @@ class crm_case_section(osv.osv):
'working_hours': fields.float('Working Hours', digits=(16,2 )),
'stage_ids': fields.many2many('crm.case.stage', 'section_stage_rel', 'section_id', 'stage_id', 'Stages'),
}
+
def _get_stage_common(self, cr, uid, context):
ids = self.pool.get('crm.case.stage').search(cr, uid, [('case_default','=',1)], context=context)
return ids
@@ -171,429 +186,6 @@ class crm_case_resource_type(osv.osv):
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
}
-class crm_base(object):
- """ Base utility mixin class for crm objects,
- Object subclassing this should define colums:
- date_open
- date_closed
- user_id
- partner_id
- """
- def _get_default_partner_address(self, cr, uid, context=None):
- """Gives id of default address for current user
- :param context: if portal in context is false return false anyway
- """
- if context is None:
- context = {}
- if not context.get('portal'):
- return False
- # was user.address_id.id, but address_id has been removed
- user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
- if hasattr(user, 'partner_address_id') and user.partner_address_id:
- return user.partner_address_id
- return False
-
- def _get_default_partner(self, cr, uid, context=None):
- """Gives id of partner for current user
- :param context: if portal in context is false return false anyway
- """
- if context is None:
- context = {}
- if not context.get('portal', False):
- return False
- user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
- if hasattr(user, 'partner_address_id') and user.partner_address_id:
- return user.partner_address_id
- return user.company_id.partner_id.id
-
- def _get_default_email(self, cr, uid, context=None):
- """Gives default email address for current user
- :param context: if portal in context is false return false anyway
- """
- if not context.get('portal', False):
- return False
- user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
- return user.user_email
-
- def _get_default_user(self, cr, uid, context=None):
- """Gives current user id
- :param context: if portal in context is false return false anyway
- """
- if context and context.get('portal', False):
- return False
- return uid
-
- def _get_section(self, cr, uid, context=None):
- return False
-
- def onchange_partner_address_id(self, cr, uid, ids, add, email=False):
- """This function returns value of partner email based on Partner Address
- :param ids: List of case IDs
- :param add: Id of Partner's address
- :param email: Partner's email ID
- """
- data = {'value': {'email_from': False, 'phone':False}}
- if add:
- address = self.pool.get('res.partner').browse(cr, uid, add)
- data['value'] = {'email_from': address and address.email or False ,
- 'phone': address and address.phone or False}
- if 'phone' not in self._columns:
- del data['value']['phone']
- return data
-
- def onchange_partner_id(self, cr, uid, ids, part, email=False):
- """This function returns value of partner address based on partner
- :param ids: List of case IDs
- :param part: Partner's id
- :param email: Partner's email ID
- """
- data={}
- if part:
- addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact'])
- data.update(self.onchange_partner_address_id(cr, uid, ids, addr['contact'])['value'])
- return {'value': data}
-
- def case_get_note_msg_prefix(self, cr, uid, id, context=None):
- return ''
-
- def case_open_send_note(self, cr, uid, ids, context=None):
- for id in ids:
- msg = '%s has been opened.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
- self.message_append_note(cr, uid, [id], body=msg, context=context)
- return True
-
- def case_close_send_note(self, cr, uid, ids, context=None):
- for id in ids:
- msg = '%s has been closed.'% (self.case_get_note_msg_prefix(cr, uid, id, context=context))
- self.message_append_note(cr, uid, [id], body=msg, context=context)
- return True
-
- def case_cancel_send_note(self, cr, uid, ids, context=None):
- for id in ids:
- msg = '%s has been canceled.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
- self.message_append_note(cr, uid, [id], body=msg, context=context)
- return True
-
- def case_pending_send_note(self, cr, uid, ids, context=None):
- for id in ids:
- msg = '%s is now pending.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
- self.message_append_note(cr, uid, [id], body=msg, context=context)
- return True
-
- def case_reset_send_note(self, cr, uid, ids, context=None):
- for id in ids:
- msg = '%s has been renewed.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
- self.message_append_note(cr, uid, [id], body=msg, context=context)
- return True
-
- def case_open(self, cr, uid, ids, context=None):
- """Opens Case
- :param ids: List of case Ids
- """
- cases = self.browse(cr, uid, ids)
- for case in cases:
- data = {'state': 'open', 'active': True}
- if not case.user_id:
- data['user_id'] = uid
- self.write(cr, uid, [case.id], data)
- self.case_open_send_note(cr, uid, ids, context=context)
- self._action(cr, uid, cases, 'open')
-
- return True
-
- def case_close(self, cr, uid, ids, context=None):
- """Closes Case
- :param ids: List of case Ids
- """
- cases = self.browse(cr, uid, ids)
- cases[0].state # to fill the browse record cache
- self.write(cr, uid, ids, {'state': 'done', 'date_closed': time.strftime('%Y-%m-%d %H:%M:%S'), })
- # We use the cache of cases to keep the old case state
- self.case_close_send_note(cr, uid, ids, context=context)
- self._action(cr, uid, cases, 'done')
- return True
-
- def case_cancel(self, cr, uid, ids, context=None):
- """Cancels Case
- :param ids: List of case Ids
- """
- cases = self.browse(cr, uid, ids)
- cases[0].state # to fill the browse record cache
- self.write(cr, uid, ids, {'state': 'cancel', 'active': True})
- # We use the cache of cases to keep the old case state
- self.case_cancel_send_note(cr, uid, ids, context=context)
- self._action(cr, uid, cases, 'cancel')
- return True
-
- def case_pending(self, cr, uid, ids, context=None):
- """Marks case as pending
- :param ids: List of case Ids
- """
- cases = self.browse(cr, uid, ids)
- cases[0].state # to fill the browse record cache
- self.write(cr, uid, ids, {'state': 'pending', 'active': True})
- self.case_pending_send_note(cr, uid, ids, context=context)
- self._action(cr, uid, cases, 'pending')
- return True
-
- def case_reset(self, cr, uid, ids, context=None):
- """Resets case as draft
- :param ids: List of case Ids
- """
- cases = self.browse(cr, uid, ids)
- cases[0].state # to fill the browse record cache
- self.write(cr, uid, ids, {'state': 'draft', 'active': True})
- self.case_reset_send_note(cr, uid, ids, context=context)
- self._action(cr, uid, cases, 'draft')
- return True
-
- def _action(self, cr, uid, cases, state_to, scrit=None, context=None):
- if context is None:
- context = {}
- context['state_to'] = state_to
- rule_obj = self.pool.get('base.action.rule')
- model_obj = self.pool.get('ir.model')
- model_ids = model_obj.search(cr, uid, [('model','=',self._name)])
- rule_ids = rule_obj.search(cr, uid, [('model_id','=',model_ids[0])])
- return rule_obj._action(cr, uid, rule_ids, cases, scrit=scrit, context=context)
-
-class crm_case(crm_base):
- """ A simple python class to be used for common functions
- Object that inherit from this class should inherit from mailgate.thread
- And need a stage_id field
- And object that inherit (orm inheritance) from a class the overwrite copy
- """
-
- def stage_find(self, cr, uid, section_id, domain=[], order='sequence'):
- domain = list(domain)
- if section_id:
- domain.append(('section_ids', '=', section_id))
- stage_ids = self.pool.get('crm.case.stage').search(cr, uid, domain, order=order)
- if stage_ids:
- return stage_ids[0]
- return False
-
- def stage_set(self, cr, uid, ids, stage_id, context=None):
- value = {}
- if hasattr(self,'onchange_stage_id'):
- value = self.onchange_stage_id(cr, uid, ids, stage_id)['value']
- value['stage_id'] = stage_id
- return self.write(cr, uid, ids, value, context=context)
-
- def stage_change(self, cr, uid, ids, op, order, context=None):
- if context is None:
- context = {}
- for case in self.browse(cr, uid, ids, context=context):
- seq = 0
- if case.stage_id:
- seq = case.stage_id.sequence
- section_id = None
- if case.section_id:
- section_id = case.section_id.id
- next_stage_id = self.stage_find(cr, uid, section_id, [('sequence',op,seq)],order)
- if next_stage_id:
- return self.stage_set(cr, uid, [case.id], next_stage_id, context=context)
- return False
-
- def stage_next(self, cr, uid, ids, context=None):
- """This function computes next stage for case from its current stage
- using available stage for that case type
- """
- return self.stage_change(cr, uid, ids, '>','sequence', context)
-
- def stage_previous(self, cr, uid, ids, context=None):
- """This function computes previous stage for case from its current
- stage using available stage for that case type
- """
- return self.stage_change(cr, uid, ids, '<', 'sequence desc', context)
-
- def copy(self, cr, uid, id, default=None, context=None):
- """Overrides orm copy method to avoid copying messages,
- as well as date_closed and date_open columns if they
- exist."""
- if default is None:
- default = {}
-
- default.update({ 'message_ids': [], })
- if hasattr(self, '_columns'):
- if self._columns.get('date_closed'):
- default.update({ 'date_closed': False, })
- if self._columns.get('date_open'):
- default.update({ 'date_open': False })
- return super(crm_case, self).copy(cr, uid, id, default, context=context)
-
- def case_escalate_send_note(self, cr, uid, ids, new_section=None, context=None):
- for id in ids:
- if new_section:
- msg = '%s has been escalated to %s.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context), new_section.name)
- else:
- msg = '%s has been escalated.' % (self.case_get_note_msg_prefix(cr, uid, id, context=context))
- self.message_append_note(cr, uid, [id], 'System Notification', msg, context=context)
- return True
-
- def case_get_note_msg_prefix(self, cr, uid, id, context=None):
- return ''
-
- def case_open(self, cr, uid, ids, context=None):
- """Opens Case"""
- cases = self.browse(cr, uid, ids)
- for case in cases:
- data = {'state': 'open', 'active': True }
- if not case.user_id:
- data['user_id'] = uid
- self.write(cr, uid, [case.id], data)
- self.case_open_send_note(cr, uid, ids, context=context)
- self._action(cr, uid, cases, 'open')
- return True
-
- def case_close(self, cr, uid, ids, context=None):
- """Closes Case"""
- cases = self.browse(cr, uid, ids)
- cases[0].state # to fill the browse record cache
- self.write(cr, uid, ids, {'state': 'done',
- 'date_closed': time.strftime('%Y-%m-%d %H:%M:%S'),
- })
- #
- # We use the cache of cases to keep the old case state
- #
- self.case_close_send_note(cr, uid, ids, context=context)
- self._action(cr, uid, cases, 'done')
- return True
-
- def case_escalate(self, cr, uid, ids, context=None):
- """Escalates case to parent level"""
- cases = self.browse(cr, uid, ids)
- for case in cases:
- data = {'active': True}
- if case.section_id.parent_id:
- data['section_id'] = case.section_id.parent_id.id
- if case.section_id.parent_id.change_responsible:
- if case.section_id.parent_id.user_id:
- data['user_id'] = case.section_id.parent_id.user_id.id
- else:
- raise osv.except_osv(_('Error !'), _('You can not escalate, you are already at the top level regarding your sales-team category.'))
- self.write(cr, uid, [case.id], data)
- case.case_escalate_send_note(case.section_id.parent_id)
- cases = self.browse(cr, uid, ids)
- self._action(cr, uid, cases, 'escalate')
- return True
-
- def case_cancel(self, cr, uid, ids, context=None):
- """Cancels Case"""
- cases = self.browse(cr, uid, ids)
- cases[0].state # to fill the browse record cache
- self.write(cr, uid, ids, {'state': 'cancel',
- 'active': True})
- self.case_cancel_send_note(cr, uid, ids, context=context)
- self._action(cr, uid, cases, 'cancel')
- return True
-
- def case_pending(self, cr, uid, ids, context=None):
- """Marks case as pending"""
- cases = self.browse(cr, uid, ids)
- cases[0].state # to fill the browse record cache
- self.write(cr, uid, ids, {'state': 'pending', 'active': True})
- self.case_pending_send_note(cr, uid, ids, context=context)
- self._action(cr, uid, cases, 'pending')
- return True
-
- def case_reset(self, cr, uid, ids, context=None):
- """Resets case as draft"""
- state = 'draft'
- cases = self.browse(cr, uid, ids)
- cases[0].state # to fill the browse record cache
- self.write(cr, uid, ids, {'state': state, 'active': True})
- self.case_reset_send_note(cr, uid, ids, context=context)
- self._action(cr, uid, cases, state)
- return True
-
- def remind_partner(self, cr, uid, ids, context=None, attach=False):
- return self.remind_user(cr, uid, ids, context, attach,
- destination=False)
-
- def remind_user(self, cr, uid, ids, context=None, attach=False, destination=True):
- mail_message = self.pool.get('mail.message')
- for case in self.browse(cr, uid, ids, context=context):
- if not destination and not case.email_from:
- return False
- if not case.user_id.user_email:
- return False
- if destination and case.section_id.user_id:
- case_email = case.section_id.user_id.user_email
- else:
- case_email = case.user_id.user_email
-
- src = case_email
- dest = case.user_id.user_email or ""
- body = case.description or ""
- for message in case.message_ids:
- if message.email_from and message.body_text:
- body = message.body_text
- break
-
- if not destination:
- src, dest = dest, case.email_from
- if body and case.user_id.signature:
- if body:
- body += '\n\n%s' % (case.user_id.signature)
- else:
- body = '\n\n%s' % (case.user_id.signature)
-
- body = self.format_body(body)
-
- attach_to_send = {}
-
- if attach:
- attach_ids = self.pool.get('ir.attachment').search(cr, uid, [('res_model', '=', self._name), ('res_id', '=', case.id)])
- attach_to_send = self.pool.get('ir.attachment').read(cr, uid, attach_ids, ['datas_fname', 'datas'])
- attach_to_send = dict(map(lambda x: (x['datas_fname'], base64.decodestring(x['datas'])), attach_to_send))
-
- # Send an email
- subject = "Reminder: [%s] %s" % (str(case.id), case.name, )
- mail_message.schedule_with_attach(cr, uid,
- src,
- [dest],
- subject,
- body,
- model=self._name,
- reply_to=case.section_id.reply_to,
- res_id=case.id,
- attachments=attach_to_send,
- context=context
- )
- return True
-
- def _check(self, cr, uid, ids=False, context=None):
- """Function called by the scheduler to process cases for date actions
- Only works on not done and cancelled cases
- """
- cr.execute('select * from crm_case \
- where (date_action_last<%s or date_action_last is null) \
- and (date_action_next<=%s or date_action_next is null) \
- and state not in (\'cancel\',\'done\')',
- (time.strftime("%Y-%m-%d %H:%M:%S"),
- time.strftime('%Y-%m-%d %H:%M:%S')))
-
- ids2 = map(lambda x: x[0], cr.fetchall() or [])
- cases = self.browse(cr, uid, ids2, context=context)
- return self._action(cr, uid, cases, False, context=context)
-
- def format_body(self, body):
- return self.pool.get('base.action.rule').format_body(body)
-
- def format_mail(self, obj, body):
- return self.pool.get('base.action.rule').format_mail(obj, body)
-
- def message_thread_followers(self, cr, uid, ids, context=None):
- res = {}
- for case in self.browse(cr, uid, ids, context=context):
- l=[]
- if case.email_cc:
- l.append(case.email_cc)
- if case.user_id and case.user_id.user_email:
- l.append(case.user_id.user_email)
- res[case.id] = l
- return res
def _links_get(self, cr, uid, context=None):
"""Gets links value for reference field"""
diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py
index bf20deb0ce5..82bc50eafea 100644
--- a/addons/crm/crm_lead.py
+++ b/addons/crm/crm_lead.py
@@ -2,7 +2,7 @@
##############################################################################
#
# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
+# Copyright (C) 2004-today OpenERP SA ()
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -19,15 +19,15 @@
#
##############################################################################
-from osv import fields, osv
-from datetime import datetime
-import crm
-import time
-from tools.translate import _
-from crm import crm_case
import binascii
-import tools
+from base_status.base_stage import base_stage
+import crm
+from datetime import datetime
from mail.mail_message import to_email
+from osv import fields, osv
+import time
+import tools
+from tools.translate import _
CRM_LEAD_PENDING_STATES = (
crm.AVAILABLE_STATES[2][0], # Cancelled
@@ -35,22 +35,68 @@ CRM_LEAD_PENDING_STATES = (
crm.AVAILABLE_STATES[4][0], # Pending
)
-class crm_lead(crm_case, osv.osv):
+class crm_lead(base_stage, osv.osv):
""" CRM Lead Case """
_name = "crm.lead"
_description = "Lead/Opportunity"
_order = "priority,date_action,id desc"
_inherit = ['ir.needaction_mixin', 'mail.thread','res.partner']
+ def _get_default_section_id(self, cr, uid, context=None):
+ """ Gives default section by checking if present in the context """
+ return (self._resolve_section_id_from_context(cr, uid, context=context) or False)
+
+ def _get_default_stage_id(self, cr, uid, context=None):
+ """ Gives default stage_id """
+ section_id = self._get_default_section_id(cr, uid, context=context)
+ return self.stage_find(cr, uid, [], section_id, [('state', '=', 'draft'), ('type', '=', 'both')], context=context)
+
+ def _resolve_section_id_from_context(self, cr, uid, context=None):
+ """ Returns ID of section based on the value of 'section_id'
+ context key, or None if it cannot be resolved to a single
+ Sales Team.
+ """
+ if context is None:
+ context = {}
+ if type(context.get('default_section_id')) in (int, long):
+ return context.get('default_section_id')
+ if isinstance(context.get('default_section_id'), basestring):
+ section_name = context['default_section_id']
+ section_ids = self.pool.get('crm.case.section').name_search(cr, uid, name=section_name, context=context)
+ if len(section_ids) == 1:
+ return int(section_ids[0][0])
+ return None
+
+ def _resolve_type_from_context(self, cr, uid, context=None):
+ """ Returns the type (lead or opportunity) from the type context
+ key. Returns None if it cannot be resolved.
+ """
+ if context is None:
+ context = {}
+ return context.get('default_type')
+
def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None):
access_rights_uid = access_rights_uid or uid
stage_obj = self.pool.get('crm.case.stage')
order = stage_obj._order
+ # lame hack to allow reverting search, should just work in the trivial case
if read_group_order == 'stage_id desc':
- # lame hack to allow reverting search, should just work in the trivial case
order = "%s desc" % order
- stage_ids = stage_obj._search(cr, uid, ['|', ('id','in',ids),('case_default','=',1)], order=order,
- access_rights_uid=access_rights_uid, context=context)
+ # retrieve section_id from the context and write the domain
+ # - ('id', 'in', 'ids'): add columns that should be present
+ # - OR ('case_default', '=', True), ('fold', '=', False): add default columns that are not folded
+ # - OR ('section_ids', '=', section_id), ('fold', '=', False) if section_id: add section columns that are not folded
+ search_domain = []
+ section_id = self._resolve_section_id_from_context(cr, uid, context=context)
+ if section_id:
+ search_domain += ['|', '&', ('section_ids', '=', section_id), ('fold', '=', False)]
+ search_domain += ['|', ('id', 'in', ids), '&', ('case_default', '=', True), ('fold', '=', False)]
+ # retrieve type from the context (if set: choose 'type' or 'both')
+ type = self._resolve_type_from_context(cr, uid, context=context)
+ if type:
+ search_domain += ['|', ('type', '=', type), ('type', '=', 'both')]
+ # perform search
+ stage_ids = stage_obj._search(cr, uid, search_domain, order=order, access_rights_uid=access_rights_uid, context=context)
result = stage_obj.name_get(cr, access_rights_uid, stage_ids, context=context)
# restore order of the search
result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0])))
@@ -143,7 +189,7 @@ class crm_lead(crm_case, osv.osv):
select=True, help="Optional linked partner, usually after conversion of the lead"),
'id': fields.integer('ID', readonly=True),
- 'name': fields.char('Name', size=64, select=1),
+ 'name': fields.char('Subject', size=64, required=True, select=1),
'active': fields.boolean('Active', required=False),
'date_action_last': fields.datetime('Last Action', readonly=1),
'date_action_next': fields.datetime('Next Action', readonly=1),
@@ -154,7 +200,6 @@ class crm_lead(crm_case, osv.osv):
'email_cc': fields.text('Global CC', size=252 , help="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"),
'description': fields.text('Notes'),
'write_date': fields.datetime('Update Date' , readonly=True),
-
'categ_id': fields.many2one('crm.case.categ', 'Category', \
domain="['|',('section_id','=',section_id),('section_id','=',False), ('object_id.model', '=', 'crm.lead')]"),
'type_id': fields.many2one('crm.case.resource.type', 'Campaign', \
@@ -167,7 +212,8 @@ class crm_lead(crm_case, osv.osv):
'type':fields.selection([ ('lead','Lead'), ('opportunity','Opportunity'), ],'Type', help="Type is used to separate Leads and Opportunities"),
'priority': fields.selection(crm.AVAILABLE_PRIORITIES, 'Priority', select=True),
'date_closed': fields.datetime('Closed', readonly=True),
- 'stage_id': fields.many2one('crm.case.stage', 'Stage', domain="[('section_ids', '=', section_id)]"),
+ 'stage_id': fields.many2one('crm.case.stage', 'Stage',
+ domain="['&', '|', ('section_ids', '=', section_id), ('case_default', '=', True), '|', ('type', '=', type), ('type', '=', 'both')]"),
'user_id': fields.many2one('res.users', 'Salesperson'),
'referred': fields.char('Referred By', size=64),
'date_open': fields.datetime('Opened', readonly=True),
@@ -175,12 +221,13 @@ class crm_lead(crm_case, osv.osv):
multi='day_open', type="float", store=True),
'day_close': fields.function(_compute_day, string='Days to Close', \
multi='day_close', type="float", store=True),
- 'state': fields.selection(crm.AVAILABLE_STATES, 'Status', size=16, readonly=True,
- help='The state is set to \'Draft\', when a case is created.\
- \nIf the case is in progress the state is set to \'In progress\'.\
- \nWhen the case is over, the state is set to \'Done\'.\
- \nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
- 'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
+ 'state': fields.related('stage_id', 'state', type="selection", store=True,
+ selection=crm.AVAILABLE_STATES, string="State", readonly=True,
+ help='The state is set to \'Draft\', when a case is created.\
+ If the case is in progress the state is set to \'Open\'.\
+ When the case is over, the state is set to \'Done\'.\
+ If the case needs to be reviewed then the state is \
+ set to \'Pending\'.'),
'subjects': fields.function(_get_email_subject, fnct_search=_history_search, string='Subject of Email', type='char', size=64),
# Only used for type opportunity
@@ -192,23 +239,21 @@ class crm_lead(crm_case, osv.osv):
'date_deadline': fields.date('Expected Closing'),
'date_action': fields.date('Next Action Date', select=True),
'title_action': fields.char('Next Action', size=64),
- 'stage_id': fields.many2one('crm.case.stage', 'Stage', domain="[('section_ids', '=', section_id)]"),
'color': fields.integer('Color Index'),
'partner_address_name': fields.related('partner_id', 'name', type='char', string='Partner Contact Name', readonly=True),
'partner_address_email': fields.related('partner_id', 'email', type='char', string='Partner Contact Email', readonly=True),
'company_currency': fields.related('company_id', 'currency_id', 'symbol', type='char', string='Company Currency', readonly=True),
'user_email': fields.related('user_id', 'user_email', type='char', string='User Email', readonly=True),
'user_login': fields.related('user_id', 'login', type='char', string='User Login', readonly=True),
-
}
_defaults = {
- 'active': lambda *a: 1,
- 'user_id': crm_case._get_default_user,
- 'email_from': crm_case._get_default_email,
- 'state': lambda *a: 'draft',
- 'type': lambda *a: 'lead',
- 'section_id': crm_case._get_section,
+ 'active': 1,
+ 'type': 'lead',
+ 'user_id': lambda s, cr, uid, c: s._get_default_user(cr, uid, c),
+ 'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c),
+ 'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c),
+ 'section_id': lambda s, cr, uid, c: s._get_default_section_id(cr, uid, c),
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.lead', context=c),
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
'color': 0,
@@ -241,95 +286,104 @@ class crm_lead(crm_case, osv.osv):
return {'value':{}}
return {'value':{'probability': stage.probability}}
- def stage_find_percent(self, cr, uid, percent, section_id):
- """ Return the first stage with a probability == percent
+ def _check(self, cr, uid, ids=False, context=None):
+ """ Override of the base.stage method.
+ Function called by the scheduler to process cases for date actions
+ Only works on not done and cancelled cases
"""
- stage_pool = self.pool.get('crm.case.stage')
- if section_id :
- ids = stage_pool.search(cr, uid, [("probability", '=', percent), ("section_ids", 'in', [section_id])])
- else :
- ids = stage_pool.search(cr, uid, [("probability", '=', percent)])
+ cr.execute('select * from crm_case \
+ where (date_action_last<%s or date_action_last is null) \
+ and (date_action_next<=%s or date_action_next is null) \
+ and state not in (\'cancel\',\'done\')',
+ (time.strftime("%Y-%m-%d %H:%M:%S"),
+ time.strftime('%Y-%m-%d %H:%M:%S')))
- if ids:
- return ids[0]
+ ids2 = map(lambda x: x[0], cr.fetchall() or [])
+ cases = self.browse(cr, uid, ids2, context=context)
+ return self._action(cr, uid, cases, False, context=context)
+
+ def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None):
+ """ Override of the base.stage method
+ Parameter of the stage search taken from the lead:
+ - type: stage type must be the same or 'both'
+ - section_id: if set, stages must belong to this section or
+ be a default stage; if not set, stages must be default
+ stages
+ """
+ if isinstance(cases, (int, long)):
+ cases = self.browse(cr, uid, cases, context=context)
+ # collect all section_ids
+ section_ids = []
+ types = ['both']
+ if section_id:
+ section_ids.append(section_id)
+ for lead in cases:
+ if lead.section_id:
+ section_ids.append(lead.section_id.id)
+ if lead.type not in types:
+ types.append(lead.type)
+ # OR all section_ids and OR with case_default
+ search_domain = []
+ if section_ids:
+ search_domain += [('|')] * len(section_ids)
+ for section_id in section_ids:
+ search_domain.append(('section_ids', '=', section_id))
+ search_domain.append(('case_default', '=', True))
+ # AND with cases types
+ search_domain.append(('type', 'in', types))
+ # AND with the domain in parameter
+ search_domain += list(domain)
+ # perform search, return the first found
+ stage_ids = self.pool.get('crm.case.stage').search(cr, uid, search_domain, order=order, context=context)
+ if stage_ids:
+ return stage_ids[0]
return False
- def stage_find_lost(self, cr, uid, section_id):
- return self.stage_find_percent(cr, uid, 0.0, section_id)
-
- def stage_find_won(self, cr, uid, section_id):
- return self.stage_find_percent(cr, uid, 100.0, section_id)
-
- def case_open(self, cr, uid, ids, context=None):
- for lead in self.browse(cr, uid, ids, context=context):
- if lead.state == 'draft':
- value = {'date_open': time.strftime('%Y-%m-%d %H:%M:%S')}
- self.write(cr, uid, [lead.id], value)
- if lead.type == 'opportunity' and not lead.stage_id:
- stage_id = self.stage_find(cr, uid, lead.section_id.id or False, [('sequence','>',0)])
- if stage_id:
- self.stage_set(cr, uid, [lead.id], stage_id)
- res = super(crm_lead, self).case_open(cr, uid, ids, context)
- return res
-
- def case_close(self, cr, uid, ids, context=None):
- res = super(crm_lead, self).case_close(cr, uid, ids, context)
- self.write(cr, uid, ids, {'date_closed': time.strftime('%Y-%m-%d %H:%M:%S')})
- return res
-
def case_cancel(self, cr, uid, ids, context=None):
- """Overrides cancel for crm_case for setting probability
- """
- res = super(crm_lead, self).case_cancel(cr, uid, ids, context)
- self.write(cr, uid, ids, {'probability' : 0.0})
+ """ Overrides case_cancel from base_stage to set probability """
+ res = super(crm_lead, self).case_cancel(cr, uid, ids, context=context)
+ self.write(cr, uid, ids, {'probability' : 0.0}, context=context)
return res
def case_reset(self, cr, uid, ids, context=None):
- """Overrides reset as draft in order to set the stage field as empty
- """
- res = super(crm_lead, self).case_reset(cr, uid, ids, context)
- self.write(cr, uid, ids, {'stage_id': False, 'probability': 0.0})
+ """ Overrides case_reset from base_stage to set probability """
+ res = super(crm_lead, self).case_reset(cr, uid, ids, context=context)
+ self.write(cr, uid, ids, {'probability': 0.0}, context=context)
return res
def case_mark_lost(self, cr, uid, ids, context=None):
- """Mark the case as lost: state = done and probability = 0%
- """
- res = super(crm_lead, self).case_close(cr, uid, ids, context)
- self.write(cr, uid, ids, {'probability' : 0.0})
+ """ Mark the case as lost: state=cancel and probability=0 """
for lead in self.browse(cr, uid, ids):
- stage_id = self.stage_find_lost(cr, uid, lead.section_id.id or False)
+ stage_id = self.stage_find(cr, uid, [lead], lead.section_id.id or False, [('probability', '=', 0.0)], context=context)
if stage_id:
- self.stage_set(cr, uid, [lead.id], stage_id)
- return res
+ self.case_set(cr, uid, [lead.id], values_to_update={'probability': 0.0}, new_stage_id=stage_id, context=context)
+ self.case_mark_lost_send_note(cr, uid, ids, context=context)
+ return True
def case_mark_won(self, cr, uid, ids, context=None):
- """Mark the case as lost: state = done and probability = 0%
- """
- res = super(crm_lead, self).case_close(cr, uid, ids, context=None)
- self.write(cr, uid, ids, {'probability' : 100.0})
+ """ Mark the case as lost: state=done and probability=100 """
for lead in self.browse(cr, uid, ids):
- stage_id = self.stage_find_won(cr, uid, lead.section_id.id or False)
+ stage_id = self.stage_find(cr, uid, [lead], lead.section_id.id or False, [('probability', '=', 100.0)], context=context)
if stage_id:
- self.stage_set(cr, uid, [lead.id], stage_id)
- self.case_mark_won_send_note(cr, uid, [lead.id], context=context)
- return res
+ self.case_set(cr, uid, [lead.id], values_to_update={'probability': 100.0}, new_stage_id=stage_id, context=context)
+ self.case_mark_won_send_note(cr, uid, ids, context=context)
+ return True
def set_priority(self, cr, uid, ids, priority):
- """Set lead priority
+ """ Set lead priority
"""
return self.write(cr, uid, ids, {'priority' : priority})
def set_high_priority(self, cr, uid, ids, context=None):
- """Set lead priority to high
+ """ Set lead priority to high
"""
return self.set_priority(cr, uid, ids, '1')
def set_normal_priority(self, cr, uid, ids, context=None):
- """Set lead priority to normal
+ """ Set lead priority to normal
"""
return self.set_priority(cr, uid, ids, '3')
-
def _merge_data(self, cr, uid, ids, oldest, fields, context=None):
# prepare opportunity data into dictionary for merging
opportunities = self.browse(cr, uid, ids, context=context)
@@ -807,22 +861,12 @@ class crm_lead(crm_case, osv.osv):
"You should better cancel it, instead of deleting it.") % lead.name)
return super(crm_lead, self).unlink(cr, uid, ids, context)
-
def write(self, cr, uid, ids, vals, context=None):
- if not context:
- context = {}
-
- if 'date_closed' in vals:
- return super(crm_lead,self).write(cr, uid, ids, vals, context=context)
-
- if vals.get('stage_id'):
- stage = self.pool.get('crm.case.stage').browse(cr, uid, vals['stage_id'], context=context)
+ if vals.get('stage_id') and not vals.get('probability'):
# change probability of lead(s) if required by stage
- if not vals.get('probability') and stage.on_change:
+ stage = self.pool.get('crm.case.stage').browse(cr, uid, vals['stage_id'], context=context)
+ if stage.on_change:
vals['probability'] = stage.probability
- for case in self.browse(cr, uid, ids, context=context):
- message = _("Stage changed to %s.") % (stage.name)
- case.message_append_note(body=message)
return super(crm_lead,self).write(cr, uid, ids, vals, context)
# ----------------------------------------
@@ -837,6 +881,11 @@ class crm_lead(crm_case, osv.osv):
sub_ids.append(obj.user_id.id)
return self.pool.get('res.users').read(cr, uid, sub_ids, context=context)
+ def stage_set_send_note(self, cr, uid, ids, stage_id, context=None):
+ """ Override of the (void) default notification method. """
+ stage_name = self.pool.get('crm.case.stage').name_get(cr, uid, [stage_id], context=context)[0][1]
+ return self.message_append_note(cr, uid, ids, body= _("Stage changed to %s.") % (stage_name), context=context)
+
def case_get_note_msg_prefix(self, cr, uid, lead, context=None):
if isinstance(lead, (int, long)):
lead = self.browse(cr, uid, [lead], context=context)[0]
diff --git a/addons/crm/crm_lead_data.xml b/addons/crm/crm_lead_data.xml
index aaa00307bfe..306a35924a9 100644
--- a/addons/crm/crm_lead_data.xml
+++ b/addons/crm/crm_lead_data.xml
@@ -3,47 +3,81 @@
-
- Lost
-
-
-
- New
+ draft
-
+
+ both
- Qualification
+ Opportunity
+ open
-
+
+ lead
- Proposition
+ Qualification
-
-
+ open
+
+
+ opportunity
- Negotiation
+ Proposition
-
-
+ open
+
+
+ opportunity
+ Negotiation
+
+ open
+
+
+ opportunity
+
+ Won
+ done
+ opportunity
+
+ Dead
+
+
+ cancel
+
+
+ lead
+
+
+ Lost
+
+
+ cancel
+
+
+ opportunity
+
+
Sales DepartmentSales
-
+
diff --git a/addons/crm/crm_lead_demo.xml b/addons/crm/crm_lead_demo.xml
index 19987f8f61a..21c7f9e31ab 100644
--- a/addons/crm/crm_lead_demo.xml
+++ b/addons/crm/crm_lead_demo.xml
@@ -8,14 +8,13 @@
lead
-
-
-
-
-
+
+
+
+
@@ -29,18 +28,17 @@
lead
-
+
-
-
-
-
-
+
+
+
+
-
+
@@ -50,15 +48,14 @@
lead
-
-
-
-
+
+
+
-
+
@@ -68,10 +65,9 @@
lead
-
-
-
-
+
+
+
@@ -87,16 +83,15 @@
lead
-
-
-
-
-
+
+
+
+
-
+
@@ -110,15 +105,14 @@
lead
-
-
-
-
-
+
+
+
+
-
+
@@ -130,15 +124,14 @@
lead
-
-
-
-
-
+
+
+
+
-
+
@@ -149,17 +142,16 @@
lead
-
-
-
-
-
+
+
+
+
-
+
@@ -168,17 +160,16 @@
lead
-
-
-
-
-
+
+
+
+
-
+
@@ -186,9 +177,8 @@
lead
-
-
+
@@ -198,12 +188,11 @@
lead
-
-
+
-
+
@@ -212,28 +201,15 @@
lead
-
-
-
-
-
-
-
-
+
@@ -245,11 +221,10 @@
-
-
+
@@ -260,12 +235,11 @@
-
-
+
@@ -283,12 +257,11 @@
-
-
+
@@ -299,19 +272,18 @@
-
+ opportunity
-
-
+
@@ -323,19 +295,18 @@
-
+ opportunity
-
-
+
@@ -354,12 +325,11 @@
-
-
+
@@ -372,11 +342,10 @@
-
-
+
@@ -395,40 +364,37 @@
-
-
+
-
+ opportunity
-
-
+
-
+ opportunity
-
-
+
@@ -439,7 +405,7 @@
-
+ opportunity
@@ -447,11 +413,10 @@
-
-
+ Thymbra
@@ -461,7 +426,7 @@
-
+ opportunity
@@ -469,11 +434,10 @@
-
-
+
@@ -484,26 +448,24 @@
-
+ opportunity
-
-
+ opportunity
-
diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml
index 3c2b8f48eb6..4536e31621c 100644
--- a/addons/crm/crm_lead_view.xml
+++ b/addons/crm/crm_lead_view.xml
@@ -1,35 +1,41 @@
-
+
-
-
- Stage - Search
- crm.case.stage
- search
-
-
-
-
-
-
+
-
-
- Stages
- crm.case.stage
- form
-
- Add specific stages to leads and opportunities allowing your sales to better organise their sales pipeline. Stages will allow them to easily track how a specific lead or opportunity is positioned in the sales cycle.
-
+
+
+ Stage - Search
+ crm.case.stage
+ search
+
+
+
+
+
+
+
+
-
+
+
+ Stages
+ crm.case.stage
+ form
+
+ Add specific stages to leads and opportunities allowing your sales to better organise their sales pipeline. Stages will allow them to easily track how a specific lead or opportunity is positioned in the sales cycle.
+
+
-
+
+
Categoriescrm.case.categ
@@ -44,6 +50,9 @@
id="menu_crm_lead_categ" name="Categories"
parent="base.menu_crm_config_lead" sequence="1" groups="base.group_no_one"/>
+
@@ -52,43 +61,28 @@
form
diff --git a/addons/crm/crm_phonecall.py b/addons/crm/crm_phonecall.py
index 309102ec366..9418b05b9ea 100644
--- a/addons/crm/crm_phonecall.py
+++ b/addons/crm/crm_phonecall.py
@@ -2,7 +2,7 @@
##############################################################################
#
# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
+# Copyright (C) 2004-today OpenERP SA ()
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -19,26 +19,22 @@
#
##############################################################################
-from crm import crm_base
-from osv import fields, osv
-from tools.translate import _
+from base_status.base_state import base_state
import crm
+from datetime import datetime
+from osv import fields, osv
import time
from tools import DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT, DATETIME_FORMATS_MAP
-from datetime import datetime
-
-class crm_phonecall(crm_base, osv.osv):
- """ Phonecall Cases """
+from tools.translate import _
+class crm_phonecall(base_state, osv.osv):
+ """ Model for CRM phonecalls """
_name = "crm.phonecall"
_description = "Phonecall"
_order = "id desc"
_inherit = ['ir.needaction_mixin', 'mail.thread']
_columns = {
- # From crm.case
- 'id': fields.integer('ID', readonly=True),
- 'name': fields.char('Call Summary', size=64, required=True),
- 'active': fields.boolean('Active', required=False),
+ # base_state required fields
'date_action_last': fields.datetime('Last Action', readonly=1),
'date_action_next': fields.datetime('Next Action', readonly=1),
'create_date': fields.datetime('Creation Date' , readonly=True),
@@ -48,20 +44,21 @@ class crm_phonecall(crm_base, osv.osv):
'partner_id': fields.many2one('res.partner', 'Partner'),
'company_id': fields.many2one('res.company', 'Company'),
'description': fields.text('Description'),
- 'state': fields.selection([
- ('draft', 'Draft'),
- ('open', 'Todo'),
+ 'state': fields.selection([ ('draft', 'Draft'),
+ ('open', 'Confirmed'),
('pending', 'Not Held'),
('cancel', 'Cancelled'),
- ('done', 'Held'),
- ], 'Status', size=16, readonly=True,
- help='The state is set to \'Todo\', when a case is created.\
- \nIf the case is in progress the state is set to \'Open\'.\
- \nWhen the call is over, the state is set to \'Held\'.\
- \nIf the call needs to be done then the state is set to \'Not Held\'.'),
+ ('done', 'Held'),],
+ string='Status', size=16, readonly=True,
+ help='The state is set to \'Todo\', when a case is created.\
+ If the case is in progress the state is set to \'Open\'.\
+ When the call is over, the state is set to \'Held\'.\
+ If the call needs to be done then the state is set to \'Not Held\'.'),
'email_from': fields.char('Email', size=128, help="These people will receive email."),
'date_open': fields.datetime('Opened', readonly=True),
# phonecall fields
+ 'name': fields.char('Call Summary', size=64, required=True),
+ 'active': fields.boolean('Active', required=False),
'duration': fields.float('Duration', help="Duration in Minutes"),
'categ_id': fields.many2one('crm.case.categ', 'Category', \
domain="['|',('section_id','=',section_id),('section_id','=',False),\
@@ -72,7 +69,6 @@ class crm_phonecall(crm_base, osv.osv):
'date_closed': fields.datetime('Closed', readonly=True),
'date': fields.datetime('Date'),
'opportunity_id': fields.many2one ('crm.lead', 'Lead/Opportunity'),
- 'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
}
def _get_default_state(self, cr, uid, context=None):
@@ -81,11 +77,10 @@ class crm_phonecall(crm_base, osv.osv):
return 'open'
_defaults = {
- 'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
+ 'date': fields.datetime.now,
'priority': crm.AVAILABLE_PRIORITIES[2][0],
'state': _get_default_state,
'user_id': lambda self,cr,uid,ctx: uid,
- 'active': 1,
}
def create(self, cr, uid, vals, context=None):
@@ -96,32 +91,23 @@ class crm_phonecall(crm_base, osv.osv):
return obj_id
def case_close(self, cr, uid, ids, context=None):
- """Overrides close for crm_case for setting close date
- """
+ """ Overrides close for crm_case for setting duration """
res = True
- for phone in self.browse(cr, uid, ids):
+ for phone in self.browse(cr, uid, ids, context=context):
phone_id = phone.id
- data = {'date_closed': time.strftime('%Y-%m-%d %H:%M:%S')}
+ data = {}
if phone.duration <=0:
- duration = datetime.now() - datetime.strptime(phone.date, '%Y-%m-%d %H:%M:%S')
- data.update({'duration': duration.seconds/float(60)})
- res = super(crm_phonecall, self).case_close(cr, uid, [phone_id], context)
- self.write(cr, uid, [phone_id], data)
+ duration = datetime.now() - datetime.strptime(phone.date, DEFAULT_SERVER_DATETIME_FORMAT)
+ data['duration'] = duration.seconds/float(60)
+ res = super(crm_phonecall, self).case_close(cr, uid, [phone_id], context=context)
+ self.write(cr, uid, [phone_id], data, context=context)
return res
def case_reset(self, cr, uid, ids, context=None):
"""Resets case as Todo
"""
res = super(crm_phonecall, self).case_reset(cr, uid, ids, context)
- self.write(cr, uid, ids, {'duration': 0.0, 'state':'open'})
- return res
-
-
- def case_open(self, cr, uid, ids, context=None):
- """Overrides cancel for crm_case for setting Open Date
- """
- res = super(crm_phonecall, self).case_open(cr, uid, ids, context)
- self.write(cr, uid, ids, {'date_open': time.strftime('%Y-%m-%d %H:%M:%S')})
+ self.write(cr, uid, ids, {'duration': 0.0, 'state':'open'}, context=context)
return res
def schedule_another_phonecall(self, cr, uid, ids, schedule_time, call_summary, \
@@ -300,7 +286,7 @@ class crm_phonecall(crm_base, osv.osv):
return value
# ----------------------------------------
- # OpenChatter methods and notifications
+ # OpenChatter
# ----------------------------------------
def get_needaction_user_ids(self, cr, uid, ids, context=None):
@@ -336,9 +322,6 @@ class crm_phonecall(crm_base, osv.osv):
def _call_set_partner_send_note(self, cr, uid, ids, context=None):
return self.message_append_note(cr, uid, ids, body=_("Partner has been created"), context=context)
-
-
-crm_phonecall()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/crm/crm_phonecall_view.xml b/addons/crm/crm_phonecall_view.xml
index 55d8d8c9a64..2e1c35e683a 100644
--- a/addons/crm/crm_phonecall_view.xml
+++ b/addons/crm/crm_phonecall_view.xml
@@ -43,10 +43,14 @@
states="open,pending" icon="gtk-redo"
name="action_make_meeting" type="object" />
-
-
-
-
+
+
+
+
@@ -59,17 +63,17 @@
form
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -117,7 +121,7 @@
-
+
diff --git a/addons/crm/crm_view.xml b/addons/crm/crm_view.xml
index dd24ef38911..c8f019e685b 100644
--- a/addons/crm/crm_view.xml
+++ b/addons/crm/crm_view.xml
@@ -143,6 +143,8 @@
+
+
@@ -162,6 +164,9 @@
+
+
+
diff --git a/addons/crm/i18n/nl.po b/addons/crm/i18n/nl.po
index 1baa8e962a6..a176db67234 100644
--- a/addons/crm/i18n/nl.po
+++ b/addons/crm/i18n/nl.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 01:37+0100\n"
-"PO-Revision-Date: 2012-02-16 14:00+0000\n"
+"PO-Revision-Date: 2012-06-01 08:42+0000\n"
"Last-Translator: Erwin \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: 2012-05-11 04:44+0000\n"
-"X-Generator: Launchpad (build 15225)\n"
+"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
#. module: crm
#: view:crm.lead.report:0
@@ -172,7 +172,7 @@ msgstr "Verwachte besluit maand"
#. module: crm
#: view:crm.lead2opportunity.partner.mass:0
msgid "Assigned Opportunities to"
-msgstr ""
+msgstr "Toegewezen porspects aan"
#. module: crm
#: view:crm.lead:0 field:crm.lead,partner_id:0 view:crm.lead.report:0
@@ -599,7 +599,7 @@ msgstr "Einddatum"
#. module: crm
#: view:crm.opportunity2phonecall:0 view:crm.phonecall2phonecall:0
msgid "Schedule/Log a Call"
-msgstr ""
+msgstr "Plan/Log een gesprek"
#. module: crm
#: constraint:base.action.rule:0
@@ -792,7 +792,7 @@ msgstr "Doorgaan"
#. module: crm
#: field:crm.segmentation,som_interval:0
msgid "Days per Period"
-msgstr ""
+msgstr "Dagen per periode"
#. module: crm
#: field:crm.meeting,byday:0
@@ -960,7 +960,7 @@ msgstr "Dagen voor openen"
#. module: crm
#: view:crm.meeting:0
msgid "Show Time as"
-msgstr ""
+msgstr "Tijd weergeven als"
#. module: crm
#: view:crm.phonecall2partner:0
@@ -1344,7 +1344,7 @@ msgstr "Schrijfdatum"
#. module: crm
#: view:crm.meeting:0
msgid "End of Recurrency"
-msgstr ""
+msgstr "Einde herhaling"
#. module: crm
#: view:crm.meeting:0
@@ -1907,7 +1907,7 @@ msgstr "Antwoord aan"
#. module: crm
#: view:crm.case.section:0
msgid "Select Stages for this Sales Team"
-msgstr ""
+msgstr "Selecteer de fases voor dit verkoopteam"
#. module: crm
#: view:board.board:0
@@ -2779,7 +2779,7 @@ msgstr "E-mail adres van de contactpersoon"
#. module: crm
#: field:crm.lead,referred:0
msgid "Referred by"
-msgstr ""
+msgstr "Gerefereerd door"
#. module: crm
#: view:crm.lead:0 model:ir.model,name:crm.model_crm_add_note
diff --git a/addons/crm/i18n/pt.po b/addons/crm/i18n/pt.po
index 10a2ca3571f..89f79d998b4 100644
--- a/addons/crm/i18n/pt.po
+++ b/addons/crm/i18n/pt.po
@@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 6.0dev\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 01:37+0100\n"
-"PO-Revision-Date: 2011-01-19 00:40+0000\n"
-"Last-Translator: Tiago Baptista \n"
+"PO-Revision-Date: 2012-05-31 15:17+0000\n"
+"Last-Translator: ThinkOpen Solutions \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: 2012-05-11 04:45+0000\n"
-"X-Generator: Launchpad (build 15225)\n"
+"X-Launchpad-Export-Date: 2012-06-01 05:32+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
#. module: crm
#: view:crm.lead.report:0
@@ -792,7 +792,7 @@ msgstr "Continuar"
#. module: crm
#: field:crm.segmentation,som_interval:0
msgid "Days per Period"
-msgstr ""
+msgstr "Dias por Periodo"
#. module: crm
#: field:crm.meeting,byday:0
@@ -959,7 +959,7 @@ msgstr "Dias para abrir"
#. module: crm
#: view:crm.meeting:0
msgid "Show Time as"
-msgstr ""
+msgstr "Mostrar horas como"
#. module: crm
#: view:crm.phonecall2partner:0
diff --git a/addons/crm/test/process/cancel_lead.yml b/addons/crm/test/process/cancel_lead.yml
index ca5f7d0174a..34dd8310022 100644
--- a/addons/crm/test/process/cancel_lead.yml
+++ b/addons/crm/test/process/cancel_lead.yml
@@ -6,8 +6,11 @@
-
I check cancelled lead.
-
- !assert {model: crm.lead, id: crm.crm_case_itisatelesalescampaign0, string: Lead is in cancel state}:
- - state == "cancel"
+ !python {model: crm.lead}: |
+ lead = self.browse(cr, uid, ref('crm_case_itisatelesalescampaign0'))
+ assert lead.stage_id.id == ref('crm.stage_lead7'), "Stage should be 'Dead' and is %s." % (lead.stage_id.name)
+ assert lead.state == 'cancel', "Opportunity is not in 'cancel' state."
+ assert lead.probability == 0.0, 'Opportunity probability is wrong and should be 0.0.'
-
I reset cancelled lead into unqualified lead.
-
@@ -19,35 +22,24 @@
!assert {model: crm.lead, id: crm.crm_case_itisatelesalescampaign0, string: Lead is in draft state}:
- state == "draft"
-
- I put unqualified lead into pending.
+ I re-open the lead
-
!python {model: crm.lead}: |
- self.case_pending(cr, uid, [ref("crm_case_itisatelesalescampaign0")])
+ self.case_open(cr, uid, [ref("crm_case_itisatelesalescampaign0")])
-
- I check status of pending lead.
+ I check stage and state of the re-opened lead
-
- !assert {model: crm.lead, id: crm.crm_case_itisatelesalescampaign0, string: Lead is in pending state}:
- - state == "pending"
+ !python {model: crm.lead}: |
+ lead = self.browse(cr, uid, ref('crm.crm_case_itisatelesalescampaign0'))
+ assert lead.stage_id.id == ref('crm.stage_lead2'), "Opportunity stage should be 'Qualification'."
+ assert lead.state == 'open', "Opportunity should be in 'open' state."
-
I escalate the lead to parent team.
-
!python {model: crm.lead}: |
self.case_escalate(cr, uid, [ref("crm_case_itisatelesalescampaign0")])
-
- I check lead escalate to parent team.
+ I check the lead is correctly escalated to the parent team.
-
!assert {model: crm.lead, id: crm.crm_case_itisatelesalescampaign0, string: Escalate lead to parent team}:
- section_id.name == "Sales Department"
--
- I mark as lost the opportunity.
--
- !python {model: crm.lead}: |
- self.case_mark_lost(cr, uid, [ref("crm_case_itisatelesalescampaign0")])
--
- I check opportunity after lost.
--
- !python {model: crm.lead}: |
- lead = self.browse(cr, uid, ref('crm_case_itisatelesalescampaign0'))
- assert lead.state == 'done', "lead is not done state"
- assert lead.stage_id.id == ref('crm.stage_lead6'), 'Stage is not changed!'
- assert lead.probability == 0.0, 'Probability is wrong!'
diff --git a/addons/crm/test/process/lead2opportunity2win.yml b/addons/crm/test/process/lead2opportunity2win.yml
index a5b6c421dbb..c1caf394c2e 100644
--- a/addons/crm/test/process/lead2opportunity2win.yml
+++ b/addons/crm/test/process/lead2opportunity2win.yml
@@ -51,7 +51,6 @@
-
!python {model: crm.lead}: |
self.action_makeMeeting(cr, uid, [ref('crm_case_qrecorp0')])
-
-
After communicated with customer, I put some notes with contract details.
-
@@ -60,18 +59,18 @@
note_id = self.create(cr, uid, {'body': "ces détails envoyés par le client sur le FAX pour la qualité"})
self.action_add(cr, uid, [note_id], context=context)
-
- Finally, I won this opportunity, so I close this opportunity.
+ I win this opportunity
-
!python {model: crm.lead}: |
self.case_mark_won(cr, uid, [ref("crm_case_qrecorp0")])
-
- I check details of the opportunity after won the opportunity.
+ I check details of the opportunity after having won the opportunity.
-
!python {model: crm.lead}: |
lead = self.browse(cr, uid, ref('crm_case_qrecorp0'))
- assert lead.state == 'done', 'Opportunity is not in done state!'
- assert lead.stage_id.name == 'Won', ' Stage of Opportunity is not win!'
- assert lead.probability == 100.0, 'probability revenue should not be 100.0!'
+ assert lead.stage_id.id == ref('crm.stage_lead6'), "Opportunity stage should be 'Won'."
+ assert lead.state == 'done', "Opportunity is not in 'done' state!"
+ assert lead.probability == 100.0, "Revenue probability should be 100.0!"
-
I convert mass lead into opportunity customer.
-
@@ -96,6 +95,19 @@
assert opp.name == "Interest in Your New Product", "Opportunity name not correct"
assert opp.type == 'opportunity', 'Lead is not converted to opportunity!'
assert opp.stage_id.id == ref("stage_lead1"), 'Stage of probability is incorrect!'
+-
+ I loose the second opportunity
+-
+ !python {model: crm.lead}: |
+ self.case_mark_lost(cr, uid, [ref("crm_case_electonicgoodsdealer0")])
+-
+ I check details of the opportunity after the loose
+-
+ !python {model: crm.lead}: |
+ lead = self.browse(cr, uid, ref('crm_case_electonicgoodsdealer0'))
+ assert lead.stage_id.id == ref('crm.stage_lead8'), "Opportunity stage should be 'Lost'."
+ assert lead.state == 'cancel', "Lost opportunity is not in 'cancel' state!"
+ assert lead.probability == 0.0, "Revenue probability should be 0.0!"
-
I confirm review needs meeting.
-
diff --git a/addons/crm/wizard/crm_opportunity_to_phonecall_view.xml b/addons/crm/wizard/crm_opportunity_to_phonecall_view.xml
index 9c4f1361e7c..d0499bbdf6c 100644
--- a/addons/crm/wizard/crm_opportunity_to_phonecall_view.xml
+++ b/addons/crm/wizard/crm_opportunity_to_phonecall_view.xml
@@ -2,40 +2,44 @@
-
+
crm.opportunity2phonecall.formcrm.opportunity2phonecallform
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+ Schedule/Log Callcrm.opportunity2phonecallform
diff --git a/addons/crm_claim/crm_claim.py b/addons/crm_claim/crm_claim.py
index 1b6d386b0cc..808ad2e2055 100644
--- a/addons/crm_claim/crm_claim.py
+++ b/addons/crm_claim/crm_claim.py
@@ -2,7 +2,7 @@
##############################################################################
#
# OpenERP, Open Source Management Solution
-# Copyright (C) 2004-2010 Tiny SPRL ().
+# Copyright (C) 2004-today OpenERP SA ()
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -19,25 +19,57 @@
#
##############################################################################
-from osv import fields, osv
-from crm import crm
-import time
-from crm import wizard
+from base_status.base_stage import base_stage
import binascii
+from crm import crm
+from crm import wizard
+from osv import fields, osv
+import time
import tools
from tools.translate import _
wizard.mail_compose_message.SUPPORTED_MODELS.append('crm.claim')
+
CRM_CLAIM_PENDING_STATES = (
crm.AVAILABLE_STATES[2][0], # Cancelled
crm.AVAILABLE_STATES[3][0], # Done
crm.AVAILABLE_STATES[4][0], # Pending
)
-
-class crm_claim(crm.crm_case, osv.osv):
+class crm_claim_stage(osv.osv):
+ """ Model for claim stages. This models the main stages of a claim
+ management flow. Main CRM objects (leads, opportunities, project
+ issues, ...) will now use only stages, instead of state and stages.
+ Stages are for example used to display the kanban view of records.
"""
- Crm claim
+ _name = "crm.claim.stage"
+ _description = "Claim stages"
+ _rec_name = 'name'
+ _order = "sequence"
+
+ _columns = {
+ 'name': fields.char('Stage Name', size=64, required=True, translate=True),
+ 'sequence': fields.integer('Sequence', help="Used to order stages. Lower is better."),
+ 'section_ids':fields.many2many('crm.case.section', 'section_claim_stage_rel', 'stage_id', 'section_id', string='Sections',
+ help="Link between stages and sales teams. When set, this limitate the current stage to the selected sales teams."),
+ 'state': fields.selection(crm.AVAILABLE_STATES, 'State', required=True, help="The related state for the stage. The state of your document will automatically change regarding the selected stage. For example, if a stage is related to the state 'Close', when your document reaches this stage, it will be automatically have the 'closed' state."),
+ 'case_refused': fields.boolean('Refused stage',
+ help='Refused stages are specific stages for done.'),
+ 'case_default': fields.boolean('Common to All Teams',
+ help="If you check this field, this stage will be proposed by default on each sales team. It will not assign this stage to existing teams."),
+ 'fold': fields.boolean('Hide in Views when Empty',
+ help="This stage is not visible, for example in status bar or kanban view, when there are no records in that stage to display."),
+ }
+
+ _defaults = {
+ 'sequence': lambda *args: 1,
+ 'state': 'draft',
+ 'fold': False,
+ 'case_refused': False,
+ }
+
+class crm_claim(base_stage, osv.osv):
+ """ Crm claim
"""
_name = "crm.claim"
_description = "Claim"
@@ -73,30 +105,71 @@ class crm_claim(crm.crm_case, osv.osv):
'email_cc': fields.text('Watchers Emails', size=252, help="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"),
'email_from': fields.char('Email', size=128, help="These people will receive email."),
'partner_phone': fields.char('Phone', size=32),
- 'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('section_ids','=',section_id)]"),
+ 'stage_id': fields.many2one ('crm.claim.stage', 'Stage',
+ domain="['|', ('section_ids', '=', section_id), ('case_default', '=', True)]"),
'cause': fields.text('Root Cause'),
- 'state': fields.selection(crm.AVAILABLE_STATES, 'Status', size=16, readonly=True,
- help='The state is set to \'Draft\', when a case is created.\
- \nIf the case is in progress the state is set to \'Open\'.\
- \nWhen the case is over, the state is set to \'Done\'.\
- \nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
- 'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
+ 'state': fields.related('stage_id', 'state', type="selection", store=True,
+ selection=crm.AVAILABLE_STATES, string="State", readonly=True,
+ help='The state is set to \'Draft\', when a case is created.\
+ If the case is in progress the state is set to \'Open\'.\
+ When the case is over, the state is set to \'Done\'.\
+ If the case needs to be reviewed then the state is \
+ set to \'Pending\'.'),
}
_defaults = {
- 'user_id': crm.crm_case._get_default_user,
- 'partner_id': crm.crm_case._get_default_partner,
- 'email_from':crm.crm_case. _get_default_email,
- 'state': lambda *a: 'draft',
- 'section_id':crm.crm_case. _get_section,
- 'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
+ 'user_id': lambda s, cr, uid, c: s._get_default_user(cr, uid, c),
+ 'partner_id': lambda s, cr, uid, c: s._get_default_partner(cr, uid, c),
+ 'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c),
+ 'section_id': lambda s, cr, uid, c: s._get_default_section_id(cr, uid, c),
+ 'date': fields.datetime.now,
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.case', context=c),
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
'active': lambda *a: 1
}
- def case_get_note_msg_prefix(self, cr, uid, id, context=None):
- return 'Claim'
+ def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None):
+ """ Override of the base.stage method
+ Parameter of the stage search taken from the lead:
+ - section_id: if set, stages must belong to this section or
+ be a default case
+ """
+ if isinstance(cases, (int, long)):
+ cases = self.browse(cr, uid, cases, context=context)
+ # collect all section_ids
+ section_ids = []
+ if section_id:
+ section_ids.append(section_id)
+ for claim in cases:
+ if claim.section_id:
+ section_ids.append(claim.section_id.id)
+ # OR all section_ids and OR with case_default
+ search_domain = []
+ if section_ids:
+ search_domain += [('|')] * len(section_ids)
+ for section_id in section_ids:
+ search_domain.append(('section_ids', '=', section_id))
+ search_domain.append(('case_default', '=', True))
+ # AND with the domain in parameter
+ search_domain += list(domain)
+ # perform search, return the first found
+ stage_ids = self.pool.get('crm.claim.stage').search(cr, uid, search_domain, order=order, context=context)
+ if stage_ids:
+ return stage_ids[0]
+ return False
+
+ def create(self, cr, uid, vals, context=None):
+ obj_id = super(crm_claim, self).create(cr, uid, vals, context)
+ self.create_send_note(cr, uid, [obj_id], context=context)
+ return obj_id
+
+ def case_refuse(self, cr, uid, ids, context=None):
+ """ Mark the case as refused: state=done and case_refused=True """
+ for lead in self.browse(cr, uid, ids):
+ stage_id = self.stage_find(cr, uid, [lead], lead.section_id.id or False, ['&', ('state', '=', 'done'), ('case_refused', '=', True)], context=context)
+ if stage_id:
+ self.case_set(cr, uid, [lead.id], values_to_update={}, new_stage_id=stage_id, context=context)
+ return self.case_refuse_send_note(cr, uid, ids, context=context)
def onchange_partner_id(self, cr, uid, ids, part, email=False):
"""This function returns value of partner address based on partner
@@ -110,19 +183,6 @@ class crm_claim(crm.crm_case, osv.osv):
}
address = self.pool.get('res.partner').browse(cr, uid, part)
return {'value': {'email_from': address.email, 'partner_phone': address.phone}}
-
- def case_open(self, cr, uid, ids, *args):
- """Opens Claim"""
- for l in self.browse(cr, uid, ids):
- # When coming from draft override date and stage otherwise just set state
- if l.state == 'draft':
- message = _("The claim '%s' has been opened.") % l.name
- self.log(cr, uid, l.id, message)
- stage_id = self.stage_find(cr, uid, l.section_id.id or False, [('sequence','>',0)])
- if stage_id:
- self.stage_set(cr, uid, [l.id], stage_id)
- res = super(crm_claim, self).case_open(cr, uid, ids, *args)
- return res
def message_new(self, cr, uid, msg, custom_values=None, context=None):
"""Automatically called when new email message arrives"""
@@ -177,6 +237,28 @@ class crm_claim(crm.crm_case, osv.osv):
res = self.write(cr, uid, [case.id], values, context=context)
return res
+ # ---------------------------------------------------
+ # OpenChatter methods and notifications
+ # ---------------------------------------------------
+
+ def case_get_note_msg_prefix(self, cr, uid, id, context=None):
+ """ Override of default prefix for notifications. """
+ return 'Claim'
+
+ def create_send_note(self, cr, uid, ids, context=None):
+ msg = _('Claim has been created.')
+ return self.message_append_note(cr, uid, ids, body=msg, context=context)
+
+ def case_refuse_send_note(self, cr, uid, ids, context=None):
+ msg = _('Claim has been refused.')
+ return self.message_append_note(cr, uid, ids, body=msg, context=context)
+
+ def stage_set_send_note(self, cr, uid, ids, stage_id, context=None):
+ """ Override of the (void) default notification method. """
+ stage_name = self.pool.get('crm.claim.stage').name_get(cr, uid, [stage_id], context=context)[0][1]
+ return self.message_append_note(cr, uid, ids, body= _("Stage changed to %s.") % (stage_name), context=context)
+
+
class res_partner(osv.osv):
_inherit = 'res.partner'
_columns = {
diff --git a/addons/crm_claim/crm_claim_data.xml b/addons/crm_claim/crm_claim_data.xml
index 5b3a2b0ed2a..33bd280c364 100644
--- a/addons/crm_claim/crm_claim_data.xml
+++ b/addons/crm_claim/crm_claim_data.xml
@@ -42,27 +42,39 @@
Case Stage
-->
-
- Accepted as Claim
+
+ Draft claim
+ draft26
+
-
+ Actions Defined
+ open27
+
-
+ Actions Done
+ done28
+
-
- Won't fix
+
+ Refused
+ done29
+
+
+
+
+
+ Cancelled
+ cancel
+ 30
+
+
-
- Sales Department
- Sales
-
-
diff --git a/addons/crm_claim/crm_claim_demo.xml b/addons/crm_claim/crm_claim_demo.xml
index 592e655b489..0e368bcdffa 100644
--- a/addons/crm_claim/crm_claim_demo.xml
+++ b/addons/crm_claim/crm_claim_demo.xml
@@ -12,7 +12,6 @@
-
@@ -25,7 +24,6 @@
-
@@ -38,7 +36,6 @@
-
@@ -52,7 +49,6 @@
-
@@ -65,7 +61,6 @@
-
@@ -77,7 +72,6 @@
-
@@ -91,7 +85,6 @@
-
diff --git a/addons/crm_claim/crm_claim_menu.xml b/addons/crm_claim/crm_claim_menu.xml
index 734302fa7f9..75bfd9ce211 100644
--- a/addons/crm_claim/crm_claim_menu.xml
+++ b/addons/crm_claim/crm_claim_menu.xml
@@ -50,5 +50,10 @@
+
+
+
+
+
diff --git a/addons/crm_claim/crm_claim_view.xml b/addons/crm_claim/crm_claim_view.xml
index 57a8827d528..4e49a0d9db8 100644
--- a/addons/crm_claim/crm_claim_view.xml
+++ b/addons/crm_claim/crm_claim_view.xml
@@ -23,12 +23,40 @@
+
+ crm.claim.stage.tree
+ crm.claim.stage
+ tree
+
+
+
+
+
+
+
+
+
+
+ crm.claim.stage.form
+ crm.claim.stage
+ form
+
+
+
+
+
+
+
+
+
+
+
+
Claim Stages
- crm.case.stage
+ crm.claim.stageform
-
- {'search_default_claim':1}
+ You can create claim stages to categorize the status of every claim entered in the system. The stages define all the steps required for the resolution of a claim.
@@ -44,19 +72,13 @@
+
-
-
-
-
+
@@ -67,17 +89,24 @@
form
diff --git a/addons/hr_recruitment/hr_recruitment.py b/addons/hr_recruitment/hr_recruitment.py
index cd3d0c6b11c..7fd3a7bb403 100644
--- a/addons/hr_recruitment/hr_recruitment.py
+++ b/addons/hr_recruitment/hr_recruitment.py
@@ -19,6 +19,7 @@
#
##############################################################################
+from base_status.base_stage import base_stage
import time
from datetime import datetime, timedelta
@@ -57,8 +58,6 @@ class hr_recruitment_source(osv.osv):
_columns = {
'name': fields.char('Source Name', size=64, required=True, translate=True),
}
-hr_recruitment_source()
-
class hr_recruitment_stage(osv.osv):
""" Stage of HR Recruitment """
@@ -69,12 +68,15 @@ class hr_recruitment_stage(osv.osv):
'name': fields.char('Name', size=64, required=True, translate=True),
'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of stages."),
'department_id':fields.many2one('hr.department', 'Specific to a Department', help="Stages of the recruitment process may be different per department. If this stage is common to all departments, keep tempy this field."),
- 'requirements': fields.text('Requirements')
+ 'state': fields.selection(AVAILABLE_STATES, 'State', required=True, help="The related state for the stage. The state of your document will automatically change regarding the selected stage. Example, a stage is related to the state 'Close', when your document reach this stage, it will be automatically closed."),
+ 'fold': fields.boolean('Hide in views if empty', help="This stage is not visible, for example in status bar or kanban view, when there are no records in that stage to display."),
+ 'requirements': fields.text('Requirements'),
}
_defaults = {
'sequence': 1,
+ 'state': 'draft',
+ 'fold': False,
}
-hr_recruitment_stage()
class hr_recruitment_degree(osv.osv):
""" Degree of HR Recruitment """
@@ -90,14 +92,60 @@ class hr_recruitment_degree(osv.osv):
_sql_constraints = [
('name_uniq', 'unique (name)', 'The name of the Degree of Recruitment must be unique!')
]
-hr_recruitment_degree()
-class hr_applicant(crm.crm_case, osv.osv):
+class hr_applicant(base_stage, osv.Model):
_name = "hr.applicant"
_description = "Applicant"
_order = "id desc"
_inherit = ['ir.needaction_mixin', 'mail.thread']
+ def _get_default_department_id(self, cr, uid, context=None):
+ """ Gives default department by checking if present in the context """
+ return (self._resolve_department_id_from_context(cr, uid, context=context) or False)
+
+ def _get_default_stage_id(self, cr, uid, context=None):
+ """ Gives default stage_id """
+ department_id = self._get_default_department_id(cr, uid, context=context)
+ return self.stage_find(cr, uid, [], department_id, [('state', '=', 'draft')], context=context)
+
+ def _resolve_department_id_from_context(self, cr, uid, context=None):
+ """ Returns ID of department based on the value of 'default_department_id'
+ context key, or None if it cannot be resolved to a single
+ department.
+ """
+ if context is None:
+ context = {}
+ if type(context.get('default_department_id')) in (int, long):
+ return context.get('default_department_id')
+ if isinstance(context.get('default_department_id'), basestring):
+ department_name = context['default_department_id']
+ department_ids = self.pool.get('hr.department').name_search(cr, uid, name=department_name, context=context)
+ if len(department_ids) == 1:
+ return int(department_ids[0][0])
+ return None
+
+ def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None):
+ access_rights_uid = access_rights_uid or uid
+ stage_obj = self.pool.get('hr.recruitment.stage')
+ order = stage_obj._order
+ # lame hack to allow reverting search, should just work in the trivial case
+ if read_group_order == 'stage_id desc':
+ order = "%s desc" % order
+ # retrieve section_id from the context and write the domain
+ # - ('id', 'in', 'ids'): add columns that should be present
+ # - OR ('department_id', '=', False), ('fold', '=', False): add default columns that are not folded
+ # - OR ('department_id', 'in', department_id), ('fold', '=', False) if department_id: add department columns that are not folded
+ department_id = self._resolve_department_id_from_context(cr, uid, context=context)
+ search_domain = []
+ if department_id:
+ search_domain += ['|', '&', ('department_id', '=', department_id), ('fold', '=', False)]
+ search_domain += ['|', ('id', 'in', ids), '&', ('department_id', '=', False), ('fold', '=', False)]
+ stage_ids = stage_obj._search(cr, uid, search_domain, order=order, access_rights_uid=access_rights_uid, context=context)
+ result = stage_obj.name_get(cr, access_rights_uid, stage_ids, context=context)
+ # restore order of the search
+ result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0])))
+ return result
+
def _compute_day(self, cr, uid, ids, fields, args, context=None):
"""
@param cr: the current row, from the database cursor,
@@ -134,7 +182,6 @@ class hr_applicant(crm.crm_case, osv.osv):
_columns = {
'name': fields.char('Name', size=128, required=True),
- 'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
'active': fields.boolean('Active', help="If the active field is set to false, it will allow you to hide the case without removing it."),
'description': fields.text('Description'),
'email_from': fields.char('Email', size=128, help="These people will receive email."),
@@ -143,12 +190,15 @@ class hr_applicant(crm.crm_case, osv.osv):
'partner_id': fields.many2one('res.partner', 'Contact Name'),
'create_date': fields.datetime('Creation Date', readonly=True, select=True),
'write_date': fields.datetime('Update Date', readonly=True),
- 'stage_id': fields.many2one ('hr.recruitment.stage', 'Stage'),
- 'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True,
- help='The state is set to \'Draft\', when a case is created.\
- \nIf the case is in progress the state is set to \'Open\'.\
- \nWhen the case is over, the state is set to \'Done\'.\
- \nIf the case needs to be reviewed then the state is set to \'Pending\'.'),
+ 'stage_id': fields.many2one ('hr.recruitment.stage', 'Stage',
+ domain="['|', ('department_id', '=', department_id), ('department_id', '=', False)]"),
+ 'state': fields.related('stage_id', 'state', type="selection", store=True,
+ selection=AVAILABLE_STATES, string="State", readonly=True,
+ help='The state is set to \'Draft\', when a case is created.\
+ If the case is in progress the state is set to \'Open\'.\
+ When the case is over, the state is set to \'Done\'.\
+ If the case needs to be reviewed then the state is \
+ set to \'Pending\'.'),
'company_id': fields.many2one('res.company', 'Company'),
'user_id': fields.many2one('res.users', 'Responsible'),
# Applicant Columns
@@ -169,7 +219,6 @@ class hr_applicant(crm.crm_case, osv.osv):
'partner_mobile': fields.char('Mobile', size=32),
'type_id': fields.many2one('hr.recruitment.degree', 'Degree'),
'department_id': fields.many2one('hr.department', 'Department'),
- 'state': fields.selection(AVAILABLE_STATES, 'Status', size=16, readonly=True),
'survey': fields.related('job_id', 'survey_id', type='many2one', relation='survey', string='Survey'),
'response': fields.integer("Response"),
'reference': fields.char('Referred By', size=128),
@@ -185,33 +234,19 @@ class hr_applicant(crm.crm_case, osv.osv):
_defaults = {
'active': lambda *a: 1,
- 'user_id': lambda self, cr, uid, context: uid,
- 'email_from': crm.crm_case. _get_default_email,
- 'state': lambda *a: 'draft',
+ 'user_id': lambda s, cr, uid, c: uid,
+ 'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c),
+ 'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c),
+ 'department_id': lambda s, cr, uid, c: s._get_default_department_id(cr, uid, c),
'priority': lambda *a: '',
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c),
'color': 0,
}
- def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None):
- access_rights_uid = access_rights_uid or uid
- stage_obj = self.pool.get('hr.recruitment.stage')
- order = stage_obj._order
- if read_group_order == 'stage_id desc':
- # lame hack to allow reverting search, should just work in the trivial case
- order = "%s desc" % order
- stage_ids = stage_obj._search(cr, uid, ['|',('id','in',ids),('department_id','=',False)], order=order,
- access_rights_uid=access_rights_uid, context=context)
- result = stage_obj.name_get(cr, access_rights_uid, stage_ids, context=context)
- # restore order of the search
- result.sort(lambda x,y: cmp(stage_ids.index(x[0]), stage_ids.index(y[0])))
- return result
-
_group_by_full = {
'stage_id': _read_group_stage_ids
}
-
def onchange_job(self,cr, uid, ids, job, context=None):
result = {}
@@ -229,47 +264,33 @@ class hr_applicant(crm.crm_case, osv.osv):
stage_id = stage_ids and stage_ids[0] or False
return {'value': {'stage_id': stage_id}}
- def stage_previous(self, cr, uid, ids, context=None):
- """This function computes previous stage for case from its current stage
- using available stage for that case type
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of case IDs
- @param context: A standard dictionary for contextual values"""
- stage_obj = self.pool.get('hr.recruitment.stage')
- for case in self.browse(cr, uid, ids, context=context):
- department = (case.department_id.id or False)
- st = case.stage_id.id or False
- stage_ids = stage_obj.search(cr, uid, ['|',('department_id','=',department),('department_id','=',False)], context=context)
- if st and stage_ids.index(st):
- self.write(cr, uid, [case.id], {'stage_id': stage_ids[stage_ids.index(st)-1]}, context=context)
- else:
- self.write(cr, uid, [case.id], {'stage_id': False}, context=context)
- return True
-
- def stage_next(self, cr, uid, ids, context=None):
- """This function computes next stage for case from its current stage
- using available stage for that case type
- @param self: The object pointer
- @param cr: the current row, from the database cursor,
- @param uid: the current user’s ID for security checks,
- @param ids: List of case IDs
- @param context: A standard dictionary for contextual values"""
- stage_obj = self.pool.get('hr.recruitment.stage')
- for case in self.browse(cr, uid, ids, context=context):
- department = (case.department_id.id or False)
- st = case.stage_id.id or False
- stage_ids = stage_obj.search(cr, uid, ['|',('department_id','=',department),('department_id','=',False)], context=context)
- val = False
- if st and len(stage_ids) != stage_ids.index(st)+1:
- val = stage_ids[stage_ids.index(st)+1]
- elif (not st) and stage_ids:
- val = stage_ids[0]
- else:
- val = False
- self.write(cr, uid, [case.id], {'stage_id': val}, context=context)
- return True
+ def stage_find(self, cr, uid, cases, section_id, domain=[], order='sequence', context=None):
+ """ Override of the base.stage method
+ Parameter of the stage search taken from the lead:
+ - department_id: if set, stages must belong to this section or
+ be a default case
+ """
+ if isinstance(cases, (int, long)):
+ cases = self.browse(cr, uid, cases, context=context)
+ # collect all section_ids
+ department_ids = []
+ if section_id:
+ department_ids.append(section_id)
+ for case in cases:
+ if case.department_id:
+ department_ids.append(case.department_id.id)
+ # OR all section_ids and OR with case_default
+ search_domain = []
+ if department_ids:
+ search_domain += ['|', ('department_id', 'in', department_ids)]
+ search_domain.append(('department_id', '=', False))
+ # AND with the domain in parameter
+ search_domain += list(domain)
+ # perform search, return the first found
+ stage_ids = self.pool.get('hr.recruitment.stage').search(cr, uid, search_domain, order=order, context=context)
+ if stage_ids:
+ return stage_ids[0]
+ return False
def action_makeMeeting(self, cr, uid, ids, context=None):
"""
@@ -475,12 +496,6 @@ class hr_applicant(crm.crm_case, osv.osv):
"""
return self.set_priority(cr, uid, ids, '3')
- def write(self, cr, uid, ids, vals, context=None):
- if 'stage_id' in vals and vals['stage_id']:
- stage = self.pool.get('hr.recruitment.stage').browse(cr, uid, vals['stage_id'], context=context)
- self.message_append_note(cr, uid, ids, body=_("Stage changed to %s.") % stage.name, context=context)
- return super(hr_applicant,self).write(cr, uid, ids, vals, context=context)
-
# -------------------------------------------------------
# OpenChatter methods and notifications
# -------------------------------------------------------
@@ -498,7 +513,13 @@ class hr_applicant(crm.crm_case, osv.osv):
if obj.state == 'draft' and obj.user_id:
result[obj.id] = [obj.user_id.id]
return result
-
+
+ def stage_set_send_note(self, cr, uid, ids, stage_id, context=None):
+ """ Override of the (void) default notification method. """
+ if not stage_id: return True
+ stage_name = self.pool.get('hr.recruitment.stage').name_get(cr, uid, [stage_id], context=context)[0][1]
+ return self.message_append_note(cr, uid, ids, body= _("Stage changed to %s.") % (stage_name), context=context)
+
def case_get_note_msg_prefix(self, cr, uid, id, context=None):
return 'Applicant'
@@ -530,7 +551,6 @@ class hr_applicant(crm.crm_case, osv.osv):
message = _("Applicant has been created.")
return self.message_append_note(cr, uid, ids, body=message, context=context)
-hr_applicant()
class hr_job(osv.osv):
_inherit = "hr.job"
diff --git a/addons/hr_recruitment/hr_recruitment_data.xml b/addons/hr_recruitment/hr_recruitment_data.xml
index d6cb5952d38..8cbebda5f1f 100644
--- a/addons/hr_recruitment/hr_recruitment_data.xml
+++ b/addons/hr_recruitment/hr_recruitment_data.xml
@@ -1,7 +1,9 @@
+
+
@@ -37,30 +39,36 @@
Doctoral Degree4
-
Initial Qualification
+ draft1First Interview
+ open2Second Interview
+ open3Contract Proposed
+ pending4Contract Signed
+ done5Refused
+ cancel6
+ Job Survey
diff --git a/addons/hr_recruitment/hr_recruitment_view.xml b/addons/hr_recruitment/hr_recruitment_view.xml
index c3a5216620d..2a6fd2c7780 100644
--- a/addons/hr_recruitment/hr_recruitment_view.xml
+++ b/addons/hr_recruitment/hr_recruitment_view.xml
@@ -59,8 +59,6 @@
-
-
@@ -71,9 +69,7 @@
-
-
-
+
-
-
-
-
-
+
+
+
+
+
+
# ------------------------------------------------------
# HR Job
# ------------------------------------------------------
@@ -367,6 +348,7 @@
+
@@ -384,6 +366,7 @@
+
diff --git a/addons/hr_recruitment/test/recruitment_process.yml b/addons/hr_recruitment/test/recruitment_process.yml
index e856747ed99..38b84fccab2 100644
--- a/addons/hr_recruitment/test/recruitment_process.yml
+++ b/addons/hr_recruitment/test/recruitment_process.yml
@@ -1,7 +1,7 @@
-
In Order to test process of Recruitment,
-
- Applicant interested in job position. so He send resume by email.
+ An applicant is interested in the job position. So he sends a resume by email.
-
!python {model: mail.thread}: |
import addons
@@ -9,27 +9,42 @@
request_message = request_file.read()
self.message_process(cr, uid, 'hr.applicant', request_message)
-
- After getting the mail, I check details of new applicant.
+ After getting the mail, I check the details of the new applicant.
-
!python {model: hr.applicant}: |
applicant_ids = self.search(cr, uid, [('email_from','=', 'Mr. Richard Anderson ')])
assert applicant_ids, "Applicant is not created after getting the mail"
applicant = self.browse(cr, uid, applicant_ids[0], context=context)
resume_ids = self.pool.get('ir.attachment').search(cr, uid, [('datas_fname','=','resume.doc'),('res_model','=',self._name),('res_id','=',applicant.id)])
- assert applicant.name == "Application for the post of Jr.application Programmer.", "Subject does not match"
- assert applicant.state == "draft"
- assert len(resume_ids), "Resume does not attached."
+ assert applicant.name == "Application for the post of Jr.application Programmer.", "Applicant name does not match."
+ assert applicant.stage_id.id == ref('hr_recruitment.stage_job1'), "Stage should be 'Initial qualification' and is '%s'." % (applicant.stage_id.name)
+ assert applicant.state == "draft", "Applicant state should be 'draft'."
+ assert len(resume_ids), "Resume is not attached."
-
- I refuse applicant for the Recruitment.
+ I refuse the applicant (hr_case_programmer)
-
!python {model: hr.applicant}: |
- self.case_close(cr, uid, [ref("hr_case_programmer")])
+ self.case_cancel(cr, uid, [ref("hr_case_programmer")])
-
- I open applicant for the Recruitment.
+ I check the details of the refused applicant.
+-
+ !python {model: hr.applicant}: |
+ applicant = self.browse(cr, uid, ref("hr_case_programmer"), context=context)
+ assert applicant.stage_id.id == ref('hr_recruitment.stage_job6'), "Stage should be 'Refused' and is %s." % (applicant.stage_id.name)
+ assert applicant.state == 'cancel', "Applicant is not in 'cancel' state."
+-
+ I reset and re-open the previously refused applicant.
-
!python {model: hr.applicant}: |
self.case_reset(cr, uid, [ref("hr_case_programmer")])
self.case_open(cr, uid, [ref("hr_case_programmer")])
+-
+ I check the details of the re-opened applicant.
+-
+ !python {model: hr.applicant}: |
+ applicant = self.browse(cr, uid, ref("hr_case_programmer"), context=context)
+ assert applicant.stage_id.id == ref('hr_recruitment.stage_job2'), "Stage should be 'First interview' and is '%s'." % (applicant.stage_id.name)
+ assert applicant.state == "open", "Applicant state should be 'open'."
-
I assign the Job position to the applicant
-
@@ -91,7 +106,7 @@
-
I check that applicant is "Hired".
-
- !assert {model: hr.applicant, id: hr_case_programmer}:
+ !assert {model: hr.applicant, id: hr_case_programmer, string: Applicant state is done}:
- state == 'done'
-
I do not give employment to the hired the applicant.
diff --git a/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml
index 43ca7a4004e..f9486982432 100644
--- a/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml
+++ b/addons/hr_timesheet_invoice/hr_timesheet_invoice_view.xml
@@ -23,17 +23,14 @@
-
+
-
-
-
-
-
+
diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
index aa815df5337..afd04aed1e1 100644
--- a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
+++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml
@@ -61,16 +61,13 @@
form
-
+
-
-
-
-
-
+
+
diff --git a/addons/idea/i18n/gu.po b/addons/idea/i18n/gu.po
new file mode 100644
index 00000000000..f2ef969fa3e
--- /dev/null
+++ b/addons/idea/i18n/gu.po
@@ -0,0 +1,710 @@
+# Gujarati translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-06-01 05:11+0000\n"
+"Last-Translator: Jalpesh Patel(OpenERP) \n"
+"Language-Team: Gujarati \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
+
+#. module: idea
+#: help:idea.category,visibility:0
+msgid "If True creator of the idea will be visible to others"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+msgid "By States"
+msgstr ""
+
+#. module: idea
+#: model:ir.actions.act_window,name:idea.action_idea_select
+msgid "Idea select"
+msgstr "વિચાર પસંદ કરો"
+
+#. module: idea
+#: view:idea.idea:0
+#: view:idea.vote:0
+#: model:ir.ui.menu,name:idea.menu_idea_vote
+msgid "Votes"
+msgstr "મત"
+
+#. module: idea
+#: view:idea.idea:0
+#: field:idea.idea,comment_ids:0
+msgid "Comments"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+msgid "Submit Vote"
+msgstr "મત જમા કરો"
+
+#. module: idea
+#: model:ir.actions.act_window,name:idea.action_report_vote_all
+#: model:ir.ui.menu,name:idea.menu_report_vote_all
+msgid "Ideas Analysis"
+msgstr "વિચારો નું પૃથક્કરણ"
+
+#. module: idea
+#: view:idea.category:0
+#: view:idea.idea:0
+#: view:idea.vote:0
+#: view:report.vote:0
+msgid "Group By..."
+msgstr ""
+
+#. module: idea
+#: selection:report.vote,month:0
+msgid "March"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+msgid "Accepted Ideas"
+msgstr "સ્વીકૃત વિચારો"
+
+#. module: idea
+#: code:addons/idea/wizard/idea_post_vote.py:94
+#, python-format
+msgid "Idea must be in 'Open' state before vote for that idea."
+msgstr ""
+
+#. module: idea
+#: view:report.vote:0
+msgid "Open Date"
+msgstr ""
+
+#. module: idea
+#: view:report.vote:0
+#: field:report.vote,day:0
+msgid "Day"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+msgid "Refuse"
+msgstr "નકારવા"
+
+#. module: idea
+#: field:idea.idea,count_votes:0
+msgid "Count of votes"
+msgstr "મતો ગણતરી"
+
+#. module: idea
+#: model:ir.model,name:idea.model_report_vote
+msgid "Idea Vote Statistics"
+msgstr "વિચાર મતોની આંકડાકીય માહિતી"
+
+#. module: idea
+#: selection:idea.idea,my_vote:0
+#: selection:idea.post.vote,vote:0
+#: selection:idea.vote,score:0
+#: selection:idea.vote.stat,score:0
+msgid "Bad"
+msgstr "ખરાબ"
+
+#. module: idea
+#: selection:report.vote,idea_state:0
+msgid "Cancelled"
+msgstr ""
+
+#. module: idea
+#: view:idea.category:0
+msgid "Category of ideas"
+msgstr "વિચારો ની શ્રેણી"
+
+#. module: idea
+#: code:addons/idea/idea.py:274
+#: code:addons/idea/wizard/idea_post_vote.py:91
+#: code:addons/idea/wizard/idea_post_vote.py:94
+#, python-format
+msgid "Warning !"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+msgid "Your Comment"
+msgstr ""
+
+#. module: idea
+#: model:ir.model,name:idea.model_idea_vote
+msgid "Idea Vote"
+msgstr ""
+
+#. module: idea
+#: field:idea.category,parent_id:0
+msgid "Parent Categories"
+msgstr "પિતૃ શ્રેણીઓ"
+
+#. module: idea
+#: selection:idea.idea,my_vote:0
+#: selection:idea.post.vote,vote:0
+#: selection:idea.vote,score:0
+#: selection:idea.vote.stat,score:0
+msgid "Very Bad"
+msgstr "ખૂબ ખરાબ"
+
+#. module: idea
+#: view:idea.vote:0
+msgid "Ideas vote"
+msgstr ""
+
+#. module: idea
+#: view:report.vote:0
+#: field:report.vote,nbr:0
+msgid "# of Lines"
+msgstr ""
+
+#. module: idea
+#: code:addons/idea/wizard/idea_post_vote.py:91
+#, python-format
+msgid "You can not give Vote for this idea more than %s times"
+msgstr ""
+
+#. module: idea
+#: view:idea.category:0
+msgid "Ideas Categories"
+msgstr "વિચારોની શ્રેણીઓ"
+
+#. module: idea
+#: help:idea.idea,description:0
+msgid "Content of the idea"
+msgstr "વિચાર સામગ્રી"
+
+#. module: idea
+#: model:ir.model,name:idea.model_idea_category
+msgid "Idea Category"
+msgstr "વિચાર શ્રેણીમાં"
+
+#. module: idea
+#: view:idea.idea:0
+#: field:idea.idea,stat_vote_ids:0
+msgid "Statistics"
+msgstr "આંકડાકીય માહિતી"
+
+#. module: idea
+#: selection:idea.idea,my_vote:0
+#: selection:idea.post.vote,vote:0
+#: selection:idea.vote,score:0
+#: selection:idea.vote.stat,score:0
+msgid "Not Voted"
+msgstr ""
+
+#. module: idea
+#: sql_constraint:idea.category:0
+msgid "The name of the category must be unique"
+msgstr "શ્રેણી નામ વિશિષ્ટ હોવું જ જોઈએ"
+
+#. module: idea
+#: model:ir.model,name:idea.model_idea_select
+msgid "select idea"
+msgstr "વિચાર પસંદ કરો"
+
+#. module: idea
+#: view:idea.stat:0
+msgid "stat"
+msgstr ""
+
+#. module: idea
+#: field:idea.category,child_ids:0
+msgid "Child Categories"
+msgstr ""
+
+#. module: idea
+#: view:idea.select:0
+msgid "Next"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+#: field:idea.idea,state:0
+#: view:report.vote:0
+#: field:report.vote,idea_state:0
+msgid "State"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+#: selection:idea.idea,state:0
+msgid "New"
+msgstr ""
+
+#. module: idea
+#: selection:idea.idea,my_vote:0
+#: selection:idea.post.vote,vote:0
+#: selection:idea.vote,score:0
+#: selection:idea.vote.stat,score:0
+msgid "Good"
+msgstr ""
+
+#. module: idea
+#: help:idea.idea,open_date:0
+msgid "Date when an idea opened"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+msgid "Idea Detail"
+msgstr "વિચાર વિગતો"
+
+#. module: idea
+#: help:idea.idea,state:0
+msgid ""
+"When the Idea is created the state is 'Draft'.\n"
+" It is opened by the user, the state is 'Opened'. \n"
+"If the idea is accepted, the state is 'Accepted'."
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+msgid "New Ideas"
+msgstr "નવા વિચારો"
+
+#. module: idea
+#: view:report.vote:0
+msgid "Idea Vote created last month"
+msgstr ""
+
+#. module: idea
+#: field:idea.category,visibility:0
+#: field:idea.idea,visibility:0
+msgid "Open Idea?"
+msgstr ""
+
+#. module: idea
+#: view:report.vote:0
+msgid "Idea Vote created in current month"
+msgstr ""
+
+#. module: idea
+#: selection:report.vote,month:0
+msgid "July"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+#: selection:idea.idea,state:0
+#: view:report.vote:0
+#: selection:report.vote,idea_state:0
+msgid "Accepted"
+msgstr "સ્વીકૃત"
+
+#. module: idea
+#: model:ir.actions.act_window,name:idea.action_idea_category
+#: model:ir.ui.menu,name:idea.menu_idea_category
+msgid "Categories"
+msgstr ""
+
+#. module: idea
+#: view:idea.category:0
+msgid "Parent Category"
+msgstr "પિતૃ શ્રેણીમાં"
+
+#. module: idea
+#: field:idea.idea,open_date:0
+msgid "Open date"
+msgstr ""
+
+#. module: idea
+#: field:idea.idea,vote_ids:0
+#: model:ir.actions.act_window,name:idea.action_idea_post_vote
+msgid "Vote"
+msgstr "મત"
+
+#. module: idea
+#: model:ir.actions.act_window,name:idea.action_idea_vote_stat
+#: model:ir.ui.menu,name:idea.menu_idea_vote_stat
+msgid "Vote Statistics"
+msgstr "મત ની આંકડાકીય માહિતી"
+
+#. module: idea
+#: field:idea.idea,vote_limit:0
+msgid "Maximum Vote per User"
+msgstr "મહત્તમ વપરાશકર્તા માટે મત"
+
+#. module: idea
+#: view:idea.vote.stat:0
+msgid "vote_stat of ideas"
+msgstr ""
+
+#. module: idea
+#: field:idea.comment,content:0
+#: view:idea.idea:0
+#: view:idea.post.vote:0
+#: field:idea.vote,comment:0
+#: model:ir.model,name:idea.model_idea_comment
+msgid "Comment"
+msgstr "ટીકા"
+
+#. module: idea
+#: selection:report.vote,month:0
+msgid "September"
+msgstr ""
+
+#. module: idea
+#: selection:report.vote,month:0
+msgid "December"
+msgstr ""
+
+#. module: idea
+#: view:report.vote:0
+#: field:report.vote,month:0
+msgid "Month"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+#: model:ir.actions.act_window,name:idea.action_idea_idea_categ_open
+#: model:ir.actions.act_window,name:idea.action_idea_idea_open
+msgid "Open Ideas"
+msgstr ""
+
+#. module: idea
+#: view:idea.category:0
+#: field:idea.category,name:0
+#: view:idea.idea:0
+#: field:idea.idea,category_id:0
+#: view:report.vote:0
+#: field:report.vote,category_id:0
+msgid "Category"
+msgstr ""
+
+#. module: idea
+#: selection:idea.idea,my_vote:0
+#: selection:idea.post.vote,vote:0
+#: selection:idea.vote,score:0
+#: selection:idea.vote.stat,score:0
+msgid "Very Good"
+msgstr ""
+
+#. module: idea
+#: selection:idea.idea,state:0
+#: selection:report.vote,idea_state:0
+msgid "Opened"
+msgstr ""
+
+#. module: idea
+#: model:ir.actions.act_window,name:idea.action_idea_vote
+msgid "Idea's Votes"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+msgid "By Idea Category"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+msgid "New Idea"
+msgstr "નવો વિચાર"
+
+#. module: idea
+#: model:ir.actions.act_window,name:idea.action_idea_category_tree
+#: model:ir.ui.menu,name:idea.menu_idea_category_tree
+msgid "Ideas by Categories"
+msgstr ""
+
+#. module: idea
+#: selection:report.vote,idea_state:0
+msgid "Draft"
+msgstr ""
+
+#. module: idea
+#: selection:report.vote,month:0
+msgid "August"
+msgstr ""
+
+#. module: idea
+#: selection:idea.idea,my_vote:0
+#: selection:idea.post.vote,vote:0
+#: selection:idea.vote,score:0
+#: selection:idea.vote.stat,score:0
+msgid "Normal"
+msgstr ""
+
+#. module: idea
+#: selection:report.vote,month:0
+msgid "June"
+msgstr ""
+
+#. module: idea
+#: field:report.vote,creater_id:0
+#: field:report.vote,user_id:0
+msgid "User Name"
+msgstr ""
+
+#. module: idea
+#: model:ir.model,name:idea.model_idea_vote_stat
+msgid "Idea Votes Statistics"
+msgstr ""
+
+#. module: idea
+#: field:idea.comment,user_id:0
+#: view:idea.vote:0
+#: field:idea.vote,user_id:0
+#: view:report.vote:0
+msgid "User"
+msgstr ""
+
+#. module: idea
+#: field:idea.vote,date:0
+msgid "Date"
+msgstr ""
+
+#. module: idea
+#: selection:report.vote,month:0
+msgid "November"
+msgstr ""
+
+#. module: idea
+#: field:idea.idea,my_vote:0
+msgid "My Vote"
+msgstr ""
+
+#. module: idea
+#: selection:report.vote,month:0
+msgid "October"
+msgstr ""
+
+#. module: idea
+#: field:idea.comment,create_date:0
+#: field:idea.idea,created_date:0
+msgid "Creation date"
+msgstr ""
+
+#. module: idea
+#: selection:report.vote,month:0
+msgid "January"
+msgstr ""
+
+#. module: idea
+#: model:ir.model,name:idea.model_idea_idea
+msgid "idea.idea"
+msgstr ""
+
+#. module: idea
+#: field:idea.category,summary:0
+msgid "Summary"
+msgstr ""
+
+#. module: idea
+#: field:idea.idea,name:0
+msgid "Idea Summary"
+msgstr ""
+
+#. module: idea
+#: view:idea.post.vote:0
+msgid "Post"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+msgid "History"
+msgstr ""
+
+#. module: idea
+#: field:report.vote,date:0
+msgid "Date Order"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+#: field:idea.idea,user_id:0
+#: view:report.vote:0
+msgid "Creator"
+msgstr ""
+
+#. module: idea
+#: view:idea.post.vote:0
+#: model:ir.ui.menu,name:idea.menu_give_vote
+msgid "Give Vote"
+msgstr ""
+
+#. module: idea
+#: help:idea.idea,vote_limit:0
+msgid "Set to one if you require only one Vote per user"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+msgid "By Creators"
+msgstr ""
+
+#. module: idea
+#: view:idea.post.vote:0
+msgid "Cancel"
+msgstr ""
+
+#. module: idea
+#: view:idea.select:0
+msgid "Close"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+msgid "Open"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+#: view:report.vote:0
+msgid "In Progress"
+msgstr ""
+
+#. module: idea
+#: view:report.vote:0
+msgid "Idea Vote Analysis"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+#: model:ir.actions.act_window,name:idea.action_idea_idea
+#: model:ir.ui.menu,name:idea.menu_idea_idea
+#: model:ir.ui.menu,name:idea.menu_ideas
+#: model:ir.ui.menu,name:idea.menu_ideas1
+msgid "Ideas"
+msgstr ""
+
+#. module: idea
+#: model:ir.model,name:idea.model_idea_post_vote
+msgid "Post vote"
+msgstr ""
+
+#. module: idea
+#: field:idea.vote.stat,score:0
+#: field:report.vote,score:0
+msgid "Score"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+msgid "Votes Statistics"
+msgstr ""
+
+#. module: idea
+#: view:idea.vote:0
+msgid "Comments:"
+msgstr ""
+
+#. module: idea
+#: view:idea.category:0
+#: field:idea.idea,description:0
+#: field:idea.post.vote,note:0
+msgid "Description"
+msgstr ""
+
+#. module: idea
+#: selection:report.vote,month:0
+msgid "May"
+msgstr ""
+
+#. module: idea
+#: selection:idea.idea,state:0
+#: view:report.vote:0
+msgid "Refused"
+msgstr ""
+
+#. module: idea
+#: view:idea.vote:0
+msgid "Vote Date"
+msgstr ""
+
+#. module: idea
+#: selection:report.vote,month:0
+msgid "February"
+msgstr ""
+
+#. module: idea
+#: field:idea.category,complete_name:0
+msgid "Name"
+msgstr ""
+
+#. module: idea
+#: field:idea.vote.stat,nbr:0
+msgid "Number of Votes"
+msgstr ""
+
+#. module: idea
+#: view:report.vote:0
+msgid "Month-1"
+msgstr ""
+
+#. module: idea
+#: selection:report.vote,month:0
+msgid "April"
+msgstr ""
+
+#. module: idea
+#: field:idea.idea,count_comments:0
+msgid "Count of comments"
+msgstr ""
+
+#. module: idea
+#: field:idea.vote,score:0
+msgid "Vote Status"
+msgstr ""
+
+#. module: idea
+#: view:report.vote:0
+msgid "Idea Vote created in current year"
+msgstr ""
+
+#. module: idea
+#: field:idea.idea,vote_avg:0
+msgid "Average Score"
+msgstr ""
+
+#. module: idea
+#: constraint:idea.category:0
+msgid "Error ! You cannot create recursive categories."
+msgstr ""
+
+#. module: idea
+#: field:idea.comment,idea_id:0
+#: field:idea.select,idea_id:0
+#: view:idea.vote:0
+#: field:idea.vote,idea_id:0
+#: field:idea.vote.stat,idea_id:0
+#: model:ir.ui.menu,name:idea.menu_idea_reporting
+#: view:report.vote:0
+#: field:report.vote,idea_id:0
+msgid "Idea"
+msgstr ""
+
+#. module: idea
+#: view:idea.idea:0
+msgid "Accept"
+msgstr ""
+
+#. module: idea
+#: field:idea.post.vote,vote:0
+msgid "Post Vote"
+msgstr ""
+
+#. module: idea
+#: view:report.vote:0
+#: field:report.vote,year:0
+msgid "Year"
+msgstr ""
+
+#. module: idea
+#: code:addons/idea/idea.py:274
+#, python-format
+msgid "You can not vote on a Draft/Accepted/Cancelled ideas."
+msgstr ""
+
+#. module: idea
+#: view:idea.select:0
+msgid "Select Idea for Vote"
+msgstr ""
diff --git a/addons/idea/idea_view.xml b/addons/idea/idea_view.xml
index 3d541f8aa8e..0e9fb40020f 100644
--- a/addons/idea/idea_view.xml
+++ b/addons/idea/idea_view.xml
@@ -183,15 +183,12 @@
form
-
+
-
-
-
-
-
+
+
@@ -267,10 +264,6 @@
-
-
-
-
diff --git a/addons/import_base/i18n/sv.po b/addons/import_base/i18n/sv.po
new file mode 100644
index 00000000000..b42d17376c0
--- /dev/null
+++ b/addons/import_base/i18n/sv.po
@@ -0,0 +1,103 @@
+# Swedish translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 00:36+0000\n"
+"PO-Revision-Date: 2012-06-04 10:28+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Swedish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-06-05 04:54+0000\n"
+"X-Generator: Launchpad (build 15353)\n"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:434
+#, python-format
+msgid "Import failed due to an unexpected error"
+msgstr "Import misslyckades på grund av oväntat fel"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:461
+#, python-format
+msgid "started at %s and finished at %s \n"
+msgstr "Startade på %s och avslutade på %s \n"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:448
+#, python-format
+msgid "Import of your data finished at %s"
+msgstr "Importen av dina data avslutades på %s"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:463
+#, python-format
+msgid ""
+"but failed, in consequence no data were imported to keep database "
+"consistency \n"
+" error : \n"
+msgstr ""
+"men misslyckades, till följd att inga data importerades för att hålla "
+"databasen konsistent\n"
+" fel: \n"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:477
+#, python-format
+msgid ""
+"The import of data \n"
+" instance name : %s \n"
+msgstr ""
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:470
+#, python-format
+msgid "%s has been successfully imported from %s %s, %s \n"
+msgstr ""
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:447
+#, python-format
+msgid "Data Import failed at %s due to an unexpected error"
+msgstr ""
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:436
+#, python-format
+msgid "Import finished, notification email sended"
+msgstr ""
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:190
+#, python-format
+msgid "%s is not a valid model name"
+msgstr ""
+
+#. module: import_base
+#: model:ir.ui.menu,name:import_base.menu_import_crm
+msgid "Import"
+msgstr "Import"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:467
+#, python-format
+msgid "with no warning"
+msgstr "utan varning"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:469
+#, python-format
+msgid "with warning : %s"
+msgstr "med varning: %s"
+
+#. module: import_base
+#: code:addons/import_base/import_framework.py:191
+#, python-format
+msgid " fields imported : "
+msgstr " importerade fält: "
diff --git a/addons/knowledge/res_config_view.xml b/addons/knowledge/res_config_view.xml
index 6816a9da3a1..d1debeaf562 100644
--- a/addons/knowledge/res_config_view.xml
+++ b/addons/knowledge/res_config_view.xml
@@ -7,10 +7,10 @@
form
-
+
-
+
diff --git a/addons/l10n_multilang/i18n/ro.po b/addons/l10n_multilang/i18n/ro.po
new file mode 100644
index 00000000000..e820dde38de
--- /dev/null
+++ b/addons/l10n_multilang/i18n/ro.po
@@ -0,0 +1,178 @@
+# Romanian translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 01:06+0000\n"
+"PO-Revision-Date: 2012-05-30 20:18+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Romanian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-05-31 04:54+0000\n"
+"X-Generator: Launchpad (build 15322)\n"
+
+#. module: l10n_multilang
+#: model:ir.model,name:l10n_multilang.model_account_fiscal_position_template
+msgid "Template for Fiscal Position"
+msgstr "Sablon pentru Pozitia Fiscala"
+
+#. module: l10n_multilang
+#: sql_constraint:account.account:0
+msgid "The code of the account must be unique per company !"
+msgstr "Codul sumei trebuie sa fie unic per companie !"
+
+#. module: l10n_multilang
+#: constraint:account.account.template:0
+msgid ""
+"Configuration Error!\n"
+"You can not define children to an account with internal type different of "
+"\"View\"! "
+msgstr ""
+"Eroare de Configurare!\n"
+"Nu puteti defini conturi secundare intr-un cont cu tipul intern diferit de "
+"\"Vizualizare\"! "
+
+#. module: l10n_multilang
+#: model:ir.model,name:l10n_multilang.model_account_analytic_journal
+msgid "Analytic Journal"
+msgstr "Jurnal Analitic"
+
+#. module: l10n_multilang
+#: constraint:account.account.template:0
+msgid "Error ! You can not create recursive account templates."
+msgstr "Eroare! Nu puteti crea sabloane de cont recurente."
+
+#. module: l10n_multilang
+#: model:ir.model,name:l10n_multilang.model_account_journal
+msgid "Journal"
+msgstr "Jurnal"
+
+#. module: l10n_multilang
+#: model:ir.model,name:l10n_multilang.model_account_chart_template
+msgid "Templates for Account Chart"
+msgstr "Sabloane pentru Planul de Conturi"
+
+#. module: l10n_multilang
+#: sql_constraint:account.tax:0
+msgid "The description must be unique per company!"
+msgstr "Descrierea trebuie sa fie unica pe companie!"
+
+#. module: l10n_multilang
+#: constraint:account.tax.code.template:0
+msgid "Error ! You can not create recursive Tax Codes."
+msgstr "Eroare ! Nu puteti crea Coduri fiscale recursive."
+
+#. module: l10n_multilang
+#: model:ir.model,name:l10n_multilang.model_account_tax_template
+msgid "account.tax.template"
+msgstr "sablon.taxa.cont"
+
+#. module: l10n_multilang
+#: model:ir.model,name:l10n_multilang.model_account_tax
+msgid "account.tax"
+msgstr "taxa.cont"
+
+#. module: l10n_multilang
+#: model:ir.model,name:l10n_multilang.model_account_account
+msgid "Account"
+msgstr "Cont"
+
+#. module: l10n_multilang
+#: model:ir.model,name:l10n_multilang.model_wizard_multi_charts_accounts
+msgid "wizard.multi.charts.accounts"
+msgstr "wizard.plan.de.conturi.multi"
+
+#. module: l10n_multilang
+#: constraint:account.journal:0
+msgid ""
+"Configuration error! The currency chosen should be shared by the default "
+"accounts too."
+msgstr ""
+"Eroare de configurare! Moneda aleasa trebuie sa fie comuna si conturilor "
+"predefinite."
+
+#. module: l10n_multilang
+#: model:ir.model,name:l10n_multilang.model_account_account_template
+msgid "Templates for Accounts"
+msgstr "Sabloane pentru Conturi"
+
+#. module: l10n_multilang
+#: help:account.chart.template,spoken_languages:0
+msgid ""
+"State here the languages for which the translations of templates could be "
+"loaded at the time of installation of this localization module and copied in "
+"the final object when generating them from templates. You must provide the "
+"language codes separated by ';'"
+msgstr ""
+"Aici introduceti limbile pentru care pot fi incarcate traducerile "
+"sabloanelor in momentul instalarii acestui modul de localizare si pot fi "
+"copiate in obiectul final atunci cand le generati din sabloane. Trebuie sa "
+"introduceti codurile limbilor separat cu ';'"
+
+#. module: l10n_multilang
+#: constraint:account.account:0
+msgid "Error ! You can not create recursive accounts."
+msgstr "Eroare ! Nu puteti crea conturi recursive."
+
+#. module: l10n_multilang
+#: constraint:account.account:0
+msgid ""
+"Configuration Error! \n"
+"You can not select an account type with a deferral method different of "
+"\"Unreconciled\" for accounts with internal type \"Payable/Receivable\"! "
+msgstr ""
+"Eroare de configurare! \n"
+"Nu puteti selecta un tip de cont cu o metoda de amanare diferita de "
+"\"Nereconciliat\" pentru conturile cu tipul intern \"Plati/Incasari\"! "
+
+#. module: l10n_multilang
+#: sql_constraint:account.journal:0
+msgid "The name of the journal must be unique per company !"
+msgstr "Numele jurnalului trebuie sa fie unic per companie !"
+
+#. module: l10n_multilang
+#: model:ir.model,name:l10n_multilang.model_account_analytic_account
+msgid "Analytic Account"
+msgstr "Cont Analitic"
+
+#. module: l10n_multilang
+#: sql_constraint:account.journal:0
+msgid "The code of the journal must be unique per company !"
+msgstr "Codul jurnalului trebuie sa fie unic per companie !"
+
+#. module: l10n_multilang
+#: model:ir.model,name:l10n_multilang.model_account_fiscal_position
+msgid "Fiscal Position"
+msgstr "Pozitie fiscala"
+
+#. module: l10n_multilang
+#: constraint:account.account:0
+msgid ""
+"Configuration Error! \n"
+"You can not define children to an account with internal type different of "
+"\"View\"! "
+msgstr ""
+"Eroare de configurare! \n"
+"Nu puteti defini conturi subordonate unui cont cu tipul intern diferit de "
+"\"Vizualizare\"! "
+
+#. module: l10n_multilang
+#: constraint:account.analytic.account:0
+msgid "Error! You can not create recursive analytic accounts."
+msgstr "Eroare! Nu puteti crea conturi analitice recursive."
+
+#. module: l10n_multilang
+#: model:ir.model,name:l10n_multilang.model_account_tax_code_template
+msgid "Tax Code Template"
+msgstr "Sablon Cod Taxa"
+
+#. module: l10n_multilang
+#: field:account.chart.template,spoken_languages:0
+msgid "Spoken Languages"
+msgstr "Limbi Vorbite"
diff --git a/addons/l10n_syscohada/i18n/ro.po b/addons/l10n_syscohada/i18n/ro.po
new file mode 100644
index 00000000000..4bd661a2da3
--- /dev/null
+++ b/addons/l10n_syscohada/i18n/ro.po
@@ -0,0 +1,123 @@
+# Romanian translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2011-12-23 09:56+0000\n"
+"PO-Revision-Date: 2012-05-30 20:37+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Romanian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-05-31 04:54+0000\n"
+"X-Generator: Launchpad (build 15322)\n"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_receivable
+msgid "Receivable"
+msgstr "Incasari"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_stocks
+msgid "Actif circulant"
+msgstr "Active"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_commitment
+msgid "Engagements"
+msgstr "Angajamente"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_expense
+msgid "Expense"
+msgstr "Cheltuiala"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_stock
+msgid "Stocks"
+msgstr "Actiuni"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_provision
+msgid "Provisions"
+msgstr "Clauze"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_income
+msgid "Income"
+msgstr "Venit"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_tax
+msgid "Tax"
+msgstr "Taxa"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_cash
+msgid "Cash"
+msgstr "Numerar"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_immobilisations
+msgid "Immobilisations"
+msgstr "Imobiliare"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_special
+msgid "Comptes spéciaux"
+msgstr "Conturi speciale"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_payable
+msgid "Payable"
+msgstr "Plati"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_asset
+msgid "Asset"
+msgstr "Active"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_view
+msgid "View"
+msgstr "Vizualizare"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_equity
+msgid "Equity"
+msgstr "Capital"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_cloture
+msgid "Cloture"
+msgstr "Inchidere"
+
+#. module: l10n_syscohada
+#: model:account.account.type,name:l10n_syscohada.account_type_dettes
+msgid "Dettes long terme"
+msgstr "Datorii pe termen lung"
+
+#. module: l10n_syscohada
+#: model:ir.actions.todo,note:l10n_syscohada.config_call_account_template_syscohada
+msgid ""
+"Generate Chart of Accounts from a SYSCOHADA Chart Template. You will be "
+"asked to pass the name of the company, the chart template to follow, the no. "
+"of digits to generate the code for your accounts and Bank account, currency "
+"to create Journals. Thus,the pure copy of chart Template is generated.\n"
+"\tThis is the same wizard that runs from Financial "
+"Management/Configuration/Financial Accounting/Financial Accounts/Generate "
+"Chart of Accounts from a Chart Template."
+msgstr ""
+"Creati Planul de Conturi dintr-un Sablon SYSCOHADA de planuri. Vi se va cere "
+"sa introduceti numele companiei, sablonul de planuri de urmat, numarul de "
+"cifre pentru crearea codului pentru conturile d-voastra si Contul Bancar, "
+"moneda pentru a crea Jurnalele. Astfel, este creata copia originala a "
+"Sablonului de planuri.\n"
+"\t Acesta este acelasi wizard care ruleaza din Managementul "
+"Financiar/Configurare/Contabilitate Financiara/Conturi Financiare/Creati "
+"Planul de Conturi dintr-un Sablon de planuri."
diff --git a/addons/lunch/lunch_view.xml b/addons/lunch/lunch_view.xml
index adfccfc2041..57360829e19 100644
--- a/addons/lunch/lunch_view.xml
+++ b/addons/lunch/lunch_view.xml
@@ -24,14 +24,11 @@
lunch.order
-
+
-
-
-
-
-
+
+
@@ -60,16 +57,6 @@
-
-
@@ -340,7 +327,7 @@
tree
-
+
diff --git a/addons/mail/doc/index.rst.inc b/addons/mail/doc/index.rst.inc
index 4679cd56fdf..822d855d5b4 100644
--- a/addons/mail/doc/index.rst.inc
+++ b/addons/mail/doc/index.rst.inc
@@ -9,3 +9,4 @@ Mail Module documentation topics
mail_thread
mail_openchatter_howto
mail_needaction_howto
+ mail_partner
diff --git a/addons/mail/doc/mail_openchatter_howto.rst b/addons/mail/doc/mail_openchatter_howto.rst
index fe28017be83..7ca52348d99 100644
--- a/addons/mail/doc/mail_openchatter_howto.rst
+++ b/addons/mail/doc/mail_openchatter_howto.rst
@@ -38,7 +38,7 @@ Make your module inheriting from the ``mail.thread`` class.
# inherit from mail.thread allows the use of OpenChatter
_inherit = ['mail.thread']
-Use the thread viewer widget inside your form view by using the ThreadView widget on the message_ids_social field inherited from mail.thread.
+Use the thread viewer widget inside your form view by using the ThreadView widget on the message_ids field inherited from mail.thread.
::
@@ -50,7 +50,7 @@ Use the thread viewer widget inside your form view by using the ThreadView widge
[...]
-
+
diff --git a/addons/mail/doc/mail_partner.rst b/addons/mail/doc/mail_partner.rst
new file mode 100644
index 00000000000..a99246395d7
--- /dev/null
+++ b/addons/mail/doc/mail_partner.rst
@@ -0,0 +1,10 @@
+What is shown
+==============
+ - for every module which are related to partner show apporopriate message in the partner view like opportunities, sale orders and invoices.
+
+
+How it is done
+===============
+ - _inherit = 'mail.thread'
+
+ - Override def message_load_ids(self, cr, uid, ids, limit=100, offset=0, domain=[], ascent=False, root_ids=[], context=None) search by the partner
diff --git a/addons/mail/mail_group_view.xml b/addons/mail/mail_group_view.xml
index 7258db2d9dc..67b2efc84a0 100644
--- a/addons/mail/mail_group_view.xml
+++ b/addons/mail/mail_group_view.xml
@@ -69,7 +69,8 @@
-
+
diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py
index edc07817b26..6a6978d544c 100644
--- a/addons/mail/mail_thread.py
+++ b/addons/mail/mail_thread.py
@@ -61,29 +61,29 @@ class mail_thread(osv.osv):
'''
_name = 'mail.thread'
_description = 'Email Thread'
-
+
def _get_message_ids(self, cr, uid, ids, name, arg, context=None):
res = {}
for id in ids:
res[id] = self.message_load_ids(cr, uid, [id], context=context)
return res
-
- # OpenChatter: message_ids_social is a dummy field that should not be used
+
+ # OpenChatter: message_ids is a dummy field that should not be used
_columns = {
- 'message_ids_social': fields.function(_get_message_ids, method=True,
+ 'message_ids': fields.function(_get_message_ids, method=True,
type='one2many', obj='mail.message', string='Temp messages', _fields_id = 'res_id'),
}
#------------------------------------------------------
# Automatic subscription when creating/reading
#------------------------------------------------------
-
+
def create(self, cr, uid, vals, context=None):
"""Automatically subscribe the creator"""
thread_id = super(mail_thread, self).create(cr, uid, vals, context=context);
self.message_subscribe(cr, uid, [thread_id], [uid], context=context)
return thread_id;
-
+
def write(self, cr, uid, ids, vals, context=None):
"""Automatically subscribe the writer"""
if isinstance(ids, (int, long)):
@@ -92,7 +92,7 @@ class mail_thread(osv.osv):
if write_res:
self.message_subscribe(cr, uid, ids, [uid], context=context)
return write_res;
-
+
def unlink(self, cr, uid, ids, context=None):
"""Override unlink, to automatically delete
- subscriptions
@@ -111,13 +111,13 @@ class mail_thread(osv.osv):
# delete notifications
msg_to_del_ids = msg_obj.search(cr, uid, [('model', '=', self._name), ('res_id', 'in', ids)], context=context)
msg_obj.unlink(cr, uid, msg_to_del_ids, context=context)
-
+
return super(mail_thread, self).unlink(cr, uid, ids, context=context)
-
+
#------------------------------------------------------
# Generic message api
#------------------------------------------------------
-
+
def message_create(self, cr, uid, thread_id, vals, context=None):
"""OpenSocial: wrapper of mail.message create method
- creates the mail.message
@@ -131,15 +131,15 @@ class mail_thread(osv.osv):
notification_obj = self.pool.get('mail.notification')
res_users_obj = self.pool.get('res.users')
body = vals.get('body_html', '') if vals.get('subtype', 'plain') == 'html' else vals.get('body_text', '')
-
+
# automatically subscribe the writer of the message
if vals['user_id']:
self.message_subscribe(cr, uid, [thread_id], [vals['user_id']], context=context)
-
+
# get users that will get a notification pushed
user_to_push_ids = self.message_create_get_notification_user_ids(cr, uid, [thread_id], vals, context=context)
user_to_push_from_parse_ids = self.message_parse_users(cr, uid, [thread_id], body, context=context)
-
+
# set email_from and email_to for comments and notifications
if vals.get('type', False) and vals['type'] == 'comment' or vals['type'] == 'notification':
current_user = res_users_obj.browse(cr, uid, [uid], context=context)[0]
@@ -159,24 +159,24 @@ class mail_thread(osv.osv):
if email_to:
vals['email_to'] = email_to
vals['state'] = 'outgoing'
-
+
# create message
msg_id = message_obj.create(cr, uid, vals, context=context)
-
+
# special: if install mode, do not push demo data
if context.get('install_mode', False):
return True
-
+
# push to users
for id in user_to_push_ids:
notification_obj.create(cr, uid, {'user_id': id, 'message_id': msg_id}, context=context)
-
+
return msg_id
-
+
def message_create_get_notification_user_ids(self, cr, uid, thread_ids, new_msg_vals, context=None):
if context is None:
context = {}
-
+
notif_user_ids = []
body = new_msg_vals.get('body_html', '') if new_msg_vals.get('subtype', 'plain') == 'html' else new_msg_vals.get('body_text', '')
for thread_id in thread_ids:
@@ -193,7 +193,7 @@ class mail_thread(osv.osv):
parent_notif_ids = notif_obj.search(cr, uid, [('message_id', '=', new_msg_vals.get('parent_id'))], context=context)
parent_notifs = notif_obj.read(cr, uid, parent_notif_ids, context=context)
notif_user_ids += [parent_notif['user_id'][0] for parent_notif in parent_notifs]
-
+
# remove duplicate entries
notif_user_ids = list(set(notif_user_ids))
return notif_user_ids
@@ -214,7 +214,7 @@ class mail_thread(osv.osv):
for model_name in self.pool.obj_list():
model = self.pool.get(model_name)
if 'mail.thread' in getattr(model, '_inherit', []):
- ret_dict[model_name] = model._description
+ ret_dict[model_name] = model._description
return ret_dict
def message_append(self, cr, uid, threads, subject, body_text=None, body_html=None,
@@ -259,7 +259,7 @@ class mail_thread(osv.osv):
to determine the model of the thread to
update (instead of the current model).
"""
- if context is None:
+ if context is None:
context = {}
if attachments is None:
attachments = {}
@@ -327,7 +327,7 @@ class mail_thread(osv.osv):
'headers': headers,
'reply_to': reply_to,
'original': original, })
-
+
new_msg_ids.append(self.message_create(cr, uid, thread.id, data, context=context))
return new_msg_ids
@@ -388,7 +388,7 @@ class mail_thread(osv.osv):
if (cur_iter > max_iter):
_logger.warning("Possible infinite loop in _message_add_ancestor_ids. Note that this algorithm is intended to check for cycle in message graph.")
return child_ids
-
+
def message_load_ids(self, cr, uid, ids, limit=100, offset=0, domain=[], ascent=False, root_ids=[], context=None):
""" OpenChatter feature: return thread messages ids. It searches in
mail.messages where res_id = ids, (res_)model = current model.
@@ -406,13 +406,15 @@ class mail_thread(osv.osv):
limit=limit, offset=offset, context=context)
if (ascent): msg_ids = self._message_add_ancestor_ids(cr, uid, ids, msg_ids, root_ids, context=context)
return msg_ids
-
+
def message_load(self, cr, uid, ids, limit=100, offset=0, domain=[], ascent=False, root_ids=[], context=None):
""" OpenChatter feature: return thread messages
"""
msg_ids = self.message_load_ids(cr, uid, ids, limit, offset, domain, ascent, root_ids, context=context)
- return self.pool.get('mail.message').read(cr, uid, msg_ids, context=context)
-
+ msgs = self.pool.get('mail.message').read(cr, uid, msg_ids, context=context)
+ msgs = sorted(msgs, key=lambda d: (-d['id']))
+ return msgs
+
def get_pushed_messages(self, cr, uid, ids, limit=100, offset=0, msg_search_domain=[], ascent=False, root_ids=[], context=None):
""" OpenChatter: wall: get messages to display (=pushed notifications)
:param domain: domain to add to the search; especially child_of
@@ -440,7 +442,7 @@ class mail_thread(osv.osv):
if (ascent): msg_ids = self._message_add_ancestor_ids(cr, uid, ids, msg_ids, root_ids, context=context)
msgs = msg_obj.read(cr, uid, msg_ids, context=context)
return msgs
-
+
#------------------------------------------------------
# Email specific
#------------------------------------------------------
@@ -532,7 +534,7 @@ class mail_thread(osv.osv):
def message_new(self, cr, uid, msg_dict, custom_values=None, context=None):
"""Called by ``message_process`` when a new message is received
- for a given thread model, if the message did not belong to
+ for a given thread model, if the message did not belong to
an existing thread.
The default behavior is to create a new record of the corresponding
model (based on some very basic info extracted from the message),
@@ -658,7 +660,7 @@ class mail_thread(osv.osv):
The keys used in the returned dict are meant to map
to usual names for relationships towards a partner
and one of its addresses.
-
+
:param email: email address for which a partner
should be searched for.
:rtype: dict
@@ -683,7 +685,7 @@ class mail_thread(osv.osv):
#------------------------------------------------------
# Note specific
#------------------------------------------------------
-
+
def message_broadcast(self, cr, uid, ids, subject=None, body=None, parent_id=False, type='notification', subtype='html', context=None):
if context is None:
context = {}
@@ -708,11 +710,11 @@ class mail_thread(osv.osv):
for msg_id in msg_ids:
notification_obj.create(cr, uid, {'user_id': user.id, 'message_id': msg_id}, context=context)
return True
-
+
def log(self, cr, uid, id, message, secondary=False, context=None):
_logger.warning("log() is deprecated. Please use OpenChatter notification system instead of the res.log mechanism.")
self.message_append_note(cr, uid, [id], 'res.log', message, context=context)
-
+
def message_append_note(self, cr, uid, ids, subject=None, body=None, parent_id=False, type='notification', subtype='html', context=None):
if subject is None:
if type == 'notification':
@@ -728,29 +730,29 @@ class mail_thread(osv.osv):
body_html = body
body_text = body
return self.message_append(cr, uid, ids, subject, body_html=body_html, body_text=body_text, parent_id=parent_id, type=type, subtype=subtype, context=context)
-
+
#------------------------------------------------------
# Subscription mechanism
#------------------------------------------------------
-
+
def message_get_subscribers_ids(self, cr, uid, ids, context=None):
subscr_obj = self.pool.get('mail.subscription')
subscr_ids = subscr_obj.search(cr, uid, ['&', ('res_model', '=', self._name), ('res_id', 'in', ids)], context=context)
subs = subscr_obj.read(cr, uid, subscr_ids, context=context)
return [sub['user_id'][0] for sub in subs]
-
+
def message_get_subscribers(self, cr, uid, ids, context=None):
user_ids = self.message_get_subscribers_ids(cr, uid, ids, context=context)
users = self.pool.get('res.users').read(cr, uid, user_ids, fields=['id', 'name', 'avatar'], context=context)
return users
-
+
def message_is_subscriber(self, cr, uid, ids, user_id = None, context=None):
users = self.message_get_subscribers(cr, uid, ids, context=context)
sub_user_id = uid if user_id is None else user_id
if sub_user_id in [user['id'] for user in users]:
return True
return False
-
+
def message_subscribe(self, cr, uid, ids, user_ids = None, context=None):
subscription_obj = self.pool.get('mail.subscription')
to_subscribe_uids = [uid] if user_ids is None else user_ids
@@ -774,7 +776,7 @@ class mail_thread(osv.osv):
#------------------------------------------------------
# Notification API
#------------------------------------------------------
-
+
def message_remove_pushed_notifications(self, cr, uid, ids, msg_ids, remove_childs=True, context=None):
if context is None:
context = {}
diff --git a/addons/mail/res_partner.py b/addons/mail/res_partner.py
index 637922ff75c..922f3e4b6ed 100644
--- a/addons/mail/res_partner.py
+++ b/addons/mail/res_partner.py
@@ -24,11 +24,32 @@ from osv import fields
class res_partner(osv.osv):
""" Inherits partner and adds CRM information in the partner form """
- _inherit = 'res.partner'
+ _name = "res.partner"
+ _inherit = ['res.partner', 'mail.thread']
_columns = {
'emails': fields.one2many('mail.message', 'partner_id', 'Emails', readonly=True, domain=[('email_from','!=',False)]),
}
+ def message_load_ids(self, cr, uid, ids, limit=100, offset=0, domain=[], ascent=False, root_ids=[False], context=None):
+ """ Override of message_load_ids
+ partner discussion page :
+ - messages posted on res.partner, partner_id = partner.id
+ - messages directly sent to partner
+ """
+ msg_obj = self.pool.get('mail.message')
+ msg_ids = []
+ partner_ids=[]
+ for partner in self.browse(cr, uid, ids, context=context):
+ msg_ids += msg_obj.search(cr, uid, [ ('res_id', '=', partner.id), ('model', '=' ,self._name)] + domain,
+ limit=limit, offset=offset, context=context)
+ if self._name=='res.partner':
+ partner_ids=msg_obj.search(cr, uid, [ ('partner_id', 'in', ids)] + domain,
+ limit=limit, offset=offset, context=context)
+ if partner_ids :
+ msg_ids+= partner_ids
+ if (ascent): msg_ids = self._message_add_ancestor_ids(cr, uid, ids, msg_ids, root_ids, context=context)
+ return msg_ids
+
res_partner()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/mail/res_partner_view.xml b/addons/mail/res_partner_view.xml
index 7fc001e4fd4..eb97b725fff 100644
--- a/addons/mail/res_partner_view.xml
+++ b/addons/mail/res_partner_view.xml
@@ -23,6 +23,10 @@
+
+
+
diff --git a/addons/mail/res_users_view.xml b/addons/mail/res_users_view.xml
index 0411bd418dc..7df155b13c0 100644
--- a/addons/mail/res_users_view.xml
+++ b/addons/mail/res_users_view.xml
@@ -28,7 +28,7 @@
-
+
diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js
index bed8faea5e0..1ec6fe32eb5 100644
--- a/addons/mail/static/src/js/mail.js
+++ b/addons/mail/static/src/js/mail.js
@@ -476,10 +476,12 @@ openerp.mail = function(session) {
// QWeb template to use when rendering the object
template: 'RecordThread',
- init: function() {
+ init: function() {
this._super.apply(this, arguments);
this.see_subscribers = true;
this.thread = null;
+ this.params = this.get_definition_options();
+ this.params.thread_level = this.params.thread_level || 0;
// datasets
this.ds = new session.web.DataSet(this, this.view.model);
this.ds_users = new session.web.DataSet(this, 'res.users');
@@ -520,12 +522,8 @@ openerp.mail = function(session) {
// create and render Thread widget
this.$element.find('div.oe_mail_recthread_left').empty();
if (this.thread) this.thread.destroy();
- // hack: for groups and users
- if (this.view.model == 'mail.group') thread_level = 1;
- if (this.view.model == 'res.users') thread_level = 1;
- else thread_level = 0;
this.thread = new mail.Thread(this, {'res_model': this.view.model, 'res_id': this.view.datarecord.id, 'uid': this.session.uid,
- 'thread_level': thread_level, 'show_post_comment': true, 'limit': 15});
+ 'thread_level': this.params.thread_level, 'show_post_comment': true, 'limit': 15});
var thread_done = this.thread.appendTo(this.$element.find('div.oe_mail_recthread_left'));
return fetch_sub_done && thread_done;
},
diff --git a/addons/marketing/res_config_view.xml b/addons/marketing/res_config_view.xml
index b7230aa65a7..7a36956a9dc 100644
--- a/addons/marketing/res_config_view.xml
+++ b/addons/marketing/res_config_view.xml
@@ -7,10 +7,10 @@
form
-
+
-
+
diff --git a/addons/marketing_campaign/marketing_campaign_view.xml b/addons/marketing_campaign/marketing_campaign_view.xml
index 4f401b386ef..9be08469cf4 100644
--- a/addons/marketing_campaign/marketing_campaign_view.xml
+++ b/addons/marketing_campaign/marketing_campaign_view.xml
@@ -16,16 +16,13 @@
form
-
+
-
-
-
-
-
+
+
@@ -140,16 +137,13 @@
form
-
+
-
-
-
-
-
+
+
@@ -189,7 +183,6 @@
-
@@ -365,15 +358,12 @@
form
-
+
-
-
-
-
-
+
+
diff --git a/addons/mrp/i18n/ja.po b/addons/mrp/i18n/ja.po
index c02c6b81d2b..b4316fe0196 100644
--- a/addons/mrp/i18n/ja.po
+++ b/addons/mrp/i18n/ja.po
@@ -8,19 +8,19 @@ msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
"POT-Creation-Date: 2012-02-08 00:49+0000\n"
-"PO-Revision-Date: 2012-05-30 01:25+0000\n"
+"PO-Revision-Date: 2012-06-02 04:49+0000\n"
"Last-Translator: Akira Hiyama \n"
"Language-Team: Japanese \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-05-30 05:21+0000\n"
-"X-Generator: Launchpad (build 15316)\n"
+"X-Launchpad-Export-Date: 2012-06-03 04:47+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
#. module: mrp
#: view:mrp.routing.workcenter:0
msgid "Routing Work Centers"
-msgstr "配送ワークセンタ"
+msgstr "経路作業センタ"
#. module: mrp
#: model:ir.actions.act_window,help:mrp.mrp_production_action
@@ -42,7 +42,7 @@ msgstr "システムが構成部品を探す場所"
#. module: mrp
#: field:mrp.production,workcenter_lines:0
msgid "Work Centers Utilisation"
-msgstr "ワークセンタ活用"
+msgstr "作業センタ活用"
#. module: mrp
#: model:product.template,name:mrp.product_sugar_product_template
@@ -52,12 +52,12 @@ msgstr "砂糖"
#. module: mrp
#: report:mrp.production.order:0
msgid "No. Of Cycles"
-msgstr "周期数"
+msgstr "サイクル数"
#. module: mrp
#: field:mrp.routing.workcenter,cycle_nbr:0
msgid "Number of Cycles"
-msgstr "周期数"
+msgstr "サイクル数"
#. module: mrp
#: model:product.uom.categ,name:mrp.product_uom_categ_fluid
@@ -102,7 +102,7 @@ msgstr "経路"
#. module: mrp
#: field:mrp.workcenter,product_id:0
msgid "Work Center Product"
-msgstr "ワークセンタ製品"
+msgstr "作業センタ製品"
#. module: mrp
#: view:mrp.bom:0
@@ -124,7 +124,7 @@ msgstr "生産する"
msgid ""
"Number of iterations this work center has to do in the specified operation "
"of the routing."
-msgstr "このワークセンタは配送の特定の操作の中で反復回数実行される必要があります。"
+msgstr "この作業センタは経路の特定の操作の中で反復回数実行される必要があります。"
#. module: mrp
#: view:mrp.bom:0
@@ -153,7 +153,7 @@ msgstr "購入のため"
#. module: mrp
#: model:process.transition,note:mrp.process_transition_purchaseprocure0
msgid "The system launches automatically a RFQ to the preferred supplier."
-msgstr "システムは優先仕入先にRFQ(見積依頼書)を自動的に起こします。"
+msgstr "システムは優先仕入先にRFQ(見積依頼)を自動的に起こします。"
#. module: mrp
#: view:mrp.production:0
@@ -233,7 +233,7 @@ msgstr "レポート"
#. module: mrp
#: field:mrp.workcenter,costs_cycle_account_id:0
msgid "Cycle Account"
-msgstr "循環アカウント"
+msgstr "サイクルアカウント"
#. module: mrp
#: code:addons/mrp/report/price.py:130
@@ -327,7 +327,7 @@ msgstr "エラー。再帰的な部品表を作ることはできません。"
#. module: mrp
#: model:ir.model,name:mrp.model_mrp_routing_workcenter
msgid "Work Center Usage"
-msgstr "ワークセンタの用途"
+msgstr "作業センタの用途"
#. module: mrp
#: model:process.transition,name:mrp.process_transition_procurestockableproduct0
@@ -343,7 +343,7 @@ msgstr "デフォルト単位"
#: sql_constraint:mrp.production:0
#: sql_constraint:stock.picking:0
msgid "Reference must be unique per Company!"
-msgstr "参照は会社内で固有でなければいけません"
+msgstr "参照は会社ごとに固有でなければいけません。"
#. module: mrp
#: code:addons/mrp/report/price.py:139
@@ -387,9 +387,9 @@ msgid ""
"sales person creates a sales order, he can relate it to several properties "
"and OpenERP will automatically select the BoM to use according the needs."
msgstr ""
-"同じ製品で異なった構築方法を持つ場合、OpenERPのプロパティは製品製造のための正しい部品表を選択するのに使用されます。それぞれの部品表には幾つかのプロ"
-"パティを割り当てることができます。販売員が販売オーダーを作成した時、彼はそれを幾つかのプロパティに関連付けることができ、そして、OpenERPは要求によっ"
-"て使用する部品表を自動的に選択します。"
+"同じ製品で異なった構築方法を持つ場合、OpenERPの属性は製品製造のための正しい部品表を選択するのに使用されます。それぞれの部品表には幾つかの属性を割り"
+"当てることができます。販売員が販売オーダーを作成した時、彼はそれを幾つかの属性に関連付けることができ、そして、OpenERPは要求によって使用する部品表を"
+"自動的に選択します。"
#. module: mrp
#: help:mrp.production,picking_id:0
@@ -460,12 +460,12 @@ msgstr "会社名は固有でなければいけません。"
msgid ""
"Define specific property groups that can be assigned to the properties of "
"your bill of materials."
-msgstr "部品表のプロパティに割り当てることができる特定のプロパティグループを定義して下さい。"
+msgstr "部品表の属性に割り当てることができる特定の属性グループを定義して下さい。"
#. module: mrp
#: help:mrp.workcenter,costs_cycle:0
msgid "Specify Cost of Work Center per cycle."
-msgstr "周期当りのワークセンタのコストを指定して下さい。"
+msgstr "サイクル当りの作業センタのコストを指定して下さい。"
#. module: mrp
#: model:process.transition,name:mrp.process_transition_bom0
@@ -493,7 +493,7 @@ msgstr "製造オーダーの自動分析会計行を望む場合は、これの
#. module: mrp
#: field:mrp.production.workcenter.line,cycle:0
msgid "Nbr of cycles"
-msgstr "周期の数"
+msgstr "サイクル数"
#. module: mrp
#: model:process.node,note:mrp.process_node_orderrfq0
@@ -506,7 +506,7 @@ msgstr "見積要求"
msgid ""
"The Bill of Material is linked to a routing, i.e. the succession of work "
"centers."
-msgstr "部品表は経路、すなわちワークセンタの連携とリンクしています。"
+msgstr "部品表は経路、すなわち作業センタの連携とリンクしています。"
#. module: mrp
#: constraint:product.product:0
@@ -532,7 +532,7 @@ msgstr "数量の変更"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.action_configure_workcenter
msgid "Configure your work centers"
-msgstr "ワークセンタの設定"
+msgstr "作業センタの設定"
#. module: mrp
#: view:mrp.production:0
@@ -569,7 +569,7 @@ msgstr "単位当りの仕入価格"
#: help:mrp.routing.workcenter,sequence:0
msgid ""
"Gives the sequence order when displaying a list of routing Work Centers."
-msgstr "ワークセンタの経路情報のリストを表示する時の順序を与えて下さい。"
+msgstr "作業センタの経路のリストを表示する時の順序を与えて下さい。"
#. module: mrp
#: constraint:stock.move:0
@@ -591,7 +591,7 @@ msgstr "製品の単位"
#. module: mrp
#: selection:mrp.production,state:0
msgid "Picking Exception"
-msgstr "集荷の例外"
+msgstr "例外の集荷"
#. module: mrp
#: field:mrp.bom,bom_lines:0
@@ -620,14 +620,14 @@ msgstr "材料の経路"
#: field:mrp.production,move_lines2:0
#: report:mrp.production.order:0
msgid "Consumed Products"
-msgstr "消費者製品"
+msgstr "消費製品"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.action_mrp_workcenter_load_wizard
#: model:ir.model,name:mrp.model_mrp_workcenter_load
#: model:ir.model,name:mrp.model_report_workcenter_load
msgid "Work Center Load"
-msgstr "ワークセンタ作業"
+msgstr "作業センタの負荷"
#. module: mrp
#: code:addons/mrp/procurement.py:43
@@ -669,13 +669,13 @@ msgid ""
"operations and to plan future loads on work centers based on production "
"plannification."
msgstr ""
-"完成した製品を生産するための操作のリスト(ワークセンタのリスト)。経路情報は操作の間のワークセンタのコストを計算し、生産計画化を基本とするワークセンタの将"
-"来の負荷を計画するために主に利用されます。"
+"完成した製品を生産するための操作のリスト(作業センタのリスト)。経路は操作の間の作業センタのコストを計算し、生産計画化を基本とする作業センタの将来の負荷を"
+"計画するために主に利用されます。"
#. module: mrp
#: help:mrp.workcenter,time_cycle:0
msgid "Time in hours for doing one cycle."
-msgstr "1つの周期のための時間"
+msgstr "1サイクルの時間(時)"
#. module: mrp
#: constraint:mrp.bom:0
@@ -760,7 +760,7 @@ msgstr "印刷日"
#: model:process.node,name:mrp.process_node_orderrfq0
#: model:process.node,name:mrp.process_node_rfq0
msgid "RFQ"
-msgstr "見積要求"
+msgstr "見積依頼"
#. module: mrp
#: model:process.transition,name:mrp.process_transition_producttostockrules0
@@ -775,7 +775,7 @@ msgstr "部分"
#. module: mrp
#: report:mrp.production.order:0
msgid "WorkCenter"
-msgstr "ワークセンタ"
+msgstr "作業センタ"
#. module: mrp
#: model:process.transition,note:mrp.process_transition_procureserviceproduct0
@@ -805,8 +805,8 @@ msgid ""
"resource leave are not taken into account in the time computation of the "
"work center."
msgstr ""
-"ワークセンタは製造ユニットを作成し管理します。それらは容量と計画予測のユニットとして考えられる作業員と機械により構成されます。労働時間とリソースの休暇はワ"
-"ークセンタの時間計算で考慮されないことに留意して下さい。"
+"作業センタは製造ユニットを作成し管理します。それらは容量と計画予測のユニットとして考えられる作業員と機械により構成されます。労働時間とリソースの休暇は作業"
+"センタの時間計算で考慮されないことに留意して下さい。"
#. module: mrp
#: model:ir.model,name:mrp.model_mrp_production
@@ -822,7 +822,7 @@ msgstr "原材料の調達"
#: view:mrp.production:0
#: field:mrp.production,cycle_total:0
msgid "Total Cycles"
-msgstr "合計周期"
+msgstr "合計サイクル"
#. module: mrp
#: selection:mrp.production,state:0
@@ -866,7 +866,7 @@ msgstr "製造オーダーはキャンセルできません。"
#. module: mrp
#: field:report.workcenter.load,cycle:0
msgid "Nbr of cycle"
-msgstr "周期の数"
+msgstr "サイクル数"
#. module: mrp
#: model:ir.model,name:mrp.model_res_company
@@ -916,7 +916,7 @@ msgstr "在庫可能製品"
#: code:addons/mrp/report/price.py:130
#, python-format
msgid "Work Center name"
-msgstr "ワークセンタ名"
+msgstr "作業センタ名"
#. module: mrp
#: field:mrp.routing,code:0
@@ -932,7 +932,7 @@ msgstr "時間数"
#: view:mrp.property:0
#: view:mrp.property.group:0
msgid "Property Group"
-msgstr "プロパティグループ"
+msgstr "属性グループ"
#. module: mrp
#: view:mrp.production:0
@@ -970,7 +970,7 @@ msgstr "アクティブIDが存在しません。"
msgid ""
"If the service has a 'Buy' supply method, this creates a RFQ, a "
"subcontracting demand for instance."
-msgstr "サービスが供給方法として購入の場合、これは、例えば下請けへの見積要求を作成します。"
+msgstr "サービスが供給方法として購入の場合、これは、例えば下請けへの見積依頼を作成します。"
#. module: mrp
#: field:mrp.production,move_prod_id:0
@@ -1001,27 +1001,27 @@ msgstr "生産の開始"
#: model:ir.actions.act_window,name:mrp.open_board_manufacturing
#: model:ir.ui.menu,name:mrp.menu_board_manufacturing
msgid "Production Dashboard"
-msgstr ""
+msgstr "生産のダッシュボード"
#. module: mrp
#: model:res.groups,name:mrp.group_mrp_manager
msgid "Manager"
-msgstr ""
+msgstr "マネジャ"
#. module: mrp
#: view:mrp.production:0
msgid "Source Loc."
-msgstr ""
+msgstr "元の場所"
#. module: mrp
#: field:mrp.bom,position:0
msgid "Internal Reference"
-msgstr ""
+msgstr "内部参照"
#. module: mrp
#: model:process.node,note:mrp.process_node_billofmaterial0
msgid "Product's structure"
-msgstr ""
+msgstr "製品の構成"
#. module: mrp
#: field:mrp.bom,name:0
@@ -1030,22 +1030,22 @@ msgstr ""
#: field:mrp.routing,name:0
#: field:mrp.routing.workcenter,name:0
msgid "Name"
-msgstr ""
+msgstr "名前"
#. module: mrp
#: field:mrp.product.produce,mode:0
msgid "Mode"
-msgstr ""
+msgstr "モード"
#. module: mrp
#: report:bom.structure:0
msgid "]"
-msgstr ""
+msgstr "]"
#. module: mrp
#: field:mrp.workcenter.load,measure_unit:0
msgid "Amount measuring unit"
-msgstr ""
+msgstr "単位量"
#. module: mrp
#: model:ir.actions.act_window,help:mrp.mrp_production_action_planning
@@ -1057,28 +1057,30 @@ msgid ""
"materials have been defined, OpenERP is capable of automatically deciding on "
"the manufacturing route depending on the needs of the company."
msgstr ""
+"製造オーダーは実行される必要がある操作と各生産段階で原材料の用途について説明しています。仕様(部品表)は原材料の要求と完成製品のための製造オーダーの必要と"
+"される処理のために使われます。部品表が定義されると、OpenERPは会社のニーズに依存した製造経路を自動的に決める能力を持っています。"
#. module: mrp
#: model:ir.actions.todo.category,name:mrp.category_mrp_config
msgid "MRP Management"
-msgstr ""
+msgstr "MRP管理"
#. module: mrp
#: help:mrp.workcenter,costs_hour:0
msgid "Specify Cost of Work Center per hour."
-msgstr ""
+msgstr "時間当りの作業センタコストを指定して下さい。"
#. module: mrp
#: help:mrp.workcenter,capacity_per_cycle:0
msgid ""
"Number of operations this Work Center can do in parallel. If this Work "
"Center represents a team of 5 workers, the capacity per cycle is 5."
-msgstr ""
+msgstr "この作業センタが並列に処理できる操作の数。この作業センタが5人の作業員のチームを表すなら、サイクル当りの容量は5となります。"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.mrp_production_action3
msgid "Manufacturing Orders in Progress"
-msgstr ""
+msgstr "製造オーダーは進行中です。"
#. module: mrp
#: view:mrp.bom:0
@@ -1087,52 +1089,52 @@ msgstr ""
#: view:mrp.routing:0
#: view:mrp.workcenter:0
msgid "Group By..."
-msgstr ""
+msgstr "グループ化…"
#. module: mrp
#: code:addons/mrp/report/price.py:130
#, python-format
msgid "Cycles Cost"
-msgstr ""
+msgstr "サイクルコスト"
#. module: mrp
#: selection:mrp.workcenter.load,measure_unit:0
msgid "Amount in cycles"
-msgstr ""
+msgstr "サイクルの量"
#. module: mrp
#: field:mrp.production,location_dest_id:0
msgid "Finished Products Location"
-msgstr ""
+msgstr "完成した製品の場所"
#. module: mrp
#: model:ir.ui.menu,name:mrp.menu_pm_resources_config
msgid "Resources"
-msgstr ""
+msgstr "リソース"
#. module: mrp
#: help:mrp.routing.workcenter,hour_nbr:0
msgid ""
"Time in hours for this Work Center to achieve the operation of the specified "
"routing."
-msgstr ""
+msgstr "特定経路の操作を達成するためのこの作業センタの時間(時)"
#. module: mrp
#: field:mrp.workcenter,costs_journal_id:0
msgid "Analytic Journal"
-msgstr ""
+msgstr "分析仕訳帳"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.mrp_workcenter_action
#: model:ir.ui.menu,name:mrp.menu_view_resource_search_mrp
#: field:mrp.routing,workcenter_lines:0
msgid "Work Centers"
-msgstr ""
+msgstr "作業センタ"
#. module: mrp
#: selection:mrp.workcenter.load,time_unit:0
msgid "Per week"
-msgstr ""
+msgstr "週毎"
#. module: mrp
#: model:ir.actions.act_window,help:mrp.mrp_routing_action
@@ -1142,31 +1144,32 @@ msgid ""
"They are attached to bills of materials that will define the required raw "
"materials."
msgstr ""
+"経路は製品の生産のための作業センタの中で行わなければならない製造操作の作成と管理を行います。それには要求された原材料を定義した部品表が添付されます。"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.product_form_config_action
msgid "Create or Import Products"
-msgstr ""
+msgstr "製品を作成またはインポート"
#. module: mrp
#: field:report.workcenter.load,hour:0
msgid "Nbr of hour"
-msgstr ""
+msgstr "時間数"
#. module: mrp
#: view:mrp.routing:0
msgid "Work Center Operations"
-msgstr ""
+msgstr "作業センタ操作"
#. module: mrp
#: view:mrp.routing:0
msgid "Notes"
-msgstr ""
+msgstr "注記"
#. module: mrp
#: view:mrp.production:0
msgid "Manufacturing Orders which are ready to start production."
-msgstr ""
+msgstr "生産開始準備ができた製造オーダーです。"
#. module: mrp
#: model:ir.model,name:mrp.model_mrp_bom
@@ -1174,22 +1177,22 @@ msgstr ""
#: field:mrp.production,bom_id:0
#: model:process.node,name:mrp.process_node_billofmaterial0
msgid "Bill of Material"
-msgstr ""
+msgstr "部品表"
#. module: mrp
#: view:mrp.workcenter.load:0
msgid "Select time unit"
-msgstr ""
+msgstr "時間の単位の選択"
#. module: mrp
#: view:report.workcenter.load:0
msgid "Work Center load"
-msgstr ""
+msgstr "作業センタの負荷"
#. module: mrp
#: help:mrp.production,location_dest_id:0
msgid "Location where the system will stock the finished products."
-msgstr ""
+msgstr "システムが完成した製品を在庫する場所です。"
#. module: mrp
#: help:mrp.routing.workcenter,routing_id:0
@@ -1198,6 +1201,8 @@ msgid ""
"Routing is indicated then,the third tab of a production order (Work Centers) "
"will be automatically pre-completed."
msgstr ""
+"経路は全ての作業センタが長さとサイクルがどのくらい使われるかを示します。経路が示される場合、生産オーダー(作業センタ)の第3のタブは自動的に事前完了します"
+"。"
#. module: mrp
#: model:process.transition,note:mrp.process_transition_producttostockrules0
@@ -1205,7 +1210,7 @@ msgid ""
"The Minimum Stock Rule is an automatic procurement rule based on a mini and "
"maxi quantity. It's available in the Inventory management menu and "
"configured by product."
-msgstr ""
+msgstr "最小在庫ルールは最小と最大の量に基づき自動調達するルールです。これは在庫管理メニューで利用可能で製品ごとに設定できます。"
#. module: mrp
#: code:addons/mrp/report/price.py:187
@@ -1216,65 +1221,65 @@ msgstr "%s %s の構成部品コスト"
#. module: mrp
#: selection:mrp.workcenter.load,time_unit:0
msgid "Day by day"
-msgstr ""
+msgstr "日々"
#. module: mrp
#: view:mrp.bom:0
msgid "Revisions"
-msgstr ""
+msgstr "改訂"
#. module: mrp
#: model:product.template,name:mrp.product_shirt_product_template
msgid "Shirt"
-msgstr ""
+msgstr "シャツ"
#. module: mrp
#: field:mrp.production,priority:0
msgid "Priority"
-msgstr ""
+msgstr "優先度"
#. module: mrp
#: model:ir.model,name:mrp.model_stock_picking
msgid "Picking List"
-msgstr ""
+msgstr "集荷リスト"
#. module: mrp
#: code:addons/mrp/mrp.py:1000
#, python-format
msgid "Manufacturing order '%s' is scheduled for the %s."
-msgstr ""
+msgstr "製造オーダー %s は %s に予定されています。"
#. module: mrp
#: report:mrp.production.order:0
msgid "Production Order N° :"
-msgstr ""
+msgstr "s生産オーダー番号:"
#. module: mrp
#: code:addons/mrp/mrp.py:647
#, python-format
msgid "Manufacturing order '%s' is ready to produce."
-msgstr ""
+msgstr "製造オーダー %s は生産する準備ができています。"
#. module: mrp
#: model:ir.model,name:mrp.model_mrp_production_product_line
msgid "Production Scheduled Product"
-msgstr ""
+msgstr "生産予定済製品"
#. module: mrp
#: code:addons/mrp/report/price.py:204
#, python-format
msgid "Work Cost of %s %s"
-msgstr ""
+msgstr "作業コスト %s %s"
#. module: mrp
#: help:res.company,manufacturing_lead:0
msgid "Security days for each manufacturing operation."
-msgstr ""
+msgstr "各製造操作の安全保障の日"
#. module: mrp
#: model:product.template,name:mrp.product_water_product_template
msgid "Water"
-msgstr ""
+msgstr "水"
#. module: mrp
#: view:mrp.bom:0
@@ -1286,12 +1291,12 @@ msgstr "構成部品名"
#: model:process.transition,name:mrp.process_transition_servicemts0
#: model:process.transition,name:mrp.process_transition_stockmts0
msgid "Make to Stock"
-msgstr ""
+msgstr "在庫の作成"
#. module: mrp
#: constraint:mrp.production:0
msgid "Order quantity cannot be negative or zero!"
-msgstr ""
+msgstr "オーダー数量は負または0にはできません。"
#. module: mrp
#: model:ir.actions.act_window,help:mrp.mrp_bom_form_action
@@ -1302,24 +1307,26 @@ msgid ""
"product needs. You can either create a bill of materials to define specific "
"production steps or define a single multi-level bill of materials."
msgstr ""
+"マスター部品表は完成品を作るために使用される必要な原材料のリストを作成し管理します。OpenERPは製品のニーズに応じて製造オーダーを自動的に提案するため"
+"にそれらの部品表を使用します。特定の生産手順の定義や、単一の多層部品表の定義のために部品表を作成できます。"
#. module: mrp
#: model:process.transition,note:mrp.process_transition_stockrfq0
msgid ""
"In case the Supply method of the product is Buy, the system creates a "
"purchase order."
-msgstr ""
+msgstr "製品の供給方法が購入の場合、システムは仕入オーダーを作成します。"
#. module: mrp
#: model:ir.model,name:mrp.model_procurement_order
msgid "Procurement"
-msgstr ""
+msgstr "調達"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.action_view_mrp_product_price_wizard
#: view:mrp.product_price:0
msgid "Product Cost Structure"
-msgstr ""
+msgstr "製品のコスト構造"
#. module: mrp
#: code:addons/mrp/report/price.py:139
@@ -1330,80 +1337,80 @@ msgstr "構成部品仕入先"
#. module: mrp
#: view:mrp.production:0
msgid "Production Work Centers"
-msgstr ""
+msgstr "生産作業センタ"
#. module: mrp
#: view:mrp.production:0
msgid "Split in production lots"
-msgstr ""
+msgstr "生産ロットに分割"
#. module: mrp
#: view:mrp.workcenter:0
msgid "Search for mrp workcenter"
-msgstr ""
+msgstr "MRP作業センタの検索"
#. module: mrp
#: view:mrp.bom:0
msgid "BoM Structure"
-msgstr ""
+msgstr "部品表の構造"
#. module: mrp
#: field:mrp.production,date_start:0
msgid "Start Date"
-msgstr ""
+msgstr "開始日"
#. module: mrp
#: field:mrp.workcenter,costs_hour_account_id:0
msgid "Hour Account"
-msgstr ""
+msgstr "時間アカウント"
#. module: mrp
#: view:mrp.production:0
msgid "Destination Loc."
-msgstr ""
+msgstr "目的地"
#. module: mrp
#: field:mrp.bom,method:0
msgid "Method"
-msgstr ""
+msgstr "方法"
#. module: mrp
#: view:mrp.production:0
msgid "Pending"
-msgstr ""
+msgstr "保留中"
#. module: mrp
#: code:addons/mrp/mrp.py:603
#, python-format
msgid "Couldn't find a bill of material for this product."
-msgstr ""
+msgstr "この製品のための部品表がありません。"
#. module: mrp
#: field:mrp.bom,active:0
#: field:mrp.routing,active:0
msgid "Active"
-msgstr ""
+msgstr "アクティブ"
#. module: mrp
#: model:process.node,name:mrp.process_node_procureproducts0
msgid "Procure Products"
-msgstr ""
+msgstr "調達製品"
#. module: mrp
#: view:report.workcenter.load:0
msgid "Work Center Loads"
-msgstr ""
+msgstr "作業センタの負荷"
#. module: mrp
#: model:ir.model,name:mrp.model_mrp_bom_revision
msgid "Bill of Material Revision"
-msgstr ""
+msgstr "部品表の改訂"
#. module: mrp
#: help:mrp.production,origin:0
msgid ""
"Reference of the document that generated this production order request."
-msgstr ""
+msgstr "この生産オーダー要求を生成したドキュメントへの参照"
#. module: mrp
#: sql_constraint:mrp.bom:0
@@ -1412,56 +1419,58 @@ msgid ""
"You should install the mrp_subproduct module if you want to manage extra "
"products on BoMs !"
msgstr ""
+"全製品の数量は0より大きい必要があります。\n"
+"部品表上で追加の製品を管理したい場合は、mrp_subproductモジュールをインストールする必要があります。"
#. module: mrp
#: view:mrp.production:0
msgid "Extra Information"
-msgstr ""
+msgstr "追加情報"
#. module: mrp
#: model:ir.model,name:mrp.model_change_production_qty
msgid "Change Quantity of Products"
-msgstr ""
+msgstr "製品の数量変更"
#. module: mrp
#: model:process.node,note:mrp.process_node_productionorder0
msgid "Drives the procurement orders for raw material."
-msgstr ""
+msgstr "原材料の調達オーダーを起こす"
#. module: mrp
#: field:mrp.workcenter,costs_general_account_id:0
msgid "General Account"
-msgstr ""
+msgstr "一般アカウント"
#. module: mrp
#: report:mrp.production.order:0
msgid "SO Number"
-msgstr ""
+msgstr "受注番号"
#. module: mrp
#: selection:mrp.production,state:0
msgid "Done"
-msgstr ""
+msgstr "完了"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.mrp_production_action4
msgid "Manufacturing Orders Waiting Products"
-msgstr ""
+msgstr "製造オーダー待ち製品"
#. module: mrp
#: selection:mrp.production,priority:0
msgid "Not urgent"
-msgstr ""
+msgstr "緊急外"
#. module: mrp
#: field:mrp.production,user_id:0
msgid "Responsible"
-msgstr ""
+msgstr "担当"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.mrp_production_action2
msgid "Manufacturing Orders To Start"
-msgstr ""
+msgstr "製造オーダー開始"
#. module: mrp
#: model:ir.model,name:mrp.model_mrp_workcenter
@@ -1470,12 +1479,12 @@ msgstr ""
#: view:mrp.workcenter:0
#: field:report.workcenter.load,workcenter_id:0
msgid "Work Center"
-msgstr ""
+msgstr "作業センタ"
#. module: mrp
#: field:mrp.workcenter,capacity_per_cycle:0
msgid "Capacity per Cycle"
-msgstr ""
+msgstr "サイクル当りの容量"
#. module: mrp
#: model:ir.model,name:mrp.model_product_product
@@ -1486,76 +1495,76 @@ msgstr ""
#: report:mrp.production.order:0
#: field:mrp.production.product.line,product_id:0
msgid "Product"
-msgstr ""
+msgstr "製品"
#. module: mrp
#: view:mrp.production:0
#: field:mrp.production,hour_total:0
msgid "Total Hours"
-msgstr ""
+msgstr "合計時間"
#. module: mrp
#: field:mrp.production,location_src_id:0
msgid "Raw Materials Location"
-msgstr ""
+msgstr "原材料の場所"
#. module: mrp
#: view:mrp.product_price:0
msgid "Print Cost Structure of Product."
-msgstr ""
+msgstr "製品のコスト構造の印刷"
#. module: mrp
#: field:mrp.bom,product_uos:0
#: field:mrp.production.product.line,product_uos:0
msgid "Product UOS"
-msgstr ""
+msgstr "製品販売単位"
#. module: mrp
#: view:mrp.production:0
msgid "Consume Products"
-msgstr ""
+msgstr "消費製品"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.act_mrp_product_produce
#: view:mrp.product.produce:0
#: view:mrp.production:0
msgid "Produce"
-msgstr ""
+msgstr "生産"
#. module: mrp
#: model:process.node,name:mrp.process_node_stock0
#: model:process.transition,name:mrp.process_transition_servicemto0
#: model:process.transition,name:mrp.process_transition_stockproduct0
msgid "Make to Order"
-msgstr ""
+msgstr "オーダーの作成"
#. module: mrp
#: code:addons/mrp/mrp.py:358
#, python-format
msgid "Copy"
-msgstr ""
+msgstr "コピー"
#. module: mrp
#: help:mrp.workcenter,note:0
msgid ""
"Description of the Work Center. Explain here what's a cycle according to "
"this Work Center."
-msgstr ""
+msgstr "作業センタの説明。この作業センタは何がサイクルであるかをここで説明して下さい。"
#. module: mrp
#: view:mrp.production.lot.line:0
msgid "Production Products"
-msgstr ""
+msgstr "生産製品"
#. module: mrp
#: field:mrp.production,date_finished:0
msgid "End Date"
-msgstr ""
+msgstr "終了日"
#. module: mrp
#: field:mrp.workcenter,resource_id:0
msgid "Resource"
-msgstr ""
+msgstr "リソース"
#. module: mrp
#: help:mrp.bom,date_start:0
@@ -1566,12 +1575,12 @@ msgstr "部品表や構成部品の妥当性。常に有効な場合は空のま
#. module: mrp
#: field:mrp.production,product_uos:0
msgid "Product UoS"
-msgstr ""
+msgstr "製品販売単位"
#. module: mrp
#: selection:mrp.production,priority:0
msgid "Very Urgent"
-msgstr ""
+msgstr "非常に緊急"
#. module: mrp
#: help:mrp.bom,routing_id:0
@@ -1581,37 +1590,39 @@ msgid ""
"operations and to plan future loads on work centers based on production "
"planning."
msgstr ""
+"完成した製品を生産するための操作のリスト(作業センタのリスト)。経路は操作の間の作業センタのコストを計算し、生産計画化を基本とする作業センタの将来の負荷を"
+"計画するために主に利用されます。"
#. module: mrp
#: view:change.production.qty:0
msgid "Approve"
-msgstr ""
+msgstr "承認"
#. module: mrp
#: view:mrp.property.group:0
msgid "Properties categories"
-msgstr ""
+msgstr "属性の分類"
#. module: mrp
#: help:mrp.production.workcenter.line,sequence:0
msgid "Gives the sequence order when displaying a list of work orders."
-msgstr ""
+msgstr "作業オーダーリストの表示の際には並びの順序を与えて下さい。"
#. module: mrp
#: report:mrp.production.order:0
msgid "Source Location"
-msgstr ""
+msgstr "元の場所"
#. module: mrp
#: view:mrp.production:0
#: view:mrp.production.product.line:0
msgid "Scheduled Products"
-msgstr ""
+msgstr "予定済製品"
#. module: mrp
#: view:mrp.production.lot.line:0
msgid "Production Products Consommation"
-msgstr ""
+msgstr "生産製品の消費"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.act_product_manufacturing_open
@@ -1621,7 +1632,7 @@ msgstr ""
#: model:ir.ui.menu,name:mrp.menu_mrp_production_order_action
#: view:mrp.production:0
msgid "Manufacturing Orders"
-msgstr ""
+msgstr "製造オーダー"
#. module: mrp
#: help:mrp.product.produce,mode:0
@@ -1632,34 +1643,36 @@ msgid ""
"the quantity selected and it will finish the production order when total "
"ordered quantities are produced."
msgstr ""
+"消費のみモードでは、製品は選択した量だけを消費します。\n"
+"消費と生産モードでは、製品を選択した数量生産すると同様に消費もされます。そして合計注文量が生産された時に生産オーダーが終わります。"
#. module: mrp
#: view:mrp.production:0
#: report:mrp.production.order:0
msgid "Work Orders"
-msgstr ""
+msgstr "作業オーダー"
#. module: mrp
#: field:mrp.workcenter,costs_cycle:0
msgid "Cost per cycle"
-msgstr ""
+msgstr "サイクル当りのコスト"
#. module: mrp
#: model:process.node,name:mrp.process_node_serviceproduct0
#: model:process.node,name:mrp.process_node_serviceproduct1
msgid "Service"
-msgstr ""
+msgstr "サービス"
#. module: mrp
#: selection:mrp.production,state:0
msgid "Cancelled"
-msgstr ""
+msgstr "キャンセル済"
#. module: mrp
#: help:mrp.bom,product_uom:0
msgid ""
"UoM (Unit of Measure) is the unit of measurement for the inventory control"
-msgstr ""
+msgstr "UOMは在庫管理のための単位です。"
#. module: mrp
#: code:addons/mrp/mrp.py:734
@@ -1668,6 +1681,8 @@ msgid ""
"You are going to consume total %s quantities of \"%s\".\n"
"But you can only consume up to total %s quantities."
msgstr ""
+"合計 %s のうち %s を消費しようとしています。\n"
+"しかし、あなたは合計 %s の量までのみ使用することができます。"
#. module: mrp
#: model:process.transition,note:mrp.process_transition_bom0
@@ -1684,17 +1699,17 @@ msgstr "部品表は製品を分解したものである。構成部品(それ
#: field:mrp.routing.workcenter,company_id:0
#: view:mrp.workcenter:0
msgid "Company"
-msgstr ""
+msgstr "会社"
#. module: mrp
#: selection:mrp.workcenter.load,measure_unit:0
msgid "Amount in hours"
-msgstr ""
+msgstr "時間の量"
#. module: mrp
#: field:mrp.workcenter,time_cycle:0
msgid "Time for 1 cycle (hour)"
-msgstr ""
+msgstr "サイクル当りの時間(時)"
#. module: mrp
#: model:ir.actions.report.xml,name:mrp.report_mrp_production_report
@@ -1703,22 +1718,22 @@ msgstr ""
#: model:process.node,name:mrp.process_node_production0
#: model:process.node,name:mrp.process_node_productionorder0
msgid "Production Order"
-msgstr ""
+msgstr "生産オーダー"
#. module: mrp
#: model:process.node,note:mrp.process_node_productminimumstockrule0
msgid "Automatic procurement rule"
-msgstr ""
+msgstr "自動調達ルール"
#. module: mrp
#: view:mrp.production:0
msgid "Compute Data"
-msgstr ""
+msgstr "データ計算"
#. module: mrp
#: field:mrp.production,product_uos_qty:0
msgid "Product UoS Qty"
-msgstr ""
+msgstr "製品販売単位数量"
#. module: mrp
#: code:addons/mrp/report/price.py:139
@@ -1731,33 +1746,33 @@ msgstr "構成部品"
#: report:bom.structure:0
#: model:ir.actions.report.xml,name:mrp.report_bom_structure
msgid "BOM Structure"
-msgstr ""
+msgstr "部品表構造"
#. module: mrp
#: field:mrp.bom,date_stop:0
msgid "Valid Until"
-msgstr ""
+msgstr "失効日"
#. module: mrp
#: field:mrp.bom,date_start:0
msgid "Valid From"
-msgstr ""
+msgstr "発効日"
#. module: mrp
#: selection:mrp.bom,type:0
msgid "Normal BoM"
-msgstr ""
+msgstr "通常部品表"
#. module: mrp
#: field:res.company,manufacturing_lead:0
msgid "Manufacturing Lead Time"
-msgstr ""
+msgstr "製造リードタイム"
#. module: mrp
#: field:mrp.bom,product_uos_qty:0
#: field:mrp.production.product.line,product_uos_qty:0
msgid "Product UOS Qty"
-msgstr ""
+msgstr "製品販売単位数量"
#. module: mrp
#: model:ir.actions.act_window,help:mrp.action_report_in_out_picking_tree
@@ -1770,44 +1785,44 @@ msgstr "週次在庫価値変動は生産活動、製品の受付と配達オー
#. module: mrp
#: view:mrp.product.produce:0
msgid "Confirm"
-msgstr ""
+msgstr "確認"
#. module: mrp
#: field:mrp.bom,product_efficiency:0
msgid "Manufacturing Efficiency"
-msgstr ""
+msgstr "製造の効率化"
#. module: mrp
#: constraint:res.company:0
msgid "Error! You can not create recursive companies."
-msgstr ""
+msgstr "エラー。再帰的な関係となる会社を作ることはできません。"
#. module: mrp
#: help:mrp.bom,active:0
msgid ""
"If the active field is set to False, it will allow you to hide the bills of "
"material without removing it."
-msgstr ""
+msgstr "アクティブな項目をFalseに設定すると、部品表は削除することなく非表示にできます。"
#. module: mrp
#: field:mrp.bom,product_rounding:0
msgid "Product Rounding"
-msgstr ""
+msgstr "製品の丸め"
#. module: mrp
#: selection:mrp.production,state:0
msgid "New"
-msgstr ""
+msgstr "新規"
#. module: mrp
#: selection:mrp.product.produce,mode:0
msgid "Consume Only"
-msgstr ""
+msgstr "消費のみ"
#. module: mrp
#: view:mrp.production:0
msgid "Recreate Picking"
-msgstr ""
+msgstr "集荷の再作成"
#. module: mrp
#: help:mrp.bom,type:0
@@ -1832,83 +1847,89 @@ msgid ""
" When the production gets started then the state is set to 'In Production'.\n"
" When the production is over, the state is set to 'Done'."
msgstr ""
+"生産オーダーが作成された時、状態はドラフトに設定されます。\n"
+" オーダーが確認されると、状態は商品待ちに設定されます。\n"
+" 何か例外がある場合は、状態は集荷例外に設定されます。\n"
+"在庫が使用可能になった時に、状態は生産準備完了に設定されます。\n"
+" 生産が開始されると、状態は生産中に設定されます。\n"
+" 生産が終了すると、状態は完了に設定されます。"
#. module: mrp
#: selection:mrp.bom,method:0
msgid "On Order"
-msgstr ""
+msgstr "注文中"
#. module: mrp
#: model:ir.ui.menu,name:mrp.menu_mrp_configuration
#: view:res.company:0
msgid "Configuration"
-msgstr ""
+msgstr "設定"
#. module: mrp
#: view:mrp.bom:0
msgid "Starting Date"
-msgstr ""
+msgstr "開始日"
#. module: mrp
#: field:mrp.workcenter,time_stop:0
msgid "Time after prod."
-msgstr ""
+msgstr "生産後の時間"
#. module: mrp
#: field:mrp.workcenter.load,time_unit:0
msgid "Type of period"
-msgstr ""
+msgstr "期間のタイプ"
#. module: mrp
#: view:mrp.production:0
msgid "Total Qty"
-msgstr ""
+msgstr "合計数量"
#. module: mrp
#: field:mrp.routing.workcenter,hour_nbr:0
msgid "Number of Hours"
-msgstr ""
+msgstr "時間数"
#. module: mrp
#: view:mrp.workcenter:0
msgid "Costing Information"
-msgstr ""
+msgstr "コスト情報"
#. module: mrp
#: model:process.node,name:mrp.process_node_purchaseprocure0
msgid "Procurement Orders"
-msgstr ""
+msgstr "調達オーダー"
#. module: mrp
#: help:mrp.bom,product_rounding:0
msgid "Rounding applied on the product quantity."
-msgstr ""
+msgstr "丸めは製品数量に適用されます。"
#. module: mrp
#: model:process.node,note:mrp.process_node_stock0
msgid "Assignment from Production or Purchase Order."
-msgstr ""
+msgstr "生産または仕入オーダーから割り当てて下さい。"
#. module: mrp
#: field:mrp.routing.workcenter,routing_id:0
msgid "Parent Routing"
-msgstr ""
+msgstr "親経路"
#. module: mrp
#: help:mrp.workcenter,time_start:0
msgid "Time in hours for the setup."
-msgstr ""
+msgstr "設定のための時間(時)"
#. module: mrp
#: model:product.template,name:mrp.product_orangejuice_product_template
msgid "Orange Juice"
-msgstr ""
+msgstr "オレンジジュース"
#. module: mrp
#: field:mrp.bom.revision,bom_id:0
#: field:procurement.order,bom_id:0
msgid "BoM"
-msgstr ""
+msgstr "部品表"
#. module: mrp
#: model:ir.model,name:mrp.model_report_mrp_inout
@@ -1920,71 +1941,71 @@ msgstr "在庫価値変動"
#: model:process.node,note:mrp.process_node_mts0
#: model:process.node,note:mrp.process_node_servicemts0
msgid "Assignment from stock."
-msgstr ""
+msgstr "在庫から割り当てて下さい。"
#. module: mrp
#: selection:mrp.production,state:0
msgid "Waiting Goods"
-msgstr ""
+msgstr "待機商品"
#. module: mrp
#: field:mrp.bom.revision,last_indice:0
msgid "last indice"
-msgstr ""
+msgstr "最終インデックス"
#. module: mrp
#: field:mrp.bom,revision_ids:0
#: view:mrp.bom.revision:0
msgid "BoM Revisions"
-msgstr ""
+msgstr "部品表改訂"
#. module: mrp
#: field:report.mrp.inout,date:0
#: field:report.workcenter.load,name:0
msgid "Week"
-msgstr ""
+msgstr "週"
#. module: mrp
#: selection:mrp.production,priority:0
msgid "Normal"
-msgstr ""
+msgstr "通常"
#. module: mrp
#: view:mrp.production:0
msgid "Production started late"
-msgstr ""
+msgstr "生産が遅れて開始"
#. module: mrp
#: model:process.node,note:mrp.process_node_routing0
msgid "Manufacturing Steps."
-msgstr ""
+msgstr "製造工程"
#. module: mrp
#: code:addons/mrp/report/price.py:146
#: model:ir.actions.report.xml,name:mrp.report_cost_structure
#, python-format
msgid "Cost Structure"
-msgstr ""
+msgstr "コスト構造"
#. module: mrp
#: model:res.groups,name:mrp.group_mrp_user
msgid "User"
-msgstr ""
+msgstr "ユーザ"
#. module: mrp
#: selection:mrp.product.produce,mode:0
msgid "Consume & Produce"
-msgstr ""
+msgstr "消費と生産"
#. module: mrp
#: field:mrp.bom,bom_id:0
msgid "Parent BoM"
-msgstr ""
+msgstr "親部品表"
#. module: mrp
#: report:bom.structure:0
msgid "BOM Ref"
-msgstr ""
+msgstr "部品表参照"
#. module: mrp
#: model:ir.actions.act_window,help:mrp.mrp_bom_form_action2
@@ -1999,7 +2020,7 @@ msgstr ""
#. module: mrp
#: model:product.uom,name:mrp.product_uom_litre
msgid "Litre"
-msgstr ""
+msgstr "リットル"
#. module: mrp
#: code:addons/mrp/mrp.py:762
@@ -2008,11 +2029,13 @@ msgid ""
"You are going to produce total %s quantities of \"%s\".\n"
"But you can only produce up to total %s quantities."
msgstr ""
+"合計 %s の %s を生産しようとしています。\n"
+"しかし、あなたは合計 %s の量までのみ生産することができます。"
#. module: mrp
#: model:process.node,note:mrp.process_node_stockproduct0
msgid "Product type is Stockable or Consumable."
-msgstr ""
+msgstr "製品タイプは在庫可能または消費可能です。"
#. module: mrp
#: code:addons/mrp/mrp.py:603
@@ -2020,17 +2043,17 @@ msgstr ""
#: code:addons/mrp/wizard/change_production_qty.py:83
#, python-format
msgid "Error"
-msgstr ""
+msgstr "エラー"
#. module: mrp
#: selection:mrp.production,state:0
msgid "Production Started"
-msgstr ""
+msgstr "生産開始済"
#. module: mrp
#: field:mrp.product.produce,product_qty:0
msgid "Select Quantity"
-msgstr ""
+msgstr "数量選択"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.act_product_product_2_mrp_bom
@@ -2038,7 +2061,7 @@ msgstr ""
#: model:ir.ui.menu,name:mrp.menu_mrp_bom_form_action
#: field:product.product,bom_ids:0
msgid "Bill of Materials"
-msgstr ""
+msgstr "部品表"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.mrp_property_action
@@ -2049,18 +2072,18 @@ msgstr ""
#: view:procurement.order:0
#: field:procurement.order,property_ids:0
msgid "Properties"
-msgstr ""
+msgstr "属性"
#. module: mrp
#: view:mrp.routing.workcenter:0
#: view:mrp.workcenter:0
msgid "General Information"
-msgstr ""
+msgstr "一般情報"
#. module: mrp
#: view:mrp.production:0
msgid "Productions"
-msgstr ""
+msgstr "生産"
#. module: mrp
#: model:ir.model,name:mrp.model_mrp_routing
@@ -2071,59 +2094,59 @@ msgstr ""
#: view:mrp.routing:0
#: model:process.node,name:mrp.process_node_routing0
msgid "Routing"
-msgstr ""
+msgstr "経路"
#. module: mrp
#: field:mrp.production,date_planned:0
msgid "Scheduled date"
-msgstr ""
+msgstr "予定日"
#. module: mrp
#: constraint:stock.move:0
msgid "You must assign a production lot for this product"
-msgstr ""
+msgstr "この製品に生産ロットを割り当てて下さい。"
#. module: mrp
#: field:stock.move,production_id:0
msgid "Production"
-msgstr ""
+msgstr "生産"
#. module: mrp
#: model:ir.model,name:mrp.model_mrp_production_workcenter_line
#: field:mrp.production.workcenter.line,name:0
msgid "Work Order"
-msgstr ""
+msgstr "作業オーダー"
#. module: mrp
#: view:board.board:0
msgid "Procurements in Exception"
-msgstr ""
+msgstr "調達の例外"
#. module: mrp
#: model:process.transition,name:mrp.process_transition_minimumstockprocure0
msgid "'Minimum stock rule' material"
-msgstr ""
+msgstr "材料の最小在庫ルール"
#. module: mrp
#: model:ir.model,name:mrp.model_mrp_product_price
msgid "Product Price"
-msgstr ""
+msgstr "製品価格"
#. module: mrp
#: model:ir.model,name:mrp.model_stock_move_split
msgid "Split in Production lots"
-msgstr ""
+msgstr "生産ロットに分割"
#. module: mrp
#: view:change.production.qty:0
msgid "Change Quantity"
-msgstr ""
+msgstr "数量変更"
#. module: mrp
#: view:change.production.qty:0
#: model:ir.actions.act_window,name:mrp.action_change_production_qty
msgid "Change Product Qty"
-msgstr ""
+msgstr "製品数量変更"
#. module: mrp
#: view:mrp.bom.revision:0
@@ -2136,45 +2159,45 @@ msgstr ""
#: view:mrp.workcenter:0
#: field:mrp.workcenter,note:0
msgid "Description"
-msgstr ""
+msgstr "説明"
#. module: mrp
#: view:board.board:0
msgid "Manufacturing board"
-msgstr ""
+msgstr "製造ボード"
#. module: mrp
#: field:mrp.production,date_planned_end:0
msgid "Scheduled End Date"
-msgstr ""
+msgstr "終了予定日"
#. module: mrp
#: model:process.node,note:mrp.process_node_procureproducts0
msgid "The way to procurement depends on the product type."
-msgstr ""
+msgstr "調達方法は製品タイプに依存します。"
#. module: mrp
#: model:ir.ui.menu,name:mrp.menu_mrp_manufacturing
msgid "Manufacturing"
-msgstr ""
+msgstr "製造"
#. module: mrp
#: view:board.board:0
msgid "Next Production Orders"
-msgstr ""
+msgstr "次の生産オーダー"
#. module: mrp
#: model:ir.actions.act_window,name:mrp.mrp_property_group_action
#: model:ir.ui.menu,name:mrp.menu_mrp_property_group_action
msgid "Property Groups"
-msgstr ""
+msgstr "属性グループ"
#. module: mrp
#: model:process.transition,note:mrp.process_transition_procurestockableproduct0
msgid ""
"Depending on the chosen method to supply the stockable products, the "
"procurement order creates a RFQ, a production order, ... "
-msgstr ""
+msgstr "在庫可能製品の供給をするために選択された方法にしたがって、調達オーダーは見積依頼や生産オーダーなどを作成します。 "
#. module: mrp
#: code:addons/mrp/mrp.py:874
@@ -2182,24 +2205,24 @@ msgstr ""
#: code:addons/mrp/mrp.py:954
#, python-format
msgid "PROD: %s"
-msgstr ""
+msgstr "生産:%s"
#. module: mrp
#: help:mrp.workcenter,time_stop:0
msgid "Time in hours for the cleaning."
-msgstr ""
+msgstr "清掃のための時間(時)"
#. module: mrp
#: model:process.transition,name:mrp.process_transition_purchaseprocure0
msgid "Automatic RFQ"
-msgstr ""
+msgstr "自動見積依頼"
#. module: mrp
#: model:process.transition,note:mrp.process_transition_servicemto0
msgid ""
"If the service has a 'Produce' supply method, this creates a task in the "
"project management module of OpenERP."
-msgstr ""
+msgstr "サービスが提供方法として生産であるなら、これはOpenERPのプロジェクト管理モジュールの中にタスクを生成します。"
#. module: mrp
#: model:process.transition,note:mrp.process_transition_productionprocureproducts0
@@ -2216,12 +2239,12 @@ msgstr ""
msgid ""
"Specify quantity of products to produce or buy. Report of Cost structure "
"will be displayed base on this quantity."
-msgstr ""
+msgstr "生産あるいは購入する製品の数量を指定して下さい。コスト構造のレポートはこの数量を元にして表示されます。"
#. module: mrp
#: selection:mrp.bom,method:0
msgid "On Stock"
-msgstr ""
+msgstr "在庫"
#. module: mrp
#: field:mrp.bom,sequence:0
@@ -2229,21 +2252,21 @@ msgstr ""
#: field:mrp.production.workcenter.line,sequence:0
#: field:mrp.routing.workcenter,sequence:0
msgid "Sequence"
-msgstr ""
+msgstr "順序"
#. module: mrp
#: model:ir.ui.menu,name:mrp.menu_view_resource_calendar_leaves_search_mrp
msgid "Resource Leaves"
-msgstr ""
+msgstr "リソースの休暇"
#. module: mrp
#: help:mrp.bom,sequence:0
msgid "Gives the sequence order when displaying a list of bills of material."
-msgstr ""
+msgstr "部品表のリストを表示する際には並び順を与えて下さい。"
#. module: mrp
#: view:mrp.production:0
#: field:mrp.production,move_lines:0
#: report:mrp.production.order:0
msgid "Products to Consume"
-msgstr ""
+msgstr "消費製品"
diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml
index fb5d07c1754..7c8410cad7f 100644
--- a/addons/mrp/mrp_view.xml
+++ b/addons/mrp/mrp_view.xml
@@ -632,7 +632,7 @@
form
+
+
diff --git a/addons/stock_location/procurement_pull.py b/addons/stock_location/procurement_pull.py
index 33168a53e20..ca397f7fa2d 100644
--- a/addons/stock_location/procurement_pull.py
+++ b/addons/stock_location/procurement_pull.py
@@ -115,7 +115,8 @@ class procurement_order(osv.osv):
if proc.move_id:
move_obj.write(cr, uid, [proc.move_id.id],
{'location_id':proc.location_id.id})
- self.write(cr, uid, [proc.id], {'state':'running', 'message':_('Pulled from another location via procurement %d')%proc_id})
+ self.write(cr, uid, [proc.id], {'state':'running', 'message':_('Pulled from another location via procurement %d') % proc_id})
+ self.running_send_note(cr, uid, [proc.id], context=context)
# trigger direct processing (the new procurement shares the same planned date as the original one, which is already being processed)
wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_check', cr)
diff --git a/addons/stock_location/stock_location_view.xml b/addons/stock_location/stock_location_view.xml
index 94a9feb9d57..5f2bacd565f 100644
--- a/addons/stock_location/stock_location_view.xml
+++ b/addons/stock_location/stock_location_view.xml
@@ -51,7 +51,7 @@
-
+
@@ -81,7 +81,7 @@
-
+
diff --git a/addons/stock_planning/stock_planning_view.xml b/addons/stock_planning/stock_planning_view.xml
index 7a4cef952bf..1b5cd953027 100644
--- a/addons/stock_planning/stock_planning_view.xml
+++ b/addons/stock_planning/stock_planning_view.xml
@@ -13,14 +13,11 @@
form
-
+
-
-
-
-
-
+
+
@@ -85,13 +82,10 @@
form
-
+
-
-
-
-
-
+
+
diff --git a/addons/subscription/subscription_view.xml b/addons/subscription/subscription_view.xml
index 13ebe096843..b4c992dcbc4 100644
--- a/addons/subscription/subscription_view.xml
+++ b/addons/subscription/subscription_view.xml
@@ -14,15 +14,12 @@
form
-
+
-
-
-
-
-
+
+
@@ -67,9 +64,6 @@
-
-
-
diff --git a/addons/survey/survey_view.xml b/addons/survey/survey_view.xml
index e8f02f6d3e0..96dc60ff447 100644
--- a/addons/survey/survey_view.xml
+++ b/addons/survey/survey_view.xml
@@ -19,15 +19,12 @@
form
-
+
-
-
-
-
-
+
+
@@ -1060,16 +1057,13 @@
form
-
+
-
-
-
-
-
+
+
diff --git a/addons/web_livechat/i18n/sv.po b/addons/web_livechat/i18n/sv.po
new file mode 100644
index 00000000000..dd3ae799443
--- /dev/null
+++ b/addons/web_livechat/i18n/sv.po
@@ -0,0 +1,28 @@
+# Swedish translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 01:37+0100\n"
+"PO-Revision-Date: 2012-06-04 15:38+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Swedish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-06-05 04:54+0000\n"
+"X-Generator: Launchpad (build 15353)\n"
+
+#. module: web_livechat
+#: sql_constraint:publisher_warranty.contract:0
+msgid "That contract is already registered in the system."
+msgstr "Det kontraktet har redan registrerats i systemet."
+
+#. module: web_livechat
+#: model:ir.model,name:web_livechat.model_publisher_warranty_contract
+msgid "publisher_warranty.contract"
+msgstr "publisher_warranty.contract"
diff --git a/addons/web_uservoice/i18n/sv.po b/addons/web_uservoice/i18n/sv.po
new file mode 100644
index 00000000000..cf2af514acf
--- /dev/null
+++ b/addons/web_uservoice/i18n/sv.po
@@ -0,0 +1,23 @@
+# Swedish translation for openobject-addons
+# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2012.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-02-08 01:37+0100\n"
+"PO-Revision-Date: 2012-06-04 15:37+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Swedish \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2012-06-05 04:54+0000\n"
+"X-Generator: Launchpad (build 15353)\n"
+
+#. openerp-web
+#: /home/odo/repositories/addons/trunk/web_uservoice/static/src/xml/web_uservoice.xml:6
+msgid "feedback"
+msgstr "återkoppling"