diff --git a/addons/account/i18n/ru.po b/addons/account/i18n/ru.po index 6e2fd083b54..c666e4dcf2e 100644 --- a/addons/account/i18n/ru.po +++ b/addons/account/i18n/ru.po @@ -7,14 +7,14 @@ msgstr "" "Project-Id-Version: OpenERP Server 6.0dev\n" "Report-Msgid-Bugs-To: support@openerp.com\n" "POT-Creation-Date: 2012-12-21 17:04+0000\n" -"PO-Revision-Date: 2013-06-27 14:01+0000\n" +"PO-Revision-Date: 2013-07-02 06:32+0000\n" "Last-Translator: Chertykov Denis \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-06-28 05:42+0000\n" -"X-Generator: Launchpad (build 16681)\n" +"X-Launchpad-Export-Date: 2013-07-03 05:14+0000\n" +"X-Generator: Launchpad (build 16692)\n" #. module: account #: model:process.transition,name:account.process_transition_supplierreconcilepaid0 @@ -4707,7 +4707,7 @@ msgstr "Месяц" #: code:addons/account/account.py:668 #, python-format msgid "You cannot change the code of account which contains journal items!" -msgstr "" +msgstr "Нальзя изменить код счета который содержит проводки!" #. module: account #: field:account.config.settings,purchase_sequence_prefix:0 @@ -4826,7 +4826,7 @@ msgstr "Отметьте, если хотите выводить счета с 0 #. module: account #: field:account.move.reconcile,opening_reconciliation:0 msgid "Opening Entries Reconciliation" -msgstr "" +msgstr "Сверка проводок открытия" #. module: account #. openerp-web diff --git a/addons/account/report/account_aged_partner_balance.py b/addons/account/report/account_aged_partner_balance.py index 897b8366b7a..3b000e40592 100644 --- a/addons/account/report/account_aged_partner_balance.py +++ b/addons/account/report/account_aged_partner_balance.py @@ -366,12 +366,13 @@ class aged_trial_report(report_sxw.rml_parse, common_report_header): return period or 0.0 def _get_partners(self,data): + # TODO: deprecated, to remove in trunk if data['form']['result_selection'] == 'customer': - return 'Receivable Accounts' + return self._translate('Receivable Accounts') elif data['form']['result_selection'] == 'supplier': - return 'Payable Accounts' + return self._translate('Payable Accounts') elif data['form']['result_selection'] == 'customer_supplier': - return 'Receivable and Payable Accounts' + return self._translate('Receivable and Payable Accounts') return '' report_sxw.report_sxw('report.account.aged_trial_balance', 'res.partner', diff --git a/addons/account/report/account_aged_partner_balance.rml b/addons/account/report/account_aged_partner_balance.rml index fb79ab0d199..5b5404e9c86 100644 --- a/addons/account/report/account_aged_partner_balance.rml +++ b/addons/account/report/account_aged_partner_balance.rml @@ -147,7 +147,9 @@ [[ data['form']['period_length'] ]] - [[ get_partners(data) ]] + Receivable Accounts[[ data['form']['result_selection'] == 'customer' or removeParentNode('para') ]] + Payable Accounts[[ data['form']['result_selection'] == 'supplier' or removeParentNode('para') ]] + Receivable and Payable Accounts[[ data['form']['result_selection'] == 'customer_supplier' or removeParentNode('para') ]] [[ data['form']['direction_selection'] ]] @@ -166,7 +168,8 @@ Partners - [[ data['form']['direction_selection'] == 'future' and 'Due' or 'Not due' ]] + Due[[ data['form']['direction_selection'] == 'future' and ' ' or removeParentNode('para') ]] + Not due[[ data['form']['direction_selection'] != 'future' and ' ' or removeParentNode('para') ]] [[ data['form']['4']['name'] ]] diff --git a/addons/account/report/account_balance.rml b/addons/account/report/account_balance.rml index 88980a9cd97..6ddfc238bff 100644 --- a/addons/account/report/account_balance.rml +++ b/addons/account/report/account_balance.rml @@ -211,8 +211,10 @@ - [[ data['model']=='account.account' and 'Company'or removeParentNode('para') ]] - [[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]] + + Company[[ data['model']=='account.account' and ' ' or removeParentNode('para') ]] + Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]] + Fiscal Year @@ -233,7 +235,11 @@ [[ get_fiscalyear(data) or '' ]] - [[ (data['form']['display_account']=='all' and 'All') or (data['form']['display_account']=='movement' and 'With movements') or 'With balance is not equal to 0']] + + All[[ data['form']['display_account']=='all' and ' ' or removeParentNode('para') ]] + With movements[[ data['form']['display_account']=='movement' and ' ' or removeParentNode('para') ]] + With balance is not equal to 0[[ data['form']['display_account']=='not_zero' and ' ' or removeParentNode('para') ]] + [[ data['form']['filter']=='filter_no' and get_filter(data) or removeParentNode('para') ]] [[ data['form']['filter']=='filter_date' or removeParentNode('blockTable') ]] diff --git a/addons/account/report/account_general_journal.rml b/addons/account/report/account_general_journal.rml index 4ad086d6bd4..dce30e59918 100644 --- a/addons/account/report/account_general_journal.rml +++ b/addons/account/report/account_general_journal.rml @@ -220,8 +220,8 @@ - [[ data['model']=='account.journal.period' and 'Company' or removeParentNode('para') ]] - [[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]] + Company[[ data['model']=='account.journal.period' and ' ' or removeParentNode('para') ]] + Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]] Fiscal Year Journals Filter By [[ data['form']['filter']!='filter_no' and get_filter(data) ]] diff --git a/addons/account/report/account_general_ledger_landscape.rml b/addons/account/report/account_general_ledger_landscape.rml index 7ae5db98f20..c5d24343148 100644 --- a/addons/account/report/account_general_ledger_landscape.rml +++ b/addons/account/report/account_general_ledger_landscape.rml @@ -360,9 +360,8 @@ - [[ data['model']=='account.account' and 'Company' or removeParentNode('para') ]] - [[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]] - + Company[[ data['model']=='account.account' and ' ' or removeParentNode('para') ]] + Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]] Fiscal Year @@ -395,7 +394,9 @@ [[', '.join([ lt or '' for lt in get_journal(data) ]) ]] - [[ (data['form']['display_account']=='all' and 'All') or (data['form']['display_account']=='movement' and 'With movements') or 'With balance is not equal to 0']] + All[[ data['form']['display_account']=='all' and ' ' or removeParentNode('para') ]] + With movements[[ data['form']['display_account']=='movement' and ' ' or removeParentNode('para') ]] + With balance is not equal to 0[[ data['form']['display_account']=='not_zero' and ' ' or removeParentNode('para') ]] [[ data['form']['filter']=='filter_no' and get_filter(data) or removeParentNode('para') ]] diff --git a/addons/account/report/account_journal.py b/addons/account/report/account_journal.py index 769a8335f55..97e19be4b0c 100644 --- a/addons/account/report/account_journal.py +++ b/addons/account/report/account_journal.py @@ -189,11 +189,12 @@ class journal_print(report_sxw.rml_parse, common_report_header): return data['form']['amount_currency'] def _get_sortby(self, data): + # TODO: deprecated, to remove in trunk if self.sort_selection == 'date': - return 'Date' + return self._translate('Date') elif self.sort_selection == 'ref': - return 'Reference Number' - return 'Date' + return self._translate('Reference Number') + return self._translate('Date') report_sxw.report_sxw('report.account.journal.period.print', 'account.journal.period', 'addons/account/report/account_journal.rml', parser=journal_print, header='external') report_sxw.report_sxw('report.account.journal.period.print.sale.purchase', 'account.journal.period', 'addons/account/report/account_journal_sale_purchase.rml', parser=journal_print, header='external') diff --git a/addons/account/report/account_journal.rml b/addons/account/report/account_journal.rml index fb203d4e664..6d606ed1937 100644 --- a/addons/account/report/account_journal.rml +++ b/addons/account/report/account_journal.rml @@ -186,8 +186,8 @@ - [[ data['model']=='account.journal.period'and 'Company' or removeParentNode('para') ]] - [[ data['model']=='ir.ui.menu' and 'Chart of Accounts' or removeParentNode('para') ]] + Company[[ data['model']=='account.journal.period'and ' ' or removeParentNode('para') ]] + Chart of Accounts[[ data['model']=='ir.ui.menu' and ' ' or removeParentNode('para') ]] Fiscal Year Journal Period @@ -199,8 +199,10 @@ [[ get_fiscalyear(data) or '' ]] [[ o.journal_id.name ]] [[ o.period_id.name ]] - [[ get_sortby(data) ]] - [[ get_target_move(data) ]] + + Date[[ data['form'].get('sort_selection', 'date') == 'date' and ' ' or removeParentNode('para') ]] + Reference Number[[ data['form'].get('sort_selection', 'date') == 'ref' and ' ' or removeParentNode('para') ]] + diff --git a/addons/account/report/account_partner_ledger.py b/addons/account/report/account_partner_ledger.py index 21c1ee3d846..d21323e02fc 100644 --- a/addons/account/report/account_partner_ledger.py +++ b/addons/account/report/account_partner_ledger.py @@ -267,12 +267,13 @@ class third_party_ledger(report_sxw.rml_parse, common_report_header): return result_tmp + result_init def _get_partners(self): + # TODO: deprecated, to remove in trunk if self.result_selection == 'customer': - return 'Receivable Accounts' + return _('Receivable Accounts') elif self.result_selection == 'supplier': - return 'Payable Accounts' + return _('Payable Accounts') elif self.result_selection == 'customer_supplier': - return 'Receivable and Payable Accounts' + return _('Receivable and Payable Accounts') return '' def _sum_currency_amount_account(self, account, form): diff --git a/addons/account/report/account_partner_ledger.rml b/addons/account/report/account_partner_ledger.rml index 0d7122369c6..48ed6d4afe3 100644 --- a/addons/account/report/account_partner_ledger.rml +++ b/addons/account/report/account_partner_ledger.rml @@ -423,7 +423,9 @@ - [[ get_partners() ]] + Receivable Accounts[[ data['form'].get('result_selection', 'customer') == 'customer' or removeParentNode('para') ]] + Payable Accounts[[ data['form'].get('result_selection', 'customer') == 'supplier' or removeParentNode('para') ]] + Receivable and Payable Accounts[[ data['form'].get('result_selection', 'customer') == 'customer_supplier' or removeParentNode('para') ]] [[ get_target_move(data) ]] diff --git a/addons/account/static/src/js/account_move_line_quickadd.js b/addons/account/static/src/js/account_move_line_quickadd.js index 997b2b03bb6..0b904e19da6 100644 --- a/addons/account/static/src/js/account_move_line_quickadd.js +++ b/addons/account/static/src/js/account_move_line_quickadd.js @@ -84,7 +84,7 @@ openerp.account.quickadd = function (instance) { }, search_by_journal_period: function() { var self = this; - var domain = []; + var domain = ['|',['debit', '!=', 0], ['credit', '!=', 0]]; if (self.current_journal !== null) domain.push(["journal_id", "=", self.current_journal]); if (self.current_period !== null) domain.push(["period_id", "=", self.current_period]); self.last_context["journal_id"] = self.current_journal === null ? false : self.current_journal; diff --git a/addons/account/wizard/account_report_common.py b/addons/account/wizard/account_report_common.py index c457140684a..871aea9e4d9 100644 --- a/addons/account/wizard/account_report_common.py +++ b/addons/account/wizard/account_report_common.py @@ -175,7 +175,7 @@ class account_common_report(osv.osv_memory): data['form'][field] = data['form'][field][0] used_context = self._build_contexts(cr, uid, ids, data, context=context) data['form']['periods'] = used_context.get('periods', False) and used_context['periods'] or [] - data['form']['used_context'] = used_context + data['form']['used_context'] = dict(used_context, lang=context.get('lang', 'en_US')) return self._print_report(cr, uid, ids, data, context=context) diff --git a/addons/account_analytic_plans/account_analytic_plans_view.xml b/addons/account_analytic_plans/account_analytic_plans_view.xml index 7fb4091b45f..42b17ae06c3 100644 --- a/addons/account_analytic_plans/account_analytic_plans_view.xml +++ b/addons/account_analytic_plans/account_analytic_plans_view.xml @@ -248,9 +248,12 @@ account.analytic.default - + + 1 + + - + diff --git a/addons/auth_signup/controllers/main.py b/addons/auth_signup/controllers/main.py index 8c61af1f03c..e42dc64151f 100644 --- a/addons/auth_signup/controllers/main.py +++ b/addons/auth_signup/controllers/main.py @@ -42,7 +42,7 @@ class Controller(http.Controller): } return config - @http.route('/auth_signup/retrieve', type='json', auth="user") + @http.route('/auth_signup/retrieve', type='json', auth="none") def retrieve(self, dbname, token): """ retrieve the user info (name, login or email) corresponding to a signup token """ registry = RegistryManager.get(dbname) @@ -51,7 +51,7 @@ class Controller(http.Controller): user_info = res_partner.signup_retrieve_info(cr, openerp.SUPERUSER_ID, token) return user_info - @http.route('/auth_signup/signup', type='json', auth="user") + @http.route('/auth_signup/signup', type='json', auth="none") def signup(self, dbname, token, **values): """ sign up a user (new or existing)""" try: @@ -66,7 +66,7 @@ class Controller(http.Controller): res_users = registry.get('res.users') res_users.signup(cr, openerp.SUPERUSER_ID, values, token) - @http.route('/auth_signup/reset_password', type='json', auth="user") + @http.route('/auth_signup/reset_password', type='json', auth="none") def reset_password(self, dbname, login): """ retrieve user, and perform reset password """ registry = RegistryManager.get(dbname) diff --git a/addons/auth_signup/i18n/zh_CN.po b/addons/auth_signup/i18n/zh_CN.po index aa8d9f952c1..497b872997f 100644 --- a/addons/auth_signup/i18n/zh_CN.po +++ b/addons/auth_signup/i18n/zh_CN.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-04-16 04:33+0000\n" -"Last-Translator: Key \n" +"PO-Revision-Date: 2013-07-02 08:11+0000\n" +"Last-Translator: DWXXX \n" "Language-Team: Chinese (Simplified) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2013-04-17 05:15+0000\n" -"X-Generator: Launchpad (build 16567)\n" +"X-Launchpad-Export-Date: 2013-07-03 05:14+0000\n" +"X-Generator: Launchpad (build 16692)\n" #. module: auth_signup #: field:res.partner,signup_type:0 @@ -29,7 +29,7 @@ msgstr "允许外部用户登录" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/xml/auth_signup.xml:16 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:19 #, python-format msgid "Confirm Password" msgstr "确认密码" @@ -37,7 +37,7 @@ msgstr "确认密码" #. module: auth_signup #: help:base.config.settings,auth_signup_uninvited:0 msgid "If unchecked, only invited users may sign up." -msgstr "" +msgstr "如果不勾选,只有被邀请用户才能注册。" #. module: auth_signup #: model:ir.model,name:auth_signup.model_base_config_settings @@ -45,15 +45,15 @@ msgid "base.config.settings" msgstr "base.config.settings" #. module: auth_signup -#: code:addons/auth_signup/res_users.py:265 +#: code:addons/auth_signup/res_users.py:266 #, python-format msgid "Cannot send email: user has no email address." -msgstr "" +msgstr "无法发送邮件:用户邮件地址为空。" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/xml/auth_signup.xml:24 -#: code:addons/auth_signup/static/src/xml/auth_signup.xml:28 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:27 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:31 #, python-format msgid "Reset password" msgstr "重设密码" @@ -70,7 +70,7 @@ msgstr "重置密码" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:117 +#: code:addons/auth_signup/static/src/js/auth_signup.js:120 #, python-format msgid "Please enter a password and confirm it." msgstr "请输入密码并确认。" @@ -78,12 +78,12 @@ msgstr "请输入密码并确认。" #. module: auth_signup #: view:res.users:0 msgid "Send an email to the user to (re)set their password." -msgstr "" +msgstr "向用户发送重置密码邮件。" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/xml/auth_signup.xml:23 #: code:addons/auth_signup/static/src/xml/auth_signup.xml:26 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:29 #, python-format msgid "Sign Up" msgstr "注册" @@ -119,10 +119,10 @@ msgstr "" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:111 +#: code:addons/auth_signup/static/src/js/auth_signup.js:114 #, python-format msgid "Please enter a name." -msgstr "" +msgstr "请输入名字" #. module: auth_signup #: model:ir.model,name:auth_signup.model_res_users @@ -136,10 +136,10 @@ msgstr "注册 URL" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:114 +#: code:addons/auth_signup/static/src/js/auth_signup.js:117 #, python-format msgid "Please enter a username." -msgstr "" +msgstr "请输入您的用户名" #. module: auth_signup #: selection:res.users,state:0 @@ -147,7 +147,7 @@ msgid "Active" msgstr "启用" #. module: auth_signup -#: code:addons/auth_signup/res_users.py:269 +#: code:addons/auth_signup/res_users.py:270 #, python-format msgid "" "Cannot send email: no outgoing email server configured.\n" @@ -170,10 +170,10 @@ msgstr "姓名" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:170 +#: code:addons/auth_signup/static/src/js/auth_signup.js:173 #, python-format msgid "Please enter a username or email address." -msgstr "" +msgstr "请输入用户名和邮件地址" #. module: auth_signup #: selection:res.users,state:0 @@ -199,7 +199,7 @@ msgstr "" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/xml/auth_signup.xml:22 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:25 #, python-format msgid "Log in" msgstr "登录" @@ -211,35 +211,35 @@ msgstr "注册令牌( Token )是有效的" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:108 #: code:addons/auth_signup/static/src/js/auth_signup.js:111 #: code:addons/auth_signup/static/src/js/auth_signup.js:114 #: code:addons/auth_signup/static/src/js/auth_signup.js:117 #: code:addons/auth_signup/static/src/js/auth_signup.js:120 -#: code:addons/auth_signup/static/src/js/auth_signup.js:167 +#: code:addons/auth_signup/static/src/js/auth_signup.js:123 #: code:addons/auth_signup/static/src/js/auth_signup.js:170 +#: code:addons/auth_signup/static/src/js/auth_signup.js:173 #, python-format msgid "Login" msgstr "" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:94 +#: code:addons/auth_signup/static/src/js/auth_signup.js:97 #, python-format msgid "Invalid signup token" msgstr "" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:120 +#: code:addons/auth_signup/static/src/js/auth_signup.js:123 #, python-format msgid "Passwords do not match; please retype them." msgstr "" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/js/auth_signup.js:108 -#: code:addons/auth_signup/static/src/js/auth_signup.js:167 +#: code:addons/auth_signup/static/src/js/auth_signup.js:111 +#: code:addons/auth_signup/static/src/js/auth_signup.js:170 #, python-format msgid "No database selected !" msgstr "" @@ -256,7 +256,7 @@ msgstr "" #. module: auth_signup #. openerp-web -#: code:addons/auth_signup/static/src/xml/auth_signup.xml:27 +#: code:addons/auth_signup/static/src/xml/auth_signup.xml:30 #, python-format msgid "Back to Login" msgstr "返回登录页面" @@ -266,12 +266,12 @@ msgstr "返回登录页面" #: code:addons/auth_signup/static/src/xml/auth_signup.xml:22 #, python-format msgid "Sign up" -msgstr "" +msgstr "注册" #. module: auth_signup #: model:ir.model,name:auth_signup.model_res_partner msgid "Partner" -msgstr "业务伙伴" +msgstr "合作伙伴" #. module: auth_signup #: field:res.partner,signup_token:0 diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py index 896349ec5e6..a9061c0afce 100644 --- a/addons/base_calendar/base_calendar.py +++ b/addons/base_calendar/base_calendar.py @@ -1510,7 +1510,7 @@ rule or repeating pattern of time to exclude from the recurring rule."), continue if r['class']=='private': for f in r.keys(): - if f not in ('id','date','date_deadline','duration','user_id','state'): + if f not in ('id','date','date_deadline','duration','user_id','state','interval','count'): if isinstance(r[f], list): r[f] = [] else: diff --git a/addons/base_status/i18n/sv.po b/addons/base_status/i18n/sv.po new file mode 100644 index 00000000000..eb1b42e6a53 --- /dev/null +++ b/addons/base_status/i18n/sv.po @@ -0,0 +1,79 @@ +# Swedish translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-12-21 17:05+0000\n" +"PO-Revision-Date: 2013-07-08 15:10+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-07-09 05:16+0000\n" +"X-Generator: Launchpad (build 16696)\n" + +#. module: base_status +#: code:addons/base_status/base_state.py:107 +#, python-format +msgid "Error !" +msgstr "Fel !" + +#. module: base_status +#: code:addons/base_status/base_state.py:166 +#, python-format +msgid "%s has been opened." +msgstr "%s har öppnats." + +#. module: base_status +#: code:addons/base_status/base_state.py:199 +#, python-format +msgid "%s has been renewed." +msgstr "%s har förnyats." + +#. module: base_status +#: code:addons/base_status/base_stage.py:210 +#, python-format +msgid "Error!" +msgstr "Fel!" + +#. module: base_status +#: code:addons/base_status/base_state.py:107 +#, python-format +msgid "" +"You can not escalate, you are already at the top level regarding your sales-" +"team category." +msgstr "" +"Du kan inte eskalera längre, du har nått toppen för denna säljlags-kategori." + +#. module: base_status +#: code:addons/base_status/base_state.py:193 +#, python-format +msgid "%s is now pending." +msgstr "%s är nu pågående." + +#. module: base_status +#: code:addons/base_status/base_state.py:187 +#, python-format +msgid "%s has been canceled." +msgstr "%s har avbrutits." + +#. module: base_status +#: code:addons/base_status/base_stage.py:210 +#, python-format +msgid "" +"You are already at the top level of your sales-team category.\n" +"Therefore you cannot escalate furthermore." +msgstr "" +"Du har nått översta nivån för din säljlagskategori.\n" +"Det går därför inte att eskalera ytterligare." + +#. module: base_status +#: code:addons/base_status/base_state.py:181 +#, python-format +msgid "%s has been closed." +msgstr "%s har stängts." diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index 1070af22b3c..af02e3be1bf 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -19,7 +19,6 @@ # ############################################################################## -from openerp.addons.base_status.base_stage import base_stage import crm from datetime import datetime from operator import itemgetter @@ -68,7 +67,7 @@ CRM_LEAD_PENDING_STATES = ( crm.AVAILABLE_STATES[4][0], # Pending ) -class crm_lead(base_stage, format_address, osv.osv): +class crm_lead(format_address, osv.osv): """ CRM Lead Case """ _name = "crm.lead" _description = "Lead/Opportunity" @@ -93,20 +92,6 @@ class crm_lead(base_stage, format_address, osv.osv): context['empty_list_help_document_name'] = _("leads") return super(crm_lead, self).get_empty_list_help(cr, uid, help, context=context) - def create(self, cr, uid, vals, context=None): - if context is None: - context = {} - if not vals.get('stage_id'): - ctx = context.copy() - if vals.get('section_id'): - ctx['default_section_id'] = vals['section_id'] - if vals.get('type'): - ctx['default_type'] = vals['type'] - vals['stage_id'] = self._get_default_stage_id(cr, uid, context=ctx) - # context: no_log, because subtype already handle this - create_context = dict(context, mail_create_nolog=True) - return super(crm_lead, self).create(cr, uid, vals, context=create_context) - def _get_default_section_id(self, cr, uid, context=None): """ Gives default section by checking if present in the context """ return self._resolve_section_id_from_context(cr, uid, context=context) or False @@ -126,8 +111,7 @@ class crm_lead(base_stage, format_address, osv.osv): if type(context.get('default_section_id')) in (int, long): return context.get('default_section_id') if isinstance(context.get('default_section_id'), basestring): - section_name = context['default_section_id'] - section_ids = self.pool.get('crm.case.section').name_search(cr, uid, name=section_name, context=context) + section_ids = self.pool.get('crm.case.section').name_search(cr, uid, name=context['default_section_id'], context=context) if len(section_ids) == 1: return int(section_ids[0][0]) return None @@ -326,8 +310,7 @@ class crm_lead(base_stage, format_address, osv.osv): _defaults = { 'active': 1, 'type': 'lead', - 'user_id': lambda s, cr, uid, c: s._get_default_user(cr, uid, c), - 'email_from': lambda s, cr, uid, c: s._get_default_email(cr, uid, c), + 'user_id': lambda s, cr, uid, c: uid, 'stage_id': lambda s, cr, uid, c: s._get_default_stage_id(cr, uid, c), 'section_id': lambda s, cr, uid, c: s._get_default_section_id(cr, uid, c), 'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'crm.lead', context=c), @@ -341,30 +324,29 @@ class crm_lead(base_stage, format_address, osv.osv): def onchange_stage_id(self, cr, uid, ids, stage_id, context=None): if not stage_id: - return {'value':{}} + return {'value': {}} stage = self.pool.get('crm.case.stage').browse(cr, uid, stage_id, context) if not stage.on_change: - return {'value':{}} - return {'value':{'probability': stage.probability}} + return {'value': {}} + return {'value': {'probability': stage.probability}} - def on_change_partner(self, cr, uid, ids, partner_id, context=None): - result = {} + def on_change_partner_id(self, cr, uid, ids, partner_id, context=None): values = {} if partner_id: partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context) values = { - 'partner_name' : partner.name, - 'street' : partner.street, - 'street2' : partner.street2, - 'city' : partner.city, - 'state_id' : partner.state_id and partner.state_id.id or False, - 'country_id' : partner.country_id and partner.country_id.id or False, - 'email_from' : partner.email, - 'phone' : partner.phone, - 'mobile' : partner.mobile, - 'fax' : partner.fax, + 'partner_name': partner.name, + 'street': partner.street, + 'street2': partner.street2, + 'city': partner.city, + 'state_id': partner.state_id and partner.state_id.id or False, + 'country_id': partner.country_id and partner.country_id.id or False, + 'email_from': partner.email, + 'phone': partner.phone, + 'mobile': partner.mobile, + 'fax': partner.fax, } - return {'value' : values} + return {'value': values} def on_change_user(self, cr, uid, ids, user_id, context=None): """ When changing the user, also set a section_id or restrict section id @@ -405,7 +387,7 @@ class crm_lead(base_stage, format_address, osv.osv): # collect all section_ids section_ids = [] types = ['both'] - if not cases : + if not cases: type = context.get('default_type') types += [type] if section_id: @@ -433,24 +415,18 @@ class crm_lead(base_stage, format_address, osv.osv): return stage_ids[0] return False - def case_cancel(self, cr, uid, ids, context=None): - """ Overrides case_cancel from base_stage to set probability """ - res = super(crm_lead, self).case_cancel(cr, uid, ids, context=context) - self.write(cr, uid, ids, {'probability' : 0.0}, context=context) - return res - - def case_reset(self, cr, uid, ids, context=None): - """ Overrides case_reset from base_stage to set probability """ - res = super(crm_lead, self).case_reset(cr, uid, ids, context=context) - self.write(cr, uid, ids, {'probability': 0.0}, context=context) - return res + def stage_set(self, cr, uid, ids, stage_id, context=None): + """ Set the new stage. Now just writes the stage. + TDE TODO: remove me when removing state + """ + return self.write(cr, uid, ids, {'stage_id': stage_id}, context=context) def case_mark_lost(self, cr, uid, ids, context=None): """ Mark the case as lost: state=cancel and probability=0 """ for lead in self.browse(cr, uid, ids): stage_id = self.stage_find(cr, uid, [lead], lead.section_id.id or False, [('probability', '=', 0.0),('on_change','=',True)], context=context) if stage_id: - self.case_set(cr, uid, [lead.id], values_to_update={'probability': 0.0}, new_stage_id=stage_id, context=context) + self.stage_set(cr, uid, [lead.id], stage_id, context=context) return True def case_mark_won(self, cr, uid, ids, context=None): @@ -458,7 +434,21 @@ class crm_lead(base_stage, format_address, osv.osv): for lead in self.browse(cr, uid, ids): stage_id = self.stage_find(cr, uid, [lead], lead.section_id.id or False, [('probability', '=', 100.0),('on_change','=',True)], context=context) if stage_id: - self.case_set(cr, uid, [lead.id], values_to_update={'probability': 100.0}, new_stage_id=stage_id, context=context) + self.stage_set(cr, uid, [lead.id], stage_id, context=context) + return True + + def case_escalate(self, cr, uid, ids, context=None): + """ Escalates case to parent level """ + for case in self.browse(cr, uid, ids, context=context): + data = {'active': True} + if case.section_id.parent_id: + data['section_id'] = case.section_id.parent_id.id + if case.section_id.parent_id.change_responsible: + if case.section_id.parent_id.user_id: + data['user_id'] = case.section_id.parent_id.user_id.id + else: + raise osv.except_osv(_('Error!'), _("You are already at the top level of your sales-team category.\nTherefore you cannot escalate furthermore.")) + self.write(cr, uid, [case.id], data, context=context) return True def set_priority(self, cr, uid, ids, priority): @@ -932,12 +922,22 @@ class crm_lead(base_stage, format_address, osv.osv): } return res + def create(self, cr, uid, vals, context=None): + if context is None: + context = {} + if vals.get('type') and not context.get('default_type'): + context['default_type'] = vals.get('type') + if vals.get('section_id') and not context.get('default_section_id'): + context['default_section_id'] = vals.get('section_id') + + # context: no_log, because subtype already handle this + create_context = dict(context, mail_create_nolog=True) + return super(crm_lead, self).create(cr, uid, vals, context=create_context) + def write(self, cr, uid, ids, vals, context=None): if vals.get('stage_id') and not vals.get('probability'): - # change probability of lead(s) if required by stage - stage = self.pool.get('crm.case.stage').browse(cr, uid, vals['stage_id'], context=context) - if stage.on_change: - vals['probability'] = stage.probability + onchange_stage_values = self.onchange_stage_id(cr, uid, ids, vals.get('stage_id'), context=context)['value'] + vals.update(onchange_stage_values) return super(crm_lead, self).write(cr, uid, ids, vals, context=context) def new_mail_send(self, cr, uid, ids, context=None): @@ -1024,7 +1024,7 @@ class crm_lead(base_stage, format_address, osv.osv): 'user_id': False, } if msg.get('author_id'): - defaults.update(self.on_change_partner(cr, uid, None, msg.get('author_id'), context=context)['value']) + defaults.update(self.on_change_partner_id(cr, uid, None, msg.get('author_id'), context=context)['value']) if msg.get('priority') in dict(crm.AVAILABLE_PRIORITIES): defaults['priority'] = msg.get('priority') defaults.update(custom_values) diff --git a/addons/crm/crm_lead_demo.xml b/addons/crm/crm_lead_demo.xml index 4c6cf47c4f7..3917fadbd32 100644 --- a/addons/crm/crm_lead_demo.xml +++ b/addons/crm/crm_lead_demo.xml @@ -263,13 +263,6 @@ Andrew - - - -