im using current_date to set my color of a tree
how can set something like red:date > current_date+7?
Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:
im using current_date to set my color of a tree
how can set something like red:date > current_date+7?
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:
convert your architecture returned from calling super() from xml to dictionary :
doc = etree.fromstring(res['arch'].encode('utf8'))
check if 'view_type=="tree"':
then get new_date(date incremented from your current date)
new_due_date = datetime.now() + timedelta(days = NO_OF_DAYS)
create you parameter:
new_parameter = "yellow:date >= '%s'"%new_due_date
set that parameter to color attribute of tree:
doc.set('colors', new_parameter)
Finally, again convert that dictionary to xml
res['arch'] = etree.tostring(doc, pretty_print=True)
return res
It's working, Thank you!
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')
@api.depends('date_order')
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>
</tree>
<field name="state" position="after">
<field name="check_date" invisible="1"/>
</field>
</field>
</record>
Hope this helps!
It's working, Thank you!
Create an account today to enjoy exclusive features and engage with our awesome community!
Sign up
1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.