Пример #1
0
    def test_entrar_na_fila(self):

        cliente1 = h.get_or_create_cliente('c1')
        scann1 = h.get_or_create_funcionario_scanner('s1')
        h.get_or_create_posto(['l1', 'f1', 'p1'])
        local1 = h.get_or_create_posto(['l1', 'f2', 'p2']).fila.local

        wsf1 = WSFila(cliente1)
        qrcode = wsf1.receive()['data']['qrcode']

        wss1 = WSScanner(scann1)
        wss1.scan(qrcode, local1)

        filas = [model_to_dict(f) for f in local1.filas.all()]
        data = wsf1.receive()['data']

        fila = Fila.objects.get(pk=data['filas'][0]['id'])
        turno = wsf1.entrar_na_fila(fila, data['qrcode'])

        self.assertEqual(wsf1.receive(), {
            "message": "TURNO_ATIVO",
            "data": {
                'turno': turno.to_dict()
            }
        })
Пример #2
0
    def test_media_tempo_espera_por_fila(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        posto2 = h.get_or_create_posto(['l1', 'f2', 'p1'])
        cliente1 = h.get_or_create_cliente('c1')

        # (inicio atendimento, tempo atendimento): Simulamos 2 postos de atendimento
        esperas = [(0, 355), (15, 299), (356, 344), (314, 600), (700, 245),
                   (914, 33)]
        media = sum(map(lambda x: x[1], esperas)) / len(esperas)
        inicio_atendimento = TZ.now()
        fim_atendimento = inicio_atendimento + TD(seconds=950)

        t1 = cliente1.entrar_na_fila(posto2.fila.id, test_mode=True)
        t1.estado = Turno.ATENDIDO
        t1.inicio_espera_date = inicio_atendimento + TD(seconds=10)
        t1.fim_espera_date = t1.inicio_espera_date + TD(seconds=600)
        t1.save()

        for espera in esperas:
            t1 = cliente1.entrar_na_fila(posto1.fila.id, test_mode=True)
            t1.estado = Turno.ATENDIDO
            t1.inicio_espera_date = inicio_atendimento + TD(seconds=espera[0])
            t1.fim_espera_date = t1.inicio_espera_date + TD(seconds=espera[1])
            t1.save()

        t1.fila.refresh_from_db()

        t1.fila.calcular_media_espera(dt_from=inicio_atendimento,
                                      dt_to=fim_atendimento)

        t1.refresh_from_db()

        self.assertEqual(t1.fila.media_espera, media)
Пример #3
0
    def test_cancelar_chamado(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        funcionario1 = h.get_or_create_funcionario_posto('f1')

        wsp1 = WSPosto(funcionario1)

        wsp1.receive()

        wsp1.ocupar_posto(posto1)

        wsp1.receive()

        wsp1.chamar_seguinte()

        wsp1.receive()

        wsp1.cancelar_chamado()

        posto1.refresh_from_db()
        self.assertEqual(wsp1.receive(), {
            "message": "POSTO",
            "data": {
                'posto': posto1.to_dict()
            }
        })

        self.assertIsNone(wsp1.receive())
Пример #4
0
    def test_desocupar(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        funcionario1 = h.get_or_create_funcionario_posto('f1')

        wsp1 = WSPosto(funcionario1)

        wsp1.receive()

        wsp1.ocupar_posto(posto1)

        wsp1.receive()

        wsp1.desocupar_posto()

        wsp1.receive()
        self.assertEqual(
            wsp1.receive(), {
                "message": "LOCAIS_DISPONIVEIS",
                "data": {
                    'locais': [model_to_dict(l) for l in Local.objects.all()]
                }
            })

        self.assertIsNone(wsp1.receive())
Пример #5
0
    def test_em_pausa_apos_atendendo(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        funcionario1 = h.get_or_create_funcionario_posto('f1')
        cliente1 = h.get_or_create_cliente('c1')

        wsp1 = WSPosto(funcionario1)
        wsf1 = WSFila(cliente1)

        turno1 = wsf1.entrar_na_fila(posto1.fila)

        wsp1.ocupar_posto(posto1)

        wsp1.chamar_seguinte()

        posto1.refresh_from_db()

        wsp1.atender()

        wsp1.finalizar_atencao()

        posto1.refresh_from_db()
        self.assertEqual(posto1.estado, Posto.EM_PAUSA)
        self.assertEqual(posto1.funcionario.pk, funcionario1.pk)
        self.assertEqual(posto1.turno_em_atencao, None)
Пример #6
0
    def test_indicar_ausencia(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        funcionario1 = h.get_or_create_funcionario_posto('f1')

        cliente1 = h.get_or_create_cliente('c1')
        wsf1 = WSFila(cliente1)
        turno1 = wsf1.entrar_na_fila(posto1.fila)

        wsp1 = WSPosto(funcionario1)

        wsp1.receive()

        wsp1.ocupar_posto(posto1)

        wsp1.receive()

        wsp1.chamar_seguinte()

        wsp1.receive()
        wsp1.receive()

        wsp1.indicar_ausencia()

        posto1.refresh_from_db()
        self.assertEqual(wsp1.receive(), {
            "message": "POSTO",
            "data": {
                'posto': posto1.to_dict()
            }
        })

        self.assertIsNone(wsp1.receive())
Пример #7
0
    def test_fim_espera_date_null(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        cliente1 = h.get_or_create_cliente('c1')
        t1 = cliente1.entrar_na_fila(
            posto1.fila.id,
            h.get_or_create_qrcode(cliente1, posto1.fila).qrcode)

        self.assertIsNone(t1.fim_espera_date)
Пример #8
0
    def test_na_fila(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        cliente1 = h.get_or_create_cliente('c1')

        wsf1 = WSFila(cliente1)

        turno1 = wsf1.entrar_na_fila(posto1.fila)

        turno1.refresh_from_db()
        self.assertEqual(turno1.estado, Turno.NA_FILA)
Пример #9
0
    def test_esperando_cliente(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        funcionario1 = h.get_or_create_funcionario_posto('f1')

        wsp1 = WSPosto(funcionario1)
        wsp1.ocupar_posto(posto1)

        wsp1.chamar_seguinte()
        posto1.refresh_from_db()
        self.assertEqual(posto1.estado, Posto.ESPERANDO_CLIENTE)
Пример #10
0
    def test_em_pausa_apos_ocupado(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        funcionario1 = h.get_or_create_funcionario_posto('f1')

        wsp1 = WSPosto(funcionario1)
        wsp1.ocupar_posto(posto1)

        posto1.refresh_from_db()
        self.assertEqual(posto1.estado, Posto.EM_PAUSA)
        self.assertEqual(posto1.funcionario.pk, funcionario1.pk)
Пример #11
0
    def test_estima_espera_um_cliente_sem_posto_ativo(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        cliente1 = h.get_or_create_cliente('c1')

        posto1.fila.media_espera = 11
        posto1.fila.save()

        t1 = cliente1.entrar_na_fila(posto1.fila.pk, test_mode=True)

        self.assertEqual(t1.estimar_tempo_espera(), 11)
Пример #12
0
    def test_inativo_apos_desocupar(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        funcionario1 = h.get_or_create_funcionario_posto('f1')

        wsp1 = WSPosto(funcionario1)
        wsp1.ocupar_posto(posto1)

        wsp1.desocupar_posto()
        posto1.refresh_from_db()
        self.assertEqual(posto1.estado, Posto.INATIVO)
        self.assertIsNone(posto1.funcionario)
Пример #13
0
    def test_cancelado(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        cliente1 = h.get_or_create_cliente('c1')

        wsf1 = WSFila(cliente1)

        turno1 = wsf1.entrar_na_fila(posto1.fila)

        wsf1.sair_da_fila(turno1)

        turno1.refresh_from_db()
        self.assertEqual(turno1.estado, Turno.CANCELADO)
Пример #14
0
    def test_estima_espera_multiples_clientes_multiples_postos(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        posto2 = h.get_or_create_posto(['l1', 'f1', 'p2'])
        posto3 = h.get_or_create_posto(['l1', 'f1', 'p3'])
        cliente1 = h.get_or_create_cliente('c1')
        cliente2 = h.get_or_create_cliente('c2')
        cliente3 = h.get_or_create_cliente('c3')
        funcionario1 = h.get_or_create_funcionario_posto('f1')
        funcionario2 = h.get_or_create_funcionario_posto('f2')

        funcionario1.ocupar_posto(posto1)
        funcionario2.ocupar_posto(posto2)

        posto1.fila.media_espera = 11
        posto1.fila.save()

        t1 = cliente1.entrar_na_fila(posto1.fila.pk, test_mode=True)
        t2 = cliente2.entrar_na_fila(posto1.fila.pk, test_mode=True)
        t3 = cliente3.entrar_na_fila(posto1.fila.pk, test_mode=True)

        self.assertEqual(t1.estimar_tempo_espera(), 5.5)
        self.assertEqual(t2.estimar_tempo_espera(), 11)
        self.assertEqual(t3.estimar_tempo_espera(), 16.5)
Пример #15
0
    def test_scann_e_enviar_filas(self):

        cliente1 = h.get_or_create_cliente('c1')
        scann1 = h.get_or_create_funcionario_scanner('s1')
        h.get_or_create_posto(['l1', 'f1', 'p1'])
        local1 = h.get_or_create_posto(['l1', 'f2', 'p2']).fila.local

        wsf1 = WSFila(cliente1)
        qrcode = wsf1.receive()['data']['qrcode']

        wss1 = WSScanner(scann1)
        wss1.scan(qrcode, local1)

        QRCode.objects.get(user=cliente1, qrcode=qrcode, local=local1)

        filas = [model_to_dict(f) for f in local1.filas.all()]
        self.assertEqual(
            wsf1.receive(), {
                "message": "FILAS_DISPONIBLES",
                "data": {
                    "qrcode": qrcode,
                    'filas': filas
                }
            })
Пример #16
0
    def test_turno_finalizado_registrado_ausente(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        cliente1 = h.get_or_create_cliente('c1')
        t1 = cliente1.entrar_na_fila(
            posto1.fila.id,
            h.get_or_create_qrcode(cliente1, posto1.fila).qrcode)

        t1.estado = Turno.AUSENTE
        ini_save = TZ.now()
        t1.save()
        end_save = TZ.now()

        self.assertGreaterEqual(t1.fim_espera_date, ini_save)
        self.assertLessEqual(t1.fim_espera_date, end_save)
Пример #17
0
    def test_inicio_espera_date_registrado(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        cliente1 = h.get_or_create_cliente('c1')
        t1 = cliente1.entrar_na_fila(
            posto1.fila.id,
            h.get_or_create_qrcode(cliente1, posto1.fila).qrcode)

        t1.estado = Turno.CLIENTE_CHAMADO
        ini_save = TZ.now()
        t1.save()
        end_save = TZ.now()

        self.assertGreaterEqual(t1.inicio_espera_date, ini_save)
        self.assertLessEqual(t1.inicio_espera_date, end_save)
Пример #18
0
    def test_cliente_chamado(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        funcionario1 = h.get_or_create_funcionario_posto('f1')
        cliente1 = h.get_or_create_cliente('c1')

        wsp1 = WSPosto(funcionario1)
        wsf1 = WSFila(cliente1)

        wsp1.ocupar_posto(posto1)

        wsp1.chamar_seguinte()

        turno1 = wsf1.entrar_na_fila(posto1.fila)

        turno1.refresh_from_db()
        self.assertEqual(turno1.estado, Turno.CLIENTE_CHAMADO)
Пример #19
0
    def test_media_tempo_espera_um_turno(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        cliente1 = h.get_or_create_cliente('c1')
        t1 = cliente1.entrar_na_fila(posto1.fila.id, test_mode=True)

        t1.estado = Turno.ATENDIDO
        t1.inicio_espera_date = TZ.now()
        t1.fim_espera_date = t1.inicio_espera_date + TD(seconds=355)

        t1.save()

        t1.fila.refresh_from_db()

        t1.fila.calcular_media_espera(dt_from=t1.inicio_espera_date,
                                      dt_to=t1.fim_espera_date)

        self.assertEqual(t1.fila.media_espera, 355)
Пример #20
0
    def test_no_atendimento(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        funcionario1 = h.get_or_create_funcionario_posto('f1')
        cliente1 = h.get_or_create_cliente('c1')

        wsp1 = WSPosto(funcionario1)
        wsf1 = WSFila(cliente1)

        wsp1.ocupar_posto(posto1)

        wsp1.chamar_seguinte()

        turno1 = wsf1.entrar_na_fila(posto1.fila)

        wsp1.atender()

        turno1.refresh_from_db()
        self.assertEqual(turno1.estado, Turno.NO_ATENDIMENTO)
Пример #21
0
    def test_cliente_chamado_apos_espera_cliente(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        funcionario1 = h.get_or_create_funcionario_posto('f1')
        cliente1 = h.get_or_create_cliente('c1')

        wsp1 = WSPosto(funcionario1)
        wsf1 = WSFila(cliente1)

        wsp1.ocupar_posto(posto1)

        wsp1.chamar_seguinte()

        posto1.refresh_from_db()
        self.assertEqual(posto1.estado, Posto.ESPERANDO_CLIENTE)

        turno1 = wsf1.entrar_na_fila(posto1.fila)

        posto1.refresh_from_db()
        self.assertEqual(posto1.estado, Posto.CLIENTE_CHAMADO)
        self.assertEqual(posto1.turno_em_atencao.pk, turno1.pk)
Пример #22
0
    def test_get_postos_inativos(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])
        funcionario1 = h.get_or_create_funcionario_posto('f1')

        wsp1 = WSPosto(funcionario1)

        wsp1.receive()

        wsp1.get_postos_inativos(Local.objects.first())

        self.assertEqual(
            wsp1.receive(), {
                "message": "POSTOS_INATIVOS",
                "data": {
                    'postos': [
                        model_to_dict(p) for p in posto1.local.postos.filter(
                            estado=Posto.INATIVO)
                    ]
                }
            })

        self.assertIsNone(wsp1.receive())
Пример #23
0
    def test_inativo(self):

        posto1 = h.get_or_create_posto(['l1', 'f1', 'p1'])

        self.assertEqual(posto1.estado, Posto.INATIVO)
        self.assertIsNone(posto1.funcionario)