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:
- CRM
- e-Commerce
- Contabilidad
- Inventario
- PoS
- Proyectos
- MRP
Se marcó esta pregunta
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..
¿Le interesa esta conversación? ¡Participe en ella!
Cree una cuenta para poder utilizar funciones exclusivas e interactuar con la comunidad.
Registrarse