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)
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
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)
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)
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)
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
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 )
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'))
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)