[MERGE] Merged with main server

bzr revid: tde@openerp.com-20120323143626-c05edvr4zwtz6pvm
This commit is contained in:
Thibault Delavallée 2012-03-23 15:36:26 +01:00
commit 70225fb42e
31 changed files with 16114 additions and 482 deletions

View File

@ -1,23 +1,18 @@
*.pyc
.*.swp
.bzrignore
.idea
.project
.pydevproject
.ropeproject
.settings
.DS_Store
openerp/addons/*
openerp/filestore*
.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
*.pyo
bin/*
build/
bin/yolk
bin/pil*.py
.project
.pydevproject
.settings
include/
lib/
share/

View File

@ -165,11 +165,16 @@ def dumpstacks(sig, frame):
""" 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
# modified for python 2.5 compatibility
thread_map = dict(threading._active, **threading._limbo)
id2name = dict([(threadId, thread.getName()) for threadId, thread in thread_map.items()])
threads_info = dict([(th.ident, {'name': th.name,
'uid': getattr(th,'uid','n/a')})
for th in threading.enumerate()])
code = []
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):
code.append('File: "%s", line %d, in %s' % (filename, lineno, name))
if line:

View File

@ -199,7 +199,7 @@
<field name="code">cf</field>
</record>
<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>
</record>
<record id="cg" model="res.country">
@ -1373,7 +1373,7 @@
<record id="INR" model="res.currency">
<field name="name">INR</field>
<field name="symbol">Rs</field>
<field name="symbol"></field>
<field name="rounding">0.01</field>
<field name="accuracy">4</field>
<field name="company_id" ref="main_company"/>

View File

@ -27,8 +27,10 @@
parent="base.menu_custom" name="Reporting" sequence="30"
/>
<menuitem id="base.menu_reporting" name="Reporting" parent="base.menu_administration" sequence="11"
groups="base.group_extended"/>
<menuitem id="base.menu_reporting" name="Reporting" sequence="45" groups="base.group_extended"/>
<menuitem id="base.menu_dasboard" name="Dashboards" sequence="0" parent="base.menu_reporting" groups="base.group_extended"/>
<menuitem id="menu_audit" name="Audit" parent="base.menu_reporting" sequence="50"/>
<menuitem id="base.menu_reporting_config" name="Configuration" parent="base.menu_reporting" sequence="100"/>
</data>
</openerp>

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.4\n"
"Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2012-02-08 00:44+0000\n"
"PO-Revision-Date: 2012-01-08 15:06+0000\n"
"Last-Translator: kifcaliph <Unknown>\n"
"PO-Revision-Date: 2012-03-19 10:06+0000\n"
"Last-Translator: Abdulwhhab A. Al-Shehri <Unknown>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-03-10 04:46+0000\n"
"X-Generator: Launchpad (build 14914)\n"
"X-Launchpad-Export-Date: 2012-03-20 04:55+0000\n"
"X-Generator: Launchpad (build 14969)\n"
#. module: base
#: model:res.country,name:base.sh
@ -367,7 +367,7 @@ msgstr "اسم المعالج"
#. module: base
#: model:res.groups,name:base.group_partner_manager
msgid "Partner Manager"
msgstr ""
msgstr "إدارة الشركاء"
#. module: base
#: model:ir.module.category,name:base.module_category_customer_relationship_management
@ -388,7 +388,7 @@ msgstr "تجميع غير ممكن"
#. module: base
#: field:ir.module.category,child_ids:0
msgid "Child Applications"
msgstr ""
msgstr "التطبيقات الفرعية"
#. module: base
#: field:res.partner,credit_limit:0
@ -408,7 +408,7 @@ msgstr "تاريخ التحديث"
#. module: base
#: model:ir.module.module,shortdesc:base.module_base_action_rule
msgid "Automated Action Rules"
msgstr ""
msgstr "قواعد الاحداث التلقائية"
#. module: base
#: view:ir.attachment:0
@ -473,11 +473,13 @@ msgid ""
"The user this filter is available to. When left empty the filter is usable "
"by the system only."
msgstr ""
"مرشحات المستخدم غير متوفرة. عندما يترك فارغا فان المرشح يستخدم بواسطة النظام "
"فقط."
#. module: base
#: help:res.partner,website:0
msgid "Website of Partner."
msgstr ""
msgstr "موقع إلكتروني للشريك."
#. module: base
#: help:ir.actions.act_window,views:0
@ -506,7 +508,7 @@ msgstr "تنسيق التاريخ"
#. module: base
#: model:ir.module.module,shortdesc:base.module_base_report_designer
msgid "OpenOffice Report Designer"
msgstr ""
msgstr "مصمم تقارير اوبن اوفيس"
#. module: base
#: field:res.bank,email:0
@ -566,7 +568,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_sale_layout
msgid "Sales Orders Print Layout"
msgstr ""
msgstr "تنسيق طباعة اوامر البيع"
#. module: base
#: selection:base.language.install,lang:0
@ -576,7 +578,7 @@ msgstr "الأسبانية"
#. module: base
#: model:ir.module.module,shortdesc:base.module_hr_timesheet_invoice
msgid "Invoice on Timesheets"
msgstr ""
msgstr "فاتورة على جداول زمنية"
#. module: base
#: view:base.module.upgrade:0
@ -700,7 +702,7 @@ msgstr "تمّت عملية التصدير"
#. module: base
#: model:ir.module.module,shortdesc:base.module_plugin_outlook
msgid "Outlook Plug-In"
msgstr ""
msgstr "إضافات الاوت لوك"
#. module: base
#: view:ir.model:0
@ -727,7 +729,7 @@ msgstr "الأردن"
#. module: base
#: help:ir.cron,nextcall:0
msgid "Next planned execution date for this job."
msgstr ""
msgstr "تاريخ الحدث المقرر لاحقا لهذه الوظيفة."
#. module: base
#: code:addons/base/ir/ir_model.py:139
@ -743,7 +745,7 @@ msgstr "إريتريا"
#. module: base
#: sql_constraint:res.company:0
msgid "The company name must be unique !"
msgstr ""
msgstr "اسم الشركة يجب أن يكون فريداً !"
#. module: base
#: view:res.config:0
@ -778,7 +780,7 @@ msgstr ""
#. module: base
#: view:ir.mail_server:0
msgid "Security and Authentication"
msgstr ""
msgstr "الحماية و التحقق من الصلاحيات"
#. module: base
#: view:base.language.export:0
@ -879,7 +881,7 @@ msgstr ""
#. module: base
#: view:res.users:0
msgid "Email Preferences"
msgstr ""
msgstr "تفضيلات البريد الالكتروني"
#. module: base
#: model:ir.module.module,description:base.module_audittrail
@ -971,7 +973,7 @@ msgstr "نييوي"
#. module: base
#: model:ir.module.module,shortdesc:base.module_membership
msgid "Membership Management"
msgstr ""
msgstr "إدارة الإشتراكات"
#. module: base
#: selection:ir.module.module,license:0
@ -998,7 +1000,7 @@ msgstr "أنواع مراجع الطلبات"
#. module: base
#: model:ir.module.module,shortdesc:base.module_google_base_account
msgid "Google Users"
msgstr ""
msgstr "مستخدمي جوجل"
#. module: base
#: help:ir.server.object.lines,value:0
@ -1035,6 +1037,7 @@ msgstr "ملف TGZ"
msgid ""
"Users added to this group are automatically added in the following groups."
msgstr ""
"الاشخاص المضافون الى هذه المجموعة أضيفوا تلقائيا الى المجموعات التالية."
#. module: base
#: view:res.lang:0
@ -1088,7 +1091,7 @@ msgstr "لا يمكن استخدام كلمات مرور فارغة لأسباب
#: code:addons/base/ir/ir_mail_server.py:192
#, python-format
msgid "Connection test failed!"
msgstr ""
msgstr "فشلت محاولة الاتصال!"
#. module: base
#: selection:ir.actions.server,state:0
@ -1209,7 +1212,7 @@ msgstr "الأسبانية / Español (GT)"
#. module: base
#: field:ir.mail_server,smtp_port:0
msgid "SMTP Port"
msgstr ""
msgstr "المنفذ SMTP"
#. module: base
#: model:ir.module.module,shortdesc:base.module_import_sugarcrm
@ -1231,7 +1234,7 @@ msgstr ""
#: code:addons/base/module/wizard/base_language_install.py:55
#, python-format
msgid "Language Pack"
msgstr ""
msgstr "حزمة لغة"
#. module: base
#: model:ir.module.module,shortdesc:base.module_web_tests
@ -1289,11 +1292,14 @@ msgid ""
"reference it\n"
"- creation/update: a mandatory field is not correctly set"
msgstr ""
"لا يمكن إكمال العملية، ربما بسبب أحد الاسباب التالية:\n"
"-الحذف: ربما تكون تحاول حذف سجل بينما هناك سجلات اخرى تشير اليه.\n"
"الانشاء/التحديث: حقل أساسي لم يتم ادخاله بشكل صحيح."
#. module: base
#: field:ir.module.category,parent_id:0
msgid "Parent Application"
msgstr ""
msgstr "التطبيق الرئيسي"
#. module: base
#: 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_knowledge
msgid "Document Management System"
msgstr ""
msgstr "نظام ادارة الوثائق"
#. module: base
#: model:ir.module.module,shortdesc:base.module_crm_claim
msgid "Claims Management"
msgstr ""
msgstr "إدارة المطالبات"
#. module: base
#: 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 "
"created automatically based on these data."
msgstr ""
"قم بتكوين الحسابات البنكية لشركتك و اختر ما تريده ان يظهر في اسفل التقارير. "
"بإمكانك إعادة ترتيب الحسابات من قائمة العرض. إذا كنت تستخدم ملحق الحسابات, "
"سيتم انشاء اليوميات و الحسابات تلقائيا اعتمادا على هذه البيانات."
#. module: base
#: view:ir.module.module:0
@ -1359,6 +1368,14 @@ msgid ""
" * Commitment Date\n"
" * Effective Date\n"
msgstr ""
"\n"
"أضف تواريخ اضافية الى طلب البيع.\n"
"===============================\n"
"\n"
"يمكنك اضافة التواريخ التالية الى طلب البيع:\n"
"* التاريخ المطلوب\n"
"* التاريخ الملتزم به\n"
"* تاريخ السريان\n"
#. module: base
#: model:ir.module.module,shortdesc:base.module_account_sequence
@ -1804,7 +1821,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_hr_evaluation
msgid "Employee Appraisals"
msgstr ""
msgstr "تقييمات الموظف"
#. module: base
#: selection:ir.actions.server,state:0
@ -1853,7 +1870,7 @@ msgstr "نموذج ملحق"
#. module: base
#: field:res.partner.bank,footer:0
msgid "Display on Reports"
msgstr ""
msgstr "عرض على التقارير"
#. module: base
#: model:ir.module.module,description:base.module_l10n_cn
@ -2050,7 +2067,7 @@ msgstr "وضع العرض"
msgid ""
"Display this bank account on the footer of printed documents like invoices "
"and sales orders."
msgstr ""
msgstr "عرض هذا الحساب البنكي على أسفل المطبوعات مثل الفواتير وطلبات البيع."
#. module: base
#: view:base.language.import:0
@ -2159,7 +2176,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_subscription
msgid "Recurring Documents"
msgstr ""
msgstr "وثائق متكررة"
#. module: base
#: model:res.country,name:base.bs
@ -2244,7 +2261,7 @@ msgstr "المجموعات"
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (CL) / Español (CL)"
msgstr ""
msgstr "الأسبانية / Español (CL)"
#. module: base
#: model:res.country,name:base.bz
@ -2517,7 +2534,7 @@ msgstr "استيراد / تصدير"
#. module: base
#: model:ir.actions.todo.category,name:base.category_tools_customization_config
msgid "Tools / Customization"
msgstr ""
msgstr "أدوات / تخصيصات"
#. module: base
#: field:ir.model.data,res_id:0
@ -2533,7 +2550,7 @@ msgstr "عنوان البريد الإلكتروني"
#. module: base
#: selection:base.language.install,lang:0
msgid "French (BE) / Français (BE)"
msgstr ""
msgstr "الفرنسية / Français (BE)"
#. module: base
#: view:ir.actions.server:0
@ -2768,7 +2785,7 @@ msgstr "جزيرة نورفولك"
#. module: base
#: selection:base.language.install,lang:0
msgid "Korean (KR) / 한국어 (KR)"
msgstr ""
msgstr "الكورية / 한국어 (KR)"
#. module: base
#: help:ir.model.fields,model:0
@ -3218,7 +3235,7 @@ msgstr ""
#. module: base
#: selection:base.language.install,lang:0
msgid "Finnish / Suomi"
msgstr ""
msgstr "الفنلندية / Suomi"
#. module: base
#: field:ir.rule,perm_write:0
@ -3233,7 +3250,7 @@ msgstr "اللقب"
#. module: base
#: selection:base.language.install,lang:0
msgid "German / Deutsch"
msgstr ""
msgstr "الألمانية / Deutsch"
#. module: base
#: view:ir.actions.server:0
@ -3581,7 +3598,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_point_of_sale
msgid "Point Of Sale"
msgstr ""
msgstr "نقطة بيع"
#. module: base
#: 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 "
"VAT. Used by the VAT legal statement."
msgstr ""
"رقم ضريبة القيمة المضافة. ضع علامة في هذا المربع اذا كان الشريك خاضع لضريبة "
"القيمة المضافة. تستخدم بواسطة كشف ضريبة القيمة المضافة القانونية."
#. module: base
#: selection:ir.sequence,implementation:0
@ -3708,7 +3727,7 @@ msgstr "ضريبة القيمة المضافة"
#. module: base
#: field:res.users,new_password:0
msgid "Set password"
msgstr ""
msgstr "ضبط كلمة المرور"
#. module: base
#: view:res.lang:0
@ -3723,7 +3742,7 @@ msgstr "خطأ! لا يمكنك إنشاء فئات متداخلة."
#. module: base
#: view:res.lang:0
msgid "%x - Appropriate date representation."
msgstr ""
msgstr "%x - صيغة التاريخ المناسب"
#. module: base
#: model:ir.module.module,description:base.module_web_mobile
@ -3836,7 +3855,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_fetchmail
msgid "Email Gateway"
msgstr ""
msgstr "بوابة البريد الالكتروني"
#. module: base
#: code:addons/base/ir/ir_mail_server.py:439
@ -3957,7 +3976,7 @@ msgstr "البرتغال"
#. module: base
#: model:ir.module.module,shortdesc:base.module_share
msgid "Share any Document"
msgstr ""
msgstr "مشاركة اي مستند"
#. module: base
#: field:ir.module.module,certificate:0
@ -4235,6 +4254,8 @@ msgid ""
"When no specific mail server is requested for a mail, the highest priority "
"one is used. Default priority is 10 (smaller number = higher priority)"
msgstr ""
"حين إستداعاء البريد من الخادم، يتم اختيار الملف الملقم حسب الاولوية.\r\n"
"القيمة الافتراضية هي 10 (الارقام الاصغر= اولوية أعلى)"
#. module: base
#: model:ir.module.module,description:base.module_crm_partner_assign
@ -4291,7 +4312,7 @@ msgstr "\"كود\" لابد أن يكون فريداً"
#. module: base
#: model:ir.module.module,shortdesc:base.module_hr_expense
msgid "Expenses Management"
msgstr ""
msgstr "إدارة المصروفات و النفقات"
#. module: base
#: view:workflow.activity:0
@ -4438,7 +4459,7 @@ msgstr "غينيا الاستوائية"
#. module: base
#: model:ir.module.module,shortdesc:base.module_warning
msgid "Warning Messages and Alerts"
msgstr ""
msgstr "رسائل التحذير و الاشعارات"
#. module: base
#: view:base.module.import:0
@ -4613,7 +4634,7 @@ msgstr "ليسوتو"
#. module: base
#: model:ir.module.module,shortdesc:base.module_base_vat
msgid "VAT Number Validation"
msgstr ""
msgstr "التحقق من رقم ضريبة القيمة المضافة"
#. module: base
#: model:ir.module.module,shortdesc:base.module_crm_partner_assign
@ -4759,7 +4780,7 @@ msgstr "قيمة لاحقة من السجل للمسلسل"
#. module: base
#: help:ir.mail_server,smtp_user:0
msgid "Optional username for SMTP authentication"
msgstr ""
msgstr "اختياري: اسم المستخدم للتحقق من قبل ملقم البريد"
#. module: base
#: model:ir.model,name:base.model_ir_actions_actions
@ -4844,7 +4865,7 @@ msgstr ""
#. module: base
#: help:res.partner.bank,company_id:0
msgid "Only if this bank account belong to your company"
msgstr ""
msgstr "فقط إذا كان هذا الحساب مملوكا لشركتك"
#. module: base
#: model:res.country,name:base.za
@ -5171,7 +5192,7 @@ msgstr "حقل"
#. module: base
#: model:ir.module.module,shortdesc:base.module_project_long_term
msgid "Long Term Projects"
msgstr ""
msgstr "مشروعات المدى البعيد"
#. module: base
#: model:res.country,name:base.ve
@ -12982,7 +13003,7 @@ msgstr "الصحراء الغربية"
#. module: base
#: model:ir.module.category,name:base.module_category_account_voucher
msgid "Invoicing & Payments"
msgstr ""
msgstr "الفواتير و المدفوعات"
#. module: base
#: model:ir.actions.act_window,help:base.action_res_company_form
@ -13186,7 +13207,7 @@ msgstr ""
#. module: base
#: field:res.partner.bank,bank_name:0
msgid "Bank Name"
msgstr ""
msgstr "اسم البنك"
#. module: base
#: 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 "
"Translation' wizard available from the 'Administration' menu."
msgstr ""
"اللغة الافتراضية المستخدمة في الواجهات، عندما تكون هناك ترجمات متوفرة. "
"لإضافة لغة جديدة، يمكنك استخدام 'تحميل ترجمة رسمية' من قائمة \"إدارة\"."
#. module: base
#: model:ir.module.module,description:base.module_l10n_es
@ -13265,7 +13288,7 @@ msgstr "ملف CSV"
#: code:addons/base/res/res_company.py:154
#, python-format
msgid "Phone: "
msgstr ""
msgstr "هاتف "
#. module: base
#: field:res.company,account_no:0
@ -13304,7 +13327,7 @@ msgstr ""
#. module: base
#: field:res.company,vat:0
msgid "Tax ID"
msgstr ""
msgstr "رقم الضرائب"
#. module: base
#: field:ir.model.fields,field_description:0
@ -13426,7 +13449,7 @@ msgstr "الأنشطة"
#. module: base
#: model:ir.module.module,shortdesc:base.module_product
msgid "Products & Pricelists"
msgstr ""
msgstr "المنتجات و قوائم الاسعار"
#. module: base
#: field:ir.actions.act_window,auto_refresh:0
@ -13477,7 +13500,7 @@ msgstr ""
#. module: base
#: field:ir.model.data,name:0
msgid "External Identifier"
msgstr ""
msgstr "مُعرف خارجي"
#. module: base
#: model:ir.actions.act_window,name:base.grant_menu_access
@ -13542,7 +13565,7 @@ msgstr "تصدير"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_nl
msgid "Netherlands - Accounting"
msgstr ""
msgstr "هولندا - محاسبة"
#. module: base
#: field:res.bank,bic:0
@ -13651,7 +13674,7 @@ msgstr "الدليل التقني"
#. module: base
#: view:res.company:0
msgid "Address Information"
msgstr ""
msgstr "معلومات العنوان"
#. module: base
#: model:res.country,name:base.tz
@ -13676,7 +13699,7 @@ msgstr "جزيرة الكريسماس"
#. module: base
#: model:ir.module.module,shortdesc:base.module_web_livechat
msgid "Live Chat Support"
msgstr ""
msgstr "التحدث مع الدعم الفني"
#. module: base
#: view:ir.actions.server:0
@ -13876,7 +13899,7 @@ msgstr ""
#. module: base
#: help:ir.actions.act_window,usage:0
msgid "Used to filter menu and home actions from the user form."
msgstr ""
msgstr "تستخدم لتصفية القائمة و الإجراءات الرئيسية من النموذج المستخدم."
#. module: base
#: model:res.country,name:base.sa
@ -13886,7 +13909,7 @@ msgstr "المملكة العربية السعودية"
#. module: base
#: help:res.company,rml_header1:0
msgid "Appears by default on the top right corner of your printed documents."
msgstr ""
msgstr "يظهر إفتراضيا في أعلى الزاوية اليمنى من الوثائق المطبوعة."
#. module: base
#: model:ir.module.module,shortdesc:base.module_fetchmail_crm_claim
@ -13989,7 +14012,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,description:base.module_auth_openid
msgid "Allow users to login through OpenID."
msgstr ""
msgstr "السماح للمستخدمين بالدخول باستخدام أوبن أي دي(OpenID)."
#. module: base
#: model:ir.module.module,shortdesc:base.module_account_payment
@ -14036,7 +14059,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_report_designer
msgid "Report Designer"
msgstr ""
msgstr "مصمم التقارير"
#. module: base
#: model:ir.ui.menu,name:base.menu_address_book
@ -14075,7 +14098,7 @@ msgstr "الفرص والفرص المحتملة"
#. module: base
#: selection:base.language.install,lang:0
msgid "Romanian / română"
msgstr ""
msgstr "الرومانية / română"
#. module: base
#: view:res.log:0
@ -14129,7 +14152,7 @@ msgstr "تنفيذ للإنشاء"
#. module: base
#: model:res.country,name:base.vi
msgid "Virgin Islands (USA)"
msgstr ""
msgstr "جزيرة فيرجين - (الولايات المتحدة اﻻمريكية)"
#. module: base
#: model:res.country,name:base.tw
@ -14169,12 +14192,12 @@ msgstr ""
#. module: base
#: field:ir.ui.view,field_parent:0
msgid "Child Field"
msgstr ""
msgstr "حقل فرعي."
#. module: base
#: view:ir.rule:0
msgid "Detailed algorithm:"
msgstr ""
msgstr "تفاصيل الخوارزمية."
#. module: base
#: field:ir.actions.act_window,usage:0
@ -14195,7 +14218,7 @@ msgstr "workflow.workitem"
#. module: base
#: model:ir.module.module,shortdesc:base.module_profile_tools
msgid "Miscellaneous Tools"
msgstr ""
msgstr "أدوات متنوعة."
#. module: base
#: model:ir.module.category,description:base.module_category_tools
@ -14242,7 +14265,7 @@ msgstr "عرض:"
#. module: base
#: field:ir.model.fields,view_load:0
msgid "View Auto-Load"
msgstr ""
msgstr "عرض التحميل التلقائي"
#. module: base
#: code:addons/base/ir/ir_model.py:264
@ -14268,7 +14291,7 @@ msgstr ""
#. module: base
#: field:ir.ui.menu,web_icon:0
msgid "Web Icon File"
msgstr ""
msgstr "ملف ايقونة الويب"
#. module: base
#: view:base.module.upgrade:0
@ -14289,7 +14312,7 @@ msgstr "Persian / فارسي"
#. module: base
#: view:ir.actions.act_window:0
msgid "View Ordering"
msgstr ""
msgstr "عرض الطلبات"
#. module: base
#: 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
#, python-format
msgid "File is not a zip file!"
msgstr ""
msgstr "الملف ليس ملف مضغوط(zip)!!"
#. module: base
#: model:res.country,name:base.ar
@ -14504,7 +14527,7 @@ msgstr "عقد ضمان الناشر"
#. module: base
#: selection:base.language.install,lang:0
msgid "Bulgarian / български език"
msgstr ""
msgstr "البلغارية / български език"
#. module: base
#: model:ir.ui.menu,name:base.menu_aftersale
@ -14514,7 +14537,7 @@ msgstr "خدمات بعد البيع"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_fr
msgid "France - Accounting"
msgstr ""
msgstr "فرنسا - محاسبة"
#. module: base
#: view:ir.actions.todo:0
@ -14651,7 +14674,7 @@ msgstr ""
#. module: base
#: selection:base.language.install,lang:0
msgid "Czech / Čeština"
msgstr ""
msgstr "التشيكية / Čeština"
#. module: base
#: model:ir.module.category,name:base.module_category_generic_modules
@ -14778,7 +14801,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_plugin_thunderbird
msgid "Thunderbird Plug-In"
msgstr ""
msgstr "اضافات - ثندربيرد"
#. module: base
#: model:ir.model,name:base.model_res_country
@ -14796,7 +14819,7 @@ msgstr "الدولة"
#. module: base
#: model:ir.module.module,shortdesc:base.module_project_messages
msgid "In-Project Messaging System"
msgstr ""
msgstr "نظام المراسلة في المشاريع"
#. module: base
#: model:res.country,name:base.pn
@ -14827,7 +14850,7 @@ msgstr ""
#: view:res.partner:0
#: view:res.partner.address:0
msgid "Change Color"
msgstr ""
msgstr "تغيير اللون"
#. module: base
#: model:res.partner.category,name:base.res_partner_category_15
@ -14861,7 +14884,7 @@ msgstr ""
#. module: base
#: field:ir.module.module,auto_install:0
msgid "Automatic Installation"
msgstr ""
msgstr "تحميل تلقائي"
#. module: base
#: model:res.country,name:base.jp
@ -14930,7 +14953,7 @@ msgstr "ir.actions.server"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_ca
msgid "Canada - Accounting"
msgstr ""
msgstr "كندا - محاسبة"
#. module: base
#: model:ir.actions.act_window,name:base.act_ir_actions_todo_form

File diff suppressed because it is too large Load Diff

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-server\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-02-08 00:44+0000\n"
"PO-Revision-Date: 2012-02-28 16:02+0000\n"
"PO-Revision-Date: 2012-03-23 02:33+0000\n"
"Last-Translator: Akira Hiyama <Unknown>\n"
"Language-Team: Japanese <ja@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-03-10 04:49+0000\n"
"X-Generator: Launchpad (build 14914)\n"
"X-Launchpad-Export-Date: 2012-03-23 04:41+0000\n"
"X-Generator: Launchpad (build 14996)\n"
#. module: base
#: model:res.country,name:base.sh
@ -112,7 +112,7 @@ msgstr "ハンガリー語 / マジャール語"
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (PY) / Español (PY)"
msgstr "スペイン語(パラグアイ)"
msgstr "スペイン語(パラグアイ)/ Español (PY)"
#. module: base
#: model:ir.module.category,description:base.module_category_project_management
@ -178,7 +178,7 @@ msgstr "参照"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_be_invoice_bba
msgid "Belgium - Structured Communication"
msgstr "ベルギー-構造化されたコミュニケーション"
msgstr "ベルギー-構造化された通信"
#. module: base
#: field:ir.actions.act_window,target:0
@ -591,7 +591,7 @@ msgstr "受注のプリントレイアウト"
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (VE) / Español (VE)"
msgstr "スペイン語(ベネズエラ)"
msgstr "スペイン語(ベネズエラ)/ Español (VE)"
#. module: base
#: model:ir.module.module,shortdesc:base.module_hr_timesheet_invoice
@ -970,7 +970,7 @@ msgstr "モジュール更新"
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (UY) / Español (UY)"
msgstr "スペイン語(ウルグアイ)"
msgstr "スペイン語(ウルグアイ)/ Español (UY)"
#. module: base
#: field:res.partner,mobile:0
@ -1208,7 +1208,7 @@ msgstr "スロバキア語"
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (AR) / Español (AR)"
msgstr "スペイン語(アルゼンチン)"
msgstr "スペイン語(アルゼンチン)/ Español (AR)"
#. module: base
#: model:res.country,name:base.ug
@ -1248,7 +1248,7 @@ msgstr ""
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (GT) / Español (GT)"
msgstr "スペイン語(グアテマラ)"
msgstr "スペイン語(グアテマラ)/ Español (GT)"
#. module: base
#: field:ir.mail_server,smtp_port:0
@ -2247,7 +2247,7 @@ msgstr "スペイン語"
#. module: base
#: selection:base.language.install,lang:0
msgid "Korean (KP) / 한국어 (KP)"
msgstr "北朝鮮"
msgstr "韓国語(北朝鮮 / 한국어 (KP)"
#. module: base
#: view:base.module.update:0
@ -2451,7 +2451,7 @@ msgstr "グループ"
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (CL) / Español (CL)"
msgstr "スペイン語(チリ)"
msgstr "スペイン語(チリ) / Español (CL)"
#. module: base
#: model:res.country,name:base.bz
@ -2608,7 +2608,7 @@ msgstr "請求書"
#. module: base
#: selection:base.language.install,lang:0
msgid "Portugese (BR) / Português (BR)"
msgstr "ポルトガル語(ブラジル)"
msgstr "ポルトガル語(ブラジル)/ Português (BR)"
#. module: base
#: model:res.country,name:base.bb
@ -2761,7 +2761,7 @@ msgstr "Eメールアドレス"
#. module: base
#: selection:base.language.install,lang:0
msgid "French (BE) / Français (BE)"
msgstr "フランス語(ベルギー)"
msgstr "フランス語(ベルギー)/ Français (BE)"
#. module: base
#: view:ir.actions.server:0
@ -3018,7 +3018,7 @@ msgstr "ノーフォーク島"
#. module: base
#: selection:base.language.install,lang:0
msgid "Korean (KR) / 한국어 (KR)"
msgstr "韓国"
msgstr "韓国語(韓国)/ 한국어 (KR)"
#. module: base
#: help:ir.model.fields,model:0
@ -3483,7 +3483,7 @@ msgstr "翻訳者がエクスポートする際に、ファイルのエンコー
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (DO) / Español (DO)"
msgstr "スペイン語(ドミニカ共和国)"
msgstr "スペイン語(ドミニカ共和国)/ Español (DO)"
#. module: base
#: model:res.country,name:base.na
@ -4826,7 +4826,7 @@ msgstr "ギリシャ-会計"
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (HN) / Español (HN)"
msgstr "スペイン語(ホンジュラス)"
msgstr "スペイン語(ホンジュラス)/ Español (HN)"
#. module: base
#: view:ir.sequence.type:0
@ -5056,7 +5056,7 @@ msgstr "選択されたモジュールは更新あるいはインストールさ
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (PR) / Español (PR)"
msgstr "スペイン語(プエルトリコ)"
msgstr "スペイン語(プエルトリコ)/ Español (PR)"
#. module: base
#: model:res.country,name:base.gt
@ -5473,7 +5473,7 @@ msgstr ""
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (PA) / Español (PA)"
msgstr "スペイン語(パナマ)"
msgstr "スペイン語(パナマ)/ Español (PA)"
#. module: base
#: view:res.currency:0
@ -6431,7 +6431,7 @@ msgstr "モジュール品質の分析"
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (BO) / Español (BO)"
msgstr "スペイン語(ボリビア)"
msgstr "スペイン語(ボリビア)/ Español (BO)"
#. module: base
#: model:ir.actions.act_window,name:base.ir_access_act
@ -7053,7 +7053,7 @@ msgstr "非表示"
#. module: base
#: selection:base.language.install,lang:0
msgid "Serbian (Latin) / srpski"
msgstr "セルビア語"
msgstr "セルビア語(ラテン)/ srpski"
#. module: base
#: model:res.country,name:base.il
@ -7924,7 +7924,7 @@ msgstr "閉じる"
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (MX) / Español (MX)"
msgstr "スペイン語(メキシコ)"
msgstr "スペイン語(メキシコ)/ Español (MX)"
#. module: base
#: code:addons/base/publisher_warranty/publisher_warranty.py:145
@ -8170,7 +8170,7 @@ msgstr "項目が定義されているモジュールのリスト"
#. module: base
#: selection:base.language.install,lang:0
msgid "Chinese (CN) / 简体中文"
msgstr "中国語(简体中文)"
msgstr "中国語 / 简体中文"
#. module: base
#: field:res.bank,street:0
@ -8310,11 +8310,14 @@ msgid ""
"interface, which has less features but is easier to use. You can switch to "
"the other interface from the User/Preferences menu at any time."
msgstr ""
"OpenERPは簡易 / "
"拡張の種類のユーザインタフェースを提供します。最初にOpenERPを使う場合は、機能は少ないながらも、使い易い簡易なユーザインタフェースを選択することを"
"強くお勧めします。なお、いつでも設定メニューから拡張インタフェースに変更できます。"
#. module: base
#: model:res.country,name:base.cc
msgid "Cocos (Keeling) Islands"
msgstr ""
msgstr "ココス諸島"
#. module: base
#: selection:base.language.install,state:0
@ -8326,22 +8329,22 @@ msgstr ""
#. module: base
#: view:res.lang:0
msgid "11. %U or %W ==> 48 (49th week)"
msgstr ""
msgstr "11. %U or %W ==> 4849番目の週"
#. module: base
#: model:ir.model,name:base.model_res_partner_bank_type_field
msgid "Bank type fields"
msgstr ""
msgstr "銀行タイプ項目"
#. module: base
#: selection:base.language.install,lang:0
msgid "Dutch / Nederlands"
msgstr ""
msgstr "オランダ"
#. module: base
#: selection:res.company,paper_format:0
msgid "US Letter"
msgstr ""
msgstr "US レター"
#. module: base
#: model:ir.module.module,description:base.module_stock_location
@ -8433,6 +8436,63 @@ msgid ""
"from Gate A\n"
" "
msgstr ""
"\n"
"このモジュールはプッシュ / プル倉庫フローを効果的に実行する倉庫アプリケーションを補います。\n"
"============================================================================="
"===============================\n"
"\n"
"典型的な利用例:\n"
" * 製品製造チェーンの管理\n"
" * 製品ごとのデフォルトロケーションの管理\n"
" * 以下のようなビジネス要求による倉庫の中の経路の定義:\n"
" - 品質管理\n"
" - 販売サービスの後\n"
" - サプライヤ返品\n"
"\n"
" * レンタル製品の自動返品を生成することでレンタル管理を助けます。\n"
"\n"
"ひとたびこのモジュールがインストールされたら、製品フォームに追加タブが現れます。\n"
"そこで、プッシュとプルのフローの仕様を加えることができます。\n"
"CPU製品のプッシュとプルのデモデータ\n"
"\n"
"プッシュフロー\n"
"----------\n"
"プッシュフローは、一定の製品が常に必要に応じて他の場所に対応して動くように到着する時、\n"
"オプションとして一定の遅延がある時に役立ちます。\n"
"オリジナルの倉庫アプリケーションは既にそれ自身にプッシュフローの仕様をサポートしています。\n"
"しかし、これは製品ごとに改良されません。\n"
"\n"
"プッシュプローの仕様は、どの場所がどの場所と何のパラメータでつながれているかを示します。\n"
"製品の所定の量が供給元の場所で動きがあるや否や結び付けられた動作がフロー定義\n"
"(目的地の場所、遅延、移動の種類、ジャーナル他)でセットされたパラメータにしたがって\n"
"自動的に予測されます。\n"
"この新しい動きはパラメータにしたがって自動的に実行されるか、手動確認を要求します。\n"
"\n"
"プルフロー\n"
"----------\n"
"プルフローはプッシュフローとは少し異なっています。これは製品の動きの処理には関係せず、\n"
"むしろ調達した注文の処理に関係します。直接の商品ではなくニーズに依ります。\n"
"プルフローの古典的な例は、供給に責任を持つ親会社を持つアウトレット会社です。\n"
"\n"
" [ 顧客 ] <- A - [ アウトレット ] <- B - [ 親会社 ] <~ C ~ [ 供給者 ]\n"
"\n"
"新しい調達注文A例として注文の確認が来ますがアウトレットに到着すると、それは親会社から要求されたもう一つの調達注文に変換されますBプルフローのタ"
"イプは'move'。親会社により調達注文Bが処理される時、そしてその製品が在庫切れの時、それは供給者からの受注Cプルフローのタイプは購入に変換され"
"ます。結果として調達注文、ニーズは顧客と供給者の間の全てにプッシュされます。\n"
"\n"
"技術的には、プルフローは調達注文と別に処理することを許します。製品に対しての考慮に依存するのみならず、その製品のニーズを持つ場所(即ち調達注文の目的地)に"
"依存します。\n"
"\n"
"使用例\n"
"--------\n"
"\n"
"以下のデモデータを使います:\n"
" CPU1ショップ1からいくらかのCPU1を売り、スケジューラを走らせます。\n"
" - 倉庫配達注文ショップ1: 受付\n"
" CPU3:\n"
" - 商品を受け取る時、それは品質管理場所に行き、棚2に保管されます。\n"
" - 顧客に配達する時:ピックリスト -> 梱包 -> GateAから配達注文\n"
" "
#. module: base
#: model:ir.module.module,description:base.module_marketing
@ -8444,21 +8504,27 @@ msgid ""
"Contains the installer for marketing-related modules.\n"
" "
msgstr ""
"\n"
"マーケティングメニュー\n"
"===================\n"
"\n"
"マーケティング関連のモジュールのインストーラを含んでいます。\n"
" "
#. module: base
#: model:ir.module.category,name:base.module_category_knowledge_management
msgid "Knowledge Management"
msgstr ""
msgstr "知識管理"
#. module: base
#: model:ir.actions.act_window,name:base.bank_account_update
msgid "Company Bank Accounts"
msgstr ""
msgstr "顧客銀行口座"
#. module: base
#: help:ir.mail_server,smtp_pass:0
msgid "Optional password for SMTP authentication"
msgstr ""
msgstr "SMTP認証のための任意のパスワード"
#. module: base
#: model:ir.module.module,description:base.module_project_mrp
@ -8491,6 +8557,25 @@ msgid ""
"task is completed.\n"
"\n"
msgstr ""
"\n"
"自動的に調達ラインからプロジェクトタスクの生成します。\n"
"==========================================================\n"
"\n"
"対応する製品が以下の特徴を満たす場合、このモジュールはそれぞれの調達注文ライン\n"
"(例えば販売注文ライン)のための新しいタスクを作成します。\n"
"\n"
" ・ タイプ サービス\n"
" ・ 調達手法(注文実現) MTO受注生産\n"
" ・ 供給 / 調達手法 産物\n"
"\n"
"もし先頭のプロジェクトが製品フォーム(調達タブ)で定義されているなら、新しいタスクは\n"
"その特定のプロジェクトの中に作られます。\n"
"それ以外の場合は、新しいタスクはどんなプロジェクトにも属さず、後で手作業でプロジェクトに\n"
"追加されるかも知れません。\n"
"\n"
"プロジェクトのタスクが完了するか、中止される時、調達ラインに対応するワークフローはそれに応じて更新されます。\n"
"例えば、もしこの調達が受注ラインに対応するなら、仕事が完了する時に受注ラインは配達されたと考えられます。\n"
"\n"
#. module: base
#: code:addons/base/res/res_config.py:348
@ -8500,6 +8585,9 @@ msgid ""
"\n"
"This addon is already installed on your system"
msgstr ""
"\n"
"\n"
"このアドオンは既にシステムにインストール済みです。"
#. module: base
#: model:ir.module.module,description:base.module_account_check_writing
@ -8508,11 +8596,14 @@ msgid ""
" Module for the Check writing and check printing \n"
" "
msgstr ""
"\n"
" チェックの作成と印刷のためのモジュール \n"
" "
#. module: base
#: model:res.partner.bank.type,name:base.bank_normal
msgid "Normal Bank Account"
msgstr ""
msgstr "通常の銀行口座"
#. module: base
#: view:ir.actions.wizard:0
@ -8542,6 +8633,21 @@ msgid ""
"\n"
" "
msgstr ""
"\n"
"このモジュールは受信したEメールを元に自動的にプロジェクトタスクを生成します。\n"
"===========================================================================\n"
"\n"
"所定のメールボックスに到着した新しいEメールを元にタスクの生成を許します。\n"
"同様にCRMアプリケーションがリード / オポチュニティを持つもの。\n"
"メールボックス統合の設定のために2つの共通の選択肢があります:\n"
"\n"
" ・ fetchmailモジュールをインストールし、新しいメールボックスを設定し、それから\n"
"  受信EメールのためにProject Tasksをターゲットとして選んで下さい。\n"
" ・ mail gatewayスクリプトが提供したmailモジュールに基づいて、メールサーバを手作業で設定して、\n"
"  そしてproject.taskモデルにそれを接続して下さい。\n"
"\n"
"\n"
" "
#. module: base
#: model:ir.module.module,description:base.module_membership
@ -8561,6 +8667,18 @@ msgid ""
"invoice and send propositions for membership renewal.\n"
" "
msgstr ""
"\n"
"このモジュールはメンバーシップの管理のために、全ての管理操作を許可します。\n"
"=========================================================================\n"
"\n"
"以下の異なった種類の会員をサポートします:\n"
"・ 無料会員\n"
"・ 関連会員(例:全ての子会社のメンバーシップのためのグループ加入)\n"
"・ 有料会員\n"
"・ 特別な会員価格など\n"
"\n"
"メンバーシップ更新のための請求書を作り、条件書を送付するために、これは販売と会計と統合されます。\n"
" "
#. module: base
#: model:ir.module.module,description:base.module_hr_attendance
@ -8573,46 +8691,52 @@ msgid ""
"actions(Sign in/Sign out) performed by them.\n"
" "
msgstr ""
"\n"
"このモジュールは従業員の出勤管理を目指しています。\n"
"==================================================\n"
"\n"
"従業員自身が行ったサインイン / サインアウトの行動をベースにして、従業員の出勤の根拠を保持します。\n"
" "
#. module: base
#: field:ir.module.module,maintainer:0
msgid "Maintainer"
msgstr ""
msgstr "保守担当者"
#. module: base
#: field:ir.sequence,suffix:0
msgid "Suffix"
msgstr ""
msgstr "サフィックス"
#. module: base
#: model:res.country,name:base.mo
msgid "Macau"
msgstr ""
msgstr "マカオ"
#. module: base
#: model:ir.actions.report.xml,name:base.res_partner_address_report
msgid "Labels"
msgstr ""
msgstr "ラベル"
#. module: base
#: field:partner.massmail.wizard,email_from:0
msgid "Sender's email"
msgstr ""
msgstr "送信者のEメール"
#. module: base
#: field:ir.default,field_name:0
msgid "Object Field"
msgstr ""
msgstr "オブジェクト項目"
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (PE) / Español (PE)"
msgstr ""
msgstr "スペイン語(ペルー)/ Español (PE)"
#. module: base
#: selection:base.language.install,lang:0
msgid "French (CH) / Français (CH)"
msgstr ""
msgstr "フランス語(スイス)/ Français (CH)"
#. module: base
#: help:ir.actions.server,subject:0
@ -8621,6 +8745,8 @@ msgid ""
"the same values as those available in the condition field, e.g. `Hello [[ "
"object.partner_id.name ]]`"
msgstr ""
"電子メールの件名には条件項目で使用可能な同じ値を元にした二重括弧で囲まれた表現、例えば、‘こんにちは[[ object.partner_id.name "
"]]’を含むことができます。"
#. module: base
#: model:ir.module.module,description:base.module_account_sequence
@ -8639,11 +8765,24 @@ msgid ""
" * Number Padding\n"
" "
msgstr ""
"\n"
"このモジュールは会計項目のために内部の連続番号を維持管理します。\n"
"======================================================================\n"
"\n"
"あなたは会計の順序が維持されるように設定することができます。\n"
"\n"
"以下の順序の属性をカスタマイズできます:\n"
" ・ プレフィックス(接頭辞)\n"
" ・ サフィックス(接尾辞)\n"
" ・ 次の番号\n"
" ・ 増分番号\n"
" ・ 番号埋め文字\n"
" "
#. module: base
#: model:res.country,name:base.to
msgid "Tonga"
msgstr ""
msgstr "トンガ"
#. module: base
#: help:ir.model.fields,serialization_field_id:0
@ -8652,35 +8791,37 @@ msgid ""
"serialization field, instead of having its own database column. This cannot "
"be changed after creation."
msgstr ""
"もしセットする場合、この項目は自身のデータベースのカラムの代わりに、シリアライズされた項目の疎な構造の中に保存されます。これを作成した後で、変更することは"
"できません。"
#. module: base
#: view:res.partner.bank:0
msgid "Bank accounts belonging to one of your companies"
msgstr ""
msgstr "銀行口座はあなたの会社の一つに属します。"
#. module: base
#: help:res.users,action_id:0
msgid ""
"If specified, this action will be opened at logon for this user, in addition "
"to the standard menu."
msgstr ""
msgstr "もし指定された場合,このアクションは標準メニューに追加され、このユーザに対してログイン時に開かれます。"
#. module: base
#: selection:ir.module.module,complexity:0
msgid "Easy"
msgstr ""
msgstr "易しい"
#. module: base
#: view:ir.values:0
msgid "Client Actions"
msgstr ""
msgstr "顧客アクション"
#. module: base
#: help:ir.actions.server,trigger_obj_id:0
msgid ""
"The field on the current object that links to the target object record (must "
"be a many2one, or an integer field with the record ID)"
msgstr ""
msgstr "現在のオブジェクトのその項目は、目的のオブジェクトレコードレコードIDを持ち多対の関係か、または整数項目であるにリンクします。"
#. module: base
#: code:addons/base/module/module.py:423
@ -8689,18 +8830,20 @@ msgid ""
"You try to upgrade a module that depends on the module: %s.\n"
"But this module is not available in your system."
msgstr ""
"あなたは次のモジュールに依存するモジュールをアップグレードしようとしています: %s.\n"
"しかし、そのモジュールはあなたのシステムでは使用できません。"
#. module: base
#: field:workflow.transition,act_to:0
msgid "Destination Activity"
msgstr ""
msgstr "目的地のアクティビティ"
#. module: base
#: help:res.currency,position:0
msgid ""
"Determines where the currency symbol should be placed after or before the "
"amount."
msgstr ""
msgstr "通貨記号が金額の前後、どちらに置かれるべきなのかを決定します。"
#. module: base
#: model:ir.model,name:base.model_base_update_translations
@ -8710,7 +8853,7 @@ msgstr ""
#. module: base
#: field:res.partner.category,parent_id:0
msgid "Parent Category"
msgstr ""
msgstr "親分類"
#. module: base
#: selection:ir.property,type:0
@ -8721,12 +8864,12 @@ msgstr ""
#: selection:res.partner.address,type:0
#: selection:res.partner.title,domain:0
msgid "Contact"
msgstr ""
msgstr "コンタクト"
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_at
msgid "Austria - Accounting"
msgstr ""
msgstr "オーストラリア-会計"
#. module: base
#: model:ir.model,name:base.model_ir_ui_menu
@ -8737,39 +8880,39 @@ msgstr ""
#: model:ir.module.category,name:base.module_category_project_management
#: model:ir.module.module,shortdesc:base.module_project
msgid "Project Management"
msgstr ""
msgstr "プロジェクト管理"
#. module: base
#: model:res.country,name:base.us
msgid "United States"
msgstr ""
msgstr "アメリカ合衆国"
#. module: base
#: model:ir.module.module,shortdesc:base.module_crm_fundraising
msgid "Fundraising"
msgstr ""
msgstr "募金"
#. module: base
#: view:ir.module.module:0
msgid "Cancel Uninstall"
msgstr ""
msgstr "アンインストールのキャンセル"
#. module: base
#: view:res.bank:0
#: view:res.partner:0
#: view:res.partner.address:0
msgid "Communication"
msgstr ""
msgstr "通信"
#. module: base
#: model:ir.module.module,shortdesc:base.module_analytic
msgid "Analytic Accounting"
msgstr ""
msgstr "分析会計"
#. module: base
#: view:ir.actions.report.xml:0
msgid "RML Report"
msgstr ""
msgstr "RMLレポート"
#. module: base
#: model:ir.model,name:base.model_ir_server_object_lines
@ -8779,23 +8922,23 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_be
msgid "Belgium - Accounting"
msgstr ""
msgstr "ベルギー-会計"
#. module: base
#: code:addons/base/module/module.py:622
#, python-format
msgid "Module %s: Invalid Quality Certificate"
msgstr ""
msgstr "モジュール %s 無効な品質証明書"
#. module: base
#: model:res.country,name:base.kw
msgid "Kuwait"
msgstr ""
msgstr "クウェート"
#. module: base
#: field:workflow.workitem,inst_id:0
msgid "Instance"
msgstr ""
msgstr "インスタンス"
#. module: base
#: help:ir.actions.report.xml,attachment:0
@ -8804,23 +8947,25 @@ msgid ""
"Keep empty to not save the printed reports. You can use a python expression "
"with the object and time variables."
msgstr ""
"これは印刷結果を保存するために使われる添付ファイルのファイル名です。印刷レポートを保存しない場合は、空の状態にして下さい。オブジェクトと時間変数にはpyt"
"hon表現を使うことができます。"
#. module: base
#: sql_constraint:ir.model.data:0
msgid ""
"You cannot have multiple records with the same external ID in the same "
"module!"
msgstr ""
msgstr "同じモジュールの中に、同じ外部IDで複数のレコードを持つことはできません。"
#. module: base
#: selection:ir.property,type:0
msgid "Many2One"
msgstr ""
msgstr "多対1"
#. module: base
#: model:res.country,name:base.ng
msgid "Nigeria"
msgstr ""
msgstr "ナイジェリア"
#. module: base
#: model:ir.module.module,description:base.module_crm_caldav
@ -8831,41 +8976,46 @@ msgid ""
"\n"
" * Share meeting with other calendar clients like sunbird\n"
msgstr ""
"\n"
"ミーティングにおけるCaldavの機能\n"
"===========================\n"
"\n"
" ・ Sunbirdなど他のカレンダークライアントとミーティング情報を共有できます。\n"
#. module: base
#: model:ir.module.module,shortdesc:base.module_base_iban
msgid "IBAN Bank Accounts"
msgstr ""
msgstr "IBAN銀行口座"
#. module: base
#: field:res.company,user_ids:0
msgid "Accepted Users"
msgstr ""
msgstr "受け入れられたユーザ"
#. module: base
#: field:ir.ui.menu,web_icon_data:0
msgid "Web Icon Image"
msgstr ""
msgstr "Webアイコンイメージ"
#. module: base
#: field:ir.actions.server,wkf_model_id:0
msgid "Target Object"
msgstr ""
msgstr "目的のオブジェクト"
#. module: base
#: selection:ir.model.fields,select_level:0
msgid "Always Searchable"
msgstr ""
msgstr "常時検索可能"
#. module: base
#: model:res.country,name:base.hk
msgid "Hong Kong"
msgstr ""
msgstr "香港"
#. module: base
#: field:ir.default,ref_id:0
msgid "ID Ref."
msgstr ""
msgstr "ID参照"
#. module: base
#: model:ir.actions.act_window,help:base.action_partner_address_form
@ -9337,7 +9487,7 @@ msgstr ""
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (EC) / Español (EC)"
msgstr ""
msgstr "スペイン語(エクアドル)/ Español (EC)"
#. module: base
#: help:ir.ui.view,xml_id:0
@ -9964,7 +10114,7 @@ msgstr ""
#. module: base
#: selection:base.language.install,lang:0
msgid "Flemish (BE) / Vlaams (BE)"
msgstr ""
msgstr "フラマン語(ベルギー)/ Vlaams (BE)"
#. module: base
#: field:ir.cron,interval_number:0
@ -10817,7 +10967,7 @@ msgstr ""
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (CO) / Español (CO)"
msgstr ""
msgstr "スペイン語(コロンビア)/ Español (CO)"
#. module: base
#: view:base.module.configuration:0
@ -10935,7 +11085,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_cn
msgid "中国会计科目表 - Accounting"
msgstr ""
msgstr "中国-会計"
#. module: base
#: view:ir.model.access:0
@ -10964,7 +11114,7 @@ msgstr ""
#. module: base
#: selection:base.language.install,lang:0
msgid "Chinese (TW) / 正體字"
msgstr ""
msgstr "中国語(台湾)/ 正體字"
#. module: base
#: model:ir.model,name:base.model_res_request
@ -11433,7 +11583,7 @@ msgstr ""
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (CR) / Español (CR)"
msgstr ""
msgstr "スペイン語(コスタリカ)/ Español (CR)"
#. module: base
#: view:ir.rule:0
@ -11653,7 +11803,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_br
msgid "Brazilian - Accounting"
msgstr ""
msgstr "ブラジル-会計"
#. module: base
#: model:res.country,name:base.pk
@ -12328,7 +12478,7 @@ msgstr ""
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (NI) / Español (NI)"
msgstr ""
msgstr "スペイン語(ニカラグア)/ Español (NI)"
#. module: base
#: model:ir.module.module,description:base.module_product_visible_discount
@ -12666,7 +12816,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_uk
msgid "UK - Accounting"
msgstr ""
msgstr "イギリス-会計"
#. module: base
#: model:ir.module.module,description:base.module_project_scrum
@ -12737,7 +12887,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_in
msgid "India - Accounting"
msgstr ""
msgstr "インド-会計"
#. module: base
#: field:ir.actions.server,expression:0
@ -12752,7 +12902,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_gt
msgid "Guatemala - Accounting"
msgstr ""
msgstr "グアテマラ-会計"
#. module: base
#: help:ir.cron,args:0
@ -13713,7 +13863,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_th
msgid "Thailand - Accounting"
msgstr ""
msgstr "タイ-会計"
#. module: base
#: view:res.lang:0
@ -14334,7 +14484,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_es
msgid "Spanish - Accounting (PGCE 2008)"
msgstr ""
msgstr "スペイン会計PGCE 2008"
#. module: base
#: model:ir.module.module,shortdesc:base.module_stock_no_autopicking
@ -14429,7 +14579,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_nl
msgid "Netherlands - Accounting"
msgstr ""
msgstr "オランダ-会計"
#. module: base
#: field:res.bank,bic:0
@ -14743,7 +14893,7 @@ msgstr ""
#. module: base
#: selection:base.language.install,lang:0
msgid "Serbian (Cyrillic) / српски"
msgstr ""
msgstr "セルビア語(キリル文字)/ српски"
#. module: base
#: code:addons/orm.py:2527
@ -15137,7 +15287,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_de
msgid "Deutschland - Accounting"
msgstr ""
msgstr "ドイツ-会計"
#. module: base
#: model:ir.module.module,shortdesc:base.module_auction
@ -15391,7 +15541,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_fr
msgid "France - Accounting"
msgstr ""
msgstr "フランス-会計"
#. module: base
#: view:ir.actions.todo:0
@ -15720,7 +15870,7 @@ msgstr ""
#. module: base
#: selection:base.language.install,lang:0
msgid "Spanish (SV) / Español (SV)"
msgstr ""
msgstr "スペイン語(エルサルバドル)/ Español (SV)"
#. module: base
#: help:res.lang,grouping:0
@ -15803,7 +15953,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_ca
msgid "Canada - Accounting"
msgstr ""
msgstr "カナダ-会計"
#. module: base
#: model:ir.actions.act_window,name:base.act_ir_actions_todo_form
@ -15842,7 +15992,7 @@ msgstr ""
#. module: base
#: model:ir.module.module,shortdesc:base.module_l10n_ve
msgid "Venezuela - Accounting"
msgstr ""
msgstr "ベネズエラ-会計"
#. module: base
#: model:res.country,name:base.cl

15313
openerp/addons/base/i18n/ka.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -54,11 +54,11 @@ class ir_attachment(osv.osv):
ima.check(cr, uid, model, mode)
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,
context=None, count=False):
ids = super(ir_attachment, self).search(cr, uid, args, offset=offset,
limit=limit, order=order,
context=context, count=False)
def _search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False, access_rights_uid=None):
ids = super(ir_attachment, self)._search(cr, uid, args, offset=offset,
limit=limit, order=order,
context=context, count=count,
access_rights_uid=access_rights_uid)
if not ids:
if count:
return 0

View File

@ -2,7 +2,7 @@
##############################################################################
#
# 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
# it under the terms of the GNU Affero General Public License as
@ -22,6 +22,7 @@
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email.MIMEMultipart import MIMEMultipart
from email.Charset import Charset
from email.Header import Header
from email.Utils import formatdate, make_msgid, COMMASPACE
from email import Encoders
@ -97,6 +98,26 @@ def encode_header(header_text):
return header_text_ascii if header_text_ascii\
else Header(header_text_utf8, 'utf-8')
def encode_header_param(param_text):
"""Returns an appropriate RFC2047 encoded representation of the given
header parameter value, suitable for direct assignation as the
param value (e.g. via Message.set_param() or Message.add_header())
RFC2822 assumes that headers contain only 7-bit characters,
so we ensure it is the case, using RFC2047 encoding when needed.
:param param_text: unicode or utf-8 encoded string with header value
:rtype: string
:return: if ``param_text`` represents a plain ASCII string,
return the same 7-bit string, otherwise returns an
ASCII string containing the RFC2047 encoded text.
"""
# For details see the encode_header() method that uses the same logic
if not param_text: return ""
param_text_utf8 = tools.ustr(param_text).encode('utf-8')
param_text_ascii = try_coerce_ascii(param_text_utf8)
return param_text_ascii if param_text_ascii\
else Charset('utf8').header_encode(param_text_utf8)
name_with_email_pattern = re.compile(r'("[^<@>]+")\s*<([^ ,<@]+@[^> ,]+)>')
address_pattern = re.compile(r'([^ ,<@]+@[^> ,]+)')
@ -232,6 +253,11 @@ class ir_mail_server(osv.osv):
if user:
# 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)
return connection
@ -304,7 +330,7 @@ class ir_mail_server(osv.osv):
msg['Cc'] = encode_rfc2822_address_header(COMMASPACE.join(email_cc))
if email_bcc:
msg['Bcc'] = encode_rfc2822_address_header(COMMASPACE.join(email_bcc))
msg['Date'] = formatdate(localtime=True)
msg['Date'] = formatdate()
# Custom headers may override normal headers or provide additional ones
for key, value in headers.iteritems():
msg[ustr(key).encode('utf-8')] = encode_header(value)
@ -329,14 +355,16 @@ class ir_mail_server(osv.osv):
if attachments:
for (fname, fcontent) in attachments:
filename_utf8 = ustr(fname).encode('utf-8')
filename_rfc2047 = encode_header_param(fname)
part = MIMEBase('application', "octet-stream")
# The default RFC2231 encoding of Message.add_header() works in Thunderbird but not GMail
# so we fix it by using RFC2047 encoding for the filename instead.
part.set_param('name', filename_rfc2047)
part.add_header('Content-Disposition', 'attachment', filename=filename_rfc2047)
part.set_payload(fcontent)
Encoders.encode_base64(part)
# Force RFC2231 encoding for attachment filename
# See email.message.Message.add_header doc
part.add_header('Content-Disposition', 'attachment',
filename=('utf-8',None,filename_utf8))
msg.attach(part)
return msg
@ -364,7 +392,6 @@ class ir_mail_server(osv.osv):
: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_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
MailDeliveryException and logs root cause.
"""

View File

@ -35,12 +35,14 @@ import pooler
_logger = logging.getLogger(__name__)
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()
if type(v) == types.TypeType
if issubclass(v, fields._column)
if v != fields._column
if not v._deprecated
if not issubclass(v, fields.function)])
if type(v) == types.TypeType and \
issubclass(v, fields._column) and \
v != fields._column and \
not v._deprecated and \
not issubclass(v, fields.function)])
def _in_modules(self, cr, uid, ids, field_name, arg, context=None):
#pseudo-method used by fields.function in ir.model/ir.model.fields

View File

@ -75,7 +75,7 @@ class ir_rule(osv.osv):
_columns = {
'name': fields.char('Name', size=128, select=1),
'model_id': fields.many2one('ir.model', 'Object',select=1, required=True),
'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"),
'groups': fields.many2many('res.groups', 'rule_group_rel', 'rule_group_id', 'group_id', 'Groups'),
'domain_force': fields.text('Domain'),

View File

@ -404,7 +404,7 @@ class ir_values(osv.osv):
results[action['name']] = (action['id'], action['name'], action_def)
except except_orm, e:
continue
return results.values()
return sorted(results.values())
def _map_legacy_model_list(self, model_list, map_fn, merge_results=False):
"""Apply map_fn to the various models passed, according to

View File

@ -452,6 +452,7 @@ class module(osv.osv):
'sequence': terp.get('sequence', 100),
'application': terp.get('application', False),
'auto_install': terp.get('auto_install', False),
'icon': terp.get('icon', False),
}
# update the list of available packages

View File

@ -42,6 +42,9 @@ class base_module_upgrade(osv.osv_memory):
@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)
if view_type != 'form':
return res
record_id = context and context.get('active_id', False) or False
active_model = context.get('active_model')
if (not record_id) or (not active_model):

View File

@ -21,6 +21,23 @@
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):
_name = 'res.country'
@ -48,23 +65,10 @@ addresses belonging to this country.\n\nYou can use the python-style string pate
_defaults = {
'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'
name_search = location_name_search
def create(self, cursor, user, vals, context=None):
if 'code' in vals:
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,
context=context)
Country()
class CountryState(osv.osv):
_description="Country state"
@ -90,23 +92,9 @@ class CountryState(osv.osv):
'code': fields.char('State Code', size=3,
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'
CountryState()
name_search = location_name_search
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -346,21 +346,35 @@ class res_partner_address(osv.osv):
def name_search(self, cr, user, name, args=None, operator='ilike', context=None, limit=100):
if not args:
args=[]
if not context:
context={}
if context.get('contact_display', 'contact')=='partner ' or context.get('contact_display', 'contact')=='partner_address ' :
ids = self.search(cr, user, [('partner_id',operator,name)], limit=limit, context=context)
args = []
if context is None:
context = {}
if not name:
ids = self.search(cr, user, args, limit=limit, context=context)
elif context.get('contact_display', 'contact') == 'partner':
ids = self.search(cr, user, [('partner_id', operator, name)] + args, limit=limit, context=context)
else:
if not name:
ids = self.search(cr, user, args, limit=limit, context=context)
# first lookup zip code, as it is a common and efficient way to search on these data
ids = self.search(cr, user, [('zip', '=', name)] + args, limit=limit, context=context)
# then search on other fields:
if context.get('contact_display', 'contact') == 'partner_address':
fields = ['partner_id', 'name', 'country_id', 'city', 'street']
else:
ids = self.search(cr, user, [('zip','=',name)] + args, limit=limit, context=context)
if not ids:
ids = self.search(cr, user, [('city',operator,name)] + args, limit=limit, context=context)
if name:
ids += self.search(cr, user, [('name',operator,name)] + args, limit=limit, context=context)
ids += self.search(cr, user, [('partner_id',operator,name)] + args, limit=limit, context=context)
fields = ['name', 'country_id', 'city', 'street']
# Here we have to search the records that satisfy the domain:
# OR([[(f, operator, name)] for f in fields])) + args
# Searching on such a domain can be dramatically inefficient, due to the expansion made
# for field translations, and the handling of the disjunction by the DB engine itself.
# So instead, we search field by field until the search limit is reached.
while len(ids) < limit and fields:
f = fields.pop(0)
new_ids = self.search(cr, user, [(f, operator, name)] + args, limit=limit, context=context)
# extend ids with the ones in new_ids that are not in ids yet (and keep order)
old_ids = set(ids)
ids.extend([id for id in new_ids if id not in old_ids])
ids = ids[:limit]
return self.name_get(cr, user, ids, context=context)
def get_city(self, cr, uid, id):

View File

@ -6,7 +6,11 @@
web_icon_hover="data/sales-hover.png"
groups="base.group_sale_salesman"/>
<menuitem id="menu_address_book" name="Address Book" parent="menu_base_partner" sequence="2"/>
<menuitem id="base.menu_sales" name="Sales"
parent="base.menu_base_partner" sequence="1"
/>
<!-- <menuitem id="menu_address_book" name="Address Book" parent="menu_base_partner" sequence="2"/> -->
<menuitem id="menu_base_config" name="Configuration" parent="menu_base_partner" sequence="30"
groups="group_system"/>
@ -175,7 +179,7 @@
</kanban>
</field>
</record>
<record id="action_partner_address_form" model="ir.actions.act_window">
<field name="name">Addresses</field>
<field name="type">ir.actions.act_window</field>
@ -198,9 +202,6 @@
<field name="view_id" ref="view_partner_address_form1"/>
<field name="act_window_id" ref="action_partner_address_form"/>
</record>
<menuitem action="action_partner_address_form" id="menu_partner_address_form"
groups="base.group_extended" name="Contacts"
parent="base.menu_address_book" sequence="30"/>
<!--
=========================================
@ -524,8 +525,8 @@
<menuitem
action="action_partner_form"
id="menu_partner_form"
parent="base.menu_address_book"
sequence="2"/>
parent="base.menu_sales"
sequence="8"/>
<record id="action_partner_customer_form" model="ir.actions.act_window">
<field name="name">Customers</field>

View File

@ -35,8 +35,8 @@
<field name="name">user rule</field>
<field model="ir.model" name="model_id" ref="model_res_users"/>
<field eval="True" name="global"/>
<field name="domain_force">['|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id])]</field>
<field name="domain_force">[('company_ids','child_of',[user.company_id.id])]</field>
</record>
</data>
</data>
</openerp>

View File

@ -34,6 +34,9 @@ from service import security
from tools.translate import _
import openerp
import openerp.exceptions
from lxml import etree
from lxml.builder import E
_logger = logging.getLogger(__name__)
@ -743,29 +746,27 @@ class groups_view(osv.osv):
# and introduces the reified group fields
view = self.get_user_groups_view(cr, uid, context)
if view:
xml = u"""<?xml version="1.0" encoding="utf-8"?>
<!-- GENERATED AUTOMATICALLY BY GROUPS -->
<field name="groups_id" position="replace">
%s
%s
</field>
"""
xml1, xml2 = [], []
xml1.append('<separator string="%s" colspan="4"/>' % _('Applications'))
xml1.append(E.separator(string=_('Application'), colspan="4"))
for app, kind, gs in self.get_groups_by_application(cr, uid, context):
if kind == 'selection':
# application name with a selection field
field_name = name_selection_groups(map(int, gs))
xml1.append('<field name="%s"/>' % field_name)
xml1.append('<newline/>')
xml1.append(E.field(name=field_name))
xml1.append(E.newline())
else:
# application separator with boolean fields
app_name = app and app.name or _('Other')
xml2.append('<separator string="%s" colspan="4"/>' % app_name)
xml2.append(E.separator(string=app_name, colspan="4"))
for g in gs:
field_name = name_boolean_group(g.id)
xml2.append('<field name="%s"/>' % field_name)
view.write({'arch': xml % ('\n'.join(xml1), '\n'.join(xml2))})
xml2.append(E.field(name=field_name))
xml = E.field(*(xml1 + xml2), name="groups_id", position="replace")
xml.addprevious(etree.Comment("GENERATED AUTOMATICALLY BY GROUPS"))
xml_content = etree.tostring(xml, pretty_print=True, xml_declaration=True, encoding="utf-8")
view.write({'arch': xml_content})
return True
def get_user_groups_view(self, cr, uid, context=None):

View File

@ -121,17 +121,22 @@ def get_encodings(hint_encoding='utf-8'):
if prefenc:
yield prefenc
def ustr(value, hint_encoding='utf-8'):
"""This method is similar to the builtin `str` method, except
it will return unicode() string.
def ustr(value, hint_encoding='utf-8', errors='strict'):
"""This method is similar to the builtin `unicode`, except
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 hint_encoding: an optional encoding that was detected
upstream and should be tried first to
decode ``value``.
@rtype: unicode
@return: unicode string
:param: value: the value to convert
:param: hint_encoding: an optional encoding that was detecte
upstream and should be tried first to decode ``value``.
:param str error: optional `errors` flag to pass to the unicode
built-in to indicate how illegal character values should be
treated when converting a string: 'strict', 'ignore' or 'replace'.
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):
return exception_to_unicode(value)
@ -147,7 +152,7 @@ def ustr(value, hint_encoding='utf-8'):
for ln in get_encodings(hint_encoding):
try:
return unicode(value, ln)
return unicode(value, ln, errors=errors)
except Exception:
pass
raise UnicodeError('unable to convert %r' % (value,))

View File

@ -151,7 +151,7 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
_logger.debug('loading %d packages...', len(graph))
# get db timestamp
cr.execute("select now()::timestamp")
cr.execute("select (now() at time zone 'UTC')::timestamp")
dt_before_load = cr.fetchone()[0]
# register, instantiate and initialize models for each modules

View File

@ -357,6 +357,8 @@ def dispatch_rpc(service_name, method, params):
if rpc_request and rpc_response_flag:
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)
if rpc_request_flag or rpc_response_flag:

View File

@ -364,7 +364,15 @@ class time(_column):
class binary(_column):
_type = 'binary'
_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_get = lambda self, x: x and str(x)

View File

@ -750,7 +750,7 @@ class BaseModel(object):
name_id = 'model_'+self._name.replace('.', '_')
cr.execute('select * from ir_model_data where name=%s and module=%s', (name_id, context['module']))
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)
)
@ -816,7 +816,7 @@ class BaseModel(object):
cr.execute("select name from ir_model_data where name=%s", (name1,))
if cr.fetchone():
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)
)
else:
@ -872,11 +872,11 @@ class BaseModel(object):
for parent_name in ((type(parent_names)==list) and parent_names or [parent_names]):
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:
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))
if not getattr(cls, '_original_module', None) and name == parent_model._name:
cls._original_module = parent_model._original_module
parent_class = parent_model.__class__
nattr = {}
for s in attributes:
@ -2690,7 +2690,7 @@ class BaseModel(object):
elif val in dict(self._columns[field].selection(self, cr, uid, context=context)):
return
raise except_orm(_('ValidateError'),
_('The value "%s" for the field "%s.%s" is not in the selection') % (value, self._table, field))
_('The value "%s" for the field "%s.%s" is not in the selection') % (value, self._table, field))
def _check_removed_columns(self, cr, log=False):
# iterate on the database columns to drop the NOT NULL constraints
@ -2733,6 +2733,50 @@ class BaseModel(object):
_schema.debug("Table '%s': added foreign key '%s' with definition=REFERENCES \"%s\" ON DELETE %s",
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):
"""
@ -2932,31 +2976,8 @@ class BaseModel(object):
if isinstance(f, fields.many2one):
dest_model = self.pool.get(f._obj)
ref = dest_model._table
if ref != 'ir_actions':
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)
if dest_model._table != 'ir_actions':
self._m2o_fix_foreign_key(cr, self._table, k, dest_model, f.ondelete)
# The field doesn't exist in database. Create it if necessary.
else:
@ -3152,6 +3173,9 @@ class BaseModel(object):
_sql_constraints.
"""
def unify_cons_text(txt):
return txt.lower().replace(', ',',').replace(' (','(')
for (key, con, _) in self._sql_constraints:
conname = '%s_%s' % (self._table, key)
@ -3181,7 +3205,7 @@ class BaseModel(object):
# constraint does not exists:
sql_actions['add']['execute'] = True
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:
sql_actions['drop']['execute'] = True
sql_actions['drop']['msg_ok'] = sql_actions['drop']['msg_ok'] % (existing_constraints[0]['condef'].lower(), )
@ -3416,8 +3440,8 @@ class BaseModel(object):
return "date_trunc('second', %s) as %s" % (f_qual, f)
if f == self.CONCURRENCY_CHECK_FIELD:
if self._log_access:
return "COALESCE(%s.write_date, %s.create_date, now())::timestamp AS %s" % (self._table, self._table, f,)
return "now()::timestamp AS %s" % (f,)
return "COALESCE(%s.write_date, %s.create_date, (now() at time zone 'UTC'))::timestamp AS %s" % (self._table, self._table, f,)
return "(now() at time zone 'UTC')::timestamp AS %s" % (f,)
if isinstance(self._columns[f], fields.binary) and context.get('bin_size', False):
return 'length(%s) as "%s"' % (f_qual, f)
return f_qual
@ -3598,7 +3622,7 @@ class BaseModel(object):
return
if not (context.get(self.CONCURRENCY_CHECK_FIELD) and self._log_access):
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):
ids_to_check = []
for id in sub_ids:
@ -3882,7 +3906,7 @@ class BaseModel(object):
if self._log_access:
upd0.append('write_uid=%s')
upd0.append('write_date=now()')
upd0.append("write_date=(now() at time zone 'UTC')")
upd1.append(user)
if len(upd0):
@ -4149,7 +4173,7 @@ class BaseModel(object):
self._check_selection_field_value(cr, user, field, vals[field], context=context)
if self._log_access:
upd0 += ',create_uid,create_date'
upd1 += ',%s,now()'
upd1 += ",%s,(now() at time zone 'UTC')"
upd2.append(user)
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)
@ -4382,13 +4406,11 @@ class BaseModel(object):
domain = domain[:]
# if the object has a field named 'active', filter out all inactive
# 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:
active_in_args = False
for a in domain:
if a[0] == 'active':
active_in_args = True
if not active_in_args:
# the item[0] trick below works for domain items and '&'/'|'/'!'
# operators too
if not any(item[0] == 'active' for item in domain):
domain.insert(0, ('active', '=', 1))
else:
domain = [('active', '=', 1)]
@ -4852,15 +4874,15 @@ class BaseModel(object):
def _transient_clean_rows_older_than(self, cr, seconds):
assert self._transient, "Model %s is not transient, it cannot be vacuumed!" % self._name
cr.execute("SELECT id FROM " + self._table + " WHERE"
" COALESCE(write_date, create_date, now())::timestamp <"
" (now() - interval %s)", ("%s seconds" % seconds,))
" COALESCE(write_date, create_date, (now() at time zone 'UTC'))::timestamp <"
" ((now() at time zone 'UTC') - interval %s)", ("%s seconds" % seconds,))
ids = [x[0] for x in cr.fetchall()]
self.unlink(cr, SUPERUSER_ID, ids)
def _transient_clean_old_rows(self, cr, count):
assert self._transient, "Model %s is not transient, it cannot be vacuumed!" % self._name
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 +
" ORDER BY t LIMIT %s", (count,))
ids = [x[0] for x in cr.fetchall()]

View File

@ -30,7 +30,7 @@ RELEASE_LEVELS_DISPLAY = {ALPHA: ALPHA,
# 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,'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 '')
major_version = '.'.join(map(str,version_info[:2]))

View File

@ -173,6 +173,8 @@ class db(netsvc.ExportService):
raise Exception, e
def exp_drop(self, db_name):
if not self.exp_db_exist(db_name):
return False
openerp.modules.registry.RegistryManager.delete(db_name)
sql_db.close_db(db_name)
@ -180,6 +182,17 @@ class db(netsvc.ExportService):
cr = db.cursor()
cr.autocommit(True) # avoid transaction block
try:
# Try to terminate all other connections that might prevent
# dropping the database
try:
cr.execute("""SELECT pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE datname = %s AND
procpid != pg_backend_pid()""",
(db_name,))
except Exception:
pass
try:
cr.execute('DROP DATABASE "%s"' % db_name)
except Exception, e:
@ -561,6 +574,7 @@ class objects_proxy(netsvc.ExportService):
def dispatch(self, method, params):
(db, uid, passwd ) = params[0:3]
threading.current_thread().uid = uid
params = params[3:]
if method == 'obj_list':
raise NameError("obj_list has been discontinued via RPC as of 6.0, please query ir.model directly!")
@ -594,6 +608,7 @@ class wizard(netsvc.ExportService):
def dispatch(self, method, params):
(db, uid, passwd ) = params[0:3]
threading.current_thread().uid = uid
params = params[3:]
if method not in ['execute','create']:
raise KeyError("Method not supported %s" % method)
@ -645,6 +660,7 @@ class report_spool(netsvc.ExportService):
def dispatch(self, method, params):
(db, uid, passwd ) = params[0:3]
threading.current_thread().uid = uid
params = params[3:]
if method not in ['report', 'report_get', 'render_report']:
raise KeyError("Method not supported %s" % method)

View File

@ -96,6 +96,7 @@ class test_ir_sequence_no_gap(unittest2.TestCase):
"""
cr0 = cursor()
cr1 = cursor()
cr1._default_log_exceptions = False # Prevent logging a traceback
msg_re = '^could not obtain lock on row in relation "ir_sequence"$'
with self.assertRaisesRegexp(psycopg2.OperationalError, msg_re):
n0 = registry('ir.sequence').get(cr0, ADMIN_USER_ID, 'test_sequence_type_2', {})

View File

@ -313,7 +313,8 @@ class graph(object):
self.order[level] = self.order[level]+1
for sec_end in self.transitions.get(node, []):
self.init_order(sec_end, self.result[sec_end]['x'])
if node!=sec_end:
self.init_order(sec_end, self.result[sec_end]['x'])
def order_heuristic(self):
@ -438,33 +439,27 @@ class graph(object):
l.reverse()
no = len(l)
if no%2==0:
first_half = l[no/2:]
factor = 1
else:
first_half = l[no/2+1:]
factor = 0
rest = no%2
first_half = l[no/2+rest:]
last_half = l[:no/2]
i=1
for child in first_half:
self.result[child]['y'] = mid_pos - (i - (factor * 0.5))
i += 1
for i, child in enumerate(first_half):
self.result[child]['y'] = mid_pos - (i+1 - (0 if rest else 0.5))
if self.transitions.get(child, False):
if last:
self.result[child]['y'] = last + len(self.transitions[child])/2 + 1
last = self.tree_order(child, last)
if no%2:
if rest:
mid_node = l[no/2]
self.result[mid_node]['y'] = mid_pos
if self.transitions.get((mid_node), False):
if last:
self.result[mid_node]['y'] = last + len(self.transitions[mid_node])/2 + 1
last = self.tree_order(mid_node)
if node!=mid_node:
last = self.tree_order(mid_node)
else:
if last:
self.result[mid_node]['y'] = last + 1
@ -474,13 +469,14 @@ class graph(object):
i=1
last_child = None
for child in last_half:
self.result[child]['y'] = mid_pos + (i - (factor * 0.5))
self.result[child]['y'] = mid_pos + (i - (0 if rest else 0.5))
last_child = child
i += 1
if self.transitions.get(child, False):
if last:
self.result[child]['y'] = last + len(self.transitions[child])/2 + 1
last = self.tree_order(child, last)
if node!=child:
last = self.tree_order(child, last)
if last_child:
last = self.result[last_child]['y']

View File

@ -3,7 +3,7 @@
#
# OpenERP, Open Source Management Solution
# 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
# 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,
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:
_logger.exception("tools.email_send failed to deliver email")
return False

View File

@ -20,9 +20,7 @@
##############################################################################
def drop_view_if_exists(cr, viewname):
cr.execute("select count(1) from pg_class where relkind=%s and relname=%s", ('v', viewname,))
if cr.fetchone()[0]:
cr.execute("DROP view %s" % (viewname,))
cr.commit()
cr.execute("DROP view IF EXISTS %s CASCADE" % (viewname,))
cr.commit()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: