[MERGE]: Merge with latest trunk-server
bzr revid: rpa@tinyerp.com-20111116051110-jtb3437w8vu3qhph
This commit is contained in:
+10
-4
@@ -179,9 +179,12 @@ def dumpstacks(sig, frame):
|
||||
def setup_signal_handlers():
|
||||
""" Register the signal handler defined above. """
|
||||
SIGNALS = map(lambda x: getattr(signal, "SIG%s" % x), "INT TERM".split())
|
||||
map(lambda sig: signal.signal(sig, signal_handler), SIGNALS)
|
||||
if os.name == 'posix':
|
||||
map(lambda sig: signal.signal(sig, signal_handler), SIGNALS)
|
||||
signal.signal(signal.SIGQUIT, dumpstacks)
|
||||
elif os.name == 'nt':
|
||||
import win32api
|
||||
win32api.SetConsoleCtrlHandler(lambda sig: signal_handler(sig, None), 1)
|
||||
|
||||
def quit_on_signals():
|
||||
""" Wait for one or two signals then shutdown the server.
|
||||
@@ -191,9 +194,12 @@ def quit_on_signals():
|
||||
|
||||
"""
|
||||
# Wait for a first signal to be handled. (time.sleep will be interrupted
|
||||
# by the signal handler.)
|
||||
while quit_signals_received == 0:
|
||||
time.sleep(60)
|
||||
# by the signal handler.) The try/except is for the win32 case.
|
||||
try:
|
||||
while quit_signals_received == 0:
|
||||
time.sleep(60)
|
||||
except KeyboardInterrupt, e:
|
||||
pass
|
||||
|
||||
if config['pidfile']:
|
||||
os.unlink(config['pidfile'])
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<openerp>
|
||||
<data>
|
||||
<menuitem icon="terp-administration" id="menu_administration"
|
||||
name="Administration" sequence="50"
|
||||
name="Settings" sequence="50"
|
||||
web_icon="data/administration.png"
|
||||
web_icon_hover="data/administration-hover.png"/>
|
||||
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:14+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:14+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
@@ -33,7 +33,7 @@ msgstr "سانت هيلينا"
|
||||
#. module: base
|
||||
#: view:ir.actions.report.xml:0
|
||||
msgid "Other Configuration"
|
||||
msgstr "عدادت أخري"
|
||||
msgstr "إعدادات أخرى"
|
||||
|
||||
#. module: base
|
||||
#: selection:ir.property,type:0
|
||||
@@ -103,7 +103,7 @@ msgstr "سير العمل نشط"
|
||||
#. module: base
|
||||
#: field:ir.actions.act_window,display_menu_tip:0
|
||||
msgid "Display Menu Tips"
|
||||
msgstr ""
|
||||
msgstr "عرض إرشادات القائمة"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.module.module:0
|
||||
@@ -117,6 +117,8 @@ msgid ""
|
||||
"You can not write in this document (%s) ! Be sure your user belongs to one "
|
||||
"of these groups: %s."
|
||||
msgstr ""
|
||||
"لا يمكنك تعديل هذا المستند (%s)! تأكد من أنك تنتمي إلى إحدى المجموعات "
|
||||
"التالية: %s."
|
||||
|
||||
#. module: base
|
||||
#: help:ir.model.fields,domain:0
|
||||
@@ -134,7 +136,7 @@ msgstr ""
|
||||
#. module: base
|
||||
#: field:ir.actions.act_window,target:0
|
||||
msgid "Target Window"
|
||||
msgstr ""
|
||||
msgstr "نافذة الهدف"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/res/res_user.py:507
|
||||
@@ -154,7 +156,7 @@ msgstr ""
|
||||
#: code:addons/osv.py:133
|
||||
#, python-format
|
||||
msgid "Constraint Error"
|
||||
msgstr ""
|
||||
msgstr "خطأ تقييد"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_ir_ui_view_custom
|
||||
@@ -171,12 +173,12 @@ msgstr ""
|
||||
#: code:addons/orm.py:3653
|
||||
#, python-format
|
||||
msgid "created."
|
||||
msgstr ""
|
||||
msgstr "تمّ الإنشاء"
|
||||
|
||||
#. module: base
|
||||
#: model:res.partner.category,name:base.res_partner_category_woodsuppliers0
|
||||
msgid "Wood Suppliers"
|
||||
msgstr ""
|
||||
msgstr "مورّدو الخشب"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/module/module.py:303
|
||||
@@ -185,6 +187,8 @@ msgid ""
|
||||
"Some installed modules depend on the module you plan to Uninstall :\n"
|
||||
" %s"
|
||||
msgstr ""
|
||||
"ثمّة وحدات برمجية تعتمد على الوحدة التي تريد إزالتها:\n"
|
||||
" %s"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.sequence,number_increment:0
|
||||
@@ -195,7 +199,7 @@ msgstr ""
|
||||
#: model:ir.actions.act_window,name:base.action_res_company_tree
|
||||
#: model:ir.ui.menu,name:base.menu_action_res_company_tree
|
||||
msgid "Company's Structure"
|
||||
msgstr ""
|
||||
msgstr "هيكل الشركة"
|
||||
|
||||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
@@ -211,7 +215,7 @@ msgstr ""
|
||||
#: code:addons/base/res/res_user.py:132
|
||||
#, python-format
|
||||
msgid "\"smtp_server\" needs to be set to send mails to users"
|
||||
msgstr ""
|
||||
msgstr "لا بدّ من تعيين خادم إرسال البريد الإلكتروني \"smtp_server\""
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/module/wizard/base_export_language.py:60
|
||||
@@ -227,7 +231,7 @@ msgstr ""
|
||||
#. module: base
|
||||
#: field:ir.module.category,module_nr:0
|
||||
msgid "Number of Modules"
|
||||
msgstr ""
|
||||
msgstr "عدد البرامج"
|
||||
|
||||
#. module: base
|
||||
#: help:multi_company.default,company_dest_id:0
|
||||
@@ -237,7 +241,7 @@ msgstr ""
|
||||
#. module: base
|
||||
#: field:res.partner.bank.type.field,size:0
|
||||
msgid "Max. Size"
|
||||
msgstr ""
|
||||
msgstr "الحجم الأقصى"
|
||||
|
||||
#. module: base
|
||||
#: field:res.partner.address,name:0
|
||||
@@ -255,7 +259,7 @@ msgstr ""
|
||||
#. module: base
|
||||
#: sql_constraint:res.lang:0
|
||||
msgid "The name of the language must be unique !"
|
||||
msgstr ""
|
||||
msgstr "لا بدّ أن يكون اسم اللغة مختلفاً عن اللغات الأخرى"
|
||||
|
||||
#. module: base
|
||||
#: selection:res.request,state:0
|
||||
@@ -265,7 +269,7 @@ msgstr "نشط"
|
||||
#. module: base
|
||||
#: field:ir.actions.wizard,wiz_name:0
|
||||
msgid "Wizard Name"
|
||||
msgstr ""
|
||||
msgstr "اسم المعالج"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/orm.py:2160
|
||||
@@ -296,7 +300,7 @@ msgstr ""
|
||||
#. module: base
|
||||
#: view:ir.actions.todo:0
|
||||
msgid "Config Wizard Steps"
|
||||
msgstr ""
|
||||
msgstr "خطوات إعداد المعالج"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_ir_ui_view_sc
|
||||
@@ -362,6 +366,8 @@ msgid ""
|
||||
"You can not remove the admin user as it is used internally for resources "
|
||||
"created by OpenERP (updates, module installation, ...)"
|
||||
msgstr ""
|
||||
"لا يمكنك حذف المستخدم المشرف العام (admin) لأنه يسنخدم داخلياً بواسطة "
|
||||
"OpenERP في عمليات التحديث و إضافة البرامج الأخري"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.gf
|
||||
@@ -399,7 +405,7 @@ msgstr ""
|
||||
#. module: base
|
||||
#: view:base.module.upgrade:0
|
||||
msgid "Your system will be updated."
|
||||
msgstr ""
|
||||
msgstr "سوف يتمّ تحديث نظامك"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.actions.todo,note:0
|
||||
@@ -420,7 +426,7 @@ msgstr "كولومبيا"
|
||||
#. module: base
|
||||
#: view:ir.module.module:0
|
||||
msgid "Schedule Upgrade"
|
||||
msgstr ""
|
||||
msgstr "حدّد موعد الترقية"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/orm.py:838
|
||||
@@ -434,6 +440,8 @@ msgid ""
|
||||
"The ISO country code in two chars.\n"
|
||||
"You can use this field for quick search."
|
||||
msgstr ""
|
||||
"رمز ISO للدولة والمكون من حرفين\n"
|
||||
"يمكنك استخدام هذا الحقل للبحث السريع."
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.pw
|
||||
@@ -461,12 +469,12 @@ msgstr ""
|
||||
#: view:ir.actions.wizard:0
|
||||
#: model:ir.ui.menu,name:base.menu_ir_action_wizard
|
||||
msgid "Wizards"
|
||||
msgstr ""
|
||||
msgstr "المعالجات"
|
||||
|
||||
#. module: base
|
||||
#: model:res.partner.category,name:base.res_partner_category_miscellaneoussuppliers0
|
||||
msgid "Miscellaneous Suppliers"
|
||||
msgstr ""
|
||||
msgstr "مورّدون متنوعون"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_model.py:255
|
||||
@@ -487,12 +495,12 @@ msgstr ""
|
||||
#. module: base
|
||||
#: view:base.language.export:0
|
||||
msgid "Export done"
|
||||
msgstr ""
|
||||
msgstr "تمّت عملية التصدير"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.model:0
|
||||
msgid "Model Description"
|
||||
msgstr ""
|
||||
msgstr "وصف النموذج"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.actions.act_window,src_model:0
|
||||
@@ -590,7 +598,7 @@ msgstr ""
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_base_language_import
|
||||
msgid "Language Import"
|
||||
msgstr ""
|
||||
msgstr "استيراد اللغة"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_res_config_users
|
||||
@@ -635,12 +643,12 @@ msgstr ""
|
||||
#. module: base
|
||||
#: view:res.partner:0
|
||||
msgid "My Partners"
|
||||
msgstr ""
|
||||
msgstr "شركائي"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.actions.report.xml:0
|
||||
msgid "XML Report"
|
||||
msgstr ""
|
||||
msgstr "تقرير XML"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.es
|
||||
@@ -650,7 +658,7 @@ msgstr ""
|
||||
#. module: base
|
||||
#: model:ir.ui.menu,name:base.menu_translation_export
|
||||
msgid "Import / Export"
|
||||
msgstr ""
|
||||
msgstr "استيراد / تصدير"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.actions.act_window,domain:0
|
||||
@@ -662,7 +670,7 @@ msgstr ""
|
||||
#: model:ir.actions.act_window,name:base.action_view_base_module_upgrade
|
||||
#: model:ir.model,name:base.model_base_module_upgrade
|
||||
msgid "Module Upgrade"
|
||||
msgstr ""
|
||||
msgstr "ترقية وحدة برمجية"
|
||||
|
||||
#. module: base
|
||||
#: view:res.config.users:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
"X-Poedit-Language: Czech\n"
|
||||
|
||||
#. module: base
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:49+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -12,8 +12,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:49+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
"X-Poedit-Country: GREECE\n"
|
||||
"X-Poedit-Language: Greek\n"
|
||||
"X-Poedit-SourceCharset: utf-8\n"
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:49+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -9,8 +9,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n"
|
||||
"X-Poedit-Language: Persian\n"
|
||||
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:49+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:49+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2011-09-30 21:09+0000\n"
|
||||
"Last-Translator: Antony Lesuisse (OpenERP) <al@openerp.com>\n"
|
||||
"PO-Revision-Date: 2011-11-13 17:25+0000\n"
|
||||
"Last-Translator: Xosé <Unknown>\n"
|
||||
"Language-Team: Galician <gl@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: 2011-10-27 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-14 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 14277)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
@@ -1973,7 +1973,7 @@ msgstr "Mensaxes"
|
||||
#: code:addons/base/module/wizard/base_update_translations.py:38
|
||||
#, python-format
|
||||
msgid "Error!"
|
||||
msgstr "¡Erro!"
|
||||
msgstr "Erro!"
|
||||
|
||||
#. module: base
|
||||
#: view:res.lang:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
"Language: hr\n"
|
||||
|
||||
#. module: base
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:17+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:16+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:49+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:18+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:14+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:19+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2011-07-23 16:37+0000\n"
|
||||
"Last-Translator: OpenBMS JSC <Unknown>\n"
|
||||
"PO-Revision-Date: 2011-11-05 03:38+0000\n"
|
||||
"Last-Translator: Vuong Kien Hung <Unknown>\n"
|
||||
"Language-Team: Vietnamese <vi@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: 2011-10-27 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-06 05:23+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
@@ -9053,7 +9053,7 @@ msgstr "Hình thức tách"
|
||||
#. module: base
|
||||
#: view:base.module.upgrade:0
|
||||
msgid "Note that this operation might take a few minutes."
|
||||
msgstr ""
|
||||
msgstr "Lưu ý hoạt động này có thể mất vài phút"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.ui.menu,name:base.menu_localisation
|
||||
@@ -9106,7 +9106,7 @@ msgstr ""
|
||||
#. module: base
|
||||
#: view:res.lang:0
|
||||
msgid "%j - Day of the year [001,366]."
|
||||
msgstr ""
|
||||
msgstr "%j - Ngày của năm [001,366]"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.actions.server,mobile:0
|
||||
@@ -9189,7 +9189,7 @@ msgstr ""
|
||||
#. module: base
|
||||
#: help:ir.sequence,number_increment:0
|
||||
msgid "The next number of the sequence will be incremented by this number"
|
||||
msgstr ""
|
||||
msgstr "Số tiếp theo của dãy thứ tự sẽ được tăng bằng số này"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.cron,function:0
|
||||
@@ -9238,7 +9238,7 @@ msgstr "Các đối tác: "
|
||||
#. module: base
|
||||
#: model:res.country,name:base.kp
|
||||
msgid "North Korea"
|
||||
msgstr ""
|
||||
msgstr "Bắc Triều Tiên"
|
||||
|
||||
#. module: base
|
||||
#: selection:ir.actions.server,state:0
|
||||
@@ -9269,7 +9269,7 @@ msgstr ""
|
||||
#. module: base
|
||||
#: field:ir.exports,name:0
|
||||
msgid "Export Name"
|
||||
msgstr ""
|
||||
msgstr "Tên Trích xuất"
|
||||
|
||||
#. module: base
|
||||
#: help:res.partner.address,type:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -14,8 +14,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -13,8 +13,8 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-27 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 14197)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
||||
@@ -265,12 +265,13 @@ class act_window(osv.osv):
|
||||
help="Model name of the object to open in the view window"),
|
||||
'src_model': fields.char('Source Object', size=64,
|
||||
help="Optional model name of the objects on which this action should be visible"),
|
||||
'target': fields.selection([('current','Current Window'),('new','New Window')], 'Target Window'),
|
||||
'target': fields.selection([('current','Current Window'),('new','New Window'),('inline','Inline')], 'Target Window'),
|
||||
'view_type': fields.selection((('tree','Tree'),('form','Form')), string='View Type', required=True,
|
||||
help="View type: set to 'tree' for a hierarchical tree view, or 'form' for other views"),
|
||||
'view_mode': fields.char('View Mode', size=250, required=True,
|
||||
help="Comma-separated list of allowed view modes, such as 'form', 'tree', 'calendar', etc. (Default: tree,form)"),
|
||||
'usage': fields.char('Action Usage', size=32),
|
||||
'usage': fields.char('Action Usage', size=32,
|
||||
help="Used to filter menu and home actions from the user form."),
|
||||
'view_ids': fields.one2many('ir.actions.act_window.view', 'act_window_id', 'Views'),
|
||||
'views': fields.function(_views_get_fnc, method=True, type='binary', string='Views',
|
||||
help="This function field computes the ordered list of views that should be enabled " \
|
||||
|
||||
@@ -27,22 +27,6 @@ import tools
|
||||
import os
|
||||
import logging
|
||||
|
||||
def _check_xml(self, cr, uid, ids, context=None):
|
||||
logger = logging.getLogger('init')
|
||||
for view in self.browse(cr, uid, ids, context):
|
||||
eview = etree.fromstring(view.arch.encode('utf8'))
|
||||
frng = tools.file_open(os.path.join('base','rng','view.rng'))
|
||||
try:
|
||||
relaxng_doc = etree.parse(frng)
|
||||
relaxng = etree.RelaxNG(relaxng_doc)
|
||||
if not relaxng.validate(eview):
|
||||
for error in relaxng.error_log:
|
||||
logger.error(tools.ustr(error))
|
||||
return False
|
||||
finally:
|
||||
frng.close()
|
||||
return True
|
||||
|
||||
class view_custom(osv.osv):
|
||||
_name = 'ir.ui.view.custom'
|
||||
_order = 'create_date desc' # search(limit=1) should return the last customization
|
||||
@@ -86,6 +70,23 @@ class view(osv.osv):
|
||||
'priority': 16
|
||||
}
|
||||
_order = "priority,name"
|
||||
|
||||
def _check_xml(self, cr, uid, ids, context=None):
|
||||
logger = logging.getLogger('init')
|
||||
for view in self.browse(cr, uid, ids, context):
|
||||
eview = etree.fromstring(view.arch.encode('utf8'))
|
||||
frng = tools.file_open(os.path.join('base','rng','view.rng'))
|
||||
try:
|
||||
relaxng_doc = etree.parse(frng)
|
||||
relaxng = etree.RelaxNG(relaxng_doc)
|
||||
if not relaxng.validate(eview):
|
||||
for error in relaxng.error_log:
|
||||
logger.error(tools.ustr(error))
|
||||
return False
|
||||
finally:
|
||||
frng.close()
|
||||
return True
|
||||
|
||||
_constraints = [
|
||||
(_check_xml, 'Invalid XML for View Architecture!', ['arch'])
|
||||
]
|
||||
|
||||
@@ -109,8 +109,8 @@
|
||||
<field name="sequence">14</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.module.category" id="module_category_vertical_applications">
|
||||
<field name="name">Verticalizations</field>
|
||||
<record model="ir.module.category" id="module_category_specific_industry_applications">
|
||||
<field name="name">Specific Industry Applications</field>
|
||||
<field name="sequence">15</field>
|
||||
</record>
|
||||
|
||||
|
||||
@@ -70,6 +70,9 @@ class res_config_configurable(osv.osv_memory):
|
||||
res = next.action_launch(context=context)
|
||||
res['nodestroy'] = False
|
||||
return res
|
||||
#if there is no next action and if html is in the context: reload instead of closing
|
||||
if 'html' in context:
|
||||
return {'type' : 'ir.actions.reload'}
|
||||
return {'type' : 'ir.actions.act_window_close'}
|
||||
|
||||
def start(self, cr, uid, ids, context=None):
|
||||
|
||||
@@ -150,7 +150,6 @@ class res_partner(osv.osv):
|
||||
_defaults = {
|
||||
'active': lambda *a: 1,
|
||||
'customer': lambda *a: 1,
|
||||
'address': [{'type': 'default'}],
|
||||
'category_id': _default_category,
|
||||
'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'res.partner', context=c),
|
||||
'color': 0,
|
||||
|
||||
@@ -206,6 +206,7 @@ class users(osv.osv):
|
||||
return dict.fromkeys(ids, '')
|
||||
|
||||
_columns = {
|
||||
'id': fields.integer('ID'),
|
||||
'name': fields.char('User Name', size=64, required=True, select=True,
|
||||
help="The new user's real name, used for searching"
|
||||
" and most listings"),
|
||||
@@ -755,6 +756,28 @@ class users_view(osv.osv):
|
||||
return res
|
||||
return super(users_view, self).read(cr, uid, ids, fields, context, load)
|
||||
|
||||
def fields_get(self, cr, user, allfields=None, context=None, write_access=True):
|
||||
res = super(users_view, self).fields_get(cr, user, allfields, context, write_access)
|
||||
apps, others = self.pool.get('res.groups').get_classified(cr, user, context)
|
||||
for app, groups in apps:
|
||||
ids = [g.id for name, g in groups]
|
||||
app_name = name_boolean_groups(ids)
|
||||
sel_name = name_selection_groups(ids)
|
||||
selection = [(g.id, name) for name, g in groups]
|
||||
res[app_name] = {'type': 'boolean', 'string': app}
|
||||
tips = [name + ': ' + (g.comment or '') for name, g in groups]
|
||||
if tips:
|
||||
res[app_name].update(help='\n'.join(tips))
|
||||
res[sel_name] = {'type': 'selection', 'string': 'Group', 'selection': selection}
|
||||
|
||||
for sec, groups in others:
|
||||
for gname, g in groups:
|
||||
name = name_boolean_group(g.id)
|
||||
res[name] = {'type': 'boolean', 'string': gname}
|
||||
if g.comment:
|
||||
res[name].update(help=g.comment)
|
||||
return res
|
||||
|
||||
def fields_view_get(self, cr, uid, view_id=None, view_type='form',
|
||||
context=None, toolbar=False, submenu=False):
|
||||
# in form views, transform 'groups_id' into reified group fields
|
||||
|
||||
@@ -1,42 +1,43 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rng:grammar xmlns:rng="http://relaxng.org/ns/structure/1.0"
|
||||
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
||||
<!-- Handling of element overloading when inheriting from a base
|
||||
template
|
||||
-->
|
||||
<rng:define name="overload">
|
||||
<rng:optional>
|
||||
<!--
|
||||
Alter matched element with content
|
||||
-->
|
||||
<rng:choice>
|
||||
<rng:attribute name="position">
|
||||
<rng:choice>
|
||||
<!-- Insert content before first child -->
|
||||
<rng:value>before</rng:value>
|
||||
<!-- Insert content after last child -->
|
||||
<rng:value>after</rng:value>
|
||||
<!-- Replace all children with content -->
|
||||
<rng:value>inside</rng:value>
|
||||
<!-- Replace matched element itself with content -->
|
||||
<rng:value>replace</rng:value>
|
||||
</rng:choice>
|
||||
</rng:attribute>
|
||||
<rng:group>
|
||||
<rng:attribute name="position">
|
||||
<!-- Edit element attributes -->
|
||||
<rng:value>attributes</rng:value>
|
||||
</rng:attribute>
|
||||
<rng:oneOrMore>
|
||||
<rng:element name="attribute">
|
||||
<rng:attribute name="name"><rng:text/></rng:attribute>
|
||||
<rng:text />
|
||||
</rng:element>
|
||||
</rng:oneOrMore>
|
||||
</rng:group>
|
||||
</rng:choice>
|
||||
</rng:optional>
|
||||
</rng:define>
|
||||
xmlns:a="http://relaxng.org/ns/annotation/1.0"
|
||||
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
||||
<!-- Handling of element overloading when inheriting from a base
|
||||
template
|
||||
-->
|
||||
<rng:define name="overload">
|
||||
<rng:optional>
|
||||
<!--
|
||||
Alter matched element with content
|
||||
-->
|
||||
<rng:choice>
|
||||
<rng:attribute name="position">
|
||||
<rng:choice>
|
||||
<!-- Insert content before first child -->
|
||||
<rng:value>before</rng:value>
|
||||
<!-- Insert content after last child -->
|
||||
<rng:value>after</rng:value>
|
||||
<!-- Replace all children with content -->
|
||||
<rng:value>inside</rng:value>
|
||||
<!-- Replace matched element itself with content -->
|
||||
<rng:value>replace</rng:value>
|
||||
</rng:choice>
|
||||
</rng:attribute>
|
||||
<rng:group>
|
||||
<rng:attribute name="position">
|
||||
<!-- Edit element attributes -->
|
||||
<rng:value>attributes</rng:value>
|
||||
</rng:attribute>
|
||||
<rng:oneOrMore>
|
||||
<rng:element name="attribute">
|
||||
<rng:attribute name="name"><rng:text/></rng:attribute>
|
||||
<rng:text />
|
||||
</rng:element>
|
||||
</rng:oneOrMore>
|
||||
</rng:group>
|
||||
</rng:choice>
|
||||
</rng:optional>
|
||||
</rng:define>
|
||||
|
||||
<rng:define name="access_rights">
|
||||
<rng:optional>
|
||||
@@ -44,29 +45,113 @@
|
||||
</rng:optional>
|
||||
</rng:define>
|
||||
|
||||
<rng:define name="dashboard-column">
|
||||
<rng:element name="column">
|
||||
<rng:zeroOrMore>
|
||||
<rng:element name="action">
|
||||
<!-- Action identifier, used by clients to get the
|
||||
actual action from db -->
|
||||
<rng:attribute name="name"/>
|
||||
<!-- Displayed name of dashboard item (above idem) -->
|
||||
<rng:optional><rng:attribute name="string"/></rng:optional>
|
||||
<!-- Merged into the action descriptor's own
|
||||
context before executing the action -->
|
||||
<rng:optional><rng:attribute name="context"/></rng:optional>
|
||||
<!-- Added to the action descriptor's own domain
|
||||
before executing the action -->
|
||||
<rng:optional><rng:attribute name="domain"/></rng:optional>
|
||||
<!-- In case the action is an act_window,
|
||||
overrides its own @views. -->
|
||||
<rng:optional><rng:attribute name="view_mode"/></rng:optional>
|
||||
</rng:element>
|
||||
</rng:zeroOrMore>
|
||||
</rng:element>
|
||||
</rng:define>
|
||||
<rng:define name="dashboard">
|
||||
<rng:choice>
|
||||
<rng:element name="board">
|
||||
<a:documentation>
|
||||
New-style (6.1) dashboard definition
|
||||
</a:documentation>
|
||||
<rng:choice>
|
||||
<rng:group>
|
||||
<a:documentation>
|
||||
Single-column dashboard style
|
||||
</a:documentation>
|
||||
<rng:attribute name="style">
|
||||
<rng:value>1</rng:value>
|
||||
</rng:attribute>
|
||||
<rng:ref name="dashboard-column"/>
|
||||
</rng:group>
|
||||
<rng:group>
|
||||
<a:documentation>
|
||||
Three different 2-column dashboard styles:
|
||||
50|50, 33|66 and 66|33.
|
||||
</a:documentation>
|
||||
<rng:attribute name="style">
|
||||
<rng:choice>
|
||||
<rng:value>1-1</rng:value>
|
||||
<rng:value>1-2</rng:value>
|
||||
<rng:value>2-1</rng:value>
|
||||
</rng:choice>
|
||||
</rng:attribute>
|
||||
<rng:ref name="dashboard-column"/>
|
||||
<rng:ref name="dashboard-column"/>
|
||||
</rng:group>
|
||||
<rng:group>
|
||||
<a:documentation>
|
||||
Three-column dashboard style: 33|33|33
|
||||
</a:documentation>
|
||||
<rng:attribute name="style">
|
||||
<rng:value>1-1-1</rng:value>
|
||||
</rng:attribute>
|
||||
<rng:ref name="dashboard-column"/>
|
||||
<rng:ref name="dashboard-column"/>
|
||||
<rng:ref name="dashboard-column"/>
|
||||
</rng:group>
|
||||
</rng:choice>
|
||||
</rng:element>
|
||||
<!--
|
||||
DEPRECATED old-style dashboards
|
||||
-->
|
||||
<rng:element>
|
||||
<rng:choice>
|
||||
<rng:name>hpaned</rng:name>
|
||||
<rng:name>vpaned</rng:name>
|
||||
</rng:choice>
|
||||
<rng:optional>
|
||||
<rng:attribute name="position">
|
||||
<rng:data type="int"/>
|
||||
</rng:attribute>
|
||||
</rng:optional>
|
||||
<rng:zeroOrMore>
|
||||
<rng:optional><rng:ref name="any"/></rng:optional>
|
||||
<rng:optional><rng:ref name="html"/></rng:optional>
|
||||
</rng:zeroOrMore>
|
||||
</rng:element>
|
||||
</rng:choice>
|
||||
</rng:define>
|
||||
|
||||
|
||||
<rng:define name="container">
|
||||
<rng:optional><rng:attribute name="col"/></rng:optional>
|
||||
<rng:zeroOrMore>
|
||||
<rng:choice>
|
||||
<rng:ref name="notebook"/>
|
||||
<rng:ref name="field"/>
|
||||
<rng:ref name="group"/>
|
||||
<rng:ref name="button"/>
|
||||
<rng:ref name="hpaned" />
|
||||
<rng:ref name="label" />
|
||||
<rng:ref name="separator"/>
|
||||
<rng:ref name="image"/>
|
||||
<rng:ref name="form"/>
|
||||
<rng:ref name="vpaned"/>
|
||||
<rng:ref name="filter"/>
|
||||
<rng:ref name="html"/>
|
||||
<rng:element name="newline"><rng:empty/></rng:element>
|
||||
<rng:element name="properties"><rng:empty/></rng:element>
|
||||
</rng:choice>
|
||||
</rng:zeroOrMore>
|
||||
</rng:define>
|
||||
<rng:define name="container">
|
||||
<rng:optional><rng:attribute name="col"/></rng:optional>
|
||||
<rng:zeroOrMore>
|
||||
<rng:choice>
|
||||
<rng:ref name="notebook"/>
|
||||
<rng:ref name="field"/>
|
||||
<rng:ref name="group"/>
|
||||
<rng:ref name="button"/>
|
||||
<rng:ref name="label" />
|
||||
<rng:ref name="separator"/>
|
||||
<rng:ref name="image"/>
|
||||
<rng:ref name="form"/>
|
||||
<rng:ref name="dashboard"/>
|
||||
<rng:ref name="filter"/>
|
||||
<rng:ref name="html"/>
|
||||
<rng:element name="newline"><rng:empty/></rng:element>
|
||||
<rng:element name="properties"><rng:empty/></rng:element>
|
||||
</rng:choice>
|
||||
</rng:zeroOrMore>
|
||||
</rng:define>
|
||||
|
||||
<rng:define name="form">
|
||||
<rng:element name="form">
|
||||
@@ -219,12 +304,11 @@
|
||||
<rng:ref name="field"/>
|
||||
<rng:ref name="group"/>
|
||||
<rng:ref name="button"/>
|
||||
<rng:ref name="hpaned" />
|
||||
<rng:ref name="label" />
|
||||
<rng:ref name="separator"/>
|
||||
<rng:ref name="image"/>
|
||||
<rng:ref name="form"/>
|
||||
<rng:ref name="vpaned"/>
|
||||
<rng:ref name="dashboard"/>
|
||||
<rng:ref name="filter"/>
|
||||
<rng:ref name="html"/>
|
||||
<rng:element name="newline"><rng:empty/></rng:element>
|
||||
@@ -278,34 +362,6 @@
|
||||
</rng:element>
|
||||
</rng:define>
|
||||
|
||||
<rng:define name="hpaned">
|
||||
<rng:element name="hpaned">
|
||||
<rng:optional>
|
||||
<rng:attribute name="position">
|
||||
<rng:data type="int"/>
|
||||
</rng:attribute>
|
||||
</rng:optional>
|
||||
<rng:zeroOrMore>
|
||||
<rng:ref name="any" />
|
||||
<rng:optional><rng:ref name="html"/></rng:optional>
|
||||
</rng:zeroOrMore>
|
||||
</rng:element>
|
||||
</rng:define>
|
||||
|
||||
<rng:define name="vpaned">
|
||||
<rng:element name="vpaned">
|
||||
<rng:optional>
|
||||
<rng:attribute name="position">
|
||||
<rng:data type="int"/>
|
||||
</rng:attribute>
|
||||
</rng:optional>
|
||||
<rng:zeroOrMore>
|
||||
<rng:optional><rng:ref name="any"/></rng:optional>
|
||||
<rng:optional><rng:ref name="html"/></rng:optional>
|
||||
</rng:zeroOrMore>
|
||||
</rng:element>
|
||||
</rng:define>
|
||||
|
||||
<rng:define name="any">
|
||||
<rng:element>
|
||||
<rng:anyName/>
|
||||
@@ -341,8 +397,7 @@
|
||||
<rng:ref name="form" />
|
||||
<rng:ref name="page" />
|
||||
<rng:ref name="notebook"/>
|
||||
<rng:ref name="hpaned"/>
|
||||
<rng:ref name="vpaned"/>
|
||||
<rng:ref name="dashboard"/>
|
||||
<rng:ref name="filter"/>
|
||||
<rng:ref name="html"/>
|
||||
</rng:choice>
|
||||
|
||||
@@ -69,7 +69,7 @@ and you would be tempted to believe something like this would be possible:
|
||||
['!', ['=', 'company_id.name', ['&', ..., ...]]]
|
||||
|
||||
That is, a domain could be a valid operand. But this is not the case. A domain
|
||||
is really limited to a two-level nature, and can not takes a recursive form: a
|
||||
is really limited to a two-level nature, and can not take a recursive form: a
|
||||
domain is not a valid second-level operand.
|
||||
|
||||
Unaccent - Accent-insensitive search
|
||||
|
||||
@@ -1385,6 +1385,9 @@ def field_to_dict(model, cr, user, field, context=None):
|
||||
res['domain'] = field._domain
|
||||
res['context'] = field._context
|
||||
|
||||
if isinstance(field, one2many):
|
||||
res['relation_field'] = field._fields_id
|
||||
|
||||
return res
|
||||
|
||||
|
||||
|
||||
+23
-6
@@ -229,11 +229,6 @@ POSTGRES_CONFDELTYPES = {
|
||||
'SET DEFAULT': 'd',
|
||||
}
|
||||
|
||||
def last_day_of_current_month():
|
||||
today = datetime.date.today()
|
||||
last_day = str(calendar.monthrange(today.year, today.month)[1])
|
||||
return time.strftime('%Y-%m-' + last_day)
|
||||
|
||||
def intersect(la, lb):
|
||||
return filter(lambda x: x in lb, la)
|
||||
|
||||
@@ -664,6 +659,10 @@ class BaseModel(object):
|
||||
_sequence = None
|
||||
_description = None
|
||||
|
||||
# dict of {field:method}, with method returning the name_get of records
|
||||
# to include in the _read_group, if grouped on this field
|
||||
_group_by_full = {}
|
||||
|
||||
# Transience
|
||||
_transient = False # True in a TransientModel
|
||||
_transient_max_count = None
|
||||
@@ -1808,7 +1807,7 @@ class BaseModel(object):
|
||||
"""
|
||||
_rec_name = self._rec_name
|
||||
if _rec_name not in self._columns:
|
||||
_rec_name = self._columns.keys()[0]
|
||||
_rec_name = self._columns.keys()[0] if len(self._columns.keys()) > 0 else "id"
|
||||
|
||||
view = etree.Element('tree', string=self._description)
|
||||
etree.SubElement(view, 'field', name=_rec_name)
|
||||
@@ -2477,6 +2476,24 @@ class BaseModel(object):
|
||||
del alldata[d['id']][groupby]
|
||||
d.update(alldata[d['id']])
|
||||
del d['id']
|
||||
|
||||
if groupby and groupby in self._group_by_full:
|
||||
gids = [x[groupby][0] for x in data if x[groupby]]
|
||||
stages = self._group_by_full[groupby](self, cr, uid, gids, domain, context)
|
||||
# as both lists are sorted in the same way, we can merge in one pass
|
||||
pos = 0
|
||||
while stages and ((pos<len(data)) or (pos<len(stages))):
|
||||
if (pos<len(data)) and (not data[pos][groupby] or (data[pos][groupby][0] == stages[pos][0])):
|
||||
pos+=1
|
||||
continue
|
||||
val = dict.fromkeys(float_int_fields, False)
|
||||
val.update({
|
||||
groupby: stages[pos],
|
||||
'__domain': [(groupby, '=', stages[pos][0])]+domain,
|
||||
groupby+'_count': 0L,
|
||||
'__context': {'group_by': groupby_list[1:]}
|
||||
})
|
||||
data.insert(pos, val)
|
||||
return data
|
||||
|
||||
def _inherits_join_add(self, current_table, parent_model_name, query):
|
||||
|
||||
+15
-2
@@ -19,8 +19,21 @@
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
version = '6.1dev'
|
||||
major_version = '6.1'
|
||||
RELEASE_LEVELS = [ALPHA, BETA, RELEASE_CANDIDATE, FINAL] = ['alpha', 'beta', 'candidate', 'final']
|
||||
RELEASE_LEVELS_DISPLAY = {ALPHA: ALPHA,
|
||||
BETA: BETA,
|
||||
RELEASE_CANDIDATE: 'rc',
|
||||
FINAL: ''}
|
||||
|
||||
# version_info format: (MAJOR, MINOR, MICRO, RELEASE_LEVEL, SERIAL)
|
||||
# inspired by Python's own sys.version_info, in order to be
|
||||
# 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,BETA,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]))
|
||||
|
||||
description = 'OpenERP Server'
|
||||
long_desc = '''OpenERP is a complete ERP and CRM. The main features are accounting (analytic
|
||||
and financial), stock management, sales and purchases management, tasks
|
||||
|
||||
@@ -26,7 +26,7 @@ from render import render
|
||||
#.apidoc title: Report Rendering
|
||||
|
||||
try:
|
||||
import Image
|
||||
from PIL import Image
|
||||
except ImportError:
|
||||
import logging
|
||||
logging.warning('Python Imaging not installed, you can use only .JPG pictures !')
|
||||
|
||||
@@ -610,11 +610,10 @@ class _rml_flowable(object):
|
||||
for key in txt_n.attrib.keys():
|
||||
if key in ('rml_except', 'rml_loop', 'rml_tag'):
|
||||
del txt_n.attrib[key]
|
||||
if True or not self._textual(n).isspace():
|
||||
if not n.tag == 'bullet':
|
||||
txt_n.text = utils.xml2str(self._textual(n))
|
||||
txt_n.tail = n.tail and utils._process_text(self, n.tail.replace('\n','')) or ''
|
||||
rc1 += etree.tostring(txt_n)
|
||||
if not n.tag == 'bullet':
|
||||
txt_n.text = utils.xml2str(self._textual(n))
|
||||
txt_n.tail = n.tail and utils.xml2str(utils._process_text(self, n.tail.replace('\n',''))) or ''
|
||||
rc1 += etree.tostring(txt_n)
|
||||
return rc1
|
||||
|
||||
def _table(self, node):
|
||||
|
||||
@@ -110,6 +110,14 @@ def _child_get(node, self=None, tagname=None):
|
||||
yield n
|
||||
|
||||
def _process_text(self, txt):
|
||||
"""Translate ``txt`` according to the language in the local context,
|
||||
replace dynamic ``[[expr]]`` with their real value, then escape
|
||||
the result for XML.
|
||||
|
||||
:param str txt: original text to translate (must NOT be XML-escaped)
|
||||
:return: translated text, with dynamic expressions evaluated and
|
||||
with special XML characters escaped (``&,<,>``).
|
||||
"""
|
||||
if not self.localcontext:
|
||||
return str2xml(txt)
|
||||
if not txt:
|
||||
@@ -130,10 +138,10 @@ def _process_text(self, txt):
|
||||
except Exception:
|
||||
pass
|
||||
if isinstance(txt, basestring):
|
||||
result += str2xml(txt)
|
||||
result += txt
|
||||
elif txt and (txt is not None) and (txt is not False):
|
||||
result += ustr(txt)
|
||||
return result
|
||||
return str2xml(result)
|
||||
|
||||
def text_get(node):
|
||||
return ''.join([ustr(n.text) for n in node])
|
||||
|
||||
@@ -759,8 +759,8 @@ if __name__=='__main__':
|
||||
g.process(starting_node)
|
||||
g.scale(radius*3,radius*3, radius, radius)
|
||||
|
||||
import Image
|
||||
import ImageDraw
|
||||
from PIL import Image
|
||||
from PIL import ImageDraw
|
||||
img = Image.new("RGB", (800, 600), "#ffffff")
|
||||
draw = ImageDraw.Draw(img)
|
||||
|
||||
|
||||
+114
-11
@@ -11,6 +11,8 @@ import misc
|
||||
from config import config
|
||||
import yaml_tag
|
||||
import yaml
|
||||
import re
|
||||
from lxml import etree
|
||||
|
||||
# YAML import needs both safe and unsafe eval, but let's
|
||||
# default to /safe/.
|
||||
@@ -164,9 +166,11 @@ class YamlInterpreter(object):
|
||||
self.logger.log(logging.ERROR, 'id: %s is to long (max: 64)', id)
|
||||
|
||||
def get_id(self, xml_id):
|
||||
if not xml_id:
|
||||
raise YamlImportException("The xml_id should be a non empty string.")
|
||||
if isinstance(xml_id, types.IntType):
|
||||
if xml_id is False:
|
||||
return False
|
||||
#if not xml_id:
|
||||
# raise YamlImportException("The xml_id should be a non empty string.")
|
||||
elif isinstance(xml_id, types.IntType):
|
||||
id = xml_id
|
||||
elif xml_id in self.id_map:
|
||||
id = self.id_map[xml_id]
|
||||
@@ -298,7 +302,7 @@ class YamlInterpreter(object):
|
||||
|
||||
def create_osv_memory_record(self, record, fields):
|
||||
model = self.get_model(record.model)
|
||||
record_dict = self._create_record(model, fields)
|
||||
record_dict = self._create_record(model, fields, False)
|
||||
id_new=model.create(self.cr, self.uid, record_dict, context=self.context)
|
||||
self.id_map[record.id] = int(id_new)
|
||||
return record_dict
|
||||
@@ -307,10 +311,21 @@ class YamlInterpreter(object):
|
||||
import openerp.osv as osv
|
||||
record, fields = node.items()[0]
|
||||
model = self.get_model(record.model)
|
||||
|
||||
view_id = record.view
|
||||
if view_id and (view_id is not True):
|
||||
view_id = self.pool.get('ir.model.data').get_object_reference(self.cr, 1, self.module, record.view)[1]
|
||||
|
||||
if model.is_transient():
|
||||
record_dict=self.create_osv_memory_record(record, fields)
|
||||
else:
|
||||
self.validate_xml_id(record.id)
|
||||
try:
|
||||
self.pool.get('ir.model.data')._get_id(self.cr, 1, self.module, record.id)
|
||||
default = False
|
||||
except ValueError:
|
||||
default = True
|
||||
|
||||
if self.isnoupdate(record) and self.mode != 'init':
|
||||
id = self.pool.get('ir.model.data')._update_dummy(self.cr, 1, record.model, self.module, record.id)
|
||||
# check if the resource already existed at the last update
|
||||
@@ -321,22 +336,110 @@ class YamlInterpreter(object):
|
||||
if not self._coerce_bool(record.forcecreate):
|
||||
return None
|
||||
|
||||
record_dict = self._create_record(model, fields)
|
||||
self.logger.debug("RECORD_DICT %s" % record_dict)
|
||||
|
||||
#context = self.get_context(record, self.eval_context)
|
||||
context = record.context #TOFIX: record.context like {'withoutemployee':True} should pass from self.eval_context. example: test_project.yml in project module
|
||||
#TOFIX: record.context like {'withoutemployee':True} should pass from self.eval_context. example: test_project.yml in project module
|
||||
context = record.context
|
||||
if view_id:
|
||||
varg = view_id
|
||||
if view_id is True: varg = False
|
||||
view = model.fields_view_get(self.cr, 1, varg, 'form', context)
|
||||
view_id = etree.fromstring(view['arch'].encode('utf-8'))
|
||||
|
||||
record_dict = self._create_record(model, fields, view_id, default=default)
|
||||
self.logger.debug("RECORD_DICT %s" % record_dict)
|
||||
id = self.pool.get('ir.model.data')._update(self.cr, 1, record.model, \
|
||||
self.module, record_dict, record.id, noupdate=self.isnoupdate(record), mode=self.mode, context=context)
|
||||
self.id_map[record.id] = int(id)
|
||||
if config.get('import_partial'):
|
||||
self.cr.commit()
|
||||
|
||||
def _create_record(self, model, fields):
|
||||
def _create_record(self, model, fields, view=False, parent={}, default=True):
|
||||
allfields = model.fields_get(self.cr, 1, context=self.context)
|
||||
if view is not False:
|
||||
defaults = default and model.default_get(self.cr, 1, allfields, context=self.context) or {}
|
||||
fg = model.fields_get(self.cr, 1, context=self.context)
|
||||
else:
|
||||
default = {}
|
||||
fg = {}
|
||||
record_dict = {}
|
||||
fields = fields or {}
|
||||
|
||||
def process_val(key, val):
|
||||
if fg[key]['type']=='many2one':
|
||||
if type(val) in (tuple,list):
|
||||
val = val[0]
|
||||
elif (fg[key]['type']=='one2many'):
|
||||
if val is False:
|
||||
val = []
|
||||
if len(val) and type(val[0]) == dict:
|
||||
val = map(lambda x: (0,0,x), val)
|
||||
return val
|
||||
|
||||
# Process all on_change calls
|
||||
nodes = (view is not False) and [view] or []
|
||||
while nodes:
|
||||
el = nodes.pop(0)
|
||||
if el.tag=='field':
|
||||
field_name = el.attrib['name']
|
||||
assert field_name in fg, "The field '%s' is defined in the form view but not on the object '%s'!" % (field_name, model._name)
|
||||
if field_name in fields:
|
||||
view2 = None
|
||||
# if the form view is not inline, we call fields_view_get
|
||||
if (view is not False) and (fg[field_name]['type']=='one2many'):
|
||||
view2 = view.find("field[@name='%s']/form"%(field_name,))
|
||||
if not view2:
|
||||
view2 = self.pool.get(fg[field_name]['relation']).fields_view_get(self.cr, 1, False, 'form', self.context)
|
||||
view2 = etree.fromstring(view2['arch'].encode('utf-8'))
|
||||
|
||||
field_value = self._eval_field(model, field_name, fields[field_name], view2, parent=record_dict, default=default)
|
||||
record_dict[field_name] = field_value
|
||||
#if (field_name in defaults) and defaults[field_name] == field_value:
|
||||
# print '*** You can remove these lines:', field_name, field_value
|
||||
elif (field_name in defaults):
|
||||
if (field_name not in record_dict):
|
||||
record_dict[field_name] = process_val(field_name, defaults[field_name])
|
||||
else:
|
||||
continue
|
||||
|
||||
if not el.attrib.get('on_change', False):
|
||||
continue
|
||||
match = re.match("([a-z_1-9A-Z]+)\((.*)\)", el.attrib['on_change'])
|
||||
assert match, "Unable to parse the on_change '%s'!" % (el.attrib['on_change'], )
|
||||
|
||||
# creating the context
|
||||
class parent2(object):
|
||||
def __init__(self, d):
|
||||
self.d = d
|
||||
def __getattr__(self, name):
|
||||
return self.d.get(name, False)
|
||||
|
||||
ctx = record_dict.copy()
|
||||
ctx['context'] = self.context
|
||||
ctx['uid'] = 1
|
||||
ctx['parent'] = parent2(parent)
|
||||
for a in fg:
|
||||
if a not in ctx:
|
||||
ctx[a]=process_val(a, defaults.get(a, False))
|
||||
|
||||
# Evaluation args
|
||||
args = map(lambda x: eval(x, ctx), match.group(2).split(','))
|
||||
result = getattr(model, match.group(1))(self.cr, 1, [], *args)
|
||||
for key, val in (result or {}).get('value', {}).items():
|
||||
if key not in fields:
|
||||
assert key in fg, "The returning field '%s' from your on_change call '%s' does not exist on the object '%s'" % (key, match.group(1), model._name)
|
||||
record_dict[key] = process_val(key, val)
|
||||
#if (key in fields) and record_dict[key] == process_val(key, val):
|
||||
# print '*** You can remove these lines:', key, val
|
||||
else:
|
||||
nodes = list(el) + nodes
|
||||
|
||||
for field_name, expression in fields.items():
|
||||
field_value = self._eval_field(model, field_name, expression)
|
||||
if field_name in record_dict:
|
||||
continue
|
||||
field_value = self._eval_field(model, field_name, expression, default=False)
|
||||
record_dict[field_name] = field_value
|
||||
|
||||
return record_dict
|
||||
|
||||
def process_ref(self, node, column=None):
|
||||
@@ -365,7 +468,7 @@ class YamlInterpreter(object):
|
||||
def process_eval(self, node):
|
||||
return eval(node.expression, self.eval_context)
|
||||
|
||||
def _eval_field(self, model, field_name, expression):
|
||||
def _eval_field(self, model, field_name, expression, view=False, parent={}, default=True):
|
||||
# TODO this should be refactored as something like model.get_field() in bin/osv
|
||||
if field_name in model._columns:
|
||||
column = model._columns[field_name]
|
||||
@@ -386,7 +489,7 @@ class YamlInterpreter(object):
|
||||
value = self.get_id(expression)
|
||||
elif column._type == "one2many":
|
||||
other_model = self.get_model(column._obj)
|
||||
value = [(0, 0, self._create_record(other_model, fields)) for fields in expression]
|
||||
value = [(0, 0, self._create_record(other_model, fields, view, parent, default=default)) for fields in expression]
|
||||
elif column._type == "many2many":
|
||||
ids = [self.get_id(xml_id) for xml_id in expression]
|
||||
value = [(6, 0, ids)]
|
||||
|
||||
@@ -24,13 +24,14 @@ class Assert(YamlTag):
|
||||
super(Assert, self).__init__(**kwargs)
|
||||
|
||||
class Record(YamlTag):
|
||||
def __init__(self, model, id, use='id', **kwargs):
|
||||
def __init__(self, model, id, use='id', view=True, **kwargs):
|
||||
self.model = model
|
||||
self.id = id
|
||||
self.view = view
|
||||
super(Record, self).__init__(**kwargs)
|
||||
def __str__(self):
|
||||
return '!record {model: %s, id: %s}:' % (str(self.model,), str(self.id,))
|
||||
|
||||
|
||||
class Python(YamlTag):
|
||||
def __init__(self, model, severity=logging.ERROR, name="", **kwargs):
|
||||
self.model= model
|
||||
|
||||
Reference in New Issue
Block a user