[MERGE] Cleaning of the empty dict kwargs (replaced by None).

bzr revid: odo@openerp.com-20111122145540-f6fh85w05jdcx89t
This commit is contained in:
Vo Minh Thu 2011-11-22 15:55:40 +01:00 committed by Olivier Dony
commit c77095bf0d
113 changed files with 2564 additions and 2023 deletions

View File

@ -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

41
debian/po/sl.po vendored
View File

@ -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."

View File

@ -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':{}}

View File

@ -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'])

View File

@ -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>

View File

@ -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"/>

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -117,7 +117,7 @@ class report_xml(osv.osv):
'multi': fields.boolean('On multiple doc.', help="If set to true, the action will not be displayed on the right toolbar of a form view."),
'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 " \

View File

@ -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):

View File

@ -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]

View File

@ -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'")

View File

@ -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

View File

@ -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:

View File

@ -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:

View File

@ -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.

View File

@ -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=[]

View File

@ -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')

View File

@ -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():

View File

@ -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, []))

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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)

View File

@ -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:

View File

@ -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):

View File

@ -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:

View File

@ -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 = {

View File

@ -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,))

View File

@ -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):

View File

@ -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 &amp;&amp; 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 &amp;&amp; record.country_id.raw_value">,</t>
<t t-if="record.partner_id.raw_value and record.country_id.raw_value">,</t>
<field name="country_id"/>
</div>
<div class="oe_kanban_title3">
<i><field name="email"/>
<t t-if="record.phone.raw_value &amp;&amp; record.email.raw_value">,</t>
<t t-if="record.phone.raw_value and record.email.raw_value">,</t>
<field name="phone"/></i>
</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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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">

View File

@ -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]

View File

@ -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):

View File

@ -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>

View File

@ -16,7 +16,7 @@
"access_ir_model_access_all","ir_model_access_all","model_ir_model_access",,1,0,0,0
"access_ir_model_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

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

@ -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).
-

View File

@ -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))

View File

@ -147,6 +147,10 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=
migrations = openerp.modules.migration.MigrationManager(cr, graph)
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

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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