I need to calculate the difference between two dates :
py :
start_date = field.Date()
end_date = field.Date()
xml :
<field name="start_date"/>
<field name="end_date"/>
Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:
I need to calculate the difference between two dates :
py :
start_date = field.Date()
end_date = field.Date()
xml :
<field name="start_date"/>
<field name="end_date"/>
Hello Yassin,
Try something like this from your python file.
You can call the function in different ways.
Check an example from Button Click.
from datetime import datetime |
Thanks & Regards
Avinash N K
hi Avinash, thanks for your answer
I try to call the function in a compute filds and display the result but it doesn't work this is my code, it dispays 0 :
...
class EcoStage(models.Model):
name =eco.stage
start_date = fields.Date()
end_date = fields.Date()
duree_stage = fields.Integer(string="duree stage", compute='difference_date', store=True)
@api.multi
def difference_date(self):
fmt = '%Y-%m-%d'
start_date = self.start_date
end_date = self.end_date
d1 = datetime.strptime(start_date, fmt)
d2 = datetime.strptime(end_date, fmt)
date_difference = d2 - d1
in xml :
<fields name="duree_stage "/>
Add the 2 fields in the dependency.
---> @api.depends('start_date', 'end_date')
Also d2-d1 not gives an integer value.
So do like this. (d2 - d1).days
And assign the difference value in the computed field.
Like this. self.duree_stage = (d2 - d1).days
thanks a lot Avinash
It can be done easily in odoo 14:
start_date = fields.Date(string="Start date")
end_date = fields.Date(string="End date")
date_diff = fields.Char("Date difference")@api.constrains('start_date', 'end_date', 'date_diff')
def _date_difference(self):
for record in self:
if record.start_date > record.end_date:
raise ValidationError('Start date should not greater than end date.')
else:
record.date_diff = (record.end_date - record.start_date).days
finally it works
thanks a lot Avinash you save my life
this is the entier final code :
in .py:
...
class EcoStage(models.Model):
_name ='eco.stage'
start_date = fields.Date()
end_date = fields.Date()
duree_stage = fields.Integer(string="duree stage", compute='difference_date', store=True)
@api.multi
@api.depends(' start_date ',' end_date ')
def difference_date(self):
fmt = '%Y-%m-%d'
start_date = self.start_date
end_date = self.end_date
d1 = datetime.strptime(start_date, fmt)
d2 = datetime.strptime(end_date, fmt)
if d2 >d1 :
self. duree_stage = (d2 - d1).days
else :
raise ValueError('end date should be superior than start day')
...
in xml :
<fields name="duree_stage "/>
Create an account today to enjoy exclusive features and engage with our awesome community!
Sign upRelated Posts | Replies | Views | Activity | |
---|---|---|---|---|
|
1
Nov 22
|
1922 | ||
|
1
Aug 15
|
4437 | ||
|
2
Mar 15
|
5277 | ||
|
4
Jul 24
|
30518 | ||
|
2
Mar 15
|
4422 |