[MERGE]: Merge with lp:openobject-server
bzr revid: atp@tinyerp.com-20120316042909-gb2e5cmrilyyhsef bzr revid: atp@tinyerp.com-20120320050251-bgk9xhsfmb1fws1p
This commit is contained in:
commit
258722cc1c
25
.bzrignore
25
.bzrignore
|
@ -1,23 +1,18 @@
|
||||||
*.pyc
|
|
||||||
.*.swp
|
.*.swp
|
||||||
.bzrignore
|
.bzrignore
|
||||||
|
.idea
|
||||||
|
.project
|
||||||
|
.pydevproject
|
||||||
|
.ropeproject
|
||||||
|
.settings
|
||||||
|
.DS_Store
|
||||||
openerp/addons/*
|
openerp/addons/*
|
||||||
openerp/filestore*
|
openerp/filestore*
|
||||||
.Python
|
.Python
|
||||||
include
|
|
||||||
lib
|
|
||||||
bin/activate
|
|
||||||
bin/activate_this.py
|
|
||||||
bin/easy_install
|
|
||||||
bin/easy_install-2.6
|
|
||||||
bin/pip
|
|
||||||
bin/python
|
|
||||||
bin/python2.6
|
|
||||||
*.pyc
|
*.pyc
|
||||||
*.pyo
|
*.pyo
|
||||||
|
bin/*
|
||||||
build/
|
build/
|
||||||
bin/yolk
|
include/
|
||||||
bin/pil*.py
|
lib/
|
||||||
.project
|
share/
|
||||||
.pydevproject
|
|
||||||
.settings
|
|
|
@ -165,11 +165,16 @@ def dumpstacks(sig, frame):
|
||||||
""" Signal handler: dump a stack trace for each existing thread."""
|
""" Signal handler: dump a stack trace for each existing thread."""
|
||||||
# code from http://stackoverflow.com/questions/132058/getting-stack-trace-from-a-running-python-application#answer-2569696
|
# code from http://stackoverflow.com/questions/132058/getting-stack-trace-from-a-running-python-application#answer-2569696
|
||||||
# modified for python 2.5 compatibility
|
# modified for python 2.5 compatibility
|
||||||
thread_map = dict(threading._active, **threading._limbo)
|
threads_info = dict([(th.ident, {'name': th.name,
|
||||||
id2name = dict([(threadId, thread.getName()) for threadId, thread in thread_map.items()])
|
'uid': getattr(th,'uid','n/a')})
|
||||||
|
for th in threading.enumerate()])
|
||||||
code = []
|
code = []
|
||||||
for threadId, stack in sys._current_frames().items():
|
for threadId, stack in sys._current_frames().items():
|
||||||
code.append("\n# Thread: %s(%d)" % (id2name[threadId], threadId))
|
thread_info = threads_info.get(threadId)
|
||||||
|
code.append("\n# Thread: %s (id:%s) (uid:%s)" % \
|
||||||
|
(thread_info and thread_info['name'] or 'n/a',
|
||||||
|
threadId,
|
||||||
|
thread_info and thread_info['uid'] or 'n/a'))
|
||||||
for filename, lineno, name, line in traceback.extract_stack(stack):
|
for filename, lineno, name, line in traceback.extract_stack(stack):
|
||||||
code.append('File: "%s", line %d, in %s' % (filename, lineno, name))
|
code.append('File: "%s", line %d, in %s' % (filename, lineno, name))
|
||||||
if line:
|
if line:
|
||||||
|
|
|
@ -199,7 +199,7 @@
|
||||||
<field name="code">cf</field>
|
<field name="code">cf</field>
|
||||||
</record>
|
</record>
|
||||||
<record id="cd" model="res.country">
|
<record id="cd" model="res.country">
|
||||||
<field name="name">Congo, The Democratic Republic of the</field>
|
<field name="name">Congo, Democratic Republic of the</field>
|
||||||
<field name="code">cd</field>
|
<field name="code">cd</field>
|
||||||
</record>
|
</record>
|
||||||
<record id="cg" model="res.country">
|
<record id="cg" model="res.country">
|
||||||
|
|
|
@ -7,14 +7,14 @@ msgstr ""
|
||||||
"Project-Id-Version: OpenERP Server 5.0.4\n"
|
"Project-Id-Version: OpenERP Server 5.0.4\n"
|
||||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||||
"POT-Creation-Date: 2012-02-08 00:44+0000\n"
|
"POT-Creation-Date: 2012-02-08 00:44+0000\n"
|
||||||
"PO-Revision-Date: 2012-01-08 15:06+0000\n"
|
"PO-Revision-Date: 2012-03-19 10:06+0000\n"
|
||||||
"Last-Translator: kifcaliph <Unknown>\n"
|
"Last-Translator: Abdulwhhab A. Al-Shehri <Unknown>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-03-10 04:46+0000\n"
|
"X-Launchpad-Export-Date: 2012-03-20 04:55+0000\n"
|
||||||
"X-Generator: Launchpad (build 14914)\n"
|
"X-Generator: Launchpad (build 14969)\n"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:res.country,name:base.sh
|
#: model:res.country,name:base.sh
|
||||||
|
@ -367,7 +367,7 @@ msgstr "اسم المعالج"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:res.groups,name:base.group_partner_manager
|
#: model:res.groups,name:base.group_partner_manager
|
||||||
msgid "Partner Manager"
|
msgid "Partner Manager"
|
||||||
msgstr ""
|
msgstr "إدارة الشركاء"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.category,name:base.module_category_customer_relationship_management
|
#: model:ir.module.category,name:base.module_category_customer_relationship_management
|
||||||
|
@ -388,7 +388,7 @@ msgstr "تجميع غير ممكن"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:ir.module.category,child_ids:0
|
#: field:ir.module.category,child_ids:0
|
||||||
msgid "Child Applications"
|
msgid "Child Applications"
|
||||||
msgstr ""
|
msgstr "التطبيقات الفرعية"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:res.partner,credit_limit:0
|
#: field:res.partner,credit_limit:0
|
||||||
|
@ -408,7 +408,7 @@ msgstr "تاريخ التحديث"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_base_action_rule
|
#: model:ir.module.module,shortdesc:base.module_base_action_rule
|
||||||
msgid "Automated Action Rules"
|
msgid "Automated Action Rules"
|
||||||
msgstr ""
|
msgstr "قواعد الاحداث التلقائية"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:ir.attachment:0
|
#: view:ir.attachment:0
|
||||||
|
@ -473,11 +473,13 @@ msgid ""
|
||||||
"The user this filter is available to. When left empty the filter is usable "
|
"The user this filter is available to. When left empty the filter is usable "
|
||||||
"by the system only."
|
"by the system only."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"مرشحات المستخدم غير متوفرة. عندما يترك فارغا فان المرشح يستخدم بواسطة النظام "
|
||||||
|
"فقط."
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: help:res.partner,website:0
|
#: help:res.partner,website:0
|
||||||
msgid "Website of Partner."
|
msgid "Website of Partner."
|
||||||
msgstr ""
|
msgstr "موقع إلكتروني للشريك."
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: help:ir.actions.act_window,views:0
|
#: help:ir.actions.act_window,views:0
|
||||||
|
@ -506,7 +508,7 @@ msgstr "تنسيق التاريخ"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_base_report_designer
|
#: model:ir.module.module,shortdesc:base.module_base_report_designer
|
||||||
msgid "OpenOffice Report Designer"
|
msgid "OpenOffice Report Designer"
|
||||||
msgstr ""
|
msgstr "مصمم تقارير اوبن اوفيس"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:res.bank,email:0
|
#: field:res.bank,email:0
|
||||||
|
@ -566,7 +568,7 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_sale_layout
|
#: model:ir.module.module,shortdesc:base.module_sale_layout
|
||||||
msgid "Sales Orders Print Layout"
|
msgid "Sales Orders Print Layout"
|
||||||
msgstr ""
|
msgstr "تنسيق طباعة اوامر البيع"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: selection:base.language.install,lang:0
|
#: selection:base.language.install,lang:0
|
||||||
|
@ -576,7 +578,7 @@ msgstr "الأسبانية"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_hr_timesheet_invoice
|
#: model:ir.module.module,shortdesc:base.module_hr_timesheet_invoice
|
||||||
msgid "Invoice on Timesheets"
|
msgid "Invoice on Timesheets"
|
||||||
msgstr ""
|
msgstr "فاتورة على جداول زمنية"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:base.module.upgrade:0
|
#: view:base.module.upgrade:0
|
||||||
|
@ -700,7 +702,7 @@ msgstr "تمّت عملية التصدير"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_plugin_outlook
|
#: model:ir.module.module,shortdesc:base.module_plugin_outlook
|
||||||
msgid "Outlook Plug-In"
|
msgid "Outlook Plug-In"
|
||||||
msgstr ""
|
msgstr "إضافات الاوت لوك"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:ir.model:0
|
#: view:ir.model:0
|
||||||
|
@ -727,7 +729,7 @@ msgstr "الأردن"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: help:ir.cron,nextcall:0
|
#: help:ir.cron,nextcall:0
|
||||||
msgid "Next planned execution date for this job."
|
msgid "Next planned execution date for this job."
|
||||||
msgstr ""
|
msgstr "تاريخ الحدث المقرر لاحقا لهذه الوظيفة."
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: code:addons/base/ir/ir_model.py:139
|
#: code:addons/base/ir/ir_model.py:139
|
||||||
|
@ -743,7 +745,7 @@ msgstr "إريتريا"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: sql_constraint:res.company:0
|
#: sql_constraint:res.company:0
|
||||||
msgid "The company name must be unique !"
|
msgid "The company name must be unique !"
|
||||||
msgstr ""
|
msgstr "اسم الشركة يجب أن يكون فريداً !"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:res.config:0
|
#: view:res.config:0
|
||||||
|
@ -778,7 +780,7 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:ir.mail_server:0
|
#: view:ir.mail_server:0
|
||||||
msgid "Security and Authentication"
|
msgid "Security and Authentication"
|
||||||
msgstr ""
|
msgstr "الحماية و التحقق من الصلاحيات"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:base.language.export:0
|
#: view:base.language.export:0
|
||||||
|
@ -879,7 +881,7 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:res.users:0
|
#: view:res.users:0
|
||||||
msgid "Email Preferences"
|
msgid "Email Preferences"
|
||||||
msgstr ""
|
msgstr "تفضيلات البريد الالكتروني"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,description:base.module_audittrail
|
#: model:ir.module.module,description:base.module_audittrail
|
||||||
|
@ -971,7 +973,7 @@ msgstr "نييوي"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_membership
|
#: model:ir.module.module,shortdesc:base.module_membership
|
||||||
msgid "Membership Management"
|
msgid "Membership Management"
|
||||||
msgstr ""
|
msgstr "إدارة الإشتراكات"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: selection:ir.module.module,license:0
|
#: selection:ir.module.module,license:0
|
||||||
|
@ -998,7 +1000,7 @@ msgstr "أنواع مراجع الطلبات"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_google_base_account
|
#: model:ir.module.module,shortdesc:base.module_google_base_account
|
||||||
msgid "Google Users"
|
msgid "Google Users"
|
||||||
msgstr ""
|
msgstr "مستخدمي جوجل"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: help:ir.server.object.lines,value:0
|
#: help:ir.server.object.lines,value:0
|
||||||
|
@ -1035,6 +1037,7 @@ msgstr "ملف TGZ"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Users added to this group are automatically added in the following groups."
|
"Users added to this group are automatically added in the following groups."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"الاشخاص المضافون الى هذه المجموعة أضيفوا تلقائيا الى المجموعات التالية."
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:res.lang:0
|
#: view:res.lang:0
|
||||||
|
@ -1088,7 +1091,7 @@ msgstr "لا يمكن استخدام كلمات مرور فارغة لأسباب
|
||||||
#: code:addons/base/ir/ir_mail_server.py:192
|
#: code:addons/base/ir/ir_mail_server.py:192
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Connection test failed!"
|
msgid "Connection test failed!"
|
||||||
msgstr ""
|
msgstr "فشلت محاولة الاتصال!"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: selection:ir.actions.server,state:0
|
#: selection:ir.actions.server,state:0
|
||||||
|
@ -1209,7 +1212,7 @@ msgstr "الأسبانية / Español (GT)"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:ir.mail_server,smtp_port:0
|
#: field:ir.mail_server,smtp_port:0
|
||||||
msgid "SMTP Port"
|
msgid "SMTP Port"
|
||||||
msgstr ""
|
msgstr "المنفذ SMTP"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_import_sugarcrm
|
#: model:ir.module.module,shortdesc:base.module_import_sugarcrm
|
||||||
|
@ -1231,7 +1234,7 @@ msgstr ""
|
||||||
#: code:addons/base/module/wizard/base_language_install.py:55
|
#: code:addons/base/module/wizard/base_language_install.py:55
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Language Pack"
|
msgid "Language Pack"
|
||||||
msgstr ""
|
msgstr "حزمة لغة"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_web_tests
|
#: model:ir.module.module,shortdesc:base.module_web_tests
|
||||||
|
@ -1289,11 +1292,14 @@ msgid ""
|
||||||
"reference it\n"
|
"reference it\n"
|
||||||
"- creation/update: a mandatory field is not correctly set"
|
"- creation/update: a mandatory field is not correctly set"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"لا يمكن إكمال العملية، ربما بسبب أحد الاسباب التالية:\n"
|
||||||
|
"-الحذف: ربما تكون تحاول حذف سجل بينما هناك سجلات اخرى تشير اليه.\n"
|
||||||
|
"الانشاء/التحديث: حقل أساسي لم يتم ادخاله بشكل صحيح."
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:ir.module.category,parent_id:0
|
#: field:ir.module.category,parent_id:0
|
||||||
msgid "Parent Application"
|
msgid "Parent Application"
|
||||||
msgstr ""
|
msgstr "التطبيق الرئيسي"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: code:addons/base/res/res_users.py:222
|
#: code:addons/base/res/res_users.py:222
|
||||||
|
@ -1310,12 +1316,12 @@ msgstr "لتصدير لغة جديدة، لا تختر أي لغة."
|
||||||
#: model:ir.module.module,shortdesc:base.module_document
|
#: model:ir.module.module,shortdesc:base.module_document
|
||||||
#: model:ir.module.module,shortdesc:base.module_knowledge
|
#: model:ir.module.module,shortdesc:base.module_knowledge
|
||||||
msgid "Document Management System"
|
msgid "Document Management System"
|
||||||
msgstr ""
|
msgstr "نظام ادارة الوثائق"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_crm_claim
|
#: model:ir.module.module,shortdesc:base.module_crm_claim
|
||||||
msgid "Claims Management"
|
msgid "Claims Management"
|
||||||
msgstr ""
|
msgstr "إدارة المطالبات"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.ui.menu,name:base.menu_purchase_root
|
#: model:ir.ui.menu,name:base.menu_purchase_root
|
||||||
|
@ -1340,6 +1346,9 @@ msgid ""
|
||||||
"use the accounting application of OpenERP, journals and accounts will be "
|
"use the accounting application of OpenERP, journals and accounts will be "
|
||||||
"created automatically based on these data."
|
"created automatically based on these data."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"قم بتكوين الحسابات البنكية لشركتك و اختر ما تريده ان يظهر في اسفل التقارير. "
|
||||||
|
"بإمكانك إعادة ترتيب الحسابات من قائمة العرض. إذا كنت تستخدم ملحق الحسابات, "
|
||||||
|
"سيتم انشاء اليوميات و الحسابات تلقائيا اعتمادا على هذه البيانات."
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:ir.module.module:0
|
#: view:ir.module.module:0
|
||||||
|
@ -1359,6 +1368,14 @@ msgid ""
|
||||||
" * Commitment Date\n"
|
" * Commitment Date\n"
|
||||||
" * Effective Date\n"
|
" * Effective Date\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"\n"
|
||||||
|
"أضف تواريخ اضافية الى طلب البيع.\n"
|
||||||
|
"===============================\n"
|
||||||
|
"\n"
|
||||||
|
"يمكنك اضافة التواريخ التالية الى طلب البيع:\n"
|
||||||
|
"* التاريخ المطلوب\n"
|
||||||
|
"* التاريخ الملتزم به\n"
|
||||||
|
"* تاريخ السريان\n"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_account_sequence
|
#: model:ir.module.module,shortdesc:base.module_account_sequence
|
||||||
|
@ -1804,7 +1821,7 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_hr_evaluation
|
#: model:ir.module.module,shortdesc:base.module_hr_evaluation
|
||||||
msgid "Employee Appraisals"
|
msgid "Employee Appraisals"
|
||||||
msgstr ""
|
msgstr "تقييمات الموظف"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: selection:ir.actions.server,state:0
|
#: selection:ir.actions.server,state:0
|
||||||
|
@ -1853,7 +1870,7 @@ msgstr "نموذج ملحق"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:res.partner.bank,footer:0
|
#: field:res.partner.bank,footer:0
|
||||||
msgid "Display on Reports"
|
msgid "Display on Reports"
|
||||||
msgstr ""
|
msgstr "عرض على التقارير"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,description:base.module_l10n_cn
|
#: model:ir.module.module,description:base.module_l10n_cn
|
||||||
|
@ -2050,7 +2067,7 @@ msgstr "وضع العرض"
|
||||||
msgid ""
|
msgid ""
|
||||||
"Display this bank account on the footer of printed documents like invoices "
|
"Display this bank account on the footer of printed documents like invoices "
|
||||||
"and sales orders."
|
"and sales orders."
|
||||||
msgstr ""
|
msgstr "عرض هذا الحساب البنكي على أسفل المطبوعات مثل الفواتير وطلبات البيع."
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:base.language.import:0
|
#: view:base.language.import:0
|
||||||
|
@ -2159,7 +2176,7 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_subscription
|
#: model:ir.module.module,shortdesc:base.module_subscription
|
||||||
msgid "Recurring Documents"
|
msgid "Recurring Documents"
|
||||||
msgstr ""
|
msgstr "وثائق متكررة"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:res.country,name:base.bs
|
#: model:res.country,name:base.bs
|
||||||
|
@ -2244,7 +2261,7 @@ msgstr "المجموعات"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: selection:base.language.install,lang:0
|
#: selection:base.language.install,lang:0
|
||||||
msgid "Spanish (CL) / Español (CL)"
|
msgid "Spanish (CL) / Español (CL)"
|
||||||
msgstr ""
|
msgstr "الأسبانية / Español (CL)"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:res.country,name:base.bz
|
#: model:res.country,name:base.bz
|
||||||
|
@ -2517,7 +2534,7 @@ msgstr "استيراد / تصدير"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.actions.todo.category,name:base.category_tools_customization_config
|
#: model:ir.actions.todo.category,name:base.category_tools_customization_config
|
||||||
msgid "Tools / Customization"
|
msgid "Tools / Customization"
|
||||||
msgstr ""
|
msgstr "أدوات / تخصيصات"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:ir.model.data,res_id:0
|
#: field:ir.model.data,res_id:0
|
||||||
|
@ -2533,7 +2550,7 @@ msgstr "عنوان البريد الإلكتروني"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: selection:base.language.install,lang:0
|
#: selection:base.language.install,lang:0
|
||||||
msgid "French (BE) / Français (BE)"
|
msgid "French (BE) / Français (BE)"
|
||||||
msgstr ""
|
msgstr "الفرنسية / Français (BE)"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:ir.actions.server:0
|
#: view:ir.actions.server:0
|
||||||
|
@ -2768,7 +2785,7 @@ msgstr "جزيرة نورفولك"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: selection:base.language.install,lang:0
|
#: selection:base.language.install,lang:0
|
||||||
msgid "Korean (KR) / 한국어 (KR)"
|
msgid "Korean (KR) / 한국어 (KR)"
|
||||||
msgstr ""
|
msgstr "الكورية / 한국어 (KR)"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: help:ir.model.fields,model:0
|
#: help:ir.model.fields,model:0
|
||||||
|
@ -3218,7 +3235,7 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: selection:base.language.install,lang:0
|
#: selection:base.language.install,lang:0
|
||||||
msgid "Finnish / Suomi"
|
msgid "Finnish / Suomi"
|
||||||
msgstr ""
|
msgstr "الفنلندية / Suomi"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:ir.rule,perm_write:0
|
#: field:ir.rule,perm_write:0
|
||||||
|
@ -3233,7 +3250,7 @@ msgstr "اللقب"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: selection:base.language.install,lang:0
|
#: selection:base.language.install,lang:0
|
||||||
msgid "German / Deutsch"
|
msgid "German / Deutsch"
|
||||||
msgstr ""
|
msgstr "الألمانية / Deutsch"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:ir.actions.server:0
|
#: view:ir.actions.server:0
|
||||||
|
@ -3581,7 +3598,7 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_point_of_sale
|
#: model:ir.module.module,shortdesc:base.module_point_of_sale
|
||||||
msgid "Point Of Sale"
|
msgid "Point Of Sale"
|
||||||
msgstr ""
|
msgstr "نقطة بيع"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: code:addons/base/module/module.py:302
|
#: code:addons/base/module/module.py:302
|
||||||
|
@ -3611,6 +3628,8 @@ msgid ""
|
||||||
"Value Added Tax number. Check the box if the partner is subjected to the "
|
"Value Added Tax number. Check the box if the partner is subjected to the "
|
||||||
"VAT. Used by the VAT legal statement."
|
"VAT. Used by the VAT legal statement."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"رقم ضريبة القيمة المضافة. ضع علامة في هذا المربع اذا كان الشريك خاضع لضريبة "
|
||||||
|
"القيمة المضافة. تستخدم بواسطة كشف ضريبة القيمة المضافة القانونية."
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: selection:ir.sequence,implementation:0
|
#: selection:ir.sequence,implementation:0
|
||||||
|
@ -3708,7 +3727,7 @@ msgstr "ضريبة القيمة المضافة"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:res.users,new_password:0
|
#: field:res.users,new_password:0
|
||||||
msgid "Set password"
|
msgid "Set password"
|
||||||
msgstr ""
|
msgstr "ضبط كلمة المرور"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:res.lang:0
|
#: view:res.lang:0
|
||||||
|
@ -3723,7 +3742,7 @@ msgstr "خطأ! لا يمكنك إنشاء فئات متداخلة."
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:res.lang:0
|
#: view:res.lang:0
|
||||||
msgid "%x - Appropriate date representation."
|
msgid "%x - Appropriate date representation."
|
||||||
msgstr ""
|
msgstr "%x - صيغة التاريخ المناسب"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,description:base.module_web_mobile
|
#: model:ir.module.module,description:base.module_web_mobile
|
||||||
|
@ -3836,7 +3855,7 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_fetchmail
|
#: model:ir.module.module,shortdesc:base.module_fetchmail
|
||||||
msgid "Email Gateway"
|
msgid "Email Gateway"
|
||||||
msgstr ""
|
msgstr "بوابة البريد الالكتروني"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: code:addons/base/ir/ir_mail_server.py:439
|
#: code:addons/base/ir/ir_mail_server.py:439
|
||||||
|
@ -3957,7 +3976,7 @@ msgstr "البرتغال"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_share
|
#: model:ir.module.module,shortdesc:base.module_share
|
||||||
msgid "Share any Document"
|
msgid "Share any Document"
|
||||||
msgstr ""
|
msgstr "مشاركة اي مستند"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:ir.module.module,certificate:0
|
#: field:ir.module.module,certificate:0
|
||||||
|
@ -4235,6 +4254,8 @@ msgid ""
|
||||||
"When no specific mail server is requested for a mail, the highest priority "
|
"When no specific mail server is requested for a mail, the highest priority "
|
||||||
"one is used. Default priority is 10 (smaller number = higher priority)"
|
"one is used. Default priority is 10 (smaller number = higher priority)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"حين إستداعاء البريد من الخادم، يتم اختيار الملف الملقم حسب الاولوية.\r\n"
|
||||||
|
"القيمة الافتراضية هي 10 (الارقام الاصغر= اولوية أعلى)"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,description:base.module_crm_partner_assign
|
#: model:ir.module.module,description:base.module_crm_partner_assign
|
||||||
|
@ -4291,7 +4312,7 @@ msgstr "\"كود\" لابد أن يكون فريداً"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_hr_expense
|
#: model:ir.module.module,shortdesc:base.module_hr_expense
|
||||||
msgid "Expenses Management"
|
msgid "Expenses Management"
|
||||||
msgstr ""
|
msgstr "إدارة المصروفات و النفقات"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:workflow.activity:0
|
#: view:workflow.activity:0
|
||||||
|
@ -4438,7 +4459,7 @@ msgstr "غينيا الاستوائية"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_warning
|
#: model:ir.module.module,shortdesc:base.module_warning
|
||||||
msgid "Warning Messages and Alerts"
|
msgid "Warning Messages and Alerts"
|
||||||
msgstr ""
|
msgstr "رسائل التحذير و الاشعارات"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:base.module.import:0
|
#: view:base.module.import:0
|
||||||
|
@ -4613,7 +4634,7 @@ msgstr "ليسوتو"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_base_vat
|
#: model:ir.module.module,shortdesc:base.module_base_vat
|
||||||
msgid "VAT Number Validation"
|
msgid "VAT Number Validation"
|
||||||
msgstr ""
|
msgstr "التحقق من رقم ضريبة القيمة المضافة"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_crm_partner_assign
|
#: model:ir.module.module,shortdesc:base.module_crm_partner_assign
|
||||||
|
@ -4759,7 +4780,7 @@ msgstr "قيمة لاحقة من السجل للمسلسل"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: help:ir.mail_server,smtp_user:0
|
#: help:ir.mail_server,smtp_user:0
|
||||||
msgid "Optional username for SMTP authentication"
|
msgid "Optional username for SMTP authentication"
|
||||||
msgstr ""
|
msgstr "اختياري: اسم المستخدم للتحقق من قبل ملقم البريد"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.model,name:base.model_ir_actions_actions
|
#: model:ir.model,name:base.model_ir_actions_actions
|
||||||
|
@ -4844,7 +4865,7 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: help:res.partner.bank,company_id:0
|
#: help:res.partner.bank,company_id:0
|
||||||
msgid "Only if this bank account belong to your company"
|
msgid "Only if this bank account belong to your company"
|
||||||
msgstr ""
|
msgstr "فقط إذا كان هذا الحساب مملوكا لشركتك"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:res.country,name:base.za
|
#: model:res.country,name:base.za
|
||||||
|
@ -5171,7 +5192,7 @@ msgstr "حقل"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_project_long_term
|
#: model:ir.module.module,shortdesc:base.module_project_long_term
|
||||||
msgid "Long Term Projects"
|
msgid "Long Term Projects"
|
||||||
msgstr ""
|
msgstr "مشروعات المدى البعيد"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:res.country,name:base.ve
|
#: model:res.country,name:base.ve
|
||||||
|
@ -12982,7 +13003,7 @@ msgstr "الصحراء الغربية"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.category,name:base.module_category_account_voucher
|
#: model:ir.module.category,name:base.module_category_account_voucher
|
||||||
msgid "Invoicing & Payments"
|
msgid "Invoicing & Payments"
|
||||||
msgstr ""
|
msgstr "الفواتير و المدفوعات"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.actions.act_window,help:base.action_res_company_form
|
#: model:ir.actions.act_window,help:base.action_res_company_form
|
||||||
|
@ -13186,7 +13207,7 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:res.partner.bank,bank_name:0
|
#: field:res.partner.bank,bank_name:0
|
||||||
msgid "Bank Name"
|
msgid "Bank Name"
|
||||||
msgstr ""
|
msgstr "اسم البنك"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:res.country,name:base.ki
|
#: model:res.country,name:base.ki
|
||||||
|
@ -13232,6 +13253,8 @@ msgid ""
|
||||||
"are available. To add a new language, you can use the 'Load an Official "
|
"are available. To add a new language, you can use the 'Load an Official "
|
||||||
"Translation' wizard available from the 'Administration' menu."
|
"Translation' wizard available from the 'Administration' menu."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"اللغة الافتراضية المستخدمة في الواجهات، عندما تكون هناك ترجمات متوفرة. "
|
||||||
|
"لإضافة لغة جديدة، يمكنك استخدام 'تحميل ترجمة رسمية' من قائمة \"إدارة\"."
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,description:base.module_l10n_es
|
#: model:ir.module.module,description:base.module_l10n_es
|
||||||
|
@ -13265,7 +13288,7 @@ msgstr "ملف CSV"
|
||||||
#: code:addons/base/res/res_company.py:154
|
#: code:addons/base/res/res_company.py:154
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Phone: "
|
msgid "Phone: "
|
||||||
msgstr ""
|
msgstr "هاتف "
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:res.company,account_no:0
|
#: field:res.company,account_no:0
|
||||||
|
@ -13304,7 +13327,7 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:res.company,vat:0
|
#: field:res.company,vat:0
|
||||||
msgid "Tax ID"
|
msgid "Tax ID"
|
||||||
msgstr ""
|
msgstr "رقم الضرائب"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:ir.model.fields,field_description:0
|
#: field:ir.model.fields,field_description:0
|
||||||
|
@ -13426,7 +13449,7 @@ msgstr "الأنشطة"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_product
|
#: model:ir.module.module,shortdesc:base.module_product
|
||||||
msgid "Products & Pricelists"
|
msgid "Products & Pricelists"
|
||||||
msgstr ""
|
msgstr "المنتجات و قوائم الاسعار"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:ir.actions.act_window,auto_refresh:0
|
#: field:ir.actions.act_window,auto_refresh:0
|
||||||
|
@ -13477,7 +13500,7 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:ir.model.data,name:0
|
#: field:ir.model.data,name:0
|
||||||
msgid "External Identifier"
|
msgid "External Identifier"
|
||||||
msgstr ""
|
msgstr "مُعرف خارجي"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.actions.act_window,name:base.grant_menu_access
|
#: model:ir.actions.act_window,name:base.grant_menu_access
|
||||||
|
@ -13542,7 +13565,7 @@ msgstr "تصدير"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_l10n_nl
|
#: model:ir.module.module,shortdesc:base.module_l10n_nl
|
||||||
msgid "Netherlands - Accounting"
|
msgid "Netherlands - Accounting"
|
||||||
msgstr ""
|
msgstr "هولندا - محاسبة"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:res.bank,bic:0
|
#: field:res.bank,bic:0
|
||||||
|
@ -13651,7 +13674,7 @@ msgstr "الدليل التقني"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:res.company:0
|
#: view:res.company:0
|
||||||
msgid "Address Information"
|
msgid "Address Information"
|
||||||
msgstr ""
|
msgstr "معلومات العنوان"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:res.country,name:base.tz
|
#: model:res.country,name:base.tz
|
||||||
|
@ -13676,7 +13699,7 @@ msgstr "جزيرة الكريسماس"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_web_livechat
|
#: model:ir.module.module,shortdesc:base.module_web_livechat
|
||||||
msgid "Live Chat Support"
|
msgid "Live Chat Support"
|
||||||
msgstr ""
|
msgstr "التحدث مع الدعم الفني"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:ir.actions.server:0
|
#: view:ir.actions.server:0
|
||||||
|
@ -13876,7 +13899,7 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: help:ir.actions.act_window,usage:0
|
#: help:ir.actions.act_window,usage:0
|
||||||
msgid "Used to filter menu and home actions from the user form."
|
msgid "Used to filter menu and home actions from the user form."
|
||||||
msgstr ""
|
msgstr "تستخدم لتصفية القائمة و الإجراءات الرئيسية من النموذج المستخدم."
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:res.country,name:base.sa
|
#: model:res.country,name:base.sa
|
||||||
|
@ -13886,7 +13909,7 @@ msgstr "المملكة العربية السعودية"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: help:res.company,rml_header1:0
|
#: help:res.company,rml_header1:0
|
||||||
msgid "Appears by default on the top right corner of your printed documents."
|
msgid "Appears by default on the top right corner of your printed documents."
|
||||||
msgstr ""
|
msgstr "يظهر إفتراضيا في أعلى الزاوية اليمنى من الوثائق المطبوعة."
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_fetchmail_crm_claim
|
#: model:ir.module.module,shortdesc:base.module_fetchmail_crm_claim
|
||||||
|
@ -13989,7 +14012,7 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,description:base.module_auth_openid
|
#: model:ir.module.module,description:base.module_auth_openid
|
||||||
msgid "Allow users to login through OpenID."
|
msgid "Allow users to login through OpenID."
|
||||||
msgstr ""
|
msgstr "السماح للمستخدمين بالدخول باستخدام أوبن أي دي(OpenID)."
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_account_payment
|
#: model:ir.module.module,shortdesc:base.module_account_payment
|
||||||
|
@ -14036,7 +14059,7 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_report_designer
|
#: model:ir.module.module,shortdesc:base.module_report_designer
|
||||||
msgid "Report Designer"
|
msgid "Report Designer"
|
||||||
msgstr ""
|
msgstr "مصمم التقارير"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.ui.menu,name:base.menu_address_book
|
#: model:ir.ui.menu,name:base.menu_address_book
|
||||||
|
@ -14075,7 +14098,7 @@ msgstr "الفرص والفرص المحتملة"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: selection:base.language.install,lang:0
|
#: selection:base.language.install,lang:0
|
||||||
msgid "Romanian / română"
|
msgid "Romanian / română"
|
||||||
msgstr ""
|
msgstr "الرومانية / română"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:res.log:0
|
#: view:res.log:0
|
||||||
|
@ -14129,7 +14152,7 @@ msgstr "تنفيذ للإنشاء"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:res.country,name:base.vi
|
#: model:res.country,name:base.vi
|
||||||
msgid "Virgin Islands (USA)"
|
msgid "Virgin Islands (USA)"
|
||||||
msgstr ""
|
msgstr "جزيرة فيرجين - (الولايات المتحدة اﻻمريكية)"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:res.country,name:base.tw
|
#: model:res.country,name:base.tw
|
||||||
|
@ -14169,12 +14192,12 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:ir.ui.view,field_parent:0
|
#: field:ir.ui.view,field_parent:0
|
||||||
msgid "Child Field"
|
msgid "Child Field"
|
||||||
msgstr ""
|
msgstr "حقل فرعي."
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:ir.rule:0
|
#: view:ir.rule:0
|
||||||
msgid "Detailed algorithm:"
|
msgid "Detailed algorithm:"
|
||||||
msgstr ""
|
msgstr "تفاصيل الخوارزمية."
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:ir.actions.act_window,usage:0
|
#: field:ir.actions.act_window,usage:0
|
||||||
|
@ -14195,7 +14218,7 @@ msgstr "workflow.workitem"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_profile_tools
|
#: model:ir.module.module,shortdesc:base.module_profile_tools
|
||||||
msgid "Miscellaneous Tools"
|
msgid "Miscellaneous Tools"
|
||||||
msgstr ""
|
msgstr "أدوات متنوعة."
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.category,description:base.module_category_tools
|
#: model:ir.module.category,description:base.module_category_tools
|
||||||
|
@ -14242,7 +14265,7 @@ msgstr "عرض:"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:ir.model.fields,view_load:0
|
#: field:ir.model.fields,view_load:0
|
||||||
msgid "View Auto-Load"
|
msgid "View Auto-Load"
|
||||||
msgstr ""
|
msgstr "عرض التحميل التلقائي"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: code:addons/base/ir/ir_model.py:264
|
#: code:addons/base/ir/ir_model.py:264
|
||||||
|
@ -14268,7 +14291,7 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:ir.ui.menu,web_icon:0
|
#: field:ir.ui.menu,web_icon:0
|
||||||
msgid "Web Icon File"
|
msgid "Web Icon File"
|
||||||
msgstr ""
|
msgstr "ملف ايقونة الويب"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:base.module.upgrade:0
|
#: view:base.module.upgrade:0
|
||||||
|
@ -14289,7 +14312,7 @@ msgstr "Persian / فارسي"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:ir.actions.act_window:0
|
#: view:ir.actions.act_window:0
|
||||||
msgid "View Ordering"
|
msgid "View Ordering"
|
||||||
msgstr ""
|
msgstr "عرض الطلبات"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: code:addons/base/module/wizard/base_module_upgrade.py:95
|
#: code:addons/base/module/wizard/base_module_upgrade.py:95
|
||||||
|
@ -14375,7 +14398,7 @@ msgstr "جزيرة أروبا"
|
||||||
#: code:addons/base/module/wizard/base_module_import.py:60
|
#: code:addons/base/module/wizard/base_module_import.py:60
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "File is not a zip file!"
|
msgid "File is not a zip file!"
|
||||||
msgstr ""
|
msgstr "الملف ليس ملف مضغوط(zip)!!"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:res.country,name:base.ar
|
#: model:res.country,name:base.ar
|
||||||
|
@ -14504,7 +14527,7 @@ msgstr "عقد ضمان الناشر"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: selection:base.language.install,lang:0
|
#: selection:base.language.install,lang:0
|
||||||
msgid "Bulgarian / български език"
|
msgid "Bulgarian / български език"
|
||||||
msgstr ""
|
msgstr "البلغارية / български език"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.ui.menu,name:base.menu_aftersale
|
#: model:ir.ui.menu,name:base.menu_aftersale
|
||||||
|
@ -14514,7 +14537,7 @@ msgstr "خدمات بعد البيع"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_l10n_fr
|
#: model:ir.module.module,shortdesc:base.module_l10n_fr
|
||||||
msgid "France - Accounting"
|
msgid "France - Accounting"
|
||||||
msgstr ""
|
msgstr "فرنسا - محاسبة"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:ir.actions.todo:0
|
#: view:ir.actions.todo:0
|
||||||
|
@ -14651,7 +14674,7 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: selection:base.language.install,lang:0
|
#: selection:base.language.install,lang:0
|
||||||
msgid "Czech / Čeština"
|
msgid "Czech / Čeština"
|
||||||
msgstr ""
|
msgstr "التشيكية / Čeština"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.category,name:base.module_category_generic_modules
|
#: model:ir.module.category,name:base.module_category_generic_modules
|
||||||
|
@ -14778,7 +14801,7 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_plugin_thunderbird
|
#: model:ir.module.module,shortdesc:base.module_plugin_thunderbird
|
||||||
msgid "Thunderbird Plug-In"
|
msgid "Thunderbird Plug-In"
|
||||||
msgstr ""
|
msgstr "اضافات - ثندربيرد"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.model,name:base.model_res_country
|
#: model:ir.model,name:base.model_res_country
|
||||||
|
@ -14796,7 +14819,7 @@ msgstr "الدولة"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_project_messages
|
#: model:ir.module.module,shortdesc:base.module_project_messages
|
||||||
msgid "In-Project Messaging System"
|
msgid "In-Project Messaging System"
|
||||||
msgstr ""
|
msgstr "نظام المراسلة في المشاريع"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:res.country,name:base.pn
|
#: model:res.country,name:base.pn
|
||||||
|
@ -14827,7 +14850,7 @@ msgstr ""
|
||||||
#: view:res.partner:0
|
#: view:res.partner:0
|
||||||
#: view:res.partner.address:0
|
#: view:res.partner.address:0
|
||||||
msgid "Change Color"
|
msgid "Change Color"
|
||||||
msgstr ""
|
msgstr "تغيير اللون"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:res.partner.category,name:base.res_partner_category_15
|
#: model:res.partner.category,name:base.res_partner_category_15
|
||||||
|
@ -14861,7 +14884,7 @@ msgstr ""
|
||||||
#. module: base
|
#. module: base
|
||||||
#: field:ir.module.module,auto_install:0
|
#: field:ir.module.module,auto_install:0
|
||||||
msgid "Automatic Installation"
|
msgid "Automatic Installation"
|
||||||
msgstr ""
|
msgstr "تحميل تلقائي"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:res.country,name:base.jp
|
#: model:res.country,name:base.jp
|
||||||
|
@ -14930,7 +14953,7 @@ msgstr "ir.actions.server"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.module,shortdesc:base.module_l10n_ca
|
#: model:ir.module.module,shortdesc:base.module_l10n_ca
|
||||||
msgid "Canada - Accounting"
|
msgid "Canada - Accounting"
|
||||||
msgstr ""
|
msgstr "كندا - محاسبة"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.actions.act_window,name:base.act_ir_actions_todo_form
|
#: model:ir.actions.act_window,name:base.act_ir_actions_todo_form
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -8,14 +8,14 @@ msgstr ""
|
||||||
"Project-Id-Version: openobject-server\n"
|
"Project-Id-Version: openobject-server\n"
|
||||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"POT-Creation-Date: 2012-02-08 00:44+0000\n"
|
"POT-Creation-Date: 2012-02-08 00:44+0000\n"
|
||||||
"PO-Revision-Date: 2012-03-09 06:40+0000\n"
|
"PO-Revision-Date: 2012-03-13 11:33+0000\n"
|
||||||
"Last-Translator: Serpent Consulting Services <Unknown>\n"
|
"Last-Translator: Serpent Consulting Services <Unknown>\n"
|
||||||
"Language-Team: Gujarati <gu@li.org>\n"
|
"Language-Team: Gujarati <gu@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Launchpad-Export-Date: 2012-03-10 04:48+0000\n"
|
"X-Launchpad-Export-Date: 2012-03-14 04:42+0000\n"
|
||||||
"X-Generator: Launchpad (build 14914)\n"
|
"X-Generator: Launchpad (build 14933)\n"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:res.country,name:base.sh
|
#: model:res.country,name:base.sh
|
||||||
|
@ -379,12 +379,12 @@ msgstr "વિઝાર્ડ નુ નામ"
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:res.groups,name:base.group_partner_manager
|
#: model:res.groups,name:base.group_partner_manager
|
||||||
msgid "Partner Manager"
|
msgid "Partner Manager"
|
||||||
msgstr ""
|
msgstr "ભાગીદાર વ્યવસ્થાપક"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: model:ir.module.category,name:base.module_category_customer_relationship_management
|
#: model:ir.module.category,name:base.module_category_customer_relationship_management
|
||||||
msgid "Customer Relationship Management"
|
msgid "Customer Relationship Management"
|
||||||
msgstr ""
|
msgstr "ગ્રાહક સંબંધ વ્યવસ્થા(સી.આર.એમ.)"
|
||||||
|
|
||||||
#. module: base
|
#. module: base
|
||||||
#: view:ir.module.module:0
|
#: view:ir.module.module:0
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -54,11 +54,11 @@ class ir_attachment(osv.osv):
|
||||||
ima.check(cr, uid, model, mode)
|
ima.check(cr, uid, model, mode)
|
||||||
self.pool.get(model).check_access_rule(cr, uid, mids, mode, context=context)
|
self.pool.get(model).check_access_rule(cr, uid, mids, mode, context=context)
|
||||||
|
|
||||||
def search(self, cr, uid, args, offset=0, limit=None, order=None,
|
def _search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False, access_rights_uid=None):
|
||||||
context=None, count=False):
|
ids = super(ir_attachment, self)._search(cr, uid, args, offset=offset,
|
||||||
ids = super(ir_attachment, self).search(cr, uid, args, offset=offset,
|
|
||||||
limit=limit, order=order,
|
limit=limit, order=order,
|
||||||
context=context, count=False)
|
context=context, count=count,
|
||||||
|
access_rights_uid=access_rights_uid)
|
||||||
if not ids:
|
if not ids:
|
||||||
if count:
|
if count:
|
||||||
return 0
|
return 0
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#
|
#
|
||||||
# OpenERP, Open Source Management Solution
|
# OpenERP, Open Source Management Solution
|
||||||
# Copyright (C) 2011 OpenERP S.A (<http://www.openerp.com>)
|
# Copyright (C) 2011-2012 OpenERP S.A (<http://www.openerp.com>)
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
@ -232,6 +232,11 @@ class ir_mail_server(osv.osv):
|
||||||
|
|
||||||
if user:
|
if user:
|
||||||
# Attempt authentication - will raise if AUTH service not supported
|
# Attempt authentication - will raise if AUTH service not supported
|
||||||
|
# The user/password must be converted to bytestrings in order to be usable for
|
||||||
|
# certain hashing schemes, like HMAC.
|
||||||
|
# See also bug #597143 and python issue #5285
|
||||||
|
user = tools.ustr(user).encode('utf-8')
|
||||||
|
password = tools.ustr(password).encode('utf-8')
|
||||||
connection.login(user, password)
|
connection.login(user, password)
|
||||||
return connection
|
return connection
|
||||||
|
|
||||||
|
@ -364,7 +369,6 @@ class ir_mail_server(osv.osv):
|
||||||
:param smtp_user: optional SMTP user, if mail_server_id is not passed
|
:param smtp_user: optional SMTP user, if mail_server_id is not passed
|
||||||
:param smtp_password: optional SMTP password to use, if mail_server_id is not passed
|
:param smtp_password: optional SMTP password to use, if mail_server_id is not passed
|
||||||
:param smtp_debug: optional SMTP debug flag, if mail_server_id is not passed
|
:param smtp_debug: optional SMTP debug flag, if mail_server_id is not passed
|
||||||
:param debug: whether to turn on the SMTP level debugging, output to DEBUG log level
|
|
||||||
:return: the Message-ID of the message that was just sent, if successfully sent, otherwise raises
|
:return: the Message-ID of the message that was just sent, if successfully sent, otherwise raises
|
||||||
MailDeliveryException and logs root cause.
|
MailDeliveryException and logs root cause.
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -36,12 +36,14 @@ import pooler
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
def _get_fields_type(self, cr, uid, context=None):
|
def _get_fields_type(self, cr, uid, context=None):
|
||||||
|
# Avoid too many nested `if`s below, as RedHat's Python 2.6
|
||||||
|
# break on it. See bug 939653.
|
||||||
return sorted([(k,k) for k,v in fields.__dict__.iteritems()
|
return sorted([(k,k) for k,v in fields.__dict__.iteritems()
|
||||||
if type(v) == types.TypeType
|
if type(v) == types.TypeType and \
|
||||||
if issubclass(v, fields._column)
|
issubclass(v, fields._column) and \
|
||||||
if v != fields._column
|
v != fields._column and \
|
||||||
if not v._deprecated
|
not v._deprecated and \
|
||||||
if not issubclass(v, fields.function)])
|
not issubclass(v, fields.function)])
|
||||||
|
|
||||||
def _in_modules(self, cr, uid, ids, field_name, arg, context=None):
|
def _in_modules(self, cr, uid, ids, field_name, arg, context=None):
|
||||||
#pseudo-method used by fields.function in ir.model/ir.model.fields
|
#pseudo-method used by fields.function in ir.model/ir.model.fields
|
||||||
|
|
|
@ -75,7 +75,7 @@ class ir_rule(osv.osv):
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
'name': fields.char('Name', size=128, select=1),
|
'name': fields.char('Name', size=128, select=1),
|
||||||
'model_id': fields.many2one('ir.model', 'Object',select=1, required=True, ondelete='cascade'),
|
'model_id': fields.many2one('ir.model', 'Object',select=1, required=True, ondelete="cascade"),
|
||||||
'global': fields.function(_get_value, string='Global', type='boolean', store=True, help="If no group is specified the rule is global and applied to everyone"),
|
'global': fields.function(_get_value, string='Global', type='boolean', store=True, help="If no group is specified the rule is global and applied to everyone"),
|
||||||
'groups': fields.many2many('res.groups', 'rule_group_rel', 'rule_group_id', 'group_id', 'Groups'),
|
'groups': fields.many2many('res.groups', 'rule_group_rel', 'rule_group_id', 'group_id', 'Groups'),
|
||||||
'domain_force': fields.text('Domain'),
|
'domain_force': fields.text('Domain'),
|
||||||
|
|
|
@ -42,6 +42,9 @@ class base_module_upgrade(osv.osv_memory):
|
||||||
@return: New arch of view.
|
@return: New arch of view.
|
||||||
"""
|
"""
|
||||||
res = super(base_module_upgrade, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar,submenu=False)
|
res = super(base_module_upgrade, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar,submenu=False)
|
||||||
|
if view_type != 'form':
|
||||||
|
return res
|
||||||
|
|
||||||
record_id = context and context.get('active_id', False) or False
|
record_id = context and context.get('active_id', False) or False
|
||||||
active_model = context.get('active_model')
|
active_model = context.get('active_model')
|
||||||
if (not record_id) or (not active_model):
|
if (not record_id) or (not active_model):
|
||||||
|
|
|
@ -21,6 +21,23 @@
|
||||||
|
|
||||||
from osv import fields, osv
|
from osv import fields, osv
|
||||||
|
|
||||||
|
def location_name_search(self, cr, user, name='', args=None, operator='ilike',
|
||||||
|
context=None, limit=100):
|
||||||
|
if not args:
|
||||||
|
args = []
|
||||||
|
|
||||||
|
ids = []
|
||||||
|
if len(name) == 2:
|
||||||
|
ids = self.search(cr, user, [('code', 'ilike', name)] + args,
|
||||||
|
limit=limit, context=context)
|
||||||
|
|
||||||
|
search_domain = [('name', operator, name)]
|
||||||
|
if ids: search_domain.append(('id', 'not in', ids))
|
||||||
|
ids.extend(self.search(cr, user, search_domain + args,
|
||||||
|
limit=limit, context=context))
|
||||||
|
|
||||||
|
locations = self.name_get(cr, user, ids, context)
|
||||||
|
return sorted(locations, key=lambda (id, name): ids.index(id))
|
||||||
|
|
||||||
class Country(osv.osv):
|
class Country(osv.osv):
|
||||||
_name = 'res.country'
|
_name = 'res.country'
|
||||||
|
@ -48,23 +65,10 @@ addresses belonging to this country.\n\nYou can use the python-style string pate
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'address_format': "%(street)s\n%(street2)s\n%(city)s,%(state_code)s %(zip)s\n%(country_name)s",
|
'address_format': "%(street)s\n%(street2)s\n%(city)s,%(state_code)s %(zip)s\n%(country_name)s",
|
||||||
}
|
}
|
||||||
|
|
||||||
def name_search(self, cr, user, name='', args=None, operator='ilike',
|
|
||||||
context=None, limit=100):
|
|
||||||
if not args:
|
|
||||||
args=[]
|
|
||||||
if not context:
|
|
||||||
context={}
|
|
||||||
ids = False
|
|
||||||
if len(name) == 2:
|
|
||||||
ids = self.search(cr, user, [('code', 'ilike', name)] + args,
|
|
||||||
limit=limit, context=context)
|
|
||||||
if not ids:
|
|
||||||
ids = self.search(cr, user, [('name', operator, name)] + args,
|
|
||||||
limit=limit, context=context)
|
|
||||||
return self.name_get(cr, user, ids, context)
|
|
||||||
_order='name'
|
_order='name'
|
||||||
|
|
||||||
|
name_search = location_name_search
|
||||||
|
|
||||||
def create(self, cursor, user, vals, context=None):
|
def create(self, cursor, user, vals, context=None):
|
||||||
if 'code' in vals:
|
if 'code' in vals:
|
||||||
vals['code'] = vals['code'].upper()
|
vals['code'] = vals['code'].upper()
|
||||||
|
@ -77,8 +81,6 @@ addresses belonging to this country.\n\nYou can use the python-style string pate
|
||||||
return super(Country, self).write(cursor, user, ids, vals,
|
return super(Country, self).write(cursor, user, ids, vals,
|
||||||
context=context)
|
context=context)
|
||||||
|
|
||||||
Country()
|
|
||||||
|
|
||||||
|
|
||||||
class CountryState(osv.osv):
|
class CountryState(osv.osv):
|
||||||
_description="Country state"
|
_description="Country state"
|
||||||
|
@ -90,23 +92,9 @@ class CountryState(osv.osv):
|
||||||
'code': fields.char('State Code', size=3,
|
'code': fields.char('State Code', size=3,
|
||||||
help='The state code in three chars.\n', required=True),
|
help='The state code in three chars.\n', required=True),
|
||||||
}
|
}
|
||||||
def name_search(self, cr, user, name='', args=None, operator='ilike',
|
|
||||||
context=None, limit=100):
|
|
||||||
if not args:
|
|
||||||
args = []
|
|
||||||
if not context:
|
|
||||||
context = {}
|
|
||||||
ids = self.search(cr, user, [('code', 'ilike', name)] + args, limit=limit,
|
|
||||||
context=context)
|
|
||||||
if not ids:
|
|
||||||
ids = self.search(cr, user, [('name', operator, name)] + args,
|
|
||||||
limit=limit, context=context)
|
|
||||||
return self.name_get(cr, user, ids, context)
|
|
||||||
|
|
||||||
_order = 'code'
|
_order = 'code'
|
||||||
CountryState()
|
|
||||||
|
|
||||||
|
|
||||||
|
name_search = location_name_search
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||||
|
|
||||||
|
|
|
@ -121,17 +121,22 @@ def get_encodings(hint_encoding='utf-8'):
|
||||||
if prefenc:
|
if prefenc:
|
||||||
yield prefenc
|
yield prefenc
|
||||||
|
|
||||||
def ustr(value, hint_encoding='utf-8'):
|
def ustr(value, hint_encoding='utf-8', errors='strict'):
|
||||||
"""This method is similar to the builtin `str` method, except
|
"""This method is similar to the builtin `unicode`, except
|
||||||
it will return unicode() string.
|
that it may try multiple encodings to find one that works
|
||||||
|
for decoding `value`, and defaults to 'utf-8' first.
|
||||||
|
|
||||||
@param value: the value to convert
|
:param: value: the value to convert
|
||||||
@param hint_encoding: an optional encoding that was detected
|
:param: hint_encoding: an optional encoding that was detecte
|
||||||
upstream and should be tried first to
|
upstream and should be tried first to decode ``value``.
|
||||||
decode ``value``.
|
:param str error: optional `errors` flag to pass to the unicode
|
||||||
|
built-in to indicate how illegal character values should be
|
||||||
@rtype: unicode
|
treated when converting a string: 'strict', 'ignore' or 'replace'.
|
||||||
@return: unicode string
|
Passing anything other than 'strict' means that the first
|
||||||
|
encoding tried will be used, even if it's not the correct
|
||||||
|
one to use, so be careful! Ignore if value is not a string/unicode.
|
||||||
|
:rtype: unicode
|
||||||
|
:raise: UnicodeError if value cannot be coerced to unicode
|
||||||
"""
|
"""
|
||||||
if isinstance(value, Exception):
|
if isinstance(value, Exception):
|
||||||
return exception_to_unicode(value)
|
return exception_to_unicode(value)
|
||||||
|
@ -147,7 +152,7 @@ def ustr(value, hint_encoding='utf-8'):
|
||||||
|
|
||||||
for ln in get_encodings(hint_encoding):
|
for ln in get_encodings(hint_encoding):
|
||||||
try:
|
try:
|
||||||
return unicode(value, ln)
|
return unicode(value, ln, errors=errors)
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
raise UnicodeError('unable to convert %r' % (value,))
|
raise UnicodeError('unable to convert %r' % (value,))
|
||||||
|
|
|
@ -151,7 +151,7 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
|
||||||
_logger.debug('loading %d packages...', len(graph))
|
_logger.debug('loading %d packages...', len(graph))
|
||||||
|
|
||||||
# get db timestamp
|
# get db timestamp
|
||||||
cr.execute("select now()::timestamp")
|
cr.execute("select (now() at time zone 'UTC')::timestamp")
|
||||||
dt_before_load = cr.fetchone()[0]
|
dt_before_load = cr.fetchone()[0]
|
||||||
|
|
||||||
# register, instantiate and initialize models for each modules
|
# register, instantiate and initialize models for each modules
|
||||||
|
|
|
@ -357,6 +357,8 @@ def dispatch_rpc(service_name, method, params):
|
||||||
if rpc_request and rpc_response_flag:
|
if rpc_request and rpc_response_flag:
|
||||||
log(rpc_request,logging.DEBUG,'%s.%s'%(service_name,method), replace_request_password(params))
|
log(rpc_request,logging.DEBUG,'%s.%s'%(service_name,method), replace_request_password(params))
|
||||||
|
|
||||||
|
threading.current_thread().uid = None
|
||||||
|
threading.current_thread().dbname = None
|
||||||
result = ExportService.getService(service_name).dispatch(method, params)
|
result = ExportService.getService(service_name).dispatch(method, params)
|
||||||
|
|
||||||
if rpc_request_flag or rpc_response_flag:
|
if rpc_request_flag or rpc_response_flag:
|
||||||
|
|
|
@ -364,7 +364,15 @@ class time(_column):
|
||||||
class binary(_column):
|
class binary(_column):
|
||||||
_type = 'binary'
|
_type = 'binary'
|
||||||
_symbol_c = '%s'
|
_symbol_c = '%s'
|
||||||
_symbol_f = lambda symb: symb and Binary(symb) or None
|
|
||||||
|
# Binary values may be byte strings (python 2.6 byte array), but
|
||||||
|
# the legacy OpenERP convention is to transfer and store binaries
|
||||||
|
# as base64-encoded strings. The base64 string may be provided as a
|
||||||
|
# unicode in some circumstances, hence the str() cast in symbol_f.
|
||||||
|
# This str coercion will only work for pure ASCII unicode strings,
|
||||||
|
# on purpose - non base64 data must be passed as a 8bit byte strings.
|
||||||
|
_symbol_f = lambda symb: symb and Binary(str(symb)) or None
|
||||||
|
|
||||||
_symbol_set = (_symbol_c, _symbol_f)
|
_symbol_set = (_symbol_c, _symbol_f)
|
||||||
_symbol_get = lambda self, x: x and str(x)
|
_symbol_get = lambda self, x: x and str(x)
|
||||||
|
|
||||||
|
|
|
@ -750,7 +750,7 @@ class BaseModel(object):
|
||||||
name_id = 'model_'+self._name.replace('.', '_')
|
name_id = 'model_'+self._name.replace('.', '_')
|
||||||
cr.execute('select * from ir_model_data where name=%s and module=%s', (name_id, context['module']))
|
cr.execute('select * from ir_model_data where name=%s and module=%s', (name_id, context['module']))
|
||||||
if not cr.rowcount:
|
if not cr.rowcount:
|
||||||
cr.execute("INSERT INTO ir_model_data (name,date_init,date_update,module,model,res_id) VALUES (%s, now(), now(), %s, %s, %s)", \
|
cr.execute("INSERT INTO ir_model_data (name,date_init,date_update,module,model,res_id) VALUES (%s, (now() at time zone 'UTC'), (now() at time zone 'UTC'), %s, %s, %s)", \
|
||||||
(name_id, context['module'], 'ir.model', model_id)
|
(name_id, context['module'], 'ir.model', model_id)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -816,7 +816,7 @@ class BaseModel(object):
|
||||||
cr.execute("select name from ir_model_data where name=%s", (name1,))
|
cr.execute("select name from ir_model_data where name=%s", (name1,))
|
||||||
if cr.fetchone():
|
if cr.fetchone():
|
||||||
name1 = name1 + "_" + str(id)
|
name1 = name1 + "_" + str(id)
|
||||||
cr.execute("INSERT INTO ir_model_data (name,date_init,date_update,module,model,res_id) VALUES (%s, now(), now(), %s, %s, %s)", \
|
cr.execute("INSERT INTO ir_model_data (name,date_init,date_update,module,model,res_id) VALUES (%s, (now() at time zone 'UTC'), (now() at time zone 'UTC'), %s, %s, %s)", \
|
||||||
(name1, context['module'], 'ir.model.fields', id)
|
(name1, context['module'], 'ir.model.fields', id)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
|
@ -872,11 +872,11 @@ class BaseModel(object):
|
||||||
|
|
||||||
for parent_name in ((type(parent_names)==list) and parent_names or [parent_names]):
|
for parent_name in ((type(parent_names)==list) and parent_names or [parent_names]):
|
||||||
parent_model = pool.get(parent_name)
|
parent_model = pool.get(parent_name)
|
||||||
if not getattr(cls, '_original_module', None) and name == parent_model._name:
|
|
||||||
cls._original_module = parent_model._original_module
|
|
||||||
if not parent_model:
|
if not parent_model:
|
||||||
raise TypeError('The model "%s" specifies an unexisting parent class "%s"\n'
|
raise TypeError('The model "%s" specifies an unexisting parent class "%s"\n'
|
||||||
'You may need to add a dependency on the parent class\' module.' % (name, parent_name))
|
'You may need to add a dependency on the parent class\' module.' % (name, parent_name))
|
||||||
|
if not getattr(cls, '_original_module', None) and name == parent_model._name:
|
||||||
|
cls._original_module = parent_model._original_module
|
||||||
parent_class = parent_model.__class__
|
parent_class = parent_model.__class__
|
||||||
nattr = {}
|
nattr = {}
|
||||||
for s in attributes:
|
for s in attributes:
|
||||||
|
@ -2734,6 +2734,50 @@ class BaseModel(object):
|
||||||
_schema.debug("Table '%s': added foreign key '%s' with definition=REFERENCES \"%s\" ON DELETE %s",
|
_schema.debug("Table '%s': added foreign key '%s' with definition=REFERENCES \"%s\" ON DELETE %s",
|
||||||
source_table, source_field, dest_model._table, ondelete)
|
source_table, source_field, dest_model._table, ondelete)
|
||||||
|
|
||||||
|
def _drop_constraint(self, cr, source_table, constraint_name):
|
||||||
|
cr.execute("ALTER TABLE %s DROP CONSTRAINT %s" % (source_table,constraint_name))
|
||||||
|
|
||||||
|
def _m2o_fix_foreign_key(self, cr, source_table, source_field, dest_model, ondelete):
|
||||||
|
# Find FK constraint(s) currently established for the m2o field,
|
||||||
|
# and see whether they are stale or not
|
||||||
|
cr.execute("""SELECT confdeltype as ondelete_rule, conname as constraint_name,
|
||||||
|
cl2.relname as foreign_table
|
||||||
|
FROM pg_constraint as con, pg_class as cl1, pg_class as cl2,
|
||||||
|
pg_attribute as att1, pg_attribute as att2
|
||||||
|
WHERE con.conrelid = cl1.oid
|
||||||
|
AND cl1.relname = %s
|
||||||
|
AND con.confrelid = cl2.oid
|
||||||
|
AND array_lower(con.conkey, 1) = 1
|
||||||
|
AND con.conkey[1] = att1.attnum
|
||||||
|
AND att1.attrelid = cl1.oid
|
||||||
|
AND att1.attname = %s
|
||||||
|
AND array_lower(con.confkey, 1) = 1
|
||||||
|
AND con.confkey[1] = att2.attnum
|
||||||
|
AND att2.attrelid = cl2.oid
|
||||||
|
AND att2.attname = %s
|
||||||
|
AND con.contype = 'f'""", (source_table, source_field, 'id'))
|
||||||
|
constraints = cr.dictfetchall()
|
||||||
|
if constraints:
|
||||||
|
if len(constraints) == 1:
|
||||||
|
# Is it the right constraint?
|
||||||
|
cons, = constraints
|
||||||
|
if cons['ondelete_rule'] != POSTGRES_CONFDELTYPES.get((ondelete or 'set null').upper(), 'a')\
|
||||||
|
or cons['foreign_table'] != dest_model._table:
|
||||||
|
_schema.debug("Table '%s': dropping obsolete FK constraint: '%s'",
|
||||||
|
source_table, cons['constraint_name'])
|
||||||
|
self._drop_constraint(cr, source_table, cons['constraint_name'])
|
||||||
|
self._m2o_add_foreign_key_checked(source_field, dest_model, ondelete)
|
||||||
|
# else it's all good, nothing to do!
|
||||||
|
else:
|
||||||
|
# Multiple FKs found for the same field, drop them all, and re-create
|
||||||
|
for cons in constraints:
|
||||||
|
_schema.debug("Table '%s': dropping duplicate FK constraints: '%s'",
|
||||||
|
source_table, cons['constraint_name'])
|
||||||
|
self._drop_constraint(cr, source_table, cons['constraint_name'])
|
||||||
|
self._m2o_add_foreign_key_checked(source_field, dest_model, ondelete)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def _auto_init(self, cr, context=None):
|
def _auto_init(self, cr, context=None):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -2932,31 +2976,8 @@ class BaseModel(object):
|
||||||
|
|
||||||
if isinstance(f, fields.many2one):
|
if isinstance(f, fields.many2one):
|
||||||
dest_model = self.pool.get(f._obj)
|
dest_model = self.pool.get(f._obj)
|
||||||
ref = dest_model._table
|
if dest_model._table != 'ir_actions':
|
||||||
if ref != 'ir_actions':
|
self._m2o_fix_foreign_key(cr, self._table, k, dest_model, f.ondelete)
|
||||||
cr.execute('SELECT confdeltype, conname FROM pg_constraint as con, pg_class as cl1, pg_class as cl2, '
|
|
||||||
'pg_attribute as att1, pg_attribute as att2 '
|
|
||||||
'WHERE con.conrelid = cl1.oid '
|
|
||||||
'AND cl1.relname = %s '
|
|
||||||
'AND con.confrelid = cl2.oid '
|
|
||||||
'AND cl2.relname = %s '
|
|
||||||
'AND array_lower(con.conkey, 1) = 1 '
|
|
||||||
'AND con.conkey[1] = att1.attnum '
|
|
||||||
'AND att1.attrelid = cl1.oid '
|
|
||||||
'AND att1.attname = %s '
|
|
||||||
'AND array_lower(con.confkey, 1) = 1 '
|
|
||||||
'AND con.confkey[1] = att2.attnum '
|
|
||||||
'AND att2.attrelid = cl2.oid '
|
|
||||||
'AND att2.attname = %s '
|
|
||||||
"AND con.contype = 'f'", (self._table, ref, k, 'id'))
|
|
||||||
res2 = cr.dictfetchall()
|
|
||||||
if res2:
|
|
||||||
if res2[0]['confdeltype'] != POSTGRES_CONFDELTYPES.get((f.ondelete or 'set null').upper(), 'a'):
|
|
||||||
cr.execute('ALTER TABLE "' + self._table + '" DROP CONSTRAINT "' + res2[0]['conname'] + '"')
|
|
||||||
self._m2o_add_foreign_key_checked(k, dest_model, f.ondelete)
|
|
||||||
cr.commit()
|
|
||||||
_schema.debug("Table '%s': column '%s': XXX",
|
|
||||||
self._table, k)
|
|
||||||
|
|
||||||
# The field doesn't exist in database. Create it if necessary.
|
# The field doesn't exist in database. Create it if necessary.
|
||||||
else:
|
else:
|
||||||
|
@ -3164,6 +3185,9 @@ class BaseModel(object):
|
||||||
_sql_constraints.
|
_sql_constraints.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
def unify_cons_text(txt):
|
||||||
|
return txt.lower().replace(', ',',').replace(' (','(')
|
||||||
|
|
||||||
for (key, con, _) in self._sql_constraints:
|
for (key, con, _) in self._sql_constraints:
|
||||||
conname = '%s_%s' % (self._table, key)
|
conname = '%s_%s' % (self._table, key)
|
||||||
|
|
||||||
|
@ -3192,7 +3216,7 @@ class BaseModel(object):
|
||||||
# constraint does not exists:
|
# constraint does not exists:
|
||||||
sql_actions['add']['execute'] = True
|
sql_actions['add']['execute'] = True
|
||||||
sql_actions['add']['msg_err'] = sql_actions['add']['msg_err'] % (sql_actions['add']['query'], )
|
sql_actions['add']['msg_err'] = sql_actions['add']['msg_err'] % (sql_actions['add']['query'], )
|
||||||
elif con.lower() not in [item['condef'].lower() for item in existing_constraints]:
|
elif unify_cons_text(con) not in [unify_cons_text(item['condef']) for item in existing_constraints]:
|
||||||
# constraint exists but its definition has changed:
|
# constraint exists but its definition has changed:
|
||||||
sql_actions['drop']['execute'] = True
|
sql_actions['drop']['execute'] = True
|
||||||
sql_actions['drop']['msg_ok'] = sql_actions['drop']['msg_ok'] % (existing_constraints[0]['condef'].lower(), )
|
sql_actions['drop']['msg_ok'] = sql_actions['drop']['msg_ok'] % (existing_constraints[0]['condef'].lower(), )
|
||||||
|
@ -3208,10 +3232,8 @@ class BaseModel(object):
|
||||||
cr.commit()
|
cr.commit()
|
||||||
_schema.debug(sql_action['msg_ok'])
|
_schema.debug(sql_action['msg_ok'])
|
||||||
name_id = 'constraint_'+ conname
|
name_id = 'constraint_'+ conname
|
||||||
cr.execute('select conname from pg_constraint where contype=%s and conname=%s',('u', conname),)
|
|
||||||
existing_const = cr.fetchall()
|
|
||||||
cr.execute('select * from ir_model_data where name=%s and module=%s', (name_id, module))
|
cr.execute('select * from ir_model_data where name=%s and module=%s', (name_id, module))
|
||||||
if not cr.rowcount and not existing_const:
|
if not cr.rowcount:
|
||||||
cr.execute("INSERT INTO ir_model_data (name,date_init,date_update,module, model) VALUES (%s, now(), now(), %s, %s)", \
|
cr.execute("INSERT INTO ir_model_data (name,date_init,date_update,module, model) VALUES (%s, now(), now(), %s, %s)", \
|
||||||
(name_id, module, self._name)
|
(name_id, module, self._name)
|
||||||
)
|
)
|
||||||
|
@ -3435,8 +3457,8 @@ class BaseModel(object):
|
||||||
return "date_trunc('second', %s) as %s" % (f_qual, f)
|
return "date_trunc('second', %s) as %s" % (f_qual, f)
|
||||||
if f == self.CONCURRENCY_CHECK_FIELD:
|
if f == self.CONCURRENCY_CHECK_FIELD:
|
||||||
if self._log_access:
|
if self._log_access:
|
||||||
return "COALESCE(%s.write_date, %s.create_date, now())::timestamp AS %s" % (self._table, self._table, f,)
|
return "COALESCE(%s.write_date, %s.create_date, (now() at time zone 'UTC'))::timestamp AS %s" % (self._table, self._table, f,)
|
||||||
return "now()::timestamp AS %s" % (f,)
|
return "(now() at time zone 'UTC')::timestamp AS %s" % (f,)
|
||||||
if isinstance(self._columns[f], fields.binary) and context.get('bin_size', False):
|
if isinstance(self._columns[f], fields.binary) and context.get('bin_size', False):
|
||||||
return 'length(%s) as "%s"' % (f_qual, f)
|
return 'length(%s) as "%s"' % (f_qual, f)
|
||||||
return f_qual
|
return f_qual
|
||||||
|
@ -3617,7 +3639,7 @@ class BaseModel(object):
|
||||||
return
|
return
|
||||||
if not (context.get(self.CONCURRENCY_CHECK_FIELD) and self._log_access):
|
if not (context.get(self.CONCURRENCY_CHECK_FIELD) and self._log_access):
|
||||||
return
|
return
|
||||||
check_clause = "(id = %s AND %s < COALESCE(write_date, create_date, now())::timestamp)"
|
check_clause = "(id = %s AND %s < COALESCE(write_date, create_date, (now() at time zone 'UTC'))::timestamp)"
|
||||||
for sub_ids in cr.split_for_in_conditions(ids):
|
for sub_ids in cr.split_for_in_conditions(ids):
|
||||||
ids_to_check = []
|
ids_to_check = []
|
||||||
for id in sub_ids:
|
for id in sub_ids:
|
||||||
|
@ -3901,7 +3923,7 @@ class BaseModel(object):
|
||||||
|
|
||||||
if self._log_access:
|
if self._log_access:
|
||||||
upd0.append('write_uid=%s')
|
upd0.append('write_uid=%s')
|
||||||
upd0.append('write_date=now()')
|
upd0.append("write_date=(now() at time zone 'UTC')")
|
||||||
upd1.append(user)
|
upd1.append(user)
|
||||||
|
|
||||||
if len(upd0):
|
if len(upd0):
|
||||||
|
@ -4168,7 +4190,7 @@ class BaseModel(object):
|
||||||
self._check_selection_field_value(cr, user, field, vals[field], context=context)
|
self._check_selection_field_value(cr, user, field, vals[field], context=context)
|
||||||
if self._log_access:
|
if self._log_access:
|
||||||
upd0 += ',create_uid,create_date'
|
upd0 += ',create_uid,create_date'
|
||||||
upd1 += ',%s,now()'
|
upd1 += ",%s,(now() at time zone 'UTC')"
|
||||||
upd2.append(user)
|
upd2.append(user)
|
||||||
cr.execute('insert into "'+self._table+'" (id'+upd0+") values ("+str(id_new)+upd1+')', tuple(upd2))
|
cr.execute('insert into "'+self._table+'" (id'+upd0+") values ("+str(id_new)+upd1+')', tuple(upd2))
|
||||||
self.check_access_rule(cr, user, [id_new], 'create', context=context)
|
self.check_access_rule(cr, user, [id_new], 'create', context=context)
|
||||||
|
@ -4401,13 +4423,11 @@ class BaseModel(object):
|
||||||
domain = domain[:]
|
domain = domain[:]
|
||||||
# if the object has a field named 'active', filter out all inactive
|
# if the object has a field named 'active', filter out all inactive
|
||||||
# records unless they were explicitely asked for
|
# records unless they were explicitely asked for
|
||||||
if 'active' in self._columns and (active_test and context.get('active_test', True)):
|
if 'active' in self._all_columns and (active_test and context.get('active_test', True)):
|
||||||
if domain:
|
if domain:
|
||||||
active_in_args = False
|
# the item[0] trick below works for domain items and '&'/'|'/'!'
|
||||||
for a in domain:
|
# operators too
|
||||||
if a[0] == 'active':
|
if not any(item[0] == 'active' for item in domain):
|
||||||
active_in_args = True
|
|
||||||
if not active_in_args:
|
|
||||||
domain.insert(0, ('active', '=', 1))
|
domain.insert(0, ('active', '=', 1))
|
||||||
else:
|
else:
|
||||||
domain = [('active', '=', 1)]
|
domain = [('active', '=', 1)]
|
||||||
|
@ -4871,15 +4891,15 @@ class BaseModel(object):
|
||||||
def _transient_clean_rows_older_than(self, cr, seconds):
|
def _transient_clean_rows_older_than(self, cr, seconds):
|
||||||
assert self._transient, "Model %s is not transient, it cannot be vacuumed!" % self._name
|
assert self._transient, "Model %s is not transient, it cannot be vacuumed!" % self._name
|
||||||
cr.execute("SELECT id FROM " + self._table + " WHERE"
|
cr.execute("SELECT id FROM " + self._table + " WHERE"
|
||||||
" COALESCE(write_date, create_date, now())::timestamp <"
|
" COALESCE(write_date, create_date, (now() at time zone 'UTC'))::timestamp <"
|
||||||
" (now() - interval %s)", ("%s seconds" % seconds,))
|
" ((now() at time zone 'UTC') - interval %s)", ("%s seconds" % seconds,))
|
||||||
ids = [x[0] for x in cr.fetchall()]
|
ids = [x[0] for x in cr.fetchall()]
|
||||||
self.unlink(cr, SUPERUSER_ID, ids)
|
self.unlink(cr, SUPERUSER_ID, ids)
|
||||||
|
|
||||||
def _transient_clean_old_rows(self, cr, count):
|
def _transient_clean_old_rows(self, cr, count):
|
||||||
assert self._transient, "Model %s is not transient, it cannot be vacuumed!" % self._name
|
assert self._transient, "Model %s is not transient, it cannot be vacuumed!" % self._name
|
||||||
cr.execute(
|
cr.execute(
|
||||||
"SELECT id, COALESCE(write_date, create_date, now())::timestamp"
|
"SELECT id, COALESCE(write_date, create_date, (now() at time zone 'UTC'))::timestamp"
|
||||||
" AS t FROM " + self._table +
|
" AS t FROM " + self._table +
|
||||||
" ORDER BY t LIMIT %s", (count,))
|
" ORDER BY t LIMIT %s", (count,))
|
||||||
ids = [x[0] for x in cr.fetchall()]
|
ids = [x[0] for x in cr.fetchall()]
|
||||||
|
|
|
@ -30,7 +30,7 @@ RELEASE_LEVELS_DISPLAY = {ALPHA: ALPHA,
|
||||||
# properly comparable using normal operarors, for example:
|
# properly comparable using normal operarors, for example:
|
||||||
# (6,1,0,'beta',0) < (6,1,0,'candidate',1) < (6,1,0,'candidate',2)
|
# (6,1,0,'beta',0) < (6,1,0,'candidate',1) < (6,1,0,'candidate',2)
|
||||||
# (6,1,0,'candidate',2) < (6,1,0,'final',0) < (6,1,2,'final',0)
|
# (6,1,0,'candidate',2) < (6,1,0,'final',0) < (6,1,2,'final',0)
|
||||||
version_info = (6,1,0,FINAL,0)
|
version_info = (6,2,0,ALPHA,0)
|
||||||
version = '.'.join(map(str,version_info[:2])) + RELEASE_LEVELS_DISPLAY[version_info[3]] + str(version_info[4] or '')
|
version = '.'.join(map(str,version_info[:2])) + RELEASE_LEVELS_DISPLAY[version_info[3]] + str(version_info[4] or '')
|
||||||
major_version = '.'.join(map(str,version_info[:2]))
|
major_version = '.'.join(map(str,version_info[:2]))
|
||||||
|
|
||||||
|
|
|
@ -561,6 +561,7 @@ class objects_proxy(netsvc.ExportService):
|
||||||
|
|
||||||
def dispatch(self, method, params):
|
def dispatch(self, method, params):
|
||||||
(db, uid, passwd ) = params[0:3]
|
(db, uid, passwd ) = params[0:3]
|
||||||
|
threading.current_thread().uid = uid
|
||||||
params = params[3:]
|
params = params[3:]
|
||||||
if method == 'obj_list':
|
if method == 'obj_list':
|
||||||
raise NameError("obj_list has been discontinued via RPC as of 6.0, please query ir.model directly!")
|
raise NameError("obj_list has been discontinued via RPC as of 6.0, please query ir.model directly!")
|
||||||
|
@ -594,6 +595,7 @@ class wizard(netsvc.ExportService):
|
||||||
|
|
||||||
def dispatch(self, method, params):
|
def dispatch(self, method, params):
|
||||||
(db, uid, passwd ) = params[0:3]
|
(db, uid, passwd ) = params[0:3]
|
||||||
|
threading.current_thread().uid = uid
|
||||||
params = params[3:]
|
params = params[3:]
|
||||||
if method not in ['execute','create']:
|
if method not in ['execute','create']:
|
||||||
raise KeyError("Method not supported %s" % method)
|
raise KeyError("Method not supported %s" % method)
|
||||||
|
@ -645,6 +647,7 @@ class report_spool(netsvc.ExportService):
|
||||||
|
|
||||||
def dispatch(self, method, params):
|
def dispatch(self, method, params):
|
||||||
(db, uid, passwd ) = params[0:3]
|
(db, uid, passwd ) = params[0:3]
|
||||||
|
threading.current_thread().uid = uid
|
||||||
params = params[3:]
|
params = params[3:]
|
||||||
if method not in ['report', 'report_get', 'render_report']:
|
if method not in ['report', 'report_get', 'render_report']:
|
||||||
raise KeyError("Method not supported %s" % method)
|
raise KeyError("Method not supported %s" % method)
|
||||||
|
|
|
@ -96,6 +96,7 @@ class test_ir_sequence_no_gap(unittest2.TestCase):
|
||||||
"""
|
"""
|
||||||
cr0 = cursor()
|
cr0 = cursor()
|
||||||
cr1 = cursor()
|
cr1 = cursor()
|
||||||
|
cr1._default_log_exceptions = False # Prevent logging a traceback
|
||||||
msg_re = '^could not obtain lock on row in relation "ir_sequence"$'
|
msg_re = '^could not obtain lock on row in relation "ir_sequence"$'
|
||||||
with self.assertRaisesRegexp(psycopg2.OperationalError, msg_re):
|
with self.assertRaisesRegexp(psycopg2.OperationalError, msg_re):
|
||||||
n0 = registry('ir.sequence').get(cr0, ADMIN_USER_ID, 'test_sequence_type_2', {})
|
n0 = registry('ir.sequence').get(cr0, ADMIN_USER_ID, 'test_sequence_type_2', {})
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
# OpenERP, Open Source Management Solution
|
# OpenERP, Open Source Management Solution
|
||||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
|
||||||
# Copyright (C) 2010 OpenERP s.a. (<http://openerp.com>).
|
# Copyright (C) 2010-2012 OpenERP s.a. (<http://openerp.com>).
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# This program is free software: you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU Affero General Public License as
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
@ -383,7 +383,7 @@ def email_send(email_from, email_to, subject, body, email_cc=None, email_bcc=Non
|
||||||
|
|
||||||
res = mail_server_pool.send_email(cr, uid or 1, email_msg, mail_server_id=None,
|
res = mail_server_pool.send_email(cr, uid or 1, email_msg, mail_server_id=None,
|
||||||
smtp_server=smtp_server, smtp_port=smtp_port, smtp_user=smtp_user, smtp_password=smtp_password,
|
smtp_server=smtp_server, smtp_port=smtp_port, smtp_user=smtp_user, smtp_password=smtp_password,
|
||||||
smtp_encryption=('ssl' if ssl else None), debug=debug)
|
smtp_encryption=('ssl' if ssl else None), smtp_debug=debug)
|
||||||
except Exception:
|
except Exception:
|
||||||
_logger.exception("tools.email_send failed to deliver email")
|
_logger.exception("tools.email_send failed to deliver email")
|
||||||
return False
|
return False
|
||||||
|
|
|
@ -20,9 +20,7 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
def drop_view_if_exists(cr, viewname):
|
def drop_view_if_exists(cr, viewname):
|
||||||
cr.execute("select count(1) from pg_class where relkind=%s and relname=%s", ('v', viewname,))
|
cr.execute("DROP view IF EXISTS %s CASCADE" % (viewname,))
|
||||||
if cr.fetchone()[0]:
|
|
||||||
cr.execute("DROP view %s" % (viewname,))
|
|
||||||
cr.commit()
|
cr.commit()
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||||
|
|
Loading…
Reference in New Issue