[MERGE]7.0

bzr revid: vme@tinyerp.com-20130220131956-hrnbak55i9qdpe4y
This commit is contained in:
Vidhin Mehta 2013-02-20 18:49:56 +05:30
commit ca912e0975
39 changed files with 3569 additions and 711 deletions

View File

@ -86,5 +86,4 @@ This module provides the core of the OpenERP Web Client.
"static/test/mutex.js"
],
'bootstrap': True,
'twitter': False,
}

View File

@ -13,6 +13,7 @@ import os
import re
import simplejson
import time
import urllib
import urllib2
import xmlrpclib
import zlib
@ -294,9 +295,9 @@ def manifest_list(req, extension, mods=None, db=None):
if not req.debug:
path = '/web/webclient/' + extension
if mods is not None:
path += '?mods=' + mods
path += '?' + urllib.urlencode({'mods': mods})
elif db:
path += '?db=' + db
path += '?' + urllib.urlencode({'db': db})
return [path]
files = manifest_glob(req, extension, addons=mods, db=db)
i_am_diabetic = req.httprequest.environ["QUERY_STRING"].count("no_sugar") >= 1 or \
@ -522,7 +523,7 @@ html_template = """<!DOCTYPE html>
</head>
<body>
<!--[if lte IE 8]>
<script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js"></script>
<script>CFInstall.check({mode: "overlay"});</script>
<![endif]-->
</body>

View File

@ -32,12 +32,12 @@ NOMODULE_TEMPLATE = Template(u"""<!DOCTYPE html>
</form>
</body>
</html>
""")
""", default_filters=['h'])
NOTFOUND = Template(u"""
<p>Unable to find the module [${module}], please check that the module
name is correct and the module is on OpenERP's path.</p>
<a href="/web/tests">&lt;&lt; Back to tests</a>
""")
""", default_filters=['h'])
TESTING = Template(u"""<!DOCTYPE html>
<html style="height: 100%">
<%def name="to_path(module, p)">/${module}/${p}</%def>
@ -51,9 +51,9 @@ TESTING = Template(u"""<!DOCTYPE html>
<script src="/web/static/lib/qunit/qunit.js"></script>
<script type="text/javascript">
var oe_db_info = ${db_info};
var oe_db_info = ${db_info | n};
// List of modules, each module is preceded by its dependencies
var oe_all_dependencies = ${dependencies};
var oe_all_dependencies = ${dependencies | n};
QUnit.config.testTimeout = 5 * 60 * 1000;
</script>
</head>
@ -83,7 +83,7 @@ TESTING = Template(u"""<!DOCTYPE html>
% endif
% endfor
</html>
""")
""", default_filters=['h'])
class TestRunnerController(http.Controller):
_cp_path = '/web/tests'

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: 2013-01-22 05:31+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-01-23 06:03+0000\n"
"X-Generator: Launchpad (build 16441)\n"
#. module: web
#. openerp-web

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2012-12-21 23:00+0000\n"
"Last-Translator: Juha Kotamäki <Unknown>\n"
"PO-Revision-Date: 2013-02-06 08:55+0000\n"
"Last-Translator: Sligo Oy <info@sligo-oy.com>\n"
"Language-Team: Finnish <fi@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-12-22 07:37+0000\n"
"X-Generator: Launchpad (build 16378)\n"
"X-Launchpad-Export-Date: 2013-02-07 05:42+0000\n"
"X-Generator: Launchpad (build 16477)\n"
#. module: web
#. openerp-web
@ -29,21 +29,21 @@ msgstr "Oletuskieli:"
#: code:addons/web/static/src/js/coresetup.js:602
#, python-format
msgid "%d minutes ago"
msgstr ""
msgstr "%d minuuttia sitten"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:630
#, python-format
msgid "Still loading...<br />Please be patient."
msgstr ""
msgstr "Ladataan...<br />Olkaa hyvä ja odottakaa."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/search.js:1832
#, python-format
msgid "%(field)s %(operator)s \"%(value)s\""
msgstr ""
msgstr "%(field)s %(operator)s \"%(value)s\""
#. module: web
#. openerp-web
@ -59,7 +59,7 @@ msgstr "pienempi tai yhtäsuuri kuin"
#: code:addons/web/static/src/js/chrome.js:393
#, python-format
msgid "Please enter your previous password"
msgstr ""
msgstr "Syötä edellinen salasanasi"
#. module: web
#. openerp-web
@ -75,42 +75,42 @@ msgstr "Pääsalasana:"
#: code:addons/web/static/src/xml/base.xml:274
#, python-format
msgid "Change Master Password"
msgstr ""
msgstr "Vaihda pääsalasana"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:491
#, python-format
msgid "Do you really want to delete the database: %s ?"
msgstr ""
msgstr "Oletko varma, että haluat poistaa tietokannan: %s ?"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/search.js:1398
#, python-format
msgid "Search %(field)s at: %(value)s"
msgstr ""
msgstr "Hae %(field)s arvoista: %(value)s"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:537
#, python-format
msgid "Access Denied"
msgstr ""
msgstr "Pääsy evätty"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:5183
#, python-format
msgid "Uploading error"
msgstr ""
msgstr "Lähetysvirhe"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:603
#, python-format
msgid "about an hour ago"
msgstr ""
msgstr "noin tunti sitten"
#. module: web
#. openerp-web
@ -119,14 +119,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:216
#, python-format
msgid "Backup Database"
msgstr ""
msgstr "Varmuuskopioi tietokanta"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views.js:463
#, python-format
msgid "%(view_type)s view"
msgstr ""
msgstr "%(view_type)s näkymä"
#. module: web
#. openerp-web
@ -134,7 +134,7 @@ msgstr ""
#: code:addons/web/static/src/js/dates.js:53
#, python-format
msgid "'%s' is not a valid date"
msgstr ""
msgstr "\"%s\" ei ole kelvollinen päivämäärä"
#. module: web
#. openerp-web
@ -148,20 +148,20 @@ msgstr "Tässä on näyte tiedostosta jota ei voitu tuoda:"
#: code:addons/web/static/src/js/coresetup.js:601
#, python-format
msgid "about a minute ago"
msgstr ""
msgstr "noin minuutti sitten"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1297
#, python-format
msgid "File"
msgstr ""
msgstr "Tiedosto"
#. module: web
#: code:addons/web/controllers/main.py:826
#, python-format
msgid "You cannot leave any password empty."
msgstr ""
msgstr "Et voi jättää salasanaa tyhjäksi."
#. module: web
#. openerp-web
@ -192,7 +192,7 @@ msgstr "Valitse"
#: code:addons/web/static/src/js/chrome.js:549
#, python-format
msgid "Database restored successfully"
msgstr "Tietokanta palautettu onnistuneesti"
msgstr "Tietokanta palautettu"
#. module: web
#. openerp-web
@ -213,21 +213,21 @@ msgstr "Viimeisin muutospäivämäärä:"
#: code:addons/web/static/src/js/search.js:1459
#, python-format
msgid "M2O search fields do not currently handle multiple default values"
msgstr ""
msgstr "Monesta yhteen hakukentät eivät salli useita oletusarvoja."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:1227
#, python-format
msgid "Widget type '%s' is not implemented"
msgstr ""
msgstr "Pienohjelman tyyppiä '%s' ei ole asennettu"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1608
#, python-format
msgid "Share with all users"
msgstr ""
msgstr "Jaa kaikkien käyttäjien kanssa"
#. module: web
#. openerp-web
@ -242,14 +242,14 @@ msgstr "Lomake"
#: code:addons/web/static/src/xml/base.xml:1324
#, python-format
msgid "(no string)"
msgstr ""
msgstr "(ei merkkijonoa)"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/formats.js:282
#, python-format
msgid "'%s' is not a correct time"
msgstr ""
msgstr "'%s' on virheellinen aika"
#. module: web
#. openerp-web
@ -270,7 +270,7 @@ msgstr "Uusi salasana:"
#: code:addons/web/static/src/xml/base.xml:610
#, python-format
msgid "Attachment :"
msgstr ""
msgstr "Liite:"
#. module: web
#. openerp-web
@ -291,49 +291,49 @@ msgstr "Määrittämätön"
#: code:addons/web/static/src/js/view_form.js:4871
#, python-format
msgid "File Upload"
msgstr ""
msgstr "Tiedoston lähetys"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:607
#, python-format
msgid "about a month ago"
msgstr ""
msgstr "noin kuukausi sitten"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1600
#, python-format
msgid "Custom Filters"
msgstr ""
msgstr "Muokattavat suodattimet"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1336
#, python-format
msgid "Button Type:"
msgstr "Napin tyyppi:"
msgstr "Painiketyyppi:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:419
#, python-format
msgid "OpenERP SA Company"
msgstr ""
msgstr "OpenERP SA yritys"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/search.js:1553
#, python-format
msgid "Custom Filter"
msgstr ""
msgstr "Mukautettu suodatin"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:159
#, python-format
msgid "Duplicate Database"
msgstr ""
msgstr "Kopioi tietokanta"
#. module: web
#. openerp-web
@ -355,7 +355,7 @@ msgstr "Vaihda salasana"
#: code:addons/web/static/src/js/view_form.js:3411
#, python-format
msgid "View type '%s' is not supported in One2Many."
msgstr ""
msgstr "Näkymätyyppiä '%s' ei tueta yhdestä moneen kentissä."
#. module: web
#. openerp-web
@ -370,7 +370,7 @@ msgstr "Lataa"
#: code:addons/web/static/src/js/formats.js:266
#, python-format
msgid "'%s' is not a correct datetime"
msgstr ""
msgstr "'%s' on virheellinen päivämäärä"
#. module: web
#. openerp-web
@ -398,20 +398,20 @@ msgstr "Valinta:"
#: code:addons/web/static/src/js/view_form.js:871
#, python-format
msgid "The following fields are invalid:"
msgstr ""
msgstr "Seuraavat kentät ovat virheellisiä:"
#. module: web
#: code:addons/web/controllers/main.py:847
#, python-format
msgid "Languages"
msgstr ""
msgstr "Kielet"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1270
#, python-format
msgid "...Upload in progress..."
msgstr ""
msgstr "...lähetys käynnissä..."
#. module: web
#. openerp-web
@ -425,21 +425,21 @@ msgstr "Tuo"
#: code:addons/web/static/src/js/chrome.js:543
#, python-format
msgid "Could not restore the database"
msgstr ""
msgstr "Tietokantaa ei voitu palauttaa"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:4851
#, python-format
msgid "File upload"
msgstr ""
msgstr "Tiedoston lähetys"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:3804
#, python-format
msgid "Action Button"
msgstr ""
msgstr "Toimintopainike"
#. module: web
#. openerp-web
@ -447,7 +447,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:1467
#, python-format
msgid "Manage Filters"
msgstr "Hallitse Suotimia"
msgstr "Hallitse suodattimia"
#. module: web
#. openerp-web
@ -461,14 +461,14 @@ msgstr "sisältää"
#: code:addons/web/static/src/js/coresetup.js:633
#, python-format
msgid "Take a minute to get a coffee,<br />because it's loading..."
msgstr ""
msgstr "Käy vaikka kahvilla,<br />koska tämä lataus kestää hetken..."
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:413
#, python-format
msgid "Activate the developer mode"
msgstr ""
msgstr "Aktivoi kehittäjätila"
#. module: web
#. openerp-web
@ -482,14 +482,14 @@ msgstr "Ladataan (%d)"
#: code:addons/web/static/src/js/search.js:1114
#, python-format
msgid "GroupBy"
msgstr ""
msgstr "Järjestä"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_list.js:687
#, python-format
msgid "You must select at least one record."
msgstr ""
msgstr "Sinun täytyy valita vähintään yksi tietue."
#. module: web
#. openerp-web
@ -503,7 +503,7 @@ msgstr "Näytä loki (perm_read)"
#: code:addons/web/static/src/js/view_form.js:1061
#, python-format
msgid "Set Default"
msgstr "Aseta Oletukseksi"
msgstr "Aseta oletukseksi"
#. module: web
#. openerp-web
@ -517,7 +517,7 @@ msgstr "Suhde:"
#: code:addons/web/static/src/js/coresetup.js:600
#, python-format
msgid "less than a minute ago"
msgstr ""
msgstr "alle minuutti sitten"
#. module: web
#. openerp-web
@ -552,14 +552,14 @@ msgstr "Palautettu"
#: code:addons/web/static/src/js/view_list.js:394
#, python-format
msgid "%d-%d of %d"
msgstr ""
msgstr "%d-%d %d :sta"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:2868
#, python-format
msgid "Create and Edit..."
msgstr ""
msgstr "Luo ja muokkaa..."
#. module: web
#. openerp-web
@ -573,7 +573,7 @@ msgstr ""
#: code:addons/web/static/src/js/view_form.js:2346
#, python-format
msgid "Resource error"
msgstr ""
msgstr "Resurssivirhe"
#. module: web
#. openerp-web
@ -587,21 +587,21 @@ msgstr "ei ole"
#: code:addons/web/static/src/xml/base.xml:550
#, python-format
msgid "Print Workflow"
msgstr ""
msgstr "Tulosta työnkulku"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:396
#, python-format
msgid "Please confirm your new password"
msgstr ""
msgstr "Vahvista uusi salasanasi"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1804
#, python-format
msgid "UTF-8"
msgstr ""
msgstr "UTF-8"
#. module: web
#. openerp-web
@ -674,7 +674,7 @@ msgstr "Näkymä"
#: code:addons/web/static/src/xml/base.xml:1466
#, python-format
msgid "Save Filter"
msgstr "Tallenna suodin"
msgstr "Tallenna suodatin"
#. module: web
#. openerp-web
@ -689,13 +689,14 @@ msgstr "Toiminnon ID:"
#, python-format
msgid "Your user's preference timezone does not match your browser timezone:"
msgstr ""
"Käyttäjätietojesi aikavyöhyke ei täsmää selaimesi aikavyöhykkeen kanssa:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:1223
#, python-format
msgid "Field '%s' specified in view could not be found."
msgstr ""
msgstr "Näkymässä määriteltyä kenttää '%s' ei löytynyt."
#. module: web
#. openerp-web
@ -716,21 +717,21 @@ msgstr "Vanha salasana:"
#: code:addons/web/static/src/js/formats.js:113
#, python-format
msgid "Bytes,Kb,Mb,Gb,Tb,Pb,Eb,Zb,Yb"
msgstr ""
msgstr "bittiä,kb,Mb,Gb,Tb,Pb,Eb,Zb,Yb"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:481
#, python-format
msgid "The database has been duplicated."
msgstr ""
msgstr "Tietokanta on kopioitu"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1625
#, python-format
msgid "Apply"
msgstr ""
msgstr "Käytä"
#. module: web
#. openerp-web
@ -752,21 +753,21 @@ msgstr "Tallenna nimellä"
#: code:addons/web/doc/module/static/src/xml/web_example.xml:3
#, python-format
msgid "00:00:00"
msgstr ""
msgstr "00:00:00"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:2317
#, python-format
msgid "E-mail error"
msgstr ""
msgstr "Sähköpostivirhe"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:605
#, python-format
msgid "a day ago"
msgstr ""
msgstr "päivä sitten"
#. module: web
#. openerp-web
@ -780,7 +781,7 @@ msgstr "Onko tiedostossasi otsikot?"
#: code:addons/web/static/src/js/view_list.js:327
#, python-format
msgid "Unlimited"
msgstr "Ei rajoitettu"
msgstr "Rajoittamaton"
#. module: web
#. openerp-web
@ -791,6 +792,9 @@ msgid ""
"\n"
"Are you sure you want to leave this page ?"
msgstr ""
"Varoitus, tietuetta on muokattu ja tekemäsi muutokset hylätään.\n"
"\n"
"Haluatko varmasti poistua tältä sivulta ?"
#. module: web
#. openerp-web
@ -818,14 +822,14 @@ msgstr "Rajoitin:"
#: code:addons/web/static/src/xml/base.xml:462
#, python-format
msgid "Browser's timezone"
msgstr ""
msgstr "Selaimen aikavyhöhyke"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1605
#, python-format
msgid "Filter name"
msgstr ""
msgstr "Suodattimen nimi"
#. module: web
#. openerp-web
@ -856,7 +860,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:421
#, python-format
msgid "OpenERP.com"
msgstr ""
msgstr "OpenERP.com"
#. module: web
#. openerp-web
@ -870,7 +874,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:636
#, python-format
msgid "Add..."
msgstr ""
msgstr "Lisää..."
#. module: web
#. openerp-web
@ -945,14 +949,14 @@ msgstr "Käyttäjänimi"
#: code:addons/web/static/src/js/chrome.js:481
#, python-format
msgid "Duplicating database"
msgstr ""
msgstr "Tietokantaa kopioidaan"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:563
#, python-format
msgid "Password has been changed successfully"
msgstr ""
msgstr "Salasana vaihdettu"
#. module: web
#. openerp-web
@ -966,7 +970,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:533
#, python-format
msgid "Debug View#"
msgstr ""
msgstr "Kehitysnäkymä#"
#. module: web
#. openerp-web
@ -1014,7 +1018,7 @@ msgstr "Tallenna kenttäluettelo"
#: code:addons/web/doc/module/static/src/xml/web_example.xml:5
#, python-format
msgid "Start"
msgstr ""
msgstr "Aloita"
#. module: web
#. openerp-web
@ -1035,14 +1039,14 @@ msgstr "Luontipäivämäärä:"
#: code:addons/web/controllers/main.py:835
#, python-format
msgid "Error, password not changed !"
msgstr ""
msgstr "Virhe, salasanaa ei muutettu"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:4850
#, python-format
msgid "The selected file exceed the maximum file size of %s."
msgstr ""
msgstr "Tiedoston suurin sallittu koko %s ylitetty."
#. module: web
#. openerp-web
@ -1050,14 +1054,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:1300
#, python-format
msgid "/web/binary/upload_attachment"
msgstr ""
msgstr "/web/binary/upload_attachment"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:563
#, python-format
msgid "Changed Password"
msgstr ""
msgstr "Salasana vaihdettu"
#. module: web
#. openerp-web
@ -1091,14 +1095,14 @@ msgstr "Varmuuskopioi"
#: code:addons/web/static/src/js/dates.js:80
#, python-format
msgid "'%s' is not a valid time"
msgstr ""
msgstr "\"%s\" ei ole kelvollinen aika"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/formats.js:274
#, python-format
msgid "'%s' is not a correct date"
msgstr ""
msgstr "'%s' ei ole kelvollinen päivämäärä"
#. module: web
#. openerp-web
@ -1112,14 +1116,14 @@ msgstr ""
#: code:addons/web/static/src/js/coresetup.js:606
#, python-format
msgid "%d days ago"
msgstr ""
msgstr "%d päivää sitten"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1474
#, python-format
msgid "(Any existing filter with the same name will be replaced)"
msgstr "(jo olemassaoleva samanniminen suodin korvataan)"
msgstr ""
#. module: web
#. openerp-web
@ -1166,7 +1170,7 @@ msgstr "Tuntematon operaattori %s toimialueella %s"
#: code:addons/web/static/src/js/view_form.js:428
#, python-format
msgid "%d / %d"
msgstr ""
msgstr "%d / %d"
#. module: web
#. openerp-web
@ -1196,7 +1200,7 @@ msgstr ""
#: code:addons/web/static/src/js/coresetup.js:608
#, python-format
msgid "%d months ago"
msgstr ""
msgstr "%d kuukautta sitten"
#. module: web
#. openerp-web
@ -1217,7 +1221,7 @@ msgstr "Lisää kehittynyt suodin"
#: code:addons/web/controllers/main.py:828
#, python-format
msgid "The new password and its confirmation must be identical."
msgstr ""
msgstr "Uusi salasana sekä vahvistus tulee olla samat."
#. module: web
#. openerp-web
@ -1225,14 +1229,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:248
#, python-format
msgid "Restore Database"
msgstr ""
msgstr "Palauta tietokanta"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:644
#, python-format
msgid "Login"
msgstr ""
msgstr "Kirjaudu"
#. module: web
#. openerp-web
@ -1346,28 +1350,28 @@ msgstr "%(page)d/%(page_count)d"
#: code:addons/web/static/src/js/chrome.js:397
#, python-format
msgid "The confirmation does not match the password"
msgstr ""
msgstr "Salasanan vahvistus ei täsmää salasanan kanssa"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:441
#, python-format
msgid "Edit Company data"
msgstr ""
msgstr "Muokkaa yrityksen tietoja"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:4886
#, python-format
msgid "Save As..."
msgstr ""
msgstr "Tallenna nimellä..."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:5007
#, python-format
msgid "Could not display the selected image."
msgstr ""
msgstr "Valittua kuvaa ei voitu näyttää."
#. module: web
#. openerp-web
@ -1390,7 +1394,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:394
#, python-format
msgid "99+"
msgstr ""
msgstr "99+"
#. module: web
#. openerp-web
@ -1404,14 +1408,14 @@ msgstr "1. Tuo .CSV tiedosto"
#: code:addons/web/static/src/js/chrome.js:644
#, python-format
msgid "No database selected !"
msgstr ""
msgstr "Tietokantaa ei valittu !"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/formats.js:180
#, python-format
msgid "(%d records)"
msgstr ""
msgstr "(%d tietuetta)"
#. module: web
#. openerp-web
@ -1425,7 +1429,7 @@ msgstr "Vaihda oletusarvo:"
#: code:addons/web/static/src/xml/base.xml:171
#, python-format
msgid "Original database name:"
msgstr ""
msgstr "Alkuperäinen tietokannan nimi:"
#. module: web
#. openerp-web
@ -1449,7 +1453,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:1619
#, python-format
msgid "Advanced Search"
msgstr ""
msgstr "Tarkennettu haku"
#. module: web
#. openerp-web
@ -1496,7 +1500,7 @@ msgstr "Tuonnin valinnat"
#: code:addons/web/static/src/js/view_form.js:2936
#, python-format
msgid "Add %s"
msgstr ""
msgstr "Lisää %s"
#. module: web
#. openerp-web
@ -1534,7 +1538,7 @@ msgstr "CSV tiedosto:"
#: code:addons/web/static/src/js/search.js:1741
#, python-format
msgid "Advanced"
msgstr ""
msgstr "Lisäasetukset"
#. module: web
#. openerp-web

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2012-12-27 09:12+0000\n"
"PO-Revision-Date: 2013-02-12 13:23+0000\n"
"Last-Translator: krnkris <Unknown>\n"
"Language-Team: Hungarian <hu@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-12-28 05:37+0000\n"
"X-Generator: Launchpad (build 16378)\n"
"X-Launchpad-Export-Date: 2013-02-13 05:22+0000\n"
"X-Generator: Launchpad (build 16491)\n"
#. module: web
#. openerp-web
@ -103,7 +103,7 @@ msgstr "Hozzáférés megtagadva"
#: code:addons/web/static/src/js/view_form.js:5183
#, python-format
msgid "Uploading error"
msgstr "Feltültési hiba"
msgstr "Feltöltési hiba"
#. module: web
#. openerp-web

2604
addons/web/i18n/ko.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2012-12-25 02:31+0000\n"
"Last-Translator: gobi <Unknown>\n"
"PO-Revision-Date: 2013-02-07 09:58+0000\n"
"Last-Translator: Tenuun Khangaitan <tenuun.khangaitan@gmail.com>\n"
"Language-Team: Mongolian <mn@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-12-26 05:18+0000\n"
"X-Generator: Launchpad (build 16378)\n"
"X-Launchpad-Export-Date: 2013-02-08 05:24+0000\n"
"X-Generator: Launchpad (build 16482)\n"
#. module: web
#. openerp-web
@ -477,7 +477,7 @@ msgstr "Хөгжүүлэгч горимыг идэвхжүүлэх"
#: code:addons/web/static/src/js/chrome.js:324
#, python-format
msgid "Loading (%d)"
msgstr "Ачаалж байна (%d)"
msgstr "Ачааллаж байна (%d)"
#. module: web
#. openerp-web
@ -1146,7 +1146,7 @@ msgstr "Цуцлах"
#: code:addons/web/static/src/xml/base.xml:9
#, python-format
msgid "Loading..."
msgstr "Ачаалж байна..."
msgstr "Ачааллаж байна..."
#. module: web
#. openerp-web

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2013-01-21 10:11+0000\n"
"PO-Revision-Date: 2013-01-24 12:31+0000\n"
"Last-Translator: Erwin van der Ploeg (Endian Solutions) <Unknown>\n"
"Language-Team: Dutch <nl@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: 2013-01-22 05:31+0000\n"
"X-Generator: Launchpad (build 16430)\n"
"X-Launchpad-Export-Date: 2013-01-25 06:05+0000\n"
"X-Generator: Launchpad (build 16445)\n"
#. module: web
#. openerp-web
@ -126,7 +126,7 @@ msgstr "Back-up database"
#: code:addons/web/static/src/js/views.js:463
#, python-format
msgid "%(view_type)s view"
msgstr "%(view_type)s were gave"
msgstr "%(view_type)s weergave"
#. module: web
#. openerp-web
@ -794,10 +794,9 @@ msgid ""
"\n"
"Are you sure you want to leave this page ?"
msgstr ""
"Opgelet, het record werd aangepast, uw wijzigingen willen verloren gaan.<br "
"/>\n"
"<br />\n"
"Bent u zeker dat u deze pagina wenst te verlaten?"
"Opgelet, het record is aangepast, uw wijzigingen zullen verloren gaan.\n"
"\n"
"Weet u zeker dat u deze pagina wilt verlaten?"
#. module: web
#. openerp-web

View File

@ -8,15 +8,15 @@ msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2012-12-22 07:29+0000\n"
"PO-Revision-Date: 2013-01-26 00:53+0000\n"
"Last-Translator: Fábio Martinelli - http://zupy.com.br "
"<webmaster@guaru.net>\n"
"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-12-23 05:09+0000\n"
"X-Generator: Launchpad (build 16378)\n"
"X-Launchpad-Export-Date: 2013-01-27 05:10+0000\n"
"X-Generator: Launchpad (build 16451)\n"
#. module: web
#. openerp-web
@ -127,7 +127,7 @@ msgstr "Cópia de segurança da base de dados"
#: code:addons/web/static/src/js/views.js:463
#, python-format
msgid "%(view_type)s view"
msgstr "%(view_type)s view"
msgstr "Visualização %(view_type)s"
#. module: web
#. openerp-web
@ -214,7 +214,7 @@ msgstr "Data da Última Modificação:"
#: code:addons/web/static/src/js/search.js:1459
#, python-format
msgid "M2O search fields do not currently handle multiple default values"
msgstr "Campos de pesquisa M2O não aceitão múltiplos valores default"
msgstr "Campos de pesquisa M2O não aceitão múltiplos valores padrão"
#. module: web
#. openerp-web
@ -433,7 +433,7 @@ msgstr "Não foi possível restaurar a base de dados"
#: code:addons/web/static/src/js/view_form.js:4851
#, python-format
msgid "File upload"
msgstr "Arquivo carregado"
msgstr "Upload de arquivos"
#. module: web
#. openerp-web
@ -532,7 +532,7 @@ msgstr "Condição:"
#: code:addons/web/static/src/js/view_form.js:1692
#, python-format
msgid "Unsupported operator %s in domain %s"
msgstr "Operador não suportado %s no domínio %s"
msgstr "Operador %s não suportado no domínio %s"
#. module: web
#. openerp-web
@ -560,7 +560,7 @@ msgstr "%d-%d de %d"
#: code:addons/web/static/src/js/view_form.js:2868
#, python-format
msgid "Create and Edit..."
msgstr "Criar e editar..."
msgstr "Criar e Editar..."
#. module: web
#. openerp-web
@ -1169,7 +1169,7 @@ msgstr "Fuso horário diferentes"
#: code:addons/web/static/src/js/view_form.js:1646
#, python-format
msgid "Unknown operator %s in domain %s"
msgstr "Operador desconhecido %s no domínio %s"
msgstr "Operador %s desconhecido no domínio %s"
#. module: web
#. openerp-web
@ -1183,7 +1183,7 @@ msgstr "%d / %d"
#: code:addons/web/static/src/xml/base.xml:1782
#, python-format
msgid "2. Check your file format"
msgstr "2. Verifique seu formato de arquivo"
msgstr "2. Verifique o formato de seu arquivo"
#. module: web
#. openerp-web
@ -1318,7 +1318,7 @@ msgstr "Você deve escolher pelo menos um registro."
#: code:addons/web/static/src/js/coresetup.js:631
#, python-format
msgid "Don't leave yet,<br />it's still loading..."
msgstr "Não deixe ainda, <br /> que ainda está carregando ..."
msgstr "Não saia dai, <br /> que ainda está carregando ..."
#. module: web
#. openerp-web
@ -1332,7 +1332,7 @@ msgstr "Pesquisa Inválida"
#: code:addons/web/static/src/js/view_list.js:980
#, python-format
msgid "Could not find id in dataset"
msgstr "Não foi possível encontrar ID no conjunto de dados"
msgstr "Não foi possível encontrar o ID no conjunto de dados"
#. module: web
#. openerp-web
@ -1479,7 +1479,7 @@ msgstr "Confirme a Senha do Super Admin:"
#: code:addons/web/static/src/js/coresetup.js:634
#, python-format
msgid "Maybe you should consider reloading the application by pressing F5..."
msgstr "Considere recarregar a a aplicação pressionado F5 ..."
msgstr "Tente recarregar a aplicação pressionado F5 ..."
#. module: web
#. openerp-web
@ -1585,7 +1585,7 @@ msgstr "Todos os usuários"
#: code:addons/web/static/src/js/view_form.js:1654
#, python-format
msgid "Unknown field %s in domain %s"
msgstr "Campo desconhecido %s no domínio %s"
msgstr "Campo %s desconhecido no domínio %s"
#. module: web
#. openerp-web
@ -1936,8 +1936,8 @@ msgid ""
"Grouping on field '%s' is not possible because that field does not appear in "
"the list view."
msgstr ""
"Agrupamento em campo '% s' não é possível porque o campo não aparece na "
"visão de lista."
"Agrupar por em campo '% s' não é possível porque o campo não aparece na "
"visualização lista."
#. module: web
#. openerp-web
@ -1987,7 +1987,7 @@ msgstr "Tipo:"
#: code:addons/web/static/src/js/chrome.js:538
#, python-format
msgid "Incorrect super-administrator password"
msgstr "Senha de Super-administrator incorreta"
msgstr "Senha de Super Admin incorreta"
#. module: web
#. openerp-web
@ -2274,7 +2274,7 @@ msgstr "Nenhum conteúdo encontrado para o campo '%s' em '%s:%s'"
#: code:addons/web/static/src/xml/base.xml:304
#, python-format
msgid "Database Management"
msgstr "Gerenciamento de base de dados"
msgstr "Gerenciamento do banco de dados"
#. module: web
#. openerp-web
@ -2346,7 +2346,7 @@ msgstr "Duplicar"
#: code:addons/web/static/src/xml/base.xml:1391
#, python-format
msgid "Discard"
msgstr "Descartar"
msgstr "Cancelar"
#. module: web
#. openerp-web

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2012-12-22 07:29+0000\n"
"Last-Translator: Fekete Mihai <mihai@erpsystems.ro>\n"
"PO-Revision-Date: 2013-02-02 14:33+0000\n"
"Last-Translator: Dorin <dhongu@gmail.com>\n"
"Language-Team: Romanian <ro@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-12-23 05:09+0000\n"
"X-Generator: Launchpad (build 16378)\n"
"X-Launchpad-Export-Date: 2013-02-03 05:29+0000\n"
"X-Generator: Launchpad (build 16462)\n"
#. module: web
#. openerp-web
@ -2349,7 +2349,7 @@ msgstr "Copiaza"
#: code:addons/web/static/src/xml/base.xml:1391
#, python-format
msgid "Discard"
msgstr "Elimina"
msgstr "Renunță"
#. module: web
#. openerp-web

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2012-12-21 23:00+0000\n"
"Last-Translator: Ahmet Altınışık <Unknown>\n"
"PO-Revision-Date: 2013-02-15 20:45+0000\n"
"Last-Translator: Hasan Yılmaz <iletisim@hasanyilmaz.net>\n"
"Language-Team: Turkish <tr@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-12-22 07:38+0000\n"
"X-Generator: Launchpad (build 16378)\n"
"X-Launchpad-Export-Date: 2013-02-16 05:40+0000\n"
"X-Generator: Launchpad (build 16491)\n"
#. module: web
#. openerp-web
@ -59,7 +59,7 @@ msgstr "az ya da eşittir"
#: code:addons/web/static/src/js/chrome.js:393
#, python-format
msgid "Please enter your previous password"
msgstr ""
msgstr "Lütfen önceki şifrenizi girin"
#. module: web
#. openerp-web
@ -82,28 +82,28 @@ msgstr "Ana şifreyi değiştir."
#: code:addons/web/static/src/js/chrome.js:491
#, python-format
msgid "Do you really want to delete the database: %s ?"
msgstr ""
msgstr "Gerçekten %s veritabanını SİLMEK istiyor musunuz?"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/search.js:1398
#, python-format
msgid "Search %(field)s at: %(value)s"
msgstr "Search %(field)s at: %(value)s"
msgstr "Armama %(field)s at: %(value)s"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:537
#, python-format
msgid "Access Denied"
msgstr ""
msgstr "Erişim Reddedildi"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:5183
#, python-format
msgid "Uploading error"
msgstr ""
msgstr "Yükleme hatası"
#. module: web
#. openerp-web
@ -126,7 +126,7 @@ msgstr "Veritabanı Yedekle"
#: code:addons/web/static/src/js/views.js:463
#, python-format
msgid "%(view_type)s view"
msgstr ""
msgstr "%(view_type)s ekranı"
#. module: web
#. openerp-web
@ -134,14 +134,14 @@ msgstr ""
#: code:addons/web/static/src/js/dates.js:53
#, python-format
msgid "'%s' is not a valid date"
msgstr ""
msgstr "'%s' geçerli bir tarih değil"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1837
#, python-format
msgid "Here is a preview of the file we could not import:"
msgstr "İçeaktaramadığımız dosyanın önizlemesi:"
msgstr "İçe-aktarılamıyan dosyanın önizlemesi:"
#. module: web
#. openerp-web
@ -161,7 +161,7 @@ msgstr "Dosya"
#: code:addons/web/controllers/main.py:826
#, python-format
msgid "You cannot leave any password empty."
msgstr ""
msgstr "Şifreleri boş bırkamazsınız."
#. module: web
#. openerp-web
@ -213,15 +213,14 @@ msgstr "Son Değiştirme tarihi:"
#: code:addons/web/static/src/js/search.js:1459
#, python-format
msgid "M2O search fields do not currently handle multiple default values"
msgstr ""
"Çoktan teke arama alanları henüz çoklu öntanımlı değerleri desteklemiyor"
msgstr "M2O arama alanları henüz çoklu öntanımlı değerleri desteklemiyor"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:1227
#, python-format
msgid "Widget type '%s' is not implemented"
msgstr ""
msgstr "'%s' widget tipi uygulanmamış"
#. module: web
#. openerp-web
@ -250,7 +249,7 @@ msgstr "(yazı yok)"
#: code:addons/web/static/src/js/formats.js:282
#, python-format
msgid "'%s' is not a correct time"
msgstr ""
msgstr "'%s' geçersiz saat biçimi"
#. module: web
#. openerp-web
@ -271,7 +270,7 @@ msgstr "Yeni Parola:"
#: code:addons/web/static/src/xml/base.xml:610
#, python-format
msgid "Attachment :"
msgstr ""
msgstr "Ek :"
#. module: web
#. openerp-web
@ -313,7 +312,7 @@ msgstr "Özel Filtreler"
#: code:addons/web/static/src/xml/base.xml:1336
#, python-format
msgid "Button Type:"
msgstr "Buton Tipi:"
msgstr "Buton Türü:"
#. module: web
#. openerp-web
@ -327,7 +326,7 @@ msgstr "OpenERP SA Company"
#: code:addons/web/static/src/js/search.js:1553
#, python-format
msgid "Custom Filter"
msgstr "Özel Süzgeç"
msgstr "Özel Filtre"
#. module: web
#. openerp-web
@ -356,7 +355,7 @@ msgstr "Parolayı Değiştir"
#: code:addons/web/static/src/js/view_form.js:3411
#, python-format
msgid "View type '%s' is not supported in One2Many."
msgstr ""
msgstr "'%s' ekran (view) tipi one2many için desteklenmiyor."
#. module: web
#. openerp-web
@ -371,7 +370,7 @@ msgstr "İndir"
#: code:addons/web/static/src/js/formats.js:266
#, python-format
msgid "'%s' is not a correct datetime"
msgstr ""
msgstr "'%s' geçerli bir tarih saat biçimi değil"
#. module: web
#. openerp-web
@ -385,7 +384,7 @@ msgstr "Grup"
#: code:addons/web/static/src/xml/base.xml:927
#, python-format
msgid "Unhandled widget"
msgstr "işlenmemiş parçacık"
msgstr "İşlenmemiş parçacık"
#. module: web
#. openerp-web
@ -399,13 +398,13 @@ msgstr "Seçim:"
#: code:addons/web/static/src/js/view_form.js:871
#, python-format
msgid "The following fields are invalid:"
msgstr ""
msgstr "Geçersiz alanlar:"
#. module: web
#: code:addons/web/controllers/main.py:847
#, python-format
msgid "Languages"
msgstr ""
msgstr "Diller"
#. module: web
#. openerp-web
@ -426,7 +425,7 @@ msgstr "İçe aktar"
#: code:addons/web/static/src/js/chrome.js:543
#, python-format
msgid "Could not restore the database"
msgstr ""
msgstr "Veritabanı geri yüklenemedi"
#. module: web
#. openerp-web
@ -440,7 +439,7 @@ msgstr "Dosya yükle"
#: code:addons/web/static/src/js/view_form.js:3804
#, python-format
msgid "Action Button"
msgstr "Eylem Butonu"
msgstr "İşlem Butonu"
#. module: web
#. openerp-web
@ -483,7 +482,7 @@ msgstr "(%d) Yükleniyor"
#: code:addons/web/static/src/js/search.js:1114
#, python-format
msgid "GroupBy"
msgstr "Grupla"
msgstr "Gruplaİle"
#. module: web
#. openerp-web
@ -525,7 +524,7 @@ msgstr "bir dakika önce"
#: code:addons/web/static/src/xml/base.xml:851
#, python-format
msgid "Condition:"
msgstr "Durum:"
msgstr "Koşul:"
#. module: web
#. openerp-web
@ -539,7 +538,7 @@ msgstr "Desteklenmeyen operatör %s alan adında %s"
#: code:addons/web/static/src/js/formats.js:242
#, python-format
msgid "'%s' is not a correct float"
msgstr ""
msgstr "'%s' geçersiz bir float"
#. module: web
#. openerp-web
@ -553,21 +552,21 @@ msgstr "Onarıldı"
#: code:addons/web/static/src/js/view_list.js:394
#, python-format
msgid "%d-%d of %d"
msgstr ""
msgstr "%d-%d / %d"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:2868
#, python-format
msgid "Create and Edit..."
msgstr "Oluştur ve düzenle..."
msgstr "Oluştur ve Düzenle..."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/pyeval.js:731
#, python-format
msgid "Unknown nonliteral type "
msgstr ""
msgstr "Bilinmeyen (nonliteral) tipi "
#. module: web
#. openerp-web
@ -595,7 +594,7 @@ msgstr "İş Akışı'nı Yazdır"
#: code:addons/web/static/src/js/chrome.js:396
#, python-format
msgid "Please confirm your new password"
msgstr ""
msgstr "Lütfen yeni şifrenizi onaylayın"
#. module: web
#. openerp-web
@ -616,7 +615,7 @@ msgstr "Daha ayrıntılı bilgi için burayı ziyaret edin"
#: code:addons/web/static/src/xml/base.xml:1859
#, python-format
msgid "Add All Info..."
msgstr "Bütün bilgiyi ekle..."
msgstr "Bütün Bilgisini Ekle..."
#. module: web
#. openerp-web
@ -644,7 +643,7 @@ msgstr "Model %s Alanları"
#: code:addons/web/static/src/js/view_list.js:893
#, python-format
msgid "Setting 'id' attribute on existing record %s"
msgstr ""
msgstr "Geçerli kayıt %s nin 'id' özeliği ayarlanıyor"
#. module: web
#. openerp-web
@ -682,7 +681,7 @@ msgstr "Filitreyi Kaydet"
#: code:addons/web/static/src/xml/base.xml:1344
#, python-format
msgid "Action ID:"
msgstr "Eylem ID:"
msgstr "İşelme ID:"
#. module: web
#. openerp-web
@ -690,20 +689,21 @@ msgstr "Eylem ID:"
#, python-format
msgid "Your user's preference timezone does not match your browser timezone:"
msgstr ""
"Kullanıcınızın saat dilimi seçimi tarayıcınızın saat diliminden farklı:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:1223
#, python-format
msgid "Field '%s' specified in view could not be found."
msgstr ""
msgstr "Ekranda tanımlanan '%s' alanı bulunamıyor."
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1756
#, python-format
msgid "Saved exports:"
msgstr "Kaydedilmiş Dışa Aktarımlar:"
msgstr "Kaydedilmiş Dış-Aktarımlar:"
#. module: web
#. openerp-web
@ -724,7 +724,7 @@ msgstr "Bytes,Kb,Mb,Gb,Tb,Pb,Eb,Zb,Yb"
#: code:addons/web/static/src/js/chrome.js:481
#, python-format
msgid "The database has been duplicated."
msgstr ""
msgstr "Veritabanı Kopyalandı."
#. module: web
#. openerp-web
@ -753,7 +753,7 @@ msgstr "Farklı Kaydet"
#: code:addons/web/doc/module/static/src/xml/web_example.xml:3
#, python-format
msgid "00:00:00"
msgstr ""
msgstr "00:00:00"
#. module: web
#. openerp-web
@ -781,7 +781,7 @@ msgstr "Dosyanın başlık satırı varmı ?"
#: code:addons/web/static/src/js/view_list.js:327
#, python-format
msgid "Unlimited"
msgstr "Sınırsız"
msgstr "Limitsiz"
#. module: web
#. openerp-web
@ -798,7 +798,7 @@ msgstr "Uyarı, kayıt değiştirildi, değişiklikleriniz kaybolacaklar."
#: code:addons/web/static/src/js/view_form.js:2904
#, python-format
msgid "Search: "
msgstr "Ara: "
msgstr "Arama: "
#. module: web
#. openerp-web
@ -819,7 +819,7 @@ msgstr "Sonlandırıcı:"
#: code:addons/web/static/src/xml/base.xml:462
#, python-format
msgid "Browser's timezone"
msgstr ""
msgstr "Tarayıcınızın saat dilimi"
#. module: web
#. openerp-web
@ -833,7 +833,7 @@ msgstr "Filtre adı"
#: code:addons/web/static/src/xml/base.xml:1464
#, python-format
msgid "-- Actions --"
msgstr "-- Eylemler --"
msgstr "-- İşlemler --"
#. module: web
#. openerp-web
@ -885,7 +885,7 @@ msgstr "Tercihler"
#: code:addons/web/static/src/js/view_form.js:436
#, python-format
msgid "Wrong on change format: %s"
msgstr ""
msgstr "Hatalı (on change) biçimi: %s"
#. module: web
#. openerp-web
@ -900,14 +900,14 @@ msgstr "Veritabanını Sil"
#: code:addons/web/static/src/xml/base.xml:466
#, python-format
msgid "Click here to change your user's timezone."
msgstr ""
msgstr "Saat diliminizi değiştirmek için için tıklayın."
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:966
#, python-format
msgid "Modifiers:"
msgstr "Düzenleyenler"
msgstr "Değiştirenler:"
#. module: web
#. openerp-web
@ -946,21 +946,21 @@ msgstr "Kullanıcı Adı"
#: code:addons/web/static/src/js/chrome.js:481
#, python-format
msgid "Duplicating database"
msgstr ""
msgstr "Veritabanı Kopyalanıyor"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:563
#, python-format
msgid "Password has been changed successfully"
msgstr ""
msgstr "Şifreniz değiştirildi"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_list_editable.js:788
#, python-format
msgid "The form's data can not be discarded"
msgstr ""
msgstr "Formdaki veriler iptal edilemiyor"
#. module: web
#. openerp-web
@ -974,7 +974,7 @@ msgstr "Hata Ayıklama Görünümü#"
#: code:addons/web/static/src/xml/base.xml:77
#, python-format
msgid "Log in"
msgstr "Giriş yap"
msgstr "Giriş"
#. module: web
#. openerp-web
@ -995,6 +995,10 @@ msgid ""
"\n"
"%s"
msgstr ""
"Yerel değerlendirme hatası\n"
"%s\n"
"\n"
"%s"
#. module: web
#. openerp-web
@ -1015,7 +1019,7 @@ msgstr "Alan listesini Kaydet"
#: code:addons/web/doc/module/static/src/xml/web_example.xml:5
#, python-format
msgid "Start"
msgstr ""
msgstr "Başlat"
#. module: web
#. openerp-web
@ -1036,7 +1040,7 @@ msgstr "Oluşturma Tarihi:"
#: code:addons/web/controllers/main.py:835
#, python-format
msgid "Error, password not changed !"
msgstr ""
msgstr "Hata, şifre değiştirilemedi !"
#. module: web
#. openerp-web
@ -1058,14 +1062,14 @@ msgstr "/web/binary/upload_attachment"
#: code:addons/web/static/src/js/chrome.js:563
#, python-format
msgid "Changed Password"
msgstr ""
msgstr "Parola Değişti"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1431
#, python-format
msgid "Search"
msgstr "Ara"
msgstr "Arama"
#. module: web
#. openerp-web
@ -1092,14 +1096,14 @@ msgstr "Yedekle"
#: code:addons/web/static/src/js/dates.js:80
#, python-format
msgid "'%s' is not a valid time"
msgstr ""
msgstr "'%s' geçerli bir zaman biçimi değil"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/formats.js:274
#, python-format
msgid "'%s' is not a correct date"
msgstr ""
msgstr "'%s' geçerli bir tarih biçimi değil"
#. module: web
#. openerp-web
@ -1153,7 +1157,7 @@ msgstr "Son Değiştiren:"
#: code:addons/web/static/src/xml/base.xml:470
#, python-format
msgid "Timezone mismatch"
msgstr ""
msgstr "Saat dilimi uyumsuzluğu"
#. module: web
#. openerp-web
@ -1181,7 +1185,7 @@ msgstr "Dosya biçimini kontrol edin"
#: code:addons/web/static/src/xml/base.xml:1718
#, python-format
msgid "Name"
msgstr "İsim"
msgstr "Adı"
#. module: web
#. openerp-web
@ -1221,7 +1225,7 @@ msgstr "Gelişmiş Filtre Ekle"
#: code:addons/web/controllers/main.py:828
#, python-format
msgid "The new password and its confirmation must be identical."
msgstr ""
msgstr "Yeni şifre ve şifre tekrarı aynı olmalı"
#. module: web
#. openerp-web
@ -1236,7 +1240,7 @@ msgstr "Veritabanını Geri Yükle"
#: code:addons/web/static/src/js/chrome.js:644
#, python-format
msgid "Login"
msgstr ""
msgstr "Kullanıcı Adı:"
#. module: web
#. openerp-web
@ -1272,14 +1276,14 @@ msgstr "Çıkış Yap"
#: code:addons/web/static/src/js/search.js:1090
#, python-format
msgid "Group by: %s"
msgstr "Grupla : %s"
msgstr "Grupla ile : %s"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:153
#, python-format
msgid "No data provided."
msgstr ""
msgstr "Hiç veri sağlanmadı."
#. module: web
#. openerp-web
@ -1350,14 +1354,14 @@ msgstr "%(page)d/%(page_count)d"
#: code:addons/web/static/src/js/chrome.js:397
#, python-format
msgid "The confirmation does not match the password"
msgstr ""
msgstr "Şifre ve doğrulaması uyuşmuyor."
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:441
#, python-format
msgid "Edit Company data"
msgstr ""
msgstr "Şirket Bilgilerini düzenle"
#. module: web
#. openerp-web
@ -1396,7 +1400,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:394
#, python-format
msgid "99+"
msgstr ""
msgstr "99+"
#. module: web
#. openerp-web
@ -1410,7 +1414,7 @@ msgstr ".CSV Dosyasından veri al"
#: code:addons/web/static/src/js/chrome.js:644
#, python-format
msgid "No database selected !"
msgstr ""
msgstr "Veritabanı Seçilmedi !"
#. module: web
#. openerp-web
@ -1424,7 +1428,7 @@ msgstr "(%d kayıt)"
#: code:addons/web/static/src/xml/base.xml:970
#, python-format
msgid "Change default:"
msgstr "Varsayılanı değiştir:"
msgstr "Öntanılıyı değiştir:"
#. module: web
#. openerp-web
@ -1448,7 +1452,7 @@ msgstr "eşittir"
#: code:addons/web/static/src/js/views.js:1500
#, python-format
msgid "Could not serialize XML"
msgstr ""
msgstr "XML serileştirilemedi"
#. module: web
#. openerp-web
@ -1553,14 +1557,14 @@ msgstr "Ağaç"
#: code:addons/web/controllers/main.py:750
#, python-format
msgid "Could not drop database !"
msgstr ""
msgstr "Veritabanı Silinemedi !"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/formats.js:227
#, python-format
msgid "'%s' is not a correct integer"
msgstr ""
msgstr "'%s' geçerli bir tamsayı (interger) değil"
#. module: web
#. openerp-web
@ -1581,7 +1585,7 @@ msgstr "Bilinmeyen alan %s alan adında %s"
#: code:addons/web/static/src/js/views.js:1466
#, python-format
msgid "Node [%s] is not a JSONified XML node"
msgstr ""
msgstr "[%s] düğümü JSONlaştırılmış XML düğümü değil"
#. module: web
#. openerp-web
@ -1595,7 +1599,7 @@ msgstr "Gelişmiş Arama..."
#: code:addons/web/static/src/js/chrome.js:499
#, python-format
msgid "Dropping database"
msgstr ""
msgstr "Veritabanı Siliniyor"
#. module: web
#. openerp-web
@ -1639,7 +1643,7 @@ msgstr "Boy:"
#: code:addons/web/static/src/xml/base.xml:1824
#, python-format
msgid "--- Don't Import ---"
msgstr "--- İçeri Alma ---"
msgstr "--- İçeri Aktarma ---"
#. module: web
#. openerp-web
@ -1660,7 +1664,7 @@ msgstr "%d yıl önce"
#: code:addons/web/static/src/js/view_list.js:1040
#, python-format
msgid "Unknown m2m command %s"
msgstr ""
msgstr "Bilinmeyen m2m komutu %s"
#. module: web
#. openerp-web
@ -1683,7 +1687,7 @@ msgstr "Yeni Veritaban adı:"
#: code:addons/web/static/src/js/chrome.js:394
#, python-format
msgid "Please enter your new password"
msgstr ""
msgstr "Lütfen yeni parolanızı girin"
#. module: web
#. openerp-web
@ -1711,7 +1715,7 @@ msgstr "Kodlama:"
#: code:addons/web/static/src/xml/base.xml:1808
#, python-format
msgid "Lines to skip"
msgstr "atlanacak satırlar"
msgstr "Atlanacak satırlar"
#. module: web
#. openerp-web
@ -1768,14 +1772,14 @@ msgstr "JS Testleri"
#: code:addons/web/static/src/xml/base.xml:1750
#, python-format
msgid "Save as:"
msgstr "Save as:"
msgstr "Farklı kaydet:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/search.js:927
#, python-format
msgid "Filter on: %s"
msgstr "Filterele: %s"
msgstr "Filtrelede: %s"
#. module: web
#. openerp-web
@ -1797,7 +1801,7 @@ msgstr "Alanları Göster"
#: code:addons/web/static/src/xml/base.xml:330
#, python-format
msgid "Confirm New Password:"
msgstr ""
msgstr "Yeni Parolayı Onaylayın:"
#. module: web
#. openerp-web
@ -1833,14 +1837,14 @@ msgstr "Veri Dışaaktar"
#: code:addons/web/static/src/xml/base.xml:962
#, python-format
msgid "Domain:"
msgstr "Alan:"
msgstr "Domain:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:834
#, python-format
msgid "Default:"
msgstr "Varsayılan:"
msgstr "Öntanımlı:"
#. module: web
#. openerp-web
@ -1855,7 +1859,7 @@ msgstr "OpenERP"
#: code:addons/web/doc/module/static/src/xml/web_example.xml:8
#, python-format
msgid "Stop"
msgstr ""
msgstr "Durdur"
#. module: web
#. openerp-web
@ -1879,7 +1883,7 @@ msgstr "Yükleniyor ..."
#: code:addons/web/static/src/xml/base.xml:1853
#, python-format
msgid "Name:"
msgstr "İsim:"
msgstr "Adı:"
#. module: web
#. openerp-web
@ -1893,7 +1897,7 @@ msgstr "Hakkında"
#: code:addons/web/static/src/xml/base.xml:1431
#, python-format
msgid "Search Again"
msgstr "Yeniden Ara"
msgstr "Yeniden Arama"
#. module: web
#. openerp-web
@ -1932,7 +1936,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:537
#, python-format
msgid "Set Defaults"
msgstr "Varsayılanları Ayarla"
msgstr "Öntanımlı Ayarla"
#. module: web
#. openerp-web
@ -1967,14 +1971,14 @@ msgstr "Filtre Adı:"
#: code:addons/web/static/src/xml/base.xml:946
#, python-format
msgid "Type:"
msgstr "Tip:"
msgstr "Türü:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:538
#, python-format
msgid "Incorrect super-administrator password"
msgstr ""
msgstr "Geçersiz super-yönetici şifresi"
#. module: web
#. openerp-web
@ -2016,6 +2020,7 @@ msgid ""
"The type of the field '%s' must be a many2many field with a relation to "
"'ir.attachment' model."
msgstr ""
"'%s' alanı 'ir.attachment' modeline many2many ile bağlı bir tipte olmalı"
#. module: web
#. openerp-web
@ -2037,7 +2042,7 @@ msgstr "Ekle: "
#: code:addons/web/static/src/xml/base.xml:1858
#, python-format
msgid "Quick Add"
msgstr "Hızlı ekle"
msgstr "Hızlı Ekle"
#. module: web
#. openerp-web
@ -2078,7 +2083,7 @@ msgstr "Örnek verileri yükle:"
#: code:addons/web/static/src/xml/base.xml:615
#, python-format
msgid "Created by :"
msgstr ""
msgstr "Oluşturan:"
#. module: web
#. openerp-web
@ -2086,7 +2091,7 @@ msgstr ""
#: code:addons/web/static/src/js/dates.js:26
#, python-format
msgid "'%s' is not a valid datetime"
msgstr ""
msgstr "'%s' geçersiz bir tarih saat değeri"
#. module: web
#. openerp-web
@ -2166,14 +2171,14 @@ msgstr "\"%s\" İndir"
#: code:addons/web/static/src/js/view_form.js:326
#, python-format
msgid "New"
msgstr ""
msgstr "Yeni"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_list.js:1767
#, python-format
msgid "Can't convert value %s to context"
msgstr ""
msgstr "%s değeri bağlama dönüştürülemiyor"
#. module: web
#. openerp-web
@ -2246,13 +2251,13 @@ msgstr "OpenERP Hakkında"
#: code:addons/web/static/src/js/formats.js:297
#, python-format
msgid "'%s' is not a correct date, datetime nor time"
msgstr ""
msgstr "'%s' geçerli bir tarih, saat ya da tarih saat değeri değil"
#. module: web
#: code:addons/web/controllers/main.py:1264
#, python-format
msgid "No content found for field '%s' on '%s:%s'"
msgstr ""
msgstr "'%s' alanı için içerik '%s:%s' bulunamadı"
#. module: web
#. openerp-web
@ -2280,7 +2285,7 @@ msgstr "Veritabanlarını Yönet"
#: code:addons/web/static/src/js/pyeval.js:765
#, python-format
msgid "Evaluation Error"
msgstr ""
msgstr "Değerlendirme Hatası"
#. module: web
#. openerp-web
@ -2313,7 +2318,7 @@ msgstr "Hayır"
#: code:addons/web/static/src/js/formats.js:309
#, python-format
msgid "'%s' is not convertible to date, datetime nor time"
msgstr ""
msgstr "'%s' tarih, tarihsaat veya saat biçimine çevrilemiyor"
#. module: web
#. openerp-web
@ -2373,14 +2378,14 @@ msgstr "Yedeklenmiş"
#: code:addons/web/static/src/xml/base.xml:1610
#, python-format
msgid "Use by default"
msgstr "Öntanımlı değer olarak kullan"
msgstr "Öntanımlı kullan"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_list.js:1348
#, python-format
msgid "%s (%d)"
msgstr ""
msgstr "%s (%d)"
#. module: web
#. openerp-web
@ -2408,7 +2413,7 @@ msgstr "Parçacık:"
#: code:addons/web/static/src/xml/base.xml:548
#, python-format
msgid "Edit Action"
msgstr "Eylemi Düzenle"
msgstr "İşlemi Düzenle"
#. module: web
#. openerp-web
@ -2422,7 +2427,7 @@ msgstr "ID:"
#: code:addons/web/static/src/xml/base.xml:870
#, python-format
msgid "Only you"
msgstr "sadece sen"
msgstr "Sadece sen"
#. module: web
#. openerp-web
@ -2443,7 +2448,7 @@ msgstr "Gerçekten bu eki silmek istediğinizden emin misiniz?"
#: code:addons/web/static/src/js/views.js:840
#, python-format
msgid "Technical Translation"
msgstr ""
msgstr "Terim Çevirileri"
#. module: web
#. openerp-web
@ -2457,21 +2462,21 @@ msgstr "Alan:"
#: code:addons/web/static/src/xml/base.xml:620
#, python-format
msgid "Modified by :"
msgstr ""
msgstr "Değiştiren :"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:499
#, python-format
msgid "The database %s has been dropped"
msgstr ""
msgstr "Veritabanu %s silindi"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:460
#, python-format
msgid "User's timezone"
msgstr ""
msgstr "Kullanıcı saat-dilimi"
#. module: web
#. openerp-web
@ -2500,7 +2505,7 @@ msgstr "Özel:"
#, python-format
msgid ""
"The old password you provided is incorrect, your password was not changed."
msgstr ""
msgstr "Eski şifrenizi yanlış girdiniz, şifreniz değiştirilemedi."
#. module: web
#. openerp-web
@ -2528,7 +2533,7 @@ msgstr "Kaydet & Kapat"
#: code:addons/web/static/src/js/view_form.js:2845
#, python-format
msgid "Search More..."
msgstr "Daha fazla ara..."
msgstr "Daha Fazla Ara..."
#. module: web
#. openerp-web
@ -2559,7 +2564,7 @@ msgstr "Kaldır"
#: code:addons/web/static/src/xml/base.xml:1062
#, python-format
msgid "Select date"
msgstr "Tarihi Seç"
msgstr "Tarihi seç"
#. module: web
#. openerp-web

File diff suppressed because it is too large Load Diff

View File

@ -85,7 +85,7 @@ class OpenERPSession(object):
self.jsonp_requests = {} # FIXME use a LRU
def send(self, service_name, method, *args):
code_string = "warning -- %s\n\n%s"
code_string = u"warning -- %s\n\n%s"
try:
return openerp.netsvc.dispatch_rpc(service_name, method, args)
except openerp.osv.osv.except_osv, e:
@ -95,13 +95,13 @@ class OpenERPSession(object):
except openerp.exceptions.AccessError, e:
raise xmlrpclib.Fault(code_string % ("AccessError", e), '')
except openerp.exceptions.AccessDenied, e:
raise xmlrpclib.Fault('AccessDenied', str(e))
raise xmlrpclib.Fault('AccessDenied', openerp.tools.ustr(e))
except openerp.exceptions.DeferredException, e:
formatted_info = "".join(traceback.format_exception(*e.traceback))
raise xmlrpclib.Fault(openerp.tools.ustr(e.message), formatted_info)
raise xmlrpclib.Fault(openerp.tools.ustr(e), formatted_info)
except Exception, e:
formatted_info = "".join(traceback.format_exception(*(sys.exc_info())))
raise xmlrpclib.Fault(openerp.tools.exception_to_unicode(e), formatted_info)
raise xmlrpclib.Fault(openerp.tools.ustr(e), formatted_info)
def proxy(self, service):
return Service(self, service)

View File

@ -1,4 +1,4 @@
@charset "UTF-8";
@charset "utf-8";
@font-face {
font-family: "mnmliconsRegular";
src: url("/web/static/src/font/mnmliconsv21-webfont.eot") format("eot");
@ -1242,8 +1242,6 @@
.openerp .oe_secondary_submenu {
padding: 2px 0 8px 0;
margin: 0;
width: 220px;
display: inline-block;
}
.openerp .oe_secondary_submenu li {
position: relative;
@ -1417,7 +1415,13 @@
display: inline-block;
overflow: hidden;
}
.openerp .oe_view_manager {
display: table;
height: inherit;
width: 100%;
}
.openerp .oe_view_manager .oe_view_manager_body {
display: table-row;
height: inherit;
}
.openerp .oe_view_manager .oe_view_manager_view_kanban {
@ -3091,7 +3095,6 @@
}
.kitten-mode-activated {
background-image: url(http://placekitten.com/g/1365/769);
background-size: cover;
background-attachment: fixed;
}

View File

@ -1009,8 +1009,6 @@ $sheet-padding: 16px
.oe_secondary_submenu
padding: 2px 0 8px 0
margin: 0
width: 220px
display: inline-block
li
position: relative
margin: 0
@ -1139,7 +1137,11 @@ $sheet-padding: 16px
// }}}
// ViewManager common {{{
.oe_view_manager
display: table
height: inherit
width: 100%
.oe_view_manager_body
display: table-row
height: inherit
.oe_view_manager_view_kanban
height: inherit
@ -2438,7 +2440,6 @@ $sheet-padding: 16px
// }}}
// Kitten Mode {{{
.kitten-mode-activated
background-image: url(http://placekitten.com/g/1365/769)
background-size: cover
background-attachment: fixed
>*

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -481,6 +481,7 @@ instance.web.DatabaseManager = instance.web.Widget.extend({
self.do_action("reload");
},
},
_push_me: false,
};
self.do_action(client_action);
});
@ -868,7 +869,7 @@ instance.web.Menu = instance.web.Widget.extend({
this.needaction_data = data;
_.each(this.needaction_data, function (item, menu_id) {
var $item = self.$secondary_menus.find('a[data-menu="' + menu_id + '"]');
$item.remove('oe_menu_counter');
$item.find('.oe_menu_counter').remove();
if (item.needaction_counter && item.needaction_counter > 0) {
$item.append(QWeb.render("Menu.needaction_counter", { widget : item }));
}
@ -1047,6 +1048,9 @@ instance.web.UserMenu = instance.web.Widget.extend({
};
this.update_promise = this.update_promise.then(fct, fct);
},
on_menu_help: function() {
window.open('http://help.openerp.com', '_blank');
},
on_menu_logout: function() {
this.trigger('user_logout');
},
@ -1157,6 +1161,7 @@ instance.web.WebClient = instance.web.Client.extend({
return $.when(this._super()).then(function() {
if (jQuery.param !== undefined && jQuery.deparam(jQuery.param.querystring()).kitten !== undefined) {
$("body").addClass("kitten-mode-activated");
$("body").css("background-image", "url(" + instance.session.origin + "/web/static/src/img/back-enable.jpg" + ")");
if ($.blockUI) {
$.blockUI.defaults.message = '<img src="http://www.amigrave.com/kitten.gif">';
}
@ -1347,9 +1352,10 @@ instance.web.WebClient = instance.web.Client.extend({
.then(function (result) {
return self.action_mutex.exec(function() {
if (options.needaction) {
result.context = new instance.web.CompoundContext(
result.context,
{search_default_message_unread: true});
result.context = new instance.web.CompoundContext(result.context, {
search_default_message_unread: true,
search_disable_custom_filters: true,
});
}
var completed = $.Deferred();
$.when(self.action_manager.do_action(result, {
@ -1370,13 +1376,9 @@ instance.web.WebClient = instance.web.Client.extend({
});
},
set_content_full_screen: function(fullscreen) {
if (fullscreen) {
$(".oe_webclient", this.$el).addClass("oe_content_full_screen");
$("body").css({'overflow-y':'hidden'});
} else {
$(".oe_webclient", this.$el).removeClass("oe_content_full_screen");
$("body").css({'overflow-y':'scroll'});
}
$(document.body).css('overflow-y', fullscreen ? 'hidden' : 'scroll');
this.$('.oe_webclient').toggleClass(
'oe_content_full_screen', fullscreen);
},
has_uncommitted_changes: function() {
var $e = $.Event('clear_uncommitted_changes');

View File

@ -166,9 +166,13 @@ instance.web.format_value = function (value, descriptor, value_if_empty) {
value = Math.abs(value);
pattern = '-' + pattern;
}
return _.str.sprintf(pattern,
Math.floor(value),
Math.round((value % 1) * 60));
var hour = Math.floor(value);
var min = Math.round((value % 1) * 60);
if (min == 60){
min = 0;
hour = hour + 1;
}
return _.str.sprintf(pattern, hour, min);
case 'many2one':
// name_get value format
return value[1] ? value[1].split("\n")[0] : value[1];

View File

@ -689,15 +689,14 @@ openerp.web.pyeval = function (instance) {
};
instance.web.pyeval.context = function () {
return {
uid: py.float.fromJSON(instance.session.uid),
return _.extend({
datetime: datetime,
context_today: context_today,
time: time,
relativedelta: relativedelta,
current_date: py.PY_call(
time.strftime, [py.str.fromJSON('%Y-%m-%d')]),
};
}, instance.session.user_context);
};
/**

View File

@ -127,41 +127,26 @@ my.InputView = instance.web.Widget.extend({
events: {
focus: function () { this.trigger('focused', this); },
blur: function () { this.$el.text(''); this.trigger('blurred', this); },
keydown: 'onKeydown'
keydown: 'onKeydown',
paste: 'onPaste',
},
getSelection: function () {
// get Text node
var root = this.$el[0].childNodes[0];
var root = this.el.childNodes[0];
if (!root || !root.textContent) {
// if input does not have a child node, or the child node is an
// empty string, then the selection can only be (0, 0)
return {start: 0, end: 0};
}
if (window.getSelection) {
var domRange = window.getSelection().getRangeAt(0);
assert(domRange.startContainer === root,
"selection should be in the input view");
assert(domRange.endContainer === root,
"selection should be in the input view");
return {
start: domRange.startOffset,
end: domRange.endOffset
}
} else if (document.selection) {
var ieRange = document.selection.createRange();
var rangeParent = ieRange.parentElement();
assert(rangeParent === root,
"selection should be in the input view");
var offsetRange = document.body.createTextRange();
offsetRange = offsetRange.moveToElementText(rangeParent);
offsetRange.setEndPoint("EndToStart", ieRange);
var start = offsetRange.text.length;
return {
start: start,
end: start + ieRange.text.length
}
var range = window.getSelection().getRangeAt(0);
assert(range.startContainer === root,
"selection should be in the input view");
assert(range.endContainer === root,
"selection should be in the input view");
return {
start: range.startOffset,
end: range.endOffset
}
throw new Error("Could not get caret position");
},
onKeydown: function (e) {
var sel;
@ -199,6 +184,50 @@ my.InputView = instance.web.Widget.extend({
}
break;
}
},
setCursorAtEnd: function () {
var sel = window.getSelection();
sel.removeAllRanges();
var range = document.createRange();
// in theory, range.selectNodeContents should work here. In practice,
// MSIE9 has issues from time to time, instead of selecting the inner
// text node it would select the reference node instead (e.g. in demo
// data, company news, copy across the "Company News" link + the title,
// from about half the link to half the text, paste in search box then
// hit the left arrow key, getSelection would blow up).
//
// Explicitly selecting only the inner text node (only child node at
// this point, though maybe we should assert that) avoiids the issue
range.selectNode(this.el.childNodes[0]);
range.collapse(false);
sel.addRange(range);
},
onPaste: function () {
// In MSIE and Webkit, it is possible to get various representations of
// the clipboard data at this point e.g.
// window.clipboardData.getData('Text') and
// event.clipboardData.getData('text/plain') to ensure we have a plain
// text representation of the object (and probably ensure the object is
// pastable as well, so nobody puts an image in the search view)
// (nb: since it's not possible to alter the content of the clipboard
// — at least in Webkit — to ensure only textual content is available,
// using this would require 1. getting the text data; 2. manually
// inserting the text data into the content; and 3. cancelling the
// paste event)
//
// But Firefox doesn't support the clipboard API (as of FF18)
// although it correctly triggers the paste event (Opera does not even
// do that) => implement lowest-denominator system where onPaste
// triggers a followup "cleanup" pass after the data has been pasted
setTimeout(function () {
// Read text content (ignore pasted HTML)
var data = this.$el.text();
// paste raw text back in
this.$el.empty().text(data);
// Set the cursor at the end of the text, so the cursor is not lost
// in some kind of error-spawning limbo.
this.setCursorAtEnd();
}.bind(this), 0);
}
});
my.FacetView = instance.web.Widget.extend({
@ -668,7 +697,7 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
return filter.user_id && filter.is_default;
});
if (personal_filter) {
this.custom_filters.enable_filter(personal_filter, true);
this.custom_filters.toggle_filter(personal_filter, true);
return;
}
@ -676,7 +705,7 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
return !filter.user_id && filter.is_default;
});
if (global_filter) {
this.custom_filters.enable_filter(global_filter, true);
this.custom_filters.toggle_filter(global_filter, true);
return;
}
}
@ -1569,6 +1598,7 @@ instance.web.search.CustomFilters = instance.web.search.Input.extend({
get_groupby: function () { return [filter.context]; },
get_domain: function () { return filter.domain; }
},
_id: filter['id'],
is_custom_filter: true,
values: [{label: filter.name, value: null}]
};
@ -1579,6 +1609,7 @@ instance.web.search.CustomFilters = instance.web.search.Input.extend({
append_filter: function (filter) {
var self = this;
var key = this.key_for(filter);
var warning = _t("This filter is global and will be removed for everybody if you continue.");
var $filter;
if (key in this.$filters) {
@ -1596,6 +1627,9 @@ instance.web.search.CustomFilters = instance.web.search.Input.extend({
$('<a class="oe_searchview_custom_delete">x</a>')
.click(function (e) {
e.stopPropagation();
if (!(filter.user_id || confirm(warning))) {
return;
}
self.model.call('unlink', [id]).done(function () {
$filter.remove();
delete self.$filters[key];
@ -1606,10 +1640,18 @@ instance.web.search.CustomFilters = instance.web.search.Input.extend({
}
$filter.unbind('click').click(function () {
self.enable_filter(filter);
self.toggle_filter(filter);
});
},
enable_filter: function (filter, preventSearch) {
toggle_filter: function (filter, preventSearch) {
var current = this.view.query.find(function (facet) {
return facet.get('_id') === filter.id;
});
if (current) {
this.view.query.remove(current);
this.$filters[this.key_for(filter)].removeClass('oe_selected');
return;
}
this.view.query.reset([this.facet_for(filter)], {
preventSearch: preventSearch || false});
this.$filters[this.key_for(filter)].addClass('oe_selected');
@ -1718,10 +1760,12 @@ instance.web.search.Advanced = instance.web.search.Input.extend({
});
return $.when(
this._super(),
new instance.web.Model(this.view.model).call('fields_get').done(function(data) {
self.fields = _.extend({
id: { string: 'ID', type: 'id' }
}, data);
new instance.web.Model(this.view.model).call('fields_get', {
context: this.view.dataset.context
}).done(function(data) {
self.fields = _.extend({
id: { string: 'ID', type: 'id' }
}, data);
})).done(function () {
self.append_proposition();
});
@ -1772,6 +1816,7 @@ instance.web.search.ExtendedSearchProposition = instance.web.Widget.extend(/** @
template: 'SearchView.extended_search.proposition',
events: {
'change .searchview_extended_prop_field': 'changed',
'change .searchview_extended_prop_op': 'operator_changed',
'click .searchview_extended_delete_prop': function (e) {
e.stopPropagation();
this.getParent().remove_proposition(this);
@ -1788,6 +1833,7 @@ instance.web.search.ExtendedSearchProposition = instance.web.Widget.extend(/** @
this._super(parent);
this.fields = _(fields).chain()
.map(function(val, key) { return _.extend({}, val, {'name': key}); })
.filter(function (field) { return !field.deprecated; })
.sortBy(function(field) {return field.string;})
.value();
this.attrs = {_: _, fields: this.fields, selected: null};
@ -1802,6 +1848,17 @@ instance.web.search.ExtendedSearchProposition = instance.web.Widget.extend(/** @
this.select_field(_.detect(this.fields, function(x) {return x.name == nval;}));
}
},
operator_changed: function (e) {
var $value = this.$('.searchview_extended_prop_value');
switch ($(e.target).val()) {
case '∃':
case '∄':
$value.hide();
break;
default:
$value.show();
}
},
/**
* Selects the provided field object
*
@ -1830,7 +1887,7 @@ instance.web.search.ExtendedSearchProposition = instance.web.Widget.extend(/** @
.text(String(operator.text))
.appendTo(self.$('.searchview_extended_prop_op'));
});
var $value_loc = this.$('.searchview_extended_prop_value').empty();
var $value_loc = this.$('.searchview_extended_prop_value').show().empty();
this.value.appendTo($value_loc);
},
@ -1838,19 +1895,12 @@ instance.web.search.ExtendedSearchProposition = instance.web.Widget.extend(/** @
if ( this.attrs.selected == null)
return null;
var field = this.attrs.selected;
var op = this.$('.searchview_extended_prop_op')[0];
var operator = op.options[op.selectedIndex];
var op_select = this.$('.searchview_extended_prop_op')[0];
var operator = op_select.options[op_select.selectedIndex];
return {
label: _.str.sprintf(_t('%(field)s %(operator)s "%(value)s"'), {
field: field.string,
// According to spec, HTMLOptionElement#label should return
// HTMLOptionElement#text when not defined/empty, but it does
// not in older Webkit (between Safari 5.1.5 and Chrome 17) and
// Gecko (pre Firefox 7) browsers, so we need a manual fallback
// for those
operator: operator.label || operator.text,
value: this.value}),
value: [field.name, operator.value, this.value.get_value()]
label: this.value.get_label(field, operator),
value: this.value.get_domain(field, operator),
};
}
});
@ -1860,6 +1910,37 @@ instance.web.search.ExtendedSearchProposition.Field = instance.web.Widget.extend
this._super(parent);
this.field = field;
},
get_label: function (field, operator) {
var format;
switch (operator.value) {
case '∃': case '∄': format = _t('%(field)s %(operator)s'); break;
default: format = _t('%(field)s %(operator)s "%(value)s"'); break;
}
return this.format_label(format, field, operator);
},
format_label: function (format, field, operator) {
return _.str.sprintf(format, {
field: field.string,
// According to spec, HTMLOptionElement#label should return
// HTMLOptionElement#text when not defined/empty, but it does
// not in older Webkit (between Safari 5.1.5 and Chrome 17) and
// Gecko (pre Firefox 7) browsers, so we need a manual fallback
// for those
operator: operator.label || operator.text,
value: this
});
},
get_domain: function (field, operator) {
switch (operator.value) {
case '∃': return this.make_domain(field.name, '!=', false);
case '∄': return this.make_domain(field.name, '=', false);
default: return this.make_domain(
field.name, operator.value, this.get_value());
}
},
make_domain: function (field, operator, value) {
return [field, operator, value];
},
/**
* Returns a human-readable version of the value, in case the "logical"
* and the "semantic" values of a field differ (as for selection fields,
@ -1879,7 +1960,9 @@ instance.web.search.ExtendedSearchProposition.Char = instance.web.search.Extende
{value: "ilike", text: _lt("contains")},
{value: "not ilike", text: _lt("doesn't contain")},
{value: "=", text: _lt("is equal to")},
{value: "!=", text: _lt("is not equal to")}
{value: "!=", text: _lt("is not equal to")},
{value: "∃", text: _lt("is set")},
{value: "∄", text: _lt("is not set")}
],
get_value: function() {
return this.$el.val();
@ -1893,7 +1976,9 @@ instance.web.search.ExtendedSearchProposition.DateTime = instance.web.search.Ext
{value: ">", text: _lt("greater than")},
{value: "<", text: _lt("less than")},
{value: ">=", text: _lt("greater or equal than")},
{value: "<=", text: _lt("less or equal than")}
{value: "<=", text: _lt("less or equal than")},
{value: "∃", text: _lt("is set")},
{value: "∄", text: _lt("is not set")}
],
/**
* Date widgets live in view_form which is not yet loaded when this is
@ -1927,7 +2012,9 @@ instance.web.search.ExtendedSearchProposition.Integer = instance.web.search.Exte
{value: ">", text: _lt("greater than")},
{value: "<", text: _lt("less than")},
{value: ">=", text: _lt("greater or equal than")},
{value: "<=", text: _lt("less or equal than")}
{value: "<=", text: _lt("less or equal than")},
{value: "∃", text: _lt("is set")},
{value: "∄", text: _lt("is not set")}
],
toString: function () {
return this.$el.val();
@ -1952,7 +2039,9 @@ instance.web.search.ExtendedSearchProposition.Float = instance.web.search.Extend
{value: ">", text: _lt("greater than")},
{value: "<", text: _lt("less than")},
{value: ">=", text: _lt("greater or equal than")},
{value: "<=", text: _lt("less or equal than")}
{value: "<=", text: _lt("less or equal than")},
{value: "∃", text: _lt("is set")},
{value: "∄", text: _lt("is not set")}
],
toString: function () {
return this.$el.val();
@ -1970,7 +2059,9 @@ instance.web.search.ExtendedSearchProposition.Selection = instance.web.search.Ex
template: 'SearchView.extended_search.proposition.selection',
operators: [
{value: "=", text: _lt("is")},
{value: "!=", text: _lt("is not")}
{value: "!=", text: _lt("is not")},
{value: "∃", text: _lt("is set")},
{value: "∄", text: _lt("is not set")}
],
toString: function () {
var select = this.$el[0];
@ -1987,7 +2078,10 @@ instance.web.search.ExtendedSearchProposition.Boolean = instance.web.search.Exte
{value: "=", text: _lt("is true")},
{value: "!=", text: _lt("is false")}
],
toString: function () { return ''; },
get_label: function (field, operator) {
return this.format_label(
_t('%(field)s %(operator)s'), field, operator);
},
get_value: function() {
return true;
}

View File

@ -251,9 +251,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
this.dataset.ids.push(state.id);
}
this.dataset.select_id(state.id);
if (warm) {
this.do_show();
}
this.do_show({ reload: warm });
}
},
/**
@ -511,9 +509,13 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
var on_change = widget.node.attrs.on_change;
if (on_change) {
var change_spec = self.parse_on_change(on_change, widget);
var id = [self.datarecord.id == null ? [] : [self.datarecord.id]];
var ids = [];
if (self.datarecord.id && !instance.web.BufferedDataSet.virtual_id_regex.test(self.datarecord.id)) {
// In case of a o2m virtual id, we should pass an empty ids list
ids.push(self.datarecord.id);
}
def = new instance.web.Model(self.dataset.model).call(
change_spec.method, id.concat(change_spec.args));
change_spec.method, [ids].concat(change_spec.args));
} else {
def = $.when({});
}
@ -573,19 +575,14 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
]
});
}
if (result.domain) {
function edit_domain(node) {
if (typeof node !== "object") {
return;
}
var new_domain = result.domain[node.attrs.name];
if (new_domain) {
node.attrs.domain = new_domain;
}
_(node.children).each(edit_domain);
}
edit_domain(this.fields_view.arch);
}
var fields = this.fields;
_(result.domain).each(function (domain, fieldname) {
var field = fields[fieldname];
if (!field) { return; }
field.node.attrs.domain = domain;
});
return $.Deferred().resolve();
} catch(e) {
console.error(e);
@ -2381,6 +2378,7 @@ instance.web.DateTimeWidget = instance.web.Widget.extend({
type_of_date: "datetime",
events: {
'change .oe_datepicker_master': 'change_datetime',
'dragstart img.oe_datepicker_trigger': function () { return false; },
},
init: function(parent) {
this._super(parent);
@ -2962,7 +2960,9 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
case $.ui.keyCode.DOWN:
e.stopPropagation();
}
}
},
'dragstart .oe_m2o_drop_down_button img': function () { return false; },
'dragstart .oe_m2o_cm_button': function () { return false; }
},
init: function(field_manager, node) {
this._super(field_manager, node);
@ -4455,6 +4455,7 @@ instance.web.form.AbstractFormPopup = instance.web.Widget.extend({
* options:
* -readonly: only applicable when not in creation mode, default to false
* - alternative_form_view
* - view_id
* - write_function
* - read_function
* - create_function
@ -4521,7 +4522,7 @@ instance.web.form.AbstractFormPopup = instance.web.Widget.extend({
_.extend(options, {
$buttons: this.$buttonpane,
});
this.view_form = new instance.web.FormView(this, this.dataset, false, options);
this.view_form = new instance.web.FormView(this, this.dataset, this.options.view_id || false, options);
if (this.options.alternative_form_view) {
this.view_form.set_embedded_view(this.options.alternative_form_view);
}
@ -4550,6 +4551,7 @@ instance.web.form.AbstractFormPopup = instance.web.Widget.extend({
});
var $cbutton = self.$buttonpane.find(".oe_abstractformpopup-form-close");
$cbutton.click(function() {
self.view_form.trigger('on_button_cancel');
self.check_exit();
});
self.view_form.do_show();
@ -5221,6 +5223,8 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({
this.options.clickable = this.options.clickable || (this.node.attrs || {}).clickable || false;
this.options.visible = this.options.visible || (this.node.attrs || {}).statusbar_visible || false;
this.set({value: false});
this.field_manager.on("view_content_has_changed", this, this.render_value);
this.selection_mutex = new $.Mutex();
},
start: function() {
if (this.options.clickable) {
@ -5239,14 +5243,16 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({
},
render_value: function() {
var self = this;
self.get_selection().done(function() {
var content = QWeb.render("FieldStatus.content", {widget: self});
self.$el.html(content);
var colors = JSON.parse((self.node.attrs || {}).statusbar_colors || "{}");
var color = colors[self.get('value')];
if (color) {
self.$("oe_active").css("color", color);
}
self.selection_mutex.exec(function() {
return self.get_selection().done(function() {
var content = QWeb.render("FieldStatus.content", {widget: self});
self.$el.html(content);
var colors = JSON.parse((self.node.attrs || {}).statusbar_colors || "{}");
var color = colors[self.get('value')];
if (color) {
self.$("oe_active").css("color", color);
}
});
});
},
/** Get the selection and render it

View File

@ -1186,7 +1186,7 @@ instance.web.ListView.List = instance.web.Class.extend( /** @lends instance.web.
}
});
instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.web.ListView.Groups# */{
passtrough_events: 'action deleted row_link',
passthrough_events: 'action deleted row_link',
/**
* Grouped display for the ListView. Handles basic DOM events and interacts
* with the :js:class:`~DataGroup` bound to it.
@ -1406,7 +1406,7 @@ instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.we
// can have selections spanning multiple links
var selection = self.get_selection();
$this.trigger(e, [selection.ids, selection.records]);
}).bind(this.passtrough_events, function (e) {
}).bind(this.passthrough_events, function (e) {
// additional positional parameters are provided to trigger as an
// Array, following the event type or event object, but are
// provided to the .bind event handler as *args.

View File

@ -795,7 +795,7 @@ openerp.web.list_editable = function (instance) {
});
instance.web.ListView.Groups.include(/** @lends instance.web.ListView.Groups# */{
passtrough_events: instance.web.ListView.Groups.prototype.passtrough_events + " edit saved",
passthrough_events: instance.web.ListView.Groups.prototype.passthrough_events + " edit saved",
get_row_for: function (record) {
return _(this.children).chain()
.invoke('get_row_for', record)

View File

@ -190,6 +190,14 @@ instance.web.ActionManager = instance.web.Widget.extend({
});
state = _.extend(params || {}, state);
}
if (this.inner_action.context) {
if (this.inner_action.context.active_id) {
state["active_id"] = this.inner_action.context.active_id;
}
if (this.inner_action.context.active_ids) {
//state["active_ids"] = this.inner_action.context.active_ids.join(',');
}
}
}
if(!this.dialog) {
this.getParent().do_push_state(state);
@ -212,8 +220,20 @@ instance.web.ActionManager = instance.web.Widget.extend({
} else {
var run_action = (!this.inner_widget || !this.inner_widget.action) || this.inner_widget.action.id !== state.action;
if (run_action) {
var add_context = {};
if (state.active_id) {
add_context.active_id = state.active_id;
}
if (state.active_ids) {
// The jQuery BBQ plugin does some parsing on values that are valid integers.
// It means that if there's only one item, it will do parseInt() on it,
// otherwise it will keep the comma seperated list as string.
add_context.active_ids = state.active_ids.toString().split(',').map(function(id) {
return parseInt(id, 10) || id;
});
}
this.null_action();
action_loaded = this.do_action(state.action);
action_loaded = this.do_action(state.action, { additional_context: add_context });
$.when(action_loaded || null).done(function() {
instance.webclient.menu.has_been_loaded.done(function() {
if (self.inner_action && self.inner_action.id) {
@ -249,12 +269,25 @@ instance.web.ActionManager = instance.web.Widget.extend({
}
});
},
/**
* Execute an OpenERP action
*
* @param {Number|String|Object} Can be either an action id, a client action or an action descriptor.
* @param {Object} [options]
* @param {Boolean} [options.clear_breadcrumbs=false] Clear the breadcrumbs history list
* @param {Function} [options.on_reverse_breadcrumb] Callback to be executed whenever an anterior breadcrumb item is clicked on.
* @param {Function} [options.on_close] Callback to be executed when the dialog is closed (only relevant for target=new actions)
* @param {Function} [options.action_menu_id] Manually set the menu id on the fly.
* @param {Object} [options.additional_context] Additional context to be merged with the action's context.
* @return {jQuery.Deferred} Action loaded
*/
do_action: function(action, options) {
options = _.defaults(options || {}, {
clear_breadcrumbs: false,
on_reverse_breadcrumb: function() {},
on_close: function() {},
action_menu_id: null,
additional_context: {},
});
if (action === false) {
action = { type: 'ir.actions.act_window_close' };
@ -269,9 +302,13 @@ instance.web.ActionManager = instance.web.Widget.extend({
}
// Ensure context & domain are evaluated and can be manipulated/used
if (action.context) {
action.context = instance.web.pyeval.eval(
'context', action.context);
var ncontext = new instance.web.CompoundContext(options.additional_context, action.context || {});
action.context = instance.web.pyeval.eval('context', ncontext);
if (action.context.active_id || action.context.active_ids) {
// Here we assume that when an `active_id` or `active_ids` is used
// in the context, we are in a `related` action, so we disable the
// searchview's default custom filters.
action.context.search_disable_custom_filters = true;
}
if (action.domain) {
action.domain = instance.web.pyeval.eval(
@ -598,6 +635,12 @@ instance.web.ViewManager = instance.web.Widget.extend({
self.trigger("controller_inited",view_type,controller);
});
},
/**
* @returns {Number|Boolean} the view id of the given type, false if not found
*/
get_view_id: function(view_type) {
return this.views[view_type] && this.views[view_type].view_id || false;
},
set_title: function(title) {
this.$el.find('.oe_view_title_text:first').text(title);
},
@ -954,10 +997,11 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({
});
},
do_create_view: function(view_type) {
var r = this._super.apply(this, arguments);
var view = this.views[view_type].controller;
view.set({ 'title': this.action.name });
return r;
var self = this;
return this._super.apply(this, arguments).then(function() {
var view = self.views[view_type].controller;
view.set({ 'title': self.action.name });
});
},
get_action_manager: function() {
var cur = this;
@ -1271,11 +1315,6 @@ instance.web.View = instance.web.Widget.extend({
active_ids: [record_id],
active_model: dataset.model
});
if (("" + action.context).match(/\bactive_id\b/)) {
// Special case: when the context is evaluted using
// the active_id, we want to disable the custom filters.
ncontext.add({ search_disable_custom_filters: true });
}
}
ncontext.add(action.context || {});
action.context = ncontext;

View File

@ -403,8 +403,9 @@
<img class="oe_topbar_avatar" t-att-data-default-src="_s + '/web/static/src/img/user_menu_avatar.png'"/>
<span class="oe_topbar_name"/>
<ul class="oe_dropdown_menu">
<li><a href="#" data-menu="about">About OpenERP</a></li>
<li><a href="#" data-menu="settings">Preferences</a></li>
<li><a href="#" data-menu="about">About OpenERP</a></li>
<li><a href="#" data-menu="help">Help</a></li>
<li><a href="#" data-menu="logout">Log out</a></li>
</ul>
</span>
@ -1414,8 +1415,6 @@
this.removeAttr('t-if');
</t>
<t t-jquery="tfoot &gt; tr:last-child" t-operation="replace"/>
<t t-jquery="td.oe-actions">
this.removeAttr('t-if');
</t>
@ -1606,9 +1605,9 @@
<form>
<p><input id="oe_searchview_custom_input" placeholder="Filter name"/></p>
<p>
<input id="oe_searchview_custom_public" type="checkbox"/>
<input id="oe_searchview_custom_public" type="radio" name="oe_searchview_custom_filter"/>
<label for="oe_searchview_custom_public">Share with all users</label>
<input id="oe_searchview_custom_default" type="checkbox"/>
<input id="oe_searchview_custom_default" type="radio" name="oe_searchview_custom_filter"/>
<label for="oe_searchview_custom_default">Use by default</label>
</p>
<button>Save</button>

View File

@ -68,6 +68,12 @@ openerp.testing.section('web-formats', {
strictEqual(
instance.web.format_value(-0.0085, {type:'float', widget:'float_time'}),
'-00:01');
strictEqual(
instance.web.format_value(4.9999, {type:'float', widget:'float_time'}),
'05:00');
strictEqual(
instance.web.format_value(-6.9999, {type:'float', widget:'float_time'}),
'-07:00');
});
test("format_float", function (instance) {
var fl = 12.1234;

View File

@ -1038,6 +1038,44 @@ openerp.testing.section('saved_filters', {
"should not be checked anymore");
});
});
test('toggling', {asserts: 2}, function (instance, $fix, mock) {
var view = makeSearchView(instance);
mock('ir.filters:get_filters', function () {
return [{name: 'filter name', user_id: 42, id: 1}];
});
return view.appendTo($fix)
.done(function () {
var $row = $fix.find('.oe_searchview_custom li:first').click();
equal(view.query.length, 1, "should have one facet");
$row.click();
equal(view.query.length, 0, "should have removed facet");
});
});
test('replacement', {asserts: 4}, function (instance, $fix, mock) {
var view = makeSearchView(instance);
mock('ir.filters:get_filters', function () {
return [
{name: 'f', user_id: 42, id: 1, context: {'private': 1}},
{name: 'f', user_id: false, id: 2, context: {'private': 0}}
];
});
return view.appendTo($fix)
.done(function () {
$fix.find('.oe_searchview_custom li:eq(0)').click();
equal(view.query.length, 1, "should have one facet");
deepEqual(
view.query.at(0).get('field').get_context(),
{'private': 1},
"should have selected first filter");
$fix.find('.oe_searchview_custom li:eq(1)').click();
equal(view.query.length, 1, "should have one facet");
deepEqual(
view.query.at(0).get('field').get_context(),
{'private': 0},
"should have selected second filter");
});
});
});
openerp.testing.section('advanced', {
dependencies: ['web.search'],

View File

@ -18,7 +18,7 @@
.openerp .oe_calendar .dhx_cal_select_menu .dhx_menu_icon.icon_edit {
display: none;
}
.openerp .oe_calendar .dhx_cal_navline {
.openerp .oe_calendar .dhx_cal_navline, .openerp .oe_calendar .dhx_cal_header {
z-index: auto;
}
.openerp .oe_calendar.oe_cal_month .dhx_cal_data table tr td:last-child div.dhx_month_body {

View File

@ -20,7 +20,7 @@
// Dhtmlx Scheduler css overrides
.dhx_cal_select_menu .dhx_menu_icon.icon_edit
display: none
.dhx_cal_navline
.dhx_cal_navline, .dhx_cal_header
// dhtmlx sets the index to 3 (in glossy theme)
// I didn't found the reason yet but it overlaps the
// dropdown menus and I want to avoid a z-index war.

View File

@ -414,6 +414,20 @@ instance.web_calendar.CalendarView = instance.web.View.extend({
self.slow_create(event_id, event_obj);
});
},
get_form_popup_infos: function() {
var parent = this.getParent();
var infos = {
view_id: false,
title: this.name,
};
if (parent instanceof instance.web.ViewManager) {
infos.view_id = parent.get_view_id('form');
if (parent instanceof instance.web.ViewManagerAction && parent.action && parent.action.name) {
infos.title = parent.action.name;
}
}
return infos;
},
slow_create: function(event_id, event_obj) {
var self = this;
if (this.current_mode() === 'month') {
@ -431,9 +445,11 @@ instance.web_calendar.CalendarView = instance.web.View.extend({
});
var something_saved = false;
var pop = new instance.web.form.FormOpenPopup(this);
var pop_infos = this.get_form_popup_infos();
pop.show_element(this.dataset.model, null, this.dataset.get_context(defaults), {
title: _t("Create: ") + ' ' + this.name,
title: _.str.sprintf(_t("Create: %s"), pop_infos.title),
disable_multiple_selection: true,
view_id: pop_infos.view_id,
});
pop.on('closed', self, function() {
if (!something_saved) {
@ -465,9 +481,11 @@ instance.web_calendar.CalendarView = instance.web.View.extend({
});
} else {
var pop = new instance.web.form.FormOpenPopup(this);
var pop_infos = this.get_form_popup_infos();
var id_from_dataset = this.dataset.ids[index]; // dhtmlx scheduler loses id's type
pop.show_element(this.dataset.model, id_from_dataset, this.dataset.get_context(), {
title: _t("Edit: ") + this.name
title: _.str.sprintf(_t("Edit: %s"), pop_infos.title),
view_id: pop_infos.view_id,
});
pop.on('write_completed', self, function(){
self.reload_event(id_from_dataset);

View File

@ -8,14 +8,15 @@ msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2012-12-21 23:00+0000\n"
"Last-Translator: Luiz Fernando M.França <Unknown>\n"
"PO-Revision-Date: 2013-01-26 06:21+0000\n"
"Last-Translator: Fábio Martinelli - http://zupy.com.br "
"<webmaster@guaru.net>\n"
"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-12-22 07:39+0000\n"
"X-Generator: Launchpad (build 16378)\n"
"X-Launchpad-Export-Date: 2013-01-27 05:10+0000\n"
"X-Generator: Launchpad (build 16451)\n"
#. module: web_graph
#. openerp-web
@ -85,7 +86,7 @@ msgstr "Radar"
#: code:addons/web_graph/static/src/xml/web_graph.xml:34
#, python-format
msgid "Download as PNG"
msgstr "Download um PNG"
msgstr "Download como PNG"
#. module: web_graph
#. openerp-web

View File

@ -8,14 +8,15 @@ msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2012-12-21 23:00+0000\n"
"Last-Translator: Cristiano Korndörfer <codigo.aberto@dorfer.com.br>\n"
"PO-Revision-Date: 2013-01-26 06:23+0000\n"
"Last-Translator: Fábio Martinelli - http://zupy.com.br "
"<webmaster@guaru.net>\n"
"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-12-22 07:39+0000\n"
"X-Generator: Launchpad (build 16378)\n"
"X-Launchpad-Export-Date: 2013-01-27 05:10+0000\n"
"X-Generator: Launchpad (build 16451)\n"
#. module: web_kanban
#. openerp-web
@ -93,7 +94,7 @@ msgstr "Dobrar"
#: code:addons/web_kanban/static/src/xml/web_kanban.xml:91
#, python-format
msgid "Add"
msgstr "Incluir"
msgstr "Adicionar"
#. module: web_kanban
#. openerp-web
@ -107,7 +108,7 @@ msgstr "Criar rapidamente"
#: code:addons/web_kanban/static/src/js/kanban.js:936
#, python-format
msgid "Are you sure you want to delete this record ?"
msgstr "Você tem certeza que quer deletar este registro ?"
msgstr "Você tem certeza que quer excluir este registro ?"
#. module: web_kanban
#. openerp-web

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2012-12-21 23:00+0000\n"
"Last-Translator: Ahmet Altınışık <Unknown>\n"
"PO-Revision-Date: 2013-02-15 20:44+0000\n"
"Last-Translator: Ayhan KIZILTAN <Unknown>\n"
"Language-Team: Turkish <tr@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-12-22 07:39+0000\n"
"X-Generator: Launchpad (build 16378)\n"
"X-Launchpad-Export-Date: 2013-02-16 05:40+0000\n"
"X-Generator: Launchpad (build 16491)\n"
#. module: web_kanban
#. openerp-web
@ -29,7 +29,7 @@ msgstr "Sütunu düzenle"
#: code:addons/web_kanban/static/src/js/kanban.js:418
#, python-format
msgid "An error has occured while moving the record to this group."
msgstr ""
msgstr "Kayıt bu gruba taşınırken bir hata oluştu."
#. module: web_kanban
#. openerp-web
@ -150,7 +150,7 @@ msgstr "veya"
#: code:addons/web_kanban/static/src/xml/web_kanban.xml:51
#, python-format
msgid "99+"
msgstr ""
msgstr "99+"
#. module: web_kanban
#. openerp-web

View File

@ -92,12 +92,21 @@
overflow: hidden;
text-overflow: ellipsis;
}
.openerp .oe_kanban_view .oe_kanban_group_title .oe_kanban_group_length {
.openerp .oe_kanban_view .oe_kanban_group_length {
text-align: center;
display: none;
}
.openerp .oe_kanban_view .oe_kanban_group_length .oe_tag {
position: relative;
top: +8px;
font-weight: bold;
}
.openerp .oe_kanban_view .oe_fold_column .oe_kanban_group_length {
position: absolute;
top: -1px;
right: -14px;
text-align: center;
float: right;
display: block;
}
.openerp .oe_kanban_view .oe_kanban_header:hover .oe_kanban_group_length {
display: none;
@ -141,7 +150,8 @@
.openerp .oe_kanban_view .oe_kanban_group_folded .oe_kanban_group_title, .openerp .oe_kanban_view .oe_kanban_group_folded.oe_kanban_column *, .openerp .oe_kanban_view .oe_kanban_group_folded .oe_kanban_aggregates, .openerp .oe_kanban_view .oe_kanban_group_folded .oe_kanban_add {
display: none;
}
.openerp .oe_kanban_view .oe_kanban_group_folded .oe_kanban_group_title_vertical {
.openerp .oe_kanban_view .oe_kanban_group_folded .oe_kanban_group_title_vertical,
.openerp .oe_kanban_view .oe_kanban_group_folded .oe_kanban_group_length {
display: block;
}
.openerp .oe_kanban_view .oe_kanban_group_folded .oe_dropdown_kanban {
@ -163,7 +173,7 @@
display: none;
position: relative;
opacity: 0.75;
top: 20px;
top: 26px;
}
.openerp .oe_kanban_view .oe_kanban_add, .openerp .oe_kanban_view .oe_kanban_header .oe_dropdown_toggle {
margin-left: 4px;
@ -175,6 +185,7 @@
}
.openerp .oe_kanban_view .oe_kanban_header .oe_dropdown_toggle {
top: -2px;
height: 14px;
}
.openerp .oe_kanban_view .oe_kanban_card, .openerp .oe_kanban_view .oe_dropdown_toggle {
cursor: pointer;

View File

@ -54,6 +54,13 @@
&.oe_kanban_grouped .oe_kanban_dummy_cell
background: url(/web/static/src/img/form_sheetbg.png)
width: 100%
.oe_kanban_group_length
text-align: center
display: none
.oe_tag
position: relative
top: +8px
font-weight: bold
.ui-sortable-placeholder
border: 1px solid rgba(0,0,0,0.1)
visibility: visible !important
@ -118,12 +125,13 @@
white-space: nowrap
overflow: hidden
text-overflow: ellipsis
.oe_fold_column
.oe_kanban_group_length
position: absolute
top: -1px
right: -14px
text-align: center
float: right
display: block
&.oe_kanban_grouped
.oe_kanban_column, .oe_kanban_group_header
width: 185px
@ -159,7 +167,7 @@
.oe_kanban_group_folded
.oe_kanban_group_title, &.oe_kanban_column *, .oe_kanban_aggregates, .oe_kanban_add
display: none
.oe_kanban_group_title_vertical
.oe_kanban_group_title_vertical, .oe_kanban_group_length
display: block
.oe_dropdown_kanban
left: -5px
@ -178,7 +186,7 @@
display: none
position: relative
opacity: 0.75
top: 20px
top: 26px
// }}}
// KanbanQuickCreate {{{
.oe_kanban_add, .oe_kanban_header .oe_dropdown_toggle
@ -189,6 +197,7 @@
top: -8px
.oe_kanban_header .oe_dropdown_toggle
top: -2px
height: 14px;
.oe_kanban_card, .oe_dropdown_toggle
cursor: pointer
display: inline-block

View File

@ -134,7 +134,9 @@ instance.web_kanban.KanbanView = instance.web.View.extend({
switch (node.tag) {
case 'field':
if (this.fields_view.fields[node.attrs.name].type === 'many2many') {
this.many2manys.push(node.attrs.name);
if (_.indexOf(this.many2manys, node.attrs.name) < 0) {
this.many2manys.push(node.attrs.name);
}
node.tag = 'div';
node.attrs['class'] = (node.attrs['class'] || '') + ' oe_form_field oe_tags';
} else {
@ -227,14 +229,15 @@ instance.web_kanban.KanbanView = instance.web.View.extend({
this.search_domain = domain;
this.search_context = context;
this.search_group_by = group_by;
$.when(this.has_been_loaded).done(function() {
return $.when(this.has_been_loaded).then(function() {
self.group_by = group_by.length ? group_by[0] : self.fields_view.arch.attrs.default_group_by;
self.group_by_field = self.fields_view.fields[self.group_by] || {};
self.grouped_by_m2o = (self.group_by_field.type === 'many2one');
self.$buttons.find('.oe_alternative').toggle(self.grouped_by_m2o);
self.$el.toggleClass('oe_kanban_grouped_by_m2o', self.grouped_by_m2o);
var grouping = new instance.web.Model(self.dataset.model, context, domain).query().group_by(self.group_by);
$.when(grouping).done(function(groups) {
var grouping_fields = self.group_by ? [self.group_by].concat(_.keys(self.aggregates)) : undefined;
var grouping = new instance.web.Model(self.dataset.model, context, domain).query().group_by(grouping_fields);
return $.when(grouping).done(function(groups) {
if (groups) {
self.do_process_groups(groups);
} else {
@ -632,9 +635,10 @@ instance.web_kanban.KanbanGroup = instance.web.Widget.extend({
'limit': self.view.limit,
'offset': self.dataset_offset += self.view.limit
}).then(function(records) {
self.view.dataset.ids = ids.concat(self.view.dataset.ids);
self.view.dataset.ids = ids.concat(self.dataset.ids);
self.do_add_records(records);
self.compute_cards_auto_height();
self.view.postprocess_m2m_tags();
return records;
});
},

View File

@ -34,16 +34,21 @@
<t t-if="widget.view._is_quick_create_enabled()">
<div class="oe_kanban_add oe_e" title="Quick create">]</div>
</t>
<div class="oe_dropdown_toggle oe_dropdown_kanban">
<span class="oe_e">í</span>
<ul class="oe_dropdown_menu oe_kanban_group_dropdown">
<li><a data-action="toggle_fold" href="#">Fold</a></li>
<t t-if="widget.view.grouped_by_m2o and widget.value">
<li><a data-action="edit" href="#">Edit</a></li>
<li><a data-action="delete" href="#">Delete</a></li>
</t>
</ul>
<div class="oe_dropdown_toggle oe_dropdown_kanban">
<div class="oe_kanban_group_length">
<span class="oe_tag">
<t t-if="widget.group.get('length') &gt; 99"> 99+ </t><t t-if="widget.group.get('length') &lt;= 99"> <t t-esc="widget.group.get('length')"/> </t>
</span>
</div>
<span class="oe_e">í</span>
<ul class="oe_dropdown_menu oe_kanban_group_dropdown">
<li><a data-action="toggle_fold" href="#">Fold</a></li>
<t t-if="widget.view.grouped_by_m2o and widget.value">
<li><a data-action="edit" href="#">Edit</a></li>
<li><a data-action="delete" href="#">Delete</a></li>
</t>
</ul>
</div>
<div class="oe_fold_column">
<div t-attf-class="oe_kanban_group_title #{widget.undefined_title ? 'oe_kanban_group_title_undefined' : ''}">
<div class="oe_kanban_group_length oe_tag">
@ -57,7 +62,9 @@
</li>
</ul>
</div>
<span t-if="widget.title" class="oe_kanban_group_title_vertical"><t t-esc="widget.title"/></span>
<span t-if="widget.title" class="oe_kanban_group_title_vertical">
<t t-esc="widget.title"/>
</span>
</div>
</t>
<t t-if="! widget.view.group_by &amp;&amp; widget.view._is_quick_create_enabled()">

View File

@ -8,14 +8,14 @@ msgstr ""
"Project-Id-Version: openerp-web\n"
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2012-12-21 23:00+0000\n"
"Last-Translator: Mustafa TÜRKER <Unknown>\n"
"PO-Revision-Date: 2013-02-15 20:44+0000\n"
"Last-Translator: Ayhan KIZILTAN <Unknown>\n"
"Language-Team: Turkish <tr@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2012-12-22 07:39+0000\n"
"X-Generator: Launchpad (build 16378)\n"
"X-Launchpad-Export-Date: 2013-02-16 05:40+0000\n"
"X-Generator: Launchpad (build 16491)\n"
#. module: web_view_editor
#. openerp-web
@ -150,7 +150,7 @@ msgstr "Bu düğümü(node) silmek istediğinize emin misiniz?"
#: code:addons/web_view_editor/static/src/js/view_editor.js:390
#, python-format
msgid "Can't Update View"
msgstr ""
msgstr "Görünüm Güncellenemiyor"
#. module: web_view_editor
#. openerp-web