Skip to Content
Menu
This question has been flagged
1 Reply
3220 Views

Hello Team, 

I have calculated the date difference here is my .py code

@api.onchange('from_date', 'to_date')
def _calc_days(self):
if self.to_date and self.from_date:
self.duration = datetime.strptime(str(self.to_date), "%Y-%m-%d %H:%M:%S") - datetime.strptime(
str(self.from_date), "%Y-%m-%d %H:%M:%S")
from_date = fields.Datetime(string='Start Date', required=True)
to_date = fields.Datetime(string='End Date', required=True)

duration = fields.Char(
'Number of Days',
readonly=True,
compute=_calc_days
)

I Want to compute price computation the other field is in float, 

total_per_diem_cost = fields.Float(
string='Total Per Diem Cost',
required=True,
compute="total_diem_compute",
)
Computational code is here

@api.depends('staff_per_diem', 'duration')
def total_diem_compute(self):
for rec in self:
rec.total_per_diem_cost = rec.staff_per_diem * rec.duration
Then the challenge comes, how can I change the duration field which is in char form to float?? kindly assist please,

Regards

Loomoni

Avatar
Discard
Best Answer

If you are using python 3 you can try the below:

from datetime import datetime,timedelta
a = datetime(2011,11,24,0,0,0)
b = datetime(2011,11,17,23,59,59) //python 3 this will return float number
print((a-b)/ timedelta(days=1)) //python 2 use total_seconds()
print((a-b).total_seconds() / timedelta (days=1).total_seconds())

6.000011574074074

Avatar
Discard
Author

Thank you CorTex for the solution I tried to implement the solution above but am still getting the below error, I am using Odoo 12

TypeError: unsupported operand type(s) for /: 'int' and 'datetime.timedelta'

This is the way I wrote my code

duration_float = fields.Float(string="number of days", compute="number_days")

@api.depends('from_date', 'to_date')
def number_days(self):
self.duration_float = ((self.from_date - self.to_date) / timedelta(days=1))

This error happen because one of the date fields is empty so please use if condition
as below:

@api.depends('from_date', 'to_date')
def number_days(self):
for rec in self:
if rec.from_date and rec.to_date:
rec.duration_float = ((rec.from_date - rec.to_date) / timedelta(days=1))

Wao! this worked 100% sure, Thank you so much guys, I really appreciate 

On Mon, Nov 1, 2021 at 6:30 PM CorTex IT Solutions Ltd <wmohsen@cortexsolutions.net> wrote:

This error happen because one of the date fields is empty so please use if condition
as below:

@api.depends('from_date', 'to_date')
def number_days(self):
for rec in self:
if rec.from_date and rec.to_date:
rec.duration_float = ((rec.from_date - rec.to_date) / timedelta(days=1))

Sent by Odoo S.A. using Odoo.