[MERGE] Cleaning of the empty dict kwargs (replaced by None).
bzr revid: odo@openerp.com-20111122145540-f6fh85w05jdcx89t
This commit is contained in:
commit
c77095bf0d
32
.bzrignore
32
.bzrignore
|
@ -1,11 +1,23 @@
|
|||
.*
|
||||
*.egg-info
|
||||
*.orig
|
||||
*.pyc
|
||||
.*.swp
|
||||
.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/
|
||||
RE:^bin/
|
||||
RE:^dist/
|
||||
RE:^include/
|
||||
|
||||
RE:^share/
|
||||
RE:^man/
|
||||
RE:^lib/
|
||||
bin/yolk
|
||||
bin/pil*.py
|
||||
.project
|
||||
.pydevproject
|
||||
.settings
|
||||
|
|
|
@ -1,41 +0,0 @@
|
|||
# Slovenian translation for openobject-server
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openobject-server package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openobject-server\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2009-08-24 22:41+0300\n"
|
||||
"PO-Revision-Date: 2011-10-10 06:08+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Slovenian <sl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-11 05:29+0000\n"
|
||||
"X-Generator: Launchpad (build 14123)\n"
|
||||
|
||||
#. Type: string
|
||||
#. Description
|
||||
#: ../openerp-server.templates:1001
|
||||
msgid "Dedicated system account for the Open ERP server:"
|
||||
msgstr "Namenski sistemski račun za ta OpenERP strežnik:"
|
||||
|
||||
#. Type: string
|
||||
#. Description
|
||||
#: ../openerp-server.templates:1001
|
||||
msgid ""
|
||||
"The Open ERP server must use a dedicated account for its operation so that "
|
||||
"the system's security is not compromised by running it with superuser "
|
||||
"privileges."
|
||||
msgstr ""
|
||||
"OpenERP strežnik mora uporabljati namenski račun za njegovo delovanje, da "
|
||||
"varnost strežnika ni ogrožena z zaganjanjem v privelegijih superuser."
|
||||
|
||||
#. Type: string
|
||||
#. Description
|
||||
#: ../openerp-server.templates:1001
|
||||
msgid "Please choose that account's username."
|
||||
msgstr "Prosim, izberite uporabniško ime računa."
|
|
@ -63,7 +63,9 @@ def wait(id):
|
|||
time.sleep(3)
|
||||
return True
|
||||
|
||||
def wizard_run(wizname, fieldvalues={}, endstate='end'):
|
||||
def wizard_run(wizname, fieldvalues=None, endstate='end'):
|
||||
if fieldvalues is None:
|
||||
fieldvalues = {}
|
||||
wiz_id = sock4.create(dbname, uid, 'admin', wizname)
|
||||
state = 'init'
|
||||
datas = {'form':{}}
|
||||
|
|
|
@ -179,9 +179,12 @@ def dumpstacks(sig, frame):
|
|||
def setup_signal_handlers():
|
||||
""" Register the signal handler defined above. """
|
||||
SIGNALS = map(lambda x: getattr(signal, "SIG%s" % x), "INT TERM".split())
|
||||
map(lambda sig: signal.signal(sig, signal_handler), SIGNALS)
|
||||
if os.name == 'posix':
|
||||
map(lambda sig: signal.signal(sig, signal_handler), SIGNALS)
|
||||
signal.signal(signal.SIGQUIT, dumpstacks)
|
||||
elif os.name == 'nt':
|
||||
import win32api
|
||||
win32api.SetConsoleCtrlHandler(lambda sig: signal_handler(sig, None), 1)
|
||||
|
||||
def quit_on_signals():
|
||||
""" Wait for one or two signals then shutdown the server.
|
||||
|
@ -191,9 +194,12 @@ def quit_on_signals():
|
|||
|
||||
"""
|
||||
# Wait for a first signal to be handled. (time.sleep will be interrupted
|
||||
# by the signal handler.)
|
||||
while quit_signals_received == 0:
|
||||
time.sleep(60)
|
||||
# by the signal handler.) The try/except is for the win32 case.
|
||||
try:
|
||||
while quit_signals_received == 0:
|
||||
time.sleep(60)
|
||||
except KeyboardInterrupt, e:
|
||||
pass
|
||||
|
||||
if config['pidfile']:
|
||||
os.unlink(config['pidfile'])
|
||||
|
|
|
@ -1,10 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<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">
|
||||
<field name="name">ir.ui.menu.tree</field>
|
||||
<field name="model">ir.ui.menu</field>
|
||||
|
@ -1584,7 +1580,6 @@
|
|||
|
||||
<record id="res_bank_1" model="res.bank">
|
||||
<field name="name">Reserve</field>
|
||||
<field name="code">RSV</field>
|
||||
</record>
|
||||
|
||||
<record id="CRC" model="res.currency">
|
||||
|
@ -1604,7 +1599,7 @@
|
|||
<field name="name">localhost</field>
|
||||
<field name="smtp_host">localhost</field>
|
||||
<field eval="25" name="smtp_port"/>
|
||||
<field eval="10" name="priority"/>
|
||||
<field eval="10" name="sequence"/>
|
||||
</record>
|
||||
|
||||
<record id="MUR" model="res.currency">
|
||||
|
@ -1671,5 +1666,19 @@
|
|||
<field name="currency_id" ref="HNL"/>
|
||||
<field eval="time.strftime('%Y-01-01')" name="name"/>
|
||||
</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>
|
||||
</openerp>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<openerp>
|
||||
<data>
|
||||
<menuitem icon="terp-administration" id="menu_administration"
|
||||
name="Administration" sequence="50"
|
||||
name="Settings" sequence="50"
|
||||
web_icon="data/administration.png"
|
||||
web_icon_hover="data/administration-hover.png"/>
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:00+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:00+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:01+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
@ -168,7 +168,7 @@ msgstr "ir.ui.view.custom"
|
|||
#. module: base
|
||||
#: model:res.country,name:base.sz
|
||||
msgid "Swaziland"
|
||||
msgstr "Швейцария"
|
||||
msgstr "Свазиленд"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/orm.py:1993
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:01+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:01+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:01+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
"X-Poedit-Language: Czech\n"
|
||||
|
||||
#. module: base
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:01+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -15,8 +15,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:02+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:49+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
@ -6604,8 +6604,8 @@ msgid ""
|
|||
"You can not read this document (%s) ! Be sure your user belongs to one of "
|
||||
"these groups: %s."
|
||||
msgstr ""
|
||||
"Sie haben kein Leserecht für diesen Beleg (%s) ! Stellen Sie sicher, dass "
|
||||
"der Benutzer Mitglied der folgenden Gruppe ist: %s."
|
||||
"Sie haben kein Leserecht für diesen Satz (%s) ! Stellen Sie sicher, dass der "
|
||||
"Benutzer Mitglied der folgenden Gruppe ist: %s."
|
||||
|
||||
#. module: base
|
||||
#: view:res.bank:0
|
||||
|
|
|
@ -12,8 +12,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:02+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:49+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
"X-Poedit-Country: GREECE\n"
|
||||
"X-Poedit-Language: Greek\n"
|
||||
"X-Poedit-SourceCharset: utf-8\n"
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-04 05:01+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:07+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-11 05:29+0000\n"
|
||||
"X-Generator: Launchpad (build 14123)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:49+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:01+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -9,8 +9,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:04+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n"
|
||||
"X-Poedit-Language: Persian\n"
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:07+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:02+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:49+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:02+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:49+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
@ -131,7 +131,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"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 "
|
||||
"exemple : [('color','=',rouge')]"
|
||||
"exemple : [('color','=','rouge')]"
|
||||
|
||||
#. module: base
|
||||
#: field:res.partner,ref:0
|
||||
|
@ -202,7 +202,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:ir.sequence,number_increment:0
|
||||
msgid "Increment Number"
|
||||
msgstr "Incrémenter le Numéro"
|
||||
msgstr "Incrémenter le numéro"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.actions.act_window,name:base.action_res_company_tree
|
||||
|
@ -590,7 +590,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:res.partner,title:0
|
||||
msgid "Partner Form"
|
||||
msgstr "Formulaire des partenaires"
|
||||
msgstr "Forme juridique"
|
||||
|
||||
#. module: base
|
||||
#: 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."
|
||||
msgstr ""
|
||||
"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 "
|
||||
"pour l'instant, vous pourrez toujours en ajouter plus tard."
|
||||
|
||||
|
@ -2177,7 +2177,7 @@ msgstr "terminer"
|
|||
#: selection:ir.ui.view,type:0
|
||||
#: selection:wizard.ir.model.menu.create.line,view_type:0
|
||||
msgid "Calendar"
|
||||
msgstr "Calendrier"
|
||||
msgstr "Créer un calendrier"
|
||||
|
||||
#. module: base
|
||||
#: 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 "
|
||||
"direction)"
|
||||
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
|
||||
#: 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 "
|
||||
"consider the present one as void."
|
||||
msgstr ""
|
||||
"Veuiller noter que les paiements ci dessous sont maintenant dus. Si votre "
|
||||
"paiement a été envoyé, nous recevrons rapidement le détail de votre "
|
||||
"paiements. Si votre paiement est décallé, merci de nous contacter pour en "
|
||||
"discuter. \n"
|
||||
"Si votre paiement a déjà réglé après que ce courriel soit parti, veuillez ne "
|
||||
"pas tenir compte de cet envoi."
|
||||
"Veuillez noter que les paiements ci-dessous sont maintenant dus. \n"
|
||||
"Si votre règlement nous a été envoyé, merci de nous en préciser rapidement "
|
||||
"les modalités.\n"
|
||||
"Nous vous invitons à nous contacter au cas où ce retard serait volontaire, "
|
||||
"et cela afin de nous en communiquer les motifs.\n"
|
||||
"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
|
||||
#: model:res.country,name:base.mx
|
||||
|
@ -7159,7 +7157,7 @@ msgstr "Filtre"
|
|||
#. module: base
|
||||
#: model:res.partner.title,shortcut:base.res_partner_title_madam
|
||||
msgid "Ms."
|
||||
msgstr "Mme"
|
||||
msgstr "Mlle"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.ch
|
||||
|
@ -8317,7 +8315,8 @@ msgstr "Administration"
|
|||
#. module: base
|
||||
#: view:base.module.update:0
|
||||
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
|
||||
#: model:res.country,name:base.ir
|
||||
|
@ -8955,7 +8954,7 @@ msgstr "Relation de l'objet"
|
|||
#: view:ir.rule:0
|
||||
#: view:res.partner:0
|
||||
msgid "General"
|
||||
msgstr "Générale"
|
||||
msgstr "Général"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.uz
|
||||
|
|
|
@ -8,14 +8,14 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2011-09-30 21:09+0000\n"
|
||||
"Last-Translator: Antony Lesuisse (OpenERP) <al@openerp.com>\n"
|
||||
"PO-Revision-Date: 2011-11-13 17:25+0000\n"
|
||||
"Last-Translator: Xosé <Unknown>\n"
|
||||
"Language-Team: Galician <gl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:02+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-14 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 14277)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
@ -1973,7 +1973,7 @@ msgstr "Mensaxes"
|
|||
#: code:addons/base/module/wizard/base_update_translations.py:38
|
||||
#, python-format
|
||||
msgid "Error!"
|
||||
msgstr "¡Erro!"
|
||||
msgstr "Erro!"
|
||||
|
||||
#. module: base
|
||||
#: view:res.lang:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:02+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
"Language: hr\n"
|
||||
|
||||
#. module: base
|
||||
|
@ -720,7 +720,7 @@ msgstr "Radni dani"
|
|||
#. module: base
|
||||
#: selection:ir.module.module,license:0
|
||||
msgid "Other OSI Approved Licence"
|
||||
msgstr ""
|
||||
msgstr "Druga OSI odobrena licenca"
|
||||
|
||||
#. module: base
|
||||
#: 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
|
||||
#, python-format
|
||||
msgid "Error during communication with the publisher warranty server."
|
||||
msgstr ""
|
||||
msgstr "Greška tijekom komunikacije sa serverom nositelja održavanja."
|
||||
|
||||
#. module: base
|
||||
#: help:ir.actions.server,email:0
|
||||
|
@ -2136,6 +2136,8 @@ msgid ""
|
|||
"separated list of valid field names (optionally followed by asc/desc for the "
|
||||
"direction)"
|
||||
msgstr ""
|
||||
"Naveden pogrešan \"poredak\". Ispravan \"poredak\" čini lista naziva polja "
|
||||
"razdvojenih zarezom (opcionalno s asc/desc za smijer)"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_ir_module_module_dependency
|
||||
|
@ -2597,7 +2599,7 @@ msgstr "Naurujski"
|
|||
#: code:addons/base/module/module.py:200
|
||||
#, python-format
|
||||
msgid "The certificate ID of the module must be unique !"
|
||||
msgstr ""
|
||||
msgstr "Oznaka certifikata (ID) mora biti jedinstvena !"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_ir_property
|
||||
|
@ -2674,7 +2676,7 @@ msgstr "EAN13"
|
|||
#: code:addons/orm.py:1622
|
||||
#, python-format
|
||||
msgid "Invalid Architecture!"
|
||||
msgstr ""
|
||||
msgstr "Pogrešna arhitektura!"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.pt
|
||||
|
@ -2686,6 +2688,7 @@ msgstr "Portugal"
|
|||
msgid ""
|
||||
"You cannot have multiple records with the same id for the same module !"
|
||||
msgstr ""
|
||||
"Nije dozvoljeno imatii više zapisa s istom oznakom (ID) u istom modulu."
|
||||
|
||||
#. module: base
|
||||
#: field:ir.module.module,certificate:0
|
||||
|
@ -3952,7 +3955,7 @@ msgstr "Zelenortska Republika (Zelenortski otoci)"
|
|||
#. module: base
|
||||
#: view:base.module.import:0
|
||||
msgid "Select module package to import (.zip file):"
|
||||
msgstr ""
|
||||
msgstr "Odaberite zapakirani modul za učitavanje (.zip datoteka):"
|
||||
|
||||
#. module: base
|
||||
#: 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.wizard,name:0
|
||||
msgid "Serial Key"
|
||||
msgstr ""
|
||||
msgstr "Serijski ključ"
|
||||
|
||||
#. module: base
|
||||
#: selection:res.request,priority:0
|
||||
|
@ -4424,7 +4427,7 @@ msgstr "Mapiranje polja"
|
|||
#. module: base
|
||||
#: view:publisher_warranty.contract:0
|
||||
msgid "Refresh Validation Dates"
|
||||
msgstr ""
|
||||
msgstr "Osvježite datume važenja"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.model:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:03+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:01+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:48+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:03+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:03+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:03+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
@ -8788,9 +8788,9 @@ msgid ""
|
|||
"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."
|
||||
msgstr ""
|
||||
"Seleziona questa casella se il partner è un fornitore. Se non selezionata, "
|
||||
"gli acquirenti non la vedranno durante la definizione di un ordine di "
|
||||
"acquisto."
|
||||
"Seleziona questa casella se il partner è un fornitore. Se non selezionata, i "
|
||||
"responsabili acquisti non vedranno il partner durante la definizione di un "
|
||||
"ordine di acquisto."
|
||||
|
||||
#. module: base
|
||||
#: field:ir.model.fields,relation_field:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:03+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:03+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:50+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:03+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:03+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:04+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:04+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:04+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -7,14 +7,14 @@ msgstr ""
|
|||
"Project-Id-Version: OpenERP Server 5.0.0\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2011-09-30 20:44+0000\n"
|
||||
"Last-Translator: Antony Lesuisse (OpenERP) <al@openerp.com>\n"
|
||||
"PO-Revision-Date: 2011-10-26 15:29+0000\n"
|
||||
"Last-Translator: Michel Vorenhout <Unknown>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:02+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:49+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
@ -8107,9 +8107,9 @@ msgid ""
|
|||
"loading a new language it becomes available as default interface language "
|
||||
"for users and partners."
|
||||
msgstr ""
|
||||
"Deze assitent 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 "
|
||||
"taal voor gebruikers en relaties."
|
||||
"Deze assistent helpt u een nieuwe taal toe te voegen aan uw OpenERP systeem. "
|
||||
"Na het laden van de nieuwe taal komt deze beschikbaar als standaard "
|
||||
"interface taal voor gebruikers en relaties."
|
||||
|
||||
#. module: base
|
||||
#: field:ir.actions.server,subject:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:07+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:04+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:51+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:04+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:04+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:04+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-05 04:44+0000\n"
|
||||
"X-Generator: Launchpad (build 14085)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
@ -211,7 +211,7 @@ msgstr "Struktura podjetja"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Inuktitut / ᐃᓄᒃᑎᑐᑦ"
|
||||
msgstr ""
|
||||
msgstr "Inuktitut / ᐃᓄᒃᑎᑐᑦ"
|
||||
|
||||
#. module: base
|
||||
#: view:res.partner:0
|
||||
|
@ -524,7 +524,7 @@ msgstr "Ime opcijskega modula predmeta na katerem bo to dejanje vidno"
|
|||
#. module: base
|
||||
#: field:workflow.transition,trigger_expr_id:0
|
||||
msgid "Trigger Expression"
|
||||
msgstr ""
|
||||
msgstr "Izraz sprožilnika"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.jo
|
||||
|
@ -956,7 +956,7 @@ msgstr "Spletna stran"
|
|||
#. module: base
|
||||
#: model:res.country,name:base.gs
|
||||
msgid "S. Georgia & S. Sandwich Isls."
|
||||
msgstr ""
|
||||
msgstr "S. Georgia in S. Sandwich otoki"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.actions.url,url:0
|
||||
|
@ -1278,7 +1278,7 @@ msgstr "Računska natančnost"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Sinhalese / සිංහල"
|
||||
msgstr ""
|
||||
msgstr "Sinhalese / සිංහල"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_wizard_ir_model_menu_create_line
|
||||
|
@ -1730,7 +1730,7 @@ msgstr "Poenostavljen"
|
|||
#. module: base
|
||||
#: model:res.country,name:base.st
|
||||
msgid "Saint Tome (Sao Tome) and Principe"
|
||||
msgstr ""
|
||||
msgstr "Saint Tome (Sao Tome) in Principe"
|
||||
|
||||
#. module: base
|
||||
#: selection:res.partner.address,type:0
|
||||
|
@ -2165,7 +2165,7 @@ msgstr "Ime partnerja"
|
|||
#. module: base
|
||||
#: field:workflow.activity,signal_send:0
|
||||
msgid "Signal (subflow.*)"
|
||||
msgstr ""
|
||||
msgstr "Signal (subflow.*)"
|
||||
|
||||
#. module: base
|
||||
#: model:res.partner.category,name:base.res_partner_category_17
|
||||
|
@ -2545,7 +2545,7 @@ msgstr "Ruska federacija"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Urdu / اردو"
|
||||
msgstr ""
|
||||
msgstr "Urdu / اردو"
|
||||
|
||||
#. module: base
|
||||
#: field:res.company,name:0
|
||||
|
@ -3218,7 +3218,7 @@ msgstr "Poročila po meri"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Abkhazian / аҧсуа"
|
||||
msgstr ""
|
||||
msgstr "Copy text \t Abkhazian / аҧсуа"
|
||||
|
||||
#. module: base
|
||||
#: view:base.module.configuration:0
|
||||
|
@ -3865,7 +3865,7 @@ msgstr "Seznam kontrole dostopa"
|
|||
#. module: base
|
||||
#: model:res.country,name:base.um
|
||||
msgid "USA Minor Outlying Islands"
|
||||
msgstr ""
|
||||
msgstr "Manjši oddaljeni otoki ZDA"
|
||||
|
||||
#. module: base
|
||||
#: field:res.partner.bank,state:0
|
||||
|
@ -3894,7 +3894,7 @@ msgstr "Datum inicializacije"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Gujarati / ગુજરાતી"
|
||||
msgstr ""
|
||||
msgstr "Gujarati / ગુજરાતી"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/module/module.py:257
|
||||
|
@ -3946,7 +3946,7 @@ msgstr "Ure"
|
|||
#. module: base
|
||||
#: model:res.country,name:base.gp
|
||||
msgid "Guadeloupe (French)"
|
||||
msgstr ""
|
||||
msgstr "Guadeloupe (francoski)"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/res/res_lang.py:157
|
||||
|
@ -4088,7 +4088,7 @@ msgstr "Natančnost cene"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Latvian / latviešu valoda"
|
||||
msgstr ""
|
||||
msgstr "Latvijsko / latviešu valoda"
|
||||
|
||||
#. module: base
|
||||
#: view:res.config:0
|
||||
|
@ -4099,7 +4099,7 @@ msgstr "vsep"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "French / Français"
|
||||
msgstr ""
|
||||
msgstr "Francosko / Français"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/orm.py:1049
|
||||
|
@ -4193,7 +4193,7 @@ msgstr "Meniji"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Serbian (Latin) / srpski"
|
||||
msgstr ""
|
||||
msgstr "Srbsko (Latin) / srpski"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.il
|
||||
|
@ -4266,7 +4266,7 @@ msgstr "Banke"
|
|||
#. module: base
|
||||
#: view:res.log:0
|
||||
msgid "Unread"
|
||||
msgstr ""
|
||||
msgstr "Neprebrano"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.cron,doall:0
|
||||
|
@ -4393,7 +4393,7 @@ msgstr "Za sorodna polja, tehnično ime ciljnega modela"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Indonesian / Bahasa Indonesia"
|
||||
msgstr ""
|
||||
msgstr "Indonezijski / Bahasa Indonesia"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.ui.view,inherit_id:0
|
||||
|
@ -4847,7 +4847,7 @@ msgstr "Elementi delovnih procesov"
|
|||
#. module: base
|
||||
#: model:res.country,name:base.vc
|
||||
msgid "Saint Vincent & Grenadines"
|
||||
msgstr ""
|
||||
msgstr "Saint Vincent in Grenadine"
|
||||
|
||||
#. module: base
|
||||
#: field:partner.sms.send,password:0
|
||||
|
@ -4886,7 +4886,7 @@ msgstr "RML interna glava"
|
|||
#. module: base
|
||||
#: field:ir.actions.act_window,search_view_id:0
|
||||
msgid "Search View Ref."
|
||||
msgstr ""
|
||||
msgstr "Sklic pogleda iskanja"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.module.module,installed_version:0
|
||||
|
@ -5144,7 +5144,7 @@ msgstr "Nadrejena kategorija"
|
|||
#. module: base
|
||||
#: selection:ir.property,type:0
|
||||
msgid "Integer Big"
|
||||
msgstr ""
|
||||
msgstr "Veliko celo število"
|
||||
|
||||
#. module: base
|
||||
#: selection:res.partner.address,type:0
|
||||
|
@ -5440,7 +5440,7 @@ msgstr "Naprej"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Thai / ภาษาไทย"
|
||||
msgstr ""
|
||||
msgstr "Tajski/ ภาษาไทย"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/orm.py:158
|
||||
|
@ -5523,7 +5523,7 @@ msgstr "Privzeto podjetje"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Spanish (EC) / Español (EC)"
|
||||
msgstr ""
|
||||
msgstr "Špansko (EC) / Español (EC)"
|
||||
|
||||
#. module: base
|
||||
#: help:ir.ui.view,xml_id:0
|
||||
|
@ -5598,7 +5598,7 @@ msgstr "Zaposlovanje"
|
|||
#. module: base
|
||||
#: model:res.country,name:base.re
|
||||
msgid "Reunion (French)"
|
||||
msgstr ""
|
||||
msgstr "Reunion (francoski)"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_model.py:321
|
||||
|
@ -5732,7 +5732,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Flemish (BE) / Vlaams (BE)"
|
||||
msgstr ""
|
||||
msgstr "Flamski (BE) / Vlaams (BE)"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.cron,interval_number:0
|
||||
|
@ -5797,7 +5797,7 @@ msgstr "Bližnjice po meri"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Vietnamese / Tiếng Việt"
|
||||
msgstr ""
|
||||
msgstr "Vietnamski/ Tiếng Việt"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.dz
|
||||
|
@ -5915,7 +5915,7 @@ msgstr "Nevtralno območje"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Hindi / हिंदी"
|
||||
msgstr ""
|
||||
msgstr "Hindujski / हिंदी"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.model:0
|
||||
|
@ -6121,7 +6121,7 @@ msgstr "Osnova"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Telugu / తెలుగు"
|
||||
msgstr ""
|
||||
msgstr "Copy text \t Telugu / తెలుగు"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.lr
|
||||
|
@ -6210,7 +6210,7 @@ msgstr "Kode zaporedja"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Spanish (CO) / Español (CO)"
|
||||
msgstr ""
|
||||
msgstr "Špansko (CO) / Español (CO)"
|
||||
|
||||
#. module: base
|
||||
#: view:base.module.configuration:0
|
||||
|
@ -6250,7 +6250,7 @@ msgstr "res.log"
|
|||
#: help:ir.translation,module:0
|
||||
#: help:ir.translation,xml_id:0
|
||||
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
|
||||
#: view:workflow.activity:0
|
||||
|
@ -6266,7 +6266,7 @@ msgstr "Tedni"
|
|||
#. module: base
|
||||
#: model:res.country,name:base.af
|
||||
msgid "Afghanistan, Islamic State of"
|
||||
msgstr ""
|
||||
msgstr "Afganistan, Muslimanska država"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/module/wizard/base_module_import.py:67
|
||||
|
@ -6324,7 +6324,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Chinese (TW) / 正體字"
|
||||
msgstr ""
|
||||
msgstr "Kitajsko (TW) / 正體字"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.model,name:base.model_res_request
|
||||
|
@ -6382,7 +6382,7 @@ msgstr "Ime storitve"
|
|||
#. module: base
|
||||
#: model:res.country,name:base.pn
|
||||
msgid "Pitcairn Island"
|
||||
msgstr ""
|
||||
msgstr "Otok Pitcairn"
|
||||
|
||||
#. module: base
|
||||
#: view:base.module.upgrade:0
|
||||
|
@ -6585,7 +6585,7 @@ msgstr "Nameščena različica"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Mongolian / монгол"
|
||||
msgstr ""
|
||||
msgstr "Mongolski / монгол"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.mr
|
||||
|
@ -6622,7 +6622,7 @@ msgstr "Krovno podjetje"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Spanish (CR) / Español (CR)"
|
||||
msgstr ""
|
||||
msgstr "Špansko (CR) / Español (CR)"
|
||||
|
||||
#. module: base
|
||||
#: field:res.currency.rate,rate:0
|
||||
|
@ -6652,7 +6652,7 @@ msgstr "Orodja"
|
|||
#. module: base
|
||||
#: model:res.country,name:base.kn
|
||||
msgid "Saint Kitts & Nevis Anguilla"
|
||||
msgstr ""
|
||||
msgstr "Saint Kitts in Nevis Anguilla"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/res/res_currency.py:100
|
||||
|
@ -6717,7 +6717,7 @@ msgstr "Model kateremu ta polja pripadajo"
|
|||
#. module: base
|
||||
#: model:res.country,name:base.mq
|
||||
msgid "Martinique (French)"
|
||||
msgstr ""
|
||||
msgstr "Martinique (francoski)"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.sequence.type:0
|
||||
|
@ -6781,7 +6781,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:ir.ui.menu,child_id:0
|
||||
msgid "Child IDs"
|
||||
msgstr ""
|
||||
msgstr "Podrejeni ID-ji"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/base/ir/ir_actions.py:713
|
||||
|
@ -7231,7 +7231,7 @@ msgstr "Stranka"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Spanish (NI) / Español (NI)"
|
||||
msgstr ""
|
||||
msgstr "Špansko (NI) / Español (NI)"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.module.module,shortdesc:0
|
||||
|
@ -7542,7 +7542,7 @@ msgstr "Stanje"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Galician / Galego"
|
||||
msgstr ""
|
||||
msgstr "Galski / Galego"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.no
|
||||
|
@ -7766,7 +7766,7 @@ msgstr "Nedefinirana metoda 'get'!"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Norwegian Bokmål / Norsk bokmål"
|
||||
msgstr ""
|
||||
msgstr "Norveški Bokmål / Norsk bokmål"
|
||||
|
||||
#. module: base
|
||||
#: help:res.config.users,new_password:0
|
||||
|
@ -7827,7 +7827,7 @@ msgstr "ir.values"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Occitan (FR, post 1500) / Occitan"
|
||||
msgstr ""
|
||||
msgstr "Copy text \t Occitan (FR, post 1500) / Occitan"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.actions.act_window,help:base.open_module_tree
|
||||
|
@ -7856,7 +7856,7 @@ msgstr "Demokratična republika Kongo"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Malayalam / മലയാളം"
|
||||
msgstr ""
|
||||
msgstr "Malezijski / മലയാളം"
|
||||
|
||||
#. module: base
|
||||
#: view:res.request:0
|
||||
|
@ -7928,7 +7928,7 @@ msgstr "Koda države mora biti edinstvena!"
|
|||
#. module: base
|
||||
#: selection:ir.module.module.dependency,state:0
|
||||
msgid "Uninstallable"
|
||||
msgstr ""
|
||||
msgstr "Nenamestljiv"
|
||||
|
||||
#. module: base
|
||||
#: view:res.partner.category:0
|
||||
|
@ -8018,7 +8018,7 @@ msgstr "2.sklic dokument"
|
|||
#. module: base
|
||||
#: field:res.request,ref_doc1:0
|
||||
msgid "Document Ref 1"
|
||||
msgstr ""
|
||||
msgstr "1.sklic dokumenta"
|
||||
|
||||
#. module: base
|
||||
#: 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
|
||||
#: model:res.country,name:base.nc
|
||||
msgid "New Caledonia (French)"
|
||||
msgstr ""
|
||||
msgstr "Nova Caledonia (francoski)"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.cy
|
||||
|
@ -8262,7 +8262,7 @@ msgstr "Gradiniki na uporabnika"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Slovak / Slovenský jazyk"
|
||||
msgstr ""
|
||||
msgstr "Slovaški / Slovenský jazyk"
|
||||
|
||||
#. module: base
|
||||
#: field:base.language.export,state:0
|
||||
|
@ -8570,7 +8570,7 @@ msgstr "Tanzanija"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Danish / Dansk"
|
||||
msgstr ""
|
||||
msgstr "Danski / Dansk"
|
||||
|
||||
#. module: base
|
||||
#: selection:ir.model.fields,select_level:0
|
||||
|
@ -8703,7 +8703,7 @@ msgstr "Dominikanska republika"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Serbian (Cyrillic) / српски"
|
||||
msgstr ""
|
||||
msgstr "Srbski (Cirilica) / српски"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/orm.py:2161
|
||||
|
@ -8860,7 +8860,7 @@ msgstr "Interesi & priložnosti"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Romanian / română"
|
||||
msgstr ""
|
||||
msgstr "Romunski/ română"
|
||||
|
||||
#. module: base
|
||||
#: view:res.log:0
|
||||
|
@ -8985,7 +8985,7 @@ msgstr "Datoteka spletne ikone"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Persian / فارس"
|
||||
msgstr ""
|
||||
msgstr "Perzijski / فارس"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.actions.act_window:0
|
||||
|
@ -9099,7 +9099,7 @@ msgstr "Pogodba založniške garancije"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Bulgarian / български език"
|
||||
msgstr ""
|
||||
msgstr "Bolgarski / български език"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.ui.menu,name:base.menu_aftersale
|
||||
|
@ -9212,7 +9212,7 @@ msgstr "Ni mogoče posodobiti"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Klingon"
|
||||
msgstr ""
|
||||
msgstr "Klingon"
|
||||
|
||||
#. module: base
|
||||
#: model:res.country,name:base.sg
|
||||
|
@ -9295,7 +9295,7 @@ msgstr "%X - primeren čas zastopnja"
|
|||
#. module: base
|
||||
#: selection:base.language.install,lang:0
|
||||
msgid "Spanish (SV) / Español (SV)"
|
||||
msgstr ""
|
||||
msgstr "Španski (SV) / Español (SV)"
|
||||
|
||||
#. module: base
|
||||
#: help:res.lang,grouping:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:00+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:52+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:07+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:55+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
@ -28,7 +28,7 @@ msgstr "Domän"
|
|||
#. module: base
|
||||
#: model:res.country,name:base.sh
|
||||
msgid "Saint Helena"
|
||||
msgstr "St Helena"
|
||||
msgstr "Sankta Helena"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.actions.report.xml:0
|
||||
|
@ -38,7 +38,7 @@ msgstr "Övrig konfiguration"
|
|||
#. module: base
|
||||
#: selection:ir.property,type:0
|
||||
msgid "DateTime"
|
||||
msgstr "DatumTid"
|
||||
msgstr "Datum/Tid"
|
||||
|
||||
#. module: base
|
||||
#: code:addons/fields.py:534
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:53+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -8,14 +8,14 @@ msgstr ""
|
|||
"Project-Id-Version: openobject-addons\n"
|
||||
"Report-Msgid-Bugs-To: support@openerp.com\n"
|
||||
"POT-Creation-Date: 2011-01-11 11:14+0000\n"
|
||||
"PO-Revision-Date: 2011-07-23 16:37+0000\n"
|
||||
"Last-Translator: OpenBMS JSC <Unknown>\n"
|
||||
"PO-Revision-Date: 2011-11-05 03:38+0000\n"
|
||||
"Last-Translator: Vuong Kien Hung <Unknown>\n"
|
||||
"Language-Team: Vietnamese <vi@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-06 05:23+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
@ -9053,7 +9053,7 @@ msgstr "Hình thức tách"
|
|||
#. module: base
|
||||
#: view:base.module.upgrade:0
|
||||
msgid "Note that this operation might take a few minutes."
|
||||
msgstr ""
|
||||
msgstr "Lưu ý hoạt động này có thể mất vài phút"
|
||||
|
||||
#. module: base
|
||||
#: model:ir.ui.menu,name:base.menu_localisation
|
||||
|
@ -9106,7 +9106,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: view:res.lang:0
|
||||
msgid "%j - Day of the year [001,366]."
|
||||
msgstr ""
|
||||
msgstr "%j - Ngày của năm [001,366]"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.actions.server,mobile:0
|
||||
|
@ -9189,7 +9189,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: help:ir.sequence,number_increment:0
|
||||
msgid "The next number of the sequence will be incremented by this number"
|
||||
msgstr ""
|
||||
msgstr "Số tiếp theo của dãy thứ tự sẽ được tăng bằng số này"
|
||||
|
||||
#. module: base
|
||||
#: field:ir.cron,function:0
|
||||
|
@ -9238,7 +9238,7 @@ msgstr "Các đối tác: "
|
|||
#. module: base
|
||||
#: model:res.country,name:base.kp
|
||||
msgid "North Korea"
|
||||
msgstr ""
|
||||
msgstr "Bắc Triều Tiên"
|
||||
|
||||
#. module: base
|
||||
#: selection:ir.actions.server,state:0
|
||||
|
@ -9269,7 +9269,7 @@ msgstr ""
|
|||
#. module: base
|
||||
#: field:ir.exports,name:0
|
||||
msgid "Export Name"
|
||||
msgstr ""
|
||||
msgstr "Tên Trích xuất"
|
||||
|
||||
#. module: base
|
||||
#: help:res.partner.address,type:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:07+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -13,8 +13,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2011-10-01 05:07+0000\n"
|
||||
"X-Generator: Launchpad (build 14071)\n"
|
||||
"X-Launchpad-Export-Date: 2011-11-04 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 14231)\n"
|
||||
|
||||
#. module: base
|
||||
#: view:ir.filters:0
|
||||
|
|
|
@ -2043,7 +2043,9 @@
|
|||
<field name="view_id" ref="ir_mail_server_list" />
|
||||
<field name="search_view_id" ref="view_ir_mail_server_search"/>
|
||||
</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>
|
||||
</openerp>
|
||||
|
|
|
@ -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."),
|
||||
'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.'),
|
||||
'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"),
|
||||
|
||||
|
@ -265,12 +265,13 @@ class act_window(osv.osv):
|
|||
help="Model name of the object to open in the view window"),
|
||||
'src_model': fields.char('Source Object', size=64,
|
||||
help="Optional model name of the objects on which this action should be visible"),
|
||||
'target': fields.selection([('current','Current Window'),('new','New Window')], 'Target Window'),
|
||||
'target': fields.selection([('current','Current Window'),('new','New Window'),('inline','Inline')], 'Target Window'),
|
||||
'view_type': fields.selection((('tree','Tree'),('form','Form')), string='View Type', required=True,
|
||||
help="View type: set to 'tree' for a hierarchical tree view, or 'form' for other views"),
|
||||
'view_mode': fields.char('View Mode', size=250, required=True,
|
||||
help="Comma-separated list of allowed view modes, such as 'form', 'tree', 'calendar', etc. (Default: tree,form)"),
|
||||
'usage': fields.char('Action Usage', size=32),
|
||||
'usage': fields.char('Action Usage', size=32,
|
||||
help="Used to filter menu and home actions from the user form."),
|
||||
'view_ids': fields.one2many('ir.actions.act_window.view', 'act_window_id', 'Views'),
|
||||
'views': fields.function(_views_get_fnc, method=True, type='binary', string='Views',
|
||||
help="This function field computes the ordered list of views that should be enabled " \
|
||||
|
|
|
@ -25,7 +25,7 @@ Store database-specific configuration parameters
|
|||
from osv import osv,fields
|
||||
import uuid
|
||||
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.
|
||||
|
@ -33,6 +33,7 @@ A dictionary holding some configuration parameters to be initialized when the da
|
|||
_default_parameters = {
|
||||
"database.uuid": lambda: str(uuid.uuid1()),
|
||||
"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):
|
||||
|
|
|
@ -34,7 +34,7 @@ class ir_default(osv.osv):
|
|||
'company_id': fields.many2one('res.company','Company')
|
||||
}
|
||||
|
||||
def _get_company_id(self, cr, uid, context={}):
|
||||
def _get_company_id(self, cr, uid, context=None):
|
||||
res = self.pool.get('res.users').read(cr, uid, [uid], ['company_id'], context=context)
|
||||
if res and res[0]['company_id']:
|
||||
return res[0]['company_id'][0]
|
||||
|
|
|
@ -53,7 +53,7 @@ class ir_filters(osv.osv):
|
|||
return False
|
||||
return self.create(cr, uid, vals, context)
|
||||
|
||||
def _auto_init(self, cr, context={}):
|
||||
def _auto_init(self, cr, context=None):
|
||||
super(ir_filters, self)._auto_init(cr, context)
|
||||
# Use unique index to implement unique constraint on the lowercase name (not possible using a constraint)
|
||||
cr.execute("SELECT indexname FROM pg_indexes WHERE indexname = 'ir_filters_name_model_uid_unique_index'")
|
||||
|
|
|
@ -44,8 +44,8 @@ _logger = logging.getLogger('ir.mail_server')
|
|||
|
||||
class MailDeliveryException(osv.except_osv):
|
||||
"""Specific exception subclass for mail delivery errors"""
|
||||
def __init__(self, name, value, exc_type='warning'):
|
||||
super(MailDeliveryException, self).__init__(name, value, exc_type=exc_type)
|
||||
def __init__(self, name, value):
|
||||
super(MailDeliveryException, self).__init__(name, value)
|
||||
|
||||
class WriteToLogger(object):
|
||||
"""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
|
||||
pass
|
||||
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)
|
||||
raise MailDeliveryException(_("Mail delivery failed"), msg)
|
||||
return message_id
|
||||
|
|
|
@ -124,12 +124,13 @@ class ir_model(osv.osv):
|
|||
|
||||
# overridden to allow searching both on model name (model 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:
|
||||
args = []
|
||||
domain = args + ['|', ('model', operator, name), ('name', operator, name)]
|
||||
return super(ir_model, self).name_search(cr, uid, None, domain,
|
||||
operator=operator, limit=limit, context=context)
|
||||
return self.name_get(cr, name_get_uid or uid,
|
||||
super(ir_model, self).search(cr, uid, domain, limit=limit, context=context),
|
||||
context=context)
|
||||
|
||||
|
||||
def unlink(self, cr, user, ids, context=None):
|
||||
|
@ -160,7 +161,7 @@ class ir_model(osv.osv):
|
|||
#pooler.restart_pool(cr.dbname)
|
||||
return res
|
||||
|
||||
def instanciate(self, cr, user, model, context={}):
|
||||
def instanciate(self, cr, user, model, context=None):
|
||||
class x_custom_model(osv.osv):
|
||||
pass
|
||||
x_custom_model._name = model
|
||||
|
@ -671,18 +672,20 @@ class ir_model_data(osv.osv):
|
|||
action_id = False
|
||||
|
||||
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)
|
||||
WHERE imd.module=%%s AND imd.name=%%s''' % model_obj._table,
|
||||
(module, xml_id))
|
||||
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:
|
||||
self._get_id.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,))
|
||||
res_id = False
|
||||
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
|
||||
|
||||
if action_id and res_id:
|
||||
|
|
|
@ -38,7 +38,7 @@ class ir_sequence_type(openerp.osv.osv.osv):
|
|||
('code_unique', 'unique(code)', '`code` must be unique.'),
|
||||
]
|
||||
|
||||
def _code_get(self, cr, uid, context={}):
|
||||
def _code_get(self, cr, uid, context=None):
|
||||
cr.execute('select code, name from ir_sequence_type')
|
||||
return cr.fetchall()
|
||||
|
||||
|
@ -150,9 +150,9 @@ class ir_sequence(openerp.osv.osv.osv):
|
|||
|
||||
for row in rows:
|
||||
# 4 cases: we test the previous impl. against the new one.
|
||||
i = values.get('number_increment', row['number_increment'])
|
||||
n = values.get('number_next', row['number_next'])
|
||||
if row['implementation'] == 'standard':
|
||||
i = values.get('number_increment', row['number_increment'])
|
||||
n = values.get('number_next', row['number_next'])
|
||||
if new_implementation in ('standard', None):
|
||||
self._alter_sequence(cr, row['id'], i, n)
|
||||
else:
|
||||
|
|
|
@ -62,7 +62,7 @@ class ir_translation(osv.osv):
|
|||
'xml_id': fields.char('External ID', size=128, help='Maps to the ir_model_data for which this translation is provided.'),
|
||||
}
|
||||
|
||||
def _auto_init(self, cr, context={}):
|
||||
def _auto_init(self, cr, context=None):
|
||||
super(ir_translation, self)._auto_init(cr, context)
|
||||
|
||||
# FIXME: there is a size limit on btree indexed values so we can't index src column with normal btree.
|
||||
|
|
|
@ -27,22 +27,6 @@ import tools
|
|||
import os
|
||||
import logging
|
||||
|
||||
def _check_xml(self, cr, uid, ids, context=None):
|
||||
logger = logging.getLogger('init')
|
||||
for view in self.browse(cr, uid, ids, context):
|
||||
eview = etree.fromstring(view.arch.encode('utf8'))
|
||||
frng = tools.file_open(os.path.join('base','rng','view.rng'))
|
||||
try:
|
||||
relaxng_doc = etree.parse(frng)
|
||||
relaxng = etree.RelaxNG(relaxng_doc)
|
||||
if not relaxng.validate(eview):
|
||||
for error in relaxng.error_log:
|
||||
logger.error(tools.ustr(error))
|
||||
return False
|
||||
finally:
|
||||
frng.close()
|
||||
return True
|
||||
|
||||
class view_custom(osv.osv):
|
||||
_name = 'ir.ui.view.custom'
|
||||
_order = 'create_date desc' # search(limit=1) should return the last customization
|
||||
|
@ -86,6 +70,23 @@ class view(osv.osv):
|
|||
'priority': 16
|
||||
}
|
||||
_order = "priority,name"
|
||||
|
||||
def _check_xml(self, cr, uid, ids, context=None):
|
||||
logger = logging.getLogger('init')
|
||||
for view in self.browse(cr, uid, ids, context):
|
||||
eview = etree.fromstring(view.arch.encode('utf8'))
|
||||
frng = tools.file_open(os.path.join('base','rng','view.rng'))
|
||||
try:
|
||||
relaxng_doc = etree.parse(frng)
|
||||
relaxng = etree.RelaxNG(relaxng_doc)
|
||||
if not relaxng.validate(eview):
|
||||
for error in relaxng.error_log:
|
||||
logger.error(tools.ustr(error))
|
||||
return False
|
||||
finally:
|
||||
frng.close()
|
||||
return True
|
||||
|
||||
_constraints = [
|
||||
(_check_xml, 'Invalid XML for View Architecture!', ['arch'])
|
||||
]
|
||||
|
@ -109,7 +110,7 @@ class view(osv.osv):
|
|||
(view_id, model))
|
||||
return cr.fetchall()
|
||||
|
||||
def write(self, cr, uid, ids, vals, context={}):
|
||||
def write(self, cr, uid, ids, vals, context=None):
|
||||
if not isinstance(ids, (list, tuple)):
|
||||
ids = [ids]
|
||||
result = super(view, self).write(cr, uid, ids, vals, context)
|
||||
|
@ -122,7 +123,7 @@ class view(osv.osv):
|
|||
|
||||
return result
|
||||
|
||||
def graph_get(self, cr, uid, id, model, node_obj, conn_obj, src_node, des_node,label,scale,context={}):
|
||||
def graph_get(self, cr, uid, id, model, node_obj, conn_obj, src_node, des_node, label, scale, context=None):
|
||||
if not label:
|
||||
label = []
|
||||
nodes=[]
|
||||
|
|
|
@ -210,7 +210,7 @@ class report_graph(report.interface.report_int):
|
|||
else:
|
||||
return (False, False, False)
|
||||
|
||||
def create(self, cr, uid, ids, data, context={}):
|
||||
def create(self, cr, uid, ids, data, context=None):
|
||||
self.obj = report_graph_instance(cr, uid, ids, data)
|
||||
return (self.obj.get(), 'pdf')
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ class workflow(osv.osv):
|
|||
wf_service.clear_cache(cr, user)
|
||||
return super(workflow, self).write(cr, user, ids, vals, context=context)
|
||||
|
||||
def get_active_workitems(self, cr, uid, res, res_id, context={}):
|
||||
def get_active_workitems(self, cr, uid, res, res_id, context=None):
|
||||
|
||||
cr.execute('select * from wkf where osv=%s limit 1',(res,))
|
||||
wkfinfo = cr.dictfetchone()
|
||||
|
@ -212,7 +212,7 @@ class wkf_triggers(osv.osv):
|
|||
'instance_id': fields.many2one('workflow.instance', 'Destination Instance', ondelete="cascade"),
|
||||
'workitem_id': fields.many2one('workflow.workitem', 'Workitem', required=True, ondelete="cascade"),
|
||||
}
|
||||
def _auto_init(self, cr, context={}):
|
||||
def _auto_init(self, cr, context=None):
|
||||
super(wkf_triggers, self)._auto_init(cr, context)
|
||||
cr.execute('SELECT indexname FROM pg_indexes WHERE indexname = \'wkf_triggers_res_id_model_index\'')
|
||||
if not cr.fetchone():
|
||||
|
|
|
@ -402,7 +402,7 @@ class module(osv.osv):
|
|||
}
|
||||
|
||||
# update the list of available packages
|
||||
def update_list(self, cr, uid, context={}):
|
||||
def update_list(self, cr, uid, context=None):
|
||||
res = [0, 0] # [update, add]
|
||||
|
||||
known_mods = self.browse(cr, uid, self.search(cr, uid, []))
|
||||
|
|
|
@ -109,8 +109,8 @@
|
|||
<field name="sequence">14</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.module.category" id="module_category_vertical_applications">
|
||||
<field name="name">Verticalizations</field>
|
||||
<record model="ir.module.category" id="module_category_specific_industry_applications">
|
||||
<field name="name">Specific Industry Applications</field>
|
||||
<field name="sequence">15</field>
|
||||
</record>
|
||||
|
||||
|
|
|
@ -75,7 +75,6 @@
|
|||
<field eval="'ir.module.category'" name="model"/>
|
||||
<field name="name">Categorized Modules</field>
|
||||
<field eval="'ir.actions.act_window,%d'%action_module_open_categ" name="value"/>
|
||||
<field eval="True" name="object"/>
|
||||
</record>
|
||||
|
||||
|
||||
|
|
|
@ -156,7 +156,7 @@ class ir_property(osv.osv):
|
|||
return time.strftime('%Y-%m-%d', time.strptime(record.value_datetime, '%Y-%m-%d %H:%M:%S'))
|
||||
return False
|
||||
|
||||
def get(self, cr, uid, name, model, res_id=False, context={}):
|
||||
def get(self, cr, uid, name, model, res_id=False, context=None):
|
||||
domain = self._get_domain(cr, uid, name, model, context=context)
|
||||
if domain is not None:
|
||||
domain = [('res_id', '=', res_id)] + domain
|
||||
|
|
|
@ -190,7 +190,7 @@ class res_partner_bank(osv.osv):
|
|||
res.append((val.id, result))
|
||||
return res
|
||||
|
||||
def onchange_company_id(self, cr, uid, ids, company_id, context={}):
|
||||
def onchange_company_id(self, cr, uid, ids, company_id, context=None):
|
||||
result = {}
|
||||
if company_id:
|
||||
c = self.pool.get('res.company').browse(cr, uid, company_id, context=context)
|
||||
|
@ -201,7 +201,7 @@ class res_partner_bank(osv.osv):
|
|||
result = r
|
||||
return result
|
||||
|
||||
def onchange_bank_id(self, cr, uid, ids, bank_id, context={}):
|
||||
def onchange_bank_id(self, cr, uid, ids, bank_id, context=None):
|
||||
result = {}
|
||||
if bank_id:
|
||||
bank = self.pool.get('res.bank').browse(cr, uid, bank_id, context=context)
|
||||
|
@ -210,7 +210,7 @@ class res_partner_bank(osv.osv):
|
|||
return {'value': result}
|
||||
|
||||
|
||||
def onchange_partner_id(self, cr, uid, id, partner_id, context={}):
|
||||
def onchange_partner_id(self, cr, uid, id, partner_id, context=None):
|
||||
result = {}
|
||||
if partner_id:
|
||||
part = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
|
||||
|
|
|
@ -148,7 +148,7 @@ class res_company(osv.osv):
|
|||
_sql_constraints = [
|
||||
('name_uniq', 'unique (name)', 'The company name must be unique !')
|
||||
]
|
||||
def on_change_header(self, cr, uid, ids, phone, email, fax, website, vat, reg=False, context={}):
|
||||
def on_change_header(self, cr, uid, ids, phone, email, fax, website, vat, reg=False, context=None):
|
||||
val = []
|
||||
if phone: val.append(_('Phone: ')+phone)
|
||||
if fax: val.append(_('Fax: ')+fax)
|
||||
|
@ -201,7 +201,7 @@ class res_company(osv.osv):
|
|||
ids = self.search(cr, uid, [('parent_id','child_of',[company])])
|
||||
return ids
|
||||
|
||||
def _get_partner_hierarchy(self, cr, uid, company_id, context={}):
|
||||
def _get_partner_hierarchy(self, cr, uid, company_id, context=None):
|
||||
if company_id:
|
||||
parent_id = self.browse(cr, uid, company_id)['parent_id']
|
||||
if parent_id:
|
||||
|
@ -210,7 +210,7 @@ class res_company(osv.osv):
|
|||
return self._get_partner_descendance(cr, uid, company_id, [], context)
|
||||
return []
|
||||
|
||||
def _get_partner_descendance(self, cr, uid, company_id, descendance, context={}):
|
||||
def _get_partner_descendance(self, cr, uid, company_id, descendance, context=None):
|
||||
descendance.append(self.browse(cr, uid, company_id).partner_id.id)
|
||||
for child_id in self._get_company_children(cr, uid, company_id):
|
||||
if child_id != company_id:
|
||||
|
@ -239,7 +239,7 @@ class res_company(osv.osv):
|
|||
self.cache_restart(cr)
|
||||
return super(res_company, self).write(cr, *args, **argv)
|
||||
|
||||
def _get_euro(self, cr, uid, context={}):
|
||||
def _get_euro(self, cr, uid, context=None):
|
||||
try:
|
||||
return self.pool.get('res.currency').search(cr, uid, [])[0]
|
||||
except:
|
||||
|
|
|
@ -70,6 +70,9 @@ class res_config_configurable(osv.osv_memory):
|
|||
res = next.action_launch(context=context)
|
||||
res['nodestroy'] = False
|
||||
return res
|
||||
#if there is no next action and if html is in the context: reload instead of closing
|
||||
if context and 'html' in context:
|
||||
return {'type' : 'ir.actions.reload'}
|
||||
return {'type' : 'ir.actions.act_window_close'}
|
||||
|
||||
def start(self, cr, uid, ids, context=None):
|
||||
|
|
|
@ -109,14 +109,14 @@ class res_currency(osv.osv):
|
|||
def name_search(self, cr, user, name='', args=None, operator='ilike', context=None, limit=100):
|
||||
if not args:
|
||||
args = []
|
||||
if name:
|
||||
ids = self.search(cr, user, ([('name','=',name)] + args), limit=limit, context=context)
|
||||
results = super(res_currency,self)\
|
||||
.name_search(cr, user, name, args, operator=operator, context=context, limit=limit)
|
||||
if not results:
|
||||
name_match = CURRENCY_DISPLAY_PATTERN.match(name)
|
||||
if not ids and name_match:
|
||||
ids = self.search(cr, user, [('name','=', name_match.group(1))] + args, limit=limit, context=context)
|
||||
else:
|
||||
ids = self.search(cr, user, args, limit=limit, context=context)
|
||||
return self.name_get(cr, user, ids, context=context)
|
||||
if name_match:
|
||||
results = super(res_currency,self)\
|
||||
.name_search(cr, user, name_match.group(1), args, operator=operator, context=context, limit=limit)
|
||||
return results
|
||||
|
||||
def name_get(self, cr, uid, ids, context=None):
|
||||
if not ids:
|
||||
|
|
|
@ -125,10 +125,10 @@ class lang(osv.osv):
|
|||
return False
|
||||
return True
|
||||
|
||||
def _get_default_date_format(self,cursor,user,context={}):
|
||||
def _get_default_date_format(self, cursor, user, context=None):
|
||||
return '%m/%d/%Y'
|
||||
|
||||
def _get_default_time_format(self,cursor,user,context={}):
|
||||
def _get_default_time_format(self, cursor, user, context=None):
|
||||
return '%H:%M:%S'
|
||||
|
||||
_columns = {
|
||||
|
|
|
@ -41,7 +41,7 @@ class res_log(osv.osv):
|
|||
_order='create_date desc'
|
||||
|
||||
_index_name = 'res_log_uid_read'
|
||||
def _auto_init(self, cr, context={}):
|
||||
def _auto_init(self, cr, context=None):
|
||||
super(res_log, self)._auto_init(cr, context)
|
||||
cr.execute('SELECT 1 FROM pg_indexes WHERE indexname=%s',
|
||||
(self._index_name,))
|
||||
|
|
|
@ -98,7 +98,7 @@ class res_partner_title(osv.osv):
|
|||
_order = 'name'
|
||||
res_partner_title()
|
||||
|
||||
def _lang_get(self, cr, uid, context={}):
|
||||
def _lang_get(self, cr, uid, context=None):
|
||||
obj = self.pool.get('res.lang')
|
||||
ids = obj.search(cr, uid, [], context=context)
|
||||
res = obj.read(cr, uid, ids, ['code', 'name'], context)
|
||||
|
@ -142,7 +142,9 @@ class res_partner(osv.osv):
|
|||
'color': fields.integer('Color Index'),
|
||||
}
|
||||
|
||||
def _default_category(self, cr, uid, context={}):
|
||||
def _default_category(self, cr, uid, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
if 'category_id' in context and context['category_id']:
|
||||
return [context['category_id']]
|
||||
return []
|
||||
|
@ -150,14 +152,15 @@ class res_partner(osv.osv):
|
|||
_defaults = {
|
||||
'active': lambda *a: 1,
|
||||
'customer': lambda *a: 1,
|
||||
'address': [{'type': 'default'}],
|
||||
'category_id': _default_category,
|
||||
'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'res.partner', context=c),
|
||||
'color': 0,
|
||||
}
|
||||
|
||||
def copy(self, cr, uid, id, default={}, context={}):
|
||||
name = self.read(cr, uid, [id], ['name'])[0]['name']
|
||||
def copy(self, cr, uid, id, default=None, context=None):
|
||||
if default is None:
|
||||
default = {}
|
||||
name = self.read(cr, uid, [id], ['name'], context)[0]['name']
|
||||
default.update({'name': name+ _(' (copy)'), 'events':[]})
|
||||
return super(res_partner, self).copy(cr, uid, id, default, context)
|
||||
|
||||
|
@ -182,10 +185,12 @@ class res_partner(osv.osv):
|
|||
|
||||
# _constraints = [(_check_ean_key, 'Error: Invalid ean code', ['ean13'])]
|
||||
|
||||
def name_get(self, cr, uid, ids, context={}):
|
||||
def name_get(self, cr, uid, ids, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
if not len(ids):
|
||||
return []
|
||||
if context and context.get('show_ref'):
|
||||
if context.get('show_ref'):
|
||||
rec_name = 'ref'
|
||||
else:
|
||||
rec_name = 'name'
|
||||
|
@ -195,14 +200,13 @@ class res_partner(osv.osv):
|
|||
|
||||
def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100):
|
||||
if not args:
|
||||
args=[]
|
||||
if name:
|
||||
args = []
|
||||
# short-circuit ref match when possible
|
||||
if name and operator in ('=', 'ilike', '=ilike', 'like'):
|
||||
ids = self.search(cr, uid, [('ref', '=', name)] + args, limit=limit, context=context)
|
||||
if not ids:
|
||||
ids = self.search(cr, uid, [('name', operator, name)] + args, limit=limit, context=context)
|
||||
else:
|
||||
ids = self.search(cr, uid, args, limit=limit, context=context)
|
||||
return self.name_get(cr, uid, ids, context)
|
||||
if ids:
|
||||
return self.name_get(cr, uid, ids, context)
|
||||
return super(res_partner,self).name_search(cr, uid, name, args, operator=operator, context=context, limit=limit)
|
||||
|
||||
def _email_send(self, cr, uid, ids, email_from, subject, body, on_error=None):
|
||||
partners = self.browse(cr, uid, ids)
|
||||
|
@ -225,7 +229,9 @@ class res_partner(osv.osv):
|
|||
ids = ids[16:]
|
||||
return True
|
||||
|
||||
def address_get(self, cr, uid, ids, adr_pref=['default']):
|
||||
def address_get(self, cr, uid, ids, adr_pref=None):
|
||||
if adr_pref is None:
|
||||
adr_pref = ['default']
|
||||
address_obj = self.pool.get('res.partner.address')
|
||||
address_ids = address_obj.search(cr, uid, [('partner_id', 'in', ids)])
|
||||
address_rec = address_obj.read(cr, uid, address_ids, ['type'])
|
||||
|
@ -309,7 +315,7 @@ class res_partner_address(osv.osv):
|
|||
'company_id': lambda s,cr,uid,c: s.pool.get('res.company')._company_default_get(cr, uid, 'res.partner.address', context=c),
|
||||
}
|
||||
|
||||
def name_get(self, cr, user, ids, context={}):
|
||||
def name_get(self, cr, user, ids, context=None):
|
||||
if context is None:
|
||||
context = {}
|
||||
if not len(ids):
|
||||
|
|
|
@ -105,13 +105,16 @@
|
|||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record model="ir.ui.view" id="contacts_kanban_view">
|
||||
<field name="name">res.partner.address.kanban</field>
|
||||
<field name="model">res.partner.address</field>
|
||||
<field name="type">kanban</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban >
|
||||
<kanban>
|
||||
<field name="color"/>
|
||||
<field name="name"/>
|
||||
<field name="email"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<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">
|
||||
<tr>
|
||||
<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 valign="top" align="left">
|
||||
<div class="oe_kanban_title2">
|
||||
<field name="title"/>
|
||||
<t t-if="record.title.raw_value && record.function.raw_value">,</t>
|
||||
<t t-if="record.title.raw_value and record.function.raw_value">,</t>
|
||||
<field name="function"/>
|
||||
</div>
|
||||
<div class="oe_kanban_title3">
|
||||
<field name="partner_id"/>
|
||||
<t t-if="record.partner_id.raw_value && 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"/>
|
||||
</div>
|
||||
<div class="oe_kanban_title3">
|
||||
<i><field name="email"/>
|
||||
<t t-if="record.phone.raw_value && record.email.raw_value">,</t>
|
||||
<t t-if="record.phone.raw_value and record.email.raw_value">,</t>
|
||||
<field name="phone"/></i>
|
||||
</div>
|
||||
</td>
|
||||
|
@ -157,7 +160,7 @@
|
|||
</div>
|
||||
<div class="oe_kanban_buttons_set oe_kanban_color_border oe_kanban_color_bglight oe_kanban_box_show_onclick">
|
||||
<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 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"/>
|
||||
|
@ -422,7 +425,7 @@
|
|||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- Partner Kanban View -->
|
||||
<record model="ir.ui.view" id="res_partner_kanban_view">
|
||||
<field name="name">RES - PARTNER KANBAN</field>
|
||||
|
@ -430,6 +433,9 @@
|
|||
<field name="type">kanban</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban>
|
||||
<field name="color"/>
|
||||
<field name="name"/>
|
||||
<field name="email"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<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">
|
||||
<table class="oe_kanban_table">
|
||||
<tr>
|
||||
<td valign="top" width="22" align="left">
|
||||
<img src="/web/static/src/img/partner.png"/>
|
||||
<td valign="top" width="64" align="left">
|
||||
<img src="/base/static/src/img/kanban_partner.png" width="64" height="64"/>
|
||||
</td>
|
||||
<td valign="top" align="left">
|
||||
<div class="oe_kanban_title2">
|
||||
<field name="title"/>
|
||||
<t t-if="record.title.raw_value && record.country.raw_value">,</t>
|
||||
<t t-if="record.title.raw_value and record.country.raw_value">,</t>
|
||||
<field name="country"/>
|
||||
</div>
|
||||
<div class="oe_kanban_title3">
|
||||
<field name="subname"/>
|
||||
<t t-if="record.subname.raw_value && record.function.raw_value">,</t>
|
||||
<t t-if="record.subname.raw_value and record.function.raw_value">,</t>
|
||||
<field name="function"/>
|
||||
</div>
|
||||
<div class="oe_kanban_title3">
|
||||
<i><field name="email"/>
|
||||
<t t-if="record.phone.raw_value && record.email.raw_value">,</t>
|
||||
<t t-if="record.phone.raw_value and record.email.raw_value">,</t>
|
||||
<field name="phone"/></i>
|
||||
</div>
|
||||
</td>
|
||||
|
@ -475,7 +481,7 @@
|
|||
</div>
|
||||
<div class="oe_kanban_buttons_set oe_kanban_color_border oe_kanban_color_bglight oe_kanban_box_show_onclick">
|
||||
<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 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"/>
|
||||
|
@ -645,7 +651,6 @@
|
|||
<field eval="'res.partner.category'" name="model"/>
|
||||
<field name="name">Open partners</field>
|
||||
<field eval="'ir.actions.act_window,%d'%action_partner_by_category" name="value"/>
|
||||
<field eval="True" name="object"/>
|
||||
</record>
|
||||
|
||||
<record id="action_partner_category_form" model="ir.actions.act_window">
|
||||
|
|
|
@ -22,9 +22,9 @@
|
|||
from osv import osv, fields
|
||||
import time
|
||||
|
||||
def _links_get(self, cr, uid, context={}):
|
||||
def _links_get(self, cr, uid, context=None):
|
||||
obj = self.pool.get('res.request.link')
|
||||
ids = obj.search(cr, uid, [])
|
||||
ids = obj.search(cr, uid, [], context)
|
||||
res = obj.read(cr, uid, ids, ['object', 'name'], context)
|
||||
return [(r['object'], r['name']) for r in res]
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@ from osv import fields,osv
|
|||
from osv.orm import browse_record
|
||||
from service import security
|
||||
from tools.translate import _
|
||||
import openerp
|
||||
import openerp.exceptions
|
||||
|
||||
class groups(osv.osv):
|
||||
|
@ -205,6 +206,7 @@ class users(osv.osv):
|
|||
return dict.fromkeys(ids, '')
|
||||
|
||||
_columns = {
|
||||
'id': fields.integer('ID'),
|
||||
'name': fields.char('User Name', size=64, required=True, select=True,
|
||||
help="The new user's real name, used for searching"
|
||||
" and most listings"),
|
||||
|
@ -417,14 +419,42 @@ class users(osv.osv):
|
|||
data_id = dataobj._get_id(cr, 1, 'base', 'action_res_users_my')
|
||||
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):
|
||||
if not password:
|
||||
return False
|
||||
cr = pooler.get_db(db).cursor()
|
||||
try:
|
||||
cr.execute('UPDATE res_users SET date=now() WHERE login=%s AND password=%s AND active RETURNING id',
|
||||
(tools.ustr(login), tools.ustr(password)))
|
||||
cr.execute("""UPDATE res_users
|
||||
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()
|
||||
cr.commit()
|
||||
if res:
|
||||
|
@ -703,14 +733,14 @@ class users_view(osv.osv):
|
|||
|
||||
def read(self, cr, uid, ids, fields=None, context=None, load='_classic_read'):
|
||||
if not fields:
|
||||
group_fields, fields = [], self.fields_get(cr, uid, context).keys()
|
||||
group_fields, fields = [], self.fields_get(cr, uid, context=context).keys()
|
||||
else:
|
||||
group_fields, fields = partition(is_field_group, fields)
|
||||
if group_fields:
|
||||
group_obj = self.pool.get('res.groups')
|
||||
fields.append('groups_id')
|
||||
# read the normal fields (and 'groups_id')
|
||||
res = super(users_view, self).read(cr, uid, ids, fields, context, load)
|
||||
res = super(users_view, self).read(cr, uid, ids, fields, context=context, load=load)
|
||||
records = res if isinstance(res, list) else [res]
|
||||
for record in records:
|
||||
# get the field 'groups_id' and insert the group_fields
|
||||
|
@ -722,9 +752,31 @@ class users_view(osv.osv):
|
|||
record[f] = not groups.isdisjoint(get_boolean_groups(f))
|
||||
elif is_selection_groups(f):
|
||||
selected = groups.intersection(get_selection_groups(f))
|
||||
record[f] = group_obj.get_maximal(cr, uid, selected, context)
|
||||
record[f] = group_obj.get_maximal(cr, uid, selected, context=context)
|
||||
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=context, load=load)
|
||||
|
||||
def fields_get(self, cr, user, allfields=None, context=None, write_access=True):
|
||||
res = super(users_view, self).fields_get(cr, user, allfields, context, write_access)
|
||||
apps, others = self.pool.get('res.groups').get_classified(cr, user, context)
|
||||
for app, groups in apps:
|
||||
ids = [g.id for name, g in groups]
|
||||
app_name = name_boolean_groups(ids)
|
||||
sel_name = name_selection_groups(ids)
|
||||
selection = [(g.id, name) for name, g in groups]
|
||||
res[app_name] = {'type': 'boolean', 'string': app}
|
||||
tips = [name + ': ' + (g.comment or '') for name, g in groups]
|
||||
if tips:
|
||||
res[app_name].update(help='\n'.join(tips))
|
||||
res[sel_name] = {'type': 'selection', 'string': 'Group', 'selection': selection}
|
||||
|
||||
for sec, groups in others:
|
||||
for gname, g in groups:
|
||||
name = name_boolean_group(g.id)
|
||||
res[name] = {'type': 'boolean', 'string': gname}
|
||||
if g.comment:
|
||||
res[name].update(help=g.comment)
|
||||
return res
|
||||
|
||||
def fields_view_get(self, cr, uid, view_id=None, view_type='form',
|
||||
context=None, toolbar=False, submenu=False):
|
||||
|
|
|
@ -1,42 +1,43 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rng:grammar xmlns:rng="http://relaxng.org/ns/structure/1.0"
|
||||
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
||||
<!-- Handling of element overloading when inheriting from a base
|
||||
template
|
||||
-->
|
||||
<rng:define name="overload">
|
||||
<rng:optional>
|
||||
<!--
|
||||
Alter matched element with content
|
||||
-->
|
||||
<rng:choice>
|
||||
<rng:attribute name="position">
|
||||
<rng:choice>
|
||||
<!-- Insert content before first child -->
|
||||
<rng:value>before</rng:value>
|
||||
<!-- Insert content after last child -->
|
||||
<rng:value>after</rng:value>
|
||||
<!-- Replace all children with content -->
|
||||
<rng:value>inside</rng:value>
|
||||
<!-- Replace matched element itself with content -->
|
||||
<rng:value>replace</rng:value>
|
||||
</rng:choice>
|
||||
</rng:attribute>
|
||||
<rng:group>
|
||||
<rng:attribute name="position">
|
||||
<!-- Edit element attributes -->
|
||||
<rng:value>attributes</rng:value>
|
||||
</rng:attribute>
|
||||
<rng:oneOrMore>
|
||||
<rng:element name="attribute">
|
||||
<rng:attribute name="name"><rng:text/></rng:attribute>
|
||||
<rng:text />
|
||||
</rng:element>
|
||||
</rng:oneOrMore>
|
||||
</rng:group>
|
||||
</rng:choice>
|
||||
</rng:optional>
|
||||
</rng:define>
|
||||
xmlns:a="http://relaxng.org/ns/annotation/1.0"
|
||||
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
||||
<!-- Handling of element overloading when inheriting from a base
|
||||
template
|
||||
-->
|
||||
<rng:define name="overload">
|
||||
<rng:optional>
|
||||
<!--
|
||||
Alter matched element with content
|
||||
-->
|
||||
<rng:choice>
|
||||
<rng:attribute name="position">
|
||||
<rng:choice>
|
||||
<!-- Insert content before first child -->
|
||||
<rng:value>before</rng:value>
|
||||
<!-- Insert content after last child -->
|
||||
<rng:value>after</rng:value>
|
||||
<!-- Replace all children with content -->
|
||||
<rng:value>inside</rng:value>
|
||||
<!-- Replace matched element itself with content -->
|
||||
<rng:value>replace</rng:value>
|
||||
</rng:choice>
|
||||
</rng:attribute>
|
||||
<rng:group>
|
||||
<rng:attribute name="position">
|
||||
<!-- Edit element attributes -->
|
||||
<rng:value>attributes</rng:value>
|
||||
</rng:attribute>
|
||||
<rng:oneOrMore>
|
||||
<rng:element name="attribute">
|
||||
<rng:attribute name="name"><rng:text/></rng:attribute>
|
||||
<rng:text />
|
||||
</rng:element>
|
||||
</rng:oneOrMore>
|
||||
</rng:group>
|
||||
</rng:choice>
|
||||
</rng:optional>
|
||||
</rng:define>
|
||||
|
||||
<rng:define name="access_rights">
|
||||
<rng:optional>
|
||||
|
@ -44,29 +45,113 @@
|
|||
</rng:optional>
|
||||
</rng:define>
|
||||
|
||||
<rng:define name="dashboard-column">
|
||||
<rng:element name="column">
|
||||
<rng:zeroOrMore>
|
||||
<rng:element name="action">
|
||||
<!-- Action identifier, used by clients to get the
|
||||
actual action from db -->
|
||||
<rng:attribute name="name"/>
|
||||
<!-- Displayed name of dashboard item (above idem) -->
|
||||
<rng:optional><rng:attribute name="string"/></rng:optional>
|
||||
<!-- Merged into the action descriptor's own
|
||||
context before executing the action -->
|
||||
<rng:optional><rng:attribute name="context"/></rng:optional>
|
||||
<!-- Added to the action descriptor's own domain
|
||||
before executing the action -->
|
||||
<rng:optional><rng:attribute name="domain"/></rng:optional>
|
||||
<!-- In case the action is an act_window,
|
||||
overrides its own @views. -->
|
||||
<rng:optional><rng:attribute name="view_mode"/></rng:optional>
|
||||
</rng:element>
|
||||
</rng:zeroOrMore>
|
||||
</rng:element>
|
||||
</rng:define>
|
||||
<rng:define name="dashboard">
|
||||
<rng:choice>
|
||||
<rng:element name="board">
|
||||
<a:documentation>
|
||||
New-style (6.1) dashboard definition
|
||||
</a:documentation>
|
||||
<rng:choice>
|
||||
<rng:group>
|
||||
<a:documentation>
|
||||
Single-column dashboard style
|
||||
</a:documentation>
|
||||
<rng:attribute name="style">
|
||||
<rng:value>1</rng:value>
|
||||
</rng:attribute>
|
||||
<rng:ref name="dashboard-column"/>
|
||||
</rng:group>
|
||||
<rng:group>
|
||||
<a:documentation>
|
||||
Three different 2-column dashboard styles:
|
||||
50|50, 33|66 and 66|33.
|
||||
</a:documentation>
|
||||
<rng:attribute name="style">
|
||||
<rng:choice>
|
||||
<rng:value>1-1</rng:value>
|
||||
<rng:value>1-2</rng:value>
|
||||
<rng:value>2-1</rng:value>
|
||||
</rng:choice>
|
||||
</rng:attribute>
|
||||
<rng:ref name="dashboard-column"/>
|
||||
<rng:ref name="dashboard-column"/>
|
||||
</rng:group>
|
||||
<rng:group>
|
||||
<a:documentation>
|
||||
Three-column dashboard style: 33|33|33
|
||||
</a:documentation>
|
||||
<rng:attribute name="style">
|
||||
<rng:value>1-1-1</rng:value>
|
||||
</rng:attribute>
|
||||
<rng:ref name="dashboard-column"/>
|
||||
<rng:ref name="dashboard-column"/>
|
||||
<rng:ref name="dashboard-column"/>
|
||||
</rng:group>
|
||||
</rng:choice>
|
||||
</rng:element>
|
||||
<!--
|
||||
DEPRECATED old-style dashboards
|
||||
-->
|
||||
<rng:element>
|
||||
<rng:choice>
|
||||
<rng:name>hpaned</rng:name>
|
||||
<rng:name>vpaned</rng:name>
|
||||
</rng:choice>
|
||||
<rng:optional>
|
||||
<rng:attribute name="position">
|
||||
<rng:data type="int"/>
|
||||
</rng:attribute>
|
||||
</rng:optional>
|
||||
<rng:zeroOrMore>
|
||||
<rng:optional><rng:ref name="any"/></rng:optional>
|
||||
<rng:optional><rng:ref name="html"/></rng:optional>
|
||||
</rng:zeroOrMore>
|
||||
</rng:element>
|
||||
</rng:choice>
|
||||
</rng:define>
|
||||
|
||||
|
||||
<rng:define name="container">
|
||||
<rng:optional><rng:attribute name="col"/></rng:optional>
|
||||
<rng:zeroOrMore>
|
||||
<rng:choice>
|
||||
<rng:ref name="notebook"/>
|
||||
<rng:ref name="field"/>
|
||||
<rng:ref name="group"/>
|
||||
<rng:ref name="button"/>
|
||||
<rng:ref name="hpaned" />
|
||||
<rng:ref name="label" />
|
||||
<rng:ref name="separator"/>
|
||||
<rng:ref name="image"/>
|
||||
<rng:ref name="form"/>
|
||||
<rng:ref name="vpaned"/>
|
||||
<rng:ref name="filter"/>
|
||||
<rng:ref name="html"/>
|
||||
<rng:element name="newline"><rng:empty/></rng:element>
|
||||
<rng:element name="properties"><rng:empty/></rng:element>
|
||||
</rng:choice>
|
||||
</rng:zeroOrMore>
|
||||
</rng:define>
|
||||
<rng:define name="container">
|
||||
<rng:optional><rng:attribute name="col"/></rng:optional>
|
||||
<rng:zeroOrMore>
|
||||
<rng:choice>
|
||||
<rng:ref name="notebook"/>
|
||||
<rng:ref name="field"/>
|
||||
<rng:ref name="group"/>
|
||||
<rng:ref name="button"/>
|
||||
<rng:ref name="label" />
|
||||
<rng:ref name="separator"/>
|
||||
<rng:ref name="image"/>
|
||||
<rng:ref name="form"/>
|
||||
<rng:ref name="dashboard"/>
|
||||
<rng:ref name="filter"/>
|
||||
<rng:ref name="html"/>
|
||||
<rng:element name="newline"><rng:empty/></rng:element>
|
||||
<rng:element name="properties"><rng:empty/></rng:element>
|
||||
</rng:choice>
|
||||
</rng:zeroOrMore>
|
||||
</rng:define>
|
||||
|
||||
<rng:define name="form">
|
||||
<rng:element name="form">
|
||||
|
@ -219,12 +304,11 @@
|
|||
<rng:ref name="field"/>
|
||||
<rng:ref name="group"/>
|
||||
<rng:ref name="button"/>
|
||||
<rng:ref name="hpaned" />
|
||||
<rng:ref name="label" />
|
||||
<rng:ref name="separator"/>
|
||||
<rng:ref name="image"/>
|
||||
<rng:ref name="form"/>
|
||||
<rng:ref name="vpaned"/>
|
||||
<rng:ref name="dashboard"/>
|
||||
<rng:ref name="filter"/>
|
||||
<rng:ref name="html"/>
|
||||
<rng:element name="newline"><rng:empty/></rng:element>
|
||||
|
@ -278,34 +362,6 @@
|
|||
</rng:element>
|
||||
</rng:define>
|
||||
|
||||
<rng:define name="hpaned">
|
||||
<rng:element name="hpaned">
|
||||
<rng:optional>
|
||||
<rng:attribute name="position">
|
||||
<rng:data type="int"/>
|
||||
</rng:attribute>
|
||||
</rng:optional>
|
||||
<rng:zeroOrMore>
|
||||
<rng:ref name="any" />
|
||||
<rng:optional><rng:ref name="html"/></rng:optional>
|
||||
</rng:zeroOrMore>
|
||||
</rng:element>
|
||||
</rng:define>
|
||||
|
||||
<rng:define name="vpaned">
|
||||
<rng:element name="vpaned">
|
||||
<rng:optional>
|
||||
<rng:attribute name="position">
|
||||
<rng:data type="int"/>
|
||||
</rng:attribute>
|
||||
</rng:optional>
|
||||
<rng:zeroOrMore>
|
||||
<rng:optional><rng:ref name="any"/></rng:optional>
|
||||
<rng:optional><rng:ref name="html"/></rng:optional>
|
||||
</rng:zeroOrMore>
|
||||
</rng:element>
|
||||
</rng:define>
|
||||
|
||||
<rng:define name="any">
|
||||
<rng:element>
|
||||
<rng:anyName/>
|
||||
|
@ -341,8 +397,7 @@
|
|||
<rng:ref name="form" />
|
||||
<rng:ref name="page" />
|
||||
<rng:ref name="notebook"/>
|
||||
<rng:ref name="hpaned"/>
|
||||
<rng:ref name="vpaned"/>
|
||||
<rng:ref name="dashboard"/>
|
||||
<rng:ref name="filter"/>
|
||||
<rng:ref name="html"/>
|
||||
</rng:choice>
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
"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_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_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
|
||||
|
|
|
Binary file not shown.
After Width: | Height: | Size: 6.8 KiB |
|
@ -235,11 +235,14 @@
|
|||
res_3.sort()
|
||||
res_4 = self.search(cr, uid, [('parent_id', 'not in', [False])]) # get rows with not null parent_id
|
||||
res_4.sort()
|
||||
assert res_0 == partner_ids
|
||||
assert res_1 == partner_ids
|
||||
assert res_2 == with_parent
|
||||
assert res_3 == partner_ids
|
||||
assert res_4 == with_parent
|
||||
res_4b = self.search(cr, uid, [('parent_id', 'not ilike', '')]) # get only rows without parent
|
||||
res_4b.sort()
|
||||
assert res_0 == partner_ids, 'res0: expected %r, got %r' % (partner_ids, res_0)
|
||||
assert res_1 == partner_ids, 'res1: expected %r, got %r' % (partner_ids, res_1)
|
||||
assert res_2 == with_parent, 'res2: expected %r, got %r' % (with_parent, res_2)
|
||||
assert res_3 == partner_ids, 'res3: expected %r, got %r' % (partner_ids, res_3)
|
||||
assert res_4 == with_parent, 'res4: expected %r, got %r' % (with_parent, res_4)
|
||||
assert res_4b == without_parent, 'res4b: expected %r, got %r' % (without_parent, res_4b)
|
||||
# The results of these queries, when combined with queries 0..4 must
|
||||
# give the whole set of ids.
|
||||
res_5 = self.search(cr, uid, [('parent_id', 'like', 'probably_unexisting_name')])
|
||||
|
@ -252,11 +255,15 @@
|
|||
res_8.sort()
|
||||
res_9 = self.search(cr, uid, [('parent_id', 'in', [False])])
|
||||
res_9.sort()
|
||||
assert res_5 == []
|
||||
assert res_6 == []
|
||||
assert res_7 == without_parent
|
||||
assert res_8 == []
|
||||
assert res_9 == without_parent
|
||||
res_9b = self.search(cr, uid, [('parent_id', 'ilike', '')]) # get those with a parent
|
||||
res_9b.sort()
|
||||
|
||||
assert res_5 == [], 'res5: expected %r, got %r' % ([], res_5)
|
||||
assert res_6 == [], 'res6: expected %r, got %r' % ([], res_6)
|
||||
assert res_7 == without_parent, 'res7: expected %r, got %r' % (without_parent, res_7)
|
||||
assert res_8 == [], 'res8: expected %r, got %r' % ([], res_8)
|
||||
assert res_9 == without_parent, 'res9: expected %r, got %r' % (without_parent, res_9)
|
||||
assert res_9b == with_parent, 'res9b: expected %r, got %r' % (with_parent, res_9b)
|
||||
# These queries must return exactly the results than the queries 0..4,
|
||||
# i.e. not ... in ... must be the same as ... not in ... .
|
||||
res_10 = self.search(cr, uid, ['!', ('parent_id', 'like', 'probably_unexisting_name')])
|
||||
|
@ -287,6 +294,17 @@
|
|||
res_17 = self.search(cr, uid, [('website', 'not in', False)])
|
||||
res_17.sort()
|
||||
assert res_17 == with_website
|
||||
|
||||
-
|
||||
Check behavior for required many2one fields
|
||||
-
|
||||
!python {model: res.company }: |
|
||||
company_ids = sorted(self.search(cr, uid, []))
|
||||
# currency_id is required
|
||||
res_101 = sorted(self.search(cr, uid, [('currency_id', 'not ilike', '')])) # get no companies
|
||||
res_102 = sorted(self.search(cr, uid, [('currency_id', 'ilike', '')])) # get all companies
|
||||
assert res_101 == [], 'res_101: expected %r, got %r' % ([], res_101)
|
||||
assert res_102 == company_ids, 'res_102: expected %r, got %r' % (company_ids, res_102)
|
||||
-
|
||||
Property of the query (one2many not in False).
|
||||
-
|
||||
|
|
|
@ -101,7 +101,7 @@ class Graph(dict):
|
|||
# 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.
|
||||
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
|
||||
else:
|
||||
logger.notifyChannel('init', netsvc.LOG_WARNING, 'module %s: not installable, skipped' % (module))
|
||||
|
|
|
@ -147,6 +147,10 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
|
|||
migrations = openerp.modules.migration.MigrationManager(cr, 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
|
||||
for index, package in enumerate(graph):
|
||||
module_name = package.name
|
||||
|
@ -214,6 +218,9 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
|
|||
|
||||
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()
|
||||
|
||||
return loaded_modules, processed_modules
|
||||
|
|
|
@ -69,7 +69,7 @@ and you would be tempted to believe something like this would be possible:
|
|||
['!', ['=', 'company_id.name', ['&', ..., ...]]]
|
||||
|
||||
That is, a domain could be a valid operand. But this is not the case. A domain
|
||||
is really limited to a two-level nature, and can not takes a recursive form: a
|
||||
is really limited to a two-level nature, and can not take a recursive form: a
|
||||
domain is not a valid second-level operand.
|
||||
|
||||
Unaccent - Accent-insensitive search
|
||||
|
@ -593,23 +593,13 @@ class expression(object):
|
|||
if operator in NEGATIVE_TERM_OPERATORS:
|
||||
res_ids.append(False) # TODO this should not be appended if False was in 'right'
|
||||
return (left, 'in', res_ids)
|
||||
|
||||
m2o_str = False
|
||||
if right:
|
||||
if isinstance(right, basestring): # and not isinstance(field, fields.related):
|
||||
m2o_str = True
|
||||
elif isinstance(right, (list, tuple)):
|
||||
m2o_str = True
|
||||
for ele in right:
|
||||
if not isinstance(ele, basestring):
|
||||
m2o_str = False
|
||||
break
|
||||
if m2o_str:
|
||||
self.__exp[i] = _get_expression(field_obj, cr, uid, left, right, operator, context=context)
|
||||
elif right == []:
|
||||
pass # Handled by __leaf_to_sql().
|
||||
else: # right is False
|
||||
pass # Handled by __leaf_to_sql().
|
||||
# resolve string-based m2o criterion into IDs
|
||||
if isinstance(right, basestring) or \
|
||||
right and isinstance(right, (tuple,list)) and all(isinstance(item, basestring) for item in right):
|
||||
self.__exp[i] = _get_expression(field_obj, cr, uid, left, right, operator, context=context)
|
||||
else:
|
||||
# right == [] or right == False and all other cases are handled by __leaf_to_sql()
|
||||
pass
|
||||
|
||||
else:
|
||||
# other field type
|
||||
|
|
|
@ -131,6 +131,12 @@ class boolean(_column):
|
|||
_symbol_f = lambda x: x and 'True' or 'False'
|
||||
_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):
|
||||
_type = 'integer'
|
||||
_symbol_c = '%s'
|
||||
|
@ -138,6 +144,12 @@ class integer(_column):
|
|||
_symbol_set = (_symbol_c, _symbol_f)
|
||||
_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):
|
||||
"""Experimental 64 bit integer column type, currently unused.
|
||||
|
||||
|
@ -155,6 +167,12 @@ class integer_big(_column):
|
|||
_symbol_set = (_symbol_c, _symbol_f)
|
||||
_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):
|
||||
_type = 'reference'
|
||||
_classic_read = False # post-process to handle missing target
|
||||
|
@ -208,10 +226,13 @@ class float(_column):
|
|||
_symbol_set = (_symbol_c, _symbol_f)
|
||||
_symbol_get = lambda self,x: x or 0.0
|
||||
|
||||
def __init__(self, string='unknown', digits=None, digits_compute=None, **args):
|
||||
_column.__init__(self, string=string, **args)
|
||||
def __init__(self, string='unknown', digits=None, digits_compute=None, required=False, **args):
|
||||
_column.__init__(self, string=string, required=required, **args)
|
||||
self.digits = digits
|
||||
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):
|
||||
|
@ -1037,7 +1058,7 @@ class related(function):
|
|||
|
||||
_columns = {
|
||||
'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'),
|
||||
}
|
||||
"""
|
||||
|
||||
|
@ -1145,17 +1166,19 @@ class related(function):
|
|||
def _field_get2(self, cr, uid, obj, context=None):
|
||||
if self._relations:
|
||||
return
|
||||
result = []
|
||||
obj_name = obj._name
|
||||
for i in range(len(self._arg)):
|
||||
f = obj.pool.get(obj_name).fields_get(cr, uid, [self._arg[i]], context=context)[self._arg[i]]
|
||||
self._relations.append({
|
||||
result.append({
|
||||
'object': obj_name,
|
||||
'type': f['type']
|
||||
|
||||
})
|
||||
if f.get('relation',False):
|
||||
obj_name = f['relation']
|
||||
self._relations[-1]['relation'] = f['relation']
|
||||
result[-1]['relation'] = f['relation']
|
||||
self._relations = result
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# Dummy fields
|
||||
|
@ -1364,6 +1387,9 @@ def field_to_dict(model, cr, user, field, context=None):
|
|||
res['domain'] = field._domain
|
||||
res['context'] = field._context
|
||||
|
||||
if isinstance(field, one2many):
|
||||
res['relation_field'] = field._fields_id
|
||||
|
||||
return res
|
||||
|
||||
|
||||
|
|
|
@ -229,11 +229,6 @@ POSTGRES_CONFDELTYPES = {
|
|||
'SET DEFAULT': 'd',
|
||||
}
|
||||
|
||||
def last_day_of_current_month():
|
||||
today = datetime.date.today()
|
||||
last_day = str(calendar.monthrange(today.year, today.month)[1])
|
||||
return time.strftime('%Y-%m-' + last_day)
|
||||
|
||||
def intersect(la, lb):
|
||||
return filter(lambda x: x in lb, la)
|
||||
|
||||
|
@ -664,6 +659,10 @@ class BaseModel(object):
|
|||
_sequence = None
|
||||
_description = None
|
||||
|
||||
# dict of {field:method}, with method returning the name_get of records
|
||||
# to include in the _read_group, if grouped on this field
|
||||
_group_by_full = {}
|
||||
|
||||
# Transience
|
||||
_transient = False # True in a TransientModel
|
||||
_transient_max_count = None
|
||||
|
@ -1175,8 +1174,7 @@ class BaseModel(object):
|
|||
return {'datas': datas}
|
||||
|
||||
def import_data(self, cr, uid, fields, datas, mode='init', current_module='', noupdate=False, context=None, filename=None):
|
||||
"""
|
||||
Import given data in given module
|
||||
"""Import given data in given module
|
||||
|
||||
This method is used when importing data via client menu.
|
||||
|
||||
|
@ -1191,21 +1189,26 @@ class BaseModel(object):
|
|||
order_line/product_uom_qty,
|
||||
order_line/product_uom/id (=xml_id)
|
||||
|
||||
This method returns a 4-tuple with the following structure:
|
||||
This method returns a 4-tuple with the following structure::
|
||||
|
||||
* The first item is a return code, it returns either ``-1`` in case o
|
||||
(return_code, errored_resource, error_message, unused)
|
||||
|
||||
:param cr: database cursor
|
||||
:param uid: current user id
|
||||
:param fields: list of fields
|
||||
* The first item is a return code, it is ``-1`` in case of
|
||||
import error, or the last imported row number in case of success
|
||||
* The second item contains the record data dict that failed to import
|
||||
in case of error, otherwise it's 0
|
||||
* The third item contains an error message string in case of error,
|
||||
otherwise it's 0
|
||||
* The last item is currently unused, with no specific semantics
|
||||
|
||||
:param fields: list of fields to import
|
||||
:param data: data to import
|
||||
:param mode: 'init' or 'update' for record creation
|
||||
:param current_module: module name
|
||||
:param noupdate: flag for record creation
|
||||
:param context: context arguments, like lang, time zone,
|
||||
:param filename: optional file to store partial import state for recovery
|
||||
:returns: 4-tuple of a return code, an errored resource, an error message and ???
|
||||
:rtype: (int, dict|0, str|0, ''|0)
|
||||
:returns: 4-tuple in the form (return_code, errored_resource, error_message, unused)
|
||||
:rtype: (int, dict or 0, str or 0, str or 0)
|
||||
"""
|
||||
if not context:
|
||||
context = {}
|
||||
|
@ -1257,7 +1260,7 @@ class BaseModel(object):
|
|||
nbrmax = position+1
|
||||
|
||||
done = {}
|
||||
for i in range(len(fields)):
|
||||
for i, field in enumerate(fields):
|
||||
res = False
|
||||
if i >= len(line):
|
||||
raise Exception(_('Please check that all your lines have %d columns.'
|
||||
|
@ -1266,11 +1269,11 @@ class BaseModel(object):
|
|||
if not line[i]:
|
||||
continue
|
||||
|
||||
field = fields[i]
|
||||
if field[:len(prefix)] <> prefix:
|
||||
if line[i] and skip:
|
||||
return False
|
||||
continue
|
||||
field_name = field[len(prefix)]
|
||||
|
||||
#set the mode for m2o, o2m, m2m : xml_id/id/name
|
||||
if len(field) == len(prefix)+1:
|
||||
|
@ -1286,7 +1289,7 @@ class BaseModel(object):
|
|||
return [(6,0,res)]
|
||||
|
||||
# ID of the record using a XML ID
|
||||
if field[len(prefix)]=='id':
|
||||
if field_name == 'id':
|
||||
try:
|
||||
data_res_id = _get_id(model_name, line[i], current_module, 'id')
|
||||
except ValueError:
|
||||
|
@ -1295,16 +1298,17 @@ class BaseModel(object):
|
|||
continue
|
||||
|
||||
# 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')
|
||||
continue
|
||||
|
||||
field_type = fields_def[field_name]['type']
|
||||
# recursive call for getting children and returning [(0,0,{})] or [(1,ID,{})]
|
||||
if fields_def[field[len(prefix)]]['type']=='one2many':
|
||||
if field[len(prefix)] in done:
|
||||
if field_type == 'one2many':
|
||||
if field_name in done:
|
||||
continue
|
||||
done[field[len(prefix)]] = True
|
||||
relation = fields_def[field[len(prefix)]]['relation']
|
||||
done[field_name] = True
|
||||
relation = fields_def[field_name]['relation']
|
||||
relation_obj = self.pool.get(relation)
|
||||
newfd = relation_obj.fields_get( cr, uid, context=context )
|
||||
pos = position
|
||||
|
@ -1313,7 +1317,7 @@ class BaseModel(object):
|
|||
|
||||
first = 0
|
||||
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:
|
||||
break
|
||||
(newrow, pos, w2, data_res_id2, xml_id2) = res2
|
||||
|
@ -1329,36 +1333,36 @@ class BaseModel(object):
|
|||
|
||||
res.append( (data_res_id2 and 1 or 0, data_res_id2 or 0, newrow) )
|
||||
|
||||
|
||||
elif fields_def[field[len(prefix)]]['type']=='many2one':
|
||||
relation = fields_def[field[len(prefix)]]['relation']
|
||||
elif field_type == 'many2one':
|
||||
relation = fields_def[field_name]['relation']
|
||||
res = _get_id(relation, line[i], current_module, mode)
|
||||
|
||||
elif fields_def[field[len(prefix)]]['type']=='many2many':
|
||||
relation = fields_def[field[len(prefix)]]['relation']
|
||||
elif field_type == 'many2many':
|
||||
relation = fields_def[field_name]['relation']
|
||||
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
|
||||
elif fields_def[field[len(prefix)]]['type'] == 'boolean':
|
||||
elif field_type == 'boolean':
|
||||
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
|
||||
elif fields_def[field[len(prefix)]]['type'] == 'selection':
|
||||
for key, val in fields_def[field[len(prefix)]]['selection']:
|
||||
elif field_type == 'selection':
|
||||
for key, val in fields_def[field_name]['selection']:
|
||||
if tools.ustr(line[i]) in [tools.ustr(key), tools.ustr(val)]:
|
||||
res = key
|
||||
break
|
||||
if line[i] and not res:
|
||||
logger.notifyChannel("import", netsvc.LOG_WARNING,
|
||||
_("key '%s' not found in selection field '%s'") % \
|
||||
(tools.ustr(line[i]), tools.ustr(field[len(prefix)])))
|
||||
warning += [_("Key/value '%s' not found in selection field '%s'") % (tools.ustr(line[i]), tools.ustr(field[len(prefix)]))]
|
||||
logging.getLogger('orm.import').warn(
|
||||
_("key '%s' not found in selection field '%s'"),
|
||||
tools.ustr(line[i]), tools.ustr(field_name))
|
||||
warning.append(_("Key/value '%s' not found in selection field '%s'") % (
|
||||
tools.ustr(line[i]), tools.ustr(field_name)))
|
||||
|
||||
else:
|
||||
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)
|
||||
return result
|
||||
|
@ -1803,7 +1807,7 @@ class BaseModel(object):
|
|||
"""
|
||||
_rec_name = self._rec_name
|
||||
if _rec_name not in self._columns:
|
||||
_rec_name = self._columns.keys()[0]
|
||||
_rec_name = self._columns.keys()[0] if len(self._columns.keys()) > 0 else "id"
|
||||
|
||||
view = etree.Element('tree', string=self._description)
|
||||
etree.SubElement(view, 'field', name=_rec_name)
|
||||
|
@ -2265,7 +2269,8 @@ class BaseModel(object):
|
|||
if context is None:
|
||||
context = {}
|
||||
args = args[:]
|
||||
if name:
|
||||
# optimize out the default criterion of ``ilike ''`` that matches everything
|
||||
if not (name == '' and operator == 'ilike'):
|
||||
args += [(self._rec_name, operator, name)]
|
||||
access_rights_uid = name_get_uid or user
|
||||
ids = self._search(cr, user, args, limit=limit, context=context, access_rights_uid=access_rights_uid)
|
||||
|
@ -2353,6 +2358,46 @@ class BaseModel(object):
|
|||
except AttributeError:
|
||||
pass
|
||||
|
||||
|
||||
def _read_group_fill_results(self, cr, uid, domain, groupby, groupby_list, aggregated_fields, read_group_result, context=None):
|
||||
"""Helper method for filling in read_group results for all missing values of
|
||||
the field being grouped by, in case self._group_by_full provides methods
|
||||
to give the list of all the values that should be displayed."""
|
||||
# self._group_by_full should map groupable fields to a method that returns
|
||||
# a list of all aggregated values that we want to display for this field
|
||||
# This is useful to implement kanban views for instance, where all columns
|
||||
# should be displayed even if they don't contain any record.
|
||||
# let "groups" represent the various possible values for the group_by field
|
||||
present_group_ids = [x[groupby][0] for x in read_group_result if x[groupby]]
|
||||
# grab the list of all groups that should be displayed, including all present groups
|
||||
all_groups = self._group_by_full[groupby](self, cr, uid, present_group_ids, domain,
|
||||
context=context)
|
||||
result_template = dict.fromkeys(aggregated_fields, False)
|
||||
result_template.update({'__context':{'group_by':groupby_list[1:]}, groupby + '_count':0})
|
||||
result = []
|
||||
def append_filler_line(right_side):
|
||||
line = dict(result_template)
|
||||
line.update({
|
||||
groupby: right_side,
|
||||
'__domain': [(groupby, '=', right_side[0])] + domain,
|
||||
})
|
||||
result.append(line)
|
||||
#as both lists use the same ordering, we can merge in one pass
|
||||
while read_group_result or all_groups:
|
||||
left_side = read_group_result[0] if read_group_result else None
|
||||
right_side = all_groups[0] if all_groups else None
|
||||
if left_side is None:
|
||||
append_filler_line(all_groups.pop(0))
|
||||
elif right_side is None:
|
||||
result.append(read_group_result.pop(0))
|
||||
elif left_side[groupby][0] == right_side[0]:
|
||||
result.append(read_group_result.pop(0))
|
||||
all_groups.pop(0)
|
||||
else:
|
||||
result.append(read_group_result.pop(0)) # should be False
|
||||
append_filler_line(all_groups.pop(0))
|
||||
return result
|
||||
|
||||
def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False):
|
||||
"""
|
||||
Get the list of records in list view grouped by the given ``groupby`` fields
|
||||
|
@ -2402,7 +2447,6 @@ class BaseModel(object):
|
|||
|
||||
# TODO it seems fields_get can be replaced by _all_columns (no need for translation)
|
||||
fget = self.fields_get(cr, uid, fields)
|
||||
float_int_fields = filter(lambda x: fget[x]['type'] in ('float', 'integer'), fields)
|
||||
flist = ''
|
||||
group_count = group_by = groupby
|
||||
if groupby:
|
||||
|
@ -2418,17 +2462,17 @@ class BaseModel(object):
|
|||
raise except_orm(_('Invalid group_by'),
|
||||
_('Invalid group_by specification: "%s".\nA group_by specification must be a list of valid fields.')%(groupby,))
|
||||
|
||||
|
||||
fields_pre = [f for f in float_int_fields if
|
||||
f == self.CONCURRENCY_CHECK_FIELD
|
||||
or (f in self._columns and getattr(self._columns[f], '_classic_write'))]
|
||||
for f in fields_pre:
|
||||
if f not in ['id', 'sequence']:
|
||||
group_operator = fget[f].get('group_operator', 'sum')
|
||||
if flist:
|
||||
flist += ', '
|
||||
qualified_field = '"%s"."%s"' % (self._table, f)
|
||||
flist += "%s(%s) AS %s" % (group_operator, qualified_field, f)
|
||||
aggregated_fields = [
|
||||
f for f in fields
|
||||
if f not in ('id', 'sequence')
|
||||
if fget[f]['type'] in ('integer', 'float')
|
||||
if (f in self._columns and getattr(self._columns[f], '_classic_write'))]
|
||||
for f in aggregated_fields:
|
||||
group_operator = fget[f].get('group_operator', 'sum')
|
||||
if flist:
|
||||
flist += ', '
|
||||
qualified_field = '"%s"."%s"' % (self._table, f)
|
||||
flist += "%s(%s) AS %s" % (group_operator, qualified_field, f)
|
||||
|
||||
gb = groupby and (' GROUP BY ' + qualified_groupby_field) or ''
|
||||
|
||||
|
@ -2471,6 +2515,11 @@ class BaseModel(object):
|
|||
del alldata[d['id']][groupby]
|
||||
d.update(alldata[d['id']])
|
||||
del d['id']
|
||||
|
||||
if groupby and groupby in self._group_by_full:
|
||||
data = self._read_group_fill_results(cr, uid, domain, groupby, groupby_list,
|
||||
aggregated_fields, data, context=context)
|
||||
|
||||
return data
|
||||
|
||||
def _inherits_join_add(self, current_table, parent_model_name, query):
|
||||
|
@ -3802,6 +3851,7 @@ class BaseModel(object):
|
|||
for id in ids:
|
||||
result += self._columns[field].set(cr, self, id, field, vals[field], user, context=rel_context) or []
|
||||
|
||||
unknown_fields = updend[:]
|
||||
for table in self._inherits:
|
||||
col = self._inherits[table]
|
||||
nids = []
|
||||
|
@ -3814,9 +3864,14 @@ class BaseModel(object):
|
|||
for val in updend:
|
||||
if self._inherit_fields[val][0] == table:
|
||||
v[val] = vals[val]
|
||||
unknown_fields.remove(val)
|
||||
if v:
|
||||
self.pool.get(table).write(cr, user, nids, v, context)
|
||||
|
||||
if unknown_fields:
|
||||
self.__logger.warn(
|
||||
'No such field(s) in model %s: %s.',
|
||||
self._name, ', '.join(unknown_fields))
|
||||
self._validate(cr, user, ids, context)
|
||||
|
||||
# TODO: use _order to set dest at the right position and not first node of parent
|
||||
|
@ -3939,6 +3994,7 @@ class BaseModel(object):
|
|||
tocreate[v] = {'id': vals[self._inherits[v]]}
|
||||
(upd0, upd1, upd2) = ('', '', [])
|
||||
upd_todo = []
|
||||
unknown_fields = []
|
||||
for v in vals.keys():
|
||||
if v in self._inherit_fields:
|
||||
(table, col, col_detail, original_parent) = self._inherit_fields[v]
|
||||
|
@ -3947,6 +4003,11 @@ class BaseModel(object):
|
|||
else:
|
||||
if (v not in self._inherit_fields) and (v not in self._columns):
|
||||
del vals[v]
|
||||
unknown_fields.append(v)
|
||||
if unknown_fields:
|
||||
self.__logger.warn(
|
||||
'No such field(s) in model %s: %s.',
|
||||
self._name, ', '.join(unknown_fields))
|
||||
|
||||
# Try-except added to filter the creation of those records whose filds are readonly.
|
||||
# Example : any dashboard which has all the fields readonly.(due to Views(database views))
|
||||
|
@ -4593,7 +4654,7 @@ class BaseModel(object):
|
|||
:type default: dictionary
|
||||
:param context: context arguments, like lang, time zone
|
||||
:type context: dictionary
|
||||
:return: True
|
||||
:return: id of the newly created record
|
||||
|
||||
"""
|
||||
if context is None:
|
||||
|
|
|
@ -19,8 +19,21 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
version = '6.1dev'
|
||||
major_version = '6.1'
|
||||
RELEASE_LEVELS = [ALPHA, BETA, RELEASE_CANDIDATE, FINAL] = ['alpha', 'beta', 'candidate', 'final']
|
||||
RELEASE_LEVELS_DISPLAY = {ALPHA: ALPHA,
|
||||
BETA: BETA,
|
||||
RELEASE_CANDIDATE: 'rc',
|
||||
FINAL: ''}
|
||||
|
||||
# version_info format: (MAJOR, MINOR, MICRO, RELEASE_LEVEL, SERIAL)
|
||||
# inspired by Python's own sys.version_info, in order to be
|
||||
# properly comparable using normal operarors, for example:
|
||||
# (6,1,0,'beta',0) < (6,1,0,'candidate',1) < (6,1,0,'candidate',2)
|
||||
# (6,1,0,'candidate',2) < (6,1,0,'final',0) < (6,1,2,'final',0)
|
||||
version_info = (6,1,0,BETA,0)
|
||||
version = '.'.join(map(str,version_info[:2])) + RELEASE_LEVELS_DISPLAY[version_info[3]] + str(version_info[4] or '')
|
||||
major_version = '.'.join(map(str,version_info[:2]))
|
||||
|
||||
description = 'OpenERP Server'
|
||||
long_desc = '''OpenERP is a complete ERP and CRM. The main features are accounting (analytic
|
||||
and financial), stock management, sales and purchases management, tasks
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue