Pages

Friday, December 31, 2010

OpenERP Hate from the web

Just take a look:
http://goo.gl/3yZOF

Friday, December 10, 2010

Tryton vs OpenERP: From internet Part 1

If you are going for the other direction (other than Django)I would really recommend tryton and keep the hell away of openerp. Tryton is really open source. openerp is just like compiere, openbenbravo and many others: "Was truly open source" than, came the money!!
We made the change a while ago. I took a lot of work. Spare yourself this trouble. Go Tryton!

From Pim Vergalen on http://stackoverflow.com/questions/2580512/building-a-financial-app-with-django

Wednesday, November 24, 2010

Annoying bug: XML/RPC should return integer faultcodes

from https://bugs.launchpad.net/openerp/+bug/257581

OpenERP doesn't respect the XML-RPC standards, returning a string as faultcodes, this breaks a lot of Java applications integrations according to the bug.


at www.xmlrpc.com :
"The <methodResponse> could also contain a <fault> which contains a <value> which is a <struct> containing two elements, one named <faultCode>, an <int> and one named <faultString>, a <string>."
Tiny Erp return a string and not an int. It's not very clear on the xmlrpc website but for exemple the apache java xmlrpc client understand only integers


9 hours ago:

Changed in openobject-server:
importance:High → Wishlist
milestone:6.0 → none



Tuesday, November 9, 2010

The OpenERP effect: Richard's Success, are you kidding?

http://www.scribd.com/doc/13773120/Richards-Success

Just take a look,

First, when you integrate a new application in a company, employees are happy if it is like before but faster but changing nothing in OpenERP because the slides don't talk about developments then employees are totally unhappy if you are using standards OpenERP views. They don't want to change they way they work.

If you integrate OpenERP like in the slide 26, you need to have a bridge with the other applications (then there is a cost)

BI module? Where do you have a nice BI module in OpenERP? This is just an unfinished buggy module

Can you do in OpenERP what you do with Outlook? Where? Why does OpenERP creates an Outlook plugin then?

Replacing Isabel? How?

These slides are just commercial but not showing real life, just post your comments about them...

From Twitter: about OpenERP license issues with Fedora

 refused in  because of license issue  and one more copyright/license issue


and one more license issue for  with  


http://twitter.com/#!/cedrickrier

Tuesday, October 26, 2010

Tryton vs OpenERP: Which is the best? Better modules or more modules?


I post the difference between Tryton and OpenERP, simply because I'm looking at Tryton for the moment to see how different it is from OpenERP and if it is better coded and easier for developers. Well for the moment I'm really surprised by the excellent quality of the code. Here is a VS sheet coming from Wikipedia.
SubjectTrytonOpenERP
LanguagePython (>=2.4)Python (>=2.4) for 5 Series[1],
Python (>=2.5) for 6 Series
Versions maintained2 years5.X.X Series to 6.X.X Series
Release cycleevery 6 monthswhen it's stable
Version PolicyNo API changes in Series, No XML Change in SeriesNo API changes in stable versions
Number of Modules50> 500
Repository Organisation1 Repo per Module1 Repo for official modules
Version Control SystemMercurial (HG)Bazaar (BZR), hosted on Launchpad.net
Active contributors (commits in May 2010)40245
Automatic Upgrades/MigrationsYesYes for minor versions
Python PackagingAvailable on PyPi[2]Not Available on PyPi
Python ModuleCan be used as a module[3]not
Distribution PackageDebianGentooUbuntuArch Linux,
Foresight Linux, Windows (only client), MacOS X (only client)
Available
Code Auto-ReloadAvailableNot Available
ArchitectureThree TierThree Tier
Database SupportedPostgreSQLMySQLSQLitePostgreSQL
Desktop ClientsGTK Based Desktop ClientGTK Based Desktop Client
KDE/QT Client(Community)
Web based ClientsSAO based on
Google Web Toolkit (Work in progress)
OpenObject-client-Web
based on CherryPy,
Mako and Mochikit (replaced by JQuery in v6)
Client Access LibrariesProteusNot Available
Standalone ClientsNesoNone
Native Gantt ChartsNot AvailableAvailable only in web client
Native Calendar ViewThrough CalDAVAvailable
Native Diagram ViewNot AvailableAvailable in v6
Reporting EnginesRelatorio based Openoffice
WYSIWYG reports [4] or any custom
RML (official)/Relatorio
(on Open Office. Community), Jasper(Community),
MAKO(work in progress)
Native Bar/Pie Chart ViewAvailable (with drill down)Available
Dashboard ViewAvailable (customizable)Available
CalDAVAvailableAvailable in series 6.X.X
WebDAVAvailableAvailable in series 6.X.X
Cardav[5]AvailableNot Available
Unit testingCovers Server & All modulesCovers modules & reports
Functional TestingProteus (Work in Progress) and in unit testYAML Based Tests
in series 6.X.X,Open ERP
Scenario (Community
Project/Unofficial) [6]
Client Multi Language Programming CompatibilityPossible by use of Pyson Syntax [7]Not available due to
pythonic expressions.
IP v6 CompatibilityYesNo
HistorizationYes[8]No
Localization5more than 20 languages,
 integrated with Launchpad.net

Business model

SubjectTrytonOpenERP
EditorCommunity [4]Open ERP SA [5]
Project typeCommunity Open source [9]Commercial Open Source [10]
Professional Service ProvidersAvailableAvailable
Partnership EligibilityMerits & Contribution to projectBuying Partner Contract
Software LicenseGNU General Public License[11]Server: GNU General Public License [12]
Web Client: Open ERP Public License[13]

Functionality

The functionality description here is based on the official modules of both projects. Unofficial modules with the functionality may exist, but is beyond the scope of this comparison as any such content would be difficult to maintain.
SubjectTrytonOpenERP
Accounting & Financial ManagementYesYes (Severely limited)
Document Management SystemYes (document size limit: Filesystem limit)Yes (document size limit: PostgreSQL 1GB)
Analytic accountingYesYes
Payroll ManagementNoYes
PortalsYesYes
Sales ManagementYesYes
Warehouse ManagementYesYes
Project ManagementYesYes
Purchase ManagementYesYes
Manufacturing ManagementIn Development [17]Yes
Human ResourcesYesYes
CRMBasicsYes
Point of SaleNoNo (Fast encoding screen available [18])
E-commerce ?Integration Magento, Prestashop, ...

Concepts and approach

SubjectTrytonOpenERP
AccountingUses Decimal [14]Uses Floats [15]
Password StorageCrypted with SHA1In clear text
Code reviewFor all commits through Rietveld[16]Almost none
float/integer representationLimited to float or long because using gtk.Entry without limitLimited to sys.maxint of Python because using gtk.SpinButton

Reference: http://en.wikipedia.org/wiki/Comparison_of_Tryton_and_Open_ERP

Friday, October 22, 2010

OpenERP on_change: bunch of parameters vs dictionaries

def product_uom_change(self, cursor, user, ids, pricelist, product, qty=0,
            uom=False, qty_uos=0, uos=False, name='', partner_id=False,
            lang=False, update_tax=True, date_order=False):
        res = self.product_id_change(cursor, user, ids, pricelist, product,
                qty=qty, uom=uom, qty_uos=qty_uos, uos=uos, name=name,
                partner_id=partner_id, lang=lang, update_tax=update_tax,
                date_order=date_order)
        if 'product_uom' in res['value']:
            del res['value']['product_uom']
        if not uom:
            res['value']['price_unit'] = 0.0
        return res

Look at this on_change, 15 parameters and calling another one with 14 parameters. This is too much, a good idea will be to use dictionaries:


def product_uom_change(self, cursor, user, ids, params, context=None):
        res = self.product_id_change(cursor, user, ids, params, context=context)
        if 'product_uom' in res['value']:
            del res['value']['product_uom']
        if not params['uom']:
            res['value']['price_unit'] = 0.0
        return res

PS: Here I have also a context parameter, OpenERP and his CEO Fabien Pinckaers forget it frequently.

Monday, October 18, 2010

Fabien Pinckaers: OpenERP v6, new logging system for end-users

Fabien Pinckaers: OpenERP v6, new logging system for end-users: "In order to improve the useability of OpenERP v6 and make it easier to use and learn for new users, we added a logging system on main action..."

Today, I saw this new post from the CEO of OpenERP, as always I've watched the code:

http://bazaar.launchpad.net/~openerp/openobject-server/trunk/annotate/head:/bin/addons/base/res/res_log.py

class res_log(osv.osv):
    _name = 'res.log'
    _columns = {
        'name': fields.char('Message', size=128, help='The logging message.', required=True),
        'user_id': fields.many2one('res.users','User', required=True),
        'res_model': fields.char('Object', size=128),
        'context': fields.char('Context', size=250),
        'res_id': fields.integer('Object ID'),
        'secondary': fields.boolean('Secondary Log', help='Do not display this log if it belongs to the same object the user is working on'),
        'create_date': fields.datetime('Created Date', readonly=True),
        'read': fields.boolean('Read', help="If this log item has been read, get() should not send it to the client")
    }
    _defaults = {
        'user_id': lambda self,cr,uid,ctx: uid,
        'context': "{}",
        'read': False
    }
    _order='create_date desc'

Well, this is the logger code, what do you think about it?

Let's look at the get method:


    def get(self, cr, uid, context=None):
        unread_log_ids = self.search(cr, uid,
            [('user_id','=',uid), ('read', '=', False)], context=context)
        ...
        self.write(cr, uid, unread_log_ids, {'read': True}, context=context)
        return result



As you can see the get method returns the unread messages.
Now, imagine you have 2 users using the same login. For example I've a customer using a backoffice login for 4 users.

Imagine 2 users (Mr Smith and Mr West) using the same user. The first connected will see all the unread messages and the other no messages...




Friday, October 15, 2010

base_contact module, heaven or hell?

Well, a lot of companies when they saw the partners (without the base_contact), they think that they need contacts separated from the addresses. In 70% of the cases they don't need it really but if they need it you think directly... base_contact... but this module is hell or heaven?

Just comment it!

Good reading for the CEO of OpenERP:
http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0470178450,descCd-description.html

Interview with The OpenERP Developer


Age: ??
Located in: ??
Occupation: OpenERP Consultant
Tweet: openerphell

Tell us about about yourself:

I'm an OpenERP Consultant

Tell us about about you and OpenERP


 If OpenERP was ...what would it be:

  • An animal (except an ant of course): The naked mole rat
  • A color: Red (it matches the invisible required fields)
  • A Dish : Black pudding
  • A Song: OpenERP deserves an album of its own “Rage against the machine"



Just kidding...

Thursday, October 14, 2010

Caldav in V6, the truth...

A lot of persons are talking about the CalDav implementation in OpenERP in V6, is it really CalDav or ics files with Webdav?

Looking at the OpenERP documentation about CalDav, you can see this:


Looking at this picture, you may think that OpenERP is only working with ics files... But... No, in fact I've tried the CalDav implementation in V6 and it seems that it is a real CalDav implementation... Then the documentation is wrong but the module name (caldav) is fine... 

One good point for OpenERP, I already said in this blog I'm impartial, I only give the truth about OpenERP...

Code obfuscation

From http://twitter.com/cedrickrier/status/27248865483

dict = {}
        for object in result:
            k2 = {}
            for id,fnct in result[object].items():
                k2.setdefault(tuple(fnct), [])
                k2[tuple(fnct)].append(id)
            for fnct,id in k2.items():
                dict.setdefault(fncts[fnct[0]][4],[])
                dict[fncts[fnct[0]][4]].append((fncts[fnct[0]][4],object,id,map(lambda x: fncts[x][1], fnct)))

http://bazaar.launchpad.net/~openerp/openobject-server/trunk/annotate/head:/bin/osv/orm.py#L3777

Code obfuscation...

Wednesday, October 13, 2010

Projects in OpenERP V5 Part 2

Code coming from the project module:

class project_work(osv.osv):
    _name = "project.task.work"
    _description = "Task Work"
    _columns = {
        'name': fields.char('Work summary', size=128),
        'date': fields.datetime('Date'),
        'task_id': fields.many2one('project.task', 'Task', ondelete='cascade', required=True),
        'hours': fields.float('Time Spent'),
        'user_id': fields.many2one('res.users', 'Done by', required=True),
    }

...

Using hours instead of a unit of measure and a value or defining in the application like in Tryton (http://www.tryton.org) what 1 day, 1 week, 1 month and 1 year of work means that your are obliged to encode hours in your time sheet...


Projects in OpenERP V5 Part 1

Code coming from the project module:

class project_work(osv.osv):
    _name = "project.task.work"
    _description = "Task Work"
    _columns = {
        'name': fields.char('Work summary', size=128),
        'date': fields.datetime('Date'),
        'task_id': fields.many2one('project.task', 'Task', ondelete='cascade', required=True),
        'hours': fields.float('Time Spent'),
        'user_id': fields.many2one('res.users', 'Done by', required=True),
    }

...

In this code, you can see that in the project work you have a user_id but It will be more interesting to link the employee (from the hr module).

Here is the problem:
You have a company with a lot of external consultants, you don't want them as users but you need to encode the time spent by these external consultants on your project to invoice your customer...

Balsamiq VS Pencil, how to make mockups for OpenERP?

Today, I'm trying to make a mockup for OpenERP with Balsamiq...

http://twitter.com/cedrickrier/status/27222698542

Like cedrickrier said Pencil is an OpenSource free alternative to Balsamiq but when you need to make simple mockups (just adding some fields for example), just use paint or gimp...

But for specific forms, it can be a good idea to use Pencil or Balsamiq...
I will post some mockups later... Stay connected...

OpenERP Webinar 1/5 Part 2

Well, after the answer to my first question, I've tried to ask another question.

Fabien showed an auto-completion for every many2one fields in OpenERP but as always in the demo there were only few records but how is the many2one showing the auto-completion with 10000 records starting by a when typing the letter a in the many2one. Querying 10000 records in the database?

After asking this a few times, I had no answers then I simply suppose that he never tested it...

After this second question, I simply quit the Webinar because he was only answering to some questions and the difficult ones, just skipping them...

Tuesday, October 12, 2010

OpenERP Webinar 1/5 Part 1

How was the first Webinar of OpenERP for version 6. Well, as usual Fabien Pinckaers goes fast into the menus (maybe scared about bugs).
During the questions session, I've tried to ask some questions to Fabien.
My first question: The calendar view in the GTK client is still limited to the number of records.
For example, imagine a customer with 2000 records in the calendar, he saw only the 80 first or 100 first in version 6. To see every records you need to remove the limit but then the system is so slow.
I've asked my questions 3 times without answer and then I was obliged to do a kind of spamming to have an answer.
The answer: The calendar in version 6 is still the same...
My opinion: Then if you want a real calendar use oultook...
My next question of the webinar 1/5 in my next post.

First message

I'm proud to write this first message.
This blog will try to explain how it is to develop with OpenERP.
My blog is named OpenERP Developer's Hell because sometimes it is very unpleasant to develop with OpenERP but I will also blog about good features in OpenERP.