[MERGE] merged trunk.

bzr revid: vmt@openerp.com-20120816104804-k5pwjk3j3um5mow7
This commit is contained in:
Vo Minh Thu 2012-08-16 12:48:04 +02:00
commit abb47bc6d6
295 changed files with 157864 additions and 45442 deletions

View File

@ -1,23 +1,18 @@
*.pyc
.*.swp
.bzrignore
.idea
.project
.pydevproject
.ropeproject
.settings
.DS_Store
openerp/addons/*
openerp/filestore*
.Python
include
lib
bin/activate
bin/activate_this.py
bin/easy_install
bin/easy_install-2.6
bin/pip
bin/python
bin/python2.6
*.pyc
*.pyo
bin/*
build/
bin/yolk
bin/pil*.py
.project
.pydevproject
.settings
include/
lib/
share/

78
README
View File

@ -1,29 +1,69 @@
pydot - Python interface to Graphviz's Dot language
Ero Carrera (c) 2004-2007
ero@dkbza.org
This code is distributed under the MIT license.
Requirements:
About OpenERP
-------------
pyparsing: pydot requires the pyparsing module in order to be
able to load DOT files.
OpenERP is an OpenSource/Free software Enterprise Resource Planning and
Customer Relationship Management software. More info at:
GraphViz: is needed in order to render the graphs into any of
the plethora of output formats supported.
http://www.openerp.com
Installation:
-------------
Installation on Debian Ubuntu
-----------------------------
Should suffice with doing:
Download the deb file and type:
python setup.py install
$ sudo dpkg -i <openerp-deb-filename>
$ sudo apt-get install install -f
Needless to say, no installation is needed just to use the module. A mere:
Installation on Debian Ubuntu from nightly build
------------------------------------------------
import pydot
Add the the apt repository
should do it, provided that the directory containing the modules is on Python
module search path.
deb http://nightly.openerp.com/6.1/deb/ ./
in your source.list and type:
$ sudo apt-get update
$ sudo apt-get install openerp
Installation on RedHat, Fedora, CentOS
--------------------------------------
Install the required dependencies:
$ yum install python
$ easy_install pip
$ pip install .....
Install the openerp rpm
$ rpm -i openerp-VERSION.rpm
Installation on Windows
-----------------------
Installation on MacOSX
-----------------------
Setuping you first database
---------------------------
Point your browser to http://localhost:8069/ and click "Manage Databases", the
default master password is "admin".
Detailed System Requirements
----------------------------
You need the following software installed:
postgresql-client, python-dateutil, python-feedparser, python-gdata,
python-ldap, python-libxslt1, python-lxml, python-mako, python-openid,
python-psycopg2, python-pybabel, python-pychart, python-pydot,
python-pyparsing, python-reportlab, python-simplejson, python-tz,
python-vatnumber, python-vobject, python-webdav, python-werkzeug, python-xlwt,
python-yaml, python-zsi
For Luxembourg localization, you also need:
pdftk (http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/)

1
debian/control vendored
View File

@ -35,6 +35,7 @@ Depends:
python-vobject,
python-webdav,
python-werkzeug,
python-xlwt,
python-yaml,
python-zsi
Conflicts: tinyerp-server, openerp-server, openerp-web

View File

@ -18,6 +18,8 @@ case "${1}" in
# Creating local storage directory
mkdir -p /var/lib/openerp/filestore
chown openerp:openerp -R /var/lib/openerp
# update-python-modules NOW otherwise invoke-rc.d openerp start will fail
update-python-modules -p openerp.public
;;
*)
;;

View File

@ -2,17 +2,19 @@
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXOPTS = -q
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = build
BUILDDIR = _build
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
help:
@echo "Please use \`make <target>' where <target> is one of"
@ -29,6 +31,9 @@ help:
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
@ -43,6 +48,7 @@ html:
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
sed -i '/-99999/d' _build/dirhtml/_static/flasky.css
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
@ -72,17 +78,17 @@ qthelp:
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/OpenERPWeb.qhcp"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/OpenERPTechnicalDocumentation.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/OpenERPWeb.qhc"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/OpenERPTechnicalDocumentation.qhc"
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/OpenERPWeb"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/OpenERPWeb"
@echo "# mkdir -p $$HOME/.local/share/devhelp/OpenERPTechnicalDocumentation"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/OpenERPTechnicalDocumentation"
@echo "# devhelp"
epub:
@ -100,7 +106,7 @@ latex:
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
make -C $(BUILDDIR)/latex all-pdf
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
text:
@ -113,6 +119,24 @@ man:
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo

BIN
doc/_static/openerp.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

16
doc/_templates/sidebarintro.html vendored Normal file
View File

@ -0,0 +1,16 @@
<p class="logo"><a href="http://doc.openerp.com/">
<img class="logo" src="{{ pathto('_static/openerp.png', 1) }}" alt="Logo"/>
</a></p>
<h3>Other Docs</h3>
<ul>
<li><a href="http://doc.openerp.com/trunk/developers">OpenERP Developers Documentation</a></li>
<li><a href="http://doc.openerp.com/trunk/developers/web">OpenERP Web Developers Documentation</a></li>
<li><a href="http://doc.openerp.com/trunk/users">OpenERP Users Documentation</a></li>
</ul>
<h3>Useful Links</h3>
<ul>
<li><a href="http://www.openerp.com/">The OpenERP website</a></li>
<li><a href="http://python.org/">The Python programming language</a></li>
</ul>

3
doc/_templates/sidebarlogo.html vendored Normal file
View File

@ -0,0 +1,3 @@
<p class="logo"><a href="{{ pathto(master_doc) }}">
<img class="logo" src="{{ pathto('_static/openerp.png', 1) }}" alt="Logo"/>
</a></p>

3
doc/_themes/.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
*.pyc
*.pyo
.DS_Store

37
doc/_themes/LICENSE vendored Normal file
View File

@ -0,0 +1,37 @@
Copyright (c) 2010 by Armin Ronacher.
Some rights reserved.
Redistribution and use in source and binary forms of the theme, with or
without modification, are permitted provided that the following conditions
are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* The names of the contributors may not be used to endorse or
promote products derived from this software without specific
prior written permission.
We kindly ask you to only use these themes in an unmodified manner just
for Flask and Flask-related products, not for unrelated projects. If you
like the visual style and want to use it for your own projects, please
consider making some larger changes to the themes (such as changing
font faces, sizes, colors or margins).
THIS THEME IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS THEME, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

31
doc/_themes/README vendored Normal file
View File

@ -0,0 +1,31 @@
Flask Sphinx Styles
===================
This repository contains sphinx styles for Flask and Flask related
projects. To use this style in your Sphinx documentation, follow
this guide:
1. put this folder as _themes into your docs folder. Alternatively
you can also use git submodules to check out the contents there.
2. add this to your conf.py:
sys.path.append(os.path.abspath('_themes'))
html_theme_path = ['_themes']
html_theme = 'flask'
The following themes exist:
- 'flask' - the standard flask documentation theme for large
projects
- 'flask_small' - small one-page theme. Intended to be used by
very small addon libraries for flask.
The following options exist for the flask_small theme:
[options]
index_logo = '' filename of a picture in _static
to be used as replacement for the
h1 in the index.rst file.
index_logo_height = 120px height of the index logo
github_fork = '' repository name on github for the
"fork me" badge

25
doc/_themes/flask/layout.html vendored Normal file
View File

@ -0,0 +1,25 @@
{%- extends "basic/layout.html" %}
{%- block extrahead %}
{{ super() }}
{% if theme_touch_icon %}
<link rel="apple-touch-icon" href="{{ pathto('_static/' ~ theme_touch_icon, 1) }}" />
{% endif %}
<link media="only screen and (max-device-width: 480px)" href="{{
pathto('_static/small_flask.css', 1) }}" type= "text/css" rel="stylesheet" />
{% endblock %}
{%- block relbar2 %}{% endblock %}
{% block header %}
{{ super() }}
{% if pagename == 'index' %}
<div class=indexwrapper>
{% endif %}
{% endblock %}
{%- block footer %}
<div class="footer">
&copy; Copyright {{ copyright }}
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> and a modified <a href="https://github.com/mitsuhiko/flask-sphinx-themes">Flask theme</a>.
</div>
{% if pagename == 'index' %}
</div>
{% endif %}
{%- endblock %}

19
doc/_themes/flask/relations.html vendored Normal file
View File

@ -0,0 +1,19 @@
<h3>Related Topics</h3>
<ul>
<li><a href="{{ pathto(master_doc) }}">Documentation overview</a><ul>
{%- for parent in parents %}
<li><a href="{{ parent.link|e }}">{{ parent.title }}</a><ul>
{%- endfor %}
{%- if prev %}
<li>Previous: <a href="{{ prev.link|e }}" title="{{ _('previous chapter')
}}">{{ prev.title }}</a></li>
{%- endif %}
{%- if next %}
<li>Next: <a href="{{ next.link|e }}" title="{{ _('next chapter')
}}">{{ next.title }}</a></li>
{%- endif %}
{%- for parent in parents %}
</ul></li>
{%- endfor %}
</ul></li>
</ul>

395
doc/_themes/flask/static/flasky.css_t vendored Normal file
View File

@ -0,0 +1,395 @@
/*
* flasky.css_t
* ~~~~~~~~~~~~
*
* :copyright: Copyright 2010 by Armin Ronacher.
* :license: Flask Design License, see LICENSE for details.
*/
{% set page_width = '80em' %}
{% set sidebar_width = '16em' %}
@import url("basic.css");
/* -- page layout ----------------------------------------------------------- */
body {
font-family: 'Georgia', serif;
font-size: 15px;
background-color: white;
color: #000;
margin: 0;
padding: 0;
}
div.document {
width: {{ page_width }};
margin: 30px auto 0 auto;
}
div.documentwrapper {
float: left;
width: 100%;
}
div.bodywrapper {
margin: 0 0 0 {{ sidebar_width }};
}
div.sphinxsidebar {
width: {{ sidebar_width }};
}
hr {
border: 1px solid #B1B4B6;
}
div.body {
background-color: #ffffff;
color: #3E4349;
padding: 0 0px 0 0px;
}
img.floatingflask {
padding: 0 0 10px 10px;
float: right;
}
div.footer {
width: {{ page_width }};
margin: 20px auto 30px auto;
font-size: 12px;
color: #888;
text-align: right;
}
div.footer a {
color: #888;
}
div.related {
display: none;
}
div.sphinxsidebar a {
color: #444;
text-decoration: none;
border-bottom: 1px dotted #999;
}
div.sphinxsidebar a:hover {
border-bottom: 1px solid #999;
}
div.sphinxsidebar {
font-size: 12px;
line-height: 1.5;
}
div.sphinxsidebarwrapper {
padding: 0px 10px;
}
div.sphinxsidebarwrapper p.logo {
padding: 0 0 20px 0;
margin: 0;
text-align: center;
}
div.sphinxsidebar h3,
div.sphinxsidebar h4 {
font-family: 'Garamond', 'Georgia', serif;
color: #444;
font-size: 22px;
font-weight: normal;
margin: 0 0 5px 0;
padding: 0;
}
div.sphinxsidebar h4 {
font-size: 18px;
}
div.sphinxsidebar h3 a {
color: #444;
}
div.sphinxsidebar p.logo a,
div.sphinxsidebar h3 a,
div.sphinxsidebar p.logo a:hover,
div.sphinxsidebar h3 a:hover {
border: none;
}
div.sphinxsidebar p {
color: #555;
margin: 10px 0;
}
div.sphinxsidebar ul {
margin: 10px 0;
padding: 0;
color: #000;
}
div.sphinxsidebar input {
border: 1px solid #ccc;
font-family: 'Georgia', serif;
font-size: 1em;
}
/* -- body styles ----------------------------------------------------------- */
a {
color: #004B6B;
text-decoration: underline;
}
a:hover {
color: #6D4100;
text-decoration: underline;
}
div.body h1,
div.body h2,
div.body h3,
div.body h4,
div.body h5,
div.body h6 {
font-family: 'Garamond', 'Georgia', serif;
font-weight: normal;
margin: 30px 0px 10px 0px;
padding: 0;
}
{% if theme_index_logo %}
div.indexwrapper h1 {
text-indent: -999999px;
background: url({{ theme_index_logo }}) no-repeat center center;
height: {{ theme_index_logo_height }};
}
{% endif %}
div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
div.body h2 { font-size: 180%; }
div.body h3 { font-size: 150%; }
div.body h4 { font-size: 130%; }
div.body h5 { font-size: 100%; }
div.body h6 { font-size: 100%; }
a.headerlink {
color: #ddd;
padding: 0 4px;
text-decoration: none;
}
a.headerlink:hover {
color: #444;
background: #eaeaea;
}
div.body p, div.body dd, div.body li {
line-height: 1.4em;
}
div.admonition {
background: #fafafa;
margin: 20px -30px;
padding: 10px 30px;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
}
div.admonition tt.xref, div.admonition a tt {
border-bottom: 1px solid #fafafa;
}
dd div.admonition {
margin-left: -60px;
padding-left: 60px;
}
div.admonition p.admonition-title {
font-family: 'Garamond', 'Georgia', serif;
font-weight: normal;
font-size: 22px;
margin: 0 0 10px 0;
padding: 0;
line-height: 1;
}
div.admonition p.last {
margin-bottom: 0;
}
div.highlight {
background-color: white;
}
dt:target, .highlight {
background: #FAF3E8;
}
div.note {
background-color: #eee;
border: 1px solid #ccc;
}
div.seealso {
background-color: #ffc;
border: 1px solid #ff6;
}
div.topic {
background-color: #eee;
}
p.admonition-title {
display: inline;
}
p.admonition-title:after {
content: ":";
}
pre, tt {
font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
font-size: 0.9em;
}
img.screenshot {
}
tt.descname, tt.descclassname {
font-size: 0.95em;
}
tt.descname {
padding-right: 0.08em;
}
img.screenshot {
-moz-box-shadow: 2px 2px 4px #eee;
-webkit-box-shadow: 2px 2px 4px #eee;
box-shadow: 2px 2px 4px #eee;
}
table.docutils {
border: 1px solid #888;
-moz-box-shadow: 2px 2px 4px #eee;
-webkit-box-shadow: 2px 2px 4px #eee;
box-shadow: 2px 2px 4px #eee;
}
table.docutils td, table.docutils th {
border: 1px solid #888;
padding: 0.25em 0.7em;
}
table.field-list, table.footnote {
border: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
table.footnote {
margin: 15px 0;
width: 100%;
border: 1px solid #eee;
background: #fdfdfd;
font-size: 0.9em;
}
table.footnote + table.footnote {
margin-top: -15px;
border-top: none;
}
table.field-list th {
padding: 0 0.8em 0 0;
}
table.field-list td {
padding: 0;
}
table.footnote td.label {
width: 0px;
padding: 0.3em 0 0.3em 0.5em;
}
table.footnote td {
padding: 0.3em 0.5em;
}
dl {
margin: 0;
padding: 0;
}
dl dd {
margin-left: 30px;
}
blockquote {
margin: 0 0 0 30px;
padding: 0;
}
ul, ol {
margin: 10px 0 10px 30px;
padding: 0;
}
pre {
background: #eee;
padding: 7px 30px;
margin: 15px -30px;
line-height: 1.3em;
}
dl pre, blockquote pre, li pre {
margin-left: -60px;
padding-left: 60px;
}
dl dl pre {
margin-left: -90px;
padding-left: 90px;
}
tt {
background-color: #ecf0f3;
color: #222;
/* padding: 1px 2px; */
}
tt.xref, a tt {
background-color: #FBFBFB;
border-bottom: 1px solid white;
}
a.reference {
text-decoration: none;
border-bottom: 1px dotted #004B6B;
}
a.reference:hover {
border-bottom: 1px solid #6D4100;
}
a.footnote-reference {
text-decoration: none;
font-size: 0.7em;
vertical-align: top;
border-bottom: 1px dotted #004B6B;
}
a.footnote-reference:hover {
border-bottom: 1px solid #6D4100;
}
a:hover tt {
background: #EEE;
}

View File

@ -0,0 +1,70 @@
/*
* small_flask.css_t
* ~~~~~~~~~~~~~~~~~
*
* :copyright: Copyright 2010 by Armin Ronacher.
* :license: Flask Design License, see LICENSE for details.
*/
body {
margin: 0;
padding: 20px 30px;
}
div.documentwrapper {
float: none;
background: white;
}
div.sphinxsidebar {
display: block;
float: none;
width: 102.5%;
margin: 50px -30px -20px -30px;
padding: 10px 20px;
background: #333;
color: white;
}
div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
div.sphinxsidebar h3 a {
color: white;
}
div.sphinxsidebar a {
color: #aaa;
}
div.sphinxsidebar p.logo {
display: none;
}
div.document {
width: 100%;
margin: 0;
}
div.related {
display: block;
margin: 0;
padding: 10px 0 20px 0;
}
div.related ul,
div.related ul li {
margin: 0;
padding: 0;
}
div.footer {
display: none;
}
div.bodywrapper {
margin: 0;
}
div.body {
min-height: 0;
padding: 0;
}

9
doc/_themes/flask/theme.conf vendored Normal file
View File

@ -0,0 +1,9 @@
[theme]
inherit = basic
stylesheet = flasky.css
pygments_style = flask_theme_support.FlaskyStyle
[options]
index_logo = ''
index_logo_height = 120px
touch_icon =

22
doc/_themes/flask_small/layout.html vendored Normal file
View File

@ -0,0 +1,22 @@
{% extends "basic/layout.html" %}
{% block header %}
{{ super() }}
{% if pagename == 'index' %}
<div class=indexwrapper>
{% endif %}
{% endblock %}
{% block footer %}
{% if pagename == 'index' %}
</div>
{% endif %}
{% endblock %}
{# do not display relbars #}
{% block relbar1 %}{% endblock %}
{% block relbar2 %}
{% if theme_github_fork %}
<a href="http://github.com/{{ theme_github_fork }}"><img style="position: fixed; top: 0; right: 0; border: 0;"
src="http://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub" /></a>
{% endif %}
{% endblock %}
{% block sidebar1 %}{% endblock %}
{% block sidebar2 %}{% endblock %}

View File

@ -0,0 +1,287 @@
/*
* flasky.css_t
* ~~~~~~~~~~~~
*
* Sphinx stylesheet -- flasky theme based on nature theme.
*
* :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
@import url("basic.css");
/* -- page layout ----------------------------------------------------------- */
body {
font-family: 'Georgia', serif;
font-size: 17px;
color: #000;
background: white;
margin: 0;
padding: 0;
}
div.documentwrapper {
float: left;
width: 100%;
}
div.bodywrapper {
margin: 40px auto 0 auto;
width: 700px;
}
hr {
border: 1px solid #B1B4B6;
}
div.body {
background-color: #ffffff;
color: #3E4349;
padding: 0 30px 30px 30px;
}
img.floatingflask {
padding: 0 0 10px 10px;
float: right;
}
div.footer {
text-align: right;
color: #888;
padding: 10px;
font-size: 14px;
width: 650px;
margin: 0 auto 40px auto;
}
div.footer a {
color: #888;
text-decoration: underline;
}
div.related {
line-height: 32px;
color: #888;
}
div.related ul {
padding: 0 0 0 10px;
}
div.related a {
color: #444;
}
/* -- body styles ----------------------------------------------------------- */
a {
color: #004B6B;
text-decoration: underline;
}
a:hover {
color: #6D4100;
text-decoration: underline;
}
div.body {
padding-bottom: 40px; /* saved for footer */
}
div.body h1,
div.body h2,
div.body h3,
div.body h4,
div.body h5,
div.body h6 {
font-family: 'Garamond', 'Georgia', serif;
font-weight: normal;
margin: 30px 0px 10px 0px;
padding: 0;
}
{% if theme_index_logo %}
div.indexwrapper h1 {
text-indent: -999999px;
background: url({{ theme_index_logo }}) no-repeat center center;
height: {{ theme_index_logo_height }};
}
{% endif %}
div.body h2 { font-size: 180%; }
div.body h3 { font-size: 150%; }
div.body h4 { font-size: 130%; }
div.body h5 { font-size: 100%; }
div.body h6 { font-size: 100%; }
a.headerlink {
color: white;
padding: 0 4px;
text-decoration: none;
}
a.headerlink:hover {
color: #444;
background: #eaeaea;
}
div.body p, div.body dd, div.body li {
line-height: 1.4em;
}
div.admonition {
background: #fafafa;
margin: 20px -30px;
padding: 10px 30px;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
}
div.admonition p.admonition-title {
font-family: 'Garamond', 'Georgia', serif;
font-weight: normal;
font-size: 24px;
margin: 0 0 10px 0;
padding: 0;
line-height: 1;
}
div.admonition p.last {
margin-bottom: 0;
}
div.highlight{
background-color: white;
}
dt:target, .highlight {
background: #FAF3E8;
}
div.note {
background-color: #eee;
border: 1px solid #ccc;
}
div.seealso {
background-color: #ffc;
border: 1px solid #ff6;
}
div.topic {
background-color: #eee;
}
div.warning {
background-color: #ffe4e4;
border: 1px solid #f66;
}
p.admonition-title {
display: inline;
}
p.admonition-title:after {
content: ":";
}
pre, tt {
font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
font-size: 0.85em;
}
img.screenshot {
}
tt.descname, tt.descclassname {
font-size: 0.95em;
}
tt.descname {
padding-right: 0.08em;
}
img.screenshot {
-moz-box-shadow: 2px 2px 4px #eee;
-webkit-box-shadow: 2px 2px 4px #eee;
box-shadow: 2px 2px 4px #eee;
}
table.docutils {
border: 1px solid #888;
-moz-box-shadow: 2px 2px 4px #eee;
-webkit-box-shadow: 2px 2px 4px #eee;
box-shadow: 2px 2px 4px #eee;
}
table.docutils td, table.docutils th {
border: 1px solid #888;
padding: 0.25em 0.7em;
}
table.field-list, table.footnote {
border: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
table.footnote {
margin: 15px 0;
width: 100%;
border: 1px solid #eee;
}
table.field-list th {
padding: 0 0.8em 0 0;
}
table.field-list td {
padding: 0;
}
table.footnote td {
padding: 0.5em;
}
dl {
margin: 0;
padding: 0;
}
dl dd {
margin-left: 30px;
}
pre {
padding: 0;
margin: 15px -30px;
padding: 8px;
line-height: 1.3em;
padding: 7px 30px;
background: #eee;
border-radius: 2px;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
}
dl pre {
margin-left: -60px;
padding-left: 60px;
}
tt {
background-color: #ecf0f3;
color: #222;
/* padding: 1px 2px; */
}
tt.xref, a tt {
background-color: #FBFBFB;
}
a:hover tt {
background: #EEE;
}

10
doc/_themes/flask_small/theme.conf vendored Normal file
View File

@ -0,0 +1,10 @@
[theme]
inherit = basic
stylesheet = flasky.css
nosidebar = true
pygments_style = flask_theme_support.FlaskyStyle
[options]
index_logo = ''
index_logo_height = 120px
github_fork = ''

86
doc/_themes/flask_theme_support.py vendored Normal file
View File

@ -0,0 +1,86 @@
# flasky extensions. flasky pygments style based on tango style
from pygments.style import Style
from pygments.token import Keyword, Name, Comment, String, Error, \
Number, Operator, Generic, Whitespace, Punctuation, Other, Literal
class FlaskyStyle(Style):
background_color = "#f8f8f8"
default_style = ""
styles = {
# No corresponding class for the following:
#Text: "", # class: ''
Whitespace: "underline #f8f8f8", # class: 'w'
Error: "#a40000 border:#ef2929", # class: 'err'
Other: "#000000", # class 'x'
Comment: "italic #8f5902", # class: 'c'
Comment.Preproc: "noitalic", # class: 'cp'
Keyword: "bold #004461", # class: 'k'
Keyword.Constant: "bold #004461", # class: 'kc'
Keyword.Declaration: "bold #004461", # class: 'kd'
Keyword.Namespace: "bold #004461", # class: 'kn'
Keyword.Pseudo: "bold #004461", # class: 'kp'
Keyword.Reserved: "bold #004461", # class: 'kr'
Keyword.Type: "bold #004461", # class: 'kt'
Operator: "#582800", # class: 'o'
Operator.Word: "bold #004461", # class: 'ow' - like keywords
Punctuation: "bold #000000", # class: 'p'
# because special names such as Name.Class, Name.Function, etc.
# are not recognized as such later in the parsing, we choose them
# to look the same as ordinary variables.
Name: "#000000", # class: 'n'
Name.Attribute: "#c4a000", # class: 'na' - to be revised
Name.Builtin: "#004461", # class: 'nb'
Name.Builtin.Pseudo: "#3465a4", # class: 'bp'
Name.Class: "#000000", # class: 'nc' - to be revised
Name.Constant: "#000000", # class: 'no' - to be revised
Name.Decorator: "#888", # class: 'nd' - to be revised
Name.Entity: "#ce5c00", # class: 'ni'
Name.Exception: "bold #cc0000", # class: 'ne'
Name.Function: "#000000", # class: 'nf'
Name.Property: "#000000", # class: 'py'
Name.Label: "#f57900", # class: 'nl'
Name.Namespace: "#000000", # class: 'nn' - to be revised
Name.Other: "#000000", # class: 'nx'
Name.Tag: "bold #004461", # class: 'nt' - like a keyword
Name.Variable: "#000000", # class: 'nv' - to be revised
Name.Variable.Class: "#000000", # class: 'vc' - to be revised
Name.Variable.Global: "#000000", # class: 'vg' - to be revised
Name.Variable.Instance: "#000000", # class: 'vi' - to be revised
Number: "#990000", # class: 'm'
Literal: "#000000", # class: 'l'
Literal.Date: "#000000", # class: 'ld'
String: "#4e9a06", # class: 's'
String.Backtick: "#4e9a06", # class: 'sb'
String.Char: "#4e9a06", # class: 'sc'
String.Doc: "italic #8f5902", # class: 'sd' - like a comment
String.Double: "#4e9a06", # class: 's2'
String.Escape: "#4e9a06", # class: 'se'
String.Heredoc: "#4e9a06", # class: 'sh'
String.Interpol: "#4e9a06", # class: 'si'
String.Other: "#4e9a06", # class: 'sx'
String.Regex: "#4e9a06", # class: 'sr'
String.Single: "#4e9a06", # class: 's1'
String.Symbol: "#4e9a06", # class: 'ss'
Generic: "#000000", # class: 'g'
Generic.Deleted: "#a40000", # class: 'gd'
Generic.Emph: "italic #000000", # class: 'ge'
Generic.Error: "#ef2929", # class: 'gr'
Generic.Heading: "bold #000080", # class: 'gh'
Generic.Inserted: "#00A000", # class: 'gi'
Generic.Output: "#888", # class: 'go'
Generic.Prompt: "#745334", # class: 'gp'
Generic.Strong: "bold #000000", # class: 'gs'
Generic.Subheading: "bold #800080", # class: 'gu'
Generic.Traceback: "bold #a40000", # class: 'gt'
}

10
doc/api/core.rst Normal file
View File

@ -0,0 +1,10 @@
.. _openerp library:
Server-side library
-------------------
.. automodule:: openerp
:members:
:undoc-members:

View File

@ -0,0 +1,45 @@
Field-level access control
==========================
.. versionadded:: 7.0
OpenERP now supports real access control at the field level, not just on the view side.
Previously it was already possible to set a ``groups`` attribute on a ``<field>`` element
(or in fact most view elements), but with cosmetics effects only: the element was made
invisible on the client side, while still perfectly available for read/write access at
the RPC level.
As of OpenERP 7.0 the existing behavior is preserved on the view level, but a new ``groups``
attribute is available on all model fields, introducing a model-level access control on
each field. The syntax is the same as for the view-level attribute::
_columns = {
'secret_key': fields.char('Secret Key', groups="base.group_erp_manager,base.group_system")
}
There is a major difference with the view-level ``groups`` attribute: restricting
the access at the model level really means that the field will be completely unavailable
for users who do not belong to the authorized groups:
* Restricted fields will be **completely removed** from all related views, not just
hidden. This is important to keep in mind because it means the field value will not be
available at all on the client side, and thus unavailable e.g. for ``on_change`` calls.
* Restricted fields will not be returned as part of a call to
:meth:`~openerp.osv.orm.fields_get` or :meth:`~openerp.osv.orm.fields_view_get`
This is in order to avoid them appearing in the list of fields available for
advanced search filters, for example. This does not prevent getting the list of
a model's fields by querying ``ir.model.fields`` directly, which is fine.
* Any attempt to read or write directly the value of the restricted fields will result
in an ``AccessError`` exception.
* As a consequence of the previous item, restricted fields will not be available for
use within search filters (domains) or anything that would require read or write access.
* It is quite possible to set ``groups`` attributes for the same field both at the model
and view level, even with different values. Both will carry their effect, with the
model-level restriction taking precedence and removing the field completely in case of
restriction.
.. note:: The tests related to this feature are in ``openerp/tests/test_acl.py``.
.. warning:: At the time of writing the implementation of this feature is partial
and does not yet restrict read/write RPC access to the field.
The corresponding test is written already but currently disabled.

28
doc/api/font_style.rst Normal file
View File

@ -0,0 +1,28 @@
Font style in list views
========================
.. versionadded:: 7.0
This revision adds font styles in list views. Before this revision it was
possible to define some colors in list view. This revision allows to define
the a font style, based on an evaluated Python expression. The definition syntax is
the same than the colors feature. Supported styles are bold, italic and
underline.
Rng modification
+++++++++++++++++
This revision adds the ``fonts`` optional attribute in ``view.rng``.
Addon implementation example
++++++++++++++++++++++++++++
In your ``foo`` module, you want to specify that when any record is in ``pending``
state then it should be displayed in bold in the list view. Edit your foo_view.xml
file that define the views, and add the fonts attribute to the tree tag.
.. code-block:: xml
<tree string="Foo List View" fonts="bold:state=='pending'">
[...]
</tree>

7
doc/api/models.rst Normal file
View File

@ -0,0 +1,7 @@
ORM and models
--------------
.. automodule:: openerp.osv.orm
:members:
:undoc-members:

View File

@ -0,0 +1,91 @@
Need action mechanism
=====================
.. versionadded:: 7.0
ir.needaction_mixin class
+++++++++++++++++++++++++
.. versionadded:: openobject-server.4124
This revision adds a mixin class for objects using the need action feature.
Need action feature can be used by objects willing to be able to signal that an action is required on a particular record. If in the business logic an action must be performed by somebody, for instance validation by a manager, this mechanism allows to set a list of users asked to perform an action.
This class wraps a class (ir.ir_needaction_users_rel) that behaves like a many2many field. However, no field is added to the model inheriting from ir.needaction_mixin. The mixin class manages the low-level considerations of updating relationships. Every change made on the record calls a method that updates the relationships.
Objects using the need_action feature should override the ``get_needaction_user_ids`` method. This methods returns a dictionary whose keys are record ids, and values a list of user ids, like in a many2many relationship. Therefore by defining only one method, you can specify if an action is required by defining the users that have to do it, in every possible situation.
This class also offers several global services,:
- ``needaction_get_record_ids``: for the current model and uid, get all record ids that ask this user to perform an action. This mechanism is used for instance to display the number of pending actions in menus, such as Leads (12)
- ``needaction_get_action_count``: as ``needaction_get_record_ids`` but returns only the number of action, not the ids (performs a search with count=True)
- ``needaction_get_user_record_references``: for a given uid, get all the records that ask this user to perform an action. Records are given as references, a list of tuples (model_name, record_id).
.. versionadded:: openobject-server.XXXX
This revision of the needaction_mixin mechanism slighty modifies the class behavior. The ``ir_needaction_mixin`` class now adds a function field on models inheriting from the class. This field allows to state whether a given record has a needaction for the current user. This is usefull if you want to customize views according to the needaction feature. For example, you may want to set records in bold in a list view if the current user has an action to perform on the record. This makes the class not a pure abstract class, but allows to easily use the action information. The field definition is::
def get_needaction_pending(self, cr, uid, ids, name, arg, context=None):
res = {}
needaction_user_ids = self.get_needaction_user_ids(cr, uid, ids, context=context)
for id in ids:
res[id] = uid in needaction_user_ids[id]
return res
_columns = {
'needaction_pending': fields.function(get_needaction_pending, type='boolean',
string='Need action pending',
help='If True, this field states that users have to perform an action. \
This field comes from the needaction mechanism. Please refer \
to the ir.needaction_mixin class.'),
}
ir.needaction_users_rel class
+++++++++++++++++++++++++++++
.. versionadded:: openobject-server.4124
This class essentially wraps a database table that behaves like a many2many.
It holds data related to the needaction mechanism inside OpenERP. A row
in this model is characterized by:
- ``res_model``: model of the record requiring an action
- ``res_id``: ID of the record requiring an action
- ``user_id``: foreign key to the res.users table, to the user that
has to perform the action
This model can be seen as a many2many, linking (res_model, res_id) to
users (those whose attention is required on the record)
Menu modification
+++++++++++++++++
.. versionchanged:: openobject-server.XXXX
This revision adds three functional fields to ``ir.ui.menu`` model :
- ``uses_needaction``: boolean field. If the menu entry action is an act_window action, and if this action is related to a model that uses the need_action mechanism, this field is set to true. Otherwise, it is false.
- ``needaction_uid_ctr``: integer field. If the target model uses the need action mechanism, this field gives the number of actions the current user has to perform.
- **REMOVED** ``needaction_record_ids``: many2many field. If the target model uses the need action mechanism, this field holds the ids of the record requesting the user to perform an action. **This field has been removed on version XXXX**.
Those fields are functional, because they depend on the user and must therefore be computed at every refresh, each time menus are displayed. The use of the need action mechanism is done by taking into account the action domain in order to display accurate results. When computing the value of the functional fields, the ids of records asking the user to perform an action is concatenated to the action domain. A counting search is then performed on the model, giving back the number of action the users has to perform, limited to the domain of the action.
Addon implementation example
++++++++++++++++++++++++++++
In your ``foo`` module, you want to specify that when it is in state ``confirmed``, it has to be validated by a manager, given by the field ``manager_id``. After making ``foo`` inheriting from ``ir.needaction_mixin``, you override the ``get_needaction_user_ids`` method:
::
[...]
_inherit = [`ir.needaction_mixin]
[...]
def get_needaction_user_ids(self, cr, uid, ids, context=None):
result = dict.fromkeys(ids)
for foo_obj in self.browse(cr, uid, ids, context=context):
# set the list void by default
result[foo_obj.id] = []
# if foo_obj is confirmed: manager is required to perform an action
if foo_obj.state == 'confirmed':
result[foo_obj.id] = [foo_obj.manager_id]
return result

20
doc/api/startup.rst Normal file
View File

@ -0,0 +1,20 @@
Start-up script
---------------
.. versionadded:: 6.1
To run the OpenERP server, the conventional approach is to use the
`openerp-server` script. It loads the :ref:`openerp library`, sets a few
configuration variables corresponding to command-line arguments, and starts to
listen to incoming connections from clients.
Depending on your deployment needs, you can write such a start-up script very
easily. We also recommend you take a look at an alternative tool called
`openerp-command` that can, among other things, launch the server.
Yet another alternative is to use a WSGI-compatible HTTP server and let it call
into one of the WSGI entry points of the server.

View File

@ -0,0 +1,11 @@
User avatar
===========
.. versionadded:: 7.0
This revision adds an avatar for users. This replaces the use of gravatar to emulate avatars, used in views like the tasks kanban view. Two fields have been added to the res.users model:
- avatar_big, a binary field holding the image. It is base-64 encoded, and PIL-supported. Images stored are resized to 540x450 px, to limitate the binary field size.
- avatar, a function binary field holding an automatically resized version of the avatar_big field. It is also base-64 encoded, and PIL-supported. Dimensions of the resized avatar are 180x150. This field is used as an inteface to get and set the user avatar.
When changing the avatar through the avatar function field, the new image is automatically resized to 540x450, and stored in the avatar_big field. This triggers the function field, that will compute a 180x150 resized version of the image.
An avatar field has been added to the users form view, as well as in Preferences. When creating a new user, a default avatar is chosen among 6 possible default images.

256
doc/conf.py Normal file
View File

@ -0,0 +1,256 @@
# -*- coding: utf-8 -*-
#
# OpenERP Technical Documentation configuration file, created by
# sphinx-quickstart on Fri Feb 17 16:14:06 2012.
#
# This file is execfile()d with the current directory set to its containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
import sys, os
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#sys.path.insert(0, os.path.abspath('.'))
sys.path.append(os.path.abspath('_themes'))
sys.path.append(os.path.abspath('..'))
# -- General configuration -----------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
#needs_sphinx = '1.0'
# Add any Sphinx extension module names here, as strings. They can be extensions
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.viewcode']
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The suffix of source filenames.
source_suffix = '.rst'
# The encoding of source files.
#source_encoding = 'utf-8-sig'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = u'OpenERP Server Developers Documentation'
copyright = u'2012, OpenERP s.a.'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = '6.1'
# The full version, including alpha/beta/rc tags.
release = '6.1'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#language = None
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#today = ''
# Else, today_fmt is used as the format for a strftime call.
#today_fmt = '%B %d, %Y'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns = ['_build']
# The reST default role (used for this markup: `text`) to use for all documents.
#default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
#add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
#add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
#show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# A list of ignored prefixes for module index sorting.
#modindex_common_prefix = []
# -- Options for HTML output ---------------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
html_theme = 'flask'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
#html_theme_options = {}
# Add any paths that contain custom themes here, relative to this directory.
html_theme_path = ['_themes']
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
#html_title = None
# A shorter title for the navigation bar. Default is the same as html_title.
#html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
#html_logo = None
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
#html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
#html_last_updated_fmt = '%b %d, %Y'
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
html_sidebars = {
'index': ['sidebarintro.html', 'sourcelink.html', 'searchbox.html'],
'**': ['sidebarlogo.html', 'localtoc.html', 'relations.html',
'sourcelink.html', 'searchbox.html']
}
# Additional templates that should be rendered to pages, maps page names to
# template names.
#html_additional_pages = {}
# If false, no module index is generated.
#html_domain_indices = True
# If false, no index is generated.
#html_use_index = True
# If true, the index is split into individual pages for each letter.
#html_split_index = False
# If true, links to the reST sources are added to the pages.
#html_show_sourcelink = True
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
#html_show_sphinx = True
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
#html_show_copyright = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
#html_use_opensearch = ''
# This is the file name suffix for HTML files (e.g. ".xhtml").
#html_file_suffix = None
# Output file base name for HTML help builder.
htmlhelp_basename = 'openerp-server-doc'
# -- Options for LaTeX output --------------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
#'preamble': '',
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass [howto/manual]).
latex_documents = [
('index', 'openerp-server-doc.tex', u'OpenERP Server Developers Documentation',
u'OpenERP s.a.', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
#latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
#latex_use_parts = False
# If true, show page references after internal links.
#latex_show_pagerefs = False
# If true, show URL addresses after external links.
#latex_show_urls = False
# Documents to append as an appendix to all manuals.
#latex_appendices = []
# If false, no module index is generated.
#latex_domain_indices = True
# -- Options for manual page output --------------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
('index', 'openerp-server-doc', u'OpenERP Server Developers Documentation',
[u'OpenERP s.a.'], 1)
]
# If true, show URL addresses after external links.
#man_show_urls = False
# -- Options for Texinfo output ------------------------------------------------
# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
('index', 'OpenERPServerDocumentation', u'OpenERP Server Developers Documentation',
u'OpenERP s.a.', 'OpenERPServerDocumentation', 'Developers documentation for the openobject-server project.',
'Miscellaneous'),
]
# Documents to append as an appendix to all manuals.
#texinfo_appendices = []
# If false, no module index is generated.
#texinfo_domain_indices = True
# How to display URL addresses: 'footnote', 'no', or 'inline'.
#texinfo_show_urls = 'footnote'
# Example configuration for intersphinx: refer to the Python standard library.
intersphinx_mapping = {
'python': ('http://docs.python.org/', None),
'openerpweb': ('http://doc.openerp.com/trunk/developers/web', None),
'openerpdev': ('http://doc.openerp.com/trunk/developers', None),
}

6
doc/index.rst Normal file
View File

@ -0,0 +1,6 @@
:orphan:
OpenERP Server Developers Documentation
=======================================
.. include:: index.rst.inc

19
doc/index.rst.inc Normal file
View File

@ -0,0 +1,19 @@
OpenERP Server
''''''''''''''
.. toctree::
:maxdepth: 1
test-framework
Changed in 7.0
++++++++++++++
.. toctree::
:maxdepth: 1
api/user_img_specs
api/need_action_specs
api/font_style
api/field_level_acl

100
doc/test-framework.rst Normal file
View File

@ -0,0 +1,100 @@
.. _test-framework:
Test framework
==============
In addition to the YAML-based tests, OpenERP uses the unittest2_ testing
framework to test both the core ``openerp`` package and its addons. For the
core and each addons, tests are divided between three (overlapping) sets:
1. A test suite that comprises all the tests that can be run right after the
addons is installed (or, for the core, right after a database is created).
That suite is called ``fast_suite`` and must contain only tests that can be run
frequently. Actually most of the tests should be considered fast enough to be
included in that ``fast_suite`` list and only tests that take a long time to run
(e.g. more than a minute) should not be listed. Those long tests should come up
pretty rarely.
2. A test suite called ``checks`` provides sanity checks. These tests are
invariants that must be full-filled at any time. They are expected to always
pass: obviously they must pass right after the module is installed (i.e. just
like the ``fast_suite`` tests), but they must also pass after any other module is
installed, after a migration, or even after the database was put in production
for a few months.
3. The third suite is made of all the tests: those provided by the two above
suites, but also tests that are not explicitely listed in ``fast_suite`` or
``checks``. They are not explicitely listed anywhere and are discovered
automatically.
As the sanity checks provide stronger guarantees about the code and database
structure, new tests must be added to the ``checks`` suite whenever it is
possible. Said with other words: one should try to avoid writing tests that
assume a freshly installed/unaltered module or database.
It is possible to have tests that are not listed in ``fast_suite`` or
``checks``. This is useful if a test takes a lot of time. By default, when
using the testing infrastructure, tests should run fast enough so that people
can use them frequently. One can also use that possiblity for tests that
require some complex setup before they can be successfuly run.
As a rule of thumb when writing a new test, try to add it to the ``checks``
suite. If it really needs that the module it belongs to is freshly installed,
add it to ``fast_suite``. Finally, if it can not be run in an acceptable time
frame, don't add it to any explicit list.
Writing tests
-------------
The tests must be developed under ``<addons-name>.tests`` (or ``openerp.tests``
for the core). For instance, with respect to the tests, a module ``foo``
should be organized as follow::
foo/
__init__.py # does not import .tests
tests/
__init__.py # import some of the tests sub-modules, and
# list them in fast_suite or checks
test_bar.py # contains unittest2 classes
test_baz.py # idem
... and so on ...
The two explicit lists of tests are thus the variables ``foo.tests.fast_suite``
and ``foo.tests.checks``. As an example, you can take a look at the
``openerp.tests`` module (which follows exactly the same conventions even if it
is not an addons).
Note that the ``fast_suite`` and ``checks`` variables are really lists of
module objects. They could be directly unittest2 suite objects if necessary in
the future.
Running the tests
-----------------
To run the tests (see :ref:`above <test-framework>` to learn how tests are
organized), the simplest way is to use the ``oe`` command (provided by the
``openerp-command`` project).
::
> oe run-tests # will run all the fast_suite tests
> oe run-tests -m openerp # will run all the fast_suite tests defined in `openerp.tests`
> oe run-tests -m sale # will run all the fast_suite tests defined in `openerp.addons.sale.tests`
> oe run-tests -m foo.test_bar # will run the tests defined in `openerp.addons.foo.tests.test_bar`
In addition to the above possibilities, when invoked with a non-existing module
(or module.sub-module) name, oe will reply with a list of available test
sub-modules.
Depending on the unittest2_ class that is used to write the tests (see
``openerp.tests.common`` for some helper classes that you can re-use), a database
may be created before the test is run, and the module providing the test will
be installed on that database.
Because creating a database, installing modules, and then dropping it is
expensive, it is possible to interleave the run of the ``fast_suite`` tests
with the initialization of a new database: the dabase is created, and after
each requested module is installed, its fast_suite tests are run. The database
is thus created and dropped (and the modules installed) only once.
.. _unittest2: http://pypi.python.org/pypi/unittest2

View File

@ -1,19 +1,63 @@
import openerp
# Standard OpenERP XML-RPC port.
bind = '127.0.0.1:8069'
pidfile = '.gunicorn.pid'
# This is the big TODO: safely use more than a single worker.
workers = 1
# Some application-wide initialization is needed.
on_starting = openerp.wsgi.on_starting
when_ready = openerp.wsgi.when_ready
timeout = 240 # openerp request-response cycle can be quite long
# Gunicorn sample configuration file.
# See http://gunicorn.org/configure.html for more details.
#
# To run the OpenERP server via Gunicorn, change the appropriate
# settings below, in order to provide the parameters that
# would normally be passed in the command-line,
# (at least `bind` and `conf['addons_path']`), then execute:
# $ gunicorn openerp:wsgi.core.application -c gunicorn.conf.py
# or if you want to run it behind a reverse proxy, add the line
# import openerp.wsgi.proxied
# in this file and execute:
# $ gunicorn openerp:wsgi.proxied.application -c gunicorn.conf.py
# Setting openerp.conf.xxx will be better than setting
# openerp.tools.config['xxx']
import openerp
# Standard OpenERP XML-RPC port is 8069
bind = '127.0.0.1:8069'
pidfile = '.gunicorn.pid'
# Gunicorn recommends 2-4 x number_of_cpu_cores, but
# you'll want to vary this a bit to find the best for your
# particular work load.
workers = 4
# Some application-wide initialization is needed.
on_starting = openerp.wsgi.core.on_starting
when_ready = openerp.wsgi.core.when_ready
pre_request = openerp.wsgi.core.pre_request
post_request = openerp.wsgi.core.post_request
# openerp request-response cycle can be quite long for
# big reports for example
timeout = 240
max_requests = 2000
# Equivalent of --load command-line option
openerp.conf.server_wide_modules = ['web']
# internal TODO: use openerp.conf.xxx when available
conf = openerp.tools.config
conf['addons_path'] = '/home/openerp/repos/addons/trunk-xmlrpc'
conf['static_http_document_root'] = '/tmp'
#conf['log_level'] = 10 # 10 is DEBUG
# Path to the OpenERP Addons repository (comma-separated for
# multiple locations)
conf['addons_path'] = '/home/openerp/addons/trunk,/home/openerp/web/trunk/addons'
# Optional database config if not using local socket
#conf['db_name'] = 'mycompany'
#conf['db_host'] = 'localhost'
#conf['db_user'] = 'foo'
#conf['db_port'] = 5432
#conf['db_password'] = 'secret'
# OpenERP Log Level
# DEBUG=10, DEBUG_RPC=8, DEBUG_RPC_ANSWER=6, DEBUG_SQL=5, INFO=20,
# WARNING=30, ERROR=40, CRITICAL=50
# conf['log_level'] = 20
# If --static-http-enable is used, path for the static web directory
#conf['static_http_document_root'] = '/var/www'
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

0
history/xml2yml.py Executable file → Normal file
View File

View File

@ -30,6 +30,7 @@ GNU Public Licence.
(c) 2003-TODAY, Fabien Pinckaers - OpenERP SA
"""
import imp
import logging
import os
import signal
@ -42,6 +43,9 @@ import openerp
__author__ = openerp.release.author
__version__ = openerp.release.version
# Also use the `openerp` logger for the main script.
_logger = logging.getLogger('openerp')
def check_root_user():
""" Exit if the process's user is 'root' (on POSIX system)."""
if os.name == 'posix':
@ -66,13 +70,12 @@ def report_configuration():
This function assumes the configuration has been initialized.
"""
config = openerp.tools.config
logger = logging.getLogger('server')
logger.info("OpenERP version %s", __version__)
_logger.info("OpenERP version %s", __version__)
for name, value in [('addons paths', config['addons_path']),
('database hostname', config['db_host'] or 'localhost'),
('database port', config['db_port'] or '5432'),
('database user', config['db_user'])]:
logger.info("%s: %s", name, value)
_logger.info("%s: %s", name, value)
def setup_pid_file():
""" Create a file with the process id written in it.
@ -96,7 +99,7 @@ def preload_registry(dbname):
# jobs will start to be processed later, when openerp.cron.start_master_thread() is called by openerp.service.start_services()
registry.schedule_cron_jobs()
except Exception:
logging.exception('Failed to initialize database `%s`.', dbname)
_logger.exception('Failed to initialize database `%s`.', dbname)
def run_test_file(dbname, test_file):
""" Preload a registry, possibly run a test file, and start the cron."""
@ -105,25 +108,23 @@ def run_test_file(dbname, test_file):
db, registry = openerp.pooler.get_db_and_pool(
dbname, update_module=update_module, pooljobs=False, force_demo=not config['without_demo'])
cr = db.cursor()
logger = logging.getLogger('server')
logger.info('loading test file %s', test_file)
_logger.info('loading test file %s', test_file)
openerp.tools.convert_yaml_import(cr, 'base', file(test_file), {}, 'test', True)
cr.rollback()
cr.close()
except Exception:
logging.exception('Failed to initialize database `%s` and run test file `%s`.', dbname, test_file)
_logger.exception('Failed to initialize database `%s` and run test file `%s`.', dbname, test_file)
def export_translation():
config = openerp.tools.config
dbname = config['db_name']
logger = logging.getLogger('server')
if config["language"]:
msg = "language %s" % (config["language"],)
else:
msg = "new language"
logger.info('writing translation file for %s to %s', msg,
_logger.info('writing translation file for %s to %s', msg,
config["translate_out"])
fileformat = os.path.splitext(config["translate_out"])[-1][1:].lower()
@ -134,7 +135,7 @@ def export_translation():
cr.close()
buf.close()
logger.info('translation file written successfully')
_logger.info('translation file written successfully')
def import_translation():
config = openerp.tools.config
@ -144,7 +145,6 @@ def import_translation():
cr = openerp.pooler.get_db(dbname).cursor()
openerp.tools.trans_load( cr, config["translate_in"], config["language"],
context=context)
openerp.tools.trans_update_res_ids(cr)
cr.commit()
cr.close()
@ -169,16 +169,21 @@ def dumpstacks(sig, frame):
""" Signal handler: dump a stack trace for each existing thread."""
# code from http://stackoverflow.com/questions/132058/getting-stack-trace-from-a-running-python-application#answer-2569696
# modified for python 2.5 compatibility
thread_map = dict(threading._active, **threading._limbo)
id2name = dict([(threadId, thread.getName()) for threadId, thread in thread_map.items()])
threads_info = dict([(th.ident, {'name': th.name,
'uid': getattr(th,'uid','n/a')})
for th in threading.enumerate()])
code = []
for threadId, stack in sys._current_frames().items():
code.append("\n# Thread: %s(%d)" % (id2name[threadId], threadId))
thread_info = threads_info.get(threadId)
code.append("\n# Thread: %s (id:%s) (uid:%s)" % \
(thread_info and thread_info['name'] or 'n/a',
threadId,
thread_info and thread_info['uid'] or 'n/a'))
for filename, lineno, name, line in traceback.extract_stack(stack):
code.append('File: "%s", line %d, in %s' % (filename, lineno, name))
if line:
code.append(" %s" % (line.strip()))
logging.getLogger('dumpstacks').info("\n".join(code))
_logger.info("\n".join(code))
def setup_signal_handlers():
""" Register the signal handler defined above. """
@ -211,18 +216,27 @@ def quit_on_signals():
openerp.service.stop_services()
sys.exit(0)
def configure_babel_localedata_path():
# Workaround: py2exe and babel.
if hasattr(sys, 'frozen'):
import babel
babel.localedata._dirname = os.path.join(os.path.dirname(sys.executable), 'localedata')
if __name__ == "__main__":
os.environ["TZ"] = "UTC"
check_root_user()
openerp.tools.config.parse_config(sys.argv[1:])
check_postgres_user()
openerp.netsvc.init_logger()
report_configuration()
config = openerp.tools.config
configure_babel_localedata_path()
setup_signal_handlers()
if config["test_file"]:
@ -244,18 +258,14 @@ if __name__ == "__main__":
for m in openerp.conf.server_wide_modules:
try:
__import__(m)
# Call any post_load hook.
info = openerp.modules.module.load_information_from_description_file(m)
if info['post_load']:
getattr(sys.modules[m], info['post_load'])()
openerp.modules.module.load_openerp_module(m)
except Exception:
msg = ''
if m == 'web':
msg = """
The `web` module is provided by the addons found in the `openerp-web` project.
Maybe you forgot to add those addons in your addons_path configuration."""
logging.exception('Failed to load server-wide module `%s`.%s', m, msg)
_logger.exception('Failed to load server-wide module `%s`.%s', m, msg)
if config['db_name']:
for dbname in config['db_name'].split(','):
@ -265,8 +275,7 @@ Maybe you forgot to add those addons in your addons_path configuration."""
sys.exit(0)
setup_pid_file()
logger = logging.getLogger('server')
logger.info('OpenERP server is running, waiting for connections...')
_logger.info('OpenERP server is running, waiting for connections...')
quit_on_signals()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -25,9 +25,9 @@
This module serves to contain all OpenERP addons, across all configured addons
paths. For the code to manage those addons, see openerp.modules.
Addons are made available here (i.e. under openerp.addons) after
openerp.tools.config.parse_config() is called (so that the addons paths
are known).
Addons are made available under `openerp.addons` after
openerp.tools.config.parse_config() is called (so that the addons paths are
known).
This module also conveniently reexports some symbols from openerp.modules.
Importing them from here is deprecated.

View File

@ -34,15 +34,15 @@
'base_data.xml',
'security/base_security.xml',
'base_menu.xml',
'base_module_meta.xml',
'res/res_security.xml',
'res/res_config.xml',
'data/res.country.state.csv'
],
'update_xml': [
'base_update.xml',
'ir/wizard/wizard_menu_view.xml',
'ir/ir.xml',
'ir/ir_filters.xml',
'ir/ir_config_parameter_view.xml',
'ir/workflow/workflow_view.xml',
'ir/report/ir_report.xml',
'module/module_view.xml',
@ -56,25 +56,23 @@
'module/wizard/base_module_configuration_view.xml',
'module/wizard/base_export_language_view.xml',
'module/wizard/base_update_translations_view.xml',
'module/wizard/base_module_immediate_install.xml',
'res/res_company_view.xml',
'res/res_request_view.xml',
'res/res_lang_view.xml',
'res/res_log_view.xml',
'res/res_partner_report.xml',
'res/res_partner_view.xml',
'res/res_partner_shortcut_data.xml',
'res/res_bank_view.xml',
'res/res_country_view.xml',
'res/res_currency_view.xml',
'res/res_partner_event_view.xml',
'res/wizard/partner_sms_send_view.xml',
'res/wizard/partner_wizard_massmail_view.xml',
'res/wizard/partner_clear_ids_view.xml',
'res/wizard/partner_wizard_ean_check_view.xml',
'res/res_users_view.xml',
'res/res_partner_data.xml',
'res/ir_property_view.xml',
'security/base_security.xml',
'publisher_warranty/publisher_warranty_view.xml',
'security/ir.model.access.csv',
'security/ir.model.access-1.csv', # res.partner.address is deprecated; it is still there for backward compability only and will be removed in next version
'res/res_widget_view.xml',
'res/res_widget_data.xml',
'publisher_warranty/publisher_warranty_data.xml',
@ -82,6 +80,7 @@
'demo_xml': [
'base_demo.xml',
'res/res_partner_demo.xml',
'res/res_partner_demo.yml',
'res/res_widget_demo.xml',
],
'test': [
@ -91,15 +90,14 @@
'test/bug_lp541545.xml',
'test/test_osv_expression.yml',
'test/test_ir_rule.yml', # <-- These tests modify/add/delete ir_rules.
'test/test_ir_values.yml',
# Commented because this takes some time.
# This must be (un)commented with the corresponding import statement
# in test/__init__.py.
# 'test/test_ir_cron.yml', # <-- These tests perform a roolback.
],
'installable': True,
'active': True,
'auto_install': True,
'certificate': '0076807797149',
"css": [ 'static/src/css/modules.css' ],
'css': ['static/src/css/modules.css'],
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -59,7 +59,7 @@ ALTER TABLE ir_model_fields ADD column serialization_field_id int references ir_
CREATE TABLE ir_actions (
id serial NOT NULL,
name varchar(64) DEFAULT ''::varchar NOT NULL,
"type" varchar(32) DEFAULT 'window'::varchar NOT NULL,
"type" varchar(32) NOT NULL,
usage varchar(32) DEFAULT null,
primary key(id)
);
@ -146,17 +146,15 @@ select setval('ir_ui_menu_id_seq', 2);
CREATE TABLE res_users (
id serial NOT NULL,
name varchar(64) not null,
active boolean default True,
login varchar(64) NOT NULL UNIQUE,
password varchar(64) default null,
email varchar(64) default null,
context_tz varchar(64) default null,
signature text,
context_lang varchar(64) default '',
tz varchar(64) default null,
lang varchar(64) default '',
-- No FK references below, will be added later by ORM
-- (when the destination rows exist)
company_id int,
partner_id int,
primary key(id)
);
alter table res_users add constraint res_users_login_uniq unique (login);
@ -286,6 +284,7 @@ CREATE TABLE ir_module_module (
write_date timestamp without time zone,
write_uid integer references res_users on delete set null,
website character varying(256),
summary character varying(256),
name character varying(128) NOT NULL,
author character varying(128),
url character varying(128),
@ -301,6 +300,8 @@ CREATE TABLE ir_module_module (
demo boolean default False,
web boolean DEFAULT FALSE,
license character varying(32),
sequence integer DEFAULT 100,
auto_install boolean default False,
primary key(id)
);
ALTER TABLE ir_module_module add constraint name_uniq unique (name);
@ -345,11 +346,44 @@ CREATE TABLE ir_model_data (
res_id integer, primary key(id)
);
-- Records foreign keys and constraints installed by a module (so they can be
-- removed when the module is uninstalled):
-- - for a foreign key: type is 'f',
-- - for a constraint: type is 'u' (this is the convention PostgreSQL uses).
CREATE TABLE ir_model_constraint (
id serial NOT NULL,
create_uid integer,
create_date timestamp without time zone,
write_date timestamp without time zone,
write_uid integer,
date_init timestamp without time zone,
date_update timestamp without time zone,
module integer NOT NULL references ir_module_module on delete restrict,
model integer NOT NULL references ir_model on delete restrict,
type character varying(1) NOT NULL,
name character varying(128) NOT NULL
);
-- Records relation tables (i.e. implementing many2many) installed by a module
-- (so they can be removed when the module is uninstalled).
CREATE TABLE ir_model_relation (
id serial NOT NULL,
create_uid integer,
create_date timestamp without time zone,
write_date timestamp without time zone,
write_uid integer,
date_init timestamp without time zone,
date_update timestamp without time zone,
module integer NOT NULL references ir_module_module on delete restrict,
model integer NOT NULL references ir_model on delete restrict,
name character varying(128) NOT NULL
);
---------------------------------
-- Users
---------------------------------
insert into res_users (id,login,password,name,active,company_id,context_lang) values (1,'admin','admin','Administrator',True,1,'en_US');
insert into res_users (id,login,password,active,company_id,partner_id,lang) values (1,'admin','admin',True,1,1,'en_US');
insert into ir_model_data (name,module,model,noupdate,res_id) values ('user_root','base','res.users',True,1);
-- Compatibility purpose, to remove V6.0

View File

@ -4,7 +4,6 @@
<record id="view_menu" model="ir.ui.view">
<field name="name">ir.ui.menu.tree</field>
<field name="model">ir.ui.menu</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Menu" toolbar="1">
<field icon="icon" name="name"/>
@ -91,6 +90,10 @@
<field name="name">Aruba</field>
<field name="code">aw</field>
</record>
<record id="ax" model="res.country">
<field name="name">Åland Islands</field>
<field name="code">ax</field>
</record>
<record id="az" model="res.country">
<field name="name">Azerbaijan</field>
<field name="code">az</field>
@ -132,6 +135,10 @@
<field name="name">Benin</field>
<field name="code">bj</field>
</record>
<record id="bl" model="res.country">
<field name="name">Saint Barthélémy</field>
<field name="code">bl</field>
</record>
<record id="bm" model="res.country">
<field name="name">Bermuda</field>
<field name="code">bm</field>
@ -144,6 +151,10 @@
<field name="name">Bolivia</field>
<field name="code">bo</field>
</record>
<record id="bq" model="res.country">
<field name="name">Bonaire, Sint Eustatius and Saba</field>
<field name="code">bq</field>
</record>
<record id="br" model="res.country">
<field name="name">Brazil</field>
<field name="code">br</field>
@ -187,7 +198,7 @@
<field name="code">cf</field>
</record>
<record id="cd" model="res.country">
<field name="name">Congo, The Democratic Republic of the</field>
<field name="name">Congo, Democratic Republic of the</field>
<field name="code">cd</field>
</record>
<record id="cg" model="res.country">
@ -226,15 +237,6 @@
<field name="name">Costa Rica</field>
<field name="code">cr</field>
</record>
<record id="rs" model="res.country">
<field name="name">Serbia</field>
<field name="code">rs</field>
</record>
<record id="me" model="res.country">
<field name="name">Montenegro</field>
<field name="code">me</field>
</record>
<record id="cu" model="res.country">
<field name="name">Cuba</field>
<field name="code">cu</field>
@ -243,6 +245,10 @@
<field name="name">Cape Verde</field>
<field name="code">cv</field>
</record>
<record id="cw" model="res.country">
<field name="name">Curaçao</field>
<field name="code">cw</field>
</record>
<record id="cx" model="res.country">
<field name="name">Christmas Island</field>
<field name="code">cx</field>
@ -358,6 +364,10 @@
<field name="name">Gibraltar</field>
<field name="code">gi</field>
</record>
<record id="gg" model="res.country">
<field name="name">Guernsey</field>
<field name="code">gg</field>
</record>
<record id="gl" model="res.country">
<field name="name">Greenland</field>
<field name="code">gl</field>
@ -383,7 +393,7 @@
<field name="code">gr</field>
</record>
<record id="gs" model="res.country">
<field name="name">S. Georgia &amp; S. Sandwich Isls.</field>
<field name="name">South Georgia and the South Sandwich Islands</field>
<field name="code">gs</field>
</record>
<record id="gt" model="res.country">
@ -438,6 +448,10 @@
<field name="name">Israel</field>
<field name="code">il</field>
</record>
<record id="im" model="res.country">
<field name="name">Isle of Man</field>
<field name="code">im</field>
</record>
<record id="in" model="res.country">
<field name="name">India</field>
<field name="code">in</field>
@ -463,6 +477,10 @@
<field name="name">Italy</field>
<field name="code">it</field>
</record>
<record id="je" model="res.country">
<field name="name">Jersey</field>
<field name="code">je</field>
</record>
<record id="jm" model="res.country">
<field name="name">Jamaica</field>
<field name="code">jm</field>
@ -575,6 +593,14 @@
<field name="name">Moldavia</field>
<field name="code">md</field>
</record>
<record id="me" model="res.country">
<field name="name">Montenegro</field>
<field name="code">me</field>
</record>
<record id="mf" model="res.country">
<field name="name">Saint Martin (French part)</field>
<field name="code">mf</field>
</record>
<record id="mg" model="res.country">
<field name="name">Madagascar</field>
<field name="code">mg</field>
@ -584,7 +610,7 @@
<field name="code">mh</field>
</record>
<record id="mk" model="res.country">
<field name="name">FYROM</field>
<field name="name">Macedonia, the former Yugoslav Republic of</field>
<field name="code">mk</field>
</record>
<record id="ml" model="res.country">
@ -674,6 +700,7 @@
<record id="nl" model="res.country">
<field name="name">Netherlands</field>
<field name="code">nl</field>
<field name="address_format" eval="'%(street)s\n%(street2)s\n%(zip)s %(city)s\n%(country_name)s'" />
</record>
<record id="no" model="res.country">
<field name="name">Norway</field>
@ -743,6 +770,10 @@
<field name="name">Puerto Rico</field>
<field name="code">pr</field>
</record>
<record id="ps" model="res.country">
<field name="name">Palestinian Territory, Occupied</field>
<field name="code">ps</field>
</record>
<record id="pt" model="res.country">
<field name="name">Portugal</field>
<field name="code">pt</field>
@ -767,6 +798,10 @@
<field name="name">Romania</field>
<field name="code">ro</field>
</record>
<record id="rs" model="res.country">
<field name="name">Serbia</field>
<field name="code">rs</field>
</record>
<record id="ru" model="res.country">
<field name="name">Russian Federation</field>
<field name="code">ru</field>
@ -812,7 +847,7 @@
<field name="code">sj</field>
</record>
<record id="sk" model="res.country">
<field name="name">Slovak Republic</field>
<field name="name">Slovakia</field>
<field name="code">sk</field>
</record>
<record id="sl" model="res.country">
@ -835,6 +870,10 @@
<field name="name">Suriname</field>
<field name="code">sr</field>
</record>
<record id="ss" model="res.country">
<field name="name">South Sudan</field>
<field name="code">ss</field>
</record>
<record id="st" model="res.country">
<field name="name">Saint Tome (Sao Tome) and Principe</field>
<field name="code">st</field>
@ -843,6 +882,10 @@
<field name="name">El Salvador</field>
<field name="code">sv</field>
</record>
<record id="sx" model="res.country">
<field name="name">Sint Maarten (Dutch part)</field>
<field name="code">sx</field>
</record>
<record id="sy" model="res.country">
<field name="name">Syria</field>
<field name="code">sy</field>
@ -1014,14 +1057,16 @@
<record id="main_partner" model="res.partner">
<field name="name">Your Company</field>
<!-- Address and Company ID will be set later -->
<field name="address" eval="[]"/>
<field name="company_id" eval="None"/>
<field name="customer" eval="False"/>
</record>
<record id="main_address" model="res.partner.address">
<field name="partner_id" ref="main_partner"/>
<field name="type">default</field>
<field name="company_id" eval="None"/>
<field name="is_company" eval="True"/>
<field name="street">45, Rue du Palais</field>
<field name="city">Paris</field>
<field name="zip">75016</field>
<field ref="base.fr" name="country_id"/>
<field name="phone">+33 1 49 51 23 94</field>
<field name="email">info@yourcompany.com</field>
<field name="website">www.yourcompany.com</field>
</record>
<!-- Currencies -->
@ -1043,27 +1088,29 @@
<record id="main_company" model="res.company">
<field name="name">Your Company</field>
<field name="partner_id" ref="main_partner"/>
<field name="rml_footer1">Web: www.companyname.com - Tel: +1-212-555-12345</field>
<field name="rml_footer2">IBAN: XX12 3456 7890 1234 5678 - SWIFT: SWIFTCODE - VAT: Company vat number</field>
<field name="rml_header1">Your Company Slogan</field>
<field name="rml_footer1">Web: http://www.yourcompany.com - Tel: +33 1 49 51 23 94</field>
<field name="rml_footer2">Bank Accounts... to be configured in menu Settings > Accounting/Invoicing.</field>
<field name="currency_id" ref="base.EUR"/>
</record>
<record model="res.users" id="base.user_root">
<field name="signature">Administrator</field>
<record model="res.partner" id="base.partner_root">
<field name="name">Administrator</field>
<field name="company_id" ref="main_company"/>
<field name="customer" eval="False"/>
</record>
<record model="res.users" id="base.user_root">
<field name="partner_id" ref="base.partner_root"/>
<field name="company_id" ref="main_company"/>
<field name="menu_id" ref="action_menu_admin"/>
<field name="company_ids" eval="[(4, ref('main_company'))]"/>
<field name="menu_id" ref="action_menu_admin"/>
<field name="signature">Administrator</field>
</record>
<record id="main_partner" model="res.partner">
<field name="company_id" ref="main_company"/>
</record>
<record id="main_address" model="res.partner.address">
<field name="company_id" ref="main_company"/>
</record>
<record id="EUR" model="res.currency">
<field name="company_id" ref="main_company"/>
</record>
<!-- The Following currency rates are considered as on 1st Jan,2010 against EUR. -->
<!-- Currencies -->
@ -1329,7 +1376,7 @@
<record id="INR" model="res.currency">
<field name="name">INR</field>
<field name="symbol">Rs</field>
<field name="symbol"></field>
<field name="rounding">0.01</field>
<field name="accuracy">4</field>
<field name="company_id" ref="main_company"/>
@ -1588,7 +1635,7 @@
</record>
<record id="res_bank_1" model="res.bank">
<field name="name">Reserve</field>
<field name="name">International Bank</field>
</record>
<record id="CRC" model="res.currency">

View File

@ -1,19 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<record id="demo_address" model="res.partner.address">
<field name="name">Fabien Dupont</field>
<field name="street">Chaussee de Namur</field>
<field name="zip">1367</field>
<field name="city">Gerompont</field>
<field name="phone">(+32).81.81.37.00</field>
<field name="type">default</field>
<field model="res.country" name="country_id" ref="be"/>
<!-- Company ID will be set later -->
<field name="company_id" eval="None"/>
</record>
<record id="user_demo" model="res.users">
<field name="login">demo</field>
<field name="password">demo</field>

View File

@ -1,34 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<menuitem icon="terp-administration" id="menu_administration"
name="Settings" sequence="50"
web_icon="data/administration.png"
web_icon_hover="data/administration-hover.png"/>
<menuitem icon="terp-administration" id="menu_administration_shortcut" parent="menu_administration" name="Custom Shortcuts" sequence="50"/>
<menuitem id="menu_custom" name="Customization"
parent="base.menu_administration" sequence="6"
groups="base.group_extended"/>
<menuitem id="next_id_4" name="Low Level Objects"
parent="base.menu_custom" sequence="30"/>
<menuitem id="menu_low_workflow" name="Workflows" parent="base.next_id_4"/>
<menuitem id="menu_custom_action" name="Actions" parent="base.menu_custom" groups="base.group_extended" sequence="20"/>
<menuitem id="menu_config" name="Configuration" parent="base.menu_administration" sequence="1"/>
<menuitem id="menu_translation" name="Translations" parent="base.menu_administration" sequence="6"/>
<menuitem id="menu_translation_app" name="Application Terms" parent="base.menu_translation" sequence="4" groups="base.group_extended"/>
<menuitem id="menu_translation_export" name="Import / Export"
groups="base.group_extended" parent="base.menu_translation" sequence="3"/>
<menuitem id="menu_users" name="Users" parent="base.menu_administration" sequence="4"/>
<menuitem id="menu_security" name="Security" parent="base.menu_administration" sequence="5"
groups="base.group_extended"/>
<menuitem id="menu_management" name="Modules" parent="base.menu_administration" sequence="0"/>
<menuitem id="reporting_menu"
parent="base.menu_custom" name="Reporting" sequence="30"
/>
<!-- Top menu item -->
<menuitem name="Reporting"
id="menu_reporting"
groups="base.group_user"
sequence="170"/>
<menuitem id="menu_reporting_dashboard" name="Dashboards" parent="menu_reporting" sequence="0"/>
<menuitem id="menu_reporting_config" name="Configuration" parent="menu_reporting" sequence="100" groups="base.group_system"/>
<!-- Top menu item -->
<menuitem name="Settings"
id="menu_administration"
sequence="500"/>
<menuitem id="menu_management" name="Modules" parent="menu_administration" sequence="0"/>
<menuitem id="menu_config" name="Configuration" parent="menu_administration" sequence="1"/>
<menuitem id="menu_administration_shortcut" parent="menu_administration" name="Custom Shortcuts" sequence="50"/>
<menuitem id="menu_users" name="Users" parent="menu_administration" sequence="4"/>
<menuitem id="menu_translation" name="Translations" parent="menu_administration" sequence="7"/>
<menuitem id="menu_translation_app" name="Application Terms" parent="menu_translation" sequence="4" groups="base.group_no_one"/>
<menuitem id="menu_translation_export" name="Import / Export" parent="menu_translation" sequence="3" groups="base.group_no_one"/>
<menuitem id="menu_custom" name="Technical" parent="menu_administration" sequence="110" groups="base.group_no_one"/>
<menuitem id="next_id_2" name="User Interface" parent="menu_custom"/>
<menuitem id="menu_email" name="Email" parent="menu_custom" sequence="1"/>
<menuitem id="menu_security" name="Security" parent="menu_custom" sequence="25"/>
<menuitem id="menu_ir_property" name="Parameters" parent="menu_custom" sequence="24"/>
<menuitem id="next_id_4" name="Low Level Objects" parent="menu_custom" sequence="30"/>
<menuitem id="base.menu_reporting" name="Reporting" parent="base.menu_administration" sequence="11"
groups="base.group_extended"/>
<menuitem id="menu_audit" name="Audit" parent="base.menu_reporting" sequence="50"/>
</data>
</openerp>

View File

@ -1,61 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="base.module_account_accountant" model="ir.module.module">
<field name="sequence">10</field>
</record>
<record id="base.module_account_asset" model="ir.module.module">
<field name="sequence">32</field>
</record>
<record id="base.module_account_voucher" model="ir.module.module">
<field name="sequence">4</field>
</record>
<record id="base.module_crm" model="ir.module.module">
<field name="sequence">2</field>
</record>
<record id="base.module_hr" model="ir.module.module">
<field name="sequence">12</field>
</record>
<record id="base.module_hr_expense" model="ir.module.module">
<field name="sequence">30</field>
</record>
<record id="base.module_hr_holidays" model="ir.module.module">
<field name="sequence">28</field>
</record>
<record id="base.module_hr_payroll" model="ir.module.module">
<field name="sequence">38</field>
</record>
<record id="base.module_hr_recruitment" model="ir.module.module">
<field name="sequence">24</field>
</record>
<record id="base.module_hr_timesheet_sheet" model="ir.module.module">
<field name="sequence">16</field>
</record>
<record id="base.module_mrp" model="ir.module.module">
<field name="sequence">18</field>
</record>
<record id="base.module_point_of_sale" model="ir.module.module">
<field name="sequence">6</field>
</record>
<record id="base.module_project" model="ir.module.module">
<field name="sequence">8</field>
</record>
<record id="base.module_project_gtd" model="ir.module.module">
<field name="sequence">20</field>
</record>
<record id="base.module_project_issue" model="ir.module.module">
<field name="sequence">22</field>
</record>
<record id="base.module_purchase" model="ir.module.module">
<field name="sequence">19</field>
</record>
<record id="base.module_sale" model="ir.module.module">
<field name="sequence">14</field>
</record>
<record id="base.module_stock" model="ir.module.module">
<field name="sequence">16</field>
</record>
</data>
</openerp>

View File

@ -1,298 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!--
======================
Languages
======================
-->
<menuitem id="next_id_2" name="User Interface" parent="base.menu_custom" groups="base.group_extended"/>
<!--
======================
Groups
======================
-->
<record id="view_groups_form" model="ir.ui.view">
<field name="name">res.groups.form</field>
<field name="model">res.groups</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Groups">
<field name="category_id" select="1"/>
<field name="name" select="1"/>
<notebook colspan="4">
<page string="Users">
<field colspan="4" name="users" nolabel="1"/>
</page>
<page string="Inherited">
<label colspan="4" string="Users added to this group are automatically added in the following groups."/>
<field colspan="4" name="implied_ids" nolabel="1"/>
</page>
<page string="Menus">
<field colspan="4" name="menu_access" nolabel="1"/>
</page>
<page string="Access Rights">
<field colspan="4" name="model_access" nolabel="1">
<tree string="Access Rules" editable="top">
<field name="model_id"/>
<field name="perm_read"/>
<field name="perm_write"/>
<field name="perm_create"/>
<field name="perm_unlink"/>
<field name="name"/>
</tree>
<form string="Access Controls">
<field colspan="4" name="name" select="1"/>
<field name="model_id" select="1"/>
<newline/>
<field name="perm_read"/>
<field name="perm_write"/>
<field name="perm_create"/>
<field name="perm_unlink"/>
</form>
</field>
</page>
<page string="Rules">
<field colspan="4" name="rule_groups" nolabel="1">
<tree string="Rules">
<field name="name"/>
<field name="model_id"/>
<field name="global"/>
</tree>
</field>
</page><page string="Notes">
<field colspan="4" name="comment" nolabel="1"/>
</page>
</notebook>
</form>
</field>
</record>
<!--
======================
Users
======================
-->
<record id="view_users_form_simple_modif" model="ir.ui.view">
<field name="name">res.users.preferences.form</field>
<field name="model">res.users</field>
<field name="type">form</field>
<field eval="18" name="priority"/>
<field name="arch" type="xml">
<form string="Users">
<field name="name" readonly="1"/>
<newline/>
<group colspan="2" col="2">
<separator string="Preferences" colspan="2"/>
<field name="view" readonly="0"/>
<field name="context_lang" readonly="0"/>
<field name="context_tz" readonly="0"/>
<field name="menu_tips" readonly="0"/>
</group>
<group name="default_filters" colspan="2" col="2">
<separator string="Default Filters" colspan="2"/>
<field name="company_id" widget="selection" readonly="0"
groups="base.group_multi_company" on_change="on_change_company_id(company_id)"/>
</group>
<separator string="Email Preferences" colspan="4"/>
<field colspan="4" name="user_email" widget="email" readonly="0"/>
<field colspan="4" name="signature" readonly="0"/>
</form>
</field>
</record>
<record id="view_users_form" model="ir.ui.view">
<field name="name">res.users.form</field>
<field name="model">res.users</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Users">
<group colspan="4" col="6">
<field name="name" select="1"/>
<field name="login" select="1"/>
<field name="id" invisible="1"/>
<field name="new_password" password="True" attrs="{'required': [('id','=',False)]}"/>
<field name="active"/>
</group>
<notebook colspan="4">
<page string="User">
<group colspan="4" col="6">
<!-- Second nested group to avoid misalignment with email prefs groups
in simplified view -->
<group colspan="6" col="6">
<group col="2" colspan="2">
<separator string="Preferences" colspan="2"/>
<field name="context_lang"/>
<field name="context_tz"/>
<field name="menu_tips"/>
</group>
<group name="default_filters" colspan="2" col="2">
<separator string="Default Filters" colspan="2"/>
<field name="company_id" required="1" context="{'user_preference': 0}" groups="base.group_multi_company"/>
</group>
<group colspan="2" col="2" groups="base.group_extended">
<separator string="Action" colspan="2"/>
<field name="action_id"/>
<field domain="[('usage','=','menu')]" name="menu_id" required="True"/>
</group>
</group>
<group colspan="6" col="2">
<separator string="Email Preferences" colspan="2"/>
<field name="user_email" widget="email"/>
<field name="signature"/>
</group>
</group>
</page>
<page string="Access Rights">
<field nolabel="1" name="groups_id"/>
</page>
<page string="Allowed Companies" groups="base.group_multi_company">
<field colspan="4" nolabel="1" name="company_ids" select="1"/>
</page>
</notebook>
</form>
</field>
</record>
<record id="user_groups_view" model="ir.ui.view">
<field name="name">res.users.groups</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="view_users_form"/>
<field name="arch" type="xml">
<!-- dummy, will be modified by groups -->
<field name="groups_id" position="after"/>
</field>
</record>
<record id="view_users_tree" model="ir.ui.view">
<field name="name">res.users.tree</field>
<field name="model">res.users</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Users">
<field name="name"/>
<field name="login"/>
<field name="context_lang"/>
<field name="date"/>
</tree>
</field>
</record>
<record id="view_users_search" model="ir.ui.view">
<field name="name">res.users.search</field>
<field name="model">res.users</field>
<field name="type">search</field>
<field name="arch" type="xml">
<search string="Users">
<field name="name"/>
<field name="login"/>
<field name="company_ids" string="Company" groups="base.group_multi_company"/>
</search>
</field>
</record>
<!--
======================
Company
======================
-->
<report id="preview_report" model="res.company" name="preview.report" multi="True"
rml="base/report/preview_report.rml" string="Preview Report"/>
<record id="bank_account_update" model="ir.actions.act_window">
<field name="name">Company Bank Accounts</field>
<field name="res_model">res.partner.bank</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="context" eval="{'default_partner_id':ref('base.main_partner'), 'company_hide':False, 'default_company_id':ref('base.main_company'), 'search_default_my_bank':1}"/>
<field name="help">Configure your company's bank account and select those that must appear on the report footer. You can reorder bank accounts from the list view. If you use the accounting application of OpenERP, journals and accounts will be created automatically based on these data.</field>
</record>
<record id="view_company_form" model="ir.ui.view">
<field name="name">res.company.form</field>
<field name="model">res.company</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Company">
<group colspan="4" col="6">
<group colspan="4" col="4">
<field name="name"/>
<field name="partner_id" readonly="1" required="0" groups="base.group_extended"/>
<field name="parent_id" groups="base.group_multi_company"/>
</group>
<group colspan="2" col="2">
<field name="logo" nolabel="1" widget="image"/>
</group>
</group>
<notebook colspan="4">
<page string="General Information">
<separator string="Address Information" colspan="4"/>
<field name="street"/>
<field name="street2"/>
<field name="zip"/>
<field name="city"/>
<field name="country_id"/>
<field name="state_id"/>
<field name="phone" on_change="on_change_header(phone, email, fax, website, vat, company_registry)"/>
<field name="email" on_change="on_change_header(phone, email, fax, website, vat, company_registry)"/>
<field name="fax" on_change="on_change_header(phone, email, fax, website, vat, company_registry)"/>
<field name="website" on_change="on_change_header(phone, email, fax, website, vat, company_registry)"/>
<field name="vat" on_change="on_change_header(phone, email, fax, website, vat, company_registry)"/>
<field name="company_registry" on_change="on_change_header(phone, email, fax, website, vat, company_registry)"/>
<separator string="Header/Footer of Reports" colspan="4"/>
<group colspan="4" col="3">
<field name="rml_header1" colspan="3"/>
<newline/>
<field name="rml_footer1" colspan="3" groups="base.group_extended"/>
<newline/>
<field name="rml_footer2" colspan="2"/>
<button name="%(bank_account_update)d" string="Set Bank Accounts" type="action" icon="gtk-go-forward"/>
<newline/>
<label string="" colspan="2"/>
<button name="%(preview_report)d" string="Preview Header" type="action" icon="gtk-print"/>
</group>
</page>
<page string="Header/Footer" groups="base.group_extended">
<group colspan="2" col="4">
<field name="paper_format" on_change="onchange_paper_format(paper_format)"/>
</group>
<field colspan="4" name="rml_header" nolabel="1"/>
</page>
<page string="Internal Header/Footer" groups="base.group_extended">
<separator string="Portrait" colspan="2"/>
<separator string="Landscape" colspan="2"/>
<field colspan="2" name="rml_header2" nolabel="1"/>
<field colspan="2" name="rml_header3" nolabel="1"/>
</page>
<page string="Configuration">
<separator string="Accounting" colspan="4"/>
<field name="currency_id" colspan="2"/>
<newline/>
</page>
</notebook>
</form>
</field>
</record>
<record id="view_company_tree" model="ir.ui.view">
<field name="name">res.company.tree</field>
<field name="model">res.company</field>
<field name="type">tree</field>
<field name="field_parent">child_ids</field>
<field name="arch" type="xml">
<tree string="Companies">
<field name="name"/>
<field name="partner_id"/>
</tree>
</field>
</record>
<record id="category_administration_config" model="ir.actions.todo.category">
<field name="name">Administration</field>
<field name="sequence">1</field>
</record>
</data>
</openerp>

15177
openerp/addons/base/i18n/ab.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

15306
openerp/addons/base/i18n/gu.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

17103
openerp/addons/base/i18n/ka.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -177,7 +177,7 @@ msgstr ""
#. module: base
#: field:ir.actions.report.custom,multi:0
#: field:ir.actions.report.xml,multi:0
msgid "On multiple doc."
msgid "On Multiple Doc."
msgstr ""
#. module: base
@ -2110,7 +2110,7 @@ msgstr ""
#. module: base
#: help:ir.actions.report.xml,header:0
msgid "Add or not the coporate RML header"
msgid "Add or not the corporate RML header"
msgstr ""
#. module: base
@ -2304,7 +2304,7 @@ msgstr ""
#. module: base
#: field:ir.actions.report.xml,report_sxw_content:0
#: field:ir.actions.report.xml,report_sxw_content_data:0
msgid "SXW content"
msgid "SXW Content"
msgstr ""
#. module: base
@ -2812,7 +2812,7 @@ msgstr ""
#. module: base
#: field:ir.actions.report.xml,report_sxw:0
msgid "SXW path"
msgid "SXW Path"
msgstr ""
#. module: base
@ -3001,7 +3001,7 @@ msgstr ""
#. module: base
#: field:ir.module.module,demo:0
msgid "Demo data"
msgid "Demo Data"
msgstr ""
#. module: base
@ -3483,7 +3483,7 @@ msgstr ""
#. module: base
#: field:workflow.transition,signal:0
msgid "Signal (button Name)"
msgid "Signal (Button Name)"
msgstr ""
#. module: base
@ -3728,7 +3728,7 @@ msgstr ""
#. module: base
#: field:ir.model.fields,on_delete:0
msgid "On delete"
msgid "On Delete"
msgstr ""
#. module: base
@ -4410,7 +4410,7 @@ msgstr ""
#. module: base
#: view:ir.sequence:0
msgid "Seconde: %(sec)s"
msgid "Second: %(sec)s"
msgstr ""
#. module: base
@ -4669,7 +4669,7 @@ msgstr ""
#. module: base
#: field:ir.actions.report.xml,report_xsl:0
msgid "XSL path"
msgid "XSL Path"
msgstr ""
#. module: base
@ -4849,7 +4849,7 @@ msgstr ""
#. module: base
#: view:ir.sequence:0
msgid "Week of the year: %(woy)s"
msgid "Week of the Year: %(woy)s"
msgstr ""
#. module: base
@ -5212,7 +5212,7 @@ msgstr ""
#. module: base
#: view:ir.sequence:0
msgid "Day of the year: %(doy)s"
msgid "Day of the Year: %(doy)s"
msgstr ""
#. module: base
@ -5361,7 +5361,7 @@ msgstr ""
#. module: base
#: field:ir.module.module,latest_version:0
msgid "Installed version"
msgid "Installed Version"
msgstr ""
#. module: base
@ -6142,7 +6142,7 @@ msgstr ""
#. module: base
#: field:res.partner.bank.type,field_ids:0
msgid "Type fields"
msgid "Type Fields"
msgstr ""
#. module: base
@ -6296,7 +6296,7 @@ msgstr ""
#. module: base
#: wizard_view:module.upgrade,next:0
#: wizard_field:module.upgrade,next,module_info:0
msgid "Modules to update"
msgid "Modules to Update"
msgstr ""
#. module: base
@ -6316,7 +6316,7 @@ msgstr ""
#. module: base
#: field:ir.actions.report.xml,header:0
msgid "Add RML header"
msgid "Add RML Header"
msgstr ""
#. module: base
@ -6509,7 +6509,7 @@ msgstr ""
#. module: base
#: field:ir.actions.report.xml,report_rml_content:0
#: field:ir.actions.report.xml,report_rml_content_data:0
msgid "RML content"
msgid "RML Content"
msgstr ""
#. module: base
@ -7051,7 +7051,7 @@ msgstr ""
#. module: base
#: field:ir.actions.report.xml,report_xml:0
msgid "XML path"
msgid "XML Path"
msgstr ""
#. module: base
@ -7194,7 +7194,7 @@ msgstr ""
#. module: base
#: field:ir.module.module,installed_version:0
msgid "Latest version"
msgid "Latest Version"
msgstr ""
#. module: base
@ -7256,7 +7256,7 @@ msgstr ""
#. module: base
#: field:ir.attachment,datas_fname:0
#: field:wizard.module.lang.export,name:0
msgid "Filename"
msgid "File Name"
msgstr ""
#. module: base
@ -7398,7 +7398,7 @@ msgstr ""
#. module: base
#: view:ir.sequence:0
msgid "Day of the week (0:Monday): %(weekday)s"
msgid "Day of the Week (0:Monday): %(weekday)s"
msgstr ""
#. module: base
@ -7584,7 +7584,7 @@ msgstr ""
#. module: base
#: field:ir.actions.report.xml,attachment:0
msgid "Save As Attachment Prefix"
msgid "Save as Attachment Prefix"
msgstr ""
#. module: base

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -187,7 +187,7 @@ msgstr "STOCK_GOTO_TOP"
#. module: base
#: field:ir.actions.report.custom,multi:0
#: field:ir.actions.report.xml,multi:0
msgid "On multiple doc."
msgid "On Multiple Doc."
msgstr "Op meerdere doc."
#. module: base
@ -2205,7 +2205,7 @@ msgstr "Tajikistan"
#. module: base
#: help:ir.actions.report.xml,header:0
msgid "Add or not the coporate RML header"
msgid "Add or not the corporate RML header"
msgstr "Wel of niet RML-bedrijfskoptekst toevoegen"
#. module: base
@ -2410,7 +2410,7 @@ msgstr "Standaard Veld"
#. module: base
#: field:ir.actions.report.xml,report_sxw_content:0
#: field:ir.actions.report.xml,report_sxw_content_data:0
msgid "SXW content"
msgid "SXW Content"
msgstr "SXW inhoud"
#. module: base
@ -2944,7 +2944,7 @@ msgstr "datum"
#. module: base
#: field:ir.actions.report.xml,report_sxw:0
msgid "SXW path"
msgid "SXW Path"
msgstr "SXW pad"
#. module: base
@ -3142,7 +3142,7 @@ msgstr "Bereken Gemiddelde"
#. module: base
#: field:ir.module.module,demo:0
msgid "Demo data"
msgid "Demo Data"
msgstr "Demo gegevens"
#. module: base
@ -3633,7 +3633,7 @@ msgstr "STOCK_UNDO"
#. module: base
#: field:workflow.transition,signal:0
msgid "Signal (button Name)"
msgid "Signal (Button Name)"
msgstr "Signaal (Naam Knop)"
#. module: base
@ -3885,7 +3885,7 @@ msgstr "Staat/Provinciecode"
#. module: base
#: field:ir.model.fields,on_delete:0
msgid "On delete"
msgid "On Delete"
msgstr "Bij Verwijderen"
#. module: base
@ -4584,7 +4584,7 @@ msgstr "Cirkeldiagram"
#. module: base
#: view:ir.sequence:0
msgid "Seconde: %(sec)s"
msgid "Second: %(sec)s"
msgstr "Secondes: %(sec)s"
#. module: base
@ -4847,7 +4847,7 @@ msgstr "Tokelau"
#. module: base
#: field:ir.actions.report.xml,report_xsl:0
msgid "XSL path"
msgid "XSL Path"
msgstr "XSL pad"
#. module: base
@ -5032,7 +5032,7 @@ msgstr "Duitsland"
#. module: base
#: view:ir.sequence:0
msgid "Week of the year: %(woy)s"
msgid "Week of the Year: %(woy)s"
msgstr "Week van het jaar: %(woy)s"
#. module: base
@ -5403,7 +5403,7 @@ msgstr "Record Regels"
#. module: base
#: view:ir.sequence:0
msgid "Day of the year: %(doy)s"
msgid "Day of the Year: %(doy)s"
msgstr "Dag van het jaar: %(doy)s"
#. module: base
@ -5552,7 +5552,7 @@ msgstr "Adres"
#. module: base
#: field:ir.module.module,latest_version:0
msgid "Installed version"
msgid "Installed Version"
msgstr "Geïnstalleerde versie"
#. module: base
@ -6353,7 +6353,7 @@ msgstr "Soort actie"
#. module: base
#: field:res.partner.bank.type,field_ids:0
msgid "Type fields"
msgid "Type Fields"
msgstr "Soort velden"
#. module: base
@ -6508,7 +6508,7 @@ msgstr "Taalbestand geladen"
#. module: base
#: wizard_view:module.upgrade,next:0
#: wizard_field:module.upgrade,next,module_info:0
msgid "Modules to update"
msgid "Modules to Update"
msgstr "Up-te-daten Modules"
#. module: base
@ -6532,7 +6532,7 @@ msgstr ""
#. module: base
#: field:ir.actions.report.xml,header:0
msgid "Add RML header"
msgid "Add RML Header"
msgstr "RML Koptekst Toevoegen"
#. module: base
@ -6739,7 +6739,7 @@ msgstr "terp-report"
#. module: base
#: field:ir.actions.report.xml,report_rml_content:0
#: field:ir.actions.report.xml,report_rml_content_data:0
msgid "RML content"
msgid "RML Content"
msgstr "RML inhoudt"
#. module: base
@ -7304,7 +7304,7 @@ msgstr "Begindatum"
#. module: base
#: field:ir.actions.report.xml,report_xml:0
msgid "XML path"
msgid "XML Path"
msgstr "XML pad"
#. module: base
@ -7455,7 +7455,7 @@ msgstr "View Auto-Load"
#. module: base
#: field:ir.module.module,installed_version:0
msgid "Latest version"
msgid "Latest Version"
msgstr "Laatste Versie"
#. module: base
@ -7518,7 +7518,7 @@ msgstr "Volgende Assistent"
#. module: base
#: field:ir.attachment,datas_fname:0
#: field:wizard.module.lang.export,name:0
msgid "Filename"
msgid "File Name"
msgstr "Bestandsnaam"
#. module: base
@ -7660,7 +7660,7 @@ msgstr "Som Berekenen"
#. module: base
#: view:ir.sequence:0
msgid "Day of the week (0:Monday): %(weekday)s"
msgid "Day of the Week (0:Monday): %(weekday)s"
msgstr "Dag van de week (0:Maandag): %(weekday)s"
#. module: base
@ -7861,7 +7861,7 @@ msgstr "Italiaans / Italiano"
#. module: base
#: field:ir.actions.report.xml,attachment:0
msgid "Save As Attachment Prefix"
msgid "Save as Attachment Prefix"
msgstr "Opslaan met bijlage voorvoegsel"
#. module: base

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More