Odoo Help


how to add days to current_date

willie ho
on 10/12/15, 5:41 AM 1,170 views

im using current_date to set my color of a tree

how can set something like red:date  > current_date+7?



| 4 3 5
Hyderabad, India

On 10/12/15, 8:51 AM

Hi willie,

You can do this by overriding the fields_view_get() of the object where you want to implement this coloring functionality:
what you can do is:

  1. convert your architecture returned from calling super() from xml to dictionary :
    doc = etree.fromstring(res['arch'].encode('utf8'))

  2. check if 'view_type=="tree"':

  3. then get new_date(date incremented from your current date)  
    new_due_date = datetime.now() + timedelta(days = NO_OF_DAYS) 

  4. create you parameter:
    new_parameter = "yellow:date >= '%s'"%new_due_date

  5. set that parameter to color attribute of tree:
    doc.set('colors', new_parameter)

  6. Finally, again convert that dictionary to xml
    res['arch'] = etree.tostring(doc, pretty_print=True)

  7. return res


Akhil P Sivan

--Akhil P Sivan--
Akhil P Sivan
| 5 3 7
Kochi, India
--Akhil P Sivan--

Interested in exploring Odoo both technically & functionality wise.

email-id : akhilpsivan01@gmail.com

Akhil P Sivan
On 10/12/15, 6:36 AM

There is no way to give it directly I think. You can do something with following python code:

import datetime
current_date = datetime.datetime.now().date()
new_date = current_date + datetime.timedelta(days=7)

Using that you can do it in 2 ways I think:

1. One is by overriding the fields_view_get(), which is triggered automatically on opening any views. You can refer "account_invoice.py", to understand that function and using the python code you can alter the tree view based on condition.

2. Second one to keep a boolean compute field and in the function you can check if date is greater than current date + 7. If yes, you can set it true. Call that field in tree view (hidden). For eg:

in your .py file:

import datetime
import dateutil.parser
from openerp import models, fields, api
class sale_order(models.Model):
_inherit = 'sale.order'

check_date = fields.Boolean(compute='_check_the_date')

def _check_the_date(self):
cur_date = datetime.datetime.now().date()
new_date = cur_date + datetime.timedelta(days=7)
for rec in self:
order_date = dateutil.parser.parse(rec.date_order).date()
if order_date > new_date:
rec.check_date = True

in your xml file:

<record id="view_order_tree_inherited" model="ir.ui.view">
<field name="name">sale.order.tree.inherited</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_tree"/>
<field name="arch" type="xml">
<tree position="attributes">
<attribute name="colors">green:check_date==True;grey:state=='cancel';blue:state in ('waiting_date','manual');red:state in ('invoice_except','shipping_except')</attribute>
<field name="state" position="after">
<field name="check_date" invisible="1"/>

Hope this helps!

Your Answer

Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!

About This Community

This platform is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.


Odoo Training Center

Access to our E-learning platform and experience all Odoo Apps through learning videos, exercises and Quizz.

Test it now

Question tools

1 follower(s)


Asked: 10/12/15, 5:41 AM
Seen: 1170 times
Last updated: 10/12/15, 8:51 AM