diff --git a/addons/account/account_bank_statement.py b/addons/account/account_bank_statement.py
index 51e3d2dbe85..1f47a6be9bd 100644
--- a/addons/account/account_bank_statement.py
+++ b/addons/account/account_bank_statement.py
@@ -127,6 +127,7 @@ class account_bank_statement(osv.osv):
_order = "date desc, id desc"
_name = "account.bank.statement"
_description = "Bank Statement"
+ _inherit = ['mail.thread']
_columns = {
'name': fields.char('Name', size=64, required=True, states={'draft': [('readonly', False)]}, readonly=True, help='if you give the Name other then /, its created Accounting Entries Move will be with same name as statement name. This allows the statement entries to have the same references than the statement itself'), # readonly for account_cash_statement
'date': fields.date('Date', required=True, states={'confirm': [('readonly', True)]}, select=True),
@@ -364,7 +365,7 @@ class account_bank_statement(osv.osv):
'name': st_number,
'balance_end_real': st.balance_end
}, context=context)
- self.log(cr, uid, st.id, _('Statement %s is confirmed, journal items are created.') % (st_number,))
+ self.message_append_note(cr, uid, [st.id], body=_('Statement %s is confirmed, journal items are created.') % (st_number,), context=context)
return self.write(cr, uid, ids, {'state':'confirm'}, context=context)
def button_cancel(self, cr, uid, ids, context=None):
diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py
index decf9c2aaa6..c6011979f8d 100644
--- a/addons/account/account_invoice.py
+++ b/addons/account/account_invoice.py
@@ -982,7 +982,6 @@ class account_invoice(osv.osv):
def invoice_validate(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state':'open'}, context=context)
- self.invoice_validate_send_note(cr, uid, ids, context=context)
return True
def line_get_convert(self, cr, uid, x, part, date, context=None):
@@ -1046,7 +1045,7 @@ class account_invoice(osv.osv):
if obj_inv.type in ('out_invoice', 'out_refund'):
ctx = self.get_log_context(cr, uid, context=ctx)
message = _("Invoice '%s' is validated.") % name
- self.log(cr, uid, inv_id, message, context=ctx)
+ self.message_append_note(cr, uid, [inv_id], body=message, context=context)
return True
def action_cancel(self, cr, uid, ids, *args):
@@ -1276,7 +1275,7 @@ class account_invoice(osv.osv):
# TODO: use currency's formatting function
msg = _("Invoice '%s' is paid partially: %s%s of %s%s (%s%s remaining)") % \
(name, pay_amount, code, invoice.amount_total, code, total, code)
- self.log(cr, uid, inv_id, msg)
+ self.message_append_note(cr, uid, [inv_id], body=msg, context=context)
self.pool.get('account.move.line').reconcile_partial(cr, uid, line_ids, 'manual', context)
# Update the stored value (fields.function), so we write to trigger recompute
@@ -1300,10 +1299,6 @@ class account_invoice(osv.osv):
for obj in self.browse(cr, uid, ids, context=context):
self.message_append_note(cr, uid, [obj.id],body=_("%s created.") % (self._get_document_type(obj.type)), context=context)
- def invoice_validate_send_note(self, cr, uid, ids, context=None):
- for obj in self.browse(cr, uid, ids, context=context):
- self.message_append_note(cr, uid, [obj.id], body=_("%s validated.") % (self._get_document_type(obj.type)), context=context)
-
def confirm_paid_send_note(self, cr, uid, ids, context=None):
for obj in self.browse(cr, uid, ids, context=context):
self.message_append_note(cr, uid, [obj.id], body=_("%s paid.") % (self._get_document_type(obj.type)), context=context)
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index 6f982b17480..8254d5183be 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -132,8 +132,6 @@
-
-
@@ -249,7 +247,7 @@
-
+
@@ -354,7 +352,7 @@
-
+
diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml
index c1367e60498..fe1bafecde0 100644
--- a/addons/account/account_view.xml
+++ b/addons/account/account_view.xml
@@ -131,8 +131,6 @@
-
-
@@ -569,8 +567,6 @@
-
-
@@ -1356,7 +1352,6 @@
-
@@ -2627,9 +2622,6 @@ action = pool.get('res.config').next(cr, uid, [], context)
-
-
-
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_analytic_analysis/account_analytic_analysis_view.xml b/addons/account_analytic_analysis/account_analytic_analysis_view.xml
index 792b272ce1d..79afea7e99b 100644
--- a/addons/account_analytic_analysis/account_analytic_analysis_view.xml
+++ b/addons/account_analytic_analysis/account_analytic_analysis_view.xml
@@ -77,7 +77,7 @@
|
- | Inv. On Timesheets |
+ Invoice On Timesheets |
|
|
|
@@ -124,7 +124,7 @@
-
+
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/i18n/pt.po b/addons/account_asset/i18n/pt.po
index aa94b06991b..80869fa03da 100755
--- a/addons/account_asset/i18n/pt.po
+++ b/addons/account_asset/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 01:37+0100\n"
-"PO-Revision-Date: 2011-12-10 11:58+0000\n"
-"Last-Translator: Paulino Ascenção \n"
+"PO-Revision-Date: 2012-05-31 15:07+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:15+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_asset
#: view:account.asset.asset:0
@@ -439,7 +439,7 @@ msgstr "Método tempo"
#. module: account_asset
#: view:account.asset.category:0
msgid "Analytic Information"
-msgstr ""
+msgstr "Informação Analitica"
#. module: account_asset
#: view:asset.modify:0
@@ -620,7 +620,7 @@ msgstr "Prorata Temporis"
#. module: account_asset
#: view:account.asset.category:0
msgid "Accounting Information"
-msgstr ""
+msgstr "Informação contabilística"
#. module: account_asset
#: model:ir.model,name:account_asset.model_account_invoice
diff --git a/addons/account_bank_statement_extensions/i18n/gu.po b/addons/account_bank_statement_extensions/i18n/gu.po
index 3e77a3b8a26..a1677df4845 100644
--- a/addons/account_bank_statement_extensions/i18n/gu.po
+++ b/addons/account_bank_statement_extensions/i18n/gu.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-04-17 09:03+0000\n"
-"Last-Translator: FULL NAME \n"
+"PO-Revision-Date: 2012-06-01 04:42+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-04-18 04:42+0000\n"
-"X-Generator: Launchpad (build 15108)\n"
+"X-Launchpad-Export-Date: 2012-06-02 05:35+0000\n"
+"X-Generator: Launchpad (build 15342)\n"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
@@ -42,7 +42,7 @@ msgstr ""
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line.global,parent_id:0
msgid "Parent Code"
-msgstr "પેરેંટ કોડ"
+msgstr "પિતૃ સંકેત"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
@@ -64,7 +64,7 @@ msgstr ""
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Group By..."
-msgstr "ગ્રુપ દ્વારા..."
+msgstr "સમૂહ દ્વારા"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line,state:0
@@ -80,25 +80,25 @@ msgstr "કાચું"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Statement"
-msgstr "વિધાન"
+msgstr "નિવેદન"
#. module: account_bank_statement_extensions
#: view:confirm.statement.line:0
#: model:ir.actions.act_window,name:account_bank_statement_extensions.action_confirm_statement_line
#: model:ir.model,name:account_bank_statement_extensions.model_confirm_statement_line
msgid "Confirm selected statement lines"
-msgstr ""
+msgstr "પસંદ કરેલ નિવેદન લીટીઓ ખાતરી કરો"
#. module: account_bank_statement_extensions
#: report:bank.statement.balance.report:0
#: model:ir.actions.report.xml,name:account_bank_statement_extensions.bank_statement_balance_report
msgid "Bank Statement Balances Report"
-msgstr ""
+msgstr "બેન્ક નિવેદન સિલક અહેવાલ"
#. module: account_bank_statement_extensions
#: view:cancel.statement.line:0
msgid "Cancel Lines"
-msgstr ""
+msgstr "લીટીઓ રદ કરો"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line.global:0
@@ -109,7 +109,7 @@ msgstr ""
#. module: account_bank_statement_extensions
#: view:confirm.statement.line:0
msgid "Confirm Lines"
-msgstr ""
+msgstr "લીટીઓ પુષ્ટિ કરો"
#. module: account_bank_statement_extensions
#: code:addons/account_bank_statement_extensions/account_bank_statement.py:130
@@ -134,33 +134,33 @@ msgstr "રોજનામું"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Confirmed Statement Lines."
-msgstr ""
+msgstr "પુષ્ટિ નિવેદન આવેલ લીટીઓ."
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Credit Transactions."
-msgstr ""
+msgstr "ધિરાણ વ્યવહારો."
#. module: account_bank_statement_extensions
#: model:ir.actions.act_window,help:account_bank_statement_extensions.action_cancel_statement_line
msgid "cancel selected statement lines."
-msgstr ""
+msgstr "પસંદ કરેલ લીટીઓની નિવેદન રદ કરો."
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line,counterparty_number:0
msgid "Counterparty Number"
-msgstr ""
+msgstr "પ્રતિકૂળ સંખ્યા"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line.global:0
msgid "Transactions"
-msgstr ""
+msgstr "વ્યવહારો"
#. module: account_bank_statement_extensions
#: code:addons/account_bank_statement_extensions/account_bank_statement.py:130
#, python-format
msgid "Warning"
-msgstr ""
+msgstr "ચેતવણી"
#. module: account_bank_statement_extensions
#: report:bank.statement.balance.report:0
@@ -170,7 +170,7 @@ msgstr ""
#. module: account_bank_statement_extensions
#: report:bank.statement.balance.report:0
msgid "Date"
-msgstr ""
+msgstr "તારીખ"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
@@ -181,17 +181,17 @@ msgstr ""
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Debit Transactions."
-msgstr ""
+msgstr "ઉધાર વ્યવહારો."
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Extended Filters..."
-msgstr ""
+msgstr "વિસ્તૃત ગાળકો ..."
#. module: account_bank_statement_extensions
#: view:confirm.statement.line:0
msgid "Confirmed lines cannot be changed anymore."
-msgstr ""
+msgstr "પુષ્ટિ લીટીઓ હવે બદલી શકાતી નથી"
#. module: account_bank_statement_extensions
#: constraint:res.partner.bank:0
@@ -204,47 +204,47 @@ msgstr ""
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line,val_date:0
msgid "Valuta Date"
-msgstr ""
+msgstr "ચલણ તારીખો"
#. module: account_bank_statement_extensions
#: model:ir.actions.act_window,help:account_bank_statement_extensions.action_confirm_statement_line
msgid "Confirm selected statement lines."
-msgstr ""
+msgstr "પસંદ નિવેદન લીટીઓ ખાતરી કરો."
#. module: account_bank_statement_extensions
#: view:cancel.statement.line:0
msgid "Are you sure you want to cancel the selected Bank Statement lines ?"
-msgstr ""
+msgstr "શું તમે ખરેખર પસંદિત બેન્ક નિવેદન લાઇન્સ રદ કરવા માંગો છો?"
#. module: account_bank_statement_extensions
#: report:bank.statement.balance.report:0
msgid "Name"
-msgstr ""
+msgstr "નામ"
#. module: account_bank_statement_extensions
#: selection:account.bank.statement.line.global,type:0
msgid "ISO 20022"
-msgstr ""
+msgstr "ISO 20022"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Notes"
-msgstr ""
+msgstr "નોંધ"
#. module: account_bank_statement_extensions
#: selection:account.bank.statement.line.global,type:0
msgid "Manual"
-msgstr ""
+msgstr "માર્ગદર્શિકા"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Credit"
-msgstr ""
+msgstr "જમા"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line.global,amount:0
msgid "Amount"
-msgstr ""
+msgstr "કિંમત"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
@@ -254,7 +254,7 @@ msgstr ""
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line,counterparty_currency:0
msgid "Counterparty Currency"
-msgstr ""
+msgstr "પ્રતિકૂળ ચલણ"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line,counterparty_bic:0
@@ -269,7 +269,7 @@ msgstr ""
#. module: account_bank_statement_extensions
#: view:confirm.statement.line:0
msgid "Are you sure you want to confirm the selected Bank Statement lines ?"
-msgstr ""
+msgstr "શું તમે ખરેખર પસંદિત બેન્ક નિવેદન લાઇન્સ ખાતરી કરવા માંગો છો?"
#. module: account_bank_statement_extensions
#: constraint:account.bank.statement.line:0
@@ -288,7 +288,7 @@ msgstr ""
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Draft Statement Lines."
-msgstr ""
+msgstr "કાચું નિવેદન લીટીઓ."
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
@@ -298,27 +298,27 @@ msgstr ""
#. module: account_bank_statement_extensions
#: model:ir.model,name:account_bank_statement_extensions.model_account_bank_statement_line
msgid "Bank Statement Line"
-msgstr ""
+msgstr "બેન્ક વિધાન લીટી"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line.global,code:0
msgid "Code"
-msgstr ""
+msgstr "સંકેત"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line,counterparty_name:0
msgid "Counterparty Name"
-msgstr ""
+msgstr "પ્રતિકૂળ નામ"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line.global,name:0
msgid "Communication"
-msgstr ""
+msgstr "સંચાર"
#. module: account_bank_statement_extensions
#: model:ir.model,name:account_bank_statement_extensions.model_res_partner_bank
msgid "Bank Accounts"
-msgstr ""
+msgstr "બેંક હિસાબી"
#. module: account_bank_statement_extensions
#: constraint:account.bank.statement:0
@@ -328,24 +328,24 @@ msgstr ""
#. module: account_bank_statement_extensions
#: model:ir.model,name:account_bank_statement_extensions.model_account_bank_statement
msgid "Bank Statement"
-msgstr ""
+msgstr "બેન્ક સ્ટેટમેન્ટ"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Statement Line"
-msgstr ""
+msgstr "વિધાન લીટી"
#. module: account_bank_statement_extensions
#: sql_constraint:account.bank.statement.line.global:0
msgid "The code must be unique !"
-msgstr ""
+msgstr "કોડ અજોડ હોવું જ જોઈએ!"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line.global,bank_statement_line_ids:0
#: model:ir.actions.act_window,name:account_bank_statement_extensions.action_bank_statement_line
#: model:ir.ui.menu,name:account_bank_statement_extensions.bank_statement_line
msgid "Bank Statement Lines"
-msgstr ""
+msgstr "બેંક વિધાન લીટીઓ"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line.global:0
@@ -356,17 +356,17 @@ msgstr ""
#: view:cancel.statement.line:0
#: view:confirm.statement.line:0
msgid "Cancel"
-msgstr ""
+msgstr "રદ કરો"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Statement Lines"
-msgstr ""
+msgstr "વિધાન લીટીઓ"
#. module: account_bank_statement_extensions
#: view:account.bank.statement.line:0
msgid "Total Amount"
-msgstr ""
+msgstr "કુલ રકમ"
#. module: account_bank_statement_extensions
#: field:account.bank.statement.line,globalisation_id:0
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..a85d4156cc4 100644
--- a/addons/account_payment/account_payment_view.xml
+++ b/addons/account_payment/account_payment_view.xml
@@ -193,9 +193,6 @@
-
-
-
diff --git a/addons/account_voucher/account_voucher_view.xml b/addons/account_voucher/account_voucher_view.xml
index 3b33143648b..a1ff581006b 100644
--- a/addons/account_voucher/account_voucher_view.xml
+++ b/addons/account_voucher/account_voucher_view.xml
@@ -17,7 +17,6 @@
-
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/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..5975210a99c 100644
--- a/addons/base_calendar/base_calendar_view.xml
+++ b/addons/base_calendar/base_calendar_view.xml
@@ -85,21 +85,6 @@
-
-
-
-
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_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/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..0b58975bca2 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])))
@@ -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 Department
Sales
-
+
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..07e295d4e4c 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.
+
+
-
+
+
Categories
crm.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"/>
+
@@ -53,14 +62,17 @@
-
+
-
+
+
+ Leads
+ crm.lead
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- Leads
- crm.lead
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- CRM - Leads Calendar
- crm.lead
- calendar
-
-
-
-
-
-
-
-
+
+
+ CRM - Leads Calendar
+ crm.lead
+ calendar
+
+
+
+
+
+
+
+
@@ -235,7 +210,7 @@
kanban
-
+
@@ -316,7 +291,6 @@
-
CRM - Leads Search
crm.lead
@@ -391,6 +365,10 @@
+
+
Opportunities
@@ -400,15 +378,23 @@
-
-
- Opportunities Tree
- crm.lead
- tree
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ Opportunities Tree
+ crm.lead
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -599,8 +567,7 @@
help="Unassigned Opportunities" />
+ context="{'invisible_section': False, 'default_section_id': self}">
-
-
- CRM - Opportunity Graph
- crm.lead
- graph
-
-
-
-
-
-
-
-
+
+
+ CRM - Opportunity Graph
+ crm.lead
+ graph
+
+
+
+
+
+
+
+
-
+
diff --git a/addons/crm/crm_meeting.py b/addons/crm/crm_meeting.py
index a0e4803cde7..bc1ab42b3df 100644
--- a/addons/crm/crm_meeting.py
+++ b/addons/crm/crm_meeting.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
@@ -20,43 +20,35 @@
##############################################################################
from base_calendar import base_calendar
-from crm import crm_base, crm_case
+from base_status.base_state import base_state
+from base_status.base_stage import base_stage
+import logging
from osv import fields, osv
import tools
from tools.translate import _
-import logging
-class crm_lead(crm_case, osv.osv):
- """ CRM Leads """
- _name = 'crm.lead'
-crm_lead()
-
-class crm_phonecall(crm_case, osv.osv):
- """ CRM Phonecall """
- _name = 'crm.phonecall'
-crm_phonecall()
-
-
-class crm_meeting(crm_base, osv.osv):
- """ CRM Meeting Cases """
+class crm_lead(base_stage, osv.osv):
+ """ CRM Leads """
+ _name = 'crm.lead'
+class crm_meeting(base_state, osv.Model):
+ """ Model for CRM meetings """
_name = 'crm.meeting'
_description = "Meeting"
_order = "id desc"
_inherit = ["calendar.event", 'ir.needaction_mixin', "mail.thread"]
_columns = {
- # From crm.case
- 'name': fields.char('Summary', size=124, required=True, states={'done': [('readonly', True)]}),
+ # base_state required fields
'partner_id': fields.many2one('res.partner', 'Partner', states={'done': [('readonly', True)]}),
'section_id': fields.many2one('crm.case.section', 'Sales Team', states={'done': [('readonly', True)]}, \
select=True, help='Sales team to which Case belongs to.'),
'email_from': fields.char('Email', size=128, states={'done': [('readonly', True)]}, help="These people will receive email."),
- 'id': fields.integer('ID', readonly=True),
'create_date': fields.datetime('Creation Date' , readonly=True),
'write_date': fields.datetime('Write Date' , readonly=True),
'date_action_last': fields.datetime('Last Action', readonly=1),
'date_action_next': fields.datetime('Next Action', readonly=1),
# Meeting fields
+ 'name': fields.char('Summary', size=124, required=True, states={'done': [('readonly', True)]}),
'categ_id': fields.many2one('crm.case.categ', 'Meeting Type', \
domain="[('object_id.model', '=', 'crm.meeting')]", \
),
@@ -66,12 +58,11 @@ class crm_meeting(crm_base, osv.osv):
'event_id', 'attendee_id', 'Attendees', states={'done': [('readonly', True)]}),
'date_closed': fields.datetime('Closed', readonly=True),
'date_deadline': fields.datetime('Deadline', states={'done': [('readonly', True)]}),
- 'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]),
- 'state': fields.selection([('open', 'Confirmed'),
- ('draft', 'Unconfirmed'),
+ 'state': fields.selection([ ('draft', 'Unconfirmed'),
+ ('open', 'Confirmed'),
('cancel', 'Cancelled'),
- ('done', 'Done')], 'Status', \
- size=16, readonly=True),
+ ('done', 'Done')],
+ string='Status', size=16, readonly=True),
}
_defaults = {
'state': 'draft',
@@ -91,6 +82,17 @@ class crm_meeting(crm_base, osv.osv):
result[obj.id] = [obj.user_id.id]
return result
+ def case_open(self, cr, uid, ids, context=None):
+ """ Confirms meeting """
+ res = super(crm_meeting, self).case_open(cr, uid, ids, context)
+ for (id, name) in self.name_get(cr, uid, ids):
+ id=base_calendar.base_calendar_id2real_id(id)
+ return res
+
+ # ----------------------------------------
+ # OpenChatter
+ # ----------------------------------------
+
def case_get_note_msg_prefix(self, cr, uid, id, context=None):
return 'Meeting'
@@ -119,32 +121,12 @@ class crm_meeting(crm_base, osv.osv):
meeting.message_append_note(body=parent_message)
return True
- def case_close_send_note(self, cr, uid, ids, context=None):
- message = _("Meeting has been done.")
- return self.message_append_note(cr, uid, ids, body=message, context=context)
-
def case_open_send_note(self, cr, uid, ids, context=None):
- for meeting in self.browse(cr, uid, ids, context=context):
- if meeting.state != 'draft':
- return False
- message = _("Meeting has been confirmed.")
- meeting.message_append_note(body=message)
- return True
+ return self.message_append_note(cr, uid, ids, body=_("Meeting has been confirmed."), context=context)
- def case_open(self, cr, uid, ids, context=None):
- """Confirms meeting
- @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 Meeting Ids
- @param *args: Tuple Value for additional Params
- """
- res = super(crm_meeting, self).case_open(cr, uid, ids, context)
- for (id, name) in self.name_get(cr, uid, ids):
- id=base_calendar.base_calendar_id2real_id(id)
- return res
+ def case_close_send_note(self, cr, uid, ids, context=None):
+ return self.message_append_note(cr, uid, ids, body=_("Meeting has been done."), context=context)
-crm_meeting()
class calendar_attendee(osv.osv):
""" Calendar Attendee """
diff --git a/addons/crm/crm_meeting_view.xml b/addons/crm/crm_meeting_view.xml
index 5b0a35a185e..e7176386842 100644
--- a/addons/crm/crm_meeting_view.xml
+++ b/addons/crm/crm_meeting_view.xml
@@ -25,7 +25,22 @@
crm.meeting
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..6360e24a217 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" />
-
-
-
-
+
+
+
+
@@ -60,13 +64,16 @@
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_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
+ draft
26
+
-
+
Actions Defined
+ open
27
+
-
+
Actions Done
+ done
28
+
-
- Won't fix
+
+ Refused
+ done
29
+
+
+
+
+
+ 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..9d0f8d950b0 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.stage
form
-
- {'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 @@
+
-
-
-
-
+
@@ -68,13 +90,23 @@
@@ -227,7 +235,7 @@
domain="[]" context="{'group_by':'categ_id'}" />
+ domain="[]" context="{'group_by':'state'}" groups="base.group_no_one"/>
')])
claim = self.browse(cr, uid, claim_ids[0])
assert claim.state == "open", "Claim is not in Open state"
- assert claim.stage_id.id == ref("crm.stage_lead1"), "Claim is not in New stage"
+ assert claim.stage_id.id == ref("crm.stage_lead2"), "Claim is not in Qualification stage"
-
After complete all service from our side, I close this claim.
-
diff --git a/addons/crm_fundraising/crm_fundraising.py b/addons/crm_fundraising/crm_fundraising.py
index 90014188777..73f72979730 100644
--- a/addons/crm_fundraising/crm_fundraising.py
+++ b/addons/crm_fundraising/crm_fundraising.py
@@ -19,13 +19,15 @@
#
##############################################################################
-from osv import fields, osv
+from base_status.base_stage import base_stage
from crm import crm
from crm import wizard
+from osv import fields, osv
+from tools.translate import _
wizard.mail_compose_message.SUPPORTED_MODELS.append('crm.fundraising')
-class crm_fundraising(crm.crm_case, osv.osv):
+class crm_fundraising(base_stage, osv.osv):
""" Fund Raising Cases """
_name = "crm.fundraising"
@@ -68,14 +70,62 @@ class crm_fundraising(crm.crm_case, osv.osv):
'duration': fields.float('Duration'),
'ref': fields.reference('Reference', selection=crm._links_get, size=128),
'ref2': fields.reference('Reference 2', selection=crm._links_get, size=128),
- '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 = {
+ 'active': 1,
+ '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),
+ 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.case', context=c),
+ 'priority': crm.AVAILABLE_PRIORITIES[2][0],
+ 'probability': 0.0,
+ 'planned_cost': 0.0,
+ 'planned_revenue': 0.0,
+ }
+
+ 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 case in cases:
+ if case.section_id:
+ section_ids.append(case.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.case.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_fundraising, self).create(cr, uid, vals, context)
+ self.create_send_note(cr, uid, [obj_id], context=context)
+ return obj_id
def message_new(self, cr, uid, msg, custom_values=None, context=None):
"""Automatically called when new email message arrives"""
@@ -93,21 +143,23 @@ class crm_fundraising(crm.crm_case, osv.osv):
self.write(cr, uid, [res_id], vals, context=context)
return res_id
+ # ---------------------------------------------------
+ # OpenChatter methods and notifications
+ # ---------------------------------------------------
- _defaults = {
- 'active': 1,
- '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': 'draft',
- 'section_id': crm.crm_case. _get_section,
- 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.case', context=c),
- 'priority': crm.AVAILABLE_PRIORITIES[2][0],
- 'probability': 0.0,
- 'planned_cost': 0.0,
- 'planned_revenue': 0.0,
- }
+ def case_get_note_msg_prefix(self, cr, uid, id, context=None):
+ """ Override of default prefix for notifications. """
+ return 'Fundraising'
+ def create_send_note(self, cr, uid, ids, context=None):
+ msg = _('Fundraising has been created.')
+ self.message_append_note(cr, uid, ids, body=msg, context=context)
+ return True
+
+ 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)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/crm_fundraising/crm_fundraising_demo.xml b/addons/crm_fundraising/crm_fundraising_demo.xml
index 52b4094d126..70b32afabf3 100644
--- a/addons/crm_fundraising/crm_fundraising_demo.xml
+++ b/addons/crm_fundraising/crm_fundraising_demo.xml
@@ -9,7 +9,6 @@
-
@@ -26,7 +25,6 @@
-
@@ -43,7 +41,6 @@
-
@@ -59,7 +56,6 @@
-
@@ -75,7 +71,6 @@
-
@@ -91,7 +86,6 @@
-
@@ -109,7 +103,6 @@
-
@@ -126,7 +119,6 @@
-
diff --git a/addons/crm_fundraising/crm_fundraising_view.xml b/addons/crm_fundraising/crm_fundraising_view.xml
index b960fe2bccb..b4ed0a38c43 100644
--- a/addons/crm_fundraising/crm_fundraising_view.xml
+++ b/addons/crm_fundraising/crm_fundraising_view.xml
@@ -50,22 +50,6 @@
-
-
-
-
-
-
@@ -117,29 +101,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -162,6 +123,9 @@
+
+
+
diff --git a/addons/crm_helpdesk/crm_helpdesk.py b/addons/crm_helpdesk/crm_helpdesk.py
index d5ee8efc17e..f0d98efebb3 100644
--- a/addons/crm_helpdesk/crm_helpdesk.py
+++ b/addons/crm_helpdesk/crm_helpdesk.py
@@ -19,10 +19,10 @@
#
##############################################################################
+from base_status.base_state import base_state
from crm import crm
-from osv import fields, osv
-import time
from crm import wizard
+from osv import fields, osv
import tools
from tools.translate import _
@@ -34,7 +34,7 @@ CRM_HELPDESK_STATES = (
wizard.mail_compose_message.SUPPORTED_MODELS.append('crm.helpdesk')
-class crm_helpdesk(crm.crm_case, osv.osv):
+class crm_helpdesk(base_state, osv.osv):
""" Helpdesk Cases """
_name = "crm.helpdesk"
@@ -77,21 +77,24 @@ class crm_helpdesk(crm.crm_case, osv.osv):
\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)]),
}
_defaults = {
'active': lambda *a: 1,
- 'user_id': crm.crm_case._get_default_user,
- 'partner_id': crm.crm_case._get_default_partner,
- 'email_from': crm.crm_case. _get_default_email,
+ '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),
'state': lambda *a: 'draft',
- 'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
- 'section_id': crm.crm_case. _get_section,
+ 'date': lambda *a: fields.datetime.now(),
'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.helpdesk', context=c),
'priority': lambda *a: crm.AVAILABLE_PRIORITIES[2][0],
}
+ def create(self, cr, uid, vals, context=None):
+ obj_id = super(crm_helpdesk, self).create(cr, uid, vals, context)
+ self.create_send_note(cr, uid, [obj_id], context=context)
+ return obj_id
+
def message_new(self, cr, uid, msg_dict, custom_values=None, context=None):
"""Automatically called when new email message arrives"""
res_id = super(crm_helpdesk,self).message_new(cr, uid, msg_dict, custom_values=custom_values, context=context)
@@ -142,5 +145,18 @@ class crm_helpdesk(crm.crm_case, osv.osv):
res = self.write(cr, uid, [case.id], values, context=context)
return res
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+ # ******************************
+ # OpenChatter
+ # ******************************
+ def case_get_note_msg_prefix(self, cr, uid, id, context=None):
+ """ override of default base_state method. """
+ return 'Case'
+
+ def create_send_note(self, cr, uid, ids, context=None):
+ msg = _('Case has been created.')
+ self.message_append_note(cr, uid, ids, body=msg, context=context)
+ return True
+
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/crm_helpdesk/crm_helpdesk_view.xml b/addons/crm_helpdesk/crm_helpdesk_view.xml
index b1d5a2b96f8..fe9db30c274 100644
--- a/addons/crm_helpdesk/crm_helpdesk_view.xml
+++ b/addons/crm_helpdesk/crm_helpdesk_view.xml
@@ -30,12 +30,18 @@
@@ -326,13 +317,13 @@
search
-
-
+
@@ -371,6 +362,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/project_issue/report/project_issue_report.py b/addons/project_issue/report/project_issue_report.py
index 7cc520308e8..be3309d7175 100644
--- a/addons/project_issue/report/project_issue_report.py
+++ b/addons/project_issue/report/project_issue_report.py
@@ -51,7 +51,7 @@ class project_issue_report(osv.osv):
'creation_date': fields.date('Creation Date', readonly=True),
'date_closed': fields.date('Date of Closing', readonly=True),
'categ_id': fields.many2one('crm.case.categ', 'Category', domain="[('section_id','=',section_id),('object_id.model', '=', 'project.issue')]"),
- 'type_id': fields.many2one('project.task.type', 'Stage'),
+ 'stage_id': fields.many2one('project.task.type', 'Stage'),
'nbr': fields.integer('# of Issues', readonly=True),
'working_hours_open': fields.float('Avg. Working Hours to Open', readonly=True),
'working_hours_close': fields.float('Avg. Working Hours to Close', readonly=True),
@@ -87,7 +87,7 @@ class project_issue_report(osv.osv):
c.working_hours_close,
c.section_id,
c.categ_id,
- c.type_id,
+ c.stage_id,
to_char(c.date_closed, 'YYYY-mm-dd') as date_closed,
c.company_id as company_id,
c.priority as priority,
diff --git a/addons/project_issue/report/project_issue_report_view.xml b/addons/project_issue/report/project_issue_report_view.xml
index ee0a4fbd1ed..43a49abf2b8 100644
--- a/addons/project_issue/report/project_issue_report_view.xml
+++ b/addons/project_issue/report/project_issue_report_view.xml
@@ -11,7 +11,7 @@
-
+
@@ -103,7 +103,7 @@
-
+
diff --git a/addons/project_issue/test/cancel_issue.yml b/addons/project_issue/test/cancel_issue.yml
index ff05d923ed0..76ffa212638 100644
--- a/addons/project_issue/test/cancel_issue.yml
+++ b/addons/project_issue/test/cancel_issue.yml
@@ -7,7 +7,7 @@
I check the issue is in cancel state.
-
!assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue is in cancel state}:
- - state == 'cancel'
+ - state == 'cancelled'
-
I re-open the Issue.
-
@@ -37,7 +37,7 @@
I check the issue is in cancel state.
-
!assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue is in cancel state}:
- - state == 'cancel'
+ - state == 'cancelled'
-
I close Issue.
-
@@ -57,4 +57,4 @@
I check the issue is in cancel state.
-
!assert {model: project.issue, id: crm_case_buginaccountsmodule0, severity: error, string: Issue is in cancel state}:
- - state == 'cancel'
\ No newline at end of file
+ - state == 'cancelled'
diff --git a/addons/project_long_term/project_long_term_view.xml b/addons/project_long_term/project_long_term_view.xml
index 9497b3ad6ec..1ec64fd2d84 100644
--- a/addons/project_long_term/project_long_term_view.xml
+++ b/addons/project_long_term/project_long_term_view.xml
@@ -332,7 +332,7 @@
search
-
+
diff --git a/addons/project_mailgate/__openerp__.py b/addons/project_mailgate/__openerp__.py
index 4679f5b65ca..dad9fd09eae 100644
--- a/addons/project_mailgate/__openerp__.py
+++ b/addons/project_mailgate/__openerp__.py
@@ -45,7 +45,6 @@ There are two common alternatives to configure the mailbox integration:
""",
"init_xml": [],
"update_xml": ["security/ir.model.access.csv",
- "project_mailgate_view.xml",
],
'demo_xml': [
],
diff --git a/addons/project_mailgate/project_mailgate.py b/addons/project_mailgate/project_mailgate.py
index 9715a32c151..a36366f450e 100644
--- a/addons/project_mailgate/project_mailgate.py
+++ b/addons/project_mailgate/project_mailgate.py
@@ -26,21 +26,14 @@ import binascii
class project_tasks(osv.osv):
- _name = "project.task"
- _inherit = ['mail.thread','project.task']
-
- _columns = {
- 'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)], readonly=True),
- }
+ _inherit = 'project.task'
def message_new(self, cr, uid, msg, custom_values=None, context=None):
res_id = super(project_tasks,self).message_new(cr, uid, msg, custom_values=custom_values, context=context)
subject = msg.get('subject')
- body = msg.get('body_text')
msg_from = msg.get('from')
data = {
'name': subject,
- 'description': body,
'planned_hours': 0.0,
}
data.update(self.message_partner_by_email(cr, uid, msg_from))
@@ -48,12 +41,9 @@ class project_tasks(osv.osv):
return res_id
def message_update(self, cr, uid, ids, msg, data={}, default_act='pending'):
- data.update({
- 'description': msg['body_text'],
- })
act = 'do_'+default_act
- maps = {
+ maps = {
'cost':'planned_hours',
}
for line in msg['body_text'].split('\n'):
@@ -73,7 +63,7 @@ class project_tasks(osv.osv):
self.write(cr, uid, ids, data, context=context)
getattr(self,act)(cr, uid, ids, context=context)
- self.message_append_dict(cr, uid, [res_id], msg, context=context)
+ self.message_append_note(cr, uid, [res_id], body=msg, context=context)
return True
def message_thread_followers(self, cr, uid, ids, context=None):
@@ -84,37 +74,5 @@ class project_tasks(osv.osv):
followers[task.id] = filter(None, task_followers)
return followers
- def do_draft(self, cr, uid, ids, context=None):
- res = super(project_tasks, self).do_draft(cr, uid, ids, context)
- tasks = self.browse(cr, uid, ids, context=context)
- self.message_append(cr, uid, tasks, _('Draft'), context=context)
- return res
-
- def do_open(self, cr, uid, ids, context=None):
- res = super(project_tasks, self).do_open(cr, uid, ids, context)
- tasks = self.browse(cr, uid, ids, context=context)
- self.message_append(cr, uid, tasks, _('Open'), context=context)
- return res
-
- def do_pending(self, cr, uid, ids, context=None):
- res = super(project_tasks, self).do_pending(cr, uid, ids, context)
- tasks = self.browse(cr, uid, ids, context=context)
- self.message_append(cr, uid, tasks, _('Pending'), context=context)
- return res
-
- def do_close(self, cr, uid, ids, context=None):
- res = super(project_tasks, self).do_close(cr, uid, ids, context)
- tasks = self.browse(cr, uid, ids, context=context)
- for task in tasks:
- if task.state == 'done':
- self.message_append(cr, uid, tasks, _('Done'), context=context)
- return res
-
- def do_cancel(self, cr, uid, ids, context=None):
- res = super(project_tasks, self).do_cancel(cr, uid, ids, context=context)
- tasks = self.browse(cr, uid, ids, context=context)
- self.message_append(cr, uid, tasks, _('Cancel'), context=context)
- return res
-
project_tasks()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project_mailgate/project_mailgate_view.xml b/addons/project_mailgate/project_mailgate_view.xml
deleted file mode 100644
index ea9855e9ec1..00000000000
--- a/addons/project_mailgate/project_mailgate_view.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
- task.mailgate.form
- project.task
- form
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/addons/project_mrp/project_procurement.py b/addons/project_mrp/project_procurement.py
index 7d3045aede0..9252e3bbd11 100644
--- a/addons/project_mrp/project_procurement.py
+++ b/addons/project_mrp/project_procurement.py
@@ -81,6 +81,7 @@ class procurement_order(osv.osv):
'company_id': procurement.company_id.id,
},context=context)
self.write(cr, uid, [procurement.id], {'task_id': task_id, 'state': 'running'}, context=context)
+ self.running_send_note(cr, uid, ids, context=None)
return task_id
procurement_order()
diff --git a/addons/project_planning/project_planning_view.xml b/addons/project_planning/project_planning_view.xml
index 84632f326a4..ca919284312 100644
--- a/addons/project_planning/project_planning_view.xml
+++ b/addons/project_planning/project_planning_view.xml
@@ -129,7 +129,7 @@
-
+
diff --git a/addons/project_scrum/board_project_scrum_view.xml b/addons/project_scrum/board_project_scrum_view.xml
index 284208ee21f..08e3fd1bb25 100644
--- a/addons/project_scrum/board_project_scrum_view.xml
+++ b/addons/project_scrum/board_project_scrum_view.xml
@@ -16,12 +16,6 @@
-
-
-
-
-
@@ -114,8 +108,6 @@
-
diff --git a/addons/project_scrum/project_scrum.py b/addons/project_scrum/project_scrum.py
index 22824ecc3fe..78907226010 100644
--- a/addons/project_scrum/project_scrum.py
+++ b/addons/project_scrum/project_scrum.py
@@ -44,6 +44,7 @@ class project_scrum_sprint(osv.osv):
_name = 'project.scrum.sprint'
_description = 'Project Scrum Sprint'
_order = 'date_start desc'
+ _inherit = ['mail.thread']
def _compute(self, cr, uid, ids, fields, arg, context=None):
res = {}.fromkeys(ids, 0.0)
progress = {}
@@ -71,28 +72,27 @@ class project_scrum_sprint(osv.osv):
def button_cancel(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state':'cancel'}, context=context)
+ self.cancel_send_note(cr, uid, ids, context=None)
return True
def button_draft(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state':'draft'}, context=context)
+ self.draft_send_note(cr, uid, ids, context=None)
return True
def button_open(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state':'open'}, context=context)
- for (id, name) in self.name_get(cr, uid, ids):
- message = _("The sprint '%s' has been opened.") % (name,)
- self.log(cr, uid, id, message)
+ self.open_send_note(cr, uid, ids, context=None)
return True
def button_close(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state':'done'}, context=context)
- for (id, name) in self.name_get(cr, uid, ids):
- message = _("The sprint '%s' has been closed.") % (name,)
- self.log(cr, uid, id, message)
+ self.close_send_note(cr, uid, ids, context=None)
return True
def button_pending(self, cr, uid, ids, context=None):
self.write(cr, uid, ids, {'state':'pending'}, context=context)
+ self.pending_send_note(cr, uid, ids, context=None)
return True
_columns = {
@@ -138,6 +138,33 @@ class project_scrum_sprint(osv.osv):
v['date_stop'] = (datetime.now() + relativedelta(days=int(proj.sprint_size or 14))).strftime('%Y-%m-%d')
return {'value':v}
+ # ----------------------------------------
+ # OpenChatter methods and notifications
+ # ----------------------------------------
+
+ def create(self, cr, uid, vals, context=None):
+ obj_id = super(project_scrum_sprint, self).create(cr, uid, vals, context)
+ self.create_send_note(cr, uid, [obj_id], context=context)
+ return obj_id
+
+ def draft_send_note(self, cr, uid, ids, context=None):
+ self.message_append_note(cr, uid, ids, body=_("Sprint has been set to draft."), context=context)
+
+ def create_send_note(self, cr, uid, ids, context=None):
+ self.message_append_note(cr, uid, ids, body=_("Sprint has been created."), context=context)
+
+ def open_send_note(self, cr, uid, ids, context=None):
+ self.message_append_note(cr, uid, ids, body=_("Sprint has been opened."), context=context)
+
+ def pending_send_note(self, cr, uid, ids, context=None):
+ self.message_append_note(cr, uid, ids, body=_("Sprint has been set to pending."), context=context)
+
+ def cancel_send_note(self, cr, uid, ids, context=None):
+ self.message_append_note(cr, uid, ids, body=_("Sprint has been cancelled."), context=context)
+
+ def close_send_note(self, cr, uid, ids, context=None):
+ self.message_append_note(cr, uid, ids, body=_("Sprint has been closed."), context=context)
+
project_scrum_sprint()
class project_scrum_product_backlog(osv.osv):
diff --git a/addons/project_scrum/project_scrum_demo.xml b/addons/project_scrum/project_scrum_demo.xml
index 50c67146716..6e3de7665bd 100644
--- a/addons/project_scrum/project_scrum_demo.xml
+++ b/addons/project_scrum/project_scrum_demo.xml
@@ -265,7 +265,6 @@
Review all English Terms
- done
@@ -274,7 +273,6 @@
Review all french terms
- done
@@ -283,7 +281,6 @@
Analytic Accounting features
- done
@@ -292,7 +289,6 @@
Test and improve automatic migration system
- open
@@ -300,7 +296,6 @@
General accounting features
- open
@@ -316,7 +311,6 @@
Cash book, general ledger, accounts list, aged trial balance
Accounting Report General
- open
@@ -332,7 +326,6 @@
Accounting Report Analytic
- open
@@ -340,7 +333,6 @@
Bugfix - memory leak
- done
@@ -349,7 +341,6 @@
Bugfix - Translations
- open
@@ -358,7 +349,6 @@
Finish the automated plugin system
- pending
@@ -373,7 +363,6 @@
Test 3.2.0 before releasing
- open
@@ -382,7 +371,6 @@
default values, onchange, required, add on top or bottom and shortcuts (Ctrl S, Ctrl X, ...)
Editable trees
- open
diff --git a/addons/project_scrum/project_scrum_view.xml b/addons/project_scrum/project_scrum_view.xml
index ef8a2681620..7617a71ba4c 100644
--- a/addons/project_scrum/project_scrum_view.xml
+++ b/addons/project_scrum/project_scrum_view.xml
@@ -43,10 +43,6 @@
-
-
-
-
@@ -106,7 +102,7 @@
-
-
-
-
-
-
@@ -317,6 +307,9 @@
+
+
+
@@ -578,7 +571,7 @@
search
-
+
diff --git a/addons/project_scrum/wizard/project_scrum_backlog_sprint.py b/addons/project_scrum/wizard/project_scrum_backlog_sprint.py
index 72b80a969fb..ab017231e89 100644
--- a/addons/project_scrum/wizard/project_scrum_backlog_sprint.py
+++ b/addons/project_scrum/wizard/project_scrum_backlog_sprint.py
@@ -24,6 +24,7 @@ from tools.translate import _
class backlog_sprint_assign(osv.osv_memory):
_name = 'project.scrum.backlog.assign.sprint'
_description = 'Assign sprint to backlogs'
+ _inherit = ['mail.thread']
_columns = {
'sprint_id': fields.many2one('project.scrum.sprint', 'Sprint', required=True, help="Select Sprint to assign backlog."),
'state_open': fields.boolean('Open Backlog', help="Change the state of product backlogs to open if its in draft state"),
@@ -55,12 +56,12 @@ class backlog_sprint_assign(osv.osv_memory):
'remaining_hours':backlog.expected_hours,
})
message = _("Product Backlog '%s' is converted into Task %d.") %(backlog.name, task_id)
- self.log(cr, uid, backlog.id, message)
+ self.message_append_note(cr, uid, [backlog.id], body=message, context=context)
if data.state_open and backlog.state == "draft":
backlog_obj.write(cr, uid, backlog.id, {'state':'open'})
sprint = sprint_obj.browse(cr, uid, data.sprint_id.id, context=context)
message = _("Product Backlog '%s' is assigned to sprint %s") %(backlog.name, sprint.name)
- self.log(cr, uid, backlog.id, message)
+ self.message_append_note(cr, uid, [backlog.id], body=message, context=context)
backlog_obj.write(cr, uid, backlog_ids, {'sprint_id': data.sprint_id.id}, context=context)
return {'type': 'ir.actions.act_window_close'}
diff --git a/addons/purchase/i18n/nl.po b/addons/purchase/i18n/nl.po
index 40ad6f9c252..046e2a2a4e7 100644
--- a/addons/purchase/i18n/nl.po
+++ b/addons/purchase/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-18 15:04+0000\n"
+"PO-Revision-Date: 2012-06-01 08:41+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:40+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: purchase
#: model:process.transition,note:purchase.process_transition_confirmingpurchaseorder0
@@ -113,7 +113,7 @@ msgstr "Te factureren"
#. module: purchase
#: view:purchase.order.line_invoice:0
msgid "Do you want to generate the supplier invoices?"
-msgstr ""
+msgstr "Wilt u de leveranciersfacturen genereren?"
#. module: purchase
#: model:ir.actions.act_window,help:purchase.purchase_form_action
@@ -194,7 +194,7 @@ msgstr "Fouten in facturatie"
#. module: purchase
#: model:product.pricelist,name:purchase.list0
msgid "Default Purchase Pricelist"
-msgstr "Standaard inkoopprijslijst"
+msgstr "Inkoopprijslijst"
#. module: purchase
#: help:purchase.order,dest_address_id:0
@@ -1849,7 +1849,7 @@ msgstr ""
#. module: purchase
#: view:purchase.order.group:0
msgid "Are you sure you want to merge these orders?"
-msgstr ""
+msgstr "Weet u zeker dat u deze orders wilt samenvoegen?"
#. module: purchase
#: model:process.transition,name:purchase.process_transition_purchaseinvoice0
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index 125bb8ae77d..b6f06dfd4bf 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -371,8 +371,6 @@ class purchase_order(osv.osv):
for line in po.order_line:
if line.state=='draft':
todo.append(line.id)
- message = _("Purchase order '%s' is confirmed.") % (po.name,)
- self.log(cr, uid, po.id, message)
# current_name = self.name_get(cr, uid, ids)[0][1]
self.pool.get('purchase.order.line').action_confirm(cr, uid, todo, context)
for id in ids:
@@ -399,7 +397,7 @@ class purchase_order(osv.osv):
'account_analytic_id': order_line.account_analytic_id.id or False,
}
- def action_cancel_draft(self, cr, uid, ids, *args):
+ def action_cancel_draft(self, cr, uid, ids, context=None):
if not len(ids):
return False
self.write(cr, uid, ids, {'state':'draft','shipped':0})
@@ -408,9 +406,7 @@ class purchase_order(osv.osv):
# Deleting the existing instance of workflow for PO
wf_service.trg_delete(uid, 'purchase.order', p_id, cr)
wf_service.trg_create(uid, 'purchase.order', p_id, cr)
- for (id,name) in self.name_get(cr, uid, ids):
- message = _("Purchase order '%s' has been set in draft state.") % name
- self.log(cr, uid, id, message)
+ self.draft_send_note(cr, uid, ids, context=context)
return True
def action_invoice_create(self, cr, uid, ids, context=None):
@@ -514,8 +510,7 @@ class purchase_order(osv.osv):
for (id, name) in self.name_get(cr, uid, ids):
wf_service.trg_validate(uid, 'purchase.order', id, 'purchase_cancel', cr)
- message = _("Purchase order '%s' is cancelled.") % name
- self.log(cr, uid, id, message)
+ self.cancel_send_note(cr, uid, ids, context)
return True
def _prepare_order_picking(self, cr, uid, order, context=None):
@@ -771,6 +766,9 @@ class purchase_order(osv.osv):
def invoice_done_send_note(self, cr, uid, ids, context=None):
self.message_append_note(cr, uid, ids, body=_("Invoice paid."), context=context)
+
+ def draft_send_note(self, cr, uid, ids, context=None):
+ return self.message_append_note(cr, uid, ids, body=_("Purchase Order has been set to draft."), context=context)
def cancel_send_note(self, cr, uid, ids, context=None):
for obj in self.browse(cr, uid, ids, context=context):
@@ -1076,6 +1074,7 @@ class procurement_order(osv.osv):
}
res[procurement.id] = self.create_procurement_purchase_order(cr, uid, procurement, po_vals, line_vals, context=context)
self.write(cr, uid, [procurement.id], {'state': 'running', 'purchase_id': res[procurement.id]})
+ self.running_send_note(cr, uid, [procurement.id], context=context)
return res
procurement_order()
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index c43b53ceb68..ce2a9d85b5e 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -212,7 +212,7 @@
-
+
@@ -512,7 +512,7 @@
form
-
+
diff --git a/addons/purchase_requisition/purchase_requisition.py b/addons/purchase_requisition/purchase_requisition.py
index 3f3afa47e3b..566497df729 100644
--- a/addons/purchase_requisition/purchase_requisition.py
+++ b/addons/purchase_requisition/purchase_requisition.py
@@ -259,7 +259,7 @@ class procurement_order(osv.osv):
})],
'purchase_ids': [(6,0,[po_id])]
})
- self.write(cr,uid,proc_id,{'requisition_id':requisition_id})
+ self.write(cr,uid,[proc_id],{'requisition_id':requisition_id},context=context)
return res
procurement_order()
diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml
index 73ed86b55e6..abc13dc2c38 100644
--- a/addons/sale/sale_view.xml
+++ b/addons/sale/sale_view.xml
@@ -276,7 +276,7 @@
-
+
diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml
index 1ba1e10ca5b..792fcc8e388 100644
--- a/addons/stock/stock_view.xml
+++ b/addons/stock/stock_view.xml
@@ -462,7 +462,7 @@
-
+
@@ -697,7 +697,6 @@
-
@@ -948,7 +947,7 @@
-
+
@@ -1039,8 +1038,6 @@
-
-
@@ -1065,13 +1062,12 @@
-
+
-
stock.picking.in.search
stock.picking.in
@@ -1349,8 +1345,6 @@
states="draft,assigned,confirmed,done"/>
-
-
@@ -1367,7 +1361,6 @@
-
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/subscription/subscription_view.xml b/addons/subscription/subscription_view.xml
index 13ebe096843..6f21af8c401 100644
--- a/addons/subscription/subscription_view.xml
+++ b/addons/subscription/subscription_view.xml
@@ -67,9 +67,6 @@
-
-
-