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 "/>
Cree una cuenta para poder utilizar funciones exclusivas e interactuar con la comunidad.
RegistrarsePublicaciones relacionadas | Respuestas | Vistas | Actividad | |
---|---|---|---|---|
|
1
nov 22
|
2609 | ||
|
1
ago 15
|
4911 | ||
Year only needed - how to implement?
Resuelto
|
|
2
mar 15
|
5277 | |
|
4
jul 24
|
31489 | ||
|
2
mar 15
|
4913 |