{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Example of HTML capabilities of project inside IPython / Jupyter notebook" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Note**, this file used in tests, so it may contain additional test related logic." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Contents\n", "\n", "- [Initializing Environment](#Initializing-Environment)\n", "- [Connect to odoo database](#Connect-to-odoo-database)\n", "- [Session class](#Session-class)\n", "- [Connect to odoo database (via session)](#Connect-to-odoo-database-via-session)\n", "- [Module Utils plugin](#Module-Utils-plugin)\n", "- [Get list of all registered objects / models](#Get-list-of-all-registered-objects-/-models)\n", "- [Get object / model](#Get-object-/-model)\n", "- [Getting information about available columns for Object / Model](#Getting-information-about-available-columns-for-Object)\n", "- [Search for sale orders](#Search-for-sale-orders)\n", "- [Display Sale orders as HTML table](#Display-Sale-orders-as-HTML-table)\n", "- [Anyfield integration](#Anyfield-integration)\n", "- [Nested HTMLTables](#Nested-HTMLTables)\n", "- [Recordlist-elements-access](#Recordlist-elements-access)\n", "- [Display one sale order as HTML Table](#Display-one-sale-order-as-HTML-Table)\n", "- [Report service](#Report-service)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Initializing Environment" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# import extensions first (they modify Session and Client classes)\n", "from openerp_proxy.ext.all import HField\n", "\n", "# Enable module_utils plugin\n", "import openerp_proxy.plugins.module_utils\n", "\n", "# Import Client and Session classes\n", "from openerp_proxy import (Client,\n", " Session)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Connect to odoo database" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For connection to Odoo [Client](http://pythonhosted.org/openerp_proxy/module_ref/openerp_proxy.html#openerp_proxy.core.Client) class is used.\n", "Below is example of it's usage." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
\n", "
RPC Client
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
loginNone
Hostlocalhost
Protocolxml-rpc
Port8069
DatabaseNone
\n", "
\n", "
\n", "
\n", "
Info
\n", "
To get list of registered objects for thist database
access registered_objects property:
 .registered_objects
To get Object instance just call get_obj method
 .get_obj(name)
where name is name of Object You want to get
or use get item syntax instead:
 [name]
\n", "
\n", "
\n", "
" ], "text/plain": [ "Client: xml-rpc://None@localhost:8069/None" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cl = Client('localhost') # connect to local instance of server\n", "cl" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we should check if our database is present on server.\n", "For this purpose we should use Odoo's database service, which could be accessed via [Client.services.db](http://pythonhosted.org/openerp_proxy/module_ref/openerp_proxy.service.html#module-openerp_proxy.service.db).\n", "And if database does not exists, we can create it." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# check if our demo database exists\n", "if 'openerp_proxy_test_db' not in cl.services.db:\n", " # create demo database\n", " cl.services.db.create_db('admin', 'openerp_proxy_test_db', demo=True, lang='en_US')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And now we can [login](http://pythonhosted.org/openerp_proxy/module_ref/openerp_proxy.html#openerp_proxy.core.Client.login) to our database." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
\n", "
RPC Client
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
loginadmin
Hostlocalhost
Protocolxml-rpc
Port8069
Databaseopenerp_proxy_test_db
\n", "
\n", "
\n", "
\n", "
Info
\n", "
To get list of registered objects for thist database
access registered_objects property:
 .registered_objects
To get Object instance just call get_obj method
 .get_obj(name)
where name is name of Object You want to get
or use get item syntax instead:
 [name]
\n", "
\n", "
\n", "
" ], "text/plain": [ "Client: xml-rpc://admin@localhost:8069/openerp_proxy_test_db" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ldb = cl.login('openerp_proxy_test_db', 'admin', 'admin') # all this arguments could be passed directly to Client constructor.\n", "\n", "# and let's look how it is displayed in IPython\n", "ldb" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Note*, that ```ldb``` is new instance of [Client](http://pythonhosted.org/openerp_proxy/module_ref/openerp_proxy.html#openerp_proxy.core.Client) class, but with login credential. it can be used to interact with object service (models, documents, logic, ...)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Session class" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If You often need to connect to same databases, there are a [Session](http://pythonhosted.org/openerp_proxy/module_ref/openerp_proxy.html#openerp_proxy.session.Session) class,\n", "which automaticaly save, most of your connections, made via [Session.connect](http://pythonhosted.org/openerp_proxy/module_ref/openerp_proxy.html#openerp_proxy.session.Session.connect) method in specified file." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# create session instance\n", "session = Session('~/.openerp_proxy.local.json') # default file path is '~/.openerp_proxy.json'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And there are option You may be interested in. It is 'store_passwords', which automaticaly saves password You have used for connection." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "session.option('store_passwords', True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We used ```openerp_proxy.Client``` class to create connection to database, so our session does not know anything about it. Let's add our connection to our session:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
\n", "
Previous connections
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IndexURLAliases
1xml-rpc://admin@localhost:8069/openerp_proxy_test_dbldb
\n", "
\n", "
\n", "
\n", "
Info
\n", "
To get connection just call
  • session.aliase
  • session[index]
  • session[aliase]
  • session[url]
  • session.get_db(url|index|aliase)
\n", "
\n", "
\n", "
" ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "session.add_db(ldb)\n", "session" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And now we can get this connection from session by index, or by URL (look at the table above). But to simplify next connections, we may add aliase to this connection" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
\n", "
Previous connections
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
IndexURLAliases
1xml-rpc://admin@localhost:8069/openerp_proxy_test_dbldb
\n", "
\n", "
\n", "
\n", "
Info
\n", "
To get connection just call
  • session.aliase
  • session[index]
  • session[aliase]
  • session[url]
  • session.get_db(url|index|aliase)
\n", "
\n", "
\n", "
" ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "session.aliase('ldb', ldb)\n", "session" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, now, to get connection again we could just type ```session.ldb```.\n", "\n", "Ok. initialization is done, and now we could save it." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "session.save()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Connect to odoo database via session" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's now create new instance of session, and connect to created above database" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
\n", "
RPC Client
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
loginadmin
Hostlocalhost
Protocolxml-rpc
Port8069
Databaseopenerp_proxy_test_db
\n", "
\n", "
\n", "
\n", "
Info
\n", "
To get list of registered objects for thist database
access registered_objects property:
 .registered_objects
To get Object instance just call get_obj method
 .get_obj(name)
where name is name of Object You want to get
or use get item syntax instead:
 [name]
\n", "
\n", "
\n", "
" ], "text/plain": [ "Client: xml-rpc://admin@localhost:8069/openerp_proxy_test_db" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "session = Session('~/.openerp_proxy.local.json') # default file path is '~/.openerp_proxy.json'\n", "ldb = session.ldb\n", "ldb" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Module Utils plugin" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Our database is clean, for next code, we need to install ```sale``` addon. For this, we have ```module_utils``` plugin, out-of-the box, which simplyfies work with modules. To enable this plugin, we just need to import it, and then we will have it in ```ldb.plugins``` property. This plugin was imported above.\n", "This plugin extends ```ir.module.module``` model from client side, adding simple methods: ```install``` and ```upgrade``` to it for shorter syntax. If You're interested for code, look [here](https://github.com/katyukha/openerp-proxy/blob/master/openerp_proxy/plugins/module_utils.py), it is very simple!\n", "\n", "Also this plugin allows to acces any module registered in database, as attribute of plugin. All module attributes are prefixed with ```m_```. So to get access to ```sale``` module we can use folowing syntax: ```ldb.plugins.module_utils.m_sale```.\n", "\n", "So now, let's install ```sale``` module. (Note that in most cases, **IPython autocompletition** work's fine)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'tag': 'reload', 'type': 'ir.actions.client'}" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ldb.plugins.module_utils.m_sale.install()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Congratulation! module was installed!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One more interesting method of this plugins is ```module_utils.update_module_list``` method, which updates list of Odoo addons registered in database." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[58, 0]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ldb.plugins.module_utils.update_module_list()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Get list of all registered objects / models" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To get list of registered models, just use *registered_objects* proerty of *Client* instance.\n", "It returns list of all registered models in database. For example:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", "
Registered models
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", "
NameSystem NameDescription
Accountaccount.accountFalse
Templates for Accountsaccount.account.templateFalse
Account Typeaccount.account.typeFalse
account.addtmpl.wizardaccount.addtmpl.wizardAdd one more account from the template.\n", "\n", " With the 'nocreate' option, some accounts may not be created. Use this to add them later.
Account Aged Trial balance Reportaccount.aged.trial.balanceFalse
Analytic Accountaccount.analytic.accountFalse
Account Analytic Balanceaccount.analytic.balanceFalse
Account Analytic Chartaccount.analytic.chartFalse
Account Analytic Cost Ledgeraccount.analytic.cost.ledgerFalse
Account Analytic Cost Ledger For Journal Reportaccount.analytic.cost.ledger.journal.reportFalse
Account Analytic Inverted Balanceaccount.analytic.inverted.balanceFalse
Analytic Journalaccount.analytic.journalFalse
Account Analytic Journalaccount.analytic.journal.reportFalse
Analytic Lineaccount.analytic.lineFalse
Automatic Reconcileaccount.automatic.reconcileFalse
Trial Balance Reportaccount.balance.reportFalse
account.bank.accounts.wizardaccount.bank.accounts.wizardFalse
Bank Statementaccount.bank.statementFalse
Bank Statement Lineaccount.bank.statement.lineFalse
CashBox Lineaccount.cashbox.line Cash Box Details
Account Central Journalaccount.central.journalFalse
Change Currencyaccount.change.currencyFalse
Account chartaccount.chart\n", " For Chart of Accounts\n", "
Templates for Account Chartaccount.chart.templateFalse
Account Common Account Reportaccount.common.account.reportFalse
Account Common Journal Reportaccount.common.journal.reportFalse
Account Common Partner Reportaccount.common.partner.reportFalse
Account Common Reportaccount.common.reportFalse
account.config.settingsaccount.config.settingsFalse
Journal Items Analysisaccount.entries.reportFalse
Account Reportaccount.financial.reportFalse
Fiscal Positionaccount.fiscal.positionFalse
Accounts Fiscal Positionaccount.fiscal.position.accountFalse
Template Account Fiscal Mappingaccount.fiscal.position.account.templateFalse
Taxes Fiscal Positionaccount.fiscal.position.taxFalse
Template Tax Fiscal Positionaccount.fiscal.position.tax.templateFalse
Template for Fiscal Positionaccount.fiscal.position.templateFalse
Fiscal Yearaccount.fiscalyearFalse
Fiscalyear Closeaccount.fiscalyear.close\n", " Closes Account Fiscalyear and Generate Opening entries for New Fiscalyear\n", "
Fiscalyear Close stateaccount.fiscalyear.close.state\n", " Closes Account Fiscalyear\n", "
Account General Journalaccount.general.journalFalse
Accounting Reportaccounting.reportFalse
account.installeraccount.installerFalse
Invoiceaccount.invoiceFalse
Cancel the Selected Invoicesaccount.invoice.cancel\n", " This wizard will cancel the all the selected invoices.\n", " If in the journal, the option allow cancelling entry is not selected then it will give warning message.\n", "
Confirm the selected invoicesaccount.invoice.confirm\n", " This wizard will confirm the all the selected draft invoices\n", "
Invoice Lineaccount.invoice.lineFalse
Invoice Refundaccount.invoice.refundRefunds invoice
Invoices Statisticsaccount.invoice.reportFalse
Invoice Taxaccount.invoice.taxFalse
Journalaccount.journalFalse
account.journal.cashbox.lineaccount.journal.cashbox.lineFalse
Journal Periodaccount.journal.periodFalse
Account Journal Selectaccount.journal.select\n", " Account Journal Select\n", "
Account Modelaccount.modelFalse
Account Model Entriesaccount.model.lineFalse
Account Entryaccount.moveFalse
Move bank reconcileaccount.move.bank.reconcile\n", " Bank Reconciliation\n", "
Journal Itemsaccount.move.lineFalse
Account move line reconcileaccount.move.line.reconcile\n", " Account move line reconcile wizard, it checks for the write off the reconcile entry or directly reconcile.\n", "
Move line reconcile selectaccount.move.line.reconcile.selectFalse
Account move line reconcile (writeoff)account.move.line.reconcile.writeoff\n", " It opens the write off wizard form, in that user can define the journal, account, analytic account for reconcile\n", "
Unreconciliationaccount.move.line.unreconcile.selectFalse
Account Reconciliationaccount.move.reconcileFalse
Choose Fiscal Yearaccount.open.closed.fiscalyearFalse
Print Account Partner Balanceaccount.partner.balanceFalse
Account Partner Ledgeraccount.partner.ledgerFalse
Reconcilation Process partner by partneraccount.partner.reconcile.processFalse
Payment Termaccount.payment.termFalse
Payment Term Lineaccount.payment.term.lineFalse
Account periodaccount.periodFalse
period closeaccount.period.close\n", " close period\n", "
Account Print Journalaccount.print.journalFalse
General Ledger Reportaccount.report.general.ledgerFalse
account.sequence.fiscalyearaccount.sequence.fiscalyearFalse
Entries by Statement from Invoicesaccount.statement.from.invoice.lines\n", " Generate Entries by Statement from Invoices\n", "
Account State Openaccount.state.openFalse
Account Subscriptionaccount.subscriptionFalse
Subscription Computeaccount.subscription.generateFalse
Account Subscription Lineaccount.subscription.lineFalse
Taxaccount.tax\n", " A tax object.\n", "\n", " Type: percent, fixed, none, code\n", " PERCENT: tax = price * amount\n", " FIXED: tax = price + amount\n", " NONE: no tax line\n", " CODE: execute python code. localcontext = {'price_unit':pu}\n", " return result in the context\n", " Ex: result=round(price_unit*0.21,4)\n", "
Account tax chartaccount.tax.chart\n", " For Chart of taxes\n", "
Tax Codeaccount.tax.code\n", " A code for the tax object.\n", "\n", " This code is used for some tax declarations.\n", "
Tax Code Templateaccount.tax.code.templateFalse
Templates for Taxesaccount.tax.templateFalse
Treasury Analysisaccount.treasury.reportFalse
Account Unreconcileaccount.unreconcileFalse
Account Unreconcile Reconcileaccount.unreconcile.reconcileFalse
Use modelaccount.use.modelFalse
Account Vat Declarationaccount.vat.declarationFalse
Accounting Voucheraccount.voucherFalse
Voucher Linesaccount.voucher.lineFalse
Analytic Entries Statisticsanalytic.entries.reportFalse
base.config.settingsbase.config.settingsFalse
base_import.importbase_import.importFalse
base_import.tests.models.charbase_import.tests.models.charFalse
base_import.tests.models.char.noreadonlybase_import.tests.models.char.noreadonlyFalse
base_import.tests.models.char.readonlybase_import.tests.models.char.readonlyFalse
base_import.tests.models.char.requiredbase_import.tests.models.char.requiredFalse
base_import.tests.models.char.statesbase_import.tests.models.char.statesFalse
base_import.tests.models.char.stillreadonlybase_import.tests.models.char.stillreadonlyFalse
base_import.tests.models.m2obase_import.tests.models.m2oFalse
base_import.tests.models.m2o.relatedbase_import.tests.models.m2o.relatedFalse
base_import.tests.models.m2o.requiredbase_import.tests.models.m2o.requiredFalse
base_import.tests.models.m2o.required.relatedbase_import.tests.models.m2o.required.relatedFalse
base_import.tests.models.o2mbase_import.tests.models.o2mFalse
base_import.tests.models.o2m.childbase_import.tests.models.o2m.childFalse
base_import.tests.models.previewbase_import.tests.models.previewFalse
base.language.exportbase.language.exportFalse
Language Importbase.language.import Language Import
Install Languagebase.language.install Install Language
base.module.configurationbase.module.configurationFalse
Import Modulebase.module.import Import Module
Update Modulebase.module.update Update Module
Module Upgradebase.module.upgrade Module Upgrade
base.setup.terminologybase.setup.terminologyFalse
base.update.translationsbase.update.translationsFalse
Boardboard.boardFalse
Board Creationboard.createFalse
cash.box.incash.box.inFalse
cash.box.outcash.box.outFalse
Change Password Wizard Userchange.password.user\n", " A model to configure users in the change password wizard\n", "
Change Password Wizardchange.password.wizard\n", " A wizard to manage the change of users' passwords\n", "
decimal.precisiondecimal.precisionFalse
EDI Subsystemedi.ediFalse
Email Templatesemail.templateTemplates for sending email
Email Template Previewemail_template.previewFalse
fetchmail.config.settingsfetchmail.config.settings This wizard can be inherited in conjunction with 'res.config.settings', in order to\n", " define fields that configure a fetchmail server.\n", "\n", " It relies on the following convention on the object::\n", "\n", " class my_config_settings(osv.osv_memory):\n", " _name = 'my.settings'\n", " _inherit = ['res.config.settings', 'fetchmail.config.settings']\n", "\n", " _columns = {\n", " 'fetchmail_stuff': fields.boolean(...,\n", " fetchmail_model='my.stuff', fetchmail_name='Incoming Stuff'),\n", " }\n", "\n", " def configure_fetchmail_stuff(self, cr, uid, ids, context=None):\n", " return self.configure_fetchmail(cr, uid, 'fetchmail_stuff', context)\n", "\n", " and in the form view::\n", "\n", " \n", "
POP/IMAP Serverfetchmail.serverIncoming POP/IMAP mail server account
ir.actions.actionsir.actions.actionsFalse
ir.actions.act_urlir.actions.act_urlFalse
ir.actions.act_windowir.actions.act_windowFalse
ir.actions.act_window_closeir.actions.act_window_closeFalse
ir.actions.act_window.viewir.actions.act_window.viewFalse
ir.actions.clientir.actions.clientFalse
ir.actions.configuration.wizardir.actions.configuration.wizardFalse
ir.actions.report.xmlir.actions.report.xmlFalse
ir.actions.serverir.actions.serverFalse
Configuration Wizardsir.actions.todo\n", " Configuration Wizards\n", "
ir.actions.wizardir.actions.wizardFalse
ir.attachmentir.attachmentAttachments are used to link binary files or url to any openerp document.\n", "\n", " External attachment storage\n", " ---------------------------\n", " \n", " The 'data' function field (_data_get,data_set) is implemented using\n", " _file_read, _file_write and _file_delete which can be overridden to\n", " implement other storage engines, shuch methods should check for other\n", " location pseudo uri (example: hdfs://hadoppserver)\n", " \n", " The default implementation is the file:dirname location that stores files\n", " on the local filesystem using name based on their sha1 hash\n", "
ir.config_parameterir.config_parameterPer-database storage of configuration key-value pairs.
ir.cronir.cron Model describing cron jobs (also called actions or tasks).\n", "
ir.defaultir.defaultFalse
ir.exportsir.exportsFalse
ir.exports.lineir.exports.lineFalse
ir.fields.converterir.fields.converterFalse
Filtersir.filtersFalse
ir.mail_serverir.mail_serverRepresents an SMTP server, able to send outgoing emails, with SSL and TLS capabilities.
Modelsir.modelFalse
ir.model.accessir.model.accessFalse
ir.model.constraintir.model.constraint\n", " This model tracks PostgreSQL foreign keys and constraints used by OpenERP\n", " models.\n", "
ir.model.datair.model.dataHolds external identifier keys for records in the database.\n", " This has two main uses:\n", "\n", " * allows easy data integration with third-party systems,\n", " making import/export/sync of data possible, as records\n", " can be uniquely identified across multiple systems\n", " * allows tracking the origin of data installed by OpenERP\n", " modules themselves, thus making it possible to later\n", " update them seamlessly.\n", "
Fieldsir.model.fieldsFalse
ir.model.relationir.model.relation\n", " This model tracks PostgreSQL tables used to implement OpenERP many2many\n", " relations.\n", "
Applicationir.module.categoryFalse
Moduleir.module.moduleFalse
Module dependencyir.module.module.dependencyFalse
ir.needaction_mixinir.needaction_mixinMixin class for objects using the need action feature.\n", "\n", " Need action feature can be used by models that have to be able to\n", " signal that an action is required on a particular record. If in\n", " the business logic an action must be performed by somebody, for\n", " instance validation by a manager, this mechanism allows to set a\n", " list of users asked to perform an action.\n", "\n", " Models using the 'need_action' feature should override the\n", " ``_needaction_domain_get`` method. This method returns a\n", " domain to filter records requiring an action for a specific user.\n", "\n", " This class also offers several global services:\n", " - ``_needaction_count``: returns the number of actions uid has to perform\n", "
ir.propertyir.propertyFalse
ir.ruleir.ruleFalse
ir.sequenceir.sequence Sequence model.\n", "\n", " The sequence model allows to define and use so-called sequence objects.\n", " Such objects are used to generate unique identifiers in a transaction-safe\n", " way.\n", "\n", "
ir.sequence.typeir.sequence.typeFalse
ir.server.object.linesir.server.object.linesFalse
ir.translationir.translationFalse
ir.ui.menuir.ui.menuFalse
ir.ui.viewir.ui.viewFalse
ir.ui.view.customir.ui.view.customFalse
ir.ui.view_scir.ui.view_scFalse
ir.valuesir.valuesHolds internal model-specific action bindings and user-defined default\n", " field values. definitions. This is a legacy internal model, mixing\n", " two different concepts, and will likely be updated or replaced in a\n", " future version by cleaner, separate models. You should not depend\n", " explicitly on it.\n", "\n", " The purpose of each ``ir.values`` entry depends on its type, defined\n", " by the ``key`` column:\n", "\n", " * 'default': user-defined default values, used when creating new\n", " records of this model:\n", " * 'action': binding of an action to a particular *action slot* of\n", " this model, making the action easily available in the user\n", " interface for this model.\n", "\n", " The ``key2`` column acts as a qualifier, further refining the type\n", " of the entry. The possible values are:\n", "\n", " * for 'default' entries: an optional condition restricting the\n", " cases where this particular default value will be applicable,\n", " or ``False`` for no condition\n", " * for 'action' entries: the ``key2`` qualifier is one of the available\n", " action slots, defining how this action can be invoked:\n", "\n", " * ``'client_print_multi'`` for report printing actions that will\n", " be available on views displaying items from this model\n", " * ``'client_action_multi'`` for assistants (wizards) actions\n", " that will be available in views displaying objects of this model\n", " * ``'client_action_relate'`` for links towards related documents\n", " that should be available in views displaying objects of this model\n", " * ``'tree_but_open'`` for actions that will be triggered when\n", " double-clicking an item from this model in a hierarchical tree view\n", "\n", " Each entry is specific to a model (``model`` column), and for ``'actions'``\n", " type, may even be made specific to a given record of that model when the\n", " ``res_id`` column contains a record ID (``False`` means it's global for\n", " all records).\n", "\n", " The content of the entry is defined by the ``value`` column, which may either\n", " contain an arbitrary value, or a reference string defining the action that\n", " should be executed.\n", "\n", " .. rubric:: Usage: default values\n", " \n", " The ``'default'`` entries are usually defined manually by the\n", " users, and set by their UI clients calling :meth:`~.set_default`.\n", " These default values are then automatically used by the\n", " ORM every time a new record is about to be created, i.e. when\n", " :meth:`~openerp.osv.osv.osv.default_get`\n", " or :meth:`~openerp.osv.osv.osv.create` are called.\n", "\n", " .. rubric:: Usage: action bindings\n", "\n", " Business applications will usually bind their actions during\n", " installation, and OpenERP UI clients will apply them as defined,\n", " based on the list of actions included in the result of\n", " :meth:`~openerp.osv.osv.osv.fields_view_get`,\n", " or directly returned by explicit calls to :meth:`~.get_actions`.\n", "
Email Aliasesmail.aliasA Mail Alias is a mapping of an email address with a given OpenERP Document\n", " model. It is used by OpenERP's mail gateway when processing incoming emails\n", " sent to the system. If the recipient address (To) of the message matches\n", " a Mail Alias, the message will be either processed following the rules\n", " of that alias. If the message is a reply it will be attached to the\n", " existing discussion on the corresponding record, otherwise a new\n", " record of the corresponding model will be created.\n", " \n", " This is meant to be used in combination with a catch-all email configuration\n", " on the company's mail server, so that as soon as a new mail.alias is\n", " created, it becomes immediately usable and OpenERP will accept email for it.\n", "
Email composition wizardmail.compose.messageFalse
Document Followersmail.followers mail_followers holds the data related to the follow mechanism inside\n", " OpenERP. Partners can choose to follow documents (records) of any kind\n", " that inherits from mail.thread. Following documents allow to receive\n", " notifications for new messages.\n", " A subscription is characterized by:\n", " :param: res_model: model of the followed objects\n", " :param: res_id: ID of resource (may be 0 for every objects)\n", "
Discussion groupmail.groupFalse
Outgoing Mailsmail.mail Model holding RFC2822 email messages to send. This model also provides\n", " facilities to queue and send new email messages.
Messagemail.messageFalse
Message subtypesmail.message.subtype Class holding subtype definition for messages. Subtypes allow to tune\n", " the follower subscription, allowing only some subtypes to be pushed\n", " on the Wall.
Notificationsmail.notification Class holding notifications pushed to partners. Followers and partners\n", " added in 'contacts to notify' receive notifications.
Email Threadmail.thread mail_thread model is meant to be inherited by any model that needs to\n", " act as a discussion topic on which messages can be attached. Public\n", " methods are prefixed with ``message_`` in order to avoid name\n", " collisions with methods of the models that will inherit from this class.\n", "\n", " ``mail.thread`` defines fields used to handle and display the\n", " communication history. ``mail.thread`` also manages followers of\n", " inheriting classes. All features and expected behavior are managed\n", " by mail.thread. Widgets has been designed for the 7.0 and following\n", " versions of OpenERP.\n", "\n", " Inheriting classes are not required to implement any method, as the\n", " default implementation will work for any model. However it is common\n", " to override at least the ``message_new`` and ``message_update``\n", " methods (calling ``super``) to add model-specific behavior at\n", " creation and update of a thread when processing incoming emails.\n", "\n", " Options:\n", " - _mail_flat_thread: if set to True, all messages without parent_id\n", " are automatically attached to the first message posted on the\n", " ressource. If set to False, the display of Chatter is done using\n", " threads, and no parent_id is automatically set.\n", "
Invite wizardmail.wizard.invite Wizard to invite partners and make them followers.
Default multi companymulti_company.default\n", " Manage multi company default value\n", "
osv_memory.autovacuumosv_memory.autovacuum Expose the osv_memory.vacuum() method to the cron jobs mechanism.
Online Payment Acquirerportal.payment.acquirerFalse
Portal Access Managementportal.wizard\n", " A wizard to manage the creation/removal of portal users.\n", "
Portal User Configportal.wizard.user\n", " A model to configure users in the portal wizard.\n", "
pricelist.partnerinfopricelist.partnerinfoFalse
Conditionprocess.conditionFalse
Process Nodeprocess.nodeFalse
Processprocess.processFalse
Process Transitionprocess.transitionFalse
Process Transitions Actionsprocess.transition.actionFalse
Product Categoryproduct.categoryFalse
Packagingproduct.packagingFalse
Pricelistproduct.pricelistFalse
Price Listproduct.price_listFalse
Pricelist itemproduct.pricelist.itemFalse
Pricelist Typeproduct.pricelist.typeFalse
Pricelist Versionproduct.pricelist.versionFalse
Price Typeproduct.price.type\n", " The price type is used to points which field in the product form\n", " is a price and in which currency is this price expressed.\n", " When a field is a price, you can use it in pricelists to base\n", " sale and purchase prices based on some fields of the product.\n", "
Productproduct.productFalse
Information about a product supplierproduct.supplierinfoFalse
Product Templateproduct.templateFalse
Shipping Unitproduct.ulFalse
Product Unit of Measureproduct.uomFalse
Product uom categproduct.uom.categFalse
Analytic Entries by lineproject.account.analytic.lineFalse
publisher_warranty.contractpublisher_warranty.contractFalse
Receivable accountsreport.account.receivableFalse
Report of the Sales by Accountreport.account.salesFalse
Report of the Sales by Account Typereport.account_type.salesFalse
Aged Receivable Till Todayreport.aged.receivableFalse
Report of Invoices Created within Last 15 daysreport.invoice.createdFalse
Bankres.bankFalse
Companiesres.companyFalse
res.configres.config Base classes for new-style configuration items\n", "\n", " Configuration items should inherit from this class, implement\n", " the execute method (and optionally the cancel one) and have\n", " their view inherit from the related res_config_view_base view.\n", "
res.config.installerres.config.installerFalse
res.config.settingsres.config.settings Base configuration wizard for application settings. It provides support for setting\n", " default values, assigning groups to employee users, and installing modules.\n", " To make such a 'settings' wizard, define a model like::\n", "\n", " class my_config_wizard(osv.osv_memory):\n", " _name = 'my.settings'\n", " _inherit = 'res.config.settings'\n", " _columns = {\n", " 'default_foo': fields.type(..., default_model='my.model'),\n", " 'group_bar': fields.boolean(..., group='base.group_user', implied_group='my.group'),\n", " 'module_baz': fields.boolean(...),\n", " 'other_field': fields.type(...),\n", " }\n", "\n", " The method ``execute`` provides some support based on a naming convention:\n", "\n", " * For a field like 'default_XXX', ``execute`` sets the (global) default value of\n", " the field 'XXX' in the model named by ``default_model`` to the field's value.\n", "\n", " * For a boolean field like 'group_XXX', ``execute`` adds/removes 'implied_group'\n", " to/from the implied groups of 'group', depending on the field's value.\n", " By default 'group' is the group Employee. Groups are given by their xml id.\n", "\n", " * For a boolean field like 'module_XXX', ``execute`` triggers the immediate\n", " installation of the module named 'XXX' if the field has value ``True``.\n", "\n", " * For the other fields, the method ``execute`` invokes all methods with a name\n", " that starts with 'set_'; such methods can be defined to implement the effect\n", " of those fields.\n", "\n", " The method ``default_get`` retrieves values that reflect the current status of the\n", " fields like 'default_XXX', 'group_XXX' and 'module_XXX'. It also invokes all methods\n", " with a name that starts with 'get_default_'; such methods can be defined to provide\n", " current values for other fields.\n", "
Countryres.countryFalse
Country stateres.country.stateFalse
Currencyres.currencyFalse
Currency Rateres.currency.rateFalse
Currency Rate Typeres.currency.rate.typeFalse
Access Groupsres.groupsFalse
Languagesres.langFalse
Partnerres.partnerFalse
Bank Accountsres.partner.bankBank Accounts
Bank Account Typeres.partner.bank.typeFalse
Bank type fieldsres.partner.bank.type.fieldFalse
Partner Categoriesres.partner.categoryFalse
res.partner.titleres.partner.titleFalse
res.requestres.requestFalse
res.request.historyres.request.historyFalse
res.request.linkres.request.linkFalse
Usersres.usersFalse
Sales Advance Payment Invoicesale.advance.payment.invFalse
sale.config.settingssale.config.settingsFalse
Sales Make Invoicesale.make.invoiceFalse
Sales Ordersale.orderFalse
Sales Order Linesale.order.lineFalse
Sale OrderLine Make_invoicesale.order.line.make.invoiceFalse
Sales Receipt Statisticssale.receipt.reportFalse
Sales Orders Statisticssale.reportFalse
Sales Shopsale.shopFalse
Share Wizardshare.wizardFalse
share.wizard.result.lineshare.wizard.result.lineFalse
A Temporary table used for Dashboard viewtemp.rangeFalse
Validate Account Movevalidate.account.moveFalse
Validate Account Move Linesvalidate.account.move.linesFalse
wizard.ir.model.menu.createwizard.ir.model.menu.createFalse
wizard.multi.charts.accountswizard.multi.charts.accountsFalse
workflowworkflowFalse
workflow.activityworkflow.activityFalse
workflow.instanceworkflow.instanceFalse
workflow.transitionworkflow.transitionFalse
workflow.triggersworkflow.triggersFalse
workflow.workitemworkflow.workitemFalse
\n", " \n", "
\n", " " ], "text/plain": [ "['account.account',\n", " 'account.account.template',\n", " 'account.account.type',\n", " 'account.addtmpl.wizard',\n", " 'account.aged.trial.balance',\n", " 'account.analytic.account',\n", " 'account.analytic.balance',\n", " 'account.analytic.chart',\n", " 'account.analytic.cost.ledger',\n", " 'account.analytic.cost.ledger.journal.report',\n", " 'account.analytic.inverted.balance',\n", " 'account.analytic.journal',\n", " 'account.analytic.journal.report',\n", " 'account.analytic.line',\n", " 'account.automatic.reconcile',\n", " 'account.balance.report',\n", " 'account.bank.accounts.wizard',\n", " 'account.bank.statement',\n", " 'account.bank.statement.line',\n", " 'account.cashbox.line',\n", " 'account.central.journal',\n", " 'account.change.currency',\n", " 'account.chart',\n", " 'account.chart.template',\n", " 'account.common.account.report',\n", " 'account.common.journal.report',\n", " 'account.common.partner.report',\n", " 'account.common.report',\n", " 'account.config.settings',\n", " 'account.entries.report',\n", " 'account.financial.report',\n", " 'account.fiscal.position',\n", " 'account.fiscal.position.account',\n", " 'account.fiscal.position.account.template',\n", " 'account.fiscal.position.tax',\n", " 'account.fiscal.position.tax.template',\n", " 'account.fiscal.position.template',\n", " 'account.fiscalyear',\n", " 'account.fiscalyear.close',\n", " 'account.fiscalyear.close.state',\n", " 'account.general.journal',\n", " 'accounting.report',\n", " 'account.installer',\n", " 'account.invoice',\n", " 'account.invoice.cancel',\n", " 'account.invoice.confirm',\n", " 'account.invoice.line',\n", " 'account.invoice.refund',\n", " 'account.invoice.report',\n", " 'account.invoice.tax',\n", " 'account.journal',\n", " 'account.journal.cashbox.line',\n", " 'account.journal.period',\n", " 'account.journal.select',\n", " 'account.model',\n", " 'account.model.line',\n", " 'account.move',\n", " 'account.move.bank.reconcile',\n", " 'account.move.line',\n", " 'account.move.line.reconcile',\n", " 'account.move.line.reconcile.select',\n", " 'account.move.line.reconcile.writeoff',\n", " 'account.move.line.unreconcile.select',\n", " 'account.move.reconcile',\n", " 'account.open.closed.fiscalyear',\n", " 'account.partner.balance',\n", " 'account.partner.ledger',\n", " 'account.partner.reconcile.process',\n", " 'account.payment.term',\n", " 'account.payment.term.line',\n", " 'account.period',\n", " 'account.period.close',\n", " 'account.print.journal',\n", " 'account.report.general.ledger',\n", " 'account.sequence.fiscalyear',\n", " 'account.statement.from.invoice.lines',\n", " 'account.state.open',\n", " 'account.subscription',\n", " 'account.subscription.generate',\n", " 'account.subscription.line',\n", " 'account.tax',\n", " 'account.tax.chart',\n", " 'account.tax.code',\n", " 'account.tax.code.template',\n", " 'account.tax.template',\n", " 'account.treasury.report',\n", " 'account.unreconcile',\n", " 'account.unreconcile.reconcile',\n", " 'account.use.model',\n", " 'account.vat.declaration',\n", " 'account.voucher',\n", " 'account.voucher.line',\n", " 'analytic.entries.report',\n", " 'base.config.settings',\n", " 'base_import.import',\n", " 'base_import.tests.models.char',\n", " 'base_import.tests.models.char.noreadonly',\n", " 'base_import.tests.models.char.readonly',\n", " 'base_import.tests.models.char.required',\n", " 'base_import.tests.models.char.states',\n", " 'base_import.tests.models.char.stillreadonly',\n", " 'base_import.tests.models.m2o',\n", " 'base_import.tests.models.m2o.related',\n", " 'base_import.tests.models.m2o.required',\n", " 'base_import.tests.models.m2o.required.related',\n", " 'base_import.tests.models.o2m',\n", " 'base_import.tests.models.o2m.child',\n", " 'base_import.tests.models.preview',\n", " 'base.language.export',\n", " 'base.language.import',\n", " 'base.language.install',\n", " 'base.module.configuration',\n", " 'base.module.import',\n", " 'base.module.update',\n", " 'base.module.upgrade',\n", " 'base.setup.terminology',\n", " 'base.update.translations',\n", " 'board.board',\n", " 'board.create',\n", " 'cash.box.in',\n", " 'cash.box.out',\n", " 'change.password.user',\n", " 'change.password.wizard',\n", " 'decimal.precision',\n", " 'edi.edi',\n", " 'email.template',\n", " 'email_template.preview',\n", " 'fetchmail.config.settings',\n", " 'fetchmail.server',\n", " 'ir.actions.actions',\n", " 'ir.actions.act_url',\n", " 'ir.actions.act_window',\n", " 'ir.actions.act_window_close',\n", " 'ir.actions.act_window.view',\n", " 'ir.actions.client',\n", " 'ir.actions.configuration.wizard',\n", " 'ir.actions.report.xml',\n", " 'ir.actions.server',\n", " 'ir.actions.todo',\n", " 'ir.actions.wizard',\n", " 'ir.attachment',\n", " 'ir.config_parameter',\n", " 'ir.cron',\n", " 'ir.default',\n", " 'ir.exports',\n", " 'ir.exports.line',\n", " 'ir.fields.converter',\n", " 'ir.filters',\n", " 'ir.mail_server',\n", " 'ir.model',\n", " 'ir.model.access',\n", " 'ir.model.constraint',\n", " 'ir.model.data',\n", " 'ir.model.fields',\n", " 'ir.model.relation',\n", " 'ir.module.category',\n", " 'ir.module.module',\n", " 'ir.module.module.dependency',\n", " 'ir.needaction_mixin',\n", " 'ir.property',\n", " 'ir.rule',\n", " 'ir.sequence',\n", " 'ir.sequence.type',\n", " 'ir.server.object.lines',\n", " 'ir.translation',\n", " 'ir.ui.menu',\n", " 'ir.ui.view',\n", " 'ir.ui.view.custom',\n", " 'ir.ui.view_sc',\n", " 'ir.values',\n", " 'mail.alias',\n", " 'mail.compose.message',\n", " 'mail.followers',\n", " 'mail.group',\n", " 'mail.mail',\n", " 'mail.message',\n", " 'mail.message.subtype',\n", " 'mail.notification',\n", " 'mail.thread',\n", " 'mail.wizard.invite',\n", " 'multi_company.default',\n", " 'osv_memory.autovacuum',\n", " 'portal.payment.acquirer',\n", " 'portal.wizard',\n", " 'portal.wizard.user',\n", " 'pricelist.partnerinfo',\n", " 'process.condition',\n", " 'process.node',\n", " 'process.process',\n", " 'process.transition',\n", " 'process.transition.action',\n", " 'product.category',\n", " 'product.packaging',\n", " 'product.pricelist',\n", " 'product.price_list',\n", " 'product.pricelist.item',\n", " 'product.pricelist.type',\n", " 'product.pricelist.version',\n", " 'product.price.type',\n", " 'product.product',\n", " 'product.supplierinfo',\n", " 'product.template',\n", " 'product.ul',\n", " 'product.uom',\n", " 'product.uom.categ',\n", " 'project.account.analytic.line',\n", " 'publisher_warranty.contract',\n", " 'report.account.receivable',\n", " 'report.account.sales',\n", " 'report.account_type.sales',\n", " 'report.aged.receivable',\n", " 'report.invoice.created',\n", " 'res.bank',\n", " 'res.company',\n", " 'res.config',\n", " 'res.config.installer',\n", " 'res.config.settings',\n", " 'res.country',\n", " 'res.country.state',\n", " 'res.currency',\n", " 'res.currency.rate',\n", " 'res.currency.rate.type',\n", " 'res.groups',\n", " 'res.lang',\n", " 'res.partner',\n", " 'res.partner.bank',\n", " 'res.partner.bank.type',\n", " 'res.partner.bank.type.field',\n", " 'res.partner.category',\n", " 'res.partner.title',\n", " 'res.request',\n", " 'res.request.history',\n", " 'res.request.link',\n", " 'res.users',\n", " 'sale.advance.payment.inv',\n", " 'sale.config.settings',\n", " 'sale.make.invoice',\n", " 'sale.order',\n", " 'sale.order.line',\n", " 'sale.order.line.make.invoice',\n", " 'sale.receipt.report',\n", " 'sale.report',\n", " 'sale.shop',\n", " 'share.wizard',\n", " 'share.wizard.result.line',\n", " 'temp.range',\n", " 'validate.account.move',\n", " 'validate.account.move.lines',\n", " 'wizard.ir.model.menu.create',\n", " 'wizard.multi.charts.accounts',\n", " 'workflow',\n", " 'workflow.activity',\n", " 'workflow.instance',\n", " 'workflow.transition',\n", " 'workflow.triggers',\n", " 'workflow.workitem']" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ldb.registered_objects" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Get object / model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*ldb* here represents database connection (*Client* class instance)\n", "As told in help message above *.get_obj* method allows to get instance of specified\n", "*Object* proxy, where Object means *model*, *document*." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
\n", "
Sales Order
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Modelsale.order
Clientxml-rpc://admin@localhost:8069/openerp_proxy_test_db
NameSales Order
Record count8
\n", "
\n", "
\n", "
\n", "
Info
\n", "
To get information about columns access property
 .columns_info
Also there are available standard server-side methods:
 search, read, write, unlink
And special methods provided openerp_proxy's orm:
  • search_records - same as search but returns RecordList instance
  • read_records - same as read but returns Record or RecordList instance

\n", "
\n", "
\n", "
" ], "text/plain": [ "Object ('sale.order')" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "so = ldb.get_obj('sale.order')\n", "so" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Also it is posible to use shorter (dictionary style) syntax:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
\n", "
Sales Order
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Modelsale.order
Clientxml-rpc://admin@localhost:8069/openerp_proxy_test_db
NameSales Order
Record count8
\n", "
\n", "
\n", "
\n", "
Info
\n", "
To get information about columns access property
 .columns_info
Also there are available standard server-side methods:
 search, read, write, unlink
And special methods provided openerp_proxy's orm:
  • search_records - same as search but returns RecordList instance
  • read_records - same as read but returns Record or RecordList instance

\n", "
\n", "
\n", "
" ], "text/plain": [ "Object ('sale.order')" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "so = ldb['sale.order']\n", "so" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And as result of using [*openerp_proxy.ext.sugar*](http://pythonhosted.org/openerp_proxy/module_ref/openerp_proxy.ext.html#module-openerp_proxy.ext.sugar) extension\n", "(which is automaticaly imported in 'openerp_proxy.ext.all')\n", "there are attribute-style access (which also support's IPython auto-completition):" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
\n", "
Sales Order
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Modelsale.order
Clientxml-rpc://admin@localhost:8069/openerp_proxy_test_db
NameSales Order
Record count8
\n", "
\n", "
\n", "
\n", "
Info
\n", "
To get information about columns access property
 .columns_info
Also there are available standard server-side methods:
 search, read, write, unlink
And special methods provided openerp_proxy's orm:
  • search_records - same as search but returns RecordList instance
  • read_records - same as read but returns Record or RecordList instance

\n", "
\n", "
\n", "
" ], "text/plain": [ "Object ('sale.order')" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "so = ldb._sale_order\n", "so" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting information about available columns for Object" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", "
Fields for sale.order
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", "
NameDisp. NameTypeRequiredHelp
amount_taxTaxesfloatNoneThe tax amount.
amount_totalTotalfloatNoneThe total amount.
amount_untaxedUntaxed AmountfloatNoneThe amount without tax.
client_order_refCustomer ReferencecharNoneNone
company_idCompanymany2oneNoneNone
create_dateCreation DatedatetimeNoneDate on which sales order is created.
currency_idCurrencymany2oneTrueNone
date_confirmConfirmation DatedateNoneDate on which sales order is confirmed.
date_orderDatedateTrueNone
fiscal_positionFiscal Positionmany2oneNoneNone
invoice_existsInvoicedbooleanNoneIt indicates that sales order has at least one invoice.
invoice_idsInvoicesmany2manyNoneThis is the list of invoices that have been generated for this sales order. The same sales order may have been invoiced in several times (by line for example).
invoice_quantityInvoice onselectionTrueThe sales order will automatically create the invoice proposition (draft invoice).
invoicedPaidbooleanNoneIt indicates that an invoice has been paid.
invoiced_rateInvoiced RatiofloatNoneNone
message_follower_idsFollowersmany2manyNoneNone
message_idsMessagesone2manyNoneMessages and communication history
message_is_followerIs a FollowerbooleanNoneNone
message_summarySummarytextNoneHolds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views.
message_unreadUnread MessagesbooleanNoneIf checked new messages require your attention.
nameOrder ReferencecharTrueNone
noteTerms and conditionstextNoneNone
order_lineOrder Linesone2manyNoneNone
order_policyCreate InvoiceselectionTrueThis field controls how invoice and delivery operations are synchronized.
originSource DocumentcharNoneReference of the document that generated this sales order request.
partner_idCustomermany2oneTrueNone
partner_invoice_idInvoice Addressmany2oneTrueInvoice address for current sales order.
partner_shipping_idDelivery Addressmany2oneTrueDelivery address for current sales order.
payment_termPayment Termmany2oneNoneNone
paypal_urlPaypal UrlcharNoneNone
portal_payment_optionsPortal Payment OptionshtmlNoneNone
pricelist_idPricelistmany2oneTruePricelist for current sales order.
project_idContract / Analyticmany2oneNoneThe analytic account related to a sales order.
shop_idShopmany2oneTrueNone
stateStatusselectionNoneGives the status of the quotation or sales order. \n", "The exception status is automatically set when a cancel operation occurs in the processing of a document linked to the sales order. \n", "The 'Waiting Schedule' status is set when the invoice is confirmed but waiting for the scheduler to run on the order date.
user_idSalespersonmany2oneNoneNone
\n", " \n", "
\n", " " ], "text/plain": [ "Name Disp. Name Type Required Help\n", "---------------------- ---------------------- --------- ---------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n", "amount_tax Taxes float The tax amount.\n", "amount_total Total float The total amount.\n", "amount_untaxed Untaxed Amount float The amount without tax.\n", "client_order_ref Customer Reference char\n", "company_id Company many2one\n", "create_date Creation Date datetime Date on which sales order is created.\n", "currency_id Currency many2one 1\n", "date_confirm Confirmation Date date Date on which sales order is confirmed.\n", "date_order Date date 1\n", "fiscal_position Fiscal Position many2one\n", "invoice_exists Invoiced boolean It indicates that sales order has at least one invoice.\n", "invoice_ids Invoices many2many This is the list of invoices that have been generated for this sales order. The same sales order may have been invoiced in several times (by line for example).\n", "invoice_quantity Invoice on selection 1 The sales order will automatically create the invoice proposition (draft invoice).\n", "invoiced Paid boolean It indicates that an invoice has been paid.\n", "invoiced_rate Invoiced Ratio float\n", "message_follower_ids Followers many2many\n", "message_ids Messages one2many Messages and communication history\n", "message_is_follower Is a Follower boolean\n", "message_summary Summary text Holds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views.\n", "message_unread Unread Messages boolean If checked new messages require your attention.\n", "name Order Reference char 1\n", "note Terms and conditions text\n", "order_line Order Lines one2many\n", "order_policy Create Invoice selection 1 This field controls how invoice and delivery operations are synchronized.\n", "origin Source Document char Reference of the document that generated this sales order request.\n", "partner_id Customer many2one 1\n", "partner_invoice_id Invoice Address many2one 1 Invoice address for current sales order.\n", "partner_shipping_id Delivery Address many2one 1 Delivery address for current sales order.\n", "payment_term Payment Term many2one\n", "paypal_url Paypal Url char\n", "portal_payment_options Portal Payment Options html\n", "pricelist_id Pricelist many2one 1 Pricelist for current sales order.\n", "project_id Contract / Analytic many2one The analytic account related to a sales order.\n", "shop_id Shop many2one 1\n", "state Status selection Gives the status of the quotation or sales order. \n", "The exception status is automatically set when a cancel operation occurs in the processing of a document linked to the sales order. \n", "The 'Waiting Schedule' status is set when the invoice is confirmed but waiting for the scheduler to run on the order date.\n", "user_id Salesperson many2one" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "so.columns_info" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Search for sale orders" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
\n", "
RecordList(sale.order): length=8
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Clientxml-rpc://admin@localhost:8069/openerp_proxy_test_db
ObjectObject ('sale.order')
Record count8
\n", "
\n", "
\n", "
\n", "
Info
\n", "
To get table representation of data call method
 .as_html_table
passing as arguments fields You want to see in resulting table
for better information get doc on as_html_table method:
 .as_html_table?
example of using this mehtod:
 .as_html_table('id','name','_name')
Here _name field is aliase for result of name_get methodcalled on record
\n", "
\n", "
\n", "
" ], "text/plain": [ "RecordList(sale.order): length=8" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Standard search .search_records(domain)\n", "so_list = so.search_records([])\n", "so_list" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Also there are shorter syntax provided by [*openerp_proxy.ext.sugar*](http://pythonhosted.org/openerp_proxy/module_ref/openerp_proxy.ext.html#module-openerp_proxy.ext.sugar) extension:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
\n", "
RecordList(sale.order): length=8
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Clientxml-rpc://admin@localhost:8069/openerp_proxy_test_db
ObjectObject ('sale.order')
Record count8
\n", "
\n", "
\n", "
\n", "
Info
\n", "
To get table representation of data call method
 .as_html_table
passing as arguments fields You want to see in resulting table
for better information get doc on as_html_table method:
 .as_html_table?
example of using this mehtod:
 .as_html_table('id','name','_name')
Here _name field is aliase for result of name_get methodcalled on record
\n", "
\n", "
\n", "
" ], "text/plain": [ "RecordList(sale.order): length=8" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "so_list = so([])\n", "so_list" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Display Sale orders as HTML table" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is posible to represent RecordList as HTML table, with ability to highlight rows by specified conditions.\n", "Also, when building result table, it is posible to display values of related fields, and even method calls. This functionality is implemented in [*openerp_proxy.ext.repr*](http://pythonhosted.org/openerp_proxy/module_ref/openerp_proxy.ext.html#module-openerp_proxy.ext.repr) module" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "hide_input": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", "
RecordList(`sale.order`)
\n", " \n", " \n", "
\n", " Note, that You may use .to_csv() method of this table to export it to CSV format\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", "
idnamePartner namePartner emailOrder linesstate
8SO008Millennium IndustriesFalse
  • 20: Laptop Customized
  • 21: Mouse, Wireless
draft
7SO007Luminous TechnologiesFalse
  • 16: Laptop E5023
  • 17: GrapWorks Software
  • 18: Datacard
  • 19: USB Adapter
manual
6SO006Think Big Systemsinfo@thinkbig.com
  • 15: PC Assamble + 2GB RAM
draft
5SO005Agrolaitinfo@agrolait.com
  • 12: External Hard disk
  • 13: Blank DVD-RW
  • 14: Printer, All-in-one
draft
4SO004Millennium IndustriesFalse
  • 8: Service on demand
  • 9: Webcam
  • 10: Multimedia Speakers
  • 11: Switch, 24 ports
draft
3SO003Chamber Worksinfo@chamberworks.com
  • 6: On Site Monitoring
  • 7: Toner Cartridge
draft
2SO002Bank Wealthy and sonsemail@wealthyandsons.com
  • 4: Service on demand
  • 5: On Site Assistance
draft
1SO001Agrolaitinfo@agrolait.com
  • 1: Laptop E5023
  • 2: Pen drive, 16GB
  • 3: Headset USB
sent
\n", " \n", "
\n", " " ], "text/plain": [ " id name Partner name Partner email Order lines state\n", "---- ------ --------------------- ------------------------ ---------------------------------- -------\n", " 8 SO008 Millennium Industries False draft\n", " 7 SO007 Luminous Technologies False manual\n", " 6 SO006 Think Big Systems info@thinkbig.com draft\n", " 5 SO005 Agrolait info@agrolait.com draft\n", " 4 SO004 Millennium Industries False draft\n", " 3 SO003 Chamber Works info@chamberworks.com draft\n", " 2 SO002 Bank Wealthy and sons email@wealthyandsons.com draft\n", " 1 SO001 Agrolait info@agrolait.com sent" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# High light rows by condition\n", "highlighters = {\n", " '#99FF99': lambda x: x.state == 'done',\n", " '#9999FF': lambda x: x.state == 'draft',\n", " '#FFFF99': lambda x: x.state == 'progress',\n", "}\n", "\n", "# Display as table.\n", "# Note that prefetch method is used to fetch some set of fields with less RPC call.\n", "# on big datasets it may speed up performance signifiantly.\n", "# Each RecordList instance have related cache, which reduce need of reading data on each field get.\n", "so_list.prefetch('id', 'name', 'partner_id', 'partner_id.email', 'state')\n", "so_table = so_list.as_html_table(\n", " 'id',\n", " 'name',\n", " # _name attribute provides result of *name_search method:\n", " HField('partner_id._name', name='Partner name'),\n", " # silent=True means, if field cannot be found, not throw error\n", " HField('partner_id.email', name='Partner email', silent=True),\n", " # Also it is posible to display result of method calls\n", " # 'as_html_list()' is method of RecordList.\n", " ('order_line.as_html_list', 'Order lines'),\n", " 'state',\n", " highlighters=highlighters,\n", ")\n", "so_table" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There also available to_csv method, which allow to represent table in csv format" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "tmp/csv/tmpm1ZVBd.csv
" ], "text/plain": [ "/home/katyukha/projects/erp-proxy/examples/tmp/csv/tmpm1ZVBd.csv" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "so_table.to_csv()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Anyfield integration" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This app has **experimental** integration with [Anyfield](https://pypi.python.org/pypi/anyfield) library.\n", "For example it is posible to use Anyfield expressions in [RecordList.filter](http://pythonhosted.org/openerp_proxy/module_ref/openerp_proxy.orm.html#openerp_proxy.orm.record.RecordList.filter) method.\n", "\n", "Ususaly You use lambdas to filter some records. Something like this:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
\n", "
RecordList(res.partner): length=6
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Clientxml-rpc://admin@localhost:8069/openerp_proxy_test_db
ObjectObject ('res.partner')
Record count6
\n", "
\n", "
\n", "
\n", "
Info
\n", "
To get table representation of data call method
 .as_html_table
passing as arguments fields You want to see in resulting table
for better information get doc on as_html_table method:
 .as_html_table?
example of using this mehtod:
 .as_html_table('id','name','_name')
Here _name field is aliase for result of name_get methodcalled on record
\n", "
\n", "
\n", "
" ], "text/plain": [ "RecordList(res.partner): length=6" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "partners = ldb._res_partner() # find all partners in database\n", "filtered_partners_l = partners.filter(lambda x: x.sale_order_ids.length >= 1)\n", "filtered_partners_l" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But using [Anyfield](https://pypi.python.org/pypi/anyfield/) expressions may be simpler.\n", "This library have [F](http://pythonhosted.org/anyfield/#anyfield.F) variable defined,\n", "which could be used as starting point of [SField](http://pythonhosted.org/anyfield/#anyfield.SField) expressions." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
\n", "
RecordList(res.partner): length=6
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Clientxml-rpc://admin@localhost:8069/openerp_proxy_test_db
ObjectObject ('res.partner')
Record count6
\n", "
\n", "
\n", "
\n", "
Info
\n", "
To get table representation of data call method
 .as_html_table
passing as arguments fields You want to see in resulting table
for better information get doc on as_html_table method:
 .as_html_table?
example of using this mehtod:
 .as_html_table('id','name','_name')
Here _name field is aliase for result of name_get methodcalled on record
\n", "
\n", "
\n", "
" ], "text/plain": [ "RecordList(res.partner): length=6" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from anyfield import F\n", "\n", "# Imagine that F is record in partners recordlist. and pass expression based on this to filter method.\n", "# It will automaticaly be converted to filter function\n", "filtered_partners_f = partners.filter(F.sale_order_ids.length >= 1)\n", "filtered_partners_f" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To check that resultes are same, let's just compare them:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "assert sorted(filtered_partners_f.ids) == sorted(filtered_partners_l.ids), \\\n", " \"Filtered partners must be same in both cases\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Nested HTMLTables" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Also it is posible to display nested html tables. For example, lets list partners with sale orders related to them\n", "Here [anyfield.F](http://pythonhosted.org/anyfield/#anyfield.F) expression is used too." ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", "
RecordList(`res.partner`)
\n", " \n", " \n", "
\n", " Note, that You may use .to_csv() method of this table to export it to CSV format\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", "
idnameparent_idSale orders
6AgrolaitFalse\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", "
id_namedate_orderamount_totalstate
5SO0052016-03-224887.0draft
1SO0012016-03-229705.0sent
\n", " \n", "
\n", "
11Bank Wealthy and sonsFalse\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", "
id_namedate_orderamount_totalstate
2SO0022016-03-222947.5draft
\n", " \n", "
\n", "
18Chamber WorksFalse\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", "
id_namedate_orderamount_totalstate
3SO0032016-03-22377.5draft
\n", " \n", "
\n", "
15Luminous TechnologiesFalse\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", "
id_namedate_orderamount_totalstate
7SO0072016-03-2214981.0manual
\n", " \n", "
\n", "
19Millennium IndustriesFalse\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", "
id_namedate_orderamount_totalstate
8SO0082016-03-227315.0draft
4SO0042016-03-222240.0draft
\n", " \n", "
\n", "
22Think Big SystemsFalse\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", "
id_namedate_orderamount_totalstate
6SO0062016-03-22750.0draft
\n", " \n", "
\n", "
\n", " \n", "
\n", " " ], "text/plain": [ " id name parent_id Sale orders\n", "---- --------------------- ----------- --------------------------------------------------------------\n", " 6 Agrolait 0 \n", " 11 Bank Wealthy and sons 0 \n", " 18 Chamber Works 0 \n", " 15 Luminous Technologies 0 \n", " 19 Millennium Industries 0 \n", " 22 Think Big Systems 0 " ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "filtered_partners_l.as_html_table(\n", " 'id',\n", " 'name',\n", " 'parent_id',\n", " \n", " HField(F.sale_order_ids.as_html_table('id',\n", " '_name',\n", " 'date_order',\n", " 'amount_total',\n", " 'state'),\n", " 'Sale orders'),\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Recordlist elements access" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Recordlist supports access to containing elements via indexes" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
\n", "
SO008
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Clientxml-rpc://admin@localhost:8069/openerp_proxy_test_db
ObjectObject ('sale.order')
ID8
NameSO008
\n", "
\n", "
\n", "
\n", "
Info
\n", "
To get HTML Table representation of this record call method:
 .as_table()
Optionaly You can pass list of fields You want to see:
 .as_table('name', 'origin')
for better information get doc on as_table method:
 .as_table?
\n", "
\n", "
\n", "
" ], "text/plain": [ "R(sale.order, 8)[SO008]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "so_list[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Display one sale order as HTML Table" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", "
Record: SO008
\n", " \n", " \n", "
\n", " Note, that You may use .to_csv() method of this table to export it to CSV format\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", "
Field nameSystem nameValue
namenameSO008
originoriginFalse
Partnerpartner_idR(res.partner, 19)[Millennium Industries]
Partner namepartner_id._nameMillennium Industries
Sales QTYpartner_id.sale_order_ids.length2
\n", " \n", "
\n", " " ], "text/plain": [ "Field name System name Value\n", "------------ -------------------------------- -----------------------------------------\n", "name name SO008\n", "origin origin False\n", "Partner partner_id R(res.partner, 19)[Millennium Industries]\n", "Partner name partner_id._name Millennium Industries\n", "Sales QTY partner_id.sale_order_ids.length 2" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "so_list[0].as_html('name',\n", " 'origin',\n", " \n", " # Will display Reacord instance representing partner related to this sale order\n", " ('partner_id', 'Partner'),\n", " \n", " # Will display result of 'name_get' called on partner\n", " ('partner_id._name', 'Partner name'),\n", " \n", " # Display how many sale orders have this partner\n", " ('partner_id.sale_order_ids.length', 'Sales QTY'),\n", ")" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", "
Record: SO008
\n", " \n", " \n", "
\n", " Note, that You may use .to_csv() method of this table to export it to CSV format\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", "
Field nameSystem nameValue
Confirmation Datedate_confirmFalse
Contract / Analyticproject_idFalse
Create Invoiceorder_policymanual
Creation Datecreate_date2016-03-22 15:29:15
Customerpartner_idR(res.partner, 19)[Millennium Industries]
Customer Referenceclient_order_refFalse
Datedate_order2016-03-22
Delivery Addresspartner_shipping_idR(res.partner, 52)[Millennium Industries, Jacob Taylor]
Fiscal Positionfiscal_positionFalse
Invoice Addresspartner_invoice_idR(res.partner, 52)[Millennium Industries, Jacob Taylor]
Invoice oninvoice_quantityorder
Invoicesinvoice_idsRecordList(account.invoice): length=0
Messagesmessage_idsRecordList(mail.message): length=2
Order Linesorder_lineRecordList(sale.order.line): length=2
Order ReferencenameSO008
Payment Termpayment_termFalse
Pricelistpricelist_idR(product.pricelist, 1)[Public Pricelist (EUR)]
Salespersonuser_idR(res.users, 3)[Demo User]
Shopshop_idR(sale.shop, 1)[Your Company]
Source DocumentoriginFalse
Statusstatedraft
Terms and conditionsnoteFalse
\n", " \n", "
\n", " " ], "text/plain": [ "Field name System name Value\n", "-------------------- ------------------- -------------------------------------------------------\n", "Confirmation Date date_confirm False\n", "Contract / Analytic project_id False\n", "Create Invoice order_policy manual\n", "Creation Date create_date 2016-03-22 15:29:15\n", "Customer partner_id R(res.partner, 19)[Millennium Industries]\n", "Customer Reference client_order_ref False\n", "Date date_order 2016-03-22\n", "Delivery Address partner_shipping_id R(res.partner, 52)[Millennium Industries, Jacob Taylor]\n", "Fiscal Position fiscal_position False\n", "Invoice Address partner_invoice_id R(res.partner, 52)[Millennium Industries, Jacob Taylor]\n", "Invoice on invoice_quantity order\n", "Invoices invoice_ids RecordList(account.invoice): length=0\n", "Messages message_ids RecordList(mail.message): length=2\n", "Order Lines order_line RecordList(sale.order.line): length=2\n", "Order Reference name SO008\n", "Payment Term payment_term False\n", "Pricelist pricelist_id R(product.pricelist, 1)[Public Pricelist (EUR)]\n", "Salesperson user_id R(res.users, 3)[Demo User]\n", "Shop shop_id R(sale.shop, 1)[Your Company]\n", "Source Document origin False\n", "Status state draft\n", "Terms and conditions note False" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "so_list[0].as_html() # Display all fields for firest sale order record" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Report service" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***Odoo 11.0 Note***: in Odoo 11.0 report service was completely removed.\n", "All reports now handled by model `ir.actions.report`.\n", "So to get generated report, just call `render` method of this model and get generated report." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There is ``reports`` service available in Odoo (before 11.0), which allows to print reports.\n", "Example below is ***deprecated***, use `ir.actions.report` model directly" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from pkg_resources import parse_version as V\n", "\n", "if ldb.server_version < V('11.0'):\n", " if 'sale.report_saleorder' in ldb.services.report:\n", " report_name = 'sale.report_saleorder' # Odoo version >= 8.0\n", " elif 'sale.order' in ldb.services.report:\n", " report_name = 'sale.order' # Odoo version 7.0\n", " else:\n", " raise Exception(\"Cannot find sale report\") # no such report registered on server\n", " report = ldb.services.report[report_name]\n", "else:\n", " report = None" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/html": [ "tmp/reports/Quotation - Order7364f3ed0aa258402e0c958fb5735ebbae30410be63d81c7b628e3fb40038398.pdf
" ], "text/plain": [ "" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "if report:\n", " report_result = report.generate(so_list)\n", " report_result" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.3" } }, "nbformat": 4, "nbformat_minor": 1 }