[MERGE]: Merge with latest trunk-server

bzr revid: rpa@tinyerp.com-20111103071744-wkf0qgr8qkl540y7
bzr revid: rpa@tinyerp.com-20111116051225-w9b73w63w8g6z2hk
This commit is contained in:
Rucha (Open ERP) 2011-11-16 10:42:25 +05:30
commit d4ad054000
91 changed files with 1085 additions and 743 deletions

View File

@ -1,11 +1,23 @@
.* *.pyc
*.egg-info .*.swp
*.orig .bzrignore
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
build/ build/
RE:^bin/ bin/yolk
RE:^dist/ bin/pil*.py
RE:^include/ .project
.pydevproject
RE:^share/ .settings
RE:^man/
RE:^lib/

View File

@ -179,9 +179,12 @@ def dumpstacks(sig, frame):
def setup_signal_handlers(): def setup_signal_handlers():
""" Register the signal handler defined above. """ """ Register the signal handler defined above. """
SIGNALS = map(lambda x: getattr(signal, "SIG%s" % x), "INT TERM".split()) 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': if os.name == 'posix':
map(lambda sig: signal.signal(sig, signal_handler), SIGNALS)
signal.signal(signal.SIGQUIT, dumpstacks) signal.signal(signal.SIGQUIT, dumpstacks)
elif os.name == 'nt':
import win32api
win32api.SetConsoleCtrlHandler(lambda sig: signal_handler(sig, None), 1)
def quit_on_signals(): def quit_on_signals():
""" Wait for one or two signals then shutdown the server. """ 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 # Wait for a first signal to be handled. (time.sleep will be interrupted
# by the signal handler.) # by the signal handler.) The try/except is for the win32 case.
while quit_signals_received == 0: try:
time.sleep(60) while quit_signals_received == 0:
time.sleep(60)
except KeyboardInterrupt, e:
pass
if config['pidfile']: if config['pidfile']:
os.unlink(config['pidfile']) os.unlink(config['pidfile'])

View File

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<openerp> <openerp>
<data noupdate="1"> <data noupdate="1">
<record id="parameter_web_base_url" model="ir.config_parameter">
<field name="key">web.base.url</field>
<field name="value">http://localhost:8069</field>
</record>
<record id="view_menu" model="ir.ui.view"> <record id="view_menu" model="ir.ui.view">
<field name="name">ir.ui.menu.tree</field> <field name="name">ir.ui.menu.tree</field>
<field name="model">ir.ui.menu</field> <field name="model">ir.ui.menu</field>
@ -1671,5 +1667,19 @@
<field name="currency_id" ref="HNL"/> <field name="currency_id" ref="HNL"/>
<field eval="time.strftime('%Y-01-01')" name="name"/> <field eval="time.strftime('%Y-01-01')" name="name"/>
</record> </record>
<!-- Chilean peso -->
<record id="CLP" model="res.currency">
<field name="name">CLP</field>
<field name="symbol">$</field>
<field name="rounding">0.01</field>
<field name="accuracy">4</field>
<field name="company_id" ref="main_company"/>
</record>
<record id="rateCLP" model="res.currency.rate">
<field name="rate">710</field>
<field name="currency_id" ref="CLP"/>
<field eval="time.strftime('%Y-01-01')" name="name"/>
</record>
</data> </data>
</openerp> </openerp>

View File

@ -2,7 +2,7 @@
<openerp> <openerp>
<data> <data>
<menuitem icon="terp-administration" id="menu_administration" <menuitem icon="terp-administration" id="menu_administration"
name="Administration" sequence="50" name="Settings" sequence="50"
web_icon="data/administration.png" web_icon="data/administration.png"
web_icon_hover="data/administration-hover.png"/> web_icon_hover="data/administration-hover.png"/>

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:00+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:47+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:00+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:47+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:01+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:47+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0
@ -33,7 +33,7 @@ msgstr "سانت هيلينا"
#. module: base #. module: base
#: view:ir.actions.report.xml:0 #: view:ir.actions.report.xml:0
msgid "Other Configuration" msgid "Other Configuration"
msgstr "عدادت أخري" msgstr "إعدادات أخرى"
#. module: base #. module: base
#: selection:ir.property,type:0 #: selection:ir.property,type:0
@ -103,7 +103,7 @@ msgstr "سير العمل نشط"
#. module: base #. module: base
#: field:ir.actions.act_window,display_menu_tip:0 #: field:ir.actions.act_window,display_menu_tip:0
msgid "Display Menu Tips" msgid "Display Menu Tips"
msgstr "" msgstr "عرض إرشادات القائمة"
#. module: base #. module: base
#: view:ir.module.module:0 #: 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 " "You can not write in this document (%s) ! Be sure your user belongs to one "
"of these groups: %s." "of these groups: %s."
msgstr "" msgstr ""
"لا يمكنك تعديل هذا المستند (%s)! تأكد من أنك تنتمي إلى إحدى المجموعات "
"التالية: %s."
#. module: base #. module: base
#: help:ir.model.fields,domain:0 #: help:ir.model.fields,domain:0
@ -134,7 +136,7 @@ msgstr ""
#. module: base #. module: base
#: field:ir.actions.act_window,target:0 #: field:ir.actions.act_window,target:0
msgid "Target Window" msgid "Target Window"
msgstr "" msgstr "نافذة الهدف"
#. module: base #. module: base
#: code:addons/base/res/res_user.py:507 #: code:addons/base/res/res_user.py:507
@ -154,7 +156,7 @@ msgstr ""
#: code:addons/osv.py:133 #: code:addons/osv.py:133
#, python-format #, python-format
msgid "Constraint Error" msgid "Constraint Error"
msgstr "" msgstr "خطأ تقييد"
#. module: base #. module: base
#: model:ir.model,name:base.model_ir_ui_view_custom #: model:ir.model,name:base.model_ir_ui_view_custom
@ -171,12 +173,12 @@ msgstr ""
#: code:addons/orm.py:3653 #: code:addons/orm.py:3653
#, python-format #, python-format
msgid "created." msgid "created."
msgstr "" msgstr "تمّ الإنشاء"
#. module: base #. module: base
#: model:res.partner.category,name:base.res_partner_category_woodsuppliers0 #: model:res.partner.category,name:base.res_partner_category_woodsuppliers0
msgid "Wood Suppliers" msgid "Wood Suppliers"
msgstr "" msgstr "مورّدو الخشب"
#. module: base #. module: base
#: code:addons/base/module/module.py:303 #: code:addons/base/module/module.py:303
@ -185,6 +187,8 @@ msgid ""
"Some installed modules depend on the module you plan to Uninstall :\n" "Some installed modules depend on the module you plan to Uninstall :\n"
" %s" " %s"
msgstr "" msgstr ""
"ثمّة وحدات برمجية تعتمد على الوحدة التي تريد إزالتها:\n"
" %s"
#. module: base #. module: base
#: field:ir.sequence,number_increment:0 #: field:ir.sequence,number_increment:0
@ -195,7 +199,7 @@ msgstr ""
#: model:ir.actions.act_window,name:base.action_res_company_tree #: model:ir.actions.act_window,name:base.action_res_company_tree
#: model:ir.ui.menu,name:base.menu_action_res_company_tree #: model:ir.ui.menu,name:base.menu_action_res_company_tree
msgid "Company's Structure" msgid "Company's Structure"
msgstr "" msgstr "هيكل الشركة"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
@ -211,7 +215,7 @@ msgstr ""
#: code:addons/base/res/res_user.py:132 #: code:addons/base/res/res_user.py:132
#, python-format #, python-format
msgid "\"smtp_server\" needs to be set to send mails to users" msgid "\"smtp_server\" needs to be set to send mails to users"
msgstr "" msgstr "لا بدّ من تعيين خادم إرسال البريد الإلكتروني \"smtp_server\""
#. module: base #. module: base
#: code:addons/base/module/wizard/base_export_language.py:60 #: code:addons/base/module/wizard/base_export_language.py:60
@ -227,7 +231,7 @@ msgstr ""
#. module: base #. module: base
#: field:ir.module.category,module_nr:0 #: field:ir.module.category,module_nr:0
msgid "Number of Modules" msgid "Number of Modules"
msgstr "" msgstr "عدد البرامج"
#. module: base #. module: base
#: help:multi_company.default,company_dest_id:0 #: help:multi_company.default,company_dest_id:0
@ -237,7 +241,7 @@ msgstr ""
#. module: base #. module: base
#: field:res.partner.bank.type.field,size:0 #: field:res.partner.bank.type.field,size:0
msgid "Max. Size" msgid "Max. Size"
msgstr "" msgstr "الحجم الأقصى"
#. module: base #. module: base
#: field:res.partner.address,name:0 #: field:res.partner.address,name:0
@ -255,7 +259,7 @@ msgstr ""
#. module: base #. module: base
#: sql_constraint:res.lang:0 #: sql_constraint:res.lang:0
msgid "The name of the language must be unique !" msgid "The name of the language must be unique !"
msgstr "" msgstr "لا بدّ أن يكون اسم اللغة مختلفاً عن اللغات الأخرى"
#. module: base #. module: base
#: selection:res.request,state:0 #: selection:res.request,state:0
@ -265,7 +269,7 @@ msgstr "نشط"
#. module: base #. module: base
#: field:ir.actions.wizard,wiz_name:0 #: field:ir.actions.wizard,wiz_name:0
msgid "Wizard Name" msgid "Wizard Name"
msgstr "" msgstr "اسم المعالج"
#. module: base #. module: base
#: code:addons/orm.py:2160 #: code:addons/orm.py:2160
@ -296,7 +300,7 @@ msgstr ""
#. module: base #. module: base
#: view:ir.actions.todo:0 #: view:ir.actions.todo:0
msgid "Config Wizard Steps" msgid "Config Wizard Steps"
msgstr "" msgstr "خطوات إعداد المعالج"
#. module: base #. module: base
#: model:ir.model,name:base.model_ir_ui_view_sc #: 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 " "You can not remove the admin user as it is used internally for resources "
"created by OpenERP (updates, module installation, ...)" "created by OpenERP (updates, module installation, ...)"
msgstr "" msgstr ""
"لا يمكنك حذف المستخدم المشرف العام (admin) لأنه يسنخدم داخلياً بواسطة "
"OpenERP في عمليات التحديث و إضافة البرامج الأخري"
#. module: base #. module: base
#: model:res.country,name:base.gf #: model:res.country,name:base.gf
@ -399,7 +405,7 @@ msgstr ""
#. module: base #. module: base
#: view:base.module.upgrade:0 #: view:base.module.upgrade:0
msgid "Your system will be updated." msgid "Your system will be updated."
msgstr "" msgstr "سوف يتمّ تحديث نظامك"
#. module: base #. module: base
#: field:ir.actions.todo,note:0 #: field:ir.actions.todo,note:0
@ -420,7 +426,7 @@ msgstr "كولومبيا"
#. module: base #. module: base
#: view:ir.module.module:0 #: view:ir.module.module:0
msgid "Schedule Upgrade" msgid "Schedule Upgrade"
msgstr "" msgstr "حدّد موعد الترقية"
#. module: base #. module: base
#: code:addons/orm.py:838 #: code:addons/orm.py:838
@ -434,6 +440,8 @@ msgid ""
"The ISO country code in two chars.\n" "The ISO country code in two chars.\n"
"You can use this field for quick search." "You can use this field for quick search."
msgstr "" msgstr ""
"رمز ISO للدولة والمكون من حرفين\n"
"يمكنك استخدام هذا الحقل للبحث السريع."
#. module: base #. module: base
#: model:res.country,name:base.pw #: model:res.country,name:base.pw
@ -461,12 +469,12 @@ msgstr ""
#: view:ir.actions.wizard:0 #: view:ir.actions.wizard:0
#: model:ir.ui.menu,name:base.menu_ir_action_wizard #: model:ir.ui.menu,name:base.menu_ir_action_wizard
msgid "Wizards" msgid "Wizards"
msgstr "" msgstr "المعالجات"
#. module: base #. module: base
#: model:res.partner.category,name:base.res_partner_category_miscellaneoussuppliers0 #: model:res.partner.category,name:base.res_partner_category_miscellaneoussuppliers0
msgid "Miscellaneous Suppliers" msgid "Miscellaneous Suppliers"
msgstr "" msgstr "مورّدون متنوعون"
#. module: base #. module: base
#: code:addons/base/ir/ir_model.py:255 #: code:addons/base/ir/ir_model.py:255
@ -487,12 +495,12 @@ msgstr ""
#. module: base #. module: base
#: view:base.language.export:0 #: view:base.language.export:0
msgid "Export done" msgid "Export done"
msgstr "" msgstr "تمّت عملية التصدير"
#. module: base #. module: base
#: view:ir.model:0 #: view:ir.model:0
msgid "Model Description" msgid "Model Description"
msgstr "" msgstr "وصف النموذج"
#. module: base #. module: base
#: help:ir.actions.act_window,src_model:0 #: help:ir.actions.act_window,src_model:0
@ -590,7 +598,7 @@ msgstr ""
#. module: base #. module: base
#: model:ir.model,name:base.model_base_language_import #: model:ir.model,name:base.model_base_language_import
msgid "Language Import" msgid "Language Import"
msgstr "" msgstr "استيراد اللغة"
#. module: base #. module: base
#: model:ir.model,name:base.model_res_config_users #: model:ir.model,name:base.model_res_config_users
@ -635,12 +643,12 @@ msgstr ""
#. module: base #. module: base
#: view:res.partner:0 #: view:res.partner:0
msgid "My Partners" msgid "My Partners"
msgstr "" msgstr "شركائي"
#. module: base #. module: base
#: view:ir.actions.report.xml:0 #: view:ir.actions.report.xml:0
msgid "XML Report" msgid "XML Report"
msgstr "" msgstr "تقرير XML"
#. module: base #. module: base
#: model:res.country,name:base.es #: model:res.country,name:base.es
@ -650,7 +658,7 @@ msgstr ""
#. module: base #. module: base
#: model:ir.ui.menu,name:base.menu_translation_export #: model:ir.ui.menu,name:base.menu_translation_export
msgid "Import / Export" msgid "Import / Export"
msgstr "" msgstr "استيراد / تصدير"
#. module: base #. module: base
#: help:ir.actions.act_window,domain:0 #: 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.actions.act_window,name:base.action_view_base_module_upgrade
#: model:ir.model,name:base.model_base_module_upgrade #: model:ir.model,name:base.model_base_module_upgrade
msgid "Module Upgrade" msgid "Module Upgrade"
msgstr "" msgstr "ترقية وحدة برمجية"
#. module: base #. module: base
#: view:res.config.users:0 #: view:res.config.users:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:01+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0
@ -168,7 +168,7 @@ msgstr "ir.ui.view.custom"
#. module: base #. module: base
#: model:res.country,name:base.sz #: model:res.country,name:base.sz
msgid "Swaziland" msgid "Swaziland"
msgstr "Швейцария" msgstr "Свазиленд"
#. module: base #. module: base
#: code:addons/orm.py:1993 #: code:addons/orm.py:1993

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:01+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:01+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:01+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
"X-Poedit-Language: Czech\n" "X-Poedit-Language: Czech\n"
#. module: base #. module: base

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:01+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -15,8 +15,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:02+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:49+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0
@ -6604,8 +6604,8 @@ msgid ""
"You can not read this document (%s) ! Be sure your user belongs to one of " "You can not read this document (%s) ! Be sure your user belongs to one of "
"these groups: %s." "these groups: %s."
msgstr "" msgstr ""
"Sie haben kein Leserecht für diesen Beleg (%s) ! Stellen Sie sicher, dass " "Sie haben kein Leserecht für diesen Satz (%s) ! Stellen Sie sicher, dass der "
"der Benutzer Mitglied der folgenden Gruppe ist: %s." "Benutzer Mitglied der folgenden Gruppe ist: %s."
#. module: base #. module: base
#: view:res.bank:0 #: view:res.bank:0

View File

@ -12,8 +12,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:02+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:49+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
"X-Poedit-Country: GREECE\n" "X-Poedit-Country: GREECE\n"
"X-Poedit-Language: Greek\n" "X-Poedit-Language: Greek\n"
"X-Poedit-SourceCharset: utf-8\n" "X-Poedit-SourceCharset: utf-8\n"

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:06+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:05+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-04 05:01+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:07+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:55+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-11 05:29+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:49+0000\n"
"X-Generator: Launchpad (build 14123)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:01+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -9,8 +9,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:04+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n" "X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n"
"X-Poedit-Language: Persian\n" "X-Poedit-Language: Persian\n"

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:07+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:55+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:02+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:49+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:02+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:49+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0
@ -131,7 +131,7 @@ msgid ""
msgstr "" msgstr ""
"Le domaine, optionnel, est utilisé pour limiter les valeurs possibles des " "Le domaine, optionnel, est utilisé pour limiter les valeurs possibles des "
"champs concernés. Il s'exprime en langage Python sous forme de triplets. Par " "champs concernés. Il s'exprime en langage Python sous forme de triplets. Par "
"exemple : [('color','=',rouge')]" "exemple : [('color','=','rouge')]"
#. module: base #. module: base
#: field:res.partner,ref:0 #: field:res.partner,ref:0
@ -202,7 +202,7 @@ msgstr ""
#. module: base #. module: base
#: field:ir.sequence,number_increment:0 #: field:ir.sequence,number_increment:0
msgid "Increment Number" msgid "Increment Number"
msgstr "Incrémenter le Numéro" msgstr "Incrémenter le numéro"
#. module: base #. module: base
#: model:ir.actions.act_window,name:base.action_res_company_tree #: model:ir.actions.act_window,name:base.action_res_company_tree
@ -590,7 +590,7 @@ msgstr ""
#. module: base #. module: base
#: field:res.partner,title:0 #: field:res.partner,title:0
msgid "Partner Form" msgid "Partner Form"
msgstr "Formulaire des partenaires" msgstr "Forme juridique"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
@ -1661,7 +1661,7 @@ msgid ""
"do not wish to add more users at this stage, you can always do this later." "do not wish to add more users at this stage, you can always do this later."
msgstr "" msgstr ""
"Créez des utilisateurs additionnels et assignez-les à des groupes qui leur " "Créez des utilisateurs additionnels et assignez-les à des groupes qui leur "
"permettra d'avoir accès à des fonctionnalités choisies dans le système. " "permettront d'avoir accès à des fonctionnalités choisies dans le système. "
"Cliquez sur 'Terminé' si vous ne désirez pas ajouter plus d'utilisateurs " "Cliquez sur 'Terminé' si vous ne désirez pas ajouter plus d'utilisateurs "
"pour l'instant, vous pourrez toujours en ajouter plus tard." "pour l'instant, vous pourrez toujours en ajouter plus tard."
@ -2177,7 +2177,7 @@ msgstr "terminer"
#: selection:ir.ui.view,type:0 #: selection:ir.ui.view,type:0
#: selection:wizard.ir.model.menu.create.line,view_type:0 #: selection:wizard.ir.model.menu.create.line,view_type:0
msgid "Calendar" msgid "Calendar"
msgstr "Calendrier" msgstr "Créer un calendrier"
#. module: base #. module: base
#: field:res.partner.address,partner_id:0 #: field:res.partner.address,partner_id:0
@ -2202,9 +2202,6 @@ msgid ""
"separated list of valid field names (optionally followed by asc/desc for the " "separated list of valid field names (optionally followed by asc/desc for the "
"direction)" "direction)"
msgstr "" msgstr ""
"\"order\" spécifié non valide, une \"ordre\" de spécification est une liste "
"de nom de champs séparé par des virgules (optionnel suivi par le sens "
"croissant/décroissant)"
#. module: base #. module: base
#: model:ir.model,name:base.model_ir_module_module_dependency #: model:ir.model,name:base.model_ir_module_module_dependency
@ -3550,12 +3547,13 @@ msgid ""
"Would your payment have been carried out after this mail was sent, please " "Would your payment have been carried out after this mail was sent, please "
"consider the present one as void." "consider the present one as void."
msgstr "" msgstr ""
"Veuiller noter que les paiements ci dessous sont maintenant dus. Si votre " "Veuillez noter que les paiements ci-dessous sont maintenant dus. \n"
"paiement a été envoyé, nous recevrons rapidement le détail de votre " "Si votre règlement nous a été envoyé, merci de nous en préciser rapidement "
"paiements. Si votre paiement est décallé, merci de nous contacter pour en " "les modalités.\n"
"discuter. \n" "Nous vous invitons à nous contacter au cas où ce retard serait volontaire, "
"Si votre paiement a déjà réglé après que ce courriel soit parti, veuillez ne " "et cela afin de nous en communiquer les motifs.\n"
"pas tenir compte de cet envoi." "Dans le cas où votre règlement nous parviendrait avant réception de ce "
"courriel, nous vous demandons de considérer cette relance comme non avenue."
#. module: base #. module: base
#: model:res.country,name:base.mx #: model:res.country,name:base.mx
@ -7159,7 +7157,7 @@ msgstr "Filtre"
#. module: base #. module: base
#: model:res.partner.title,shortcut:base.res_partner_title_madam #: model:res.partner.title,shortcut:base.res_partner_title_madam
msgid "Ms." msgid "Ms."
msgstr "Mme" msgstr "Mlle"
#. module: base #. module: base
#: model:res.country,name:base.ch #: model:res.country,name:base.ch
@ -8317,7 +8315,8 @@ msgstr "Administration"
#. module: base #. module: base
#: view:base.module.update:0 #: view:base.module.update:0
msgid "Click on Update below to start the process..." msgid "Click on Update below to start the process..."
msgstr "Cliquer sur Mise à Jour afin de lancer l'opération..." msgstr ""
"Cliquer sur le bouton Mettre à jour ci-dessous afin de lancer l'opération..."
#. module: base #. module: base
#: model:res.country,name:base.ir #: model:res.country,name:base.ir
@ -8955,7 +8954,7 @@ msgstr "Relation de l'objet"
#: view:ir.rule:0 #: view:ir.rule:0
#: view:res.partner:0 #: view:res.partner:0
msgid "General" msgid "General"
msgstr "Générale" msgstr "Général"
#. module: base #. module: base
#: model:res.country,name:base.uz #: model:res.country,name:base.uz

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n" "Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n" "POT-Creation-Date: 2011-01-11 11:14+0000\n"
"PO-Revision-Date: 2011-09-30 21:09+0000\n" "PO-Revision-Date: 2011-11-13 17:25+0000\n"
"Last-Translator: Antony Lesuisse (OpenERP) <al@openerp.com>\n" "Last-Translator: Xosé <Unknown>\n"
"Language-Team: Galician <gl@li.org>\n" "Language-Team: Galician <gl@li.org>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:02+0000\n" "X-Launchpad-Export-Date: 2011-11-14 05:15+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14277)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0
@ -1973,7 +1973,7 @@ msgstr "Mensaxes"
#: code:addons/base/module/wizard/base_update_translations.py:38 #: code:addons/base/module/wizard/base_update_translations.py:38
#, python-format #, python-format
msgid "Error!" msgid "Error!"
msgstr "¡Erro!" msgstr "Erro!"
#. module: base #. module: base
#: view:res.lang:0 #: view:res.lang:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:02+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:05+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
"Language: hr\n" "Language: hr\n"
#. module: base #. module: base
@ -720,7 +720,7 @@ msgstr "Radni dani"
#. module: base #. module: base
#: selection:ir.module.module,license:0 #: selection:ir.module.module,license:0
msgid "Other OSI Approved Licence" msgid "Other OSI Approved Licence"
msgstr "" msgstr "Druga OSI odobrena licenca"
#. module: base #. module: base
#: help:res.config.users,context_lang:0 #: help:res.config.users,context_lang:0
@ -1057,7 +1057,7 @@ msgstr "Jezik \"%s\" ne postoji/ nije definiran"
#: code:addons/base/publisher_warranty/publisher_warranty.py:163 #: code:addons/base/publisher_warranty/publisher_warranty.py:163
#, python-format #, python-format
msgid "Error during communication with the publisher warranty server." msgid "Error during communication with the publisher warranty server."
msgstr "" msgstr "Greška tijekom komunikacije sa serverom nositelja održavanja."
#. module: base #. module: base
#: help:ir.actions.server,email:0 #: help:ir.actions.server,email:0
@ -2136,6 +2136,8 @@ msgid ""
"separated list of valid field names (optionally followed by asc/desc for the " "separated list of valid field names (optionally followed by asc/desc for the "
"direction)" "direction)"
msgstr "" msgstr ""
"Naveden pogrešan \"poredak\". Ispravan \"poredak\" čini lista naziva polja "
"razdvojenih zarezom (opcionalno s asc/desc za smijer)"
#. module: base #. module: base
#: model:ir.model,name:base.model_ir_module_module_dependency #: model:ir.model,name:base.model_ir_module_module_dependency
@ -2597,7 +2599,7 @@ msgstr "Naurujski"
#: code:addons/base/module/module.py:200 #: code:addons/base/module/module.py:200
#, python-format #, python-format
msgid "The certificate ID of the module must be unique !" msgid "The certificate ID of the module must be unique !"
msgstr "" msgstr "Oznaka certifikata (ID) mora biti jedinstvena !"
#. module: base #. module: base
#: model:ir.model,name:base.model_ir_property #: model:ir.model,name:base.model_ir_property
@ -2674,7 +2676,7 @@ msgstr "EAN13"
#: code:addons/orm.py:1622 #: code:addons/orm.py:1622
#, python-format #, python-format
msgid "Invalid Architecture!" msgid "Invalid Architecture!"
msgstr "" msgstr "Pogrešna arhitektura!"
#. module: base #. module: base
#: model:res.country,name:base.pt #: model:res.country,name:base.pt
@ -2686,6 +2688,7 @@ msgstr "Portugal"
msgid "" msgid ""
"You cannot have multiple records with the same id for the same module !" "You cannot have multiple records with the same id for the same module !"
msgstr "" msgstr ""
"Nije dozvoljeno imatii više zapisa s istom oznakom (ID) u istom modulu."
#. module: base #. module: base
#: field:ir.module.module,certificate:0 #: field:ir.module.module,certificate:0
@ -3952,7 +3955,7 @@ msgstr "Zelenortska Republika (Zelenortski otoci)"
#. module: base #. module: base
#: view:base.module.import:0 #: view:base.module.import:0
msgid "Select module package to import (.zip file):" msgid "Select module package to import (.zip file):"
msgstr "" msgstr "Odaberite zapakirani modul za učitavanje (.zip datoteka):"
#. module: base #. module: base
#: model:ir.actions.act_window,name:base.act_res_partner_event #: model:ir.actions.act_window,name:base.act_res_partner_event
@ -4347,7 +4350,7 @@ msgstr "Želite očistiti ID-ove ? "
#: field:publisher_warranty.contract,name:0 #: field:publisher_warranty.contract,name:0
#: field:publisher_warranty.contract.wizard,name:0 #: field:publisher_warranty.contract.wizard,name:0
msgid "Serial Key" msgid "Serial Key"
msgstr "" msgstr "Serijski ključ"
#. module: base #. module: base
#: selection:res.request,priority:0 #: selection:res.request,priority:0
@ -4424,7 +4427,7 @@ msgstr "Mapiranje polja"
#. module: base #. module: base
#: view:publisher_warranty.contract:0 #: view:publisher_warranty.contract:0
msgid "Refresh Validation Dates" msgid "Refresh Validation Dates"
msgstr "" msgstr "Osvježite datume važenja"
#. module: base #. module: base
#: view:ir.model:0 #: view:ir.model:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:03+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:01+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:03+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:03+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:03+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0
@ -8788,9 +8788,9 @@ msgid ""
"Check this box if the partner is a supplier. If it's not checked, purchase " "Check this box if the partner is a supplier. If it's not checked, purchase "
"people will not see it when encoding a purchase order." "people will not see it when encoding a purchase order."
msgstr "" msgstr ""
"Seleziona questa casella se il partner è un fornitore. Se non selezionata, " "Seleziona questa casella se il partner è un fornitore. Se non selezionata, i "
"gli acquirenti non la vedranno durante la definizione di un ordine di " "responsabili acquisti non vedranno il partner durante la definizione di un "
"acquisto." "ordine di acquisto."
#. module: base #. module: base
#: field:ir.model.fields,relation_field:0 #: field:ir.model.fields,relation_field:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:03+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

File diff suppressed because it is too large Load Diff

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:03+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:03+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:03+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:04+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:04+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:04+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -7,14 +7,14 @@ msgstr ""
"Project-Id-Version: OpenERP Server 5.0.0\n" "Project-Id-Version: OpenERP Server 5.0.0\n"
"Report-Msgid-Bugs-To: support@openerp.com\n" "Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n" "POT-Creation-Date: 2011-01-11 11:14+0000\n"
"PO-Revision-Date: 2011-09-30 20:44+0000\n" "PO-Revision-Date: 2011-10-26 15:29+0000\n"
"Last-Translator: Antony Lesuisse (OpenERP) <al@openerp.com>\n" "Last-Translator: Michel Vorenhout <Unknown>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:02+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:49+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0
@ -8107,9 +8107,9 @@ msgid ""
"loading a new language it becomes available as default interface language " "loading a new language it becomes available as default interface language "
"for users and partners." "for users and partners."
msgstr "" msgstr ""
"Deze assitent helpt u een nieuwe taal toe te voegen aan uw OpenERP systeem. " "Deze assistent helpt u een nieuwe taal toe te voegen aan uw OpenERP systeem. "
"Na het laden van de nieuwe taal komt het beschikbaar als standaard interface " "Na het laden van de nieuwe taal komt deze beschikbaar als standaard "
"taal voor gebruikers en relaties." "interface taal voor gebruikers en relaties."
#. module: base #. module: base
#: field:ir.actions.server,subject:0 #: field:ir.actions.server,subject:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:07+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:04+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:04+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:06+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:04+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:04+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:05+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-05 04:44+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
"X-Generator: Launchpad (build 14085)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0
@ -211,7 +211,7 @@ msgstr "Struktura podjetja"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Inuktitut / ᐃᓄᒃᑎᑐᑦ" msgid "Inuktitut / ᐃᓄᒃᑎᑐᑦ"
msgstr "" msgstr "Inuktitut / ᐃᓄᒃᑎᑐᑦ"
#. module: base #. module: base
#: view:res.partner:0 #: view:res.partner:0
@ -524,7 +524,7 @@ msgstr "Ime opcijskega modula predmeta na katerem bo to dejanje vidno"
#. module: base #. module: base
#: field:workflow.transition,trigger_expr_id:0 #: field:workflow.transition,trigger_expr_id:0
msgid "Trigger Expression" msgid "Trigger Expression"
msgstr "" msgstr "Izraz sprožilnika"
#. module: base #. module: base
#: model:res.country,name:base.jo #: model:res.country,name:base.jo
@ -956,7 +956,7 @@ msgstr "Spletna stran"
#. module: base #. module: base
#: model:res.country,name:base.gs #: model:res.country,name:base.gs
msgid "S. Georgia & S. Sandwich Isls." msgid "S. Georgia & S. Sandwich Isls."
msgstr "" msgstr "S. Georgia in S. Sandwich otoki"
#. module: base #. module: base
#: field:ir.actions.url,url:0 #: field:ir.actions.url,url:0
@ -1278,7 +1278,7 @@ msgstr "Računska natančnost"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Sinhalese / සිංහල" msgid "Sinhalese / සිංහල"
msgstr "" msgstr "Sinhalese / සිංහල"
#. module: base #. module: base
#: model:ir.model,name:base.model_wizard_ir_model_menu_create_line #: model:ir.model,name:base.model_wizard_ir_model_menu_create_line
@ -1730,7 +1730,7 @@ msgstr "Poenostavljen"
#. module: base #. module: base
#: model:res.country,name:base.st #: model:res.country,name:base.st
msgid "Saint Tome (Sao Tome) and Principe" msgid "Saint Tome (Sao Tome) and Principe"
msgstr "" msgstr "Saint Tome (Sao Tome) in Principe"
#. module: base #. module: base
#: selection:res.partner.address,type:0 #: selection:res.partner.address,type:0
@ -2165,7 +2165,7 @@ msgstr "Ime partnerja"
#. module: base #. module: base
#: field:workflow.activity,signal_send:0 #: field:workflow.activity,signal_send:0
msgid "Signal (subflow.*)" msgid "Signal (subflow.*)"
msgstr "" msgstr "Signal (subflow.*)"
#. module: base #. module: base
#: model:res.partner.category,name:base.res_partner_category_17 #: model:res.partner.category,name:base.res_partner_category_17
@ -2545,7 +2545,7 @@ msgstr "Ruska federacija"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Urdu / اردو" msgid "Urdu / اردو"
msgstr "" msgstr "Urdu / اردو"
#. module: base #. module: base
#: field:res.company,name:0 #: field:res.company,name:0
@ -3218,7 +3218,7 @@ msgstr "Poročila po meri"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Abkhazian / аҧсуа" msgid "Abkhazian / аҧсуа"
msgstr "" msgstr "Copy text \t Abkhazian / аҧсуа"
#. module: base #. module: base
#: view:base.module.configuration:0 #: view:base.module.configuration:0
@ -3865,7 +3865,7 @@ msgstr "Seznam kontrole dostopa"
#. module: base #. module: base
#: model:res.country,name:base.um #: model:res.country,name:base.um
msgid "USA Minor Outlying Islands" msgid "USA Minor Outlying Islands"
msgstr "" msgstr "Manjši oddaljeni otoki ZDA"
#. module: base #. module: base
#: field:res.partner.bank,state:0 #: field:res.partner.bank,state:0
@ -3894,7 +3894,7 @@ msgstr "Datum inicializacije"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Gujarati / ગુજરાતી" msgid "Gujarati / ગુજરાતી"
msgstr "" msgstr "Gujarati / ગુજરાતી"
#. module: base #. module: base
#: code:addons/base/module/module.py:257 #: code:addons/base/module/module.py:257
@ -3946,7 +3946,7 @@ msgstr "Ure"
#. module: base #. module: base
#: model:res.country,name:base.gp #: model:res.country,name:base.gp
msgid "Guadeloupe (French)" msgid "Guadeloupe (French)"
msgstr "" msgstr "Guadeloupe (francoski)"
#. module: base #. module: base
#: code:addons/base/res/res_lang.py:157 #: code:addons/base/res/res_lang.py:157
@ -4088,7 +4088,7 @@ msgstr "Natančnost cene"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Latvian / latviešu valoda" msgid "Latvian / latviešu valoda"
msgstr "" msgstr "Latvijsko / latviešu valoda"
#. module: base #. module: base
#: view:res.config:0 #: view:res.config:0
@ -4099,7 +4099,7 @@ msgstr "vsep"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "French / Français" msgid "French / Français"
msgstr "" msgstr "Francosko / Français"
#. module: base #. module: base
#: code:addons/orm.py:1049 #: code:addons/orm.py:1049
@ -4193,7 +4193,7 @@ msgstr "Meniji"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Serbian (Latin) / srpski" msgid "Serbian (Latin) / srpski"
msgstr "" msgstr "Srbsko (Latin) / srpski"
#. module: base #. module: base
#: model:res.country,name:base.il #: model:res.country,name:base.il
@ -4266,7 +4266,7 @@ msgstr "Banke"
#. module: base #. module: base
#: view:res.log:0 #: view:res.log:0
msgid "Unread" msgid "Unread"
msgstr "" msgstr "Neprebrano"
#. module: base #. module: base
#: field:ir.cron,doall:0 #: field:ir.cron,doall:0
@ -4393,7 +4393,7 @@ msgstr "Za sorodna polja, tehnično ime ciljnega modela"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Indonesian / Bahasa Indonesia" msgid "Indonesian / Bahasa Indonesia"
msgstr "" msgstr "Indonezijski / Bahasa Indonesia"
#. module: base #. module: base
#: field:ir.ui.view,inherit_id:0 #: field:ir.ui.view,inherit_id:0
@ -4847,7 +4847,7 @@ msgstr "Elementi delovnih procesov"
#. module: base #. module: base
#: model:res.country,name:base.vc #: model:res.country,name:base.vc
msgid "Saint Vincent & Grenadines" msgid "Saint Vincent & Grenadines"
msgstr "" msgstr "Saint Vincent in Grenadine"
#. module: base #. module: base
#: field:partner.sms.send,password:0 #: field:partner.sms.send,password:0
@ -4886,7 +4886,7 @@ msgstr "RML interna glava"
#. module: base #. module: base
#: field:ir.actions.act_window,search_view_id:0 #: field:ir.actions.act_window,search_view_id:0
msgid "Search View Ref." msgid "Search View Ref."
msgstr "" msgstr "Sklic pogleda iskanja"
#. module: base #. module: base
#: field:ir.module.module,installed_version:0 #: field:ir.module.module,installed_version:0
@ -5144,7 +5144,7 @@ msgstr "Nadrejena kategorija"
#. module: base #. module: base
#: selection:ir.property,type:0 #: selection:ir.property,type:0
msgid "Integer Big" msgid "Integer Big"
msgstr "" msgstr "Veliko celo število"
#. module: base #. module: base
#: selection:res.partner.address,type:0 #: selection:res.partner.address,type:0
@ -5440,7 +5440,7 @@ msgstr "Naprej"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Thai / ภาษาไทย" msgid "Thai / ภาษาไทย"
msgstr "" msgstr "Tajski/ ภาษาไทย"
#. module: base #. module: base
#: code:addons/orm.py:158 #: code:addons/orm.py:158
@ -5523,7 +5523,7 @@ msgstr "Privzeto podjetje"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Spanish (EC) / Español (EC)" msgid "Spanish (EC) / Español (EC)"
msgstr "" msgstr "Špansko (EC) / Español (EC)"
#. module: base #. module: base
#: help:ir.ui.view,xml_id:0 #: help:ir.ui.view,xml_id:0
@ -5598,7 +5598,7 @@ msgstr "Zaposlovanje"
#. module: base #. module: base
#: model:res.country,name:base.re #: model:res.country,name:base.re
msgid "Reunion (French)" msgid "Reunion (French)"
msgstr "" msgstr "Reunion (francoski)"
#. module: base #. module: base
#: code:addons/base/ir/ir_model.py:321 #: code:addons/base/ir/ir_model.py:321
@ -5732,7 +5732,7 @@ msgstr ""
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Flemish (BE) / Vlaams (BE)" msgid "Flemish (BE) / Vlaams (BE)"
msgstr "" msgstr "Flamski (BE) / Vlaams (BE)"
#. module: base #. module: base
#: field:ir.cron,interval_number:0 #: field:ir.cron,interval_number:0
@ -5797,7 +5797,7 @@ msgstr "Bližnjice po meri"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Vietnamese / Tiếng Việt" msgid "Vietnamese / Tiếng Việt"
msgstr "" msgstr "Vietnamski/ Tiếng Việt"
#. module: base #. module: base
#: model:res.country,name:base.dz #: model:res.country,name:base.dz
@ -5915,7 +5915,7 @@ msgstr "Nevtralno območje"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Hindi / हिंदी" msgid "Hindi / हिंदी"
msgstr "" msgstr "Hindujski / हिंदी"
#. module: base #. module: base
#: view:ir.model:0 #: view:ir.model:0
@ -6121,7 +6121,7 @@ msgstr "Osnova"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Telugu / తెలుగు" msgid "Telugu / తెలుగు"
msgstr "" msgstr "Copy text \t Telugu / తెలుగు"
#. module: base #. module: base
#: model:res.country,name:base.lr #: model:res.country,name:base.lr
@ -6210,7 +6210,7 @@ msgstr "Kode zaporedja"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Spanish (CO) / Español (CO)" msgid "Spanish (CO) / Español (CO)"
msgstr "" msgstr "Špansko (CO) / Español (CO)"
#. module: base #. module: base
#: view:base.module.configuration:0 #: view:base.module.configuration:0
@ -6250,7 +6250,7 @@ msgstr "res.log"
#: help:ir.translation,module:0 #: help:ir.translation,module:0
#: help:ir.translation,xml_id:0 #: help:ir.translation,xml_id:0
msgid "Maps to the ir_model_data for which this translation is provided." msgid "Maps to the ir_model_data for which this translation is provided."
msgstr "" msgstr "Mapira k ir_model_data za katerega je zagotovljen prevod."
#. module: base #. module: base
#: view:workflow.activity:0 #: view:workflow.activity:0
@ -6266,7 +6266,7 @@ msgstr "Tedni"
#. module: base #. module: base
#: model:res.country,name:base.af #: model:res.country,name:base.af
msgid "Afghanistan, Islamic State of" msgid "Afghanistan, Islamic State of"
msgstr "" msgstr "Afganistan, Muslimanska država"
#. module: base #. module: base
#: code:addons/base/module/wizard/base_module_import.py:67 #: code:addons/base/module/wizard/base_module_import.py:67
@ -6324,7 +6324,7 @@ msgstr ""
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Chinese (TW) / 正體字" msgid "Chinese (TW) / 正體字"
msgstr "" msgstr "Kitajsko (TW) / 正體字"
#. module: base #. module: base
#: model:ir.model,name:base.model_res_request #: model:ir.model,name:base.model_res_request
@ -6382,7 +6382,7 @@ msgstr "Ime storitve"
#. module: base #. module: base
#: model:res.country,name:base.pn #: model:res.country,name:base.pn
msgid "Pitcairn Island" msgid "Pitcairn Island"
msgstr "" msgstr "Otok Pitcairn"
#. module: base #. module: base
#: view:base.module.upgrade:0 #: view:base.module.upgrade:0
@ -6585,7 +6585,7 @@ msgstr "Nameščena različica"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Mongolian / монгол" msgid "Mongolian / монгол"
msgstr "" msgstr "Mongolski / монгол"
#. module: base #. module: base
#: model:res.country,name:base.mr #: model:res.country,name:base.mr
@ -6622,7 +6622,7 @@ msgstr "Krovno podjetje"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Spanish (CR) / Español (CR)" msgid "Spanish (CR) / Español (CR)"
msgstr "" msgstr "Špansko (CR) / Español (CR)"
#. module: base #. module: base
#: field:res.currency.rate,rate:0 #: field:res.currency.rate,rate:0
@ -6652,7 +6652,7 @@ msgstr "Orodja"
#. module: base #. module: base
#: model:res.country,name:base.kn #: model:res.country,name:base.kn
msgid "Saint Kitts & Nevis Anguilla" msgid "Saint Kitts & Nevis Anguilla"
msgstr "" msgstr "Saint Kitts in Nevis Anguilla"
#. module: base #. module: base
#: code:addons/base/res/res_currency.py:100 #: code:addons/base/res/res_currency.py:100
@ -6717,7 +6717,7 @@ msgstr "Model kateremu ta polja pripadajo"
#. module: base #. module: base
#: model:res.country,name:base.mq #: model:res.country,name:base.mq
msgid "Martinique (French)" msgid "Martinique (French)"
msgstr "" msgstr "Martinique (francoski)"
#. module: base #. module: base
#: view:ir.sequence.type:0 #: view:ir.sequence.type:0
@ -6781,7 +6781,7 @@ msgstr ""
#. module: base #. module: base
#: field:ir.ui.menu,child_id:0 #: field:ir.ui.menu,child_id:0
msgid "Child IDs" msgid "Child IDs"
msgstr "" msgstr "Podrejeni ID-ji"
#. module: base #. module: base
#: code:addons/base/ir/ir_actions.py:713 #: code:addons/base/ir/ir_actions.py:713
@ -7231,7 +7231,7 @@ msgstr "Stranka"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Spanish (NI) / Español (NI)" msgid "Spanish (NI) / Español (NI)"
msgstr "" msgstr "Špansko (NI) / Español (NI)"
#. module: base #. module: base
#: field:ir.module.module,shortdesc:0 #: field:ir.module.module,shortdesc:0
@ -7542,7 +7542,7 @@ msgstr "Stanje"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Galician / Galego" msgid "Galician / Galego"
msgstr "" msgstr "Galski / Galego"
#. module: base #. module: base
#: model:res.country,name:base.no #: model:res.country,name:base.no
@ -7766,7 +7766,7 @@ msgstr "Nedefinirana metoda 'get'!"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Norwegian Bokmål / Norsk bokmål" msgid "Norwegian Bokmål / Norsk bokmål"
msgstr "" msgstr "Norveški Bokmål / Norsk bokmål"
#. module: base #. module: base
#: help:res.config.users,new_password:0 #: help:res.config.users,new_password:0
@ -7827,7 +7827,7 @@ msgstr "ir.values"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Occitan (FR, post 1500) / Occitan" msgid "Occitan (FR, post 1500) / Occitan"
msgstr "" msgstr "Copy text \t Occitan (FR, post 1500) / Occitan"
#. module: base #. module: base
#: model:ir.actions.act_window,help:base.open_module_tree #: model:ir.actions.act_window,help:base.open_module_tree
@ -7856,7 +7856,7 @@ msgstr "Demokratična republika Kongo"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Malayalam / മലയാളം" msgid "Malayalam / മലയാളം"
msgstr "" msgstr "Malezijski / മലയാളം"
#. module: base #. module: base
#: view:res.request:0 #: view:res.request:0
@ -7928,7 +7928,7 @@ msgstr "Koda države mora biti edinstvena!"
#. module: base #. module: base
#: selection:ir.module.module.dependency,state:0 #: selection:ir.module.module.dependency,state:0
msgid "Uninstallable" msgid "Uninstallable"
msgstr "" msgstr "Nenamestljiv"
#. module: base #. module: base
#: view:res.partner.category:0 #: view:res.partner.category:0
@ -8018,7 +8018,7 @@ msgstr "2.sklic dokument"
#. module: base #. module: base
#: field:res.request,ref_doc1:0 #: field:res.request,ref_doc1:0
msgid "Document Ref 1" msgid "Document Ref 1"
msgstr "" msgstr "1.sklic dokumenta"
#. module: base #. module: base
#: model:res.country,name:base.ga #: model:res.country,name:base.ga
@ -8055,7 +8055,7 @@ msgstr "Copy text \t 1. %c ==> Pet 5.Dec 2008 5 18:25:20"
#. module: base #. module: base
#: model:res.country,name:base.nc #: model:res.country,name:base.nc
msgid "New Caledonia (French)" msgid "New Caledonia (French)"
msgstr "" msgstr "Nova Caledonia (francoski)"
#. module: base #. module: base
#: model:res.country,name:base.cy #: model:res.country,name:base.cy
@ -8262,7 +8262,7 @@ msgstr "Gradiniki na uporabnika"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Slovak / Slovenský jazyk" msgid "Slovak / Slovenský jazyk"
msgstr "" msgstr "Slovaški / Slovenský jazyk"
#. module: base #. module: base
#: field:base.language.export,state:0 #: field:base.language.export,state:0
@ -8570,7 +8570,7 @@ msgstr "Tanzanija"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Danish / Dansk" msgid "Danish / Dansk"
msgstr "" msgstr "Danski / Dansk"
#. module: base #. module: base
#: selection:ir.model.fields,select_level:0 #: selection:ir.model.fields,select_level:0
@ -8703,7 +8703,7 @@ msgstr "Dominikanska republika"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Serbian (Cyrillic) / српски" msgid "Serbian (Cyrillic) / српски"
msgstr "" msgstr "Srbski (Cirilica) / српски"
#. module: base #. module: base
#: code:addons/orm.py:2161 #: code:addons/orm.py:2161
@ -8860,7 +8860,7 @@ msgstr "Interesi & priložnosti"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Romanian / română" msgid "Romanian / română"
msgstr "" msgstr "Romunski/ română"
#. module: base #. module: base
#: view:res.log:0 #: view:res.log:0
@ -8985,7 +8985,7 @@ msgstr "Datoteka spletne ikone"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Persian / فارس" msgid "Persian / فارس"
msgstr "" msgstr "Perzijski / فارس"
#. module: base #. module: base
#: view:ir.actions.act_window:0 #: view:ir.actions.act_window:0
@ -9099,7 +9099,7 @@ msgstr "Pogodba založniške garancije"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Bulgarian / български език" msgid "Bulgarian / български език"
msgstr "" msgstr "Bolgarski / български език"
#. module: base #. module: base
#: model:ir.ui.menu,name:base.menu_aftersale #: model:ir.ui.menu,name:base.menu_aftersale
@ -9212,7 +9212,7 @@ msgstr "Ni mogoče posodobiti"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Klingon" msgid "Klingon"
msgstr "" msgstr "Klingon"
#. module: base #. module: base
#: model:res.country,name:base.sg #: model:res.country,name:base.sg
@ -9295,7 +9295,7 @@ msgstr "%X - primeren čas zastopnja"
#. module: base #. module: base
#: selection:base.language.install,lang:0 #: selection:base.language.install,lang:0
msgid "Spanish (SV) / Español (SV)" msgid "Spanish (SV) / Español (SV)"
msgstr "" msgstr "Španski (SV) / Español (SV)"
#. module: base #. module: base
#: help:res.lang,grouping:0 #: help:res.lang,grouping:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:00+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:47+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:05+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:07+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:55+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:05+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0
@ -28,7 +28,7 @@ msgstr "Domän"
#. module: base #. module: base
#: model:res.country,name:base.sh #: model:res.country,name:base.sh
msgid "Saint Helena" msgid "Saint Helena"
msgstr "St Helena" msgstr "Sankta Helena"
#. module: base #. module: base
#: view:ir.actions.report.xml:0 #: view:ir.actions.report.xml:0
@ -38,7 +38,7 @@ msgstr "Övrig konfiguration"
#. module: base #. module: base
#: selection:ir.property,type:0 #: selection:ir.property,type:0
msgid "DateTime" msgid "DateTime"
msgstr "DatumTid" msgstr "Datum/Tid"
#. module: base #. module: base
#: code:addons/fields.py:534 #: code:addons/fields.py:534

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:05+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:06+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:06+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:06+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:06+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openobject-addons\n" "Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: support@openerp.com\n" "Report-Msgid-Bugs-To: support@openerp.com\n"
"POT-Creation-Date: 2011-01-11 11:14+0000\n" "POT-Creation-Date: 2011-01-11 11:14+0000\n"
"PO-Revision-Date: 2011-07-23 16:37+0000\n" "PO-Revision-Date: 2011-11-05 03:38+0000\n"
"Last-Translator: OpenBMS JSC <Unknown>\n" "Last-Translator: Vuong Kien Hung <Unknown>\n"
"Language-Team: Vietnamese <vi@li.org>\n" "Language-Team: Vietnamese <vi@li.org>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:06+0000\n" "X-Launchpad-Export-Date: 2011-11-06 05:23+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0
@ -9053,7 +9053,7 @@ msgstr "Hình thức tách"
#. module: base #. module: base
#: view:base.module.upgrade:0 #: view:base.module.upgrade:0
msgid "Note that this operation might take a few minutes." 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 #. module: base
#: model:ir.ui.menu,name:base.menu_localisation #: model:ir.ui.menu,name:base.menu_localisation
@ -9106,7 +9106,7 @@ msgstr ""
#. module: base #. module: base
#: view:res.lang:0 #: view:res.lang:0
msgid "%j - Day of the year [001,366]." msgid "%j - Day of the year [001,366]."
msgstr "" msgstr "%j - Ngày của năm [001,366]"
#. module: base #. module: base
#: field:ir.actions.server,mobile:0 #: field:ir.actions.server,mobile:0
@ -9189,7 +9189,7 @@ msgstr ""
#. module: base #. module: base
#: help:ir.sequence,number_increment:0 #: help:ir.sequence,number_increment:0
msgid "The next number of the sequence will be incremented by this number" 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 #. module: base
#: field:ir.cron,function:0 #: field:ir.cron,function:0
@ -9238,7 +9238,7 @@ msgstr "Các đối tác: "
#. module: base #. module: base
#: model:res.country,name:base.kp #: model:res.country,name:base.kp
msgid "North Korea" msgid "North Korea"
msgstr "" msgstr "Bắc Triều Tiên"
#. module: base #. module: base
#: selection:ir.actions.server,state:0 #: selection:ir.actions.server,state:0
@ -9269,7 +9269,7 @@ msgstr ""
#. module: base #. module: base
#: field:ir.exports,name:0 #: field:ir.exports,name:0
msgid "Export Name" msgid "Export Name"
msgstr "" msgstr "Tên Trích xuất"
#. module: base #. module: base
#: help:res.partner.address,type:0 #: help:res.partner.address,type:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:07+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:06+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -13,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2011-10-01 05:07+0000\n" "X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
"X-Generator: Launchpad (build 14071)\n" "X-Generator: Launchpad (build 14231)\n"
#. module: base #. module: base
#: view:ir.filters:0 #: view:ir.filters:0

View File

@ -2043,7 +2043,9 @@
<field name="view_id" ref="ir_mail_server_list" /> <field name="view_id" ref="ir_mail_server_list" />
<field name="search_view_id" ref="view_ir_mail_server_search"/> <field name="search_view_id" ref="view_ir_mail_server_search"/>
</record> </record>
<menuitem id="next_id_15" name="Parameters" parent="base.menu_config" groups="base.group_extended" />
<menuitem id="menu_mail_servers" parent="base.next_id_15" action="action_ir_mail_server_list" sequence="15"/> <menuitem id="menu_email" name="Email" parent="base.menu_config" groups="base.group_extended"/>
<menuitem id="menu_mail_servers" parent="menu_email" action="action_ir_mail_server_list" sequence="15"/>
</data> </data>
</openerp> </openerp>

View File

@ -117,7 +117,7 @@ class report_xml(osv.osv):
'multi': fields.boolean('On multiple doc.', help="If set to true, the action will not be displayed on the right toolbar of a form view."), 'multi': fields.boolean('On multiple doc.', help="If set to true, the action will not be displayed on the right toolbar of a form view."),
'attachment': fields.char('Save As Attachment Prefix', size=128, help='This is the filename of the attachment used to store the printing result. Keep empty to not save the printed reports. You can use a python expression with the object and time variables.'), 'attachment': fields.char('Save As Attachment Prefix', size=128, help='This is the filename of the attachment used to store the printing result. Keep empty to not save the printed reports. You can use a python expression with the object and time variables.'),
'attachment_use': fields.boolean('Reload from Attachment', help='If you check this, then the second time the user prints with same attachment name, it returns the previous report.'), 'attachment_use': fields.boolean('Reload from Attachment', help='If you check this, then the second time the user prints with same attachment name, it returns the previous report.'),
'auto': fields.boolean('Custom python parser', required=True), 'auto': fields.boolean('Custom python parser'),
'header': fields.boolean('Add RML header', help="Add or not the coporate RML header"), 'header': fields.boolean('Add RML header', help="Add or not the coporate RML header"),
@ -265,12 +265,13 @@ class act_window(osv.osv):
help="Model name of the object to open in the view window"), help="Model name of the object to open in the view window"),
'src_model': fields.char('Source Object', size=64, 'src_model': fields.char('Source Object', size=64,
help="Optional model name of the objects on which this action should be visible"), 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, '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"), 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, '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)"), 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'), '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', '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 " \ help="This function field computes the ordered list of views that should be enabled " \

View File

@ -25,7 +25,7 @@ Store database-specific configuration parameters
from osv import osv,fields from osv import osv,fields
import uuid import uuid
import datetime import datetime
from tools import misc from tools import misc, config
""" """
A dictionary holding some configuration parameters to be initialized when the database is created. A dictionary holding some configuration parameters to be initialized when the database is created.
@ -33,6 +33,7 @@ A dictionary holding some configuration parameters to be initialized when the da
_default_parameters = { _default_parameters = {
"database.uuid": lambda: str(uuid.uuid1()), "database.uuid": lambda: str(uuid.uuid1()),
"database.create_date": lambda: datetime.datetime.now().strftime(misc.DEFAULT_SERVER_DATETIME_FORMAT), "database.create_date": lambda: datetime.datetime.now().strftime(misc.DEFAULT_SERVER_DATETIME_FORMAT),
"web.base.url": lambda: "http://localhost:%s" % config.get('xmlrpc_port'),
} }
class ir_config_parameter(osv.osv): class ir_config_parameter(osv.osv):

View File

@ -44,8 +44,8 @@ _logger = logging.getLogger('ir.mail_server')
class MailDeliveryException(osv.except_osv): class MailDeliveryException(osv.except_osv):
"""Specific exception subclass for mail delivery errors""" """Specific exception subclass for mail delivery errors"""
def __init__(self, name, value, exc_type='warning'): def __init__(self, name, value):
super(MailDeliveryException, self).__init__(name, value, exc_type=exc_type) super(MailDeliveryException, self).__init__(name, value)
class WriteToLogger(object): class WriteToLogger(object):
"""debugging helper: behave as a fd and pipe to logger at the given level""" """debugging helper: behave as a fd and pipe to logger at the given level"""
@ -431,7 +431,9 @@ class ir_mail_server(osv.osv):
# ignored, just a consequence of the previous exception # ignored, just a consequence of the previous exception
pass pass
except Exception, e: except Exception, e:
msg = _("Mail delivery failed via SMTP server '%s'.\n%s: %s") % (smtp_server, e.__class__.__name__, e) msg = _("Mail delivery failed via SMTP server '%s'.\n%s: %s") % (tools.ustr(smtp_server),
e.__class__.__name__,
tools.ustr(e))
_logger.exception(msg) _logger.exception(msg)
raise MailDeliveryException(_("Mail delivery failed"), msg) raise MailDeliveryException(_("Mail delivery failed"), msg)
return message_id return message_id

View File

@ -124,12 +124,13 @@ class ir_model(osv.osv):
# overridden to allow searching both on model name (model field) # overridden to allow searching both on model name (model field)
# and model description (name field) # and model description (name field)
def name_search(self, cr, uid, name='', args=None, operator='ilike', context=None, limit=None): def _name_search(self, cr, uid, name='', args=None, operator='ilike', context=None, limit=100, name_get_uid=None):
if args is None: if args is None:
args = [] args = []
domain = args + ['|', ('model', operator, name), ('name', operator, name)] domain = args + ['|', ('model', operator, name), ('name', operator, name)]
return super(ir_model, self).name_search(cr, uid, None, domain, return self.name_get(cr, name_get_uid or uid,
operator=operator, limit=limit, context=context) super(ir_model, self).search(cr, uid, domain, limit=limit, context=context),
context=context)
def unlink(self, cr, user, ids, context=None): def unlink(self, cr, user, ids, context=None):
@ -671,18 +672,20 @@ class ir_model_data(osv.osv):
action_id = False action_id = False
if xml_id: if xml_id:
cr.execute('''SELECT imd.id, imd.res_id, md.id cr.execute('''SELECT imd.id, imd.res_id, md.id, imd.model
FROM ir_model_data imd LEFT JOIN %s md ON (imd.res_id = md.id) FROM ir_model_data imd LEFT JOIN %s md ON (imd.res_id = md.id)
WHERE imd.module=%%s AND imd.name=%%s''' % model_obj._table, WHERE imd.module=%%s AND imd.name=%%s''' % model_obj._table,
(module, xml_id)) (module, xml_id))
results = cr.fetchall() results = cr.fetchall()
for imd_id2,res_id2,real_id2 in results: for imd_id2,res_id2,real_id2,real_model in results:
if not real_id2: if not real_id2:
self._get_id.clear_cache(self, uid, module, xml_id) self._get_id.clear_cache(self, uid, module, xml_id)
self.get_object_reference.clear_cache(self, uid, module, xml_id) self.get_object_reference.clear_cache(self, uid, module, xml_id)
cr.execute('delete from ir_model_data where id=%s', (imd_id2,)) cr.execute('delete from ir_model_data where id=%s', (imd_id2,))
res_id = False res_id = False
else: else:
assert model == real_model, "External ID conflict, %s already refers to a `%s` record,"\
" you can't define a `%s` record with this ID." % (xml_id, real_model, model)
res_id,action_id = res_id2,imd_id2 res_id,action_id = res_id2,imd_id2
if action_id and res_id: if action_id and res_id:

View File

@ -27,22 +27,6 @@ import tools
import os import os
import logging 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): class view_custom(osv.osv):
_name = 'ir.ui.view.custom' _name = 'ir.ui.view.custom'
_order = 'create_date desc' # search(limit=1) should return the last customization _order = 'create_date desc' # search(limit=1) should return the last customization
@ -86,6 +70,23 @@ class view(osv.osv):
'priority': 16 'priority': 16
} }
_order = "priority,name" _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 = [ _constraints = [
(_check_xml, 'Invalid XML for View Architecture!', ['arch']) (_check_xml, 'Invalid XML for View Architecture!', ['arch'])
] ]

View File

@ -109,8 +109,8 @@
<field name="sequence">14</field> <field name="sequence">14</field>
</record> </record>
<record model="ir.module.category" id="module_category_vertical_applications"> <record model="ir.module.category" id="module_category_specific_industry_applications">
<field name="name">Verticalizations</field> <field name="name">Specific Industry Applications</field>
<field name="sequence">15</field> <field name="sequence">15</field>
</record> </record>

View File

@ -70,6 +70,9 @@ class res_config_configurable(osv.osv_memory):
res = next.action_launch(context=context) res = next.action_launch(context=context)
res['nodestroy'] = False res['nodestroy'] = False
return res 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'} return {'type' : 'ir.actions.act_window_close'}
def start(self, cr, uid, ids, context=None): def start(self, cr, uid, ids, context=None):

View File

@ -150,7 +150,6 @@ class res_partner(osv.osv):
_defaults = { _defaults = {
'active': lambda *a: 1, 'active': lambda *a: 1,
'customer': lambda *a: 1, 'customer': lambda *a: 1,
'address': [{'type': 'default'}],
'category_id': _default_category, '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), 'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'res.partner', context=c),
'color': 0, 'color': 0,

View File

@ -105,13 +105,16 @@
</form> </form>
</field> </field>
</record> </record>
<record model="ir.ui.view" id="contacts_kanban_view"> <record model="ir.ui.view" id="contacts_kanban_view">
<field name="name">res.partner.address.kanban</field> <field name="name">res.partner.address.kanban</field>
<field name="model">res.partner.address</field> <field name="model">res.partner.address</field>
<field name="type">kanban</field> <field name="type">kanban</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<kanban > <kanban>
<field name="color"/>
<field name="name"/>
<field name="email"/>
<templates> <templates>
<t t-name="kanban-box"> <t t-name="kanban-box">
<t t-set="color" t-value="kanban_color(record.color.raw_value || record.name.raw_value)"/> <t t-set="color" t-value="kanban_color(record.color.raw_value || record.name.raw_value)"/>
@ -133,22 +136,22 @@
<table class="oe_kanban_table"> <table class="oe_kanban_table">
<tr> <tr>
<td valign="top" width="22" align="left"> <td valign="top" width="22" align="left">
<img src="/web/static/src/img/persons.png"/> <img src="/base/static/src/img/kanban_partner.png" width="64" height="64"/>
</td> </td>
<td valign="top" align="left"> <td valign="top" align="left">
<div class="oe_kanban_title2"> <div class="oe_kanban_title2">
<field name="title"/> <field name="title"/>
<t t-if="record.title.raw_value &amp;&amp; record.function.raw_value">,</t> <t t-if="record.title.raw_value and record.function.raw_value">,</t>
<field name="function"/> <field name="function"/>
</div> </div>
<div class="oe_kanban_title3"> <div class="oe_kanban_title3">
<field name="partner_id"/> <field name="partner_id"/>
<t t-if="record.partner_id.raw_value &amp;&amp; record.country_id.raw_value">,</t> <t t-if="record.partner_id.raw_value and record.country_id.raw_value">,</t>
<field name="country_id"/> <field name="country_id"/>
</div> </div>
<div class="oe_kanban_title3"> <div class="oe_kanban_title3">
<i><field name="email"/> <i><field name="email"/>
<t t-if="record.phone.raw_value &amp;&amp; record.email.raw_value">,</t> <t t-if="record.phone.raw_value and record.email.raw_value">,</t>
<field name="phone"/></i> <field name="phone"/></i>
</div> </div>
</td> </td>
@ -157,7 +160,7 @@
</div> </div>
<div class="oe_kanban_buttons_set oe_kanban_color_border oe_kanban_color_bglight oe_kanban_box_show_onclick"> <div class="oe_kanban_buttons_set oe_kanban_color_border oe_kanban_color_bglight oe_kanban_box_show_onclick">
<div class="oe_kanban_left"> <div class="oe_kanban_left">
<a string="Edit" icon="gtk-edit" type="edit"/> <a string="Edit" icon="gtk-edit" type="edit"/>
<a string="Change Color" icon="color-picker" type="color" name="color"/> <a string="Change Color" icon="color-picker" type="color" name="color"/>
<a title="Mail" t-att-href="'mailto:'+record.email.value" style="text-decoration: none;" > <a title="Mail" t-att-href="'mailto:'+record.email.value" style="text-decoration: none;" >
<img src="/web/static/src/img/icons/terp-mail-message-new.png" border="0" width="16" height="16"/> <img src="/web/static/src/img/icons/terp-mail-message-new.png" border="0" width="16" height="16"/>
@ -422,7 +425,7 @@
</search> </search>
</field> </field>
</record> </record>
<!-- Partner Kanban View --> <!-- Partner Kanban View -->
<record model="ir.ui.view" id="res_partner_kanban_view"> <record model="ir.ui.view" id="res_partner_kanban_view">
<field name="name">RES - PARTNER KANBAN</field> <field name="name">RES - PARTNER KANBAN</field>
@ -430,6 +433,9 @@
<field name="type">kanban</field> <field name="type">kanban</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<kanban> <kanban>
<field name="color"/>
<field name="name"/>
<field name="email"/>
<templates> <templates>
<t t-name="kanban-box"> <t t-name="kanban-box">
<t t-set="color" t-value="kanban_color(record.color.raw_value || record.name.raw_value)"/> <t t-set="color" t-value="kanban_color(record.color.raw_value || record.name.raw_value)"/>
@ -450,23 +456,23 @@
<div class="oe_kanban_box_content oe_kanban_color_bglight oe_kanban_box_show_onclick_trigger oe_kanban_color_border"> <div class="oe_kanban_box_content oe_kanban_color_bglight oe_kanban_box_show_onclick_trigger oe_kanban_color_border">
<table class="oe_kanban_table"> <table class="oe_kanban_table">
<tr> <tr>
<td valign="top" width="22" align="left"> <td valign="top" width="64" align="left">
<img src="/web/static/src/img/partner.png"/> <img src="/base/static/src/img/kanban_partner.png" width="64" height="64"/>
</td> </td>
<td valign="top" align="left"> <td valign="top" align="left">
<div class="oe_kanban_title2"> <div class="oe_kanban_title2">
<field name="title"/> <field name="title"/>
<t t-if="record.title.raw_value &amp;&amp; record.country.raw_value">,</t> <t t-if="record.title.raw_value and record.country.raw_value">,</t>
<field name="country"/> <field name="country"/>
</div> </div>
<div class="oe_kanban_title3"> <div class="oe_kanban_title3">
<field name="subname"/> <field name="subname"/>
<t t-if="record.subname.raw_value &amp;&amp; record.function.raw_value">,</t> <t t-if="record.subname.raw_value and record.function.raw_value">,</t>
<field name="function"/> <field name="function"/>
</div> </div>
<div class="oe_kanban_title3"> <div class="oe_kanban_title3">
<i><field name="email"/> <i><field name="email"/>
<t t-if="record.phone.raw_value &amp;&amp; record.email.raw_value">,</t> <t t-if="record.phone.raw_value and record.email.raw_value">,</t>
<field name="phone"/></i> <field name="phone"/></i>
</div> </div>
</td> </td>
@ -475,7 +481,7 @@
</div> </div>
<div class="oe_kanban_buttons_set oe_kanban_color_border oe_kanban_color_bglight oe_kanban_box_show_onclick"> <div class="oe_kanban_buttons_set oe_kanban_color_border oe_kanban_color_bglight oe_kanban_box_show_onclick">
<div class="oe_kanban_left"> <div class="oe_kanban_left">
<a string="Edit" icon="gtk-edit" type="edit"/> <a string="Edit" icon="gtk-edit" type="edit"/>
<a string="Change Color" icon="color-picker" type="color" name="color"/> <a string="Change Color" icon="color-picker" type="color" name="color"/>
<a title="Mail" t-att-href="'mailto:'+record.email.value" style="text-decoration: none;" > <a title="Mail" t-att-href="'mailto:'+record.email.value" style="text-decoration: none;" >
<img src="/web/static/src/img/icons/terp-mail-message-new.png" border="0" width="16" height="16"/> <img src="/web/static/src/img/icons/terp-mail-message-new.png" border="0" width="16" height="16"/>

View File

@ -35,6 +35,7 @@ from osv import fields,osv
from osv.orm import browse_record from osv.orm import browse_record
from service import security from service import security
from tools.translate import _ from tools.translate import _
import openerp
import openerp.exceptions import openerp.exceptions
class groups(osv.osv): class groups(osv.osv):
@ -205,6 +206,7 @@ class users(osv.osv):
return dict.fromkeys(ids, '') return dict.fromkeys(ids, '')
_columns = { _columns = {
'id': fields.integer('ID'),
'name': fields.char('User Name', size=64, required=True, select=True, 'name': fields.char('User Name', size=64, required=True, select=True,
help="The new user's real name, used for searching" help="The new user's real name, used for searching"
" and most listings"), " and most listings"),
@ -417,14 +419,42 @@ class users(osv.osv):
data_id = dataobj._get_id(cr, 1, 'base', 'action_res_users_my') data_id = dataobj._get_id(cr, 1, 'base', 'action_res_users_my')
return dataobj.browse(cr, uid, data_id, context=context).res_id return dataobj.browse(cr, uid, data_id, context=context).res_id
def authenticate(self, db, login, password, user_agent_env):
"""Verifies and returns the user ID corresponding to the given
``login`` and ``password`` combination, or False if there was
no matching user.
:param str db: the database on which user is trying to authenticate
:param str login: username
:param str password: user password
:param dict user_agent_env: environment dictionary describing any
relevant environment attributes
"""
uid = self.login(db, login, password)
if uid == openerp.SUPERUSER_ID:
# Successfully logged in as admin!
# Attempt to guess the web base url...
if user_agent_env and user_agent_env.get('base_location'):
cr = pooler.get_db(db).cursor()
try:
self.pool.get('ir.config_parameter').set_param(cr, uid, 'web.base.url',
user_agent_env['base_location'])
cr.commit()
except Exception:
logging.getLogger('res.users').exception("Failed to update web.base.url configuration parameter")
finally:
cr.close()
return uid
def login(self, db, login, password): def login(self, db, login, password):
if not password: if not password:
return False return False
cr = pooler.get_db(db).cursor() cr = pooler.get_db(db).cursor()
try: try:
cr.execute('UPDATE res_users SET date=now() WHERE login=%s AND password=%s AND active RETURNING id', cr.execute("""UPDATE res_users
(tools.ustr(login), tools.ustr(password))) SET date = now() AT TIME ZONE 'UTC'
WHERE login=%s AND password=%s AND active RETURNING id""",
(tools.ustr(login), tools.ustr(password)))
res = cr.fetchone() res = cr.fetchone()
cr.commit() cr.commit()
if res: if res:
@ -726,6 +756,28 @@ class users_view(osv.osv):
return res return res
return super(users_view, self).read(cr, uid, ids, fields, context, load) 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', def fields_view_get(self, cr, uid, view_id=None, view_type='form',
context=None, toolbar=False, submenu=False): context=None, toolbar=False, submenu=False):
# in form views, transform 'groups_id' into reified group fields # in form views, transform 'groups_id' into reified group fields

View File

@ -1,42 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<rng:grammar xmlns:rng="http://relaxng.org/ns/structure/1.0" <rng:grammar xmlns:rng="http://relaxng.org/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> xmlns:a="http://relaxng.org/ns/annotation/1.0"
<!-- Handling of element overloading when inheriting from a base datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
template <!-- Handling of element overloading when inheriting from a base
--> template
<rng:define name="overload"> -->
<rng:optional> <rng:define name="overload">
<!-- <rng:optional>
Alter matched element with content <!--
--> Alter matched element with content
<rng:choice> -->
<rng:attribute name="position"> <rng:choice>
<rng:choice> <rng:attribute name="position">
<!-- Insert content before first child --> <rng:choice>
<rng:value>before</rng:value> <!-- Insert content before first child -->
<!-- Insert content after last child --> <rng:value>before</rng:value>
<rng:value>after</rng:value> <!-- Insert content after last child -->
<!-- Replace all children with content --> <rng:value>after</rng:value>
<rng:value>inside</rng:value> <!-- Replace all children with content -->
<!-- Replace matched element itself with content --> <rng:value>inside</rng:value>
<rng:value>replace</rng:value> <!-- Replace matched element itself with content -->
</rng:choice> <rng:value>replace</rng:value>
</rng:attribute> </rng:choice>
<rng:group> </rng:attribute>
<rng:attribute name="position"> <rng:group>
<!-- Edit element attributes --> <rng:attribute name="position">
<rng:value>attributes</rng:value> <!-- Edit element attributes -->
</rng:attribute> <rng:value>attributes</rng:value>
<rng:oneOrMore> </rng:attribute>
<rng:element name="attribute"> <rng:oneOrMore>
<rng:attribute name="name"><rng:text/></rng:attribute> <rng:element name="attribute">
<rng:text /> <rng:attribute name="name"><rng:text/></rng:attribute>
</rng:element> <rng:text />
</rng:oneOrMore> </rng:element>
</rng:group> </rng:oneOrMore>
</rng:choice> </rng:group>
</rng:optional> </rng:choice>
</rng:define> </rng:optional>
</rng:define>
<rng:define name="access_rights"> <rng:define name="access_rights">
<rng:optional> <rng:optional>
@ -44,29 +45,113 @@
</rng:optional> </rng:optional>
</rng:define> </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:define name="container"> <rng:optional><rng:attribute name="col"/></rng:optional>
<rng:optional><rng:attribute name="col"/></rng:optional> <rng:zeroOrMore>
<rng:zeroOrMore> <rng:choice>
<rng:choice> <rng:ref name="notebook"/>
<rng:ref name="notebook"/> <rng:ref name="field"/>
<rng:ref name="field"/> <rng:ref name="group"/>
<rng:ref name="group"/> <rng:ref name="button"/>
<rng:ref name="button"/> <rng:ref name="label" />
<rng:ref name="hpaned" /> <rng:ref name="separator"/>
<rng:ref name="label" /> <rng:ref name="image"/>
<rng:ref name="separator"/> <rng:ref name="form"/>
<rng:ref name="image"/> <rng:ref name="dashboard"/>
<rng:ref name="form"/> <rng:ref name="filter"/>
<rng:ref name="vpaned"/> <rng:ref name="html"/>
<rng:ref name="filter"/> <rng:element name="newline"><rng:empty/></rng:element>
<rng:ref name="html"/> <rng:element name="properties"><rng:empty/></rng:element>
<rng:element name="newline"><rng:empty/></rng:element> </rng:choice>
<rng:element name="properties"><rng:empty/></rng:element> </rng:zeroOrMore>
</rng:choice> </rng:define>
</rng:zeroOrMore>
</rng:define>
<rng:define name="form"> <rng:define name="form">
<rng:element name="form"> <rng:element name="form">
@ -219,12 +304,11 @@
<rng:ref name="field"/> <rng:ref name="field"/>
<rng:ref name="group"/> <rng:ref name="group"/>
<rng:ref name="button"/> <rng:ref name="button"/>
<rng:ref name="hpaned" />
<rng:ref name="label" /> <rng:ref name="label" />
<rng:ref name="separator"/> <rng:ref name="separator"/>
<rng:ref name="image"/> <rng:ref name="image"/>
<rng:ref name="form"/> <rng:ref name="form"/>
<rng:ref name="vpaned"/> <rng:ref name="dashboard"/>
<rng:ref name="filter"/> <rng:ref name="filter"/>
<rng:ref name="html"/> <rng:ref name="html"/>
<rng:element name="newline"><rng:empty/></rng:element> <rng:element name="newline"><rng:empty/></rng:element>
@ -278,34 +362,6 @@
</rng:element> </rng:element>
</rng:define> </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:define name="any">
<rng:element> <rng:element>
<rng:anyName/> <rng:anyName/>
@ -341,8 +397,7 @@
<rng:ref name="form" /> <rng:ref name="form" />
<rng:ref name="page" /> <rng:ref name="page" />
<rng:ref name="notebook"/> <rng:ref name="notebook"/>
<rng:ref name="hpaned"/> <rng:ref name="dashboard"/>
<rng:ref name="vpaned"/>
<rng:ref name="filter"/> <rng:ref name="filter"/>
<rng:ref name="html"/> <rng:ref name="html"/>
</rng:choice> </rng:choice>

View File

@ -16,7 +16,7 @@
"access_ir_model_access_all","ir_model_access_all","model_ir_model_access",,1,0,0,0 "access_ir_model_access_all","ir_model_access_all","model_ir_model_access",,1,0,0,0
"access_ir_model_data_all","ir_model_data all","model_ir_model_data",,1,0,0,0 "access_ir_model_data_all","ir_model_data all","model_ir_model_data",,1,0,0,0
"access_ir_model_fields_all","ir_model_fields all","model_ir_model_fields",,1,0,0,0 "access_ir_model_fields_all","ir_model_fields all","model_ir_model_fields",,1,0,0,0
"access_ir_module_category_group_user","ir_module_category group_user","model_ir_module_category","group_system",1,0,0,0 "access_ir_module_category_group_user","ir_module_category group_user","model_ir_module_category",,1,0,0,0
"access_ir_module_module_group_user","ir_module_module group_user","model_ir_module_module","group_system",1,1,1,1 "access_ir_module_module_group_user","ir_module_module group_user","model_ir_module_module","group_system",1,1,1,1
"access_ir_module_module_user","ir_module_module user","model_ir_module_module",,1,0,0,0 "access_ir_module_module_user","ir_module_module user","model_ir_module_module",,1,0,0,0
"access_ir_module_module_dependency_group_system","ir_module_module_dependency group_system","model_ir_module_module_dependency","group_system",1,1,1,1 "access_ir_module_module_dependency_group_system","ir_module_module_dependency group_system","model_ir_module_module_dependency","group_system",1,1,1,1

1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
16 access_ir_model_access_all ir_model_access_all model_ir_model_access 1 0 0 0
17 access_ir_model_data_all ir_model_data all model_ir_model_data 1 0 0 0
18 access_ir_model_fields_all ir_model_fields all model_ir_model_fields 1 0 0 0
19 access_ir_module_category_group_user ir_module_category group_user model_ir_module_category group_system 1 0 0 0
20 access_ir_module_module_group_user ir_module_module group_user model_ir_module_module group_system 1 1 1 1
21 access_ir_module_module_user ir_module_module user model_ir_module_module 1 0 0 0
22 access_ir_module_module_dependency_group_system ir_module_module_dependency group_system model_ir_module_module_dependency group_system 1 1 1 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

@ -101,7 +101,7 @@ class Graph(dict):
# NOTE The call to load_information_from_description_file is already # NOTE The call to load_information_from_description_file is already
# done by db.initialize, so it is possible to not do it again here. # done by db.initialize, so it is possible to not do it again here.
info = openerp.modules.module.load_information_from_description_file(module) info = openerp.modules.module.load_information_from_description_file(module)
if info['installable']: if info and info['installable']:
packages.append((module, info)) # TODO directly a dict, like in get_modules_with_version packages.append((module, info)) # TODO directly a dict, like in get_modules_with_version
else: else:
logger.notifyChannel('init', netsvc.LOG_WARNING, 'module %s: not installable, skipped' % (module)) logger.notifyChannel('init', netsvc.LOG_WARNING, 'module %s: not installable, skipped' % (module))

View File

@ -147,6 +147,10 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
migrations = openerp.modules.migration.MigrationManager(cr, graph) migrations = openerp.modules.migration.MigrationManager(cr, graph)
logger.debug('loading %d packages...', len(graph)) logger.debug('loading %d packages...', len(graph))
# get db timestamp
cr.execute("select now()::timestamp")
dt_before_load = cr.fetchone()[0]
# register, instantiate and initialize models for each modules # register, instantiate and initialize models for each modules
for index, package in enumerate(graph): for index, package in enumerate(graph):
module_name = package.name module_name = package.name
@ -214,6 +218,9 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
cr.commit() cr.commit()
# mark new res_log records as read
cr.execute("update res_log set read=True where create_date >= %s", (dt_before_load,))
cr.commit() cr.commit()
return loaded_modules, processed_modules return loaded_modules, processed_modules

View File

@ -69,7 +69,7 @@ and you would be tempted to believe something like this would be possible:
['!', ['=', 'company_id.name', ['&', ..., ...]]] ['!', ['=', 'company_id.name', ['&', ..., ...]]]
That is, a domain could be a valid operand. But this is not the case. A domain 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. domain is not a valid second-level operand.
Unaccent - Accent-insensitive search Unaccent - Accent-insensitive search

View File

@ -131,6 +131,12 @@ class boolean(_column):
_symbol_f = lambda x: x and 'True' or 'False' _symbol_f = lambda x: x and 'True' or 'False'
_symbol_set = (_symbol_c, _symbol_f) _symbol_set = (_symbol_c, _symbol_f)
def __init__(self, string='unknown', required=False, **args):
super(boolean, self).__init__(string=string, required=required, **args)
if required:
warnings.warn("Making a boolean field `required` has no effect, as NULL values are "
"automatically turned into False", PendingDeprecationWarning, stacklevel=2)
class integer(_column): class integer(_column):
_type = 'integer' _type = 'integer'
_symbol_c = '%s' _symbol_c = '%s'
@ -138,6 +144,12 @@ class integer(_column):
_symbol_set = (_symbol_c, _symbol_f) _symbol_set = (_symbol_c, _symbol_f)
_symbol_get = lambda self,x: x or 0 _symbol_get = lambda self,x: x or 0
def __init__(self, string='unknown', required=False, **args):
super(integer, self).__init__(string=string, required=required, **args)
if required:
warnings.warn("Making an integer field `required` has no effect, as NULL values are "
"automatically turned into 0", PendingDeprecationWarning, stacklevel=2)
class integer_big(_column): class integer_big(_column):
"""Experimental 64 bit integer column type, currently unused. """Experimental 64 bit integer column type, currently unused.
@ -155,6 +167,12 @@ class integer_big(_column):
_symbol_set = (_symbol_c, _symbol_f) _symbol_set = (_symbol_c, _symbol_f)
_symbol_get = lambda self,x: x or 0 _symbol_get = lambda self,x: x or 0
def __init__(self, string='unknown', required=False, **args):
super(integer_big, self).__init__(string=string, required=required, **args)
if required:
warnings.warn("Making an integer_big field `required` has no effect, as NULL values are "
"automatically turned into 0", PendingDeprecationWarning, stacklevel=2)
class reference(_column): class reference(_column):
_type = 'reference' _type = 'reference'
_classic_read = False # post-process to handle missing target _classic_read = False # post-process to handle missing target
@ -208,10 +226,13 @@ class float(_column):
_symbol_set = (_symbol_c, _symbol_f) _symbol_set = (_symbol_c, _symbol_f)
_symbol_get = lambda self,x: x or 0.0 _symbol_get = lambda self,x: x or 0.0
def __init__(self, string='unknown', digits=None, digits_compute=None, **args): def __init__(self, string='unknown', digits=None, digits_compute=None, required=False, **args):
_column.__init__(self, string=string, **args) _column.__init__(self, string=string, required=required, **args)
self.digits = digits self.digits = digits
self.digits_compute = digits_compute self.digits_compute = digits_compute
if required:
warnings.warn("Making a float field `required` has no effect, as NULL values are "
"automatically turned into 0.0", PendingDeprecationWarning, stacklevel=2)
def digits_change(self, cr): def digits_change(self, cr):
@ -1037,7 +1058,7 @@ class related(function):
_columns = { _columns = {
'foo_id': fields.many2one('my.foo', 'Foo'), 'foo_id': fields.many2one('my.foo', 'Foo'),
'bar': fields.related('frol', 'foo_id', type='char', string='Frol of Foo'), 'bar': fields.related('foo_id', 'frol', type='char', string='Frol of Foo'),
} }
""" """
@ -1364,6 +1385,9 @@ def field_to_dict(model, cr, user, field, context=None):
res['domain'] = field._domain res['domain'] = field._domain
res['context'] = field._context res['context'] = field._context
if isinstance(field, one2many):
res['relation_field'] = field._fields_id
return res return res

View File

@ -229,11 +229,6 @@ POSTGRES_CONFDELTYPES = {
'SET DEFAULT': 'd', '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): def intersect(la, lb):
return filter(lambda x: x in lb, la) return filter(lambda x: x in lb, la)
@ -664,6 +659,10 @@ class BaseModel(object):
_sequence = None _sequence = None
_description = 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 # Transience
_transient = False # True in a TransientModel _transient = False # True in a TransientModel
_transient_max_count = None _transient_max_count = None
@ -1261,7 +1260,7 @@ class BaseModel(object):
nbrmax = position+1 nbrmax = position+1
done = {} done = {}
for i in range(len(fields)): for i, field in enumerate(fields):
res = False res = False
if i >= len(line): if i >= len(line):
raise Exception(_('Please check that all your lines have %d columns.' raise Exception(_('Please check that all your lines have %d columns.'
@ -1270,11 +1269,11 @@ class BaseModel(object):
if not line[i]: if not line[i]:
continue continue
field = fields[i]
if field[:len(prefix)] <> prefix: if field[:len(prefix)] <> prefix:
if line[i] and skip: if line[i] and skip:
return False return False
continue continue
field_name = field[len(prefix)]
#set the mode for m2o, o2m, m2m : xml_id/id/name #set the mode for m2o, o2m, m2m : xml_id/id/name
if len(field) == len(prefix)+1: if len(field) == len(prefix)+1:
@ -1290,7 +1289,7 @@ class BaseModel(object):
return [(6,0,res)] return [(6,0,res)]
# ID of the record using a XML ID # ID of the record using a XML ID
if field[len(prefix)]=='id': if field_name == 'id':
try: try:
data_res_id = _get_id(model_name, line[i], current_module, 'id') data_res_id = _get_id(model_name, line[i], current_module, 'id')
except ValueError: except ValueError:
@ -1299,16 +1298,17 @@ class BaseModel(object):
continue continue
# ID of the record using a database ID # ID of the record using a database ID
elif field[len(prefix)]=='.id': elif field_name == '.id':
data_res_id = _get_id(model_name, line[i], current_module, '.id') data_res_id = _get_id(model_name, line[i], current_module, '.id')
continue continue
field_type = fields_def[field_name]['type']
# recursive call for getting children and returning [(0,0,{})] or [(1,ID,{})] # recursive call for getting children and returning [(0,0,{})] or [(1,ID,{})]
if fields_def[field[len(prefix)]]['type']=='one2many': if field_type == 'one2many':
if field[len(prefix)] in done: if field_name in done:
continue continue
done[field[len(prefix)]] = True done[field_name] = True
relation = fields_def[field[len(prefix)]]['relation'] relation = fields_def[field_name]['relation']
relation_obj = self.pool.get(relation) relation_obj = self.pool.get(relation)
newfd = relation_obj.fields_get( cr, uid, context=context ) newfd = relation_obj.fields_get( cr, uid, context=context )
pos = position pos = position
@ -1317,7 +1317,7 @@ class BaseModel(object):
first = 0 first = 0
while pos < len(datas): while pos < len(datas):
res2 = process_liness(self, datas, prefix + [field[len(prefix)]], current_module, relation_obj._name, newfd, pos, first) res2 = process_liness(self, datas, prefix + [field_name], current_module, relation_obj._name, newfd, pos, first)
if not res2: if not res2:
break break
(newrow, pos, w2, data_res_id2, xml_id2) = res2 (newrow, pos, w2, data_res_id2, xml_id2) = res2
@ -1333,36 +1333,36 @@ class BaseModel(object):
res.append( (data_res_id2 and 1 or 0, data_res_id2 or 0, newrow) ) res.append( (data_res_id2 and 1 or 0, data_res_id2 or 0, newrow) )
elif field_type == 'many2one':
elif fields_def[field[len(prefix)]]['type']=='many2one': relation = fields_def[field_name]['relation']
relation = fields_def[field[len(prefix)]]['relation']
res = _get_id(relation, line[i], current_module, mode) res = _get_id(relation, line[i], current_module, mode)
elif fields_def[field[len(prefix)]]['type']=='many2many': elif field_type == 'many2many':
relation = fields_def[field[len(prefix)]]['relation'] relation = fields_def[field_name]['relation']
res = many_ids(line[i], relation, current_module, mode) res = many_ids(line[i], relation, current_module, mode)
elif fields_def[field[len(prefix)]]['type'] == 'integer': elif field_type == 'integer':
res = line[i] and int(line[i]) or 0 res = line[i] and int(line[i]) or 0
elif fields_def[field[len(prefix)]]['type'] == 'boolean': elif field_type == 'boolean':
res = line[i].lower() not in ('0', 'false', 'off') res = line[i].lower() not in ('0', 'false', 'off')
elif fields_def[field[len(prefix)]]['type'] == 'float': elif field_type == 'float':
res = line[i] and float(line[i]) or 0.0 res = line[i] and float(line[i]) or 0.0
elif fields_def[field[len(prefix)]]['type'] == 'selection': elif field_type == 'selection':
for key, val in fields_def[field[len(prefix)]]['selection']: for key, val in fields_def[field_name]['selection']:
if tools.ustr(line[i]) in [tools.ustr(key), tools.ustr(val)]: if tools.ustr(line[i]) in [tools.ustr(key), tools.ustr(val)]:
res = key res = key
break break
if line[i] and not res: if line[i] and not res:
logger.notifyChannel("import", netsvc.LOG_WARNING, logging.getLogger('orm.import').warn(
_("key '%s' not found in selection field '%s'") % \ _("key '%s' not found in selection field '%s'"),
(tools.ustr(line[i]), tools.ustr(field[len(prefix)]))) tools.ustr(line[i]), tools.ustr(field_name))
warning += [_("Key/value '%s' not found in selection field '%s'") % (tools.ustr(line[i]), tools.ustr(field[len(prefix)]))] warning.append(_("Key/value '%s' not found in selection field '%s'") % (
tools.ustr(line[i]), tools.ustr(field_name)))
else: else:
res = line[i] res = line[i]
row[field[len(prefix)]] = res or False row[field_name] = res or False
result = (row, nbrmax, warning, data_res_id, xml_id) result = (row, nbrmax, warning, data_res_id, xml_id)
return result return result
@ -1807,7 +1807,7 @@ class BaseModel(object):
""" """
_rec_name = self._rec_name _rec_name = self._rec_name
if _rec_name not in self._columns: 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) view = etree.Element('tree', string=self._description)
etree.SubElement(view, 'field', name=_rec_name) etree.SubElement(view, 'field', name=_rec_name)
@ -2476,6 +2476,24 @@ class BaseModel(object):
del alldata[d['id']][groupby] del alldata[d['id']][groupby]
d.update(alldata[d['id']]) d.update(alldata[d['id']])
del 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 return data
def _inherits_join_add(self, current_table, parent_model_name, query): def _inherits_join_add(self, current_table, parent_model_name, query):
@ -4598,7 +4616,7 @@ class BaseModel(object):
:type default: dictionary :type default: dictionary
:param context: context arguments, like lang, time zone :param context: context arguments, like lang, time zone
:type context: dictionary :type context: dictionary
:return: True :return: id of the newly created record
""" """
if context is None: if context is None:

View File

@ -19,8 +19,21 @@
# #
############################################################################## ##############################################################################
version = '6.1dev' RELEASE_LEVELS = [ALPHA, BETA, RELEASE_CANDIDATE, FINAL] = ['alpha', 'beta', 'candidate', 'final']
major_version = '6.1' 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' description = 'OpenERP Server'
long_desc = '''OpenERP is a complete ERP and CRM. The main features are accounting (analytic long_desc = '''OpenERP is a complete ERP and CRM. The main features are accounting (analytic
and financial), stock management, sales and purchases management, tasks and financial), stock management, sales and purchases management, tasks

View File

@ -26,7 +26,7 @@ from render import render
#.apidoc title: Report Rendering #.apidoc title: Report Rendering
try: try:
import Image from PIL import Image
except ImportError: except ImportError:
import logging import logging
logging.warning('Python Imaging not installed, you can use only .JPG pictures !') logging.warning('Python Imaging not installed, you can use only .JPG pictures !')

View File

@ -610,11 +610,10 @@ class _rml_flowable(object):
for key in txt_n.attrib.keys(): for key in txt_n.attrib.keys():
if key in ('rml_except', 'rml_loop', 'rml_tag'): if key in ('rml_except', 'rml_loop', 'rml_tag'):
del txt_n.attrib[key] del txt_n.attrib[key]
if True or not self._textual(n).isspace(): if not n.tag == 'bullet':
if not n.tag == 'bullet': txt_n.text = utils.xml2str(self._textual(n))
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 ''
txt_n.tail = n.tail and utils._process_text(self, n.tail.replace('\n','')) or '' rc1 += etree.tostring(txt_n)
rc1 += etree.tostring(txt_n)
return rc1 return rc1
def _table(self, node): def _table(self, node):

View File

@ -110,6 +110,14 @@ def _child_get(node, self=None, tagname=None):
yield n yield n
def _process_text(self, txt): 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: if not self.localcontext:
return str2xml(txt) return str2xml(txt)
if not txt: if not txt:
@ -130,10 +138,10 @@ def _process_text(self, txt):
except Exception: except Exception:
pass pass
if isinstance(txt, basestring): if isinstance(txt, basestring):
result += str2xml(txt) result += txt
elif txt and (txt is not None) and (txt is not False): elif txt and (txt is not None) and (txt is not False):
result += ustr(txt) result += ustr(txt)
return result return str2xml(result)
def text_get(node): def text_get(node):
return ''.join([ustr(n.text) for n in node]) return ''.join([ustr(n.text) for n in node])

View File

@ -366,20 +366,15 @@ class db(netsvc.ExportService):
return True return True
class common(netsvc.ExportService): class common(netsvc.ExportService):
_logger = logging.getLogger('web-services')
def __init__(self,name="common"): def __init__(self,name="common"):
netsvc.ExportService.__init__(self,name) netsvc.ExportService.__init__(self,name)
def dispatch(self, method, params): def dispatch(self, method, params):
logger = netsvc.Logger() if method in ['login', 'about', 'timezone_get', 'get_server_environment',
if method == 'login': 'login_message','get_stats', 'check_connectivity',
res = security.login(params[0], params[1], params[2]) 'list_http_services', 'version', 'authenticate']:
msg = res and 'successful login' or 'bad login or password'
# TODO log the client ip address..
logger.notifyChannel("web-service", netsvc.LOG_INFO, "%s from '%s' using database '%s'" % (msg, params[1], params[0].lower()))
return res or False
elif method in ['about', 'timezone_get', 'get_server_environment',
'login_message','get_stats', 'check_connectivity',
'list_http_services', 'version']:
pass pass
elif method in ['get_available_updates', 'get_migration_scripts', 'set_loglevel', 'get_os_time', 'get_sqlcount']: elif method in ['get_available_updates', 'get_migration_scripts', 'set_loglevel', 'get_os_time', 'get_sqlcount']:
passwd = params[0] passwd = params[0]
@ -391,6 +386,18 @@ class common(netsvc.ExportService):
fn = getattr(self, 'exp_'+method) fn = getattr(self, 'exp_'+method)
return fn(*params) return fn(*params)
def exp_login(self, db, login, password):
# TODO: legacy indirection through 'security', should use directly
# the res.users model
res = security.login(db, login, password)
msg = res and 'successful login' or 'bad login or password'
self._logger.info("%s from '%s' using database '%s'", msg, login, db.lower())
return res or False
def exp_authenticate(self, db, login, password, user_agent_env):
res_users = pooler.get_pool(db).get('res.users')
return res_users.authenticate(db, login, password, user_agent_env)
def exp_version(self): def exp_version(self):
return RPC_VERSION_1 return RPC_VERSION_1

View File

@ -102,6 +102,9 @@ class configmanager(object):
group.add_option("-P", "--import-partial", dest="import_partial", my_default='', group.add_option("-P", "--import-partial", dest="import_partial", my_default='',
help="Use this for big data importation, if it crashes you will be able to continue at the current state. Provide a filename to store intermediate importation states.") help="Use this for big data importation, if it crashes you will be able to continue at the current state. Provide a filename to store intermediate importation states.")
group.add_option("--pidfile", dest="pidfile", help="file where the server pid will be stored") group.add_option("--pidfile", dest="pidfile", help="file where the server pid will be stored")
group.add_option("--addons-path", dest="addons_path",
help="specify additional addons paths (separated by commas).",
action="callback", callback=self._check_addons_path, nargs=1, type="string")
group.add_option("--load", dest="server_wide_modules", help="Comma-separated list of server-wide modules default=web") group.add_option("--load", dest="server_wide_modules", help="Comma-separated list of server-wide modules default=web")
parser.add_option_group(group) parser.add_option_group(group)
@ -233,9 +236,6 @@ class configmanager(object):
help="overwrites existing translation terms on updating a module or importing a CSV or a PO file.") help="overwrites existing translation terms on updating a module or importing a CSV or a PO file.")
group.add_option("--modules", dest="translate_modules", group.add_option("--modules", dest="translate_modules",
help="specify modules to export. Use in combination with --i18n-export") help="specify modules to export. Use in combination with --i18n-export")
group.add_option("--addons-path", dest="addons_path",
help="specify additional addons paths (separated by commas).",
action="callback", callback=self._check_addons_path, nargs=1, type="string")
parser.add_option_group(group) parser.add_option_group(group)
security = optparse.OptionGroup(parser, 'Security-related options') security = optparse.OptionGroup(parser, 'Security-related options')

View File

@ -759,8 +759,8 @@ if __name__=='__main__':
g.process(starting_node) g.process(starting_node)
g.scale(radius*3,radius*3, radius, radius) g.scale(radius*3,radius*3, radius, radius)
import Image from PIL import Image
import ImageDraw from PIL import ImageDraw
img = Image.new("RGB", (800, 600), "#ffffff") img = Image.new("RGB", (800, 600), "#ffffff")
draw = ImageDraw.Draw(img) draw = ImageDraw.Draw(img)

View File

@ -363,7 +363,7 @@ class TinyPoFile(object):
"msgid \"\"\n" \ "msgid \"\"\n" \
"msgstr \"\"\n" \ "msgstr \"\"\n" \
'''"Project-Id-Version: %(project)s %(version)s\\n"\n''' \ '''"Project-Id-Version: %(project)s %(version)s\\n"\n''' \
'''"Report-Msgid-Bugs-To: %(bugmail)s\\n"\n''' \ '''"Report-Msgid-Bugs-To: \\n"\n''' \
'''"POT-Creation-Date: %(now)s\\n"\n''' \ '''"POT-Creation-Date: %(now)s\\n"\n''' \
'''"PO-Revision-Date: %(now)s\\n"\n''' \ '''"PO-Revision-Date: %(now)s\\n"\n''' \
'''"Last-Translator: <>\\n"\n''' \ '''"Last-Translator: <>\\n"\n''' \
@ -377,7 +377,6 @@ class TinyPoFile(object):
% { 'project': release.description, % { 'project': release.description,
'version': release.version, 'version': release.version,
'modules': reduce(lambda s, m: s + "#\t* %s\n" % m, modules, ""), 'modules': reduce(lambda s, m: s + "#\t* %s\n" % m, modules, ""),
'bugmail': release.support_email,
'now': datetime.utcnow().strftime('%Y-%m-%d %H:%M')+"+0000", 'now': datetime.utcnow().strftime('%Y-%m-%d %H:%M')+"+0000",
} }
) )

View File

@ -11,6 +11,8 @@ import misc
from config import config from config import config
import yaml_tag import yaml_tag
import yaml import yaml
import re
from lxml import etree
# YAML import needs both safe and unsafe eval, but let's # YAML import needs both safe and unsafe eval, but let's
# default to /safe/. # default to /safe/.
@ -164,9 +166,11 @@ class YamlInterpreter(object):
self.logger.log(logging.ERROR, 'id: %s is to long (max: 64)', id) self.logger.log(logging.ERROR, 'id: %s is to long (max: 64)', id)
def get_id(self, xml_id): def get_id(self, xml_id):
if not xml_id: if xml_id is False:
raise YamlImportException("The xml_id should be a non empty string.") return False
if isinstance(xml_id, types.IntType): #if not xml_id:
# raise YamlImportException("The xml_id should be a non empty string.")
elif isinstance(xml_id, types.IntType):
id = xml_id id = xml_id
elif xml_id in self.id_map: elif xml_id in self.id_map:
id = self.id_map[xml_id] id = self.id_map[xml_id]
@ -308,10 +312,21 @@ class YamlInterpreter(object):
import openerp.osv as osv import openerp.osv as osv
record, fields = node.items()[0] record, fields = node.items()[0]
model = self.get_model(record.model) 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(): if model.is_transient():
record_dict=self.create_osv_memory_record(record, fields) record_dict=self.create_osv_memory_record(record, fields)
else: else:
self.validate_xml_id(record.id) 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': 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) 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 # check if the resource already existed at the last update
@ -322,22 +337,110 @@ class YamlInterpreter(object):
if not self._coerce_bool(record.forcecreate): if not self._coerce_bool(record.forcecreate):
return None 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 = 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, \ 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.module, record_dict, record.id, noupdate=self.isnoupdate(record), mode=self.mode, context=context)
self.id_map[record.id] = int(id) self.id_map[record.id] = int(id)
if config.get('import_partial'): if config.get('import_partial'):
self.cr.commit() 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 = {} record_dict = {}
fields = fields or {} 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(): 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 record_dict[field_name] = field_value
return record_dict return record_dict
def process_ref(self, node, column=None): def process_ref(self, node, column=None):
@ -366,7 +469,7 @@ class YamlInterpreter(object):
def process_eval(self, node): def process_eval(self, node):
return eval(node.expression, self.eval_context) 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 # TODO this should be refactored as something like model.get_field() in bin/osv
if field_name in model._columns: if field_name in model._columns:
column = model._columns[field_name] column = model._columns[field_name]
@ -387,7 +490,7 @@ class YamlInterpreter(object):
value = self.get_id(expression) value = self.get_id(expression)
elif column._type == "one2many": elif column._type == "one2many":
other_model = self.get_model(column._obj) 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": elif column._type == "many2many":
ids = [self.get_id(xml_id) for xml_id in expression] ids = [self.get_id(xml_id) for xml_id in expression]
value = [(6, 0, ids)] value = [(6, 0, ids)]

View File

@ -24,13 +24,14 @@ class Assert(YamlTag):
super(Assert, self).__init__(**kwargs) super(Assert, self).__init__(**kwargs)
class Record(YamlTag): 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.model = model
self.id = id self.id = id
self.view = view
super(Record, self).__init__(**kwargs) super(Record, self).__init__(**kwargs)
def __str__(self): def __str__(self):
return '!record {model: %s, id: %s}:' % (str(self.model,), str(self.id,)) return '!record {model: %s, id: %s}:' % (str(self.model,), str(self.id,))
class Python(YamlTag): class Python(YamlTag):
def __init__(self, model, severity=logging.ERROR, name="", **kwargs): def __init__(self, model, severity=logging.ERROR, name="", **kwargs):
self.model= model self.model= model