예제 #1
0
 def test_evento_RVF(self):
     aovr = ovr.OVR()
     aovr.numeroCEmercante = '1234'
     aovr.responsavel_cpf = 'teste'
     session.add(aovr)
     session.commit()
     session.refresh(aovr)
     # Não gera evento, mas gera rvf nova para a OVR
     rvf = cadastra_rvf(session, 'teste', {}, aovr.id)
     assert len(rvf.ovr.historico) == 0
     # Gera evento InspecaoNaoInvasiva
     rvf = cadastra_rvf(session, 'teste', {'id': rvf.id,
                                           'numerolote': '1',
                                           'inspecaonaoinvasiva': True})
     assert len(rvf.ovr.historico) == 1
     # Não gera evento
     rvf = cadastra_rvf(session, 'teste', {'id': rvf.id,
                                           'numerolote': '1',
                                           'inspecaonaoinvasiva': True})
     assert len(rvf.ovr.historico) == 1
     rvf = cadastra_rvf(session, 'teste', {'id': rvf.id,
                                           'numerolote': '1',
                                           'inspecaonaoinvasiva': False})
     assert len(rvf.ovr.historico) == 1
     # Gera evento RVF (mais de 3 imagens e inspecaonaoinvasiva False
     for i in range(5):
         imagem_rvf = ImagemRVF()
         imagem_rvf.rvf_id = rvf.id
         session.add(imagem_rvf)
     session.commit()
     session.refresh(rvf)
     rvf = cadastra_rvf(session, 'teste', {'id': rvf.id,
                                           'numerolote': '1',
                                           'inspecaonaoinvasiva': False})
     assert len(rvf.ovr.historico) == 2
예제 #2
0
 def test_programa_RVF(self):
     aovr = ovr.OVR()
     aovr.numeroCEmercante = '123'
     aovr.user_name = 'teste'
     session.add(aovr)
     session.commit()
     session.refresh(aovr)
     # Testar que programa_rvf não gera evento, mas depois a edição gera!!!
     # (e que gera somente um evento)
     rvf = programa_rvf_container(None, None,  # Não testará imagens, apenas eventos
                                  session, aovr, 'ABCD123456', '')
     assert rvf.ovr_id == aovr.id
     assert rvf.numeroCEmercante == aovr.numeroCEmercante
     assert rvf.numerolote == 'ABCD123456'
     assert rvf.user_name is None
     assert len(rvf.ovr.historico) == 0
     rvf = cadastra_rvf(session, 'teste', {'id': rvf.id,
                                           'numerolote': '1',
                                           'inspecaonaoinvasiva': True})
     assert rvf.numerolote == '1'
     assert rvf.user_name == 'teste'
     assert rvf.descricao is None
     assert len(rvf.ovr.historico) == 1
     rvf = cadastra_rvf(session, 'teste', {'id': rvf.id,
                                           'numerolote': '2',
                                           'descricao': 'TESTANDO'})
     assert rvf.numerolote == '2'
     assert rvf.descricao == 'TESTANDO'
     assert len(rvf.ovr.historico) == 1
예제 #3
0
 def test_cadastra_RVF_outro_user(self):
     setor1 = self.create_setor('1', 'Setor 1')
     setor2 = self.create_setor('2', 'Setor 2')
     user1 = self.create_usuario('user_1', 'Usuario 1', setor1)
     user2 = self.create_usuario('user_2', 'Usuario 2', setor1)
     ovr = self.create_OVR_valido()
     ovr.setor_id = '1'
     session.add(ovr)
     session.commit()
     session.refresh(ovr)
     # Atribui OVR ao user_2
     evento = atribui_responsavel_ovr(session, ovr.id, 'user_2', None)
     assert ovr.responsavel_cpf == 'user_2'
     # user_1 tenta cadastrar RVF
     with self.assertRaises(ESomenteUsuarioResponsavel):
         rvf = cadastra_rvf(session, 'user_1', {}, ovr.id)
     # user_2 cadastra RVF
     rvf = cadastra_rvf(session, 'user_2', {}, ovr.id)
     assert rvf.user_name == 'user_2'
예제 #4
0
 def nova_rvf_json():
     session = app.config.get('dbsession')
     try:
         cpf = request.json['cpf']
         ovr_id = request.json['ovr_id']
         orvf = cadastra_rvf(session, cpf, request.json, ovr_id)
         session.refresh(orvf)
     except Exception as err:
         logger.error(err, exc_info=True)
         return jsonify({'msg': str(err)}), 500
     return jsonify(orvf.dump()), 201
예제 #5
0
 def test_cadastra_RVF(self):
     setor1 = self.create_setor('1', 'Setor 1')
     setor2 = self.create_setor('2', 'Setor 2')
     user1 = self.create_usuario('user_1', 'Usuario 1', setor1)
     user2 = self.create_usuario('user_2', 'Usuario 2', setor1)
     ovr = self.create_OVR_valido()
     ovr.setor_id = '1'
     session.add(ovr)
     session.commit()
     session.refresh(ovr)
     rvf = cadastra_rvf(session, 'user_1', {}, ovr.id)
     assert rvf.user_name == 'user_1'
예제 #6
0
 def test_evento_InspecaoNaoInvasiva(self):
     aovr = ovr.OVR()
     aovr.numeroCEmercante = '123'
     aovr.fase = 1
     aovr.responsavel_cpf = 'teste'
     user_name = 'teste3'
     session.add(aovr)
     session.commit()
     session.refresh(aovr)
     with self.assertRaises(ENaoAutorizado):
         rvf = cadastra_rvf(session, user_name, {}, aovr.id)
     rvf = cadastra_rvf(session, 'teste', {'inspecaonaoinvasiva': True}, aovr.id)
     assert rvf.ovr_id == aovr.id
     assert rvf.numeroCEmercante == aovr.numeroCEmercante
     evento = rvf.ovr.historico[0]
     assert evento.ovr_id == aovr.id
     assert rvf.numerolote is None
     with self.assertRaises(ESomenteUsuarioResponsavel):
         rvf = cadastra_rvf(session, 'teste2', {'id': rvf.id,
                                                'numerolote': '1'})
     rvf = cadastra_rvf(session, 'teste', {'id': rvf.id,
                                           'numerolote': '1'})
     assert rvf.numerolote == '1'
예제 #7
0
    def registrar_rvf():
        session = app.config.get('dbsession')
        mongodb = app.config.get('mongo_risco')
        ovr_id = request.args.get('ovr_id')
        get_usuario_validando(session, current_user.id)
        marcas = get_marcas_choice(session)
        infracoes = get_infracoes_choice(session)
        rvf_form = RVFForm(marcas=marcas, infracoes=infracoes)
        tiposapreensao = get_tiposapreensao_choice(session)
        apreensao_form = ApreensaoRVFForm(tiposapreensao=tiposapreensao)

        if request.method == 'POST':
            rvf_params = request.get_json()
            ovr_id = rvf_params['ovr_id']
            lacres = rvf_params['lacresVerificados']
            infracoes = rvf_params['infracoesEncontradas']
            marcas = rvf_params['marcasEncontradas']
            apreensoes = rvf_params['apreensoesObtidas']
            imagens = rvf_params['imagensRecebidas']
            new_rvf = cadastra_rvf(session,
                                   user_name=current_user.name,
                                   params=rvf_params)
            session.refresh(new_rvf)

            for lacre in lacres:
                inclui_lacre_verificado(session, new_rvf.id, lacre)
            for infracao in infracoes:
                inclui_infracao_encontrada(session, new_rvf.id, infracao)
            for marca in marcas:
                inclui_marca_encontrada(session, new_rvf.id, marca)
            for apreensao in apreensoes:
                apreensao['rvf_id'] = new_rvf.id
                gera_apreensao_rvf(session, apreensao)
            for imagem in imagens:
                content = base64.b64decode(imagem['content'].split(',')[1])
                filename = imagem['name']
                dataModificacao = datetime.now()
                rvf_id = new_rvf.id
                inclui_imagemrvf(mongodb, session, content,
                                              filename, dataModificacao, rvf_id)

            return jsonify({'id': new_rvf.id}), 200

        return render_template('registrar_rvf.html',
                               ovr_id=ovr_id,
                               rvf_form=rvf_form,
                               apreensao_form=apreensao_form)
예제 #8
0
    def test_a08_encerrar_ficha_com_resultado_com_auditor(self):
        # Kanoo cria ficha limpa, se autoatribui e tenta encerrar ficha com resultado, com auditor definido
        self.login('kanoo', 'kanoo')
        params_ovr = {
            'tipooperacao': 'Mercadoria Abandonada',
            'recinto_id': 1,
            'numeroCEmercante': '131415161718192'
        }
        ovr1 = self.create_OVR(params_ovr, 'kanoo')
        self.session.refresh(ovr1)
        assert ovr1.id is not None
        assert ovr1.responsavel is None
        assert ovr1.fase == 0

        # Atribui responsabilidade para kanoo
        atribui_responsavel_ovr(session,
                                ovr_id=ovr1.id,
                                responsavel='kanoo',
                                user_name=ovr1.user_name)

        # Kanoo se torna o auditor responsável pela ficha
        atribui_responsavel_ovr(session,
                                ovr_id=ovr1.id,
                                responsavel='kanoo',
                                user_name=ovr1.user_name,
                                auditor='kanoo')

        # Cria RVF
        tipo_apreensao = gera_objeto(TipoApreensao(),
                                     session,
                                     params={'descricao': 'Cocaína'})
        lista_apreensoes = []
        params_apreensao = {
            'tipo_id': 1,
            'peso': 10,
            'descricao': 'Cocaína no tênis'
        }
        apreensao = gera_apreensao_rvf(session, params=params_apreensao)
        lista_apreensoes.append(apreensao)
        lista_imagens = []
        params_rvf = {
            'numerolote': 'ABCD1234567',
            'descricao': 'RFV número 01',
            'imagens': lista_imagens,
            'apreensoes': lista_apreensoes,
            'ovr_id': ovr1.id
        }
        cadastra_rvf(session, user_name=ovr1.user_name, params=params_rvf)

        # Tenta encerrar ficha
        lista_de_rvfs_apreensoes = lista_de_rvfs_e_apreensoes(session,
                                                              ovr_id=ovr1.id)
        payload = {'lista_de_rvfs_apreensoes': lista_de_rvfs_apreensoes}
        encerramento_ovr = self.app.get('/encerramento_ovr?ovr_id=%s' %
                                        ovr1.id)
        assert encerramento_ovr.status_code == 200
        text = str(encerramento_ovr.data)
        self.render_page(text)
        csrf_token = self.get_token(text)
        tipo_resultado_pos = text.find('name="tipo_resultado"')
        tipo_resultado = text[tipo_resultado_pos + 29:tipo_resultado_pos + 30]
        payload = {
            'csrf_token': csrf_token,
            'ovr_id': ovr1.id,
            'responsavel': ovr1.responsavel.nome,
            'apreensao': apreensao.peso,
            'auditor': ovr1.cpfauditorresponsavel,
            'tipo_resultado': tipo_resultado
        }
        ficha_encerrada = self.app.post('/encerrar_ficha',
                                        data=payload,
                                        follow_redirects=True)
        assert ficha_encerrada.status_code == 200
        # self.render_page(str(ficha_encerrada.data))
        session.delete(ovr1)
        self.logout()
예제 #9
0
    def rvf():
        session = app.config.get('dbsession')
        get_usuario_validando(session, current_user.id)
        tiposapreensao = get_tiposapreensao_choice(session)
        apreensao_form = ApreensaoRVFForm(tiposapreensao=tiposapreensao)
        apreensoes_rvf = []
        infracoes = []
        infracoes_encontradas = []
        marcas = []
        marcas_encontradas = []
        anexos = []
        lacres_verificados = []
        arvf = None
        rvf_form = RVFForm()
        title_page = 'RVF'
        try:
            if request.method == 'POST':
                rvf_form = RVFForm(request.form)
                rvf_form.adata.data = request.form['adata']
                rvf_form.ahora.data = request.form['ahora']
                rvf_form.validate()
                arvf = cadastra_rvf(session,
                                    user_name=current_user.name,
                                    params=dict(rvf_form.data.items()))
                session.refresh(arvf)
                return redirect(url_for('rvf', id=arvf.id))
            # ELSE
            ovr_id = request.args.get('ovr')
            if ovr_id is not None:
                arvf = cadastra_rvf(session, ovr_id=ovr_id,
                                    user_name=current_user.name)
                session.refresh(arvf)
                return redirect(url_for('rvf', id=arvf.id))
            # ELSE
            db = app.config['mongo_risco']
            marcas = get_marcas(session)
            infracoes = get_infracoes(session)
            rvf_id = request.args.get('id')
            title_page = 'RVF ' + rvf_id
            if rvf_id is not None:
                arvf = get_rvf(session, rvf_id)
                print('arvf.inspecaonaoinvasiva', arvf.inspecaonaoinvasiva)
            if arvf is not None:
                rvf_form = RVFForm(**arvf.__dict__)
                if arvf.datahora:
                    rvf_form.adata.data = arvf.datahora.date()
                    rvf_form.ahora.data = arvf.datahora.time()
                rvf_form.id.data = arvf.id
                rvf_form.peso_manifestado.data = get_peso(session,
                                                          rvf_form.numeroCEmercante.data,
                                                          rvf_form.numerolote.data)
                apreensoes_rvf = arvf.apreensoes
                infracoes_encontradas = arvf.infracoesencontradas
                marcas_encontradas = arvf.marcasencontradas
                lacres_verificados = arvf.lacresverificados
                # Temporário - para recuperar imagens 'perdidas' na transição
                ressuscita_anexos_perdidos(db, session, arvf)
                anexos = get_ids_anexos_ordenado(arvf)
                usuario = get_usuario(session, arvf.user_name)
                if usuario:
                    rvf_form.user_descricao.data = usuario.nome

        except Exception as err:
            logger.error(err, exc_info=True)
            flash('Erro! Detalhes no log da aplicação.')
            flash(str(type(err)))
            flash(str(err))
        return render_template('rvf.html',
                               infracoes=infracoes,
                               marcas=marcas,
                               oform=rvf_form,
                               apreensao_form=apreensao_form,
                               apreensoes=apreensoes_rvf,
                               infracoes_encontradas=infracoes_encontradas,
                               marcas_encontradas=marcas_encontradas,
                               lacres_verificados=lacres_verificados,
                               anexos=anexos,
                               title_page=title_page)