Friday, November 20, 2015

Odoo management in Virtual Box with Ubuntu

Hello all,

Recently I installed 14.04 ubuntu in Virtual Box and the way, I did it, I am sharing few tips, it can make it easier for you.

In General:
1. Download 14.04 iso file from Ubuntu website. You can get it easily.
2. Install Virtual Box machine.
3. Create a new OS inside Virtual Box and select a correct version of ubuntu.
4. Configure Base Memory(RAM) and Create a virtual hard drive with VDI format.
5. While creating virtual hard drive, select a location where ubuntu should be install and select a hard disk space for it. Finish the process.
6. On main screen of Virtual Box, new OS is available now. Right click and go to "Settings"
7. In System tab, Un-tick the "Floppy".
8. In Storage tab, Select empty "Controller IDE" and select your iso image from system.
9. In Network tab, In Adapter 1 tab, select "Bridged Adapter". 
10. Save the configuration of point 7,8,9. Start your OS from VB.
11. It installs Ubuntu from the iso image, that you select.
12. After installation, it may be possible that you may not see VB window in full size and you face issues working with small window size in VB.
13. Go to terminal in Ubuntu from VB and execute this command:
sudo apt-get install dkms build-essential linux-headers-$(uname -r)
14. Go to Devices menu in VB and click on "insert guest additions". It will mount the additions in the virtual CD. 
15. Restart the Ubuntu and it will appear in full size.

In terms of odoo:
1. Install odoo9, say for ex, as per your need. Also install python packages and postgresql. You can get lots of references from websites about how to install odoo9.
2. After installation of odoo9, make sure that you can connect to your database. After it, drop the database.

Lets say, you will be working on number of projects in different versions of odoo. 2 Projects in odoo9, 1 in odoo8 like that so VB allows you to create a Clone of your OS.  By making a clone of your OS, it will create OS and your all packages installation stays in the new OS from old OS. You do not need to install it again. That's why I ask to drop the database.

So if you need to work on a project with odoo9, 
1. Right click on your OS in virtual box and click on "Clone" option.
2. Fill up the details with your project name and it will create a clone after 5-10 mins.
3. You can use this OS for your project work and keep the old one as it is in case if you need to use it to check something.
4. You can follow the same steps for odoo8.

I did not go much technically in this post, just try to make it easier for you to configure and work on Odoo with different versions and projects. It may help you out.

You can install and use Kitty to access Virtual box OS from command line only to access only Odoo database. You can install Winscp to move files from Windows to Virtual box OS. 

Friday, October 30, 2015

Set Decimal Accuracy in Odoo


Odoo provides you a facility to set Decimal accuracy for floating point fields. To set a value like 150.345 or 876.342 instead of 150.30 or 876.30, Odoo Provides you a facility to set Decimal accuracy by just configuring it. To set it, go to the Settings → Technical → Database Structure → Decimal Accuracy


You can see the list of records inside it with some ‘Digits’ value. They are created from Odoo code. You can create a new record inside it but it will not be effective until it has been set from Odoo code but you can update the existing Digits value as per our need. If you need to set digits only for Accounting purpose, you will have to set accuracy in below terms, as they are related to accounting:

To update the Unit Price – Set digit in 'Product Price' record.
To update the Discount - Set digit in ‘Discount’ record.
To update the Untaxed-Taxed-Total - Set digit in ‘Account’ record.
To update the Product Qty - Set digit in ‘Product Unit of Measure’ record.

You can see Invoices and Accounting Entries with 2 decimal points as per first screenshot as below:







So, if you want to set accounting for 3 digits, you have to set decimal accuracy for all of above terms and set it as 3 as shown below:




Once you set new decimal accuracy, Reload Odoo page. Now it will reflect in the Accounting terms.




So, by this way, you can configure decimal accuracy in odoo as per your need.

Tuesday, July 21, 2015

Odoo v8 New API

Hello all,

Its been long time of my presence here. Today, I would like to share few things about Odoo v8 new API which can help us to develop modules easily.

With new API, functions can be execute on a recordset, We consider 'self' as a recordset.

class test_test(models.model):
    _name = 'test.test'
    def method_test(self):

Recordset Operations:

filtered():
records.filtered(lambda l: l.account_id == self.account_id)
sorted():
records.sorted(key=lambda t: t.date)
mapped():
records.mapped('product_id.type') 

Environment variables: 
Remember: cr, uid, context in old API. In new API, we can use it with recordsets, as below:

records.env --> returns object name
records.env.cr --> returns cursor object
records.env.user --> returns logged user id

Environment alternatives:
records.env['res.partner'].sudo().create({'name': 'Priyesh'})
records.env['res.partner'].with_context(partner_id=so.partner_id).create(vals)

ORM Methods:
Consider 'self' as a recordset as below:

self.create({'name': 'Priyesh'})
self.write({'name': 'Priyesh'})
self.browse([1, 2, 3, 4, 5])
self.unlink()

Model definition with old API:
class test(osv.osv):
Model definition with new API:
class test(models.model):
Field definition with old API:
'name': fields.char('Description', size=64, select=True, required=True)
Field definition with new API:
name = fields.Char(string='Reference/Description', index=True, required=True)
name = fields.char(string='Name', default=default_name) --> To compute default value
name = fields.char(string='Name', compute='_compute_name') --> Function field

To allow searching on computed field, set 'search' parameter as below:
name = fields.char(string='Name', compute='_compute_name', search='_search_name')
To allow setting value of computed field, set 'inverse' parameter as below:
name = fields.char(string='Name', compute='_compute_name', inverse='_set_name') 

More coming soon.....