def gerar_arquivos_docx(db, session, documento, filename, fonte_docx_id, oid): out_filename = '{}_{}_{}.docx'.format( filename, oid, datetime.strftime(datetime.now(), '%Y-%m-%dT%H-%M-%S') ) try: ovr_dict = OVRDict(fonte_docx_id).get_dict( db=db, session=session, id=oid) except NoResultFound: raise NoResultFound('{} {} não encontrado!'.format( FonteDocx(fonte_docx_id), oid)) print(ovr_dict) if isinstance(ovr_dict, list): if len(ovr_dict) == 0: raise NoResultFound(f'Marcas não encontradas na ovr {oid}.') logger.info('Gerando marcas') arquivos = [] for odict in ovr_dict: document = get_doc_generico_ovr(odict, documento, current_user.name) nome_arquivo = '%s_%s.docx' % (out_filename[:-4], odict.get('nome')) arquivos.append(nome_arquivo) document.save(os.path.join( get_user_save_path(), nome_arquivo)) else: document = get_doc_generico_ovr(ovr_dict, documento, current_user.name) document.save(os.path.join(get_user_save_path(), out_filename)) arquivos = [out_filename] return arquivos
def auto_contrafacao(): session = app.config['dbsession'] db = app.config['mongo_risco'] ovr_id = None tg_id = request.args.get('tg_id') try: usuario = get_usuario(session, current_user.name) if usuario is None: raise Exception('Erro: Usuário não encontrado!') if tg_id: tg = get_tgovr_one(session, tg_id) ovr_id = tg.ovr_id ovr_dict = OVRDict(FonteDocx.TG_Ficha).get_dict( db=db, session=session, id=tg.id) if ovr_dict: document = gera_auto_contrafacao(ovr_dict, current_user.name) nome = 'Auto de Infração' out_filename = '{}_{}_{}.docx'.format( nome, ovr_id, datetime.strftime(datetime.now(), '%Y-%m-%dT%H-%M-%S') ) document.save(os.path.join( get_user_save_path(), out_filename)) return redirect('static/%s/%s' % (current_user.name, out_filename)) 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 redirect(url_for('autos_contrafacao', ovr_id=ovr_id))
def gera_docx(): """Preenche um docx com dados da Fonte especicada (OVR, RVF, etc)""" session = app.config['dbsession'] db = app.config['mongo_risco'] formdocx = FiltroDocxForm() modeloform = ModeloDocxForm() title_page = 'Gerador de Documentos' try: lista_docx = get_docx_choices(session) formdocx = FiltroDocxForm(lista_docx=lista_docx) if request.method == 'POST': formdocx = FiltroDocxForm(request.form, lista_docx=lista_docx) formdocx.validate() docx = get_docx(session, formdocx.docx_id.data) if request.form.get('excluir'): session.delete(docx) session.commit() return redirect(url_for('gera_docx')) elif request.form.get('preencher'): documento = docx.get_documento(db) arquivos = gerar_arquivos_docx(db, session, documento, docx.filename, docx.fonte_docx_id, formdocx.oid.data) return render_template('gera_docx.html', formdocx=formdocx, modeloform=modeloform, arquivos=arquivos) elif request.form.get('visualizar'): ovr_dict = OVRDict(docx.fonte_docx_id).get_dict( db=db, session=session, id=formdocx.oid.data) if isinstance(ovr_dict, list): ovr_dict = ovr_dict[0] if isinstance(ovr_dict, dict): ovr_dict.pop('historico', None) # ovr_dict.pop('tgs', None) # for rvf in ovr_dict.get('rvfs', []): # rvf.pop('imagens', None) return render_template('gera_docx.html', formdocx=formdocx, modeloform=modeloform, ovr_dict=ovr_dict) else: # Baixar modelo documento = docx.get_documento(db) out_filename = '{}_{}.docx'.format( docx.filename, datetime.strftime(datetime.now(), '%Y-%m-%dT%H-%M-%S') ) with open(os.path.join(get_user_save_path(), out_filename), 'wb') as out: out.write(documento.read()) return redirect('static/%s/%s' % (current_user.name, out_filename)) 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('gera_docx.html', formdocx=formdocx, modeloform=modeloform, title_page=title_page)
def risco(): """Função para escolher parâmetros de risco e visualizar resultados.""" mongodb = app.config['mongodb'] lista_risco = [] total_linhas = 0 csv_salvo = None planilha_atual = request.args.get('planilha_atual', '') active_tab = request.values.get('active_tab', 'carga') forms = { 'carga': RiscosAtivosForm, 'recintos': RecintoRiscosAtivosForm } FormClass = forms[active_tab] riscos_ativos_form = FormClass() title_page = 'Risco' if request.method == 'GET': riscos_ativos_form = FormClass(request.values, datainicio=date.today() - timedelta(days=5), datafim=date.today()) lista_csv = get_lista_csv(get_user_save_path()) if planilha_atual: csv_salvo = planilha_atual lista_risco, riscos_ativos = le_csv( os.path.join(get_user_save_path(), csv_salvo)) riscos_ativos_form = FormClass(MultiDict(riscos_ativos)) # print(lista_risco) total_linhas = len(lista_risco) # Limita resultados em 100 linhas na tela e adiciona imagens lista_risco = append_images(mongodb, lista_risco[:100], active_tab) return render_template('aplica_risco.html', oform=riscos_ativos_form, lista_risco=lista_risco, total_linhas=total_linhas, csv_salvo=csv_salvo, lista_csv=lista_csv, planilha_atual=planilha_atual, active_tab=active_tab, title_page=title_page)
def comunicado_contrafacao(): print(request.url) session = app.config['dbsession'] db = app.config['mongo_risco'] ovr_id = request.args.get('ovr_id') representante_id = request.args.get('representante_id') try: usuario = get_usuario(session, current_user.name) if usuario is None: raise Exception('Erro: Usuário não encontrado!') if ovr_id: try: ovr_dicts = OVRDict(FonteDocx.Marcas).get_dict( db=db, session=session, id=ovr_id) except NoResultFound: raise NoResultFound(f'Marcas não encontradas para Ficha {ovr_id}.') if len(ovr_dicts) == 0: raise NoResultFound(f'Marcas não encontradas na ovr {ovr_id}.') logger.info('Gerando marcas') document = None representante_id2 = None for ovr_dict in ovr_dicts: representante_id2 = ovr_dict.get('representante_id') representante_nome = ovr_dict.get('representante_nome') if representante_id2 and (str(representante_id2) == representante_id): document = gera_comunicado_contrafacao(ovr_dict, current_user.name, 'termo' in request.url) break if representante_id2 and document: nome = 'Comunicado_de_Contrafacao' if 'termo' in request.url: nome = 'Termo de retirada de amostras' out_filename = '{}_{}_{}_{}.docx'.format( nome, ovr_id, representante_nome, datetime.strftime(datetime.now(), '%Y-%m-%dT%H-%M-%S') ) document.save(os.path.join( get_user_save_path(), out_filename)) return redirect('static/%s/%s' % (current_user.name, out_filename)) 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 redirect(url_for('autos_contrafacao', ovr_id=ovr_id))
def exporta_docx(): """Preenche um docx com dados da OVR""" session = app.config['dbsession'] db = app.config['mongo_risco'] try: ovr_id = request.values['ovr_id'] out_filename = 'relatorio%s.docx' % ovr_id ovr_dict = monta_ovr_dict(db, session, int(ovr_id)) document = get_doc_generico_ovr(ovr_dict, 'relatorio.docx') document.save(os.path.join(get_user_save_path(), out_filename)) return redirect('static/%s/%s' % (current_user.name, out_filename)) 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('gera_docx.html')
def exporta_csv(): """Grava em arquivo parâmetros ativos. """ session = app.config.get('dbsession') try: riscos_out_filename = 'riscos_ativos' + \ datetime.strftime(datetime.now(), '%Y-%m%dT%H%M%S') + \ '.csv' riscos_ativos = riscosativos(session, current_user.name) with open(os.path.join(get_user_save_path(), riscos_out_filename), 'w', newline='') as riscos_out: for risco in riscos_ativos: linha_out = ';'.join( (risco.campo, risco.valor, risco.motivo)) riscos_out.write(linha_out + '\n') return redirect('static/%s/%s' % (current_user.name, riscos_out_filename)) except Exception as err: logger.warning(err, exc_info=True) flash(str(err)) return redirect(url_for('edita_risco'))
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 aplica_risco(): """Função para escolher parâmetros de risco e visualizar resultados.""" dbsession = app.config.get('dbsession') user_name = current_user.name active_tab = request.values.get('active_tab', 'carga') forms = { 'carga': RiscosAtivosForm, 'recintos': RecintoRiscosAtivosForm } dict_risco_function = { 'carga': mercanterisco, 'recintos': recintosrisco } FormClass = forms[active_tab] risco_function = dict_risco_function[active_tab] planilha_atual = '' if request.method == 'POST': try: riscos_ativos_form = FormClass(request.form) riscos_ativos_form.planilha_atual = '' riscos_ativos = riscosativos(dbsession, user_name) filtros = {} filtros['datainicio'] = riscos_ativos_form.datainicio.data filtros['datafim'] = riscos_ativos_form.datafim.data for fieldname, value in riscos_ativos_form.data.items(): if value is True: riscos_ativos_campo = [ risco.valor for risco in riscos_ativos if risco.campo == fieldname ] filtros[fieldname] = riscos_ativos_campo lista_risco, str_filtros = risco_function( dbsession, filtros, operador_ou=riscos_ativos_form.operadorOU.data) # print('***********', lista_risco) if not lista_risco or len(lista_risco) == 0: raise ValueError( 'Não foram encontrados resultados para o filtro!!') planilha_atual = save_planilharisco(lista_risco, get_user_save_path(), str_filtros) return redirect( url_for('risco', planilha_atual=planilha_atual, active_tab=active_tab)) except Exception as err: logger.error(err, exc_info=True) flash('Erro ao aplicar risco! ' 'Detalhes no log da aplicação.') flash(str(type(err))) flash(str(err)) # Em caso de exceção ou em um get aqui... riscos_ativos_form = FormClass(datainicio=date.today() - timedelta(days=5), datafim=date.today()) return render_template('aplica_risco.html', oform=riscos_ativos_form, lista_risco=[], total_linhas=0, csv_salvo='', lista_csv=[], planilha_atual=planilha_atual, active_tab=active_tab)