{
"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",
"
login
\n",
" \n",
"
None
\n",
" \n",
"
\n",
" \n",
"
\n",
"
Host
\n",
" \n",
"
localhost
\n",
" \n",
"
\n",
" \n",
"
\n",
"
Protocol
\n",
" \n",
"
xml-rpc
\n",
" \n",
"
\n",
" \n",
"
\n",
"
Port
\n",
" \n",
"
8069
\n",
" \n",
"
\n",
" \n",
"
\n",
"
Database
\n",
" \n",
"
None
\n",
" \n",
"
\n",
" \n",
"
\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",
"
login
\n",
" \n",
"
admin
\n",
" \n",
"
\n",
" \n",
"
\n",
"
Host
\n",
" \n",
"
localhost
\n",
" \n",
"
\n",
" \n",
"
\n",
"
Protocol
\n",
" \n",
"
xml-rpc
\n",
" \n",
"
\n",
" \n",
"
\n",
"
Port
\n",
" \n",
"
8069
\n",
" \n",
"
\n",
" \n",
"
\n",
"
Database
\n",
" \n",
"
openerp_proxy_test_db
\n",
" \n",
"
\n",
" \n",
"
\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",
"
"
],
"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",
"
"
],
"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",
"
login
\n",
" \n",
"
admin
\n",
" \n",
"
\n",
" \n",
"
\n",
"
Host
\n",
" \n",
"
localhost
\n",
" \n",
"
\n",
" \n",
"
\n",
"
Protocol
\n",
" \n",
"
xml-rpc
\n",
" \n",
"
\n",
" \n",
"
\n",
"
Port
\n",
" \n",
"
8069
\n",
" \n",
"
\n",
" \n",
"
\n",
"
Database
\n",
" \n",
"
openerp_proxy_test_db
\n",
" \n",
"
\n",
" \n",
"
\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",
"
Name
\n",
" \n",
"
System Name
\n",
" \n",
"
Description
\n",
" \n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account
\n",
" \n",
" \n",
" \n",
"
account.account
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Templates for Accounts
\n",
" \n",
" \n",
" \n",
"
account.account.template
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Type
\n",
" \n",
" \n",
" \n",
"
account.account.type
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
account.addtmpl.wizard
\n",
" \n",
" \n",
" \n",
"
account.addtmpl.wizard
\n",
" \n",
" \n",
" \n",
"
Add one more account from the template.\n",
"\n",
" With the 'nocreate' option, some accounts may not be created. Use this to add them later.
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Aged Trial balance Report
\n",
" \n",
" \n",
" \n",
"
account.aged.trial.balance
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Analytic Account
\n",
" \n",
" \n",
" \n",
"
account.analytic.account
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Analytic Balance
\n",
" \n",
" \n",
" \n",
"
account.analytic.balance
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Analytic Chart
\n",
" \n",
" \n",
" \n",
"
account.analytic.chart
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Analytic Cost Ledger
\n",
" \n",
" \n",
" \n",
"
account.analytic.cost.ledger
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Analytic Cost Ledger For Journal Report
\n",
" \n",
" \n",
" \n",
"
account.analytic.cost.ledger.journal.report
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Analytic Inverted Balance
\n",
" \n",
" \n",
" \n",
"
account.analytic.inverted.balance
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Analytic Journal
\n",
" \n",
" \n",
" \n",
"
account.analytic.journal
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Analytic Journal
\n",
" \n",
" \n",
" \n",
"
account.analytic.journal.report
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Analytic Line
\n",
" \n",
" \n",
" \n",
"
account.analytic.line
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Automatic Reconcile
\n",
" \n",
" \n",
" \n",
"
account.automatic.reconcile
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Trial Balance Report
\n",
" \n",
" \n",
" \n",
"
account.balance.report
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
account.bank.accounts.wizard
\n",
" \n",
" \n",
" \n",
"
account.bank.accounts.wizard
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Bank Statement
\n",
" \n",
" \n",
" \n",
"
account.bank.statement
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Bank Statement Line
\n",
" \n",
" \n",
" \n",
"
account.bank.statement.line
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
CashBox Line
\n",
" \n",
" \n",
" \n",
"
account.cashbox.line
\n",
" \n",
" \n",
" \n",
"
Cash Box Details
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Central Journal
\n",
" \n",
" \n",
" \n",
"
account.central.journal
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Change Currency
\n",
" \n",
" \n",
" \n",
"
account.change.currency
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account chart
\n",
" \n",
" \n",
" \n",
"
account.chart
\n",
" \n",
" \n",
" \n",
"
\n",
" For Chart of Accounts\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Templates for Account Chart
\n",
" \n",
" \n",
" \n",
"
account.chart.template
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Common Account Report
\n",
" \n",
" \n",
" \n",
"
account.common.account.report
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Common Journal Report
\n",
" \n",
" \n",
" \n",
"
account.common.journal.report
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Common Partner Report
\n",
" \n",
" \n",
" \n",
"
account.common.partner.report
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Common Report
\n",
" \n",
" \n",
" \n",
"
account.common.report
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
account.config.settings
\n",
" \n",
" \n",
" \n",
"
account.config.settings
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Journal Items Analysis
\n",
" \n",
" \n",
" \n",
"
account.entries.report
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Report
\n",
" \n",
" \n",
" \n",
"
account.financial.report
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Fiscal Position
\n",
" \n",
" \n",
" \n",
"
account.fiscal.position
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Accounts Fiscal Position
\n",
" \n",
" \n",
" \n",
"
account.fiscal.position.account
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Template Account Fiscal Mapping
\n",
" \n",
" \n",
" \n",
"
account.fiscal.position.account.template
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Taxes Fiscal Position
\n",
" \n",
" \n",
" \n",
"
account.fiscal.position.tax
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Template Tax Fiscal Position
\n",
" \n",
" \n",
" \n",
"
account.fiscal.position.tax.template
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Template for Fiscal Position
\n",
" \n",
" \n",
" \n",
"
account.fiscal.position.template
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Fiscal Year
\n",
" \n",
" \n",
" \n",
"
account.fiscalyear
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Fiscalyear Close
\n",
" \n",
" \n",
" \n",
"
account.fiscalyear.close
\n",
" \n",
" \n",
" \n",
"
\n",
" Closes Account Fiscalyear and Generate Opening entries for New Fiscalyear\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Fiscalyear Close state
\n",
" \n",
" \n",
" \n",
"
account.fiscalyear.close.state
\n",
" \n",
" \n",
" \n",
"
\n",
" Closes Account Fiscalyear\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account General Journal
\n",
" \n",
" \n",
" \n",
"
account.general.journal
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Accounting Report
\n",
" \n",
" \n",
" \n",
"
accounting.report
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
account.installer
\n",
" \n",
" \n",
" \n",
"
account.installer
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Invoice
\n",
" \n",
" \n",
" \n",
"
account.invoice
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Cancel the Selected Invoices
\n",
" \n",
" \n",
" \n",
"
account.invoice.cancel
\n",
" \n",
" \n",
" \n",
"
\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",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Confirm the selected invoices
\n",
" \n",
" \n",
" \n",
"
account.invoice.confirm
\n",
" \n",
" \n",
" \n",
"
\n",
" This wizard will confirm the all the selected draft invoices\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Invoice Line
\n",
" \n",
" \n",
" \n",
"
account.invoice.line
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Invoice Refund
\n",
" \n",
" \n",
" \n",
"
account.invoice.refund
\n",
" \n",
" \n",
" \n",
"
Refunds invoice
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Invoices Statistics
\n",
" \n",
" \n",
" \n",
"
account.invoice.report
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Invoice Tax
\n",
" \n",
" \n",
" \n",
"
account.invoice.tax
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Journal
\n",
" \n",
" \n",
" \n",
"
account.journal
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
account.journal.cashbox.line
\n",
" \n",
" \n",
" \n",
"
account.journal.cashbox.line
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Journal Period
\n",
" \n",
" \n",
" \n",
"
account.journal.period
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Journal Select
\n",
" \n",
" \n",
" \n",
"
account.journal.select
\n",
" \n",
" \n",
" \n",
"
\n",
" Account Journal Select\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Model
\n",
" \n",
" \n",
" \n",
"
account.model
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Model Entries
\n",
" \n",
" \n",
" \n",
"
account.model.line
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Entry
\n",
" \n",
" \n",
" \n",
"
account.move
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Move bank reconcile
\n",
" \n",
" \n",
" \n",
"
account.move.bank.reconcile
\n",
" \n",
" \n",
" \n",
"
\n",
" Bank Reconciliation\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Journal Items
\n",
" \n",
" \n",
" \n",
"
account.move.line
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account move line reconcile
\n",
" \n",
" \n",
" \n",
"
account.move.line.reconcile
\n",
" \n",
" \n",
" \n",
"
\n",
" Account move line reconcile wizard, it checks for the write off the reconcile entry or directly reconcile.\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Move line reconcile select
\n",
" \n",
" \n",
" \n",
"
account.move.line.reconcile.select
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account move line reconcile (writeoff)
\n",
" \n",
" \n",
" \n",
"
account.move.line.reconcile.writeoff
\n",
" \n",
" \n",
" \n",
"
\n",
" It opens the write off wizard form, in that user can define the journal, account, analytic account for reconcile\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Unreconciliation
\n",
" \n",
" \n",
" \n",
"
account.move.line.unreconcile.select
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Reconciliation
\n",
" \n",
" \n",
" \n",
"
account.move.reconcile
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Choose Fiscal Year
\n",
" \n",
" \n",
" \n",
"
account.open.closed.fiscalyear
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Print Account Partner Balance
\n",
" \n",
" \n",
" \n",
"
account.partner.balance
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Partner Ledger
\n",
" \n",
" \n",
" \n",
"
account.partner.ledger
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Reconcilation Process partner by partner
\n",
" \n",
" \n",
" \n",
"
account.partner.reconcile.process
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Payment Term
\n",
" \n",
" \n",
" \n",
"
account.payment.term
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Payment Term Line
\n",
" \n",
" \n",
" \n",
"
account.payment.term.line
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account period
\n",
" \n",
" \n",
" \n",
"
account.period
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
period close
\n",
" \n",
" \n",
" \n",
"
account.period.close
\n",
" \n",
" \n",
" \n",
"
\n",
" close period\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Print Journal
\n",
" \n",
" \n",
" \n",
"
account.print.journal
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
General Ledger Report
\n",
" \n",
" \n",
" \n",
"
account.report.general.ledger
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
account.sequence.fiscalyear
\n",
" \n",
" \n",
" \n",
"
account.sequence.fiscalyear
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Entries by Statement from Invoices
\n",
" \n",
" \n",
" \n",
"
account.statement.from.invoice.lines
\n",
" \n",
" \n",
" \n",
"
\n",
" Generate Entries by Statement from Invoices\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account State Open
\n",
" \n",
" \n",
" \n",
"
account.state.open
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Subscription
\n",
" \n",
" \n",
" \n",
"
account.subscription
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Subscription Compute
\n",
" \n",
" \n",
" \n",
"
account.subscription.generate
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Subscription Line
\n",
" \n",
" \n",
" \n",
"
account.subscription.line
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Tax
\n",
" \n",
" \n",
" \n",
"
account.tax
\n",
" \n",
" \n",
" \n",
"
\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",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account tax chart
\n",
" \n",
" \n",
" \n",
"
account.tax.chart
\n",
" \n",
" \n",
" \n",
"
\n",
" For Chart of taxes\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Tax Code
\n",
" \n",
" \n",
" \n",
"
account.tax.code
\n",
" \n",
" \n",
" \n",
"
\n",
" A code for the tax object.\n",
"\n",
" This code is used for some tax declarations.\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Tax Code Template
\n",
" \n",
" \n",
" \n",
"
account.tax.code.template
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Templates for Taxes
\n",
" \n",
" \n",
" \n",
"
account.tax.template
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Treasury Analysis
\n",
" \n",
" \n",
" \n",
"
account.treasury.report
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Unreconcile
\n",
" \n",
" \n",
" \n",
"
account.unreconcile
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Unreconcile Reconcile
\n",
" \n",
" \n",
" \n",
"
account.unreconcile.reconcile
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Use model
\n",
" \n",
" \n",
" \n",
"
account.use.model
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Account Vat Declaration
\n",
" \n",
" \n",
" \n",
"
account.vat.declaration
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Accounting Voucher
\n",
" \n",
" \n",
" \n",
"
account.voucher
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Voucher Lines
\n",
" \n",
" \n",
" \n",
"
account.voucher.line
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Analytic Entries Statistics
\n",
" \n",
" \n",
" \n",
"
analytic.entries.report
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
base.config.settings
\n",
" \n",
" \n",
" \n",
"
base.config.settings
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
base_import.import
\n",
" \n",
" \n",
" \n",
"
base_import.import
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
base_import.tests.models.char
\n",
" \n",
" \n",
" \n",
"
base_import.tests.models.char
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
base_import.tests.models.char.noreadonly
\n",
" \n",
" \n",
" \n",
"
base_import.tests.models.char.noreadonly
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
base_import.tests.models.char.readonly
\n",
" \n",
" \n",
" \n",
"
base_import.tests.models.char.readonly
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
base_import.tests.models.char.required
\n",
" \n",
" \n",
" \n",
"
base_import.tests.models.char.required
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
base_import.tests.models.char.states
\n",
" \n",
" \n",
" \n",
"
base_import.tests.models.char.states
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
base_import.tests.models.char.stillreadonly
\n",
" \n",
" \n",
" \n",
"
base_import.tests.models.char.stillreadonly
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
base_import.tests.models.m2o
\n",
" \n",
" \n",
" \n",
"
base_import.tests.models.m2o
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
base_import.tests.models.m2o.related
\n",
" \n",
" \n",
" \n",
"
base_import.tests.models.m2o.related
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
base_import.tests.models.m2o.required
\n",
" \n",
" \n",
" \n",
"
base_import.tests.models.m2o.required
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
base_import.tests.models.m2o.required.related
\n",
" \n",
" \n",
" \n",
"
base_import.tests.models.m2o.required.related
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
base_import.tests.models.o2m
\n",
" \n",
" \n",
" \n",
"
base_import.tests.models.o2m
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
base_import.tests.models.o2m.child
\n",
" \n",
" \n",
" \n",
"
base_import.tests.models.o2m.child
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
base_import.tests.models.preview
\n",
" \n",
" \n",
" \n",
"
base_import.tests.models.preview
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
base.language.export
\n",
" \n",
" \n",
" \n",
"
base.language.export
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Language Import
\n",
" \n",
" \n",
" \n",
"
base.language.import
\n",
" \n",
" \n",
" \n",
"
Language Import
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Install Language
\n",
" \n",
" \n",
" \n",
"
base.language.install
\n",
" \n",
" \n",
" \n",
"
Install Language
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
base.module.configuration
\n",
" \n",
" \n",
" \n",
"
base.module.configuration
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Import Module
\n",
" \n",
" \n",
" \n",
"
base.module.import
\n",
" \n",
" \n",
" \n",
"
Import Module
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Update Module
\n",
" \n",
" \n",
" \n",
"
base.module.update
\n",
" \n",
" \n",
" \n",
"
Update Module
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Module Upgrade
\n",
" \n",
" \n",
" \n",
"
base.module.upgrade
\n",
" \n",
" \n",
" \n",
"
Module Upgrade
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
base.setup.terminology
\n",
" \n",
" \n",
" \n",
"
base.setup.terminology
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
base.update.translations
\n",
" \n",
" \n",
" \n",
"
base.update.translations
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Board
\n",
" \n",
" \n",
" \n",
"
board.board
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Board Creation
\n",
" \n",
" \n",
" \n",
"
board.create
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
cash.box.in
\n",
" \n",
" \n",
" \n",
"
cash.box.in
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
cash.box.out
\n",
" \n",
" \n",
" \n",
"
cash.box.out
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Change Password Wizard User
\n",
" \n",
" \n",
" \n",
"
change.password.user
\n",
" \n",
" \n",
" \n",
"
\n",
" A model to configure users in the change password wizard\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Change Password Wizard
\n",
" \n",
" \n",
" \n",
"
change.password.wizard
\n",
" \n",
" \n",
" \n",
"
\n",
" A wizard to manage the change of users' passwords\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
decimal.precision
\n",
" \n",
" \n",
" \n",
"
decimal.precision
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
EDI Subsystem
\n",
" \n",
" \n",
" \n",
"
edi.edi
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Email Templates
\n",
" \n",
" \n",
" \n",
"
email.template
\n",
" \n",
" \n",
" \n",
"
Templates for sending email
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Email Template Preview
\n",
" \n",
" \n",
" \n",
"
email_template.preview
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
fetchmail.config.settings
\n",
" \n",
" \n",
" \n",
"
fetchmail.config.settings
\n",
" \n",
" \n",
" \n",
"
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",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
POP/IMAP Server
\n",
" \n",
" \n",
" \n",
"
fetchmail.server
\n",
" \n",
" \n",
" \n",
"
Incoming POP/IMAP mail server account
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.actions.actions
\n",
" \n",
" \n",
" \n",
"
ir.actions.actions
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.actions.act_url
\n",
" \n",
" \n",
" \n",
"
ir.actions.act_url
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.actions.act_window
\n",
" \n",
" \n",
" \n",
"
ir.actions.act_window
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.actions.act_window_close
\n",
" \n",
" \n",
" \n",
"
ir.actions.act_window_close
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.actions.act_window.view
\n",
" \n",
" \n",
" \n",
"
ir.actions.act_window.view
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.actions.client
\n",
" \n",
" \n",
" \n",
"
ir.actions.client
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.actions.configuration.wizard
\n",
" \n",
" \n",
" \n",
"
ir.actions.configuration.wizard
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.actions.report.xml
\n",
" \n",
" \n",
" \n",
"
ir.actions.report.xml
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.actions.server
\n",
" \n",
" \n",
" \n",
"
ir.actions.server
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Configuration Wizards
\n",
" \n",
" \n",
" \n",
"
ir.actions.todo
\n",
" \n",
" \n",
" \n",
"
\n",
" Configuration Wizards\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.actions.wizard
\n",
" \n",
" \n",
" \n",
"
ir.actions.wizard
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.attachment
\n",
" \n",
" \n",
" \n",
"
ir.attachment
\n",
" \n",
" \n",
" \n",
"
Attachments 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",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.config_parameter
\n",
" \n",
" \n",
" \n",
"
ir.config_parameter
\n",
" \n",
" \n",
" \n",
"
Per-database storage of configuration key-value pairs.
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.cron
\n",
" \n",
" \n",
" \n",
"
ir.cron
\n",
" \n",
" \n",
" \n",
"
Model describing cron jobs (also called actions or tasks).\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.default
\n",
" \n",
" \n",
" \n",
"
ir.default
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.exports
\n",
" \n",
" \n",
" \n",
"
ir.exports
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.exports.line
\n",
" \n",
" \n",
" \n",
"
ir.exports.line
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.fields.converter
\n",
" \n",
" \n",
" \n",
"
ir.fields.converter
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Filters
\n",
" \n",
" \n",
" \n",
"
ir.filters
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.mail_server
\n",
" \n",
" \n",
" \n",
"
ir.mail_server
\n",
" \n",
" \n",
" \n",
"
Represents an SMTP server, able to send outgoing emails, with SSL and TLS capabilities.
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Models
\n",
" \n",
" \n",
" \n",
"
ir.model
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.model.access
\n",
" \n",
" \n",
" \n",
"
ir.model.access
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.model.constraint
\n",
" \n",
" \n",
" \n",
"
ir.model.constraint
\n",
" \n",
" \n",
" \n",
"
\n",
" This model tracks PostgreSQL foreign keys and constraints used by OpenERP\n",
" models.\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.model.data
\n",
" \n",
" \n",
" \n",
"
ir.model.data
\n",
" \n",
" \n",
" \n",
"
Holds 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",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Fields
\n",
" \n",
" \n",
" \n",
"
ir.model.fields
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.model.relation
\n",
" \n",
" \n",
" \n",
"
ir.model.relation
\n",
" \n",
" \n",
" \n",
"
\n",
" This model tracks PostgreSQL tables used to implement OpenERP many2many\n",
" relations.\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Application
\n",
" \n",
" \n",
" \n",
"
ir.module.category
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Module
\n",
" \n",
" \n",
" \n",
"
ir.module.module
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Module dependency
\n",
" \n",
" \n",
" \n",
"
ir.module.module.dependency
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.needaction_mixin
\n",
" \n",
" \n",
" \n",
"
ir.needaction_mixin
\n",
" \n",
" \n",
" \n",
"
Mixin 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",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.property
\n",
" \n",
" \n",
" \n",
"
ir.property
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.rule
\n",
" \n",
" \n",
" \n",
"
ir.rule
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.sequence
\n",
" \n",
" \n",
" \n",
"
ir.sequence
\n",
" \n",
" \n",
" \n",
"
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",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.sequence.type
\n",
" \n",
" \n",
" \n",
"
ir.sequence.type
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.server.object.lines
\n",
" \n",
" \n",
" \n",
"
ir.server.object.lines
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.translation
\n",
" \n",
" \n",
" \n",
"
ir.translation
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.ui.menu
\n",
" \n",
" \n",
" \n",
"
ir.ui.menu
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.ui.view
\n",
" \n",
" \n",
" \n",
"
ir.ui.view
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.ui.view.custom
\n",
" \n",
" \n",
" \n",
"
ir.ui.view.custom
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.ui.view_sc
\n",
" \n",
" \n",
" \n",
"
ir.ui.view_sc
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
ir.values
\n",
" \n",
" \n",
" \n",
"
ir.values
\n",
" \n",
" \n",
" \n",
"
Holds 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",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Email Aliases
\n",
" \n",
" \n",
" \n",
"
mail.alias
\n",
" \n",
" \n",
" \n",
"
A 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",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Email composition wizard
\n",
" \n",
" \n",
" \n",
"
mail.compose.message
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Document Followers
\n",
" \n",
" \n",
" \n",
"
mail.followers
\n",
" \n",
" \n",
" \n",
"
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",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Discussion group
\n",
" \n",
" \n",
" \n",
"
mail.group
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Outgoing Mails
\n",
" \n",
" \n",
" \n",
"
mail.mail
\n",
" \n",
" \n",
" \n",
"
Model holding RFC2822 email messages to send. This model also provides\n",
" facilities to queue and send new email messages.
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Message
\n",
" \n",
" \n",
" \n",
"
mail.message
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Message subtypes
\n",
" \n",
" \n",
" \n",
"
mail.message.subtype
\n",
" \n",
" \n",
" \n",
"
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.
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Notifications
\n",
" \n",
" \n",
" \n",
"
mail.notification
\n",
" \n",
" \n",
" \n",
"
Class holding notifications pushed to partners. Followers and partners\n",
" added in 'contacts to notify' receive notifications.
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Email Thread
\n",
" \n",
" \n",
" \n",
"
mail.thread
\n",
" \n",
" \n",
" \n",
"
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",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Invite wizard
\n",
" \n",
" \n",
" \n",
"
mail.wizard.invite
\n",
" \n",
" \n",
" \n",
"
Wizard to invite partners and make them followers.
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Default multi company
\n",
" \n",
" \n",
" \n",
"
multi_company.default
\n",
" \n",
" \n",
" \n",
"
\n",
" Manage multi company default value\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
osv_memory.autovacuum
\n",
" \n",
" \n",
" \n",
"
osv_memory.autovacuum
\n",
" \n",
" \n",
" \n",
"
Expose the osv_memory.vacuum() method to the cron jobs mechanism.
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Online Payment Acquirer
\n",
" \n",
" \n",
" \n",
"
portal.payment.acquirer
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Portal Access Management
\n",
" \n",
" \n",
" \n",
"
portal.wizard
\n",
" \n",
" \n",
" \n",
"
\n",
" A wizard to manage the creation/removal of portal users.\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Portal User Config
\n",
" \n",
" \n",
" \n",
"
portal.wizard.user
\n",
" \n",
" \n",
" \n",
"
\n",
" A model to configure users in the portal wizard.\n",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
pricelist.partnerinfo
\n",
" \n",
" \n",
" \n",
"
pricelist.partnerinfo
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Condition
\n",
" \n",
" \n",
" \n",
"
process.condition
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Process Node
\n",
" \n",
" \n",
" \n",
"
process.node
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Process
\n",
" \n",
" \n",
" \n",
"
process.process
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Process Transition
\n",
" \n",
" \n",
" \n",
"
process.transition
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Process Transitions Actions
\n",
" \n",
" \n",
" \n",
"
process.transition.action
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Product Category
\n",
" \n",
" \n",
" \n",
"
product.category
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Packaging
\n",
" \n",
" \n",
" \n",
"
product.packaging
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Pricelist
\n",
" \n",
" \n",
" \n",
"
product.pricelist
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Price List
\n",
" \n",
" \n",
" \n",
"
product.price_list
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Pricelist item
\n",
" \n",
" \n",
" \n",
"
product.pricelist.item
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Pricelist Type
\n",
" \n",
" \n",
" \n",
"
product.pricelist.type
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Pricelist Version
\n",
" \n",
" \n",
" \n",
"
product.pricelist.version
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Price Type
\n",
" \n",
" \n",
" \n",
"
product.price.type
\n",
" \n",
" \n",
" \n",
"
\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",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Product
\n",
" \n",
" \n",
" \n",
"
product.product
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Information about a product supplier
\n",
" \n",
" \n",
" \n",
"
product.supplierinfo
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Product Template
\n",
" \n",
" \n",
" \n",
"
product.template
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Shipping Unit
\n",
" \n",
" \n",
" \n",
"
product.ul
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Product Unit of Measure
\n",
" \n",
" \n",
" \n",
"
product.uom
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Product uom categ
\n",
" \n",
" \n",
" \n",
"
product.uom.categ
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Analytic Entries by line
\n",
" \n",
" \n",
" \n",
"
project.account.analytic.line
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
publisher_warranty.contract
\n",
" \n",
" \n",
" \n",
"
publisher_warranty.contract
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Receivable accounts
\n",
" \n",
" \n",
" \n",
"
report.account.receivable
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Report of the Sales by Account
\n",
" \n",
" \n",
" \n",
"
report.account.sales
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Report of the Sales by Account Type
\n",
" \n",
" \n",
" \n",
"
report.account_type.sales
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Aged Receivable Till Today
\n",
" \n",
" \n",
" \n",
"
report.aged.receivable
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Report of Invoices Created within Last 15 days
\n",
" \n",
" \n",
" \n",
"
report.invoice.created
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Bank
\n",
" \n",
" \n",
" \n",
"
res.bank
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
Companies
\n",
" \n",
" \n",
" \n",
"
res.company
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
res.config
\n",
" \n",
" \n",
" \n",
"
res.config
\n",
" \n",
" \n",
" \n",
"
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",
"
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
res.config.installer
\n",
" \n",
" \n",
" \n",
"
res.config.installer
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
res.config.settings
\n",
" \n",
" \n",
" \n",
"
res.config.settings
\n",
" \n",
" \n",
" \n",
"
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",
"
To get information about columns access property .columns_info Also there are available standard server-side methods: search, read, write, unlinkAnd 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
To get information about columns access property .columns_info Also there are available standard server-side methods: search, read, write, unlinkAnd 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",
"
To get information about columns access property .columns_info Also there are available standard server-side methods: search, read, write, unlinkAnd 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
It indicates that sales order has at least one invoice.
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
invoice_ids
\n",
" \n",
" \n",
" \n",
"
Invoices
\n",
" \n",
" \n",
" \n",
"
many2many
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
" \n",
"
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",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
invoice_quantity
\n",
" \n",
" \n",
" \n",
"
Invoice on
\n",
" \n",
" \n",
" \n",
"
selection
\n",
" \n",
" \n",
" \n",
"
True
\n",
" \n",
" \n",
" \n",
"
The sales order will automatically create the invoice proposition (draft invoice).
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
invoiced
\n",
" \n",
" \n",
" \n",
"
Paid
\n",
" \n",
" \n",
" \n",
"
boolean
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
" \n",
"
It indicates that an invoice has been paid.
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
invoiced_rate
\n",
" \n",
" \n",
" \n",
"
Invoiced Ratio
\n",
" \n",
" \n",
" \n",
"
float
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
message_follower_ids
\n",
" \n",
" \n",
" \n",
"
Followers
\n",
" \n",
" \n",
" \n",
"
many2many
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
message_ids
\n",
" \n",
" \n",
" \n",
"
Messages
\n",
" \n",
" \n",
" \n",
"
one2many
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
" \n",
"
Messages and communication history
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
message_is_follower
\n",
" \n",
" \n",
" \n",
"
Is a Follower
\n",
" \n",
" \n",
" \n",
"
boolean
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
message_summary
\n",
" \n",
" \n",
" \n",
"
Summary
\n",
" \n",
" \n",
" \n",
"
text
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
" \n",
"
Holds the Chatter summary (number of messages, ...). This summary is directly in html format in order to be inserted in kanban views.
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
message_unread
\n",
" \n",
" \n",
" \n",
"
Unread Messages
\n",
" \n",
" \n",
" \n",
"
boolean
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
" \n",
"
If checked new messages require your attention.
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
name
\n",
" \n",
" \n",
" \n",
"
Order Reference
\n",
" \n",
" \n",
" \n",
"
char
\n",
" \n",
" \n",
" \n",
"
True
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
note
\n",
" \n",
" \n",
" \n",
"
Terms and conditions
\n",
" \n",
" \n",
" \n",
"
text
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
order_line
\n",
" \n",
" \n",
" \n",
"
Order Lines
\n",
" \n",
" \n",
" \n",
"
one2many
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
order_policy
\n",
" \n",
" \n",
" \n",
"
Create Invoice
\n",
" \n",
" \n",
" \n",
"
selection
\n",
" \n",
" \n",
" \n",
"
True
\n",
" \n",
" \n",
" \n",
"
This field controls how invoice and delivery operations are synchronized.
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
origin
\n",
" \n",
" \n",
" \n",
"
Source Document
\n",
" \n",
" \n",
" \n",
"
char
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
" \n",
"
Reference of the document that generated this sales order request.
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
partner_id
\n",
" \n",
" \n",
" \n",
"
Customer
\n",
" \n",
" \n",
" \n",
"
many2one
\n",
" \n",
" \n",
" \n",
"
True
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
partner_invoice_id
\n",
" \n",
" \n",
" \n",
"
Invoice Address
\n",
" \n",
" \n",
" \n",
"
many2one
\n",
" \n",
" \n",
" \n",
"
True
\n",
" \n",
" \n",
" \n",
"
Invoice address for current sales order.
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
partner_shipping_id
\n",
" \n",
" \n",
" \n",
"
Delivery Address
\n",
" \n",
" \n",
" \n",
"
many2one
\n",
" \n",
" \n",
" \n",
"
True
\n",
" \n",
" \n",
" \n",
"
Delivery address for current sales order.
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
payment_term
\n",
" \n",
" \n",
" \n",
"
Payment Term
\n",
" \n",
" \n",
" \n",
"
many2one
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
paypal_url
\n",
" \n",
" \n",
" \n",
"
Paypal Url
\n",
" \n",
" \n",
" \n",
"
char
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
portal_payment_options
\n",
" \n",
" \n",
" \n",
"
Portal Payment Options
\n",
" \n",
" \n",
" \n",
"
html
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
pricelist_id
\n",
" \n",
" \n",
" \n",
"
Pricelist
\n",
" \n",
" \n",
" \n",
"
many2one
\n",
" \n",
" \n",
" \n",
"
True
\n",
" \n",
" \n",
" \n",
"
Pricelist for current sales order.
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
project_id
\n",
" \n",
" \n",
" \n",
"
Contract / Analytic
\n",
" \n",
" \n",
" \n",
"
many2one
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
" \n",
"
The analytic account related to a sales order.
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
shop_id
\n",
" \n",
" \n",
" \n",
"
Shop
\n",
" \n",
" \n",
" \n",
"
many2one
\n",
" \n",
" \n",
" \n",
"
True
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
state
\n",
" \n",
" \n",
" \n",
"
Status
\n",
" \n",
" \n",
" \n",
"
selection
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
" \n",
"
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",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
user_id
\n",
" \n",
" \n",
" \n",
"
Salesperson
\n",
" \n",
" \n",
" \n",
"
many2one
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
" \n",
"
None
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
"
\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",
"
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
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",
"
id
\n",
" \n",
"
name
\n",
" \n",
"
Partner name
\n",
" \n",
"
Partner email
\n",
" \n",
"
Order lines
\n",
" \n",
"
state
\n",
" \n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
8
\n",
" \n",
" \n",
" \n",
"
SO008
\n",
" \n",
" \n",
" \n",
"
Millennium Industries
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
" \n",
"
20: Laptop Customized
21: Mouse, Wireless
\n",
" \n",
" \n",
" \n",
"
draft
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
7
\n",
" \n",
" \n",
" \n",
"
SO007
\n",
" \n",
" \n",
" \n",
"
Luminous Technologies
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
" \n",
"
16: Laptop E5023
17: GrapWorks Software
18: Datacard
19: USB Adapter
\n",
" \n",
" \n",
" \n",
"
manual
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
6
\n",
" \n",
" \n",
" \n",
"
SO006
\n",
" \n",
" \n",
" \n",
"
Think Big Systems
\n",
" \n",
" \n",
" \n",
"
info@thinkbig.com
\n",
" \n",
" \n",
" \n",
"
15: PC Assamble + 2GB RAM
\n",
" \n",
" \n",
" \n",
"
draft
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
5
\n",
" \n",
" \n",
" \n",
"
SO005
\n",
" \n",
" \n",
" \n",
"
Agrolait
\n",
" \n",
" \n",
" \n",
"
info@agrolait.com
\n",
" \n",
" \n",
" \n",
"
12: External Hard disk
13: Blank DVD-RW
14: Printer, All-in-one
\n",
" \n",
" \n",
" \n",
"
draft
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
4
\n",
" \n",
" \n",
" \n",
"
SO004
\n",
" \n",
" \n",
" \n",
"
Millennium Industries
\n",
" \n",
" \n",
" \n",
"
False
\n",
" \n",
" \n",
" \n",
"
8: Service on demand
9: Webcam
10: Multimedia Speakers
11: Switch, 24 ports
\n",
" \n",
" \n",
" \n",
"
draft
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
3
\n",
" \n",
" \n",
" \n",
"
SO003
\n",
" \n",
" \n",
" \n",
"
Chamber Works
\n",
" \n",
" \n",
" \n",
"
info@chamberworks.com
\n",
" \n",
" \n",
" \n",
"
6: On Site Monitoring
7: Toner Cartridge
\n",
" \n",
" \n",
" \n",
"
draft
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
2
\n",
" \n",
" \n",
" \n",
"
SO002
\n",
" \n",
" \n",
" \n",
"
Bank Wealthy and sons
\n",
" \n",
" \n",
" \n",
"
email@wealthyandsons.com
\n",
" \n",
" \n",
" \n",
"
4: Service on demand
5: On Site Assistance
\n",
" \n",
" \n",
" \n",
"
draft
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
" \n",
"\n",
" \n",
"
\n",
" \n",
"\n",
" \n",
" \n",
"
1
\n",
" \n",
" \n",
" \n",
"
SO001
\n",
" \n",
" \n",
" \n",
"
Agrolait
\n",
" \n",
" \n",
" \n",
"
info@agrolait.com
\n",
" \n",
" \n",
" \n",
"
1: Laptop E5023
2: Pen drive, 16GB
3: Headset USB
\n",
" \n",
" \n",
" \n",
"
sent
\n",
" \n",
" \n",
"\n",
"
\n",
" \n",
"
\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",
"
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",
"
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",
"
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?