Friday, 13 September 2013

Only Tax invoice with OpenERP

Today , concern about how to create any invoice with only tax amount.

In real business sometimes its needed to create invoice where there is no any products but only vat or any tax.

Ex. Suppose in shipping company which contain an invoice line relating to import VAT. That means that the VAT amount is not a fixed percentage of the invoice.

So, how we can enter supplier invoice ?

Here are some steps that may be useful to you.

1. Set up Tax through(Accounting > Configuration > Tax).
    And in it just set tax type to "Python code"
    And set as follow(in result just assign price_unit direct no need to multiply).
Python Code
# price_unit
# product: product.product object or None
# partner: res.partner object or None

result = price_unit
Python Code (reverse)
# price_unit
# product: product.product object or False

result = price_unit
And just tick "Tax included in price" (so it consider as the tax already included in price).
2. Now, its time to create a new product named like "VAT" service type.
    Under the Accounting tab in product add supplier Taxes to be the created tax.
3. Now, create a supplier invoice and in it select created product VAT, and you can edit unit price and set it as per requirement. 
  So, you can see the whole amount treat as tax and you can validate invoice.

Why we have to go through this process ?? Because in OpenERP will not allow you to create any invoice without invoice line.

Hope this will help to you.


Tuesday, 10 September 2013

Dynamically view in OpenERP

Creating Views Dynamically in OpenERP

Create dynamic view in OpenERP

Sometimes, its needed to add or remove or edit some properties of fields in dynamic mode. Normally, we can manage view from xml.

So, in OpenERP there is fields_view_get() method in which we can divert view or do some operation.

Another thing some times its needed to redirect depending on state or else.

Example : 

Case 1 : We have two form view parent and child, now from the tree view on the basis of state we have to call either parent or child.
          def fields_view_get(self, cr, uid, view_id=None, view_type=False, context=None, toolbar=False, submenu=False):      
              if view_type == 'form':
                  if state == 'A' :
                      view_id = self.pool.get('ir.ui.view').search(cr,uid,[('name', '=', 'parent.form')])
                  elif state == 'B':
                      view_id = self.pool.get('ir.ui.view').search(cr,uid,[('name', '=', 'child.form')])
              res = super(my_module,self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar, submenu=submenu)

Case 2 : We have to change some fields using fields_view_get()

     def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
        if context is None:
            context = {}
        res = super(account_invoice_line,self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar, submenu=submenu)
        if context.get('type', False):
            doc = etree.XML(res['arch'])
            for node in doc.xpath("//field[@name='product_id']"):
                if context['type'] in ('in_invoice', 'in_refund'):
                    node.set('domain', "[('purchase_ok', '=', True)]")
                    node.set('domain', "[('sale_ok', '=', True)]")
            res['arch'] = etree.tostring(doc)
        return res