Example #1
0
    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
Example #3
0
    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})
Example #4
0
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
Example #5
0
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)