merge from trunk
bzr revid: rco@openerp.com-20111207112438-9598ucb1vj0zt1g4
This commit is contained in:
@@ -1,55 +1,29 @@
|
||||
About OpenERP
|
||||
pydot - Python interface to Graphviz's Dot language
|
||||
Ero Carrera (c) 2004-2007
|
||||
ero@dkbza.org
|
||||
|
||||
This code is distributed under the MIT license.
|
||||
|
||||
Requirements:
|
||||
-------------
|
||||
|
||||
OpenERP is an OpenSrouce/Free software Enterprise Resource Planning and
|
||||
Customer Relationship Management software. More info at:
|
||||
pyparsing: pydot requires the pyparsing module in order to be
|
||||
able to load DOT files.
|
||||
|
||||
http://www.openerp.com
|
||||
GraphViz: is needed in order to render the graphs into any of
|
||||
the plethora of output formats supported.
|
||||
|
||||
Installation on Debian Ubuntu
|
||||
-----------------------------
|
||||
Installation:
|
||||
-------------
|
||||
|
||||
Add the the apt repository in your source.list and type:
|
||||
Should suffice with doing:
|
||||
|
||||
$ apt-get install openerp
|
||||
python setup.py install
|
||||
|
||||
Installation on RedHat, Fedora, CentOS
|
||||
--------------------------------------
|
||||
Needless to say, no installation is needed just to use the module. A mere:
|
||||
|
||||
Install the required dependencies:
|
||||
import pydot
|
||||
|
||||
$ yum install python
|
||||
$ easy_install pip
|
||||
$ pip install .....
|
||||
|
||||
Install the openerp rpm
|
||||
|
||||
$ rpm -i openerp-VERSION.rpm
|
||||
|
||||
Installation on Windows
|
||||
-----------------------
|
||||
|
||||
Installation on MacOSX
|
||||
-----------------------
|
||||
|
||||
Setuping you first database
|
||||
---------------------------
|
||||
|
||||
Point your browser to http://localhost:8069/ and click "Database", the default
|
||||
master password is "admin".
|
||||
|
||||
Detailed System Requirements
|
||||
----------------------------
|
||||
|
||||
You need the following software installed:
|
||||
|
||||
python, postgresql-client, python-dateutil, python-gdata, python-ldap,
|
||||
python-libxslt1, python-lxml, python-mako, python-openid, python-psycopg2,
|
||||
python-pybabel, python-pychart, python-pydot, python-pyparsing,
|
||||
python-reportlab, python-simplejson, python-tz, python-vobject, python-webdav,
|
||||
python-werkzeug, python-yaml, python-zsi, graphviz, ghostscript, postgresql,
|
||||
python-imaging, python-matplotlib
|
||||
|
||||
For Luxembourg localization, you also need:
|
||||
* pdftk (http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/)
|
||||
should do it, provided that the directory containing the modules is on Python
|
||||
module search path.
|
||||
|
||||
|
||||
@@ -287,6 +287,7 @@ CREATE TABLE ir_module_module (
|
||||
name character varying(128) NOT NULL,
|
||||
author character varying(128),
|
||||
url character varying(128),
|
||||
icon character varying(64),
|
||||
state character varying(16),
|
||||
latest_version character varying(64),
|
||||
shortdesc character varying(256),
|
||||
@@ -294,6 +295,7 @@ CREATE TABLE ir_module_module (
|
||||
category_id integer REFERENCES ir_module_category ON DELETE SET NULL,
|
||||
certificate character varying(64),
|
||||
description text,
|
||||
core boolean default False,
|
||||
demo boolean default False,
|
||||
web boolean DEFAULT FALSE,
|
||||
license character varying(32),
|
||||
|
||||
@@ -22,8 +22,7 @@
|
||||
<menuitem id="menu_users" name="Users" parent="base.menu_administration" sequence="4"/>
|
||||
<menuitem id="menu_security" name="Security" parent="base.menu_administration" sequence="5"
|
||||
groups="base.group_extended"/>
|
||||
<menuitem id="menu_management" name="Modules" parent="base.menu_administration" sequence="10"
|
||||
groups="base.group_extended"/>
|
||||
<menuitem id="menu_management" name="Modules" parent="base.menu_administration" sequence="10"/>
|
||||
<menuitem id="reporting_menu"
|
||||
parent="base.menu_custom" name="Reporting" sequence="30"
|
||||
/>
|
||||
|
||||
@@ -321,6 +321,13 @@ class act_window(osv.osv):
|
||||
|
||||
act_window()
|
||||
|
||||
VIEW_TYPES = [
|
||||
('tree', 'Tree'),
|
||||
('form', 'Form'),
|
||||
('graph', 'Graph'),
|
||||
('calendar', 'Calendar'),
|
||||
('gantt', 'Gantt'),
|
||||
('kanban', 'Kanban')]
|
||||
class act_window_view(osv.osv):
|
||||
_name = 'ir.actions.act_window.view'
|
||||
_table = 'ir_act_window_view'
|
||||
@@ -329,12 +336,7 @@ class act_window_view(osv.osv):
|
||||
_columns = {
|
||||
'sequence': fields.integer('Sequence'),
|
||||
'view_id': fields.many2one('ir.ui.view', 'View'),
|
||||
'view_mode': fields.selection((
|
||||
('tree', 'Tree'),
|
||||
('form', 'Form'),
|
||||
('graph', 'Graph'),
|
||||
('calendar', 'Calendar'),
|
||||
('gantt', 'Gantt')), string='View Type', required=True),
|
||||
'view_mode': fields.selection(VIEW_TYPES, string='View Type', required=True),
|
||||
'act_window_id': fields.many2one('ir.actions.act_window', 'Action', ondelete='cascade'),
|
||||
'multi': fields.boolean('On Multiple Doc.',
|
||||
help="If set to true, the action will not be displayed on the right toolbar of a form view."),
|
||||
|
||||
@@ -215,6 +215,7 @@ class module(osv.osv):
|
||||
'views_by_module': fields.function(_get_views, method=True, string='Views', type='text', multi="meta", store=True),
|
||||
'certificate' : fields.char('Quality Certificate', size=64, readonly=True),
|
||||
'web': fields.boolean('Has a web component', readonly=True),
|
||||
'core': fields.boolean('Is a Core Application', readonly=True),
|
||||
'icon': fields.char('Icon URL', size=128),
|
||||
'complexity': fields.selection([('easy','Easy'), ('normal','Normal'), ('expert','Expert')],
|
||||
string='Complexity', readonly=True,
|
||||
|
||||
@@ -39,24 +39,19 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search modules">
|
||||
<group col='10' colspan='4'>
|
||||
<filter icon="terp-check" string="Main Apps" domain="[('core', '=', 1)]"/>
|
||||
<filter icon="terp-check" string="Extra" domain="[('core', '=', 0)]"/>
|
||||
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-check" string="Installed" domain="[('state', 'in', ['installed', 'to upgrade', 'to remove'])]"/>
|
||||
<filter icon="terp-dialog-close" string="Not Installed" domain="[('state', 'in', ['uninstalled', 'uninstallable'])]"/>
|
||||
<filter icon="terp-gtk-jump-to-ltr" string="To be upgraded" domain="[('state','in', ['to upgrade', 'to remove', 'to install'])]"/>
|
||||
<filter icon="terp-dialog-close" string="Not Installed" domain="[('state', 'in', ['uninstalled', 'uninstallable', 'to install'])]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter icon="terp-camera_test" string="Certified" domain="[('certificate','<>', False)]"/>
|
||||
<separator orientation="vertical"/>
|
||||
<field name="name"/>
|
||||
<field name="complexity"/>
|
||||
<field name="description"/>
|
||||
<field name="dependencies_id"/>
|
||||
<field name="state"/>
|
||||
</group>
|
||||
<newline/>
|
||||
<group expand="0" string="Group By..." colspan="11" col="11" groups="base.group_extended">
|
||||
<filter string="Author" icon="terp-personal" domain="[]" context="{'group_by':'author'}"/>
|
||||
<separator orientation="vertical"/>
|
||||
<filter string="Category" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'category_id'}"/>
|
||||
<filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
|
||||
<field name="name"
|
||||
domain="['|','|', ('name','ilike',self), ('description','ilike',self), ('shortdesc','ilike',self) ]"
|
||||
string="Name / Keywords"/>
|
||||
<field name="name"
|
||||
domain="['|','|', ('name','ilike',self), ('description','ilike',self), ('shortdesc','ilike',self) ]"
|
||||
string="Name / Keywords"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
@@ -118,13 +113,16 @@
|
||||
<field name="type">form</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Module">
|
||||
<field name="name" select="1"/>
|
||||
<field name="certificate" />
|
||||
<field colspan="4" name="shortdesc" select="2"/>
|
||||
<field name="category_id"/>
|
||||
<field name="complexity"/>
|
||||
<field name="demo" readonly="1"/>
|
||||
<field name="icon"/>
|
||||
<group colspan="4" col="6">
|
||||
<field name="name"/>
|
||||
<field name="shortdesc"/>
|
||||
<field name="certificate" />
|
||||
<field name="category_id"/>
|
||||
<field name="complexity"/>
|
||||
<field name="demo"/>
|
||||
<field name="icon"/>
|
||||
<field name="core"/>
|
||||
</group>
|
||||
<notebook colspan="4">
|
||||
<page string="Module">
|
||||
<group colspan="4" col="4">
|
||||
|
||||
@@ -60,6 +60,7 @@ After importing a new module you can install it by clicking on the button "Insta
|
||||
action="action_view_base_module_import"
|
||||
id="menu_view_base_module_import"
|
||||
parent="menu_management"
|
||||
groups="base.group_extended"
|
||||
sequence="1"/>
|
||||
|
||||
</data>
|
||||
|
||||
@@ -55,12 +55,13 @@
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
name="Update Modules List"
|
||||
action="action_view_base_module_update"
|
||||
id="menu_view_base_module_update"
|
||||
parent="menu_management"
|
||||
sequence="2"
|
||||
icon="STOCK_CONVERT"/>
|
||||
name="Update Modules List"
|
||||
action="action_view_base_module_update"
|
||||
id="menu_view_base_module_update"
|
||||
groups="base.group_extended"
|
||||
parent="menu_management"
|
||||
sequence="2"
|
||||
icon="STOCK_CONVERT"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
||||
@@ -31,11 +31,12 @@
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
name="Apply Scheduled Upgrades"
|
||||
action="action_view_base_module_upgrade"
|
||||
id="menu_view_base_module_upgrade"
|
||||
parent="menu_management"
|
||||
sequence="3"/>
|
||||
name="Apply Scheduled Upgrades"
|
||||
action="action_view_base_module_upgrade"
|
||||
groups="base.group_extended"
|
||||
id="menu_view_base_module_upgrade"
|
||||
parent="menu_management"
|
||||
sequence="3"/>
|
||||
|
||||
<record id="view_base_module_upgrade_install" model="ir.ui.view">
|
||||
<field name="name">Module Upgrade Install</field>
|
||||
|
||||
@@ -75,14 +75,14 @@ def initialize(cr):
|
||||
|
||||
cr.execute('INSERT INTO ir_module_module \
|
||||
(author, website, name, shortdesc, description, \
|
||||
category_id, state, certificate, web, license, complexity) \
|
||||
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) RETURNING id', (
|
||||
category_id, state, certificate, web, license, complexity, core, icon) \
|
||||
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) RETURNING id', (
|
||||
info['author'],
|
||||
info['website'], i, info['name'],
|
||||
info['description'], category_id, state, info['certificate'],
|
||||
info['web'],
|
||||
info['license'],
|
||||
info['complexity']))
|
||||
info['complexity'], info['core'], info['icon']))
|
||||
id = cr.fetchone()[0]
|
||||
cr.execute('INSERT INTO ir_model_data \
|
||||
(name,model,module, res_id, noupdate) VALUES (%s,%s,%s,%s,%s)', (
|
||||
|
||||
@@ -250,6 +250,8 @@ def load_information_from_description_file(module):
|
||||
info.setdefault('name', False)
|
||||
info.setdefault('description', '')
|
||||
info.setdefault('complexity', 'normal')
|
||||
info.setdefault('core', False)
|
||||
info.setdefault('icon', '')
|
||||
info['certificate'] = info.get('certificate') or None
|
||||
info['web'] = info.get('web') or False
|
||||
info['license'] = info.get('license') or 'AGPL-3'
|
||||
|
||||
Reference in New Issue
Block a user