Thursday, 13 October 2016

Odoo(OpenERP) : Menu badge count


Steps to add Menu badge as shown in 'Next Activities' menu in Sales Module:
1) Inherit ('ir.needaction_mixin) class in your  the class as shown below.

          class YourClass(models.Model):
                   _name = "your.class"
                   _inherit = ['ir.needaction_mixin']

2) Add '_needaction_domain_get' function in your class as shown below code.Here we have to give domain filter based on which the count is calculatated and displayed in the menu.

         @api.model
         def _needaction_domain_get(self):
                  return [('state', '=', 'on_going')]



Monday, 3 October 2016

Odoo Python Tips : change unicode list into normat list format


The following code is useful to change the unicode string list format into normal list
-------------
employee_list = [int(i) for i in self.employee_list.strip('[]').split(',')]
-------------

Odoo Python Date Range : Find out the date range as list using two date.


Step 1 : Create a file as validations.py and put the below code
-------------------
def get_date_range(date_from, date_to):
    date_from_year = date_from[:4]
    date_from_month = date_from[5:7]
    date_from_date = date_from[8:11]
   
    date_to_year = date_to[:4]
    date_to_month = date_to[5:7]
    date_to_date = date_to[8:11]
   
    d1 = date(int(date_from_year), int(date_from_month), int(date_from_date))
    d2 = date(int(date_to_year), int(date_to_month), int(date_to_date))
    delta = d2 - d1
    date_range_list = []
    for i in range(delta.days + 1):
        r_date = d1 + td(days=i)
        date_range_list.append(str(r_date))
    return date_range_list
--------------------

Step 2 : Use the following code in wherever you want to find out the date range and to return in list format.
--------------------
date_list = validations.get_date_range(date_from, date_to)
--------------------

FUI:
you can separate the date as year, month, date using below code too.
date_from_year = date_from[:4]
    date_from_month = date_from[5:7]
    date_from_date = date_from[8:11]

Thursday, 28 July 2016

Odoo/OpenERP: Set 'Multi Companies' and 'Multi Currencies' by default for admin and other users.

Using XML :
<!-- Set Multi Companies and Multi Currencies by default for admin user
Note : This XMl code will be useful for only admin user alone.If you want to set it for all the users you can use py below code. -->
 <record model="res.groups" id="base.group_multi_company">
            <field name="name">Multi Companies</field>
            <field name="category_id" ref="base.module_category_extra" />
            <field name="implied_ids" eval="[(4, ref('base.group_light_multi_company'))]"/>
            <field name="users" eval="[(4, ref('base.user_root'))]"/>
        </record>
        <record model="res.groups" id="base.group_multi_currency">
            <field name="name">Multi Currencies</field>
            <field name="category_id" ref="base.module_category_extra" />
            <field name="implied_ids" eval="[(4, ref('base.group_light_multi_company'))]"/>
            <field name="users" eval="[(4, ref('base.user_root'))]"/>
        </record>
<!-- End -->

Using PY
class ResUsers(models.Model):
    _inherit = "res.users"

   groups_id = fields.Many2many('res.groups', 'res_groups_users_rel', 'uid', 'gid', 'Groups', default=_get_group)
    # Purpose : Set 'Multi Companies' and 'Multi Currencies' by default for res user - Added by Nivas
    @api.model
    def _get_group(self):
        dataobj = self.pool['ir.model.data']
        result = []
        try:
            dummy,group_id = dataobj.get_object_reference(self._cr, self._uid, 'base', 'group_user')
            result.append(group_id)
            # Purpose : Set 'Multi Companies' group as default
            dummy,group_id = dataobj.get_object_reference(self._cr, SUPERUSER_ID, 'base', 'group_multi_company')
            result.append(group_id)
            # Purpose : Set 'Multi Currencies' group as default
            dummy,group_id = dataobj.get_object_reference(self._cr, SUPERUSER_ID, 'base', 'group_multi_currency')
            result.append(group_id)
            # End
            dummy,group_id = dataobj.get_object_reference(self._cr, SUPERUSER_ID, 'base', 'group_partner_manager')
            result.append(group_id)
        except ValueError:
            # If these groups does not exists anymore
            pass
        return result


In Old API(odoo 8 and 7 you can use the following code)

class res_users(osv.osv):
    _inherit = "res.users"

    def _get_group(self,cr, uid, context=None):
        dataobj = self.pool.get('ir.model.data')
        result = []
        try:
            dummy,group_id = dataobj.get_object_reference(cr, SUPERUSER_ID, 'base', 'group_user')
            result.append(group_id)
            # Purpose : Set 'Multi Companies' group as default
            dummy,group_id = dataobj.get_object_reference(cr, SUPERUSER_ID, 'base', 'group_multi_company')
            result.append(group_id)
            # Purpose : Set 'Multi Currencies' group as default
            dummy,group_id = dataobj.get_object_reference(cr, SUPERUSER_ID, 'base', 'group_multi_currency')
            result.append(group_id)
            # End
            dummy,group_id = dataobj.get_object_reference(cr, SUPERUSER_ID, 'base', 'group_partner_manager')
            result.append(group_id)
        except ValueError:
            # If these groups does not exists anymore
            pass
        return result

    _defaults = {    
        'groups_id': _get_group,
    }

Odoo/OpenERP: Set 'Multi Companies' and 'Multi Currencies' by default for admin and other users.

Using XML :
<!-- Set Multi Companies and Multi Currencies by default for admin user -->
 <record model="res.groups" id="base.group_multi_company">
            <field name="name">Multi Companies</field>
            <field name="category_id" ref="base.module_category_extra" />
            <field name="implied_ids" eval="[(4, ref('base.group_light_multi_company'))]"/>
            <field name="users" eval="[(4, ref('base.user_root'))]"/>
        </record>
        <record model="res.groups" id="base.group_multi_currency">
            <field name="name">Multi Currencies</field>
            <field name="category_id" ref="base.module_category_extra" />
            <field name="implied_ids" eval="[(4, ref('base.group_light_multi_company'))]"/>
            <field name="users" eval="[(4, ref('base.user_root'))]"/>
        </record>
<!-- End -->

Using PY
class ResUsers(models.Model):
    _inherit = "res.users"

   groups_id = fields.Many2many('res.groups', 'res_groups_users_rel', 'uid', 'gid', 'Groups', default=_get_group)
    # Purpose : Set 'Multi Companies' and 'Multi Currencies' by default for res user - Added by Nivas
    @api.model
    def _get_group(self):
        dataobj = self.pool['ir.model.data']
        result = []
        try:
            dummy,group_id = dataobj.get_object_reference(self._cr, self._uid, 'base', 'group_user')
            result.append(group_id)
            # Purpose : Set 'Multi Companies' group as default
            dummy,group_id = dataobj.get_object_reference(self._cr, SUPERUSER_ID, 'base', 'group_multi_company')
            result.append(group_id)
            # Purpose : Set 'Multi Currencies' group as default
            dummy,group_id = dataobj.get_object_reference(self._cr, SUPERUSER_ID, 'base', 'group_multi_currency')
            result.append(group_id)
            # End
            dummy,group_id = dataobj.get_object_reference(self._cr, SUPERUSER_ID, 'base', 'group_partner_manager')
            result.append(group_id)
        except ValueError:
            # If these groups does not exists anymore
            pass
        return result


In Old API(odoo 8 and 7 you can use the following code)

class res_users(osv.osv):
    _inherit = "res.users"

    def _get_group(self,cr, uid, context=None):
        dataobj = self.pool.get('ir.model.data')
        result = []
        try:
            dummy,group_id = dataobj.get_object_reference(cr, SUPERUSER_ID, 'base', 'group_user')
            result.append(group_id)
            # Purpose : Set 'Multi Companies' group as default
            dummy,group_id = dataobj.get_object_reference(cr, SUPERUSER_ID, 'base', 'group_multi_company')
            result.append(group_id)
            # Purpose : Set 'Multi Currencies' group as default
            dummy,group_id = dataobj.get_object_reference(cr, SUPERUSER_ID, 'base', 'group_multi_currency')
            result.append(group_id)
            # End
            dummy,group_id = dataobj.get_object_reference(cr, SUPERUSER_ID, 'base', 'group_partner_manager')
            result.append(group_id)
        except ValueError:
            # If these groups does not exists anymore
            pass
        return result
 
    _defaults = {      
        'groups_id': _get_group,
    }

Tuesday, 12 July 2016

Odoo Menu : Hiding ,Deleting, replacing name or showing the menu only in debug mode


To delete the menu
<delete model="ir.ui.menu" id="mail.menu_contacts"/>

To replace name of menu id
<record model="ir.ui.menu" id="hr.menu_hr_root">
<field name="name">HR</field>      
</record>

To show the menu only in debug mode by using 'base.group_no_one' 
<record model="ir.ui.menu" id="hr.menu_hr_root">
<field name="name">Employees</field>
<field eval="[(6,0,[ref('base.group_no_one')])]" name="groups_id"/>
</record>
Note : 
  eval="[(6,0,[ref('base.group_no_one')])]"

It will replace all existing group ids with 'base.group_no_one' id in applied in 'hr.menu_hr_root' menu id .

<record model="ir.ui.menu" id="hr.menu_hr_root">
<field name="groups_id" eval="[(4,ref('base.group_no_one'))]"/>
</record>
   eval="[(4,ref('base.group_no_one'))]"
It will update given group id with existing group ids applied in 'hr.menu_hr_root' menu.



Monday, 27 June 2016

Odoo 9 : Adding background image for login screen

1) create a new xml file as 'webclient_templates.xml' an add below code.
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
 
        <template id="login_layout_inherited_your_module" inherit_id="web.login_layout">
            <xpath expr="." position="inside">
                <link rel="stylesheet" href="/your_module/static/src/css/your_css_file.css"/>
            </xpath>
        </template>

        </data>
</openerp>

2) Create a new .css file your  module and add below code.

.container {
background-image: url('/your_module/static/src/img/your_image.jpg');
}