Advertisement
mariomolinos

Forecasting Time Off

Jun 29th, 2021
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.86 KB | None | 0 0
  1. start_date = datetime.datetime(2021, 1, 1,00) #Establecemos una fecha inicial
  2.  
  3. allRecords = env['hr.leave'].search(['&',('request_date_from','>=',start_date),('state',"in",['confirm', 'validate1', 'validate'])]) #Todos los registros de leaves Confirmados, aprobados o validados(no en draft o refused) con la fecha inicial igual o mayor que 01/01/2021
  4.  
  5.  
  6. #DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
  7. #BORRA LOS FORECAST SHIFTS QUE NO TENGAN TIME OFF ASOCIADO.
  8. forecasts = env['planning.slot'].search(['&',('project_id',"=",1079),('start_datetime','>=',start_date)]) #todas las planning shifts con el project_id = 1079(proyecto de vacaciones) y fecha inicial mayor o igual que 01/01/2021
  9. for f in forecasts: #para cada planning shift entre todas las que cumplan la condición de la linea anterior:
  10.   if f.x_studio_time_off not in allRecords: #si el campo x_studio_time_off no existe entre todos los registros que cumplan la condición de la linea 12:
  11.     f.unlink() #borrar
  12.  
  13.  
  14.  
  15. for record in allRecords: #para cada registro entre todos los registros que cumplan la condición de la linea 12:
  16.   start = record.request_date_from       #Obtengo el campo date start de Time Off
  17.   #start = datetime.datetime.strptime(str(start), DATETIME_FORMAT) + datetime.timedelta(hours=7)
  18.   start = datetime.datetime(start.year, start.month, start.day,7) #Doy formato al campo start, y le asigno 7 a las horas
  19.   end = record.request_date_to           #Obtengo el campo date end de Time Off
  20.   #end = datetime.datetime.strptime(str(end), DATETIME_FORMAT) + datetime.timedelta(hours=17)
  21.   end = datetime.datetime(end.year, end.month, end.day,17) #Doy formato al campo end, y le asigno 17 a las horas
  22.   employee = record.employee_id.id       #Obtengo el campo Employee de Time Off
  23.  
  24. #ACTUALIZAR FORECAST SHIFTS EXISTENTES
  25.   if record.x_studio_planning_shift: #si el campo Plannig Shift existe:
  26.     shift = record.x_studio_planning_shift #Obtengo el campo Planning Shift de Time Off
  27.     forecast = env['planning.slot'].search([("id","=",shift.id)]) #todas las planning shift en las que id es igual al campo x_studio_planning_shift de los time off.
  28.     if forecast: #si existe una planning shift con la condición de la linea 34:
  29.       forecast.write({'employee_id': employee,'project_id':1079, 'task_id':36181, 'start_datetime':start, 'end_datetime':end, 'x_studio_time_off':record.id}) #Modifica la planning shift con los siguientes datos.
  30. #CREA FORECAST SHIFTS NUEVAS
  31.   else: #en otro caso:
  32.     forecast = env['planning.slot'].create({'employee_id': employee,'project_id':1079, 'task_id':36181, 'start_datetime':start, 'end_datetime':end, 'x_studio_time_off':record.id}) #Crea una nueva planning shift con los siguientes datos.
  33.     if forecast: #una vez creado:
  34.       record.write({'x_studio_planning_shift':forecast.id}) #asigna al campo de los time off x_studio_planning_shift el valor del id de la planning shift creada
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement