diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml index 853b9e3f76d..545bfd41f10 100644 --- a/addons/account/account_invoice_view.xml +++ b/addons/account/account_invoice_view.xml @@ -115,7 +115,7 @@ account.invoice tree - + diff --git a/addons/account/account_view.xml b/addons/account/account_view.xml index 6d6f7b29991..2264508a7da 100644 --- a/addons/account/account_view.xml +++ b/addons/account/account_view.xml @@ -44,7 +44,7 @@ account.fiscalyear tree - + @@ -111,7 +111,7 @@ account.period tree - + @@ -228,7 +228,7 @@ tree child_id - + @@ -271,7 +271,7 @@ tree child_id - + @@ -776,7 +776,7 @@ account.move tree - + @@ -1007,7 +1007,7 @@ tree - + @@ -1290,7 +1290,7 @@ account.move tree - + @@ -1395,7 +1395,7 @@ - + @@ -1560,7 +1560,7 @@ account.journal.period tree - + @@ -1816,7 +1816,7 @@ account.subscription tree - + @@ -1946,7 +1946,7 @@ tree - + @@ -2426,10 +2426,10 @@ -act_window_ids = self.pool.get('ir.actions.act_window').search(cr, uid,[('name', 'in', ('Accounting Chart Configuration', 'Generate Chart of Accounts from a Chart Template'))], context=context) -todo_ids = self.pool.get('ir.actions.todo').search(cr, uid, [('action_id', 'in', act_window_ids)], context=context) -self.pool.get('ir.actions.todo').write(cr, uid, todo_ids, {'state':'open'}, context=context) -action = self.pool.get('res.config').next(cr, uid, [], context) +act_window_ids = pool.get('ir.actions.act_window').search(cr, uid,[('name', 'in', ('Accounting Chart Configuration', 'Generate Chart of Accounts from a Chart Template'))], context=context) +todo_ids = pool.get('ir.actions.todo').search(cr, uid, [('action_id', 'in', act_window_ids)], context=context) +pool.get('ir.actions.todo').write(cr, uid, todo_ids, {'state':'open'}, context=context) +action = pool.get('res.config').next(cr, uid, [], context) New Company Financial Setting @@ -2530,7 +2530,7 @@ action = self.pool.get('res.config').next(cr, uid, [], context) account.bank.statement tree - + diff --git a/addons/account/i18n/en_GB.po b/addons/account/i18n/en_GB.po index 432bfdc33a4..cf6c13b5eaf 100644 --- a/addons/account/i18n/en_GB.po +++ b/addons/account/i18n/en_GB.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2011-08-25 17:24+0000\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2011-09-13 09:07+0000\n" +"Last-Translator: John Bradshaw \n" "Language-Team: English (United Kingdom) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-09-05 05:19+0000\n" -"X-Generator: Launchpad (build 13830)\n" +"X-Launchpad-Export-Date: 2011-09-14 04:40+0000\n" +"X-Generator: Launchpad (build 13921)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -31,7 +31,7 @@ msgstr "Other Configuration" #: code:addons/account/wizard/account_open_closed_fiscalyear.py:40 #, python-format msgid "No End of year journal defined for the fiscal year" -msgstr "" +msgstr "No End of year journal defined for the fiscal year" #. module: account #: code:addons/account/account.py:516 @@ -318,7 +318,7 @@ msgstr "Allow write off" #. module: account #: view:account.analytic.chart:0 msgid "Select the Period for Analysis" -msgstr "" +msgstr "Select the Period for Analysis" #. module: account #: view:account.move.line:0 @@ -695,19 +695,19 @@ msgstr "Account Common Partner Report" #. module: account #: field:account.fiscalyear.close,period_id:0 msgid "Opening Entries Period" -msgstr "" +msgstr "Opening Entries Period" #. module: account #: model:ir.model,name:account.model_account_journal_period msgid "Journal Period" -msgstr "" +msgstr "Journal Period" #. module: account #: code:addons/account/account_move_line.py:723 #: code:addons/account/account_move_line.py:767 #, python-format msgid "To reconcile the entries company should be the same for all entries" -msgstr "" +msgstr "To reconcile the entries company should be the same for all entries" #. module: account #: view:account.account:0 @@ -719,56 +719,56 @@ msgstr "" #: model:ir.actions.act_window,name:account.action_aged_receivable #, python-format msgid "Receivable Accounts" -msgstr "" +msgstr "Accounts Receivable" #. module: account #: model:ir.model,name:account.model_account_report_general_ledger msgid "General Ledger Report" -msgstr "" +msgstr "General Ledger Report" #. module: account #: view:account.invoice:0 msgid "Re-Open" -msgstr "" +msgstr "Re-Open" #. module: account #: view:account.use.model:0 msgid "Are you sure you want to create entries?" -msgstr "" +msgstr "Are you sure you want to create entries?" #. module: account #: selection:account.bank.accounts.wizard,account_type:0 msgid "Check" -msgstr "" +msgstr "Check" #. module: account #: field:account.partner.reconcile.process,today_reconciled:0 msgid "Partners Reconciled Today" -msgstr "" +msgstr "Partners Reconciled Today" #. module: account #: selection:account.payment.term.line,value:0 #: selection:account.tax.template,type:0 msgid "Percent" -msgstr "" +msgstr "Percent" #. module: account #: model:ir.ui.menu,name:account.menu_finance_charts msgid "Charts" -msgstr "" +msgstr "Charts" #. module: account #: code:addons/account/project/wizard/project_account_analytic_line.py:47 #: model:ir.model,name:account.model_project_account_analytic_line #, python-format msgid "Analytic Entries by line" -msgstr "" +msgstr "Analytic Entries by line" #. module: account #: code:addons/account/wizard/account_change_currency.py:38 #, python-format msgid "You can only change currency for Draft Invoice !" -msgstr "" +msgstr "You can only change currency for Draft Invoice !" #. module: account #: view:account.analytic.journal:0 @@ -782,17 +782,17 @@ msgstr "" #: field:account.move.reconcile,type:0 #: field:report.invoice.created,type:0 msgid "Type" -msgstr "" +msgstr "Type" #. module: account #: model:ir.model,name:account.model_account_subscription_line msgid "Account Subscription Line" -msgstr "" +msgstr "Account Subscription Line" #. module: account #: help:account.invoice,reference:0 msgid "The partner reference of this invoice." -msgstr "" +msgstr "The partner reference of this invoice." #. module: account #: view:account.move.line.unreconcile.select:0 @@ -800,12 +800,12 @@ msgstr "" #: view:account.unreconcile.reconcile:0 #: model:ir.model,name:account.model_account_move_line_unreconcile_select msgid "Unreconciliation" -msgstr "" +msgstr "Unreconciliation" #. module: account #: model:ir.model,name:account.model_account_analytic_Journal_report msgid "Account Analytic Journal" -msgstr "" +msgstr "Account Analytic Journal" #. module: account #: model:ir.model,name:account.model_account_automatic_reconcile diff --git a/addons/account/project/project_view.xml b/addons/account/project/project_view.xml index 08a2b4507ca..fb3fd14200a 100644 --- a/addons/account/project/project_view.xml +++ b/addons/account/project/project_view.xml @@ -57,7 +57,7 @@ tree child_complete_ids - + diff --git a/addons/account/report/account_entries_report_view.xml b/addons/account/report/account_entries_report_view.xml index baa9e15182b..b1913fa8fcc 100644 --- a/addons/account/report/account_entries_report_view.xml +++ b/addons/account/report/account_entries_report_view.xml @@ -6,7 +6,7 @@ account.entries.report tree - + diff --git a/addons/account/report/account_invoice_report_view.xml b/addons/account/report/account_invoice_report_view.xml index 963c41b0a0f..cee5d6a8cc2 100644 --- a/addons/account/report/account_invoice_report_view.xml +++ b/addons/account/report/account_invoice_report_view.xml @@ -6,7 +6,7 @@ account.invoice.report tree - + diff --git a/addons/account/report/account_report_view.xml b/addons/account/report/account_report_view.xml index a0cee804992..a625439f6ae 100644 --- a/addons/account/report/account_report_view.xml +++ b/addons/account/report/account_report_view.xml @@ -88,7 +88,7 @@ report.invoice.created tree - + diff --git a/addons/account_analytic_analysis/i18n/mk.po b/addons/account_analytic_analysis/i18n/mk.po new file mode 100644 index 00000000000..81d5d115207 --- /dev/null +++ b/addons/account_analytic_analysis/i18n/mk.po @@ -0,0 +1,296 @@ +# Macedonian translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2011-09-14 08:10+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Macedonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-09-15 04:47+0000\n" +"X-Generator: Launchpad (build 13921)\n" + +#. module: account_analytic_analysis +#: help:account.analytic.account,hours_qtt_invoiced:0 +msgid "" +"Number of hours that can be invoiced plus those that already have been " +"invoiced." +msgstr "" +"Број на часови кои можат да бидат фактурирани, плус часови кои веќе се " +"фактурирани." + +#. module: account_analytic_analysis +#: help:account.analytic.account,remaining_ca:0 +msgid "Computed using the formula: Max Invoice Price - Invoiced Amount." +msgstr "" +"Пресметано според формулата: Максимална фактурирана цена - Фактурирана цена." + +#. module: account_analytic_analysis +#: help:account.analytic.account,remaining_hours:0 +msgid "Computed using the formula: Maximum Quantity - Hours Tot." +msgstr "Пресметано според формулата: Максимална количина - Вкупно часови" + +#. module: account_analytic_analysis +#: code:addons/account_analytic_analysis/account_analytic_analysis.py:532 +#: code:addons/account_analytic_analysis/account_analytic_analysis.py:703 +#, python-format +msgid "AccessError" +msgstr "" + +#. module: account_analytic_analysis +#: help:account.analytic.account,last_invoice_date:0 +msgid "Date of the last invoice created for this analytic account." +msgstr "" + +#. module: account_analytic_analysis +#: model:ir.module.module,description:account_analytic_analysis.module_meta_information +msgid "" +"\n" +"This module is for modifying account analytic view to show\n" +"important data to project manager of services companies.\n" +"Adds menu to show relevant information to each manager..\n" +"\n" +"You can also view the report of account analytic summary\n" +"user-wise as well as month wise.\n" +msgstr "" + +#. module: account_analytic_analysis +#: field:account.analytic.account,last_invoice_date:0 +msgid "Last Invoice Date" +msgstr "" + +#. module: account_analytic_analysis +#: help:account.analytic.account,theorical_margin:0 +msgid "Computed using the formula: Theorial Revenue - Total Costs" +msgstr "" + +#. module: account_analytic_analysis +#: field:account.analytic.account,real_margin_rate:0 +msgid "Real Margin Rate (%)" +msgstr "" + +#. module: account_analytic_analysis +#: field:account.analytic.account,ca_theorical:0 +msgid "Theoretical Revenue" +msgstr "" + +#. module: account_analytic_analysis +#: help:account.analytic.account,last_worked_invoiced_date:0 +msgid "" +"If invoice from the costs, this is the date of the latest work or cost that " +"have been invoiced." +msgstr "" + +#. module: account_analytic_analysis +#: model:ir.ui.menu,name:account_analytic_analysis.menu_invoicing +msgid "Billing" +msgstr "" + +#. module: account_analytic_analysis +#: field:account.analytic.account,last_worked_date:0 +msgid "Date of Last Cost/Work" +msgstr "" + +#. module: account_analytic_analysis +#: field:account.analytic.account,total_cost:0 +msgid "Total Costs" +msgstr "" + +#. module: account_analytic_analysis +#: help:account.analytic.account,hours_quantity:0 +msgid "" +"Number of hours you spent on the analytic account (from timesheet). It " +"computes on all journal of type 'general'." +msgstr "" + +#. module: account_analytic_analysis +#: field:account.analytic.account,remaining_hours:0 +msgid "Remaining Hours" +msgstr "" + +#. module: account_analytic_analysis +#: field:account.analytic.account,theorical_margin:0 +msgid "Theoretical Margin" +msgstr "" + +#. module: account_analytic_analysis +#: help:account.analytic.account,ca_theorical:0 +msgid "" +"Based on the costs you had on the project, what would have been the revenue " +"if all these costs have been invoiced at the normal sale price provided by " +"the pricelist." +msgstr "" + +#. module: account_analytic_analysis +#: field:account.analytic.account,user_ids:0 +#: field:account_analytic_analysis.summary.user,user:0 +msgid "User" +msgstr "" + +#. module: account_analytic_analysis +#: field:account.analytic.account,ca_to_invoice:0 +msgid "Uninvoiced Amount" +msgstr "" + +#. module: account_analytic_analysis +#: help:account.analytic.account,real_margin:0 +msgid "Computed using the formula: Invoiced Amount - Total Costs." +msgstr "" + +#. module: account_analytic_analysis +#: field:account.analytic.account,hours_qtt_non_invoiced:0 +msgid "Uninvoiced Hours" +msgstr "" + +#. module: account_analytic_analysis +#: help:account.analytic.account,last_worked_date:0 +msgid "Date of the latest work done on this account." +msgstr "" + +#. module: account_analytic_analysis +#: model:ir.module.module,shortdesc:account_analytic_analysis.module_meta_information +msgid "report_account_analytic" +msgstr "" + +#. module: account_analytic_analysis +#: model:ir.model,name:account_analytic_analysis.model_account_analytic_analysis_summary_user +msgid "Hours Summary by User" +msgstr "" + +#. module: account_analytic_analysis +#: field:account.analytic.account,ca_invoiced:0 +msgid "Invoiced Amount" +msgstr "" + +#. module: account_analytic_analysis +#: code:addons/account_analytic_analysis/account_analytic_analysis.py:533 +#: code:addons/account_analytic_analysis/account_analytic_analysis.py:704 +#, python-format +msgid "You try to bypass an access rule (Document type: %s)." +msgstr "" + +#. module: account_analytic_analysis +#: field:account.analytic.account,last_worked_invoiced_date:0 +msgid "Date of Last Invoiced Cost" +msgstr "" + +#. module: account_analytic_analysis +#: field:account.analytic.account,hours_qtt_invoiced:0 +msgid "Invoiced Hours" +msgstr "" + +#. module: account_analytic_analysis +#: field:account.analytic.account,real_margin:0 +msgid "Real Margin" +msgstr "" + +#. module: account_analytic_analysis +#: constraint:account.analytic.account:0 +msgid "" +"Error! The currency has to be the same as the currency of the selected " +"company" +msgstr "" + +#. module: account_analytic_analysis +#: help:account.analytic.account,ca_invoiced:0 +msgid "Total customer invoiced amount for this account." +msgstr "" + +#. module: account_analytic_analysis +#: model:ir.model,name:account_analytic_analysis.model_account_analytic_analysis_summary_month +msgid "Hours summary by month" +msgstr "" + +#. module: account_analytic_analysis +#: help:account.analytic.account,real_margin_rate:0 +msgid "Computes using the formula: (Real Margin / Total Costs) * 100." +msgstr "" + +#. module: account_analytic_analysis +#: help:account.analytic.account,hours_qtt_non_invoiced:0 +msgid "" +"Number of hours (from journal of type 'general') that can be invoiced if you " +"invoice based on analytic account." +msgstr "" + +#. module: account_analytic_analysis +#: view:account.analytic.account:0 +msgid "Analytic accounts" +msgstr "" + +#. module: account_analytic_analysis +#: field:account.analytic.account,remaining_ca:0 +msgid "Remaining Revenue" +msgstr "" + +#. module: account_analytic_analysis +#: help:account.analytic.account,ca_to_invoice:0 +msgid "" +"If invoice from analytic account, the remaining amount you can invoice to " +"the customer based on the total costs." +msgstr "" + +#. module: account_analytic_analysis +#: help:account.analytic.account,revenue_per_hour:0 +msgid "Computed using the formula: Invoiced Amount / Hours Tot." +msgstr "" + +#. module: account_analytic_analysis +#: field:account.analytic.account,revenue_per_hour:0 +msgid "Revenue per Hours (real)" +msgstr "" + +#. module: account_analytic_analysis +#: field:account_analytic_analysis.summary.month,unit_amount:0 +#: field:account_analytic_analysis.summary.user,unit_amount:0 +msgid "Total Time" +msgstr "" + +#. module: account_analytic_analysis +#: field:account.analytic.account,month_ids:0 +#: field:account_analytic_analysis.summary.month,month:0 +msgid "Month" +msgstr "" + +#. module: account_analytic_analysis +#: field:account_analytic_analysis.summary.month,account_id:0 +#: field:account_analytic_analysis.summary.user,account_id:0 +#: model:ir.model,name:account_analytic_analysis.model_account_analytic_account +msgid "Analytic Account" +msgstr "" + +#. module: account_analytic_analysis +#: model:ir.actions.act_window,name:account_analytic_analysis.action_account_analytic_managed_overpassed +#: model:ir.ui.menu,name:account_analytic_analysis.menu_action_account_analytic_managed_overpassed +msgid "Overpassed Accounts" +msgstr "" + +#. 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 "" + +#. module: account_analytic_analysis +#: field:account.analytic.account,hours_quantity:0 +msgid "Hours Tot" +msgstr "" + +#. module: account_analytic_analysis +#: constraint:account.analytic.account:0 +msgid "Error! You can not create recursive analytic accounts." +msgstr "" + +#. module: account_analytic_analysis +#: help:account.analytic.account,total_cost:0 +msgid "" +"Total of costs for this account. It includes real costs (from invoices) and " +"indirect costs, like time spent on timesheets." +msgstr "" diff --git a/addons/account_budget/account_budget_view.xml b/addons/account_budget/account_budget_view.xml index 321014ea859..41ebcdf437d 100644 --- a/addons/account_budget/account_budget_view.xml +++ b/addons/account_budget/account_budget_view.xml @@ -152,7 +152,7 @@ crossovered.budget tree - + diff --git a/addons/account_coda/i18n/lv.po b/addons/account_coda/i18n/lv.po new file mode 100644 index 00000000000..2763ce90c84 --- /dev/null +++ b/addons/account_coda/i18n/lv.po @@ -0,0 +1,269 @@ +# Latvian translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2011-09-12 13:54+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Latvian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-09-13 04:47+0000\n" +"X-Generator: Launchpad (build 13910)\n" + +#. module: account_coda +#: help:account.coda,journal_id:0 +#: field:account.coda.import,journal_id:0 +msgid "Bank Journal" +msgstr "Banku žurnāls" + +#. module: account_coda +#: view:account.coda:0 +#: field:account.coda.import,note:0 +msgid "Log" +msgstr "Reģistrs" + +#. module: account_coda +#: model:ir.model,name:account_coda.model_account_coda_import +msgid "Account Coda Import" +msgstr "Konta Pārskata Imports" + +#. module: account_coda +#: field:account.coda,name:0 +msgid "Coda file" +msgstr "Pārskata fails" + +#. module: account_coda +#: view:account.coda:0 +msgid "Group By..." +msgstr "Grupēt pēc..." + +#. module: account_coda +#: field:account.coda.import,awaiting_account:0 +msgid "Default Account for Unrecognized Movement" +msgstr "Noklusētais Konts Neatpazītām Kustībām" + +#. module: account_coda +#: help:account.coda,date:0 +msgid "Import Date" +msgstr "Importa Datums" + +#. module: account_coda +#: field:account.coda,note:0 +msgid "Import log" +msgstr "Importa žurnāls" + +#. module: account_coda +#: view:account.coda.import:0 +msgid "Import" +msgstr "Importēt" + +#. module: account_coda +#: view:account.coda:0 +msgid "Coda import" +msgstr "Pārskata Imports" + +#. module: account_coda +#: code:addons/account_coda/account_coda.py:51 +#, python-format +msgid "Coda file not found for bank statement !!" +msgstr "Bankas konta pārskata fails nav atrasts!" + +#. module: account_coda +#: help:account.coda.import,awaiting_account:0 +msgid "" +"Set here the default account that will be used, if the partner is found but " +"does not have the bank account, or if he is domiciled" +msgstr "" +"Iestatiet noklusējuma kontu, kas tiks izmantots, ja partneris ir atrasts, " +"bet tam nav bankas konta vai adreses" + +#. module: account_coda +#: view:account.coda:0 +#: field:account.coda,company_id:0 +msgid "Company" +msgstr "Uzņēmums" + +#. module: account_coda +#: help:account.coda.import,def_payable:0 +msgid "" +"Set here the payable account that will be used, by default, if the partner " +"is not found" +msgstr "" +"Uzstatiet kontu maksājumiem, kas tiks izmantots pēc noklusējuma, ja " +"partneris nav atrasts" + +#. module: account_coda +#: view:account.coda:0 +msgid "Search Coda" +msgstr "Meklēt Pārskatā" + +#. module: account_coda +#: view:account.coda:0 +#: field:account.coda,user_id:0 +msgid "User" +msgstr "Lietotājs" + +#. module: account_coda +#: view:account.coda:0 +#: field:account.coda,date:0 +msgid "Date" +msgstr "Datums" + +#. module: account_coda +#: model:ir.ui.menu,name:account_coda.menu_account_coda_statement +msgid "Coda Import Logs" +msgstr "Pārskata Importa Žurnāls" + +#. module: account_coda +#: model:ir.model,name:account_coda.model_account_coda +msgid "coda for an Account" +msgstr "Konta Pārskats" + +#. module: account_coda +#: field:account.coda.import,def_payable:0 +msgid "Default Payable Account" +msgstr "Noklusētais Maksājumu Konts" + +#. module: account_coda +#: help:account.coda,name:0 +msgid "Store the detail of bank statements" +msgstr "Saglabāt bankas pārskata detaļas" + +#. module: account_coda +#: view:account.coda.import:0 +msgid "Cancel" +msgstr "Atcelt" + +#. module: account_coda +#: view:account.coda.import:0 +msgid "Open Statements" +msgstr "Atvērtie Pārskati" + +#. module: account_coda +#: code:addons/account_coda/wizard/account_coda_import.py:167 +#, python-format +msgid "The bank account %s is not defined for the partner %s.\n" +msgstr "Bankas konts %s partnerim %s nav definēts.\n" + +#. module: account_coda +#: model:ir.ui.menu,name:account_coda.menu_account_coda_import +msgid "Import Coda Statements" +msgstr "Importēt Bankas Pārskatus" + +#. module: account_coda +#: view:account.coda.import:0 +#: model:ir.actions.act_window,name:account_coda.action_account_coda_import +msgid "Import Coda Statement" +msgstr "Importēt Bankas Pārskatu" + +#. module: account_coda +#: model:ir.module.module,description:account_coda.module_meta_information +msgid "" +"\n" +" Module provides functionality to import\n" +" bank statements from coda files.\n" +" " +msgstr "" +"\n" +" Modulis nodrošina iespēju importēt\n" +" banku pārskatus no coda failiem.\n" +" " + +#. module: account_coda +#: view:account.coda:0 +msgid "Statements" +msgstr "Izraksti" + +#. module: account_coda +#: field:account.bank.statement,coda_id:0 +msgid "Coda" +msgstr "Coda" + +#. module: account_coda +#: view:account.coda.import:0 +msgid "Results :" +msgstr "Rezultāti:" + +#. module: account_coda +#: view:account.coda.import:0 +msgid "Result of Imported Coda Statements" +msgstr "Importēto Pārskatu Rezultāti" + +#. module: account_coda +#: help:account.coda.import,def_receivable:0 +msgid "" +"Set here the receivable account that will be used, by default, if the " +"partner is not found" +msgstr "" +"Uzstatiet kontu ieņēmumiem, kas tiks izmantots pēc noklusējuma, ja partneris " +"nav atrasts" + +#. module: account_coda +#: field:account.coda.import,coda:0 +#: model:ir.actions.act_window,name:account_coda.act_account_payment_account_bank_statement +msgid "Coda File" +msgstr "Coda Fails" + +#. module: account_coda +#: model:ir.model,name:account_coda.model_account_bank_statement +msgid "Bank Statement" +msgstr "Bankas Konta Izraksts" + +#. module: account_coda +#: model:ir.actions.act_window,name:account_coda.action_account_coda +msgid "Coda Logs" +msgstr "Coda Žurnāls" + +#. module: account_coda +#: code:addons/account_coda/wizard/account_coda_import.py:311 +#, python-format +msgid "Result" +msgstr "Rezultāts" + +#. module: account_coda +#: view:account.coda.import:0 +msgid "Click on 'New' to select your file :" +msgstr "Uzspiest uz 'Jauns' lai izvēlētos savu failu:" + +#. module: account_coda +#: field:account.coda.import,def_receivable:0 +msgid "Default Receivable Account" +msgstr "Noklusētais Ieņēmumu Konts" + +#. module: account_coda +#: view:account.coda.import:0 +msgid "Close" +msgstr "Aizvērt" + +#. module: account_coda +#: field:account.coda,statement_ids:0 +msgid "Generated Bank Statements" +msgstr "Ģenerētais Bankas Pārskats" + +#. module: account_coda +#: model:ir.module.module,shortdesc:account_coda.module_meta_information +msgid "Account CODA - import bank statements from coda file" +msgstr "Konta CODA - bankas kontu pārskatu imports no coda faila" + +#. module: account_coda +#: view:account.coda.import:0 +msgid "Configure Your Journal and Account :" +msgstr "Konfigurēt Savu Žurnālu un Kontu:" + +#. module: account_coda +#: view:account.coda:0 +msgid "Coda Import" +msgstr "Pārskata Imports" + +#. module: account_coda +#: view:account.coda:0 +#: field:account.coda,journal_id:0 +msgid "Journal" +msgstr "Žurnāls" diff --git a/addons/account_coda/i18n/sl.po b/addons/account_coda/i18n/sl.po new file mode 100644 index 00000000000..b2c7e144795 --- /dev/null +++ b/addons/account_coda/i18n/sl.po @@ -0,0 +1,259 @@ +# Slovenian translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2011-09-14 11:29+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Slovenian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-09-15 04:47+0000\n" +"X-Generator: Launchpad (build 13921)\n" + +#. module: account_coda +#: help:account.coda,journal_id:0 +#: field:account.coda.import,journal_id:0 +msgid "Bank Journal" +msgstr "Bančni dnevnik" + +#. module: account_coda +#: view:account.coda:0 +#: field:account.coda.import,note:0 +msgid "Log" +msgstr "Dnevnik" + +#. module: account_coda +#: model:ir.model,name:account_coda.model_account_coda_import +msgid "Account Coda Import" +msgstr "" + +#. module: account_coda +#: field:account.coda,name:0 +msgid "Coda file" +msgstr "" + +#. module: account_coda +#: view:account.coda:0 +msgid "Group By..." +msgstr "Združi po ..." + +#. module: account_coda +#: field:account.coda.import,awaiting_account:0 +msgid "Default Account for Unrecognized Movement" +msgstr "" + +#. module: account_coda +#: help:account.coda,date:0 +msgid "Import Date" +msgstr "Datum uvoza" + +#. module: account_coda +#: field:account.coda,note:0 +msgid "Import log" +msgstr "Dnevnik uvoza" + +#. module: account_coda +#: view:account.coda.import:0 +msgid "Import" +msgstr "Uvozi" + +#. module: account_coda +#: view:account.coda:0 +msgid "Coda import" +msgstr "" + +#. module: account_coda +#: code:addons/account_coda/account_coda.py:51 +#, python-format +msgid "Coda file not found for bank statement !!" +msgstr "" + +#. module: account_coda +#: help:account.coda.import,awaiting_account:0 +msgid "" +"Set here the default account that will be used, if the partner is found but " +"does not have the bank account, or if he is domiciled" +msgstr "" + +#. module: account_coda +#: view:account.coda:0 +#: field:account.coda,company_id:0 +msgid "Company" +msgstr "Podjetje" + +#. module: account_coda +#: help:account.coda.import,def_payable:0 +msgid "" +"Set here the payable account that will be used, by default, if the partner " +"is not found" +msgstr "" + +#. module: account_coda +#: view:account.coda:0 +msgid "Search Coda" +msgstr "" + +#. module: account_coda +#: view:account.coda:0 +#: field:account.coda,user_id:0 +msgid "User" +msgstr "Uporabnik" + +#. module: account_coda +#: view:account.coda:0 +#: field:account.coda,date:0 +msgid "Date" +msgstr "Datum" + +#. module: account_coda +#: model:ir.ui.menu,name:account_coda.menu_account_coda_statement +msgid "Coda Import Logs" +msgstr "" + +#. module: account_coda +#: model:ir.model,name:account_coda.model_account_coda +msgid "coda for an Account" +msgstr "" + +#. module: account_coda +#: field:account.coda.import,def_payable:0 +msgid "Default Payable Account" +msgstr "" + +#. module: account_coda +#: help:account.coda,name:0 +msgid "Store the detail of bank statements" +msgstr "" + +#. module: account_coda +#: view:account.coda.import:0 +msgid "Cancel" +msgstr "Prekliči" + +#. module: account_coda +#: view:account.coda.import:0 +msgid "Open Statements" +msgstr "" + +#. module: account_coda +#: code:addons/account_coda/wizard/account_coda_import.py:167 +#, python-format +msgid "The bank account %s is not defined for the partner %s.\n" +msgstr "" + +#. module: account_coda +#: model:ir.ui.menu,name:account_coda.menu_account_coda_import +msgid "Import Coda Statements" +msgstr "" + +#. module: account_coda +#: view:account.coda.import:0 +#: model:ir.actions.act_window,name:account_coda.action_account_coda_import +msgid "Import Coda Statement" +msgstr "" + +#. module: account_coda +#: model:ir.module.module,description:account_coda.module_meta_information +msgid "" +"\n" +" Module provides functionality to import\n" +" bank statements from coda files.\n" +" " +msgstr "" + +#. module: account_coda +#: view:account.coda:0 +msgid "Statements" +msgstr "Izpiski" + +#. module: account_coda +#: field:account.bank.statement,coda_id:0 +msgid "Coda" +msgstr "" + +#. module: account_coda +#: view:account.coda.import:0 +msgid "Results :" +msgstr "Rezultat" + +#. module: account_coda +#: view:account.coda.import:0 +msgid "Result of Imported Coda Statements" +msgstr "" + +#. module: account_coda +#: help:account.coda.import,def_receivable:0 +msgid "" +"Set here the receivable account that will be used, by default, if the " +"partner is not found" +msgstr "" + +#. module: account_coda +#: field:account.coda.import,coda:0 +#: model:ir.actions.act_window,name:account_coda.act_account_payment_account_bank_statement +msgid "Coda File" +msgstr "" + +#. module: account_coda +#: model:ir.model,name:account_coda.model_account_bank_statement +msgid "Bank Statement" +msgstr "Bančni izpisek" + +#. module: account_coda +#: model:ir.actions.act_window,name:account_coda.action_account_coda +msgid "Coda Logs" +msgstr "" + +#. module: account_coda +#: code:addons/account_coda/wizard/account_coda_import.py:311 +#, python-format +msgid "Result" +msgstr "Rezultat" + +#. module: account_coda +#: view:account.coda.import:0 +msgid "Click on 'New' to select your file :" +msgstr "Kliknite na \"Novo\" za izbiro vaše datoteke:" + +#. module: account_coda +#: field:account.coda.import,def_receivable:0 +msgid "Default Receivable Account" +msgstr "" + +#. module: account_coda +#: view:account.coda.import:0 +msgid "Close" +msgstr "Zapri" + +#. module: account_coda +#: field:account.coda,statement_ids:0 +msgid "Generated Bank Statements" +msgstr "Generirani bačni izpiski" + +#. module: account_coda +#: model:ir.module.module,shortdesc:account_coda.module_meta_information +msgid "Account CODA - import bank statements from coda file" +msgstr "" + +#. module: account_coda +#: view:account.coda.import:0 +msgid "Configure Your Journal and Account :" +msgstr "" + +#. module: account_coda +#: view:account.coda:0 +msgid "Coda Import" +msgstr "" + +#. module: account_coda +#: view:account.coda:0 +#: field:account.coda,journal_id:0 +msgid "Journal" +msgstr "Dnevnik" diff --git a/addons/account_followup/__openerp__.py b/addons/account_followup/__openerp__.py index fd5cc859646..b316f5039a3 100644 --- a/addons/account_followup/__openerp__.py +++ b/addons/account_followup/__openerp__.py @@ -45,7 +45,7 @@ Note that if you want to check the followup level for a given partner/account en 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', 'images': ['images/follow_ups.jpeg','images/send_followups.jpeg'], - 'depends': ['account'], + 'depends': ['account_accountant', 'mail'], 'init_xml': [], 'update_xml': [ 'security/ir.model.access.csv', diff --git a/addons/account_followup/account_followup_demo.xml b/addons/account_followup/account_followup_demo.xml index 2bf627de9b7..01b275de306 100644 --- a/addons/account_followup/account_followup_demo.xml +++ b/addons/account_followup/account_followup_demo.xml @@ -17,9 +17,9 @@ Dear %(partner_name)s, -Exception made if there was a mistake of ours, it seems that the following amount staid unpaid. Please, take appropriate measures in order to carry out this payment in the next 8 days. +Exception made if there was a mistake of ours, it seems that the following amount stays unpaid. Please, take appropriate measures in order to carry out this payment in the next 8 days. -Would your payment have been carried out after this mail was sent, please consider the present one as void. Do not hesitate to contact our accounting department at (+32).10.68.94.39. +Would your payment have been carried out after this mail was sent, please ignore this message. Do not hesitate to contact our accounting department at (+32).10.68.94.39. Best Regards, diff --git a/addons/account_followup/account_followup_view.xml b/addons/account_followup/account_followup_view.xml index 5264071040c..bd1d86ab7ef 100644 --- a/addons/account_followup/account_followup_view.xml +++ b/addons/account_followup/account_followup_view.xml @@ -99,7 +99,7 @@ tree - + diff --git a/addons/account_followup/wizard/account_followup_print.py b/addons/account_followup/wizard/account_followup_print.py index 18b0fc1b874..78f1b8b34c7 100644 --- a/addons/account_followup/wizard/account_followup_print.py +++ b/addons/account_followup/wizard/account_followup_print.py @@ -205,6 +205,7 @@ class account_followup_print_all(osv.osv_memory): move_obj = self.pool.get('account.move.line') user_obj = self.pool.get('res.users') line_obj = self.pool.get('account_followup.stat') + mail_message = self.pool.get('mail.message') if context is None: context = {} @@ -277,7 +278,7 @@ class account_followup_print_all(osv.osv_memory): msg = '' if dest: try: - tools.email_send(src, dest, sub, body) + mail_message.schedule_with_attach(cr, uid, src, dest, sub, body, context=context) msg_sent += partner.name + '\n' except Exception, e: raise osv.except_osv('Error !', e ) diff --git a/addons/account_invoice_layout/i18n/da.po b/addons/account_invoice_layout/i18n/da.po new file mode 100644 index 00000000000..d7f08f09141 --- /dev/null +++ b/addons/account_invoice_layout/i18n/da.po @@ -0,0 +1,366 @@ +# Danish translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2011-09-12 17:17+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-09-13 04:47+0000\n" +"X-Generator: Launchpad (build 13910)\n" + +#. module: account_invoice_layout +#: selection:account.invoice.line,state:0 +msgid "Sub Total" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Note:" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Cancelled Invoice" +msgstr "" + +#. module: account_invoice_layout +#: selection:account.invoice.line,state:0 +#: field:notify.message,name:0 +msgid "Title" +msgstr "" + +#. module: account_invoice_layout +#: model:ir.actions.act_window,name:account_invoice_layout.action_account_invoice_special_msg +#: model:ir.actions.report.xml,name:account_invoice_layout.account_invoices_layout_message +msgid "Invoices with Layout and Message" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Disc. (%)" +msgstr "" + +#. module: account_invoice_layout +#: selection:account.invoice.line,state:0 +msgid "Note" +msgstr "" + +#. module: account_invoice_layout +#: model:ir.model,name:account_invoice_layout.model_notify_message +msgid "Notify By Messages" +msgstr "" + +#. module: account_invoice_layout +#: help:notify.message,msg:0 +msgid "" +"This notification will appear at the bottom of the Invoices when printed." +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Unit Price" +msgstr "" + +#. module: account_invoice_layout +#: model:ir.module.module,description:account_invoice_layout.module_meta_information +msgid "" +"\n" +" This module provides some features to improve the layout of the " +"invoices.\n" +"\n" +" It gives you the possibility to\n" +" * order all the lines of an invoice\n" +" * add titles, comment lines, sub total lines\n" +" * draw horizontal lines and put page breaks\n" +"\n" +" Moreover, there is one option which allows you to print all the selected " +"invoices with a given special message at the bottom of it. This feature can " +"be very useful for printing your invoices with end-of-year wishes, special " +"punctual conditions...\n" +"\n" +" " +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "VAT :" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Tel. :" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "PRO-FORMA" +msgstr "" + +#. module: account_invoice_layout +#: field:account.invoice,abstract_line_ids:0 +msgid "Invoice Lines" +msgstr "" + +#. module: account_invoice_layout +#: view:account.invoice.line:0 +msgid "Seq." +msgstr "" + +#. module: account_invoice_layout +#: model:ir.ui.menu,name:account_invoice_layout.menu_finan_config_notify_message +msgid "Notification Message" +msgstr "" + +#. module: account_invoice_layout +#: selection:account.invoice.line,state:0 +msgid "Product" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Description" +msgstr "" + +#. module: account_invoice_layout +#: help:account.invoice.line,sequence:0 +msgid "Gives the sequence order when displaying a list of invoice lines." +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Price" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Invoice Date" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +msgid "Taxes:" +msgstr "" + +#. module: account_invoice_layout +#: field:account.invoice.line,functional_field:0 +msgid "Source Account" +msgstr "" + +#. module: account_invoice_layout +#: model:ir.actions.act_window,name:account_invoice_layout.notify_mesage_tree_form +msgid "Write Messages" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Base" +msgstr "" + +#. module: account_invoice_layout +#: selection:account.invoice.line,state:0 +msgid "Page Break" +msgstr "" + +#. module: account_invoice_layout +#: view:notify.message:0 +#: field:notify.message,msg:0 +msgid "Special Message" +msgstr "" + +#. module: account_invoice_layout +#: help:account.invoice.special.msg,message:0 +msgid "Message to Print at the bottom of report" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Quantity" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Refund" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Fax :" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +msgid "Total:" +msgstr "" + +#. module: account_invoice_layout +#: view:account.invoice.special.msg:0 +msgid "Select Message" +msgstr "" + +#. module: account_invoice_layout +#: view:notify.message:0 +msgid "Messages" +msgstr "" + +#. module: account_invoice_layout +#: model:ir.actions.report.xml,name:account_invoice_layout.account_invoices_1 +msgid "Invoices with Layout" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Description / Taxes" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Amount" +msgstr "" + +#. module: account_invoice_layout +#: model:notify.message,msg:account_invoice_layout.demo_message1 +msgid "ERP & CRM Solutions..." +msgstr "" + +#. module: account_invoice_layout +#: report:notify_account.invoice:0 +msgid "Net Total :" +msgstr "" + +#. module: account_invoice_layout +#: report:notify_account.invoice:0 +msgid "Total :" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Draft Invoice" +msgstr "" + +#. module: account_invoice_layout +#: field:account.invoice.line,sequence:0 +msgid "Sequence Number" +msgstr "" + +#. module: account_invoice_layout +#: model:ir.model,name:account_invoice_layout.model_account_invoice_special_msg +msgid "Account Invoice Special Message" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Origin" +msgstr "" + +#. module: account_invoice_layout +#: field:account.invoice.line,state:0 +msgid "Type" +msgstr "" + +#. module: account_invoice_layout +#: selection:account.invoice.line,state:0 +msgid "Separator Line" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Your Reference" +msgstr "" + +#. module: account_invoice_layout +#: model:ir.module.module,shortdesc:account_invoice_layout.module_meta_information +msgid "Invoices Layout Improvement" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Supplier Invoice" +msgstr "" + +#. module: account_invoice_layout +#: view:account.invoice.special.msg:0 +msgid "Print" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Tax" +msgstr "" + +#. module: account_invoice_layout +#: model:ir.model,name:account_invoice_layout.model_account_invoice_line +msgid "Invoice Line" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +msgid "Net Total:" +msgstr "" + +#. module: account_invoice_layout +#: view:notify.message:0 +msgid "Write a notification or a wishful message." +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: model:ir.model,name:account_invoice_layout.model_account_invoice +#: report:notify_account.invoice:0 +msgid "Invoice" +msgstr "" + +#. module: account_invoice_layout +#: view:account.invoice.special.msg:0 +msgid "Cancel" +msgstr "" + +#. module: account_invoice_layout +#: report:account.invoice.layout:0 +#: report:notify_account.invoice:0 +msgid "Supplier Refund" +msgstr "" + +#. module: account_invoice_layout +#: field:account.invoice.special.msg,message:0 +msgid "Message" +msgstr "" + +#. module: account_invoice_layout +#: report:notify_account.invoice:0 +msgid "Taxes :" +msgstr "" + +#. module: account_invoice_layout +#: model:ir.ui.menu,name:account_invoice_layout.menu_notify_mesage_tree_form +msgid "All Notification Messages" +msgstr "" diff --git a/addons/account_payment/account_payment_view.xml b/addons/account_payment/account_payment_view.xml index 76197140b49..7d6e281f58b 100644 --- a/addons/account_payment/account_payment_view.xml +++ b/addons/account_payment/account_payment_view.xml @@ -179,7 +179,7 @@ tree - + diff --git a/addons/account_sequence/i18n/lv.po b/addons/account_sequence/i18n/lv.po new file mode 100644 index 00000000000..d524a796ef1 --- /dev/null +++ b/addons/account_sequence/i18n/lv.po @@ -0,0 +1,230 @@ +# Latvian translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2011-09-12 20:40+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Latvian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-09-13 04:47+0000\n" +"X-Generator: Launchpad (build 13910)\n" + +#. module: account_sequence +#: view:account.sequence.installer:0 +#: model:ir.actions.act_window,name:account_sequence.action_account_seq_installer +msgid "Account Sequence Application Configuration" +msgstr "Kontu Secības Aplikācijas Iestatījumi" + +#. module: account_sequence +#: constraint:account.move:0 +msgid "" +"You cannot create entries on different periods/journals in the same move" +msgstr "Jūs vienlaicīgi nevarat izveidot ierakstus dažādos periodos/žurnālos" + +#. module: account_sequence +#: help:account.move,internal_sequence_number:0 +#: help:account.move.line,internal_sequence_number:0 +msgid "Internal Sequence Number" +msgstr "Iekšējais kārtas numurs" + +#. module: account_sequence +#: help:account.sequence.installer,number_next:0 +msgid "Next number of this sequence" +msgstr "Šīs secības nākamais numurs" + +#. module: account_sequence +#: field:account.sequence.installer,number_next:0 +msgid "Next Number" +msgstr "Nākamais Numurs" + +#. module: account_sequence +#: field:account.sequence.installer,number_increment:0 +msgid "Increment Number" +msgstr "Soļa Numurs" + +#. module: account_sequence +#: model:ir.module.module,description:account_sequence.module_meta_information +msgid "" +"\n" +" This module maintains internal sequence number for accounting entries.\n" +" " +msgstr "" +"\n" +" Šis modulis nodrošina iekšējo kārtas numuru grāmatošanas ierakstiem.\n" +" " + +#. module: account_sequence +#: model:ir.module.module,shortdesc:account_sequence.module_meta_information +msgid "Entries Sequence Numbering" +msgstr "Ierakstu Kārtas Numerācija" + +#. module: account_sequence +#: help:account.sequence.installer,number_increment:0 +msgid "The next number of the sequence will be incremented by this number" +msgstr "Sekvences nākamais numurs tiks palielināts par šo skaitli" + +#. module: account_sequence +#: view:account.sequence.installer:0 +msgid "Configure Your Account Sequence Application" +msgstr "Konfigurēt Tavu Konta Sesības Aplikāciju" + +#. module: account_sequence +#: field:account.sequence.installer,progress:0 +msgid "Configuration Progress" +msgstr "Konfigurācijas Progress" + +#. module: account_sequence +#: help:account.sequence.installer,suffix:0 +msgid "Suffix value of the record for the sequence" +msgstr "Sekvences ieraksta piedēkļa vērtiba" + +#. module: account_sequence +#: field:account.sequence.installer,company_id:0 +msgid "Company" +msgstr "Uzņēmums" + +#. module: account_sequence +#: help:account.journal,internal_sequence_id:0 +msgid "" +"This sequence will be used to maintain the internal number for the journal " +"entries related to this journal." +msgstr "" +"Šo secību izmantos, lai izveidotu ar šo žurnālu saistīto žurnāla ierakstu " +"iekšējo numerāciju" + +#. module: account_sequence +#: field:account.sequence.installer,padding:0 +msgid "Number padding" +msgstr "Numerācijas garums" + +#. module: account_sequence +#: model:ir.model,name:account_sequence.model_account_move_line +msgid "Journal Items" +msgstr "Žurnāla Vienumi" + +#. module: account_sequence +#: field:account.move,internal_sequence_number:0 +#: field:account.move.line,internal_sequence_number:0 +msgid "Internal Number" +msgstr "Iekšējā Numerācija" + +#. module: account_sequence +#: constraint:account.move.line:0 +msgid "Company must be same for its related account and period." +msgstr "Uzņēmumam ir jāsakrīt ar saistīto kontu un periodu." + +#. module: account_sequence +#: help:account.sequence.installer,padding:0 +msgid "" +"OpenERP will automatically adds some '0' on the left of the 'Next Number' to " +"get the required padding size." +msgstr "" +"OpenERP automātiski pievienos kādu '0' iedaļas 'Nākamais Numurs' kreisajā " +"pusē lai iegūtu nepieciešamo numerācijas garumu." + +#. module: account_sequence +#: field:account.sequence.installer,name:0 +msgid "Name" +msgstr "Nosaukums" + +#. module: account_sequence +#: constraint:account.move.line:0 +msgid "You can not create move line on closed account." +msgstr "Nav iespējams veikt grāmatojumus slēgtā kontā." + +#. module: account_sequence +#: constraint:account.move:0 +msgid "" +"You cannot create more than one move per period on centralized journal" +msgstr "" +"Jūs nevarat centralizētā žurnālā izveidot vairāk par vienu pārvietošanu " +"vienā periodā" + +#. module: account_sequence +#: sql_constraint:account.move.line:0 +msgid "Wrong credit or debit value in accounting entry !" +msgstr "Kļūdaina kredīta vai debeta vērtība grāmatojumā!" + +#. module: account_sequence +#: field:account.journal,internal_sequence_id:0 +msgid "Internal Sequence" +msgstr "Iekšējā Sekvence" + +#. module: account_sequence +#: model:ir.model,name:account_sequence.model_account_sequence_installer +msgid "account.sequence.installer" +msgstr "account.sequence.installer" + +#. module: account_sequence +#: view:account.sequence.installer:0 +msgid "Configure" +msgstr "Konfigurēt" + +#. module: account_sequence +#: help:account.sequence.installer,prefix:0 +msgid "Prefix value of the record for the sequence" +msgstr "Piedēkļa vērtība sekvences ierakstiem" + +#. module: account_sequence +#: model:ir.model,name:account_sequence.model_account_move +msgid "Account Entry" +msgstr "Kontējums" + +#. module: account_sequence +#: field:account.sequence.installer,suffix:0 +msgid "Suffix" +msgstr "Priedēklis" + +#. module: account_sequence +#: field:account.sequence.installer,config_logo:0 +msgid "Image" +msgstr "Attēls" + +#. module: account_sequence +#: view:account.sequence.installer:0 +msgid "title" +msgstr "nosaukums" + +#. module: account_sequence +#: sql_constraint:account.journal:0 +msgid "The name of the journal must be unique per company !" +msgstr "Žurnāla nosaukumam katrai kompānijai ir jābūt unikālam!" + +#. module: account_sequence +#: field:account.sequence.installer,prefix:0 +msgid "Prefix" +msgstr "Priedēklis" + +#. module: account_sequence +#: sql_constraint:account.journal:0 +msgid "The code of the journal must be unique per company !" +msgstr "Žurnāla kodam ir jābūt unikālam katram uzņēmumam!" + +#. module: account_sequence +#: constraint:account.move.line:0 +msgid "" +"You can not create move line on receivable/payable account without partner" +msgstr "" + +#. module: account_sequence +#: model:ir.model,name:account_sequence.model_account_journal +msgid "Journal" +msgstr "Žurnāls" + +#. module: account_sequence +#: view:account.sequence.installer:0 +msgid "You can enhance the Account Sequence Application by installing ." +msgstr "Ar šo moduli jūs varat uzlabot Konta Sekvences Aplikāciju." + +#. module: account_sequence +#: constraint:account.move.line:0 +msgid "You can not create move line on view account." +msgstr "Jūs nevarat izveidor grāmatojumu pārskata kontam." diff --git a/addons/account_voucher/account_voucher_view.xml b/addons/account_voucher/account_voucher_view.xml index 6f421f762a1..fd0e1a0c3c6 100644 --- a/addons/account_voucher/account_voucher_view.xml +++ b/addons/account_voucher/account_voucher_view.xml @@ -6,7 +6,7 @@ account.voucher tree - + diff --git a/addons/account_voucher/report/account_voucher_sales_receipt_view.xml b/addons/account_voucher/report/account_voucher_sales_receipt_view.xml index ad32978ddd8..33e69b54c8a 100644 --- a/addons/account_voucher/report/account_voucher_sales_receipt_view.xml +++ b/addons/account_voucher/report/account_voucher_sales_receipt_view.xml @@ -7,7 +7,7 @@ sale.receipt.report tree - + diff --git a/addons/auction/auction_view.xml b/addons/auction/auction_view.xml index 66cc9b3f743..bcfedacce77 100644 --- a/addons/auction/auction_view.xml +++ b/addons/auction/auction_view.xml @@ -160,7 +160,7 @@ - + @@ -177,7 +177,7 @@ - + @@ -272,7 +272,7 @@ tree - + diff --git a/addons/audittrail/audittrail_view.xml b/addons/audittrail/audittrail_view.xml index 6f6b461d1a6..7dd30a063ce 100644 --- a/addons/audittrail/audittrail_view.xml +++ b/addons/audittrail/audittrail_view.xml @@ -37,7 +37,7 @@ audittrail.rule tree - + diff --git a/addons/base_action_rule/__openerp__.py b/addons/base_action_rule/__openerp__.py index b6796f8958d..1170557efad 100644 --- a/addons/base_action_rule/__openerp__.py +++ b/addons/base_action_rule/__openerp__.py @@ -37,7 +37,7 @@ trigger an automatic reminder email. """, 'author': 'OpenERP SA', 'website': 'http://www.openerp.com', - 'depends': ['base'], + 'depends': ['base', 'mail'], 'init_xml': [ 'base_action_rule_data.xml' ], diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index 2db23e75893..805c35e4462 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -24,7 +24,7 @@ from tools.translate import _ from datetime import datetime from datetime import timedelta from tools.safe_eval import safe_eval -import pooler +import pooler import re import time import tools @@ -39,7 +39,7 @@ class base_action_rule(osv.osv): _name = 'base.action.rule' _description = 'Action Rules' - + def _state_get(self, cr, uid, context=None): """ Get State @param self: The object pointer @@ -55,7 +55,7 @@ class base_action_rule(osv.osv): @param uid: the current user’s ID for security checks, @param context: A standard dictionary for contextual values """ return [('', '')] - + def priority_get(self, cr, uid, context=None): """ Get Priority @param self: The object pointer @@ -65,57 +65,57 @@ class base_action_rule(osv.osv): return [('', '')] _columns = { - 'name': fields.char('Rule Name', size=64, required=True), - 'model_id': fields.many2one('ir.model', 'Object', required=True), - 'create_date': fields.datetime('Create Date', readonly=1), + 'name': fields.char('Rule Name', size=64, required=True), + 'model_id': fields.many2one('ir.model', 'Object', required=True), + 'create_date': fields.datetime('Create Date', readonly=1), 'active': fields.boolean('Active', help="If the active field is set to False,\ - it will allow you to hide the rule without removing it."), + it will allow you to hide the rule without removing it."), 'sequence': fields.integer('Sequence', help="Gives the sequence order \ -when displaying a list of rules."), +when displaying a list of rules."), 'trg_date_type': fields.selection([ - ('none', 'None'), - ('create', 'Creation Date'), - ('action_last', 'Last Action Date'), - ('date', 'Date'), - ('deadline', 'Deadline'), - ], 'Trigger Date', size=16), + ('none', 'None'), + ('create', 'Creation Date'), + ('action_last', 'Last Action Date'), + ('date', 'Date'), + ('deadline', 'Deadline'), + ], 'Trigger Date', size=16), 'trg_date_range': fields.integer('Delay after trigger date', \ help="Delay After Trigger Date,\ specifies you can put a negative number. If you need a delay before the \ -trigger date, like sending a reminder 15 minutes before a meeting."), +trigger date, like sending a reminder 15 minutes before a meeting."), 'trg_date_range_type': fields.selection([('minutes', 'Minutes'), ('hour', 'Hours'), \ - ('day', 'Days'), ('month', 'Months')], 'Delay type'), - 'trg_user_id': fields.many2one('res.users', 'Responsible'), - 'trg_partner_id': fields.many2one('res.partner', 'Partner'), - 'trg_partner_categ_id': fields.many2one('res.partner.category', 'Partner Category'), - 'trg_state_from': fields.selection(_state_get, 'State', size=16), - 'trg_state_to': fields.selection(_state_get, 'Button Pressed', size=16), + ('day', 'Days'), ('month', 'Months')], 'Delay type'), + 'trg_user_id': fields.many2one('res.users', 'Responsible'), + 'trg_partner_id': fields.many2one('res.partner', 'Partner'), + 'trg_partner_categ_id': fields.many2one('res.partner.category', 'Partner Category'), + 'trg_state_from': fields.selection(_state_get, 'State', size=16), + 'trg_state_to': fields.selection(_state_get, 'Button Pressed', size=16), - 'act_method': fields.char('Call Object Method', size=64), - 'act_user_id': fields.many2one('res.users', 'Set Responsible to'), - 'act_state': fields.selection(_state_get, 'Set State to', size=16), + 'act_method': fields.char('Call Object Method', size=64), + 'act_user_id': fields.many2one('res.users', 'Set Responsible to'), + 'act_state': fields.selection(_state_get, 'Set State to', size=16), 'act_email_cc': fields.char('Add Watchers (Cc)', size=250, help="\ These people will receive a copy of the future communication between partner \ -and users by email"), +and users by email"), 'act_remind_partner': fields.boolean('Remind Partner', help="Check \ -this if you want the rule to send a reminder by email to the partner."), +this if you want the rule to send a reminder by email to the partner."), 'act_remind_user': fields.boolean('Remind Responsible', help="Check \ -this if you want the rule to send a reminder by email to the user."), - 'act_reply_to': fields.char('Reply-To', size=64), - 'act_remind_attach': fields.boolean('Remind with Attachment', help="Check this if you want that all documents attached to the object be attached to the reminder email sent."), +this if you want the rule to send a reminder by email to the user."), + 'act_reply_to': fields.char('Reply-To', size=64), + 'act_remind_attach': fields.boolean('Remind with Attachment', help="Check this if you want that all documents attached to the object be attached to the reminder email sent."), 'act_mail_to_user': fields.boolean('Mail to Responsible', help="Check\ - this if you want the rule to send an email to the responsible person."), - 'act_mail_to_watchers': fields.boolean('Mail to Watchers (CC)', + this if you want the rule to send an email to the responsible person."), + 'act_mail_to_watchers': fields.boolean('Mail to Watchers (CC)', help="Check this if you want \ -the rule to mark CC(mail to any other person defined in actions)."), +the rule to mark CC(mail to any other person defined in actions)."), 'act_mail_to_email': fields.char('Mail to these Emails', size=128, \ - help="Email-id of the persons whom mail is to be sent"), - 'act_mail_body': fields.text('Mail body', help="Content of mail"), + help="Email-id of the persons whom mail is to be sent"), + 'act_mail_body': fields.text('Mail body', help="Content of mail"), 'regex_name': fields.char('Regex on Resource Name', size=128, help="Regular expression for matching name of the resource\ \ne.g.: 'urgent.*' will search for records having name starting with the string 'urgent'\ -\nNote: This is case sensitive search."), - 'server_action_id': fields.many2one('ir.actions.server', 'Server Action', help="Describes the action name.\neg:on which object which action to be taken on basis of which condition"), - 'filter_id':fields.many2one('ir.filters', 'Filter', required=False), +\nNote: This is case sensitive search."), + 'server_action_id': fields.many2one('ir.actions.server', 'Server Action', help="Describes the action name.\neg:on which object which action to be taken on basis of which condition"), + 'filter_id':fields.many2one('ir.filters', 'Filter', required=False), 'act_email_from' : fields.char('Email From', size=64, required=False, help="Use a python expression to specify the right field on which one than we will use for the 'From' field of the header"), 'act_email_to' : fields.char('Email To', size=64, required=False, @@ -124,17 +124,17 @@ the rule to mark CC(mail to any other person defined in actions)."), } _defaults = { - 'active': lambda *a: True, - 'trg_date_type': lambda *a: 'none', - 'trg_date_range_type': lambda *a: 'day', - 'act_mail_to_user': lambda *a: 0, - 'act_remind_partner': lambda *a: 0, - 'act_remind_user': lambda *a: 0, - 'act_mail_to_watchers': lambda *a: 0, + 'active': lambda *a: True, + 'trg_date_type': lambda *a: 'none', + 'trg_date_range_type': lambda *a: 'day', + 'act_mail_to_user': lambda *a: 0, + 'act_remind_partner': lambda *a: 0, + 'act_remind_user': lambda *a: 0, + 'act_mail_to_watchers': lambda *a: 0, } - + _order = 'sequence' - + def onchange_model_id(self, cr, uid, ids, name): #This is not a good solution as it will affect the domain only on onchange res = {'domain':{'filter_id':[]}} @@ -174,7 +174,7 @@ the rule to mark CC(mail to any other person defined in actions)."), self.pre_action(cr, uid, [new_id], model, context=context) return new_id return make_call_old - + def _write(self, old_write, model, context=None): if context is None: context = {} @@ -202,9 +202,9 @@ the rule to mark CC(mail to any other person defined in actions)."), return True def create(self, cr, uid, vals, context=None): res_id = super(base_action_rule, self).create(cr, uid, vals, context=context) - self._register_hook(cr, uid, [res_id], context=context) + self._register_hook(cr, uid, [res_id], context=context) return res_id - + def write(self, cr, uid, ids, vals, context=None): res = super(base_action_rule, self).write(cr, uid, ids, vals, context=context) self._register_hook(cr, uid, ids, context=context) @@ -268,22 +268,19 @@ the rule to mark CC(mail to any other person defined in actions)."), return body and tools.ustr(body) or '' def format_mail(self, obj, body): - """ Foramat Mail - @param self: The object pointer """ - data = { - 'object_id': obj.id, - 'object_subject': hasattr(obj, 'name') and obj.name or False, - 'object_date': hasattr(obj, 'date') and obj.date or False, - 'object_description': hasattr(obj, 'description') and obj.description or False, - 'object_user': hasattr(obj, 'user_id') and (obj.user_id and obj.user_id.name) or '/', + 'object_id': obj.id, + 'object_subject': hasattr(obj, 'name') and obj.name or False, + 'object_date': hasattr(obj, 'date') and obj.date or False, + 'object_description': hasattr(obj, 'description') and obj.description or False, + 'object_user': hasattr(obj, 'user_id') and (obj.user_id and obj.user_id.name) or '/', 'object_user_email': hasattr(obj, 'user_id') and (obj.user_id and \ obj.user_id.user_email) or '/', 'object_user_phone': hasattr(obj, 'partner_address_id') and (obj.partner_address_id and \ obj.partner_address_id.phone) or '/', - 'partner': hasattr(obj, 'partner_id') and (obj.partner_id and obj.partner_id.name) or '/', + 'partner': hasattr(obj, 'partner_id') and (obj.partner_id and obj.partner_id.name) or '/', 'partner_email': hasattr(obj, 'partner_address_id') and (obj.partner_address_id and\ - obj.partner_address_id.email) or '/', + obj.partner_address_id.email) or '/', } return self.format_body(body % data) @@ -302,6 +299,7 @@ the rule to mark CC(mail to any other person defined in actions)."), if context is None: context = {} + mail_message = self.pool.get('mail.message') body = self.format_mail(obj, body) if not emailfrom: if hasattr(obj, 'user_id') and obj.user_id and obj.user_id.user_email: @@ -311,9 +309,9 @@ the rule to mark CC(mail to any other person defined in actions)."), emailfrom = tools.ustr(emailfrom) reply_to = emailfrom if not emailfrom: - raise osv.except_osv(_('Error!'), + raise osv.except_osv(_('Error!'), _("No E-Mail ID Found for your Company address!")) - return tools.email_send(emailfrom, emails, name, body, reply_to=reply_to, openobject_id=str(obj.id)) + return mail_message.schedule_with_attach(cr, uid, emailfrom, emails, name, body, model='base.action.rule', reply_to=reply_to, res_id=obj.id) def do_check(self, cr, uid, action, obj, context=None): @@ -324,7 +322,7 @@ the rule to mark CC(mail to any other person defined in actions)."), @param context: A standard dictionary for contextual values """ if context is None: context = {} - ok = True + ok = True if action.filter_id: if action.model_id.model == action.filter_id.model_id: context.update(eval(action.filter_id.context)) @@ -479,7 +477,7 @@ the rule to mark CC(mail to any other person defined in actions)."), return True _constraints = [ - (_check_mail, 'Error: The mail is not well formated', ['act_mail_body']), + (_check_mail, 'Error: The mail is not well formated', ['act_mail_body']), ] base_action_rule() diff --git a/addons/base_calendar/__openerp__.py b/addons/base_calendar/__openerp__.py index 4281ec08d90..6edb978301f 100644 --- a/addons/base_calendar/__openerp__.py +++ b/addons/base_calendar/__openerp__.py @@ -22,7 +22,7 @@ { "name" : "Basic Calendar Functionality", "version" : "1.0", - "depends" : ["base"], + "depends" : ["base", "mail"], 'complexity': "easy", 'description': """ This is a full-featured calendar system. diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py index a128e18fcc1..e020984a647 100644 --- a/addons/base_calendar/base_calendar.py +++ b/addons/base_calendar/base_calendar.py @@ -484,6 +484,7 @@ property or property parameter."), context = {} company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.name + mail_message = self.pool.get('mail.message') for att in self.browse(cr, uid, ids, context=context): sign = att.sent_by_uid and att.sent_by_uid.signature or '' sign = '
'.join(sign and sign.split('\n') or []) @@ -510,14 +511,15 @@ property or property parameter."), body = html_invitation % body_vals if mail_to and email_from: attach = self.get_ics_file(cr, uid, res_obj, context=context) - tools.email_send( + mail_message.schedule_with_attach(cr, uid, email_from, mail_to, sub, body, - attach=attach and [('invitation.ics', attach)] or None, + attachments=attach and {'invitation.ics': attach} or None, subtype='html', - reply_to=email_from + reply_to=email_from, + context=context ) return True @@ -812,6 +814,7 @@ class calendar_alarm(osv.osv): """ if context is None: 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) @@ -893,11 +896,12 @@ From: for att in alarm.attendee_ids: mail_to.append(att.user_id.user_email) if mail_to: - tools.email_send( + mail_message.schedule_with_attach(cr, uid, tools.config.get('email_from', False), mail_to, sub, - body + body, + context=context ) if next_trigger_date: update_vals.update({'trigger_date': next_trigger_date}) @@ -1038,7 +1042,7 @@ rule or repeating pattern of time to exclude from the recurring rule."), 'user_id': fields.many2one('res.users', 'Responsible', states={'done': [('readonly', True)]}), 'organizer': fields.char("Organizer", size=256, states={'done': [('readonly', True)]}), # Map with Organizer Attribure of VEvent. 'organizer_id': fields.many2one('res.users', 'Organizer', states={'done': [('readonly', True)]}), - 'end_type' : fields.selection([('count', 'Fix amout of times'), ('end_date','End date')], 'Way to end reccurency'), + 'end_type' : fields.selection([('count', 'Number of repetitions'), ('end_date','End date')], 'Recurrence termination'), 'interval': fields.integer('Repeat every', help="Repeat every (Days/Week/Month/Year)"), 'count': fields.integer('Repeat', help="Repeat x times"), 'mo': fields.boolean('Mon'), @@ -1199,13 +1203,14 @@ rule or repeating pattern of time to exclude from the recurring rule."), return (datas.get('end_type') == 'count' and (';COUNT=' + str(datas.get('count'))) or '') +\ ((datas.get('end_date_new') and datas.get('end_type') == 'end_date' and (';UNTIL=' + datas.get('end_date_new'))) or '') - + freq=datas.get('rrule_type') if freq == 'none': return '' - interval_srting = datas.get('interval') and (';INTERVAL=' + str(datas.get('interval'))) or '' - return 'FREQ=' + freq.upper() + get_week_string(freq, datas) + interval_srting + get_end_date(datas) + get_month_string(freq, datas) + interval_srting = datas.get('interval') and (';INTERVAL=' + str(datas.get('interval'))) or '' + + return 'FREQ=' + freq.upper() + get_week_string(freq, datas) + interval_srting + get_end_date(datas) + get_month_string(freq, datas) def remove_virtual_id(self, ids): if isinstance(ids, (str, int)): @@ -1216,9 +1221,8 @@ rule or repeating pattern of time to exclude from the recurring rule."), for id in ids: res.append(base_calendar_id2real_id(id)) return res - - def search(self, cr, uid, args, offset=0, limit=0, order=None, - context=None, count=False): + + def search(self, cr, uid, args, offset=0, limit=0, order=None, context=None, count=False): args_without_date = [] start_date = False until_date = False @@ -1250,7 +1254,6 @@ rule or repeating pattern of time to exclude from the recurring rule."), else: return res - def get_edit_all(self, cr, uid, id, vals=None): """ return true if we have to edit all meeting from the same recurrent @@ -1277,7 +1280,8 @@ rule or repeating pattern of time to exclude from the recurring rule."), return date_start == split_id[1] except Exception: return True - + + def write(self, cr, uid, ids, vals, context=None, check=True, update_check=True): if context is None: context = {} @@ -1289,7 +1293,6 @@ rule or repeating pattern of time to exclude from the recurring rule."), res = False for event_id in select: real_event_id = base_calendar_id2real_id(event_id) - edit_all = self.get_edit_all(cr, uid, event_id, vals=vals) if edit_all: if self.need_to_update(event_id, vals): diff --git a/addons/base_crypt/i18n/sl.po b/addons/base_crypt/i18n/sl.po new file mode 100644 index 00000000000..d52c5723ba9 --- /dev/null +++ b/addons/base_crypt/i18n/sl.po @@ -0,0 +1,84 @@ +# Slovenian translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-01-11 11:14+0000\n" +"PO-Revision-Date: 2011-09-14 11:36+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Slovenian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-09-15 04:48+0000\n" +"X-Generator: Launchpad (build 13921)\n" + +#. module: base_crypt +#: sql_constraint:res.users:0 +msgid "You can not have two users with the same login !" +msgstr "Ne morete imeti dva uporabnika z istim prijavnim imenom!" + +#. module: base_crypt +#: model:ir.model,name:base_crypt.model_res_users +msgid "res.users" +msgstr "res.users" + +#. module: base_crypt +#: constraint:res.users:0 +msgid "The chosen company is not in the allowed companies for this user" +msgstr "Izbrano podjetje ni v dovoljenih podjetjih za tega uporabnika" + +#. module: base_crypt +#: code:addons/base_crypt/crypt.py:132 +#, python-format +msgid "Please specify the password !" +msgstr "Prosim, navedite geslo !" + +#. module: base_crypt +#: model:ir.module.module,shortdesc:base_crypt.module_meta_information +msgid "Base - Password Encryption" +msgstr "Osnovno - enkripcija gesla" + +#. module: base_crypt +#: code:addons/base_crypt/crypt.py:132 +#, python-format +msgid "Error" +msgstr "Napaka" + +#. module: base_crypt +#: model:ir.module.module,description:base_crypt.module_meta_information +msgid "" +"This module replaces the cleartext password in the database with a password " +"hash,\n" +"preventing anyone from reading the original password.\n" +"For your existing user base, the removal of the cleartext passwords occurs " +"the first time\n" +"a user logs into the database, after installing base_crypt.\n" +"After installing this module it won't be possible to recover a forgotten " +"password for your\n" +"users, the only solution is for an admin to set a new password.\n" +"\n" +"Note: installing this module does not mean you can ignore basic security " +"measures,\n" +"as the password is still transmitted unencrypted on the network (by the " +"client),\n" +"unless you are using a secure protocol such as XML-RPCS.\n" +" " +msgstr "" +"Ta modul nadomešča obliko besedilnega geslo v bazi podatkov z hash geslom,\n" +"ki preprečuje komurkoli branje izvirnega gesla.\n" +"Za vašo obstoječo bazo uporabnikov, odstranitev gesla v obliki besedila se " +"pojavi pri\n" +"prvi prijavi uporabnika v bazo podatkov, po namestitvi base_crypt.\n" +"Po namestitvi tega modula ne bo mogoče obnoviti pozabiljenega gesla za vaše\n" +"uporabnike, edina rešitev je, da admin nastavi novo geslo.\n" +"\n" +"Opomba: namestitev tega modula ne pomeni ignoriranja osnovnih varnostnih " +"ukrepov,\n" +"ker se geslo še vedno prenaša nešifrirano v omrežju (preko klienta),\n" +"razen če ne uporabljate varni protokol kot je XML-RPCS.\n" +" " diff --git a/addons/base_module_record/i18n/cs.po b/addons/base_module_record/i18n/cs.po index 5b707513588..ac9513d58e9 100644 --- a/addons/base_module_record/i18n/cs.po +++ b/addons/base_module_record/i18n/cs.po @@ -4,27 +4,28 @@ # msgid "" msgstr "" -"Project-Id-Version: OpenERP Server 5.0.4\n" +"Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2011-01-11 11:14+0000\n" -"PO-Revision-Date: 2009-02-03 06:26+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" +"PO-Revision-Date: 2011-09-09 10:24+0000\n" +"Last-Translator: Jiří Hajda \n" +"Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-09-05 05:09+0000\n" -"X-Generator: Launchpad (build 13830)\n" +"X-Launchpad-Export-Date: 2011-09-10 05:01+0000\n" +"X-Generator: Launchpad (build 13900)\n" +"X-Poedit-Language: Czech\n" #. module: base_module_record #: wizard_field:base_module_record.module_record_objects,info,category:0 msgid "Category" -msgstr "" +msgstr "Kategorie" #. module: base_module_record #: wizard_view:base_module_record.module_record_objects,save:0 msgid "Information" -msgstr "" +msgstr "Informace" #. module: base_module_record #: wizard_view:base_module_record.module_record_objects,save:0 @@ -33,54 +34,57 @@ msgid "" "publish it on OpenERP.com, in the 'Modules' section. You can do it through " "the website or using features of the 'base_module_publish' module." msgstr "" +"Pokud si myslíte, že by váš modul mohl zajímat další lidi, byli bychom rádi, " +"kdybyste jej zveřejnili na OpenERP.com v sekci 'Moduly'. Můžete to provést " +"přes webové stránky nebo pomocí funkcí modulu 'base_module_publish'." #. module: base_module_record #: wizard_button:base_module_record.module_record_data,info,end:0 #: wizard_button:base_module_record.module_record_data,save_yaml,end:0 msgid "End" -msgstr "" +msgstr "Ukončit" #. module: base_module_record #: wizard_view:base_module_record.module_record_data,init:0 #: wizard_view:base_module_record.module_record_objects,init:0 msgid "Choose objects to record" -msgstr "" +msgstr "Vyberte objekt pro zaznamenání" #. module: base_module_record #: wizard_field:base_module_record.module_record_objects,info,author:0 msgid "Author" -msgstr "" +msgstr "Autor" #. module: base_module_record #: wizard_field:base_module_record.module_record_objects,info,directory_name:0 msgid "Directory Name" -msgstr "" +msgstr "Jméno adresáře" #. module: base_module_record #: wizard_field:base_module_record.module_record_data,init,filter_cond:0 #: wizard_field:base_module_record.module_record_objects,init,filter_cond:0 msgid "Records only" -msgstr "" +msgstr "Piouze záznam" #. module: base_module_record #: model:ir.model,name:base_module_record.model_ir_module_record msgid "ir.module.record" -msgstr "" +msgstr "ir.module.record" #. module: base_module_record #: selection:base_module_record.module_record_objects,info,data_kind:0 msgid "Demo Data" -msgstr "" +msgstr "Ukázková data" #. module: base_module_record #: wizard_field:base_module_record.module_record_objects,save,module_filename:0 msgid "Filename" -msgstr "" +msgstr "Jméno souboru" #. module: base_module_record #: wizard_field:base_module_record.module_record_objects,info,version:0 msgid "Version" -msgstr "" +msgstr "Verze" #. module: base_module_record #: wizard_view:base_module_record.module_record_data,info:0 @@ -88,13 +92,13 @@ msgstr "" #: wizard_view:base_module_record.module_record_data,save_yaml:0 #: wizard_view:base_module_record.module_record_objects,init:0 msgid "Objects Recording" -msgstr "" +msgstr "Zaznamenávání objektů" #. module: base_module_record #: wizard_field:base_module_record.module_record_data,init,check_date:0 #: wizard_field:base_module_record.module_record_objects,init,check_date:0 msgid "Record from Date" -msgstr "" +msgstr "Záznam od data" #. module: base_module_record #: wizard_view:base_module_record.module_record_data,end:0 @@ -103,170 +107,170 @@ msgstr "" #: wizard_view:base_module_record.module_record_objects,save:0 #: wizard_view:base_module_record.module_record_objects,save_yaml:0 msgid "Module Recording" -msgstr "" +msgstr "Zaznamenávání modulu" #. module: base_module_record #: model:ir.actions.wizard,name:base_module_record.wizard_base_module_record_objects #: model:ir.ui.menu,name:base_module_record.menu_wizard_base_module_record_objects msgid "Export Customizations As a Module" -msgstr "" +msgstr "Exportovat vlastní úpravy jako modul" #. module: base_module_record #: wizard_view:base_module_record.module_record_objects,save:0 msgid "Thanks in advance for your contribution." -msgstr "" +msgstr "Předem díky za váše přispění." #. module: base_module_record #: help:base_module_record.module_record_data,init,objects:0 #: help:base_module_record.module_record_objects,init,objects:0 msgid "List of objects to be recorded" -msgstr "" +msgstr "Seznam objektů k záznamu" #. module: base_module_record #: wizard_field:base_module_record.module_record_objects,info,description:0 msgid "Full Description" -msgstr "" +msgstr "Plný popis" #. module: base_module_record #: wizard_field:base_module_record.module_record_objects,info,name:0 msgid "Module Name" -msgstr "" +msgstr "Jméno modulu" #. module: base_module_record #: wizard_field:base_module_record.module_record_data,init,objects:0 #: wizard_field:base_module_record.module_record_objects,init,objects:0 msgid "Objects" -msgstr "" +msgstr "Objekty" #. module: base_module_record #: wizard_field:base_module_record.module_record_objects,save,module_file:0 #: wizard_field:base_module_record.module_record_objects,save_yaml,yaml_file:0 msgid "Module .zip File" -msgstr "" +msgstr ".ZIP soubor modulu" #. module: base_module_record #: wizard_view:base_module_record.module_record_objects,save:0 msgid "Module successfully created !" -msgstr "" +msgstr "Modul úspěšně vytvořen !" #. module: base_module_record #: wizard_view:base_module_record.module_record_objects,save_yaml:0 msgid "YAML file successfully created !" -msgstr "" +msgstr "Soubor YAML úspěšně vytvořen !" #. module: base_module_record #: wizard_view:base_module_record.module_record_data,info:0 #: wizard_view:base_module_record.module_record_data,save_yaml:0 msgid "Result, paste this to your module's xml" -msgstr "" +msgstr "Výsledek, vložte jej do xml modulu" #. module: base_module_record #: selection:base_module_record.module_record_data,init,filter_cond:0 #: selection:base_module_record.module_record_objects,init,filter_cond:0 msgid "Created" -msgstr "" +msgstr "Vytvořeno" #. module: base_module_record #: wizard_view:base_module_record.module_record_data,end:0 #: wizard_view:base_module_record.module_record_objects,end:0 msgid "Thanks For using Module Recorder" -msgstr "" +msgstr "Díky za použití Záznamníku modulů" #. module: base_module_record #: wizard_field:base_module_record.module_record_objects,info,website:0 msgid "Documentation URL" -msgstr "" +msgstr "URL dokumentace" #. module: base_module_record #: selection:base_module_record.module_record_data,init,filter_cond:0 #: selection:base_module_record.module_record_objects,init,filter_cond:0 msgid "Modified" -msgstr "" +msgstr "Změněno" #. module: base_module_record #: wizard_button:base_module_record.module_record_data,init,record:0 #: wizard_button:base_module_record.module_record_objects,init,record:0 msgid "Record" -msgstr "" +msgstr "Zaznamenávat" #. module: base_module_record #: model:ir.module.module,shortdesc:base_module_record.module_meta_information msgid "Module Record" -msgstr "" +msgstr "Záznam modulu" #. module: base_module_record #: wizard_button:base_module_record.module_record_objects,info,save:0 msgid "Continue" -msgstr "" +msgstr "Pokračovat" #. module: base_module_record #: model:ir.actions.wizard,name:base_module_record.wizard_base_module_record_data #: model:ir.ui.menu,name:base_module_record.menu_wizard_base_module_record_data msgid "Export Customizations As Data File" -msgstr "" +msgstr "Exportovat vlastní úpravy jako datový soubor" #. module: base_module_record #: code:addons/base_module_record/wizard/base_module_save.py:129 #, python-format msgid "Error" -msgstr "" +msgstr "Chyba" #. module: base_module_record #: selection:base_module_record.module_record_objects,info,data_kind:0 msgid "Normal Data" -msgstr "" +msgstr "Běžná data" #. module: base_module_record #: wizard_button:base_module_record.module_record_data,end,end:0 #: wizard_button:base_module_record.module_record_objects,end,end:0 msgid "OK" -msgstr "" +msgstr "OK" #. module: base_module_record #: model:ir.ui.menu,name:base_module_record.menu_wizard_base_mod_rec msgid "Module Creation" -msgstr "" +msgstr "Vytvoření modulu" #. module: base_module_record #: wizard_field:base_module_record.module_record_objects,info,data_kind:0 msgid "Type of Data" -msgstr "" +msgstr "Typ dat" #. module: base_module_record #: wizard_view:base_module_record.module_record_objects,info:0 msgid "Module Information" -msgstr "" +msgstr "Informace modulu" #. module: base_module_record #: wizard_field:base_module_record.module_record_data,init,info_yaml:0 #: wizard_field:base_module_record.module_record_objects,init,info_yaml:0 msgid "YAML" -msgstr "" +msgstr "YAML" #. module: base_module_record #: wizard_field:base_module_record.module_record_data,info,res_text:0 #: wizard_field:base_module_record.module_record_data,save_yaml,res_text:0 msgid "Result" -msgstr "" +msgstr "Výsledek" #. module: base_module_record #: wizard_button:base_module_record.module_record_data,init,end:0 #: wizard_button:base_module_record.module_record_objects,info,end:0 #: wizard_button:base_module_record.module_record_objects,init,end:0 msgid "Cancel" -msgstr "" +msgstr "Zrušit" #. module: base_module_record #: wizard_button:base_module_record.module_record_objects,save,end:0 #: wizard_button:base_module_record.module_record_objects,save_yaml,end:0 msgid "Close" -msgstr "" +msgstr "Uzavřít" #. module: base_module_record #: selection:base_module_record.module_record_data,init,filter_cond:0 #: selection:base_module_record.module_record_objects,init,filter_cond:0 msgid "Created & Modified" -msgstr "" +msgstr "Vytvořeno & upraveno" #. module: base_module_record #: model:ir.module.module,description:base_module_record.module_meta_information @@ -292,3 +296,25 @@ msgid "" "module.\n" " " msgstr "" +"\n" +"Tento modul vám umožňuje vytvořit nový modul bez jakéhokoliv vývoje.\n" +"Zaznamenává všechny operace nad objekty během relace zaznamenávání a\n" +"vytváří .ZIP modul. Díky tomu můžete vytvořit váš vlastní modul přímo z\n" +"klienta OpenERP.\n" +"\n" +"Tato verze pracuje pro vytváření a aktualizaci stávajících záznamů. " +"Přepočítává\n" +"závislosti a propojuje všechny datové typy pomůcek (many2one, many2many, " +"...).\n" +"Podporuje také pracovní toky a demonstrační/aktualziační data.\n" +"\n" +"Měl by vám pomoci jednoduše vytvářet znovu použitelné a zveřejnitelné " +"moduly\n" +"pro vlastní nastavení a demonstrační/testovací data.\n" +"\n" +"Jak jej použít:\n" +"Spusťte průvodce Správa/Přizpůsobení/Vytváření modulů/Exportovat vlastní " +"úpravy jako modul.\n" +"Vyberte častoé kritéria pro záznam a objekty, které mají být zaznamenány a " +"modul záznamu.\n" +" " diff --git a/addons/base_setup/base_setup_views.xml b/addons/base_setup/base_setup_views.xml index 0e1efb40b32..cb00ac3eb5b 100644 --- a/addons/base_setup/base_setup_views.xml +++ b/addons/base_setup/base_setup_views.xml @@ -79,7 +79,7 @@ Start Configuration code - + diff --git a/addons/base_vat/base_vat.py b/addons/base_vat/base_vat.py index 6393c0a6182..58e5670b589 100644 --- a/addons/base_vat/base_vat.py +++ b/addons/base_vat/base_vat.py @@ -42,7 +42,7 @@ _ref_vat = { 'pt': 'PT123456789', 'ro': 'RO1234567897', 'se': 'SE123456789701', 'si': 'SI12345679', 'sk': 'SK0012345675', 'el': 'EL12345670', - 'mx': 'MXABCD831230T1B', + 'mx': 'MXABC123456T1B', 'no': 'NO123456785' } @@ -1104,7 +1104,33 @@ class res_partner(osv.osv): #Valid format and valid date return True - + + + # check_vat_no contributed by Rolv Råen (adEgo) + def check_vat_no(self, vat): + ''' + Check Norway VAT number.See http://www.brreg.no/english/coordination/number.html + ''' + if len(vat) != 9: + return False + try: + int(vat) + except ValueError: + return False + + sum = (3 * int(vat[0])) + (2 * int(vat[1])) + \ + (7 * int(vat[2])) + (6 * int(vat[3])) + \ + (5 * int(vat[4])) + (4 * int(vat[5])) + \ + (3 * int(vat[6])) + (2 * int(vat[7])) + + check = 11 -(sum % 11) + if check == 11: + check = 0 + if check == 10: + # 10 is not a valid check digit for an organization number + return False + return check == int(vat[8]) + res_partner() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/__openerp__.py b/addons/crm/__openerp__.py index 5e812207921..c2dd5027b71 100644 --- a/addons/crm/__openerp__.py +++ b/addons/crm/__openerp__.py @@ -59,7 +59,7 @@ Creates a dashboard for CRM that includes: 'base_action_rule', 'base_setup', 'process', - 'mail_gateway', + 'mail', 'base_calendar', 'resource', 'board' @@ -85,7 +85,6 @@ Creates a dashboard for CRM that includes: 'wizard/crm_opportunity_to_phonecall_view.xml', 'wizard/crm_partner_to_opportunity_view.xml', - 'wizard/crm_send_email_view.xml', 'wizard/crm_add_note_view.xml', 'wizard/crm_merge_opportunities_view.xml', diff --git a/addons/crm/crm.py b/addons/crm/crm.py index d19a8b61e00..c7bc461fa1f 100644 --- a/addons/crm/crm.py +++ b/addons/crm/crm.py @@ -116,39 +116,12 @@ class crm_case_section(osv.osv): ('code_uniq', 'unique (code)', 'The code of the sales team must be unique !') ] - def _check_recursion(self, cr, uid, ids, context=None): - - """ - Checks for recursion level for sales team - @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 Sales team ids - """ - level = 100 - - while len(ids): - cr.execute('select distinct parent_id from crm_case_section where id IN %s', (tuple(ids),)) - ids = filter(None, map(lambda x: x[0], cr.fetchall())) - if not level: - return False - level -= 1 - - return True - _constraints = [ - (_check_recursion, 'Error ! You cannot create recursive Sales team.', ['parent_id']) + (osv.osv._check_recursion, 'Error ! You cannot create recursive Sales team.', ['parent_id']) ] def name_get(self, cr, uid, ids, context=None): - """Overrides orm name_get method - @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 sales team ids - """ - if context is None: - context = {} + """Overrides orm name_get method""" if not isinstance(ids, list) : ids = [ids] res = [] @@ -174,13 +147,7 @@ class crm_case_categ(osv.osv): } def _find_object_id(self, cr, uid, context=None): - """Finds id for case object - @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 context: A standard dictionary for contextual values - """ - + """Finds id for case object""" object_id = context and context.get('object_id', False) or False ids = self.pool.get('ir.model').search(cr, uid, [('model', '=', object_id)]) return ids and ids[0] @@ -217,6 +184,9 @@ class crm_base(object): 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): @@ -228,6 +198,8 @@ class crm_base(object): 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): @@ -255,9 +227,9 @@ class crm_base(object): 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 - @email: Partner's email ID + :param ids: List of case IDs + :param add: Id of Partner's address + :param email: Partner's email ID """ if not add: return {'value': {'email_from': False}} @@ -269,9 +241,9 @@ class crm_base(object): 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 - @email: Partner's email ID + :param ids: List of case IDs + :param part: Partner's id + :param email: Partner's email ID """ data={} if part: @@ -282,6 +254,7 @@ class crm_base(object): def case_open(self, cr, uid, ids, *args): """Opens Case + :param ids: List of case Ids """ cases = self.browse(cr, uid, ids) for case in cases: @@ -295,7 +268,7 @@ class crm_base(object): def case_close(self, cr, uid, ids, *args): """Closes Case - @param ids: List of case Ids + :param ids: List of case Ids """ cases = self.browse(cr, uid, ids) cases[0].state # to fill the browse record cache @@ -306,7 +279,7 @@ class crm_base(object): def case_cancel(self, cr, uid, ids, *args): """Cancels Case - @param ids: List of case Ids + :param ids: List of case Ids """ cases = self.browse(cr, uid, ids) cases[0].state # to fill the browse record cache @@ -317,6 +290,7 @@ class crm_base(object): def case_pending(self, cr, uid, ids, *args): """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 @@ -326,13 +300,14 @@ class crm_base(object): def case_reset(self, cr, uid, ids, *args): """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._action(cr, uid, cases, 'draft') return True - + def _action(self, cr, uid, cases, state_to, scrit=None, context=None): if context is None: context = {} @@ -357,13 +332,14 @@ class crm_case(crm_base): 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 - self.write(cr, uid, ids, value, context=context) + return self.write(cr, uid, ids, value, context=context) def stage_change(self, cr, uid, ids, op, order, context=None): if context is None: @@ -377,25 +353,25 @@ class crm_case(crm_base): section_id = case.section_id.id next_stage_id = self.stage_find(cr, uid, section_id, [('sequence',op,seq)],order) if next_stage_id: - self.stage_set(cr, uid, [case.id], next_stage_id, context=context) + 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 """ - self.stage_change(cr, uid, ids, '>','sequence', context) + 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 """ - self.stage_change(cr, uid, ids, '<', 'sequence desc', context) + return self.stage_change(cr, uid, ids, '<', 'sequence desc', context) def copy(self, cr, uid, id, default=None, context=None): - """ Overrides orm copy method. - """ - if context is None: - context = {} + """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 = {} @@ -407,19 +383,11 @@ class crm_case(crm_base): default.update({ 'date_open': False }) return super(osv.osv, self).copy(cr, uid, id, default, context=context) - def _history(self, cr, uid, cases, keyword, history=False, subject=None, email=False, details=None, email_from=False, message_id=False, attach=[], context=None): - mailgate_pool = self.pool.get('mailgate.thread') - return mailgate_pool.history(cr, uid, cases, keyword, history=history,\ - subject=subject, email=email, \ - details=details, email_from=email_from,\ - message_id=message_id, attach=attach, \ - context=context) def case_open(self, cr, uid, ids, *args): - """Opens Case - """ + """Opens Case""" cases = self.browse(cr, uid, ids) - self._history(cr, uid, cases, _('Open')) + self.message_append(cr, uid, cases, _('Open')) for case in cases: data = {'state': 'open', 'active': True } if not case.user_id: @@ -429,11 +397,10 @@ class crm_case(crm_base): return True def case_close(self, cr, uid, ids, *args): - """Closes Case - """ + """Closes Case""" cases = self.browse(cr, uid, ids) cases[0].state # to fill the browse record cache - self._history(cr, uid, cases, _('Close')) + self.message_append(cr, uid, cases, _('Close')) self.write(cr, uid, ids, {'state': 'done', 'date_closed': time.strftime('%Y-%m-%d %H:%M:%S'), }) @@ -444,12 +411,10 @@ class crm_case(crm_base): return True def case_escalate(self, cr, uid, ids, *args): - """Escalates case to top level - """ + """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: @@ -459,16 +424,15 @@ class crm_case(crm_base): 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) cases = self.browse(cr, uid, ids) - self._history(cr, uid, cases, _('Escalate')) + self.message_append(cr, uid, cases, _('Escalate')) self._action(cr, uid, cases, 'escalate') return True def case_cancel(self, cr, uid, ids, *args): - """Cancels Case - """ + """Cancels Case""" cases = self.browse(cr, uid, ids) cases[0].state # to fill the browse record cache - self._history(cr, uid, cases, _('Cancel')) + self.message_append(cr, uid, cases, _('Cancel')) self.write(cr, uid, ids, {'state': 'cancel', 'active': True}) self._action(cr, uid, cases, 'cancel') @@ -478,56 +442,37 @@ class crm_case(crm_base): return True def case_pending(self, cr, uid, ids, *args): - """Marks case as pending - """ + """Marks case as pending""" cases = self.browse(cr, uid, ids) cases[0].state # to fill the browse record cache - self._history(cr, uid, cases, _('Pending')) + self.message_append(cr, uid, cases, _('Pending')) self.write(cr, uid, ids, {'state': 'pending', 'active': True}) self._action(cr, uid, cases, 'pending') return True def case_reset(self, cr, uid, ids, *args): - """Resets case as draft - """ - state = 'draft' + """Resets case as draft""" + state = 'draft' if 'crm.phonecall' in args: - state = 'open' + state = 'open' cases = self.browse(cr, uid, ids) cases[0].state # to fill the browse record cache - self._history(cr, uid, cases, _('Draft')) + self.message_append(cr, uid, cases, _('Draft')) self.write(cr, uid, ids, {'state': state, 'active': True}) self._action(cr, uid, cases, state) return True def remind_partner(self, cr, uid, ids, context=None, attach=False): - - """ - @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 Remind Partner's IDs - @param context: A standard dictionary for contextual values - - """ - return self.remind_user(cr, uid, ids, context, attach, destination=False) def remind_user(self, cr, uid, ids, context=None, attach=False, destination=True): - """ - @param self: The object pointer - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param ids: List of case's IDs to remind - @param context: A standard dictionary for contextual values - """ + 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: @@ -548,37 +493,31 @@ class crm_case(crm_base): body = self.format_body(body) - attach_to_send = None + 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 = map(lambda x: (x['datas_fname'], base64.decodestring(x['datas'])), attach_to_send) + 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,) - tools.email_send( + # Send an email + subject = "Reminder: [%s] %s" % (str(case.id), case.name, ) + mail_message.schedule_with_attach(cr, uid, src, [dest], subject, body, - reply_to=case.section_id.reply_to or '', - openobject_id=str(case.id), - attach=attach_to_send + model='crm.case', + reply_to=case.section_id.reply_to, + res_id=case.id, + attachments=attach_to_send, + context=context ) - self._history(cr, uid, [case], _('Send'), history=True, subject=subject, email=dest, details=body, email_from=src) - 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 - - @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 context: A standard dictionary for contextual values + """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) \ @@ -597,9 +536,7 @@ class crm_case(crm_base): def format_mail(self, obj, body): return self.pool.get('base.action.rule').format_mail(obj, body) - def message_followers(self, cr, uid, ids, context=None): - """ Get a list of emails of the people following this thread - """ + def message_thread_followers(self, cr, uid, ids, context=None): res = {} for case in self.browse(cr, uid, ids, context=context): l=[] @@ -611,12 +548,7 @@ class crm_case(crm_base): return res def _links_get(self, cr, uid, context=None): - """Gets links value for reference field - @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 context: A standard dictionary for contextual values - """ + """Gets links value for reference field""" obj = self.pool.get('res.request.link') ids = obj.search(cr, uid, []) res = obj.read(cr, uid, ids, ['object', 'name'], context) @@ -632,10 +564,8 @@ class users(osv.osv): def create(self, cr, uid, vals, context=None): res = super(users, self).create(cr, uid, vals, context=context) section_obj=self.pool.get('crm.case.section') - - if vals.get('context_section_id', False): + if vals.get('context_section_id'): section_obj.write(cr, uid, [vals['context_section_id']], {'member_ids':[(4, res)]}, context) return res users() - diff --git a/addons/crm/crm_action_rule.py b/addons/crm/crm_action_rule.py index 31dcc0be56a..559d257820a 100644 --- a/addons/crm/crm_action_rule.py +++ b/addons/crm/crm_action_rule.py @@ -40,12 +40,12 @@ class base_action_rule(osv.osv): 'regex_history' : fields.char('Regular Expression on Case History', size=128), 'act_section_id': fields.many2one('crm.case.section', 'Set Team to'), 'act_categ_id': fields.many2one('crm.case.categ', 'Set Category to'), - 'act_mail_to_partner': fields.boolean('Mail to Partner', help="Check \ -this if you want the rule to send an email to the partner."), + 'act_mail_to_partner': fields.boolean('Mail to Partner', + help="Check this if you want the rule to send an email to the partner."), } - def email_send(self, cr, uid, obj, emails, body, emailfrom=tools.config.get('email_from', False), context=None): + mail_message = self.pool.get('mail.message') body = self.format_mail(obj, body) if not emailfrom: if hasattr(obj, 'user_id') and obj.user_id and obj.user_id.user_email: @@ -58,15 +58,10 @@ this if you want the rule to send an email to the partner."), else: reply_to = emailfrom if not emailfrom: - raise osv.except_osv(_('Error!'), - _("No E-Mail ID Found for your Company address!")) - return tools.email_send(emailfrom, emails, name, body, reply_to=reply_to, openobject_id=str(obj.id)) + raise osv.except_osv(_('Error!'), _("No E-Mail Found for your Company address!")) + return mail_message.schedule_with_attach(cr, uid, emailfrom, emails, name, body, model='base.action.rule', reply_to=reply_to, res_id=obj.id) def do_check(self, cr, uid, action, obj, context=None): - """ @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 context: A standard dictionary for contextual values""" ok = super(base_action_rule, self).do_check(cr, uid, action, obj, context=context) if hasattr(obj, 'section_id'): @@ -74,9 +69,8 @@ this if you want the rule to send an email to the partner."), if hasattr(obj, 'categ_id'): ok = ok and (not action.trg_categ_id or action.trg_categ_id.id == obj.categ_id.id) - #Cheking for history + #Cheking for history regex = action.regex_history - result_history = True if regex: res = False ptrn = re.compile(str(regex)) @@ -85,23 +79,17 @@ this if you want the rule to send an email to the partner."), if _result: res = True break - result_history = res - ok = ok and (not regex or result_history) + ok = ok and res - res_count = True if action.trg_max_history: res_count = False - history_ids = filter(lambda x: x.history, obj.message_ids) + history_ids = filter(lambda x: x.email_from, obj.message_ids) if len(history_ids) <= action.trg_max_history: res_count = True - ok = ok and res_count + ok = ok and res_count return ok def do_action(self, cr, uid, action, model_obj, obj, context=None): - """ @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 context: A standard dictionary for contextual values """ res = super(base_action_rule, self).do_action(cr, uid, action, model_obj, obj, context=context) write = {} @@ -118,8 +106,8 @@ this if you want the rule to send an email to the partner."), write['email_cc'] = obj.act_email_cc # Put state change by rule in communication history - if hasattr(obj, 'state') and action.act_state: - model_obj._history(cr, uid, [obj], _(action.act_state)) + if hasattr(obj, 'state') and hasattr(obj, 'message_append') and action.act_state: + model_obj.message_append(cr, uid, [obj], _(action.act_state)) model_obj.write(cr, uid, [obj.id], write, context) emails = [] @@ -134,22 +122,12 @@ this if you want the rule to send an email to the partner."), def state_get(self, cr, uid, context=None): - """Gets available states for crm - @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 context: A standard dictionary for contextual values """ + """Gets available states for crm""" res = super(base_action_rule, self).state_get(cr, uid, context=context) return res + crm.AVAILABLE_STATES def priority_get(self, cr, uid, context=None): - """@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 context: A standard dictionary for contextual values """ res = super(base_action_rule, self).priority_get(cr, uid, context=context) return res + crm.AVAILABLE_PRIORITIES -base_action_rule() - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index fae37ed54a4..d09e0bf8ba5 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -40,7 +40,15 @@ class crm_lead(crm_case, osv.osv): _name = "crm.lead" _description = "Lead/Opportunity" _order = "priority,date_action,id desc" - _inherit = ['mailgate.thread','res.partner.address'] + _inherit = ['mail.thread','res.partner.address'] + + # overridden because res.partner.address has an inconvenient name_get, + # especially if base_contact is installed. + def name_get(self, cr, user, ids, context=None): + if isinstance(ids, (int, long)): + ids = [ids] + return [(r['id'], tools.ustr(r[self._rec_name])) + for r in self.read(cr, user, ids, [self._rec_name], context)] def _compute_day(self, cr, uid, ids, fields, args, context=None): """ @@ -101,8 +109,8 @@ class crm_lead(crm_case, osv.osv): def _history_search(self, cr, uid, obj, name, args, context=None): res = [] - msg_obj = self.pool.get('mailgate.message') - message_ids = msg_obj.search(cr, uid, [('history','=',True), ('name', args[0][1], args[0][2])], context=context) + msg_obj = self.pool.get('mail.message') + message_ids = msg_obj.search(cr, uid, [('email_from','!=',False), ('subject', args[0][1], args[0][2])], context=context) lead_ids = self.search(cr, uid, [('message_ids', 'in', message_ids)], context=context) if lead_ids: @@ -115,8 +123,8 @@ class crm_lead(crm_case, osv.osv): for obj in self.browse(cr, uid, ids, context=context): res[obj.id] = '' for msg in obj.message_ids: - if msg.history: - res[obj.id] = msg.name + if msg.email_from: + res[obj.id] = msg.subject break return res @@ -163,7 +171,7 @@ class crm_lead(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('mailgate.message', 'res_id', 'Messages', domain=[('model','=',_name)]), + 'message_ids': fields.one2many('mail.message', 'res_id', 'Messages', domain=[('model','=',_name)]), 'subjects': fields.function(_get_email_subject, fnct_search=_history_search, string='Subject of Email', type='char', size=64), @@ -178,6 +186,12 @@ class crm_lead(crm_case, osv.osv): 'date_action': fields.date('Next Action Date'), '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_address_id', 'name', type='char', string='Partner Contact Name', 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 = { @@ -189,6 +203,7 @@ class crm_lead(crm_case, osv.osv): 'section_id': crm_case._get_section, '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, #'stage_id': _get_stage_id, } @@ -304,6 +319,21 @@ class crm_lead(crm_case, osv.osv): self.log(cr, uid, l.id, message) return res + def set_priority(self, cr, uid, ids, priority): + """Set lead priority + """ + return self.write(cr, uid, ids, {'priority' : priority}) + + def set_high_priority(self, cr, uid, ids, *args): + """Set lead priority to high + """ + return self.set_priority(cr, uid, ids, '1') + + def set_normal_priority(self, cr, uid, ids, *args): + """Set lead priority to normal + """ + return self.set_priority(cr, uid, ids, '3') + def convert_opportunity(self, cr, uid, ids, context=None): """ Precomputation for converting lead to opportunity """ @@ -335,16 +365,14 @@ class crm_lead(crm_case, osv.osv): } return value - def message_new(self, cr, uid, msg, context=None): - """ Automatically calls when new email message arrives - """ - mailgate_pool = self.pool.get('email.server.tools') + def message_new(self, cr, uid, msg, custom_values=None, context=None): + """Automatically calls when new email message arrives""" + res_id = super(crm_lead, self).message_new(cr, uid, msg, custom_values=custom_values, context=context) + subject = msg.get('subject') or _("No Subject") + body = msg.get('body_text') - subject = msg.get('subject') or _("No Subject") - body = msg.get('body') msg_from = msg.get('from') priority = msg.get('priority') - vals = { 'name': subject, 'email_from': msg_from, @@ -352,45 +380,27 @@ class crm_lead(crm_case, osv.osv): 'description': body, 'user_id': False, } - if msg.get('priority', False): + if priority: vals['priority'] = priority + vals.update(self.message_partner_by_email(cr, uid, msg.get('from', False))) + self.write(cr, uid, [res_id], vals, context) + return res_id - res = mailgate_pool.get_partner(cr, uid, msg.get('from') or msg.get_unixfrom()) - if res: - vals.update(res) - - res = self.create(cr, uid, vals, context) - attachents = msg.get('attachments', []) - for attactment in attachents or []: - data_attach = { - 'name': attactment, - 'datas':binascii.b2a_base64(str(attachents.get(attactment))), - 'datas_fname': attactment, - 'description': 'Mail attachment', - 'res_model': self._name, - 'res_id': res, - } - self.pool.get('ir.attachment').create(cr, uid, data_attach) - - return res - - def message_update(self, cr, uid, ids, vals={}, msg="", default_act='pending', context=None): - """ - @param ids: List of update mail’s IDs - """ + def message_update(self, cr, uid, ids, msg, vals={}, default_act='pending', context=None): if isinstance(ids, (str, int, long)): ids = [ids] + super(crm_lead, self).message_update(cr, uid, ids, msg, context=context) + if msg.get('priority') in dict(crm.AVAILABLE_PRIORITIES): vals['priority'] = msg.get('priority') - maps = { 'cost':'planned_cost', 'revenue': 'planned_revenue', 'probability':'probability' } vls = {} - for line in msg['body'].split('\n'): + for line in msg['body_text'].split('\n'): line = line.strip() res = tools.misc.command_re.match(line) if res and maps.get(res.group(1).lower()): @@ -408,12 +418,6 @@ class crm_lead(crm_case, osv.osv): res = self.write(cr, uid, [case.id], values, context=context) return res - def msg_send(self, cr, uid, id, *args, **argv): - """ Send The Message - @param ids: List of email’s IDs - """ - return True - def action_makeMeeting(self, cr, uid, ids, context=None): """ This opens Meeting's calendar view to schedule meeting on current Opportunity @@ -459,24 +463,6 @@ class crm_lead(crm_case, osv.osv): } return value - 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 'stage_id' in vals and vals['stage_id']: - stage_obj = self.pool.get('crm.case.stage').browse(cr, uid, vals['stage_id'], context=context) - self.history(cr, uid, ids, _("Changed Stage to: %s") % stage_obj.name, details=_("Changed Stage to: %s") % stage_obj.name) - message='' - for case in self.browse(cr, uid, ids, context=context): - if case.type == 'lead' or context.get('stage_type',False)=='lead': - message = _("The stage of lead '%s' has been changed to '%s'.") % (case.name, stage_obj.name) - elif case.type == 'opportunity': - message = _("The stage of opportunity '%s' has been changed to '%s'.") % (case.name, stage_obj.name) - self.log(cr, uid, case.id, message) - return super(crm_lead,self).write(cr, uid, ids, vals, context) def unlink(self, cr, uid, ids, context=None): for lead in self.browse(cr, uid, ids, context): @@ -486,6 +472,26 @@ class crm_lead(crm_case, osv.osv): 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 'stage_id' in vals and vals['stage_id']: + stage_obj = self.pool.get('crm.case.stage').browse(cr, uid, vals['stage_id'], context=context) + text = _("Changed Stage to: %s") % stage_obj.name + self.message_append(cr, uid, ids, text, body_text=text, context=context) + message='' + for case in self.browse(cr, uid, ids, context=context): + if case.type == 'lead' or context.get('stage_type',False)=='lead': + message = _("The stage of lead '%s' has been changed to '%s'.") % (case.name, stage_obj.name) + elif case.type == 'opportunity': + message = _("The stage of opportunity '%s' has been changed to '%s'.") % (case.name, stage_obj.name) + self.log(cr, uid, case.id, message) + return super(crm_lead,self).write(cr, uid, ids, vals, context) + crm_lead() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml index 0ad576fd470..8811cea8ac4 100644 --- a/addons/crm/crm_lead_view.xml +++ b/addons/crm/crm_lead_view.xml @@ -97,10 +97,10 @@ - + + + + + + + + + + + + + + + + + + +