Having setup and run a DOS/Windows based Accounting system ('Take5 Enterprise') since the mid 80s, I've kept an eye open for OpenSource solutions over the years. As OpenSource moves up the software stack, several solutions have evolved.
There is a Wikipedia ERP page worth reading.
The tools I came across were Postbooks, TinyERP (now called OpenERP), SQLledger, ofBiz, Adempiere, OpenBravo, ...
In April'08 finally decided to get to know OpenERP closer since is covers accounting, inventory management, CRM, customer management and even ticketing. I was wary of the fact that it was really only open source when SVN was opened in Feb'08, and the community is currently dominated by OpenERP partners.
In July'08 I started using it in production for my own accounts (Boran Consulting Sarl). In Jan'2010 I managed to close off 2009 with the v4.2 installation, and started afresh with with version 5 (since migration was too painful).
These pages summarise experience with OpenERP.
It requires quite a bit of patience to get up and running, the following may help you:
If you're going to program or be an OpenERP sysadmin:
I have asked CamptoCamp for help on several issues regarding Swiss localisation, financial accounting, setting up Terp etc. They are very knowledgable and are part of the core developers in the community (e.g. see the many c2c_ modules), and very much open sourced oriented. They also have other special skills such as Geolocalisation and managed of hosted Linux environments
Openet, also based in Lausanne, are friendly and savvy, I've not yet worked with them yet though.
.
From cron I usually backup all database regularly, some ones daily, and delete backups older than 40 days.
0 4 * * 6 su postgres -c "export LANG=C; pg_dump -Fc --compress=9 --file=/var/backups/postgres/MYDB.$$ MYDB"
0 4 * * 6 su postgres -c "export LANG=C; pg_dump --clean --column-inserts --attribute-inserts --file=/var/backups/postgres/MYDB.$$ MYDB"
0 4 * * 6 su postgres -c "export LANG=C; pg_dumpall -o > /var/backups/postgres/all.$$";
0 6 * * 6 find /var/backups/postgres -xdev -ctime +40 -type f -exec rm \{\} \;
Then the server itself (and especially /var/backups /opt /etc) is backed up using backuppc (or a similar tool).
Compact dev overview: http://www.openobject.com/memento/
Official docs: http://doc.openerp.com/developer/index.html
The forums…
Opennet: http://www.open-net.ch/ERP-CRM-OpenERP/Admin-Guide-OpenERP
import sys
sys.path.append('/openerp/')
from osv import osv, fields
import MYMODULE
import pdb
pdb.set_trace()
import pprint
pp = pprint.PrettyPrinter(indent=2)
pp.pprint(data)
import netsvc
logger = netsvc.Logger()
if debuglog==1:
import logging
logging.getLogger().setLevel(logging.DEBUG) # DEBUG INFO(default) WARNING ERROR CRITICAL
class logit(object):
"""
Log msg to the Openerp server log, with a standard prefix to identify the class,
the default level is INFO but can be set as the second parameter.
Set debuglog=1 at a higher level to enable module/function tracing
"""
def __init__(self, msg='', level=netsvc.LOG_INFO):
global debuglog
prefix=self.__class__.__name__ +': '
if (debuglog==1) or (level==netsvc.LOG_DEBUG): # add caller module/method
import inspect
prefix=inspect.stack()[1][1] +' ' +inspect.stack()[1][3] +'() ' +prefix
#print(prefix + msg)
logger.notifyChannel("", level, prefix + msg)
I'm still a vim + pdb fan myself, but an having a look at IDEs…
If going for an IDE, Aptana+ pydev is better than eclipse+pydev: easier to getup & going.
Download the standalone version (not deb packages) from http://www.aptana.org/studio/download, then install the pydev extensions from the Help> Install Aptana features dialog.
I didn't find a way for it to trace in real time though openserp server code, objects modules, and help me understand how certain features work..
Vim has great syntax highlighting that catches mayn xml and py errors.
Komodo IDE: is a commercial one, not tested though….
Tutorials:http://pythonconquerstheuniverse.wordpress.com/category/the-python-debugger/http://pydev.org/manual_adv_launch.html
F9: run, F11 debug run
Step in: F5, over: F6, Continue: F8
Ctrl-G: comment wrap
Must test more of these:
* Breakpoints (with optional condition)
* Stack view showing multiple threads
* Locals and Globals variable display
* Expressions display
* Temporary display for selection: Ctrl+Shift+D
* Hover showing the selected expression evaluation
Remember your current position:
if has("autocmd")
au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
| exe "normal g'\"" | endif
endif
Xmlint (in package libxml2-utils) can check xml for you.
autocmd BufWrite *xml exe ":silent %!xmllint —format —recover - 2>/dev/null"
For openerp RML report, it can also help:
xmllint —relaxng import_xml.rng <your rml file>
Further reading:
http://www.pinkjuice.com/howto/vimxml/index.xml
http://stackoverflow.com/questions/1636771/post-your-vim-config
I've put up some example XML-RPC scripts for Opnerp5 on google code:
Home: http://code.google.com/p/boran-openerp/
Subversion https://boran-openerp.googlecode.com/svn/trunk
These are (sample) simple working scripts to list accounts, invoices, partners/contacts, invoices/payments per partner etc.
Partners can also be imported and invoices created.
Feel free to use, and also to contribute!
To do: Expalin the code below….
[Update 21.jun'10:
- There was a bug in the webinterface when downloading the excel file, see https://bugs.launchpad.net/openobject-client-web/+bug/591102 , hopefully the fix will be included in 5.0.12.
- This example use a classical wizard, it can also be be using osv_memory … must add an example
}
In the modules view xml, create a wizard and menu item that calls it:
<wizard string="My Excel export" model="ti.my" id="wizard_ti_my_excel" name="ti.my.excel" />
<menuitem name="My/Excel" id="menu_my_excel" action="wizard_ti_my_excel" type="wizard" sequence="40"/>
Create the ".py" file with the wizard class:
import StringIO
import base64
from osv import osv, fields
import pooler
import wizard
import csv
import pprint
…
class wiz_ti_my_excel(wizard.interface):
…
view_form_finish="""<?xml version="1.0"?>
<form string="Export list">
<image name="gtk-dialog-info" colspan="2"/>
<group colspan="2" col="4">
<separator string="Export to Excel" colspan="4"/>
<field name="data" readonly="1" colspan="3" filename="file_name" />
<label align="0.0" string="Save this document to a .XLS file and open it with\n Excel." colspan="4"/>
</group>
</form>"""
fields_finish={
'data': {'string':'File', 'type':'binary', 'readonly': True,},
'file_name':{'string':'File Name', 'type':'char'}
}
## Only one step in this GUI, call the action _get_file
## return the result data + file_name and go to end state.
states={
'init':{
'actions': [_get_file],
'result': {'type': 'form',
'arch': view_form_finish,
'fields': fields_finish,
'state': [ ('end', 'Close', 'gtk-cancel', True) ]
}
},
}
wiz_ti_my_excel('ti.my.excel')
Creating Excel docs
to do
wizards:
http://doc.openerp.com/developer/3_10_wizard/index.html
Create excel sheets from python
http://ntalikeris.blogspot.com/2007/10/create-excel-file-with-python-my-sort.html
http://files.blog-city.com/files/F05/96843/b/cheatsheet.pdf
http://www.simplistix.co.uk/software/python/xlutils
For months I was annoyed by the language in my GUI (on Windows XP) not conforming to settings.
In one case, the solution is to set the LANG variable in Windows:
1. Right-click My Computer, and then click Properties.
2. Click the Advanced tab > Environment variables
3. Click New to add a new system variable with name “LANG” and value “fr_CH” for example (Swiss french).
Also set 'lang = fr_CH' in the client section of c:\Documents and Settings\USERNAME.openerprc
(however in v5.0.6 this keeps getting written back to en_US: setting the file to read-only stops that, but the etting is still not used correctly).
On the server side, make sure there is a corresponding entry under Administration -> Translation -> Application Terms -> Languages.
I must admit that despite the above a v5.0.6 instance on mine still puts all dates in American format, with Menu lang in french.
So date formatting is broken, in v5.0.6 at least.
Further reading:
http://www.openobject.com/forum/post50298.html
https://bugs.launchpad.net/openobject-client/+bug/519731
http://www.openerp.com/forum/topic9852.html
Having setup a new Ubuntu 8.04 with Openerp 5.0.10, it was not possible to create databases.
Watching the usual suspect logs:
tail -f /var/log/messages /var/log/syslog /var/log/daemon.log /var/log/openerp/server.log /var/log/postgresql/postgresql-8.3-main.log &
010-06-03 18:07:26 CEST FATAL: Ident authentication failed for user "openerp"
2010-06-03 18:08:25 CEST ERROR: encoding UTF8 does not match server's locale en_US
2010-06-03 18:08:25 CEST DETAIL: The server's LC_CTYPE setting requires encoding LATIN1.
2010-06-03 18:08:25 CEST STATEMENT: CREATE DATABASE "tipop1" ENCODING 'unicode' TEMPLATE "template0"
Then tried to connecton on the command line to test DB creating:
psql -U openerp template1
This would not work:
CREATE DATABASE "tipop1" ENCODING 'unicode' TEMPLATE "template0"
but this would:
CREATE DATABASE "tipop1" ENCODING 'LATIN1' TEMPLATE "template0";
Spend hours changing this issues trying to find explanations and solutions, seems ot be a hazy mix of authetnication and locale issues. The more I looked at locales, the worse it got.
https://bugs.launchpad.net/ubuntu/+source/openerp-server/+bug/331065
In the end I did the importing this of hacking bin/service/web_services.py and replacing unicode with LATIN1 in the create database statement.
Will see what consequence it has, but am noting the hack here for now..
---------- TinyERP install notes -------------------
Note: as I live in Switzerland, my focus includes the CH accounting modules, and thus C2c modules..
--- Windows install ---------
Install tinyerp-allinone-setup-4.2.2.exe
C:\Program Files\TinyERP Server>tinyerp-server.exe -d ch2 -r tinypg -w tinypgpwd --update=all
Modules: base, account, account_payment, c2c_partner_address, account_tax_include, c2c_invoice_layer.
Then install l10n_ch, then l10n_ch_pcpbl_plangensimpl
--------------- Ubuntu 8.10 #1 ------------
POSTGRES:
---------
http://tinyerp.org/wiki/index.php/InstallationManual/ServerInstallUbuntu
sudo apt-get update
apt-get install python-xml python-libxml2 python-libxslt1 python-psycopg python-imaging python-pyparsing python-reportlab graphviz postgresql python-tz python-pyopenssl gs-gpl python-matplotlib python-numeric python-ldap
# Postgres V8.3 has issues with Terp, so install v8.2:
apt-get install postgresql-8.2 postgresql-client-8.2 postgresql-contrib-8.2 pgadmin3
pg_createcluster 8.2 main --start
su - postgres -c "createdb --encoding=UNICODE terp"
su - postgres -c "createuser --createdb --adduser terp"
Initialise the DB we made above:
su postgres -c "/usr/lib/python2.5/site-packages/tinyerp-server/tinyerp-server.py --without-demo=all -d terp"
vi /etc/postgresql/8.2/main/postgresql.conf
vi /etc/postgresql/8.2/main/pg_hba.conf
tail -f /var/log/postgresql/postgresql-8.2-main.log
/etc/init.d/postgresql-8.2 restart
Postgres: port 5432
/var/log/postgresql/
/etc/init.d/postgresql-8.2 start
netstat -an |grep "LISTEN "
/var/lib/postgresql/8.2/main
/etc/postgresql/8.2/main/postgresql.conf
(enabled on all interfaces)
vi /etc/postgresql/8.2/main/pg_hba.conf
tail -f /var/log/postgresql/postgresql-8.2-main.log
http://www.ubuntugeek.com/howto-setup-database-server-with-postgresql-an...
TERP:
-----
cd /opt/install/tinyerp-server-4.2
python setup.py build
sudo python setup.py install
(it is now in "/usr/lib/python2.5/site-packages/tinyerp-server")
chmod 755 /usr/lib/python2.5/site-packages/tinyerp-server/tinyerp-server.py
See:
/usr/lib/python2.5/site-packages/tinyerp-server
/usr/share/doc/tinyerp-server-4.2.2
/usr/bin/tinyerp-server
./tinyerp-server.py --port=8069 --interface=193.5.227.231 --database=terp --db_user=terp --db_password='' --db_host=localhost --db_port=5432
ln -s /usr/lib/python2.5/site-packages/tinyerp-server /tiny
vi /etc/init.d/tinyerp-server
su postgres -c "/usr/lib/python2.5/site-packages/tinyerp-server/tinyerp-server.py --verbose --config=/etc/tinyerp-server.conf"
/usr/bin/tinyerp-server --init=all
------------- Terp via bazaar -----------------
Bazaar stable branch
cd /opt/install/bzr.openerp.42
bzr branch lp:~openerp/openobject-server/4.2 server
bzr branch lp:~openerp/openobject-client/4.2 client
bzr branch lp:~openerp/openobject-addons/4.2 addons
cd server/bin/addons
ln -s ../../../addons/* .
------------- eTiny web interface install -----------------
cd /opt/install/
wget http://peak.telecommunity.com/dist/ez_setup.py
python ez_setup.py
easy_install TurboGears==1.0.3.2
apt-get install python-matplotlib python-profiler python-imaging
easy_install eTiny
vi /usr/lib/python2.5/site-packages/eTiny-1.0-py2.5.egg/config/default.cfg
[no changes needed]
start-tinyerp
Automate startup
cp /usr/lib/python2.5/site-packages/eTiny-1.0-py2.5.egg/scripts/etiny-server /etc/init.d
cp /usr/lib/python2.5/site-packages/eTiny-1.0-py2.5.egg/config/default.cfg /etc/etiny-server.cfg
update-rc.d etiny-server defaults
chmod 755 /etc/init.d/etiny-server
vi /etc/init.d/etiny-server /etc/etiny-server.cfg
/etc/init.d/etiny-server start
Config: /etc/etiny-server.cfg
Log: /var/log/etiny-server.log
/var/log/tinyerp.log
TinyERP is on port 8060/70, eTiny on 8080
netstat -an | grep 80
tcp 0 0 176.17.3.173:8069 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8070 0.0.0.0:* LISTEN
Problem: its only runs as root
/usr/bin/start-tinyerp /etc/etiny-server.cfg &
or start-tinyerp
but not
su terp -c "/usr/bin/start-tinyerp /etc/etiny-server.cfg"
/etc/init.d/etiny-server start
Connect to http://_MY_IP_ADDRESS:8080/
---------------- Updates -----------------
Pour les mise à jour (c2c_partner_address, c2c_invoice_layer, l10n_ch, l10n_ch_pcpbl_plangensimpl)
- je arrête Tiny
- copie les répertoires de SVN dans addons (après avoir effacé les anciens),
- redémarre tiny, et fait un "update" de ces modules (ils sont 'bleu dans la liste des modules)
- redémarre Tiny à nouveau
------- Addons --------
svn co https://tinyerp.saas-camptocamp.com/svn/tinyerp svn.camptocamp
cd /data/tinyerp/svn.camptocamp/trunk/swisslocalisation
cp -r l10n_ch l10n_ch_pcpbl_plangensimpl /tiny/addons/
cp -r c2c_partner_address c2c_invoice_layer /tiny/addons
--- Sysadmin notes
su postgres
pg_dumpall -o > /tmp/db.out
pg_dump --clean --column-inserts --attribute-inserts --file=/tmp/prod_isp.$$ prod_isp
su postgres -c "export LANG=C; pg_dump --clean --column-inserts --attribute-inserts --file=/var/backups/postgres/prod_isp.`date +%y%m%d` prod_isp"
tinyerp-server has by default two accounts:
- User: admin; password: admin
- User: demo; password; demo
SCREEN: Use screen to attach/detach the console. Use one screen to start eting, the other to start the tiny server, both providing debug to the console.
apt-get install screen
screen -list
screen -S etiny
To detach, type CTRL+a, d
screen -S tiny.log
screen -list
Reattach
screen -R tiny.log
--- Monitoring ----
/etc/init.d/tinyerp-server start
tail -f /var/log/tinyerp-server.log
/etc/init.d/postgresql-8.2 restart
tail -f /var/log/postgresql/postgresql-8.2-main.log
screen -S etiny
/usr/bin/start-tinyerp /etc/etiny-server.cfg &
To detach, type CTRL+a, d
screen -list
To resttach: screen -R etiny
This is a simple list to track issues that bother me with Terp (the old name for OpenERP). Its been a real up-hill battle for me, I would never accepted such poor quality from a commercial tool, but I'm sticking at it because there are some excellent community members & opensource oriented partners, and Terp does have the potential to be a really good tool.
On the other hand I've not gone into such detail with any other ERP or Accounting tool in the OpenSource areas, so don't the following long list as means that OpenERP is worse than its competitors.
The version used is 4.2 stable from SVN (Jun'08), more recently bzr (Oct'08).
>> Update 30.Nov.08: the current 4.2 sources from bzr together with the Windows client tinyerp-client-setup-4.2.3.4-with-export-patch.exe are big improvements in many areas on the last merge I did in early Oct.
Buy it, its a useful doc indeed, but..
https://tinyerp.saas-camptocamp.com/trac/tinyerp/ticket/26
http://www.openerp.com/forum/post21264.html#21264
As I progress, I've written several modules and scripts, where possible I publish them as open source.
Aims: created commented, example modules and scripts to make them easier for others to read, as I myself found it difficult to get going in Terp as a python newbie, and with terp having almost zero comments/doc strings in the code.
RPC/Web service interface Scripts:
Module addons
There are also links to useful sites/documentation notes
The scripts are GPL/OpenSource
The SVN repository is
https://svn1.hosted-projects.com/boran/terp
Read-only access to this repository: user=public, password=public
For write access, ask me (I welcome contributes, if any modules become big enough they can be transferred to Google code or SourceForge)
Aim (2008..): This page will cover issues with the very promising v5......
V5 looks interesting indeed, but are (many) issues... check out the foums..
Migrating from v4.2:
Sep'2009: For some performance/scalability testing scripts see http://www.openobject.com/forum/post42822.html (they are in the svn repository).
Accounting:
[Update 2010.07.25] As an opensource project basically if something is missing one should try and implement it and contribute back to the community. Since I've not been able to do this yet really with openerp, I'm reluctant to criticise strongly.
Commercial software makes (more) money ... so they have the money to employ programmers to make easier to use software... but they don't necessarily listen to their community either
All open software projects have to start somewhere, and its the community that makes the project. Openerp tries to solve complex problems and is at (very) early stages community wise.
(My favourite counter-example is Drupal which has a strong, open, vibrant community tying commercial integrators/developers with volounteers in a way I've never seen before: its a million times more motivating to work on Drupal than Openerp....)
Version 5.0.1 was installed (17th Jun'09) according to the guide on
http://www.openerp.com/forum/topic11409.html?sid=6b707d62e336098110f69c0...
A few differences:
- Pull sources from launchpad, rather than download the tarball (since there is no tarball for extra-addons, or community addons and its easier to follow source code changes). The bzr_setup script pulls down the sources for client, servers, addons and web client.
cd /opt
bzr branch lp:openerp openerp.bzr
cd openerp.bzr
./bzr_set.py
- rather than doing a make install, it was run directly from the directory where is was extracted, /opt/openerp.bzr
- Scripts for starting the web and server, and configuration files were written, see the attachments below.
| Attachment | Size |
|---|---|
| init.d_openerp-server | 3.03 KB |
| init.d_openerp-web | 3.8 KB |
| openerp-server.cfg | 1.23 KB |
| openerp-web.cfg | 2.1 KB |
This ERP tool is based in OpenERP 4.2 stable. http://www.tryton.org
"So, why forking? The goal behind Tryton is not to create a direct competitor but to provide a new way to tackle the problem of programming a business software. The idea is to favor a solid and consistent solution over more cutting edge features. Practically this means that today (20 October 2008), compared to the version of Tiny ERP (4.2) that was the base of the fork: More than 4000 lines of code have been removed and more than 11000 lines of code have been added. Moreover, all the modules available in Tryton have been completely rewritten, which represent nearly 20000 lines of code. All this work was necessary from our point of view because most of the fundamental modules in Tiny ERP where written when some of the most advanced technical features were still missing. The result is a better harmonization between base modules, an optimized modularity and a more powerful platform for custom developments."
Good things:
Less good
This space will be updated after real tests..