def onchange_dates(self, cr, uid, ids, checkin_date=False, checkout_date=False, duration=False):
# This mathod gives the duration between check in checkout if customer will leave only for some hour it would be considers as
# a whole day. If customer will checkin checkout for more or equal hours , which configured in company as additional hours than
# it would be consider as full day
value = {}
company_obj = self.pool.get('res.company')
configured_addition_hours = 0
company_ids = company_obj.search(cr, uid, [])
if company_ids:
company = company_obj.browse(cr, uid, company_ids[0])
configured_addition_hours = company.additional_hours
if not duration:
duration = 0
if checkin_date and checkout_date:
chkin_dt = datetime.datetime.strptime(checkin_date, '%Y-%m-%d %H:%M:%S')
chkout_dt = datetime.datetime.strptime(checkout_date, '%Y-%m-%d %H:%M:%S')
dur = chkout_dt - chkin_dt
duration = dur.days # here I want to update the time difference betwenn two dates how ?
if configured_addition_hours > 0:
additional_hours = abs((dur.seconds / 60) / 60)
if additional_hours >= configured_addition_hours:
duration += 1
value.update({'value':{'duration':duration}}) #Now currenly its update days ,i need the time between two dates
Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:
- 客戶關係
- e-Commerce
- 會計
- 庫存
- PoS
- 專案管理
- MRP
此問題已被標幟
You've to use timedelta from datetime package, please see: timedelta documentation
you can import it in python using:
from dateitime import timedelta
then use timedelta in your code to calculate the difference you're interested in.
where I can use time delta If I use timedelta then is it possible to acess this way duration = dur.time
the equivalent code of your code using timedelta will be something like:
if not duration:
duration = timedelta(0)
if checkin_date and checkout_date:
chkin_dt = datetime.datetime.strptime(checkin_date, '%Y-%m-%d %H:%M:%S')
chkout_dt = datetime.datetime.strptime(checkout_date, '%Y-%m-%d %H:%M:%S')
dur = chkout_dt - chkin_dt # dur is timedelta object as a result of "chkout_dt - chkin_dt"
duration = dur
if configured_addition_hours > 0:
additional_hours = abs((dur.seconds / 60) / 60)
if additional_hours >= configured_addition_hours:
duration += timedelta(days=1)
value.update({'value':{'duration':duration.days}})
actually dur is timedelta object, as you've got it by subtraction of one date from another(dur = chkout_dt - chkin_dt) and "duration" seems to be extra. you'll need adapt it to your application logic.in reply to your comment in your code
duration = dur.days # here I want to update the time difference betwenn two dates how ?- the variable 'dur' is a timedelta object, which is actually represents the time difference betwen two dates... so you've just to use it according your application logic.
Thax Temur for your valuabel replay and response..