Tuesday, 25 March 2014

Work with web-controller OpenERP

How to override web controller in openerp 8.0.

Here, i try to define one example that may be useful to you to understand how to work with web controller in openerp 8.0.

Existing controller (addons/web/controllers/main.py) :
- class name Home, and method index

class Home(http.Controller):

    @http.route('/', type='http', auth="none")
    def index(self, s_action=None, db=None, **kw):
        return http.local_redirect('/web', query=request.params, keep_hash=True)

Now, here i define how to override existing controller...
 - Here, my class name Website, and in parameter i pass path of controller which i want to inherit, so here "Home" class which is in addons/web/controllers/main.py so in path i pass : openerp.addons.web.controllers.main.Home.

 - @http.route : in openerp 8.0 the route system changed.
           '/' : '/' route will match the new index() method in Website.
        'type' : There are different type like http,json...
                 (http : normal http requests by passing, Json : Methods that received JSON can be defined by passing 'json')

class Website(openerp.addons.web.controllers.main.Home):
    @http.route('/', type='http', auth="public", website=True, multilang=True)
    def index(self, **kw):
            main_menu = request.registry['ir.model.data'].get_object(request.cr, request.uid, 'website', 'main_menu')
            first_menu = main_menu.child_id and main_menu.child_id[0]
            # Dont 302 loop on /
            if first_menu and not ((first_menu.url == '/') or first_menu.url.startswith('/#') or first_menu.url.startswith('/?')):
                return request.redirect(first_menu.url)
        return self.page("website.homepage")

Wednesday, 5 March 2014

Change report fonts in Odoo

Change reports fonts in Odoo/OpenERP

Let's change font in Odoo/openerp reports. I mean some time we need to change the report font in our company font. Simple answer go to every report(.rml) and change manually every where.

I have simple way to just replace the font.

Steps to do in simplest way

 - Download Community module from : l10n_cn_fonts
 - Just replace your fonts don't forget to put fonts in l10n_cn_fonts/fonts folder.
 - Replace the font name in the file __init__.py accordingly.
 - Install module

So, now at the time of rendering it will always consider your fonts.