예제 #1
0
 def ver_imagens_rvf():
     session = app.config.get('dbsession')
     rvf_id = None
     idimagemativa = None
     anexos = []
     marcas = get_marcas_choice(session)
     oform = ImagemRVFForm(marcas=marcas)
     try:
         rvf_id = request.args.get('rvf_id')
         idimagemativa = request.args.get('imagem')
         if rvf_id is None:
             raise Exception('RVF não informado!!!')
         rvf = get_rvf(session, rvf_id)
         anexos = get_ids_anexos_ordenado(rvf)
         aimagemrvf = get_imagemrvf_or_none(session, rvf_id, idimagemativa)
         if aimagemrvf is not None:
             oform = ImagemRVFForm(**aimagemrvf.__dict__, marcas=marcas)
         oform.rvf_id.data = rvf_id
         oform.imagem.data = idimagemativa
     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('imagens_rvf.html',
                            rvf_id=rvf_id,
                            oform=oform,
                            imagemativa=idimagemativa,
                            anexos=anexos)
예제 #2
0
 def imagens_container(rvf_id):
     session = app.config.get('dbsession')
     try:
         arvf = get_rvf(session, rvf_id)
         anexos = get_ids_anexos_ordenado(arvf)
     except Exception as err:
         logger.error(err, exc_info=True)
         return jsonify({'success': False, 'msg': str(err)}), 500
     return jsonify(anexos), 200
예제 #3
0
 def rfv_download_imagens():
     session = app.config.get('dbsession')
     db = app.config['mongo_risco']
     rvf_id = request.args.get('rvf_id')
     rvf = get_rvf(session, rvf_id)
     result = get_anexos_mongo(db, rvf)
     memory_file = BytesIO()
     with zipfile.ZipFile(memory_file, 'w') as zf:
         for grid_out in result:
             zf.writestr(grid_out.filename, grid_out.read())
     memory_file.seek(0)
     return send_file(memory_file, attachment_filename='imagens.zip', as_attachment=True)
예제 #4
0
 def rvf_galeria_imagens():
     session = app.config.get('dbsession')
     anexos = []
     try:
         rvf_id = request.args.get('rvf_id')
         if not rvf_id:
             raise KeyError('Obrigatório passar parâmetro rvf_id')
         arvf = get_rvf(session, rvf_id)
         anexos = get_anexos_ordenado(arvf)
     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_galeria_imagens.html',
                            anexos=anexos)
예제 #5
0
 def rvf_impressao(rvf_id):
     session = app.config.get('dbsession')
     marcas_encontradas = []
     anexos = []
     rvf = None
     try:
         rvf = get_rvf(session, rvf_id)
         if rvf is None:
             flash('rvf %s não encontrado.' % rvf_id)
             return redirect(url_for('pesquisa_rvf'))
         marcas_encontradas = rvf.marcasencontradas
         anexos = get_ids_anexos_ordenado(rvf)
     except Exception as err:
         logger.error(err, exc_info=True)
         flash('Erro! Detalhes no log da aplicação.')
         flash(str(err))
     return render_template('rvf_impressao.html',
                            rvf=rvf,
                            marcas_encontradas=marcas_encontradas,
                            anexos=anexos)
예제 #6
0
    def api_gerar_taseda():
        session = app.config.get('dbsession')
        mongodb = app.config.get('mongo_risco')
        try:
            rvf_id = request.form.get('rvf_id')
        except TypeError:
            raise TypeError('Informe o id do RVF')
        except ValueError:
            raise ValueError('Informe id do RVF somente com números')
        try:
            tipo = request.form.get('tipo')
        except ValueError:
            raise ValueError('Tipo de relatório inválido')
        try:
            rvf = get_rvf(session, rvf_id)
            if rvf is None:
                raise ValueError(f'Não encontrou RVF para o id {rvf_id}')
            OVR_out_filename = '{}_FCC{}-{}.docx'.format(
                tipo, rvf_id,
                datetime.strftime(datetime.now(), '%Y-%m%dT%H%M%S'))

            rvf_dump = OVRDict(1).monta_rvf_dict(mongodb, session, rvf_id)
            document = gera_taseda(rvf_dump, rvf.user_name)
            path_to_upload = os.path.join(APP_PATH,
                                          app.config.get('STATIC_FOLDER', 'static'),
                                          rvf.user_name,
                                          OVR_out_filename)
            document.save(path_to_upload)
            return jsonify(path_to_upload), 200

            # cria arquivo na memória e disponibiliza para API e retorna em bytes na API
            # memory_file = BytesIO()
            # with open(memory_file, 'rb') as file:
            #     file.write(document)
            # memory_file.seek(0)
            #
            # return jsonify({'documento': b64encode(memory_file)}, 201)

        except Exception as err:
            logger.error(err, exc_info=True)
            return jsonify({'msg': 'Erro: %s' % str(err)}), 500
예제 #7
0
    def consultar_rvf():
        session = app.config.get('dbsession')
        mongodb = app.config.get('mongo_risco')
        get_usuario_validando(session, current_user.id)
        ovr_id = request.args.get('ovr_id')
        rvf_id = request.args.get('id')
        rvf = get_rvf(session, rvf_id)

        lacres_da_rvf = []
        for lacre_verificado in rvf.lacresverificados:
            lacres_da_rvf.append(lacre_verificado.numero)
        infracoes_da_rvf = []
        for infracao in rvf.infracoesencontradas:
            infracoes_da_rvf.append(infracao.nome)
        marcas_da_rvf = []
        for marca in rvf.marcasencontradas:
            marcas_da_rvf.append(marca.nome)
        apreensoes_da_rvf = []
        for apreensao in rvf.apreensoes:
            apreensoes_da_rvf.append(apreensao)

        fs = GridFS(mongodb)
        imagens_da_rvf = []
        for imagem in rvf.imagens:
            grid_out = fs.get(ObjectId(imagem.imagem))
            imagem_bytes = grid_out.read()
            imagem_string = str(base64.b64encode(imagem_bytes)).split('\'')[1]
            imagens_da_rvf.append(imagem_string)

        return render_template('consultar_rvf.html',
                               ovr_id=ovr_id,
                               rvf=rvf,
                               lacres_da_rvf=lacres_da_rvf,
                               infracoes_da_rvf=infracoes_da_rvf,
                               marcas_da_rvf=marcas_da_rvf,
                               apreensoes_da_rvf=apreensoes_da_rvf,
                               imagens_da_rvf=imagens_da_rvf
                               )
예제 #8
0
 def rvf_OVR():
     session = app.config.get('dbsession')
     mongodb = app.config.get('mongo_risco')
     rvf_id = request.args.get('rvf_id')
     tipo = request.args.get('tipo', 'OVR')
     try:
         rvf = get_rvf(session, rvf_id)
         if rvf is None:
             flash('rvf %s não encontrado.' % rvf_id)
             return redirect(url_for('pesquisa_rvf'))
         OVR_out_filename = '{}_FCC{}-{}.docx'.format(
             tipo, rvf_id,
             datetime.strftime(datetime.now(), '%Y-%m%dT%H%M%S'))
         rvf_dump = OVRDict(1).monta_rvf_dict(mongodb, session, rvf_id)
         if tipo == 'OVR':
             document = gera_OVR(rvf_dump, current_user.name)
         else:
             document = gera_taseda(rvf_dump, current_user.name)
         document.save(os.path.join(get_user_save_path(), OVR_out_filename))
         return redirect('static/%s/%s' % (current_user.name, OVR_out_filename))
     except Exception as err:
         logger.warning(err, exc_info=True)
         flash(str(err))
     return redirect(url_for('rvf', id=rvf_id, _scheme='https'))
예제 #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)