def create(self, request, *args, **kwargs): # maickel dados = request.data idPerfilJornada = int(dados['perfil']['id']) tz = py_timezone('America/Sao_Paulo') idTurno = int(dados['turnoPonto']['turno']['id']) idPontoAlocacao = int(dados['turnoPonto']['pontoAlocacao']['id']) try: escala = Escala() perfil = PerfilJornada.objects.get(id=idPerfilJornada) turnoPonto = Turno_PontoAlocacao.objects.filter( turno=idTurno, pontoAlocacao=idPontoAlocacao).get() with transaction.atomic(): escala.perfil = perfil escala.turnoPonto = turnoPonto escala.dataInicio = tz.localize( datetime.datetime.strptime(dados['dataInicio'][:19], '%Y-%m-%dT%H:%M:%S')) escala.dataFim = tz.localize( datetime.datetime.strptime(dados['dataFim'][:19], '%Y-%m-%dT%H:%M:%S')) if perfil.duplicar: escala.dataDuplicacao = escala.dataFim + datetime.timedelta( hours=-perfil.horasAntecedenciaDuplicacao) else: escala.dataDuplicacao = datetime.datetime.now(pytz.utc) escala.save() timezone.activate('America/Sao_Paulo') for colaborador in dados['escalaColaboradorList']: idColaborador = int(colaborador['colaborador']['id']) c = Colaborador.objects.get(pk=idColaborador) escalaColaborador = EscalaColaborador() escalaColaborador.escala = escala escalaColaborador.colaborador = c print("COLABORADOR DATA DE INICIO") print(colaborador['dataInicio']) escalaColaborador.dataInicio = tz.localize( datetime.datetime.strptime( colaborador['dataInicio'][:19], '%Y-%m-%dT%H:%M:%S')) escalaColaborador.dataFim = tz.localize( datetime.datetime.strptime(colaborador['dataFim'][:19], '%Y-%m-%dT%H:%M:%S')) print(escalaColaborador.dataInicio) escalaColaborador.save() serializer = EscalaSerializer(escala) return Response(serializer.data) except: return Response(sys.exc_info()[0], 400)
def entity_outside_time_window(value): hour_before = config.time_window['start_time_hour'] minutes_before = config.time_window['start_time_minutes'] hour_after = config.time_window['end_time_hour'] minutes_after = config.time_window['end_time_minutes'] # time window is in Europe/Amsterdam time time_before = dt_time(hour_before, minutes_before, tzinfo=py_timezone('Europe/Amsterdam')) time_after = dt_time(hour_after, minutes_after, tzinfo=py_timezone('Europe/Amsterdam')) # Convert started_at and ended_at of trip to Europe/Amsterdam timezone started_at = value.astimezone(py_timezone('Europe/Amsterdam')).time() if started_at < time_before or started_at > time_after: return True return False
def horasdesdeultimaescala(self, request): tz = py_timezone('America/Sao_Paulo') idcolaborador = int( self.request.query_params.get('idcolaborador', None)) novahora = self.request.query_params.get('data', None) novahora = tz.localize( datetime.datetime.strptime(novahora, '%Y-%m-%d %H:%M:%S')) ultima = EscalaColaborador.objects.filter( colaborador=idcolaborador, dataFim__isnull=False, status__in=[0, 1]).latest('dataFim') horasDescanso = novahora - ultima.dataFim horas = (horasDescanso.days * 24) + (horasDescanso.seconds // 3600) return Response({'horasDescanso': horas})
def build_start_end_time(date_string, duration, timezone_str): """ Build a start and end time based on the values from the configuration, and the arguments provided. :param str date_string: string containing the date from the record :param int duration: number of seconds between start and end time :param str timezone_str: string containing the timezone name :return tuple containing the start datetime and end datetime """ configuration_start_time = config.get_configuration().get('timeentries', {}).get('default_start_time', '08:00:00') configuration_start_time = [int(a) for a in configuration_start_time.split(':')] date_value = datetime.datetime.strptime(date_string, '%Y-%m-%d') time_value = datetime.time(configuration_start_time[0], configuration_start_time[1], configuration_start_time[2]) start_time = datetime.datetime.combine(date_value.date(), time_value) timezone = py_timezone(timezone_str) start_time = timezone.localize(start_time) end_time = start_time + datetime.timedelta(seconds=duration) return start_time, end_time
def imprimirEscala(request): timezone.activate('America/Sao_Paulo') tz = py_timezone('America/Sao_Paulo') dataInicial = request.GET.get('dataInicial', None) dataFinal = request.GET.get('dataFinal', None) if dataInicial and dataFinal: timezone.activate('America/Sao_Paulo') dataInicial = tz.localize(dt.datetime.strptime(dataInicial, '%Y-%m-%d')) dataFinal = tz.localize(dt.datetime.strptime(dataFinal, '%Y-%m-%d')) else: dataInicial = dt.datetime.now() dataFinal = dataInicial + dt.timedelta(days=7) dInicial = dataInicial + dt.timedelta(hours=0) dFinal = dataFinal + dt.timedelta(hours=23) tipo = request.GET.get('tipo', None) empresa = request.GET.get('empresa', None) colaborador = request.GET.get('colaborador', None) cliente = request.GET.get('cliente', None) ponto = request.GET.get('pontoalocacao', None) escalas = EscalaColaborador.objects.filter( dataInicio__gt=dInicial.astimezone(tz), dataInicio__lt=dFinal.astimezone(tz)) if tipo == 'empresa': #pega so os da empersa selecioada empresa = int(empresa) escalas = escalas = escalas.filter(colaborador__empresa=empresa) elif tipo == 'colaborador': #pega so os da empersa selecioada colaborador = int(colaborador) escalas = escalas.filter(colaborador=colaborador) elif tipo == 'cliente': cliente = int(cliente) escalas = escalas.filter( escala__turnoPonto__pontoAlocacao__cliente=cliente) elif tipo == 'ponto': print(ponto) ponto = int(ponto) escalas = escalas.filter(escala__turnoPonto__pontoAlocacao=ponto) escalas = escalas.filter(status__in=[0, 1]) params = { 'datainicial': dataInicial, 'datafinal': dataFinal, 'agora': dt.datetime.now() } datas = [] dia = dataInicial while (dia <= dataFinal): print(dia) amanha = dia + dt.timedelta(days=1) datas.append({ 'data': dia, 'escalas': escalas.filter(dataInicio__gte=dia, dataInicio__lt=amanha).order_by('dataInicio').all() }) dia = amanha print(datas) params['datas'] = datas if tipo == 'empresa': empresa = Empresa.objects.get(pk=empresa) params['empresa'] = empresa return render(request, 'imprimirescalaempresa.html', params) else: if (cliente): cliente = Cliente.objects.get(pk=cliente) else: cliente = PontoAlocacao.objects.get(pk=ponto).cliente params['cliente'] = cliente return render(request, 'imprimirescalacliente.html', params)