def processos(request, pdf=False): """ Relatório Gerencial - Relatório de processos. """ areas = [] for a in Area.objects.all(): area = {'area': a} grupos = [] for g in a.grupo_set.all(): grupo = {'grupo': g} macroprocessos = [] for m in g.macroprocesso_set.all(): macroprocesso = {'macroprocesso': m, 'processos': m.processo_set.all()} macroprocessos.append(macroprocesso) grupo['macroprocessos'] = macroprocessos grupos.append(grupo) area['grupos'] = grupos areas.append(area) if pdf == '2': # Gera arquivo PDF em A3 return render_to_pdf_weasy('processo/processos2.pdf', {'areas': areas}, request=request, filename='processos.pdf') elif pdf: # Gera arquivo PDF em A3 ou A4. O parametro pdf é o que define o tamanho. return render_to_pdf_weasy('processo/processos.pdf', {'areas': areas, 'tamanho': pdf}, request=request, filename='processos.pdf') else: return TemplateResponse(request, 'processo/processos.html', {'areas': areas})
def custo_terremark(request, pdf=0, xls=0): """ Relatório Gerencial - Relatório de Custo dos recursos contratados. OBS: O relatório filtra implicitamente pela entidade Terremark. """ # Variável indicando o datacenter. Ex: 1 == terremark datacenter_id = Variavel.objects.get(nome=Variavel.DATACENTER_IDS) # Filtrando por Entidade recursos = Recurso.objects.filter(planejamento__os__contrato__entidade_id=datacenter_id.valor) \ .order_by('planejamento__projeto__nome', 'planejamento__tipo__nome', 'planejamento__referente', 'planejamento__os__numero', '-ano_referencia', '-mes_referencia') # Otimizando o queryset do relatorio recursos = recursos.select_related( 'planejamento', 'planejamento__projeto', 'planejamento__tipo', 'planejamento__unidade', 'planejamento__os', 'planejamento__os__contrato', 'planejamento__os__tipo', 'pagamento', 'pagamento__protocolo', 'pagamento__protocolo__termo') estado_selected = 0 estado = request.GET.get('estado') # Filtro do estado da OS if estado and estado > '0': estado_selected = int(request.GET.get('estado')) recursos = recursos.filter( planejamento__os__estado__id=estado_selected) if request.GET.get('acao') and request.GET.get('acao') == '2': # Export para Excel/XLS dataset = CustoTerremarkRecursoResource().export(queryset=recursos) response = HttpResponse( dataset.xls, content_type='application/vnd.ms-excel;charset=utf-8') response[ 'Content-Disposition'] = "attachment; filename=custo_terremark.xls" return response elif pdf or (request.GET.get('acao') and request.GET.get('acao') == '1'): # Export para PDF return render_to_pdf_weasy( template_src='rede/tabela_terremark.pdf', context_dict={ 'recursos': recursos, 'estado_selected': estado_selected }, request=request, filename='custos_dos_recursos_contratados.pdf') return TemplateResponse( request, 'rede/tabela_terremark.html', { 'recursos': recursos, 'filtro_estados': EstadoOS.objects.all(), 'estado_selected': estado_selected, 'estado': estado })
def planejamento(request, pdf=0): """ Relatório Técnico - Relatório de Planejamento por ano. """ anoproj = request.GET.get('anoproj') if anoproj: ano, proj = anoproj.split('/') else: ano = None proj = None contrato = request.GET.get('contrato') os = request.GET.get('os') if not ano and not proj and not contrato and not os: return TemplateResponse( request, 'rede/escolhe_ano.html', { 'anoproj': [(p[0], Projeto.objects.get(id=p[1])) for p in PlanejaAquisicaoRecurso.objects.values_list( 'ano', 'projeto').order_by('ano').distinct()], 'oss': OrdemDeServico.objects.all() }) entidades = [] for e in Entidade.objects.filter( contrato__ordemdeservico__planejaaquisicaorecurso__isnull=False ).distinct(): entidade = {'entidade': e} planejamentos = PlanejaAquisicaoRecurso.objects.filter( os__contrato__entidade=e) if ano: planejamentos = planejamentos.filter(ano=ano) if proj: planejamentos = planejamentos.filter(projeto__id=proj) if os: planejamentos = planejamentos.filter(os__id=os) projetos = [] for p in Projeto.objects.filter( planejaaquisicaorecurso__in=planejamentos).distinct(): projeto = {'projeto': p, 'plan': planejamentos.filter(projeto=p)} projetos.append(projeto) entidade.update({'projetos': projetos}) entidades.append(entidade) if pdf: return render_to_pdf_weasy('rede/planejamento.pdf', { 'entidades': entidades, 'ano': ano }, request=request, filename='planejamento%s.pdf' % ano) return TemplateResponse(request, 'rede/planejamento.html', { 'entidades': entidades, 'ano': ano, 'projeto': proj, 'os': os })
def imprime_informacoes_gerais(request): contatos = request.GET.get('contatos') info = [] tecnicos = Identificacao.objects.filter(area__contains='Tec') asns = ASN.objects.all() # filter(pais='BR') blocos_ips = BlocoIP.objects.all() for e in Enlace.objects.filter( participante__entidade__entidadehistorico__ativo=True): entidade = e.participante.entidade if contatos: contato_tec = tecnicos.filter(endereco__entidade=entidade) else: contato_tec = None asn = asns.filter(entidade=entidade) blocos = blocos_ips.filter(designado=entidade) operadoras = e.segmento_set.filter(data_desativacao__isnull=True) info.append({ 'info': e, "contatos_tec": contato_tec, "asn": asn, "bloco_ip": blocos, "operadoras": operadoras }) return render_to_pdf_weasy('rede/informacoes_gerais.pdf', {'info': info}, request=request, filename='informacoes_gerais.pdf')
def lista_acordos(request, pdf=False): """ Relatório Gerencial - Relatório de Concessões por Acordo. Distribuição das concessões por acordo nos processos a partir de 2005. Exibe os acordos de todos os processos. """ processos = [] for t in Termo.objects.filter(ano__gte=2004).order_by('-ano'): processo = {'processo': t} acordos = [] for a in Acordo.objects.filter(origemfapesp__item_outorga__natureza_gasto__termo=t).distinct(): acordo = {'acordo': a} itens = [] for it in Item.objects.filter(origemfapesp__acordo=a, natureza_gasto__termo=t)\ .order_by('natureza_gasto__modalidade__sigla', 'entidade'): itens.append({'modalidade': it.natureza_gasto.modalidade.sigla, 'entidade': it.entidade, 'descricao': it.descricao}) acordo.update({'itens': itens}) acordos.append(acordo) processo.update({'acordos': acordos}) processos.append(processo) if pdf: return render_to_pdf_weasy('outorga/acordos.pdf', {'processos': processos}, request=request, filename="distribuicao_das_concessoes_por_acordo.pdf") else: return render(request, 'outorga/acordos.html', {'processos': processos})
def protocolos_descricao(request, pdf=False): """ Relatório Administrativo - Relatório de Protocolos por descrição. """ if request.GET.get('termo'): termo_id = request.GET.get('termo') termo = get_object_or_404(Termo, pk=termo_id) retorno = [] for d in Descricao.objects.all(): desc = {'descricao': d.__unicode__(), 'protocolos': Protocolo.objects.filter(descricao2=d, termo=termo) .order_by('-termo__ano', 'referente')} retorno.append(desc) if pdf: return render_to_pdf_weasy('protocolo/descricoes.pdf', {'protocolos': retorno}, request=request, filename='protocolos.pdf') else: return render_to_response('protocolo/descricoes.html', {'protocolos': retorno, 'termo': termo}, context_instance=RequestContext(request)) else: return render_to_response('financeiro/relatorios_termo.html', {'termos': Termo.objects.all(), 'view': 'protocolos_descricao'}, context_instance=RequestContext(request))
def pinpoint(request, mem): m = get_object_or_404(MemorandoPinpoint, pk=mem) # return render_to_response('memorando/simples.pdf', {'m':m, 't':Termo.termo_ativo()}) return render_to_pdf_weasy('memorando/pinpoint.pdf', { 'm': m, 't': Termo.termo_ativo() }, request=request, filename='memorando_%s.pdf' % m.__unicode__())
def processos(request, pdf=False): """ Relatório Gerencial - Relatório de processos. """ areas = [] for a in Area.objects.all(): area = {'area': a} grupos = [] for g in a.grupo_set.all(): grupo = {'grupo': g} macroprocessos = [] for m in g.macroprocesso_set.all(): macroprocesso = { 'macroprocesso': m, 'processos': m.processo_set.all() } macroprocessos.append(macroprocesso) grupo['macroprocessos'] = macroprocessos grupos.append(grupo) area['grupos'] = grupos areas.append(area) if pdf == '2': # Gera arquivo PDF em A3 return render_to_pdf_weasy('processo/processos2.pdf', {'areas': areas}, request=request, filename='processos.pdf') elif pdf: # Gera arquivo PDF em A3 ou A4. O parametro pdf é o que define o tamanho. return render_to_pdf_weasy('processo/processos.pdf', { 'areas': areas, 'tamanho': pdf }, request=request, filename='processos.pdf') else: return TemplateResponse(request, 'processo/processos.html', {'areas': areas})
def custo_terremark(request, pdf=0, xls=0): """ Relatório Gerencial - Relatório de Custo dos recursos contratados. OBS: O relatório filtra implicitamente pela entidade Terremark. """ # Variável indicando o datacenter. Ex: 1 == terremark datacenter_id = Variavel.objects.get(nome=Variavel.DATACENTER_IDS) # Filtrando por Entidade recursos = Recurso.objects.filter(planejamento__os__contrato__entidade_id=datacenter_id.valor) \ .order_by('planejamento__projeto__nome', 'planejamento__tipo__nome', 'planejamento__referente', 'planejamento__os__numero', '-ano_referencia', '-mes_referencia') # Otimizando o queryset do relatorio recursos = recursos.select_related('planejamento', 'planejamento__projeto', 'planejamento__tipo', 'planejamento__unidade', 'planejamento__os', 'planejamento__os__contrato', 'planejamento__os__tipo', 'pagamento', 'pagamento__protocolo', 'pagamento__protocolo__termo') estado_selected = 0 estado = request.GET.get('estado') # Filtro do estado da OS if estado and estado > '0': estado_selected = int(request.GET.get('estado')) recursos = recursos.filter(planejamento__os__estado__id=estado_selected) if request.GET.get('acao') and request.GET.get('acao') == '2': # Export para Excel/XLS dataset = CustoTerremarkRecursoResource().export(queryset=recursos) response = HttpResponse(dataset.xls, content_type='application/vnd.ms-excel;charset=utf-8') response['Content-Disposition'] = "attachment; filename=custo_terremark.xls" return response elif pdf or (request.GET.get('acao') and request.GET.get('acao') == '1'): # Export para PDF return render_to_pdf_weasy(template_src='rede/tabela_terremark.pdf', context_dict={'recursos': recursos, 'estado_selected': estado_selected}, request=request, filename='custos_dos_recursos_contratados.pdf') return TemplateResponse(request, 'rede/tabela_terremark.html', {'recursos': recursos, 'filtro_estados': EstadoOS.objects.all(), 'estado_selected': estado_selected, 'estado': estado})
def planejamento(request, pdf=0): """ Relatório Técnico - Relatório de Planejamento por ano. """ anoproj = request.GET.get('anoproj') if anoproj: ano, proj = anoproj.split('/') else: ano = None proj = None contrato = request.GET.get('contrato') os = request.GET.get('os') if not ano and not proj and not contrato and not os: return TemplateResponse(request, 'rede/escolhe_ano.html', {'anoproj': [(p[0], Projeto.objects.get(id=p[1])) for p in PlanejaAquisicaoRecurso.objects.values_list('ano', 'projeto') .order_by('ano').distinct()], 'oss': OrdemDeServico.objects.all()}) entidades = [] for e in Entidade.objects.filter(contrato__ordemdeservico__planejaaquisicaorecurso__isnull=False).distinct(): entidade = {'entidade': e} planejamentos = PlanejaAquisicaoRecurso.objects.filter(os__contrato__entidade=e) if ano: planejamentos = planejamentos.filter(ano=ano) if proj: planejamentos = planejamentos.filter(projeto__id=proj) if os: planejamentos = planejamentos.filter(os__id=os) projetos = [] for p in Projeto.objects.filter(planejaaquisicaorecurso__in=planejamentos).distinct(): projeto = {'projeto': p, 'plan': planejamentos.filter(projeto=p)} projetos.append(projeto) entidade.update({'projetos': projetos}) entidades.append(entidade) if pdf: return render_to_pdf_weasy('rede/planejamento.pdf', {'entidades': entidades, 'ano': ano}, request=request, filename='planejamento%s.pdf' % ano) return TemplateResponse(request, 'rede/planejamento.html', {'entidades': entidades, 'ano': ano, 'projeto': proj, 'os': os})
def imprime_informacoes_gerais(request): contatos = request.GET.get('contatos') info = [] tecnicos = Identificacao.objects.filter(area__contains='Tec') asns = ASN.objects.all() # filter(pais='BR') blocos_ips = BlocoIP.objects.all() for e in Enlace.objects.filter(participante__entidade__entidadehistorico__ativo=True): entidade = e.participante.entidade if contatos: contato_tec = tecnicos.filter(endereco__entidade=entidade) else: contato_tec = None asn = asns.filter(entidade=entidade) blocos = blocos_ips.filter(designado=entidade) operadoras = e.segmento_set.filter(data_desativacao__isnull=True) info.append({'info': e, "contatos_tec": contato_tec, "asn": asn, "bloco_ip": blocos, "operadoras": operadoras}) return render_to_pdf_weasy('rede/informacoes_gerais.pdf', {'info': info}, request=request, filename='informacoes_gerais.pdf')
def agenda(request, tipo=8, pdf=None): """ Relatório Administrativo - Relatório de Agenda """ agenda = request.GET.get('agenda') if agenda: entidades = [] tipos = TipoEntidade.objects.filter(id__in=EntidadeHistorico.objects.filter( ativo=True, entidade__agendado__agenda__id=agenda, entidade__agendado__ativo=True).values_list( 'tipo', flat=True).distinct().order_by('tipo')) for e in Entidade.objects.filter(entidadehistorico__ativo=True, entidade__isnull=True, agendado__ativo=True, agendado__agenda__id=agenda, entidadehistorico__tipo__id=tipo).distinct(): areas = [] for a in Identificacao.objects.filter(endereco__entidade=e).order_by('area').values_list('area', flat=True)\ .distinct(): area = {'area': a, 'contatos': Identificacao.objects.filter(endereco__entidade=e, area=a) .order_by('contato')} areas.append(area) entidades.append({'entidade': e, 'areas': areas}) for ef in e.entidade_em.filter(entidadehistorico__ativo=True, agendado__agenda__id=agenda, agendado__ativo=True): areas = [] for a in Identificacao.objects.filter(endereco__entidade=ef).order_by('area')\ .values_list('area', flat=True).distinct(): area = {'area': a, 'contatos': Identificacao.objects.filter(endereco__entidade=ef, area=a) .order_by('contato')} areas.append(area) entidades.append({'entidade': ef, 'filho': True, 'areas': areas}) if pdf: return render_to_pdf_weasy('identificacao/agenda.pdf', {'entidades': entidades}, request=request, filename='agenda.pdf') return TemplateResponse(request, 'identificacao/agenda.html', {'entidades': entidades, 'tipo': int(tipo), 'tipos': tipos, 'agenda': agenda}) else: agendas = Agenda.objects.order_by('nome') return TemplateResponse(request, 'identificacao/agendas.html', {'agendas': agendas})
def protocolos_descricao(request, pdf=False): """ Relatório Administrativo - Relatório de Protocolos por descrição. """ if request.GET.get('termo'): termo_id = request.GET.get('termo') termo = get_object_or_404(Termo, pk=termo_id) retorno = [] for d in Descricao.objects.all(): desc = { 'descricao': d.__unicode__(), 'protocolos': Protocolo.objects.filter(descricao2=d, termo=termo).order_by( '-termo__ano', 'referente') } retorno.append(desc) if pdf: return render_to_pdf_weasy('protocolo/descricoes.pdf', {'protocolos': retorno}, request=request, filename='protocolos.pdf') else: return render_to_response('protocolo/descricoes.html', { 'protocolos': retorno, 'termo': termo }, context_instance=RequestContext(request)) else: return render_to_response('financeiro/relatorios_termo.html', { 'termos': Termo.objects.all(), 'view': 'protocolos_descricao' }, context_instance=RequestContext(request))
def contratos(request, pdf=False): """ Relatório Gerencial - Relatório de Contratos por Entidade. """ # Filtrando as entidades pelo parametro de filtro 'entidade' entidade_id = request.GET.get('entidade') # Filtrando as entidades pelo parametro de filtro 'estadoos' estadoos_id = request.GET.get('estadoos') # Obj da Entidade escolhida para o filtro param_entidade = None # Obj da Entidade escolhida para o filtro param_estadoos = None entidades = Entidade.objects.prefetch_related( Prefetch('contrato_set', queryset=Contrato.objects.order_by('-data_inicio'))).order_by('sigla') # Filtrando as entidades if entidade_id and entidade_id != '0' and entidade_id.isdigit(): entidades = entidades.filter(id=int(entidade_id)) param_entidade = Entidade.objects.get(id=int(entidade_id)) if estadoos_id and estadoos_id != '0' and estadoos_id.isdigit(): param_estadoos = EstadoOS.objects.get(id=int(estadoos_id)) retorno_entidades = [] for e in entidades: cts = e.contrato_set.all() entidade = {'entidade': e.sigla} contratos = [] for c in cts: contrato = {'id': c.id, 'inicio': c.data_inicio, 'termino': c.limite_rescisao, 'numero': c.numero, 'arquivo': c.arquivo, 'auto': c.auto_renova, 'os': []} ordens = [] oss = c.ordemdeservico_set.select_related('tipo', 'estado')\ .prefetch_related('arquivos').order_by('-data_inicio') for os in oss: if param_estadoos: # Se tiver filtro de EstadoOS, somente adicionamos as OS filtradas if param_estadoos.id == os.estado.id: ordens.append(os) else: ordens.append(os) if len(ordens) > 0: contrato.update({'os': ordens}) if param_estadoos: # Se tiver filtro de EstadoOS, somente adicionamos os contratos com alguma OS if len(contrato['os']) > 0: contratos.append(contrato) else: contratos.append(contrato) # Somente adicionamos as entidades com algum contrato válido if len(contratos) > 0: entidade.update({'contratos': contratos}) retorno_entidades.append(entidade) if pdf == '2': return render(request, 'outorga/contratos.pdf', {'entidades': retorno_entidades, 'entidade': param_entidade, 'estadoos': param_estadoos}) elif pdf: return render_to_pdf_weasy('outorga/contratos.pdf', {'entidades': retorno_entidades, 'entidade': param_entidade, 'estadoos': param_estadoos}, request=request, filename="relatorio_contratos.pdf") else: # Selecionando os valores de Entidades para serem exibidas no filtro contrato_entidades = Contrato.objects.values_list('entidade__id') filtro_entidades = Entidade.objects.filter(id__in=contrato_entidades) # Selecionando os valores de Entidades para serem exibidas no filtro os_estadoos = OrdemDeServico.objects.values_list('estado__id') filtro_estadoos = EstadoOS.objects.filter(id__in=os_estadoos) return render(request, 'outorga/contratos.html', {'entidades': retorno_entidades, 'filtro_entidades': filtro_entidades, 'filtro_estadoos': filtro_estadoos, 'entidade': param_entidade, 'estadoos': param_estadoos})
def relatorio_repositorio(request, pdf=0): """ Relatório Administrativo - Relatório de dados de Repositório """ # Parametros de filtros param_entidade_id = request.GET.get('entidade') or request.POST.get( 'entidade') param_nome = request.GET.get('nome') or request.POST.get('nome') or '' param_natureza_id = request.GET.get('natureza') or request.POST.get( 'natureza') param_servico_id = request.GET.get('servico') or request.POST.get( 'servico') param_data_de = request.GET.get('data_de') or request.POST.get( 'data_de') or '' param_data_ate = request.GET.get('data_ate') or request.POST.get( 'data_ate') or '' grupos = OrderedDict() if param_entidade_id or param_natureza_id or param_servico_id: param_entidade_id = param_entidade_id or '0' param_natureza_id = param_natureza_id or '0' param_servico_id = param_servico_id or '0' repositorios = Repositorio.objects.all() # Filtrando os dados do repositório if param_entidade_id and param_entidade_id != '0': repositorios = repositorios.filter( tipo__entidade__id=param_entidade_id) if param_nome: repositorios = repositorios.filter(tipo__nome__iexact=param_nome) if param_natureza_id and param_natureza_id != '0': repositorios = repositorios.filter(natureza__id=param_natureza_id) if param_servico_id and param_servico_id != '0': repositorios = repositorios.filter(servicos__id=param_servico_id) if param_data_de: repositorios = repositorios.filter( data_ocorrencia__gte=param_data_de) if param_data_ate: repositorios = repositorios.filter( data_ocorrencia__lte=param_data_ate) repositorios = repositorios.select_related('tipo', 'tipo__entidade', 'natureza')\ .order_by('tipo__entidade__sigla', 'tipo__nome', 'natureza__nome', '-data_ocorrencia', 'estado__nome') # Repositórios agrupados por Tipo e Natureza for r in repositorios: grupo_chave = str(r.tipo_id) + '_' + str(r.natureza_id) if grupo_chave in grupos: grupo = grupos[grupo_chave] else: grupo = { 'entidade': r.tipo.entidade, 'nome': r.tipo.nome, 'natureza': r.natureza.nome, 'repositorios': [] } grupos.update({grupo_chave: grupo}) # Carregando os dados de tamanho dos arquivos dos anexos anexos = [] for a in Anexo.objects.filter(repositorio=r): if a.arquivo: filepath = os.path.join(settings.MEDIA_ROOT, a.arquivo.__unicode__()) str_size = ' - ' if os.path.isfile(filepath): size = os.path.getsize(filepath) if size < 1000: str_size = "{:10.3f}".format(size / 1000.0) else: str_size = "{:10.0f}".format(size / 1000.0) anexo = { 'nome': a.arquivo.__unicode__(), 'tamanho': str_size, 'palavras_chave': a.palavras_chave, 'path': os.path.join(settings.MEDIA_URL, a.arquivo.__unicode__()) } anexos.append(anexo) # Guardando os dados do repositório no grupo grupo['repositorios'].append({ 'id': r.id, 'data_ocorrencia': r.data_ocorrencia.isoformat(), 'estado': r.estado, 'ocorrencia': r.ocorrencia, 'servicos': r.servicos.all().order_by('nome'), 'memorandos': r.memorandos.all(), 'tickets': Ticket.objects.filter(repositorio=r).order_by('ticket'), 'patrimonios': r.patrimonios.all().order_by('ns'), 'anexos': anexos }) # carregando os dados de exibição dos filtros filtro_entidades = Entidade.objects.filter( id__in=TipoRepositorio.objects.all().values_list('entidade_id')) filtro_nomes = [] if param_entidade_id: # filtro_nomes = TipoRepositorio.objects.filter(entidade_id=param_entidade_id).values_list('nome', flat=True) # .order_by('nome') filtro_nomes = TipoRepositorio.objects.filter(entidade_id=param_entidade_id).values('nome')\ .annotate(dcount=Count('nome')).order_by('nome') filtro_naturezas = Natureza.objects.filter( id__in=Repositorio.objects.all().values_list('natureza_id')) filtro_servicos = Servico.objects.filter( id__in=Repositorio.objects.all().values_list('servicos__id')) template_name = "relatorio_repositorio" if pdf: return render_to_pdf_weasy('repositorio/%s.pdf' % template_name, {'grupos': grupos.itervalues()}, request=request, filename='%s.pdf' % template_name) return TemplateResponse( request, 'repositorio/%s.html' % template_name, { # Dados dos repositórios 'grupos': grupos.itervalues(), 'qtd_grupos': len(grupos), # Dados dos filtros 'filtro_entidades': filtro_entidades, 'filtro_nomes': filtro_nomes, 'filtro_naturezas': filtro_naturezas, 'filtro_servicos': filtro_servicos, # Parametros dos filtros 'entidade': param_entidade_id, 'natureza': param_natureza_id, 'servico': param_servico_id, 'nome': param_nome, 'data_de': param_data_de, 'data_ate': param_data_ate })
def item_modalidade(request, pdf=False): """ Relatório Administrativo - Relatório de Itens do orçamento por modalidade. """ if request.GET.get('termo') and request.GET.get('termo') != '0' and \ request.GET.get('modalidade') and request.GET.get('modalidade') != '0': termo_id = request.GET.get('termo') termo = get_object_or_404(Termo, id=termo_id) mod_id = request.GET.get('modalidade') mod = get_object_or_404(Modalidade, id=mod_id) itens = [] it_objs = Item.objects.filter(natureza_gasto__termo=termo, natureza_gasto__modalidade=mod) entidade_id = request.GET.get('entidade') marca_id = request.GET.get('marca') procedencia_id = request.GET.get('procedencia') if entidade_id > '0': it_objs = it_objs.filter(origemfapesp__item_outorga__entidade__id=entidade_id) for item in it_objs: pags = [] total = Decimal('0.0') pagamentos_qs = Pagamento.objects.filter(origem_fapesp__item_outorga=item)\ .select_related('conta_corrente', 'protocolo', 'protocolo__descricao2', 'protocolo__descricao2__entidade', 'protocolo__tipo_documento')\ .prefetch_related(Prefetch('auditoria_set', queryset=Auditoria.objects.select_related('tipo'))) for p in pagamentos_qs: patrimonios = [] pag = {'p': p, 'docs': p.auditoria_set.all(), 'patrimonios': ''} if marca_id > '0': if p.patrimonio_set.filter(equipamento__entidade_fabricante_id=marca_id).exists(): patrimonios = p.patrimonio_set.filter(equipamento__entidade_fabricante_id=marca_id) total += p.valor_fapesp elif procedencia_id > '0': if p.patrimonio_set.filter(entidade_procedencia_id=procedencia_id).exists(): patrimonios = p.patrimonio_set.filter(entidade_procedencia_id=procedencia_id) total += p.valor_fapesp else: patrimonios = p.patrimonio_set.all() total += p.valor_fapesp patrimonios = patrimonios.select_related('equipamento__entidade_fabricante') pag.update({'patrimonios': patrimonios}) pags.append(pag) # se for especificado o filtro de marca ou procedencia, somente # adiciona o item de outorga se tiver patrimonios com estes dados. if (marca_id == '0' and procedencia_id == '0') or len(pags) > 0: itens.append({'item': item, 'total': total, 'pagtos': pags}) if pdf: return render_to_pdf_weasy('outorga/por_item_modalidade.pdf', {'termo': termo, 'modalidade': mod, 'itens': itens}, request=request, filename='%s-%s.pdf' % (termo, mod.sigla)) else: return render(request, 'outorga/por_item_modalidade.html', {'termo': termo, 'modalidade': mod, 'itens': itens, 'entidade': entidade_id, 'marca': marca_id, 'procedencia': procedencia_id}) else: termos = Termo.objects.all() termo = request.GET.get('termo') modalidades = Modalidade.objects.all() modalidade = request.GET.get('modalidade') entidade = request.GET.get('entidade') entidadesProcedencia = Patrimonio.objects.all().values('entidade_procedencia') entidadesFabricante = Equipamento.objects.all().values('entidade_fabricante') entidadesItemOutorga = Item.objects.all().values('entidade') return render(request, 'outorga/termo_mod.html', {'termos': termos, 'termo': termo, 'modalidades': modalidades, 'modalidade': modalidade, 'entidadesProcedencia': Entidade.objects.filter(id__in=entidadesProcedencia), 'entidadesFabricante': Entidade.objects.filter(id__in=entidadesFabricante), 'entidadesItemOutorga': Entidade.objects.filter(id__in=entidadesItemOutorga), 'entidade': entidade})
def planejamento2(request, pdf=0): """ Relatório Técnico - Relatório de Serviços contratados por processo. """ entidade_id = request.GET.get('entidade') termo_id = request.GET.get('termo') if entidade_id and termo_id: entidade = Entidade.objects.filter(id=entidade_id) termo = Termo.objects.filter(id=termo_id) else: entidade = None termo = None beneficiado_id = request.GET.get('beneficiado') if beneficiado_id: beneficiado = Entidade.objects.filter(id=beneficiado_id) else: beneficiado = None descricoes_ids = request.GET.getlist('tiposervico') if entidade and termo: igeral = Decimal('0.0') tgeral = Decimal('0.0') if beneficiado: beneficiado = beneficiado[0] entidade = entidade[0] termo = termo[0] pagamentos = [] pgs = Pagamento.objects.filter(recurso__id__isnull=False, protocolo__termo=termo)\ .order_by('protocolo__num_documento').distinct() if beneficiado: pgs = pgs.filter( recurso__planejamento__beneficiado__entidade=beneficiado) if descricoes_ids: pgs = pgs.filter( recurso__planejamento__tipo__id__in=descricoes_ids) pgs = pgs.select_related('protocolo') for p in pgs: imposto = Decimal('0.0') total = Decimal('0.0') recursos = [] rcs = p.recurso_set.filter( planejamento__os__contrato__entidade=entidade) if beneficiado: rcs = rcs.filter( planejamento__beneficiado__entidade=beneficiado) if descricoes_ids: rcs = rcs.filter(planejamento__tipo__id__in=descricoes_ids) rcs = rcs.select_related('planejamento', 'planejamento__os', 'planejamento__os__contrato', 'planejamento__os__tipo', 'planejamento__tipo') for r in rcs: if beneficiado: b = r.planejamento.beneficiado_set.get( entidade=beneficiado) imposto += Decimal(str(r.quantidade))*r.valor_imposto_mensal*Decimal(str(b.porcentagem()/100)) \ if beneficiado else Decimal(str(r.quantidade))*r.valor_imposto_mensal total += Decimal(str(r.quantidade))*r.valor_mensal_sem_imposto*Decimal(str(b.porcentagem()/100)) \ if beneficiado else Decimal(str(r.quantidade))*r.valor_mensal_sem_imposto unitario_sem = r.valor_mensal_sem_imposto*Decimal(str(b.porcentagem()/100)) \ if beneficiado else r.valor_mensal_sem_imposto unitario_com = r.valor_imposto_mensal*Decimal(str(b.porcentagem()/100))\ if beneficiado else r.valor_imposto_mensal sub_sem = Decimal(str(r.quantidade)) * unitario_sem sub_com = Decimal(str(r.quantidade)) * unitario_com recursos.append({ 'os': r.planejamento.os, 'quantidade': r.quantidade, 'sem': unitario_sem, 'com': unitario_com, 'sub_sem': sub_sem, 'sub_com': sub_com, 'tipo': r.planejamento.tipo, 'referente': r.planejamento.referente, 'beneficiados': None if beneficiado else r.planejamento.beneficiado_set. all().select_related('entidade').order_by('quantidade') }) pagamentos.append({ 'nf': p.protocolo.num_documento, 'sem': total, 'com': imposto, 'recursos': recursos }) igeral += imposto tgeral += total if pdf: return render_to_pdf_weasy( 'rede/planejamento2.pdf', { 'beneficiado': beneficiado, 'entidade': entidade, 'termo': termo, 'pagamentos': pagamentos, 'sem': tgeral, 'com': igeral }, request=request, filename="servicos_contratados_por_processo.pdf") else: return TemplateResponse( request, 'rede/planejamento2.html', { 'beneficiado': beneficiado, 'entidade': entidade, 'termo': termo, 'pagamentos': pagamentos, 'sem': tgeral, 'com': igeral, 'servicos': descricoes_ids }) else: return TemplateResponse( request, 'rede/escolhe_entidade_termo.html', { 'entidades': Entidade.objects.filter( contrato__ordemdeservico__planejaaquisicaorecurso__id__isnull =False).distinct(), 'termos': Termo.objects.all(), 'beneficiados': Entidade.objects.all(), 'descricoes': TipoServico.objects.order_by('nome') })
def agenda(request, tipo=8, pdf=None): """ Relatório Administrativo - Relatório de Agenda """ agenda = request.GET.get('agenda') if agenda: entidades = [] tipos = TipoEntidade.objects.filter( id__in=EntidadeHistorico.objects.filter( ativo=True, entidade__agendado__agenda__id=agenda, entidade__agendado__ativo=True).values_list( 'tipo', flat=True).distinct().order_by('tipo')) for e in Entidade.objects.filter( entidadehistorico__ativo=True, entidade__isnull=True, agendado__ativo=True, agendado__agenda__id=agenda, entidadehistorico__tipo__id=tipo).distinct(): areas = [] for a in Identificacao.objects.filter(endereco__entidade=e).order_by('area').values_list('area', flat=True)\ .distinct(): area = { 'area': a, 'contatos': Identificacao.objects.filter(endereco__entidade=e, area=a).order_by('contato') } areas.append(area) entidades.append({'entidade': e, 'areas': areas}) for ef in e.entidade_em.filter(entidadehistorico__ativo=True, agendado__agenda__id=agenda, agendado__ativo=True): areas = [] for a in Identificacao.objects.filter(endereco__entidade=ef).order_by('area')\ .values_list('area', flat=True).distinct(): area = { 'area': a, 'contatos': Identificacao.objects.filter( endereco__entidade=ef, area=a).order_by('contato') } areas.append(area) entidades.append({ 'entidade': ef, 'filho': True, 'areas': areas }) if pdf: return render_to_pdf_weasy('identificacao/agenda.pdf', {'entidades': entidades}, request=request, filename='agenda.pdf') return TemplateResponse( request, 'identificacao/agenda.html', { 'entidades': entidades, 'tipo': int(tipo), 'tipos': tipos, 'agenda': agenda }) else: agendas = Agenda.objects.order_by('nome') return TemplateResponse(request, 'identificacao/agendas.html', {'agendas': agendas})
def simples(request, mem): m = get_object_or_404(MemorandoSimples, pk=mem) # return render_to_response('memorando/simples.pdf', {'m':m, 't':Termo.termo_ativo()}) return render_to_pdf_weasy('memorando/simples.pdf', {'m': m, 't': Termo.termo_ativo()}, request=request, filename='memorando_%s.pdf' % m.__unicode__())
def relatorio_repositorio(request, pdf=0): """ Relatório Administrativo - Relatório de dados de Repositório """ # Parametros de filtros param_entidade_id = request.GET.get('entidade') or request.POST.get('entidade') param_nome = request.GET.get('nome') or request.POST.get('nome') or '' param_natureza_id = request.GET.get('natureza') or request.POST.get('natureza') param_servico_id = request.GET.get('servico') or request.POST.get('servico') param_data_de = request.GET.get('data_de') or request.POST.get('data_de') or '' param_data_ate = request.GET.get('data_ate') or request.POST.get('data_ate') or '' grupos = OrderedDict() if param_entidade_id or param_natureza_id or param_servico_id: param_entidade_id = param_entidade_id or '0' param_natureza_id = param_natureza_id or '0' param_servico_id = param_servico_id or '0' repositorios = Repositorio.objects.all() # Filtrando os dados do repositório if param_entidade_id and param_entidade_id != '0': repositorios = repositorios.filter(tipo__entidade__id=param_entidade_id) if param_nome: repositorios = repositorios.filter(tipo__nome__iexact=param_nome) if param_natureza_id and param_natureza_id != '0': repositorios = repositorios.filter(natureza__id=param_natureza_id) if param_servico_id and param_servico_id != '0': repositorios = repositorios.filter(servicos__id=param_servico_id) if param_data_de: repositorios = repositorios.filter(data_ocorrencia__gte=param_data_de) if param_data_ate: repositorios = repositorios.filter(data_ocorrencia__lte=param_data_ate) repositorios = repositorios.select_related('tipo', 'tipo__entidade', 'natureza')\ .order_by('tipo__entidade__sigla', 'tipo__nome', 'natureza__nome', '-data_ocorrencia', 'estado__nome') # Repositórios agrupados por Tipo e Natureza for r in repositorios: grupo_chave = str(r.tipo_id) + '_' + str(r.natureza_id) if grupo_chave in grupos: grupo = grupos[grupo_chave] else: grupo = {'entidade': r.tipo.entidade, 'nome': r.tipo.nome, 'natureza': r.natureza.nome, 'repositorios': []} grupos.update({grupo_chave: grupo}) # Carregando os dados de tamanho dos arquivos dos anexos anexos = [] for a in Anexo.objects.filter(repositorio=r): if a.arquivo: filepath = os.path.join(settings.MEDIA_ROOT, a.arquivo.__unicode__()) str_size = ' - ' if os.path.isfile(filepath): size = os.path.getsize(filepath) if size < 1000: str_size = "{:10.3f}".format(size/1000.0) else: str_size = "{:10.0f}".format(size/1000.0) anexo = {'nome': a.arquivo.__unicode__(), 'tamanho': str_size, 'palavras_chave': a.palavras_chave, 'path': os.path.join(settings.MEDIA_URL, a.arquivo.__unicode__())} anexos.append(anexo) # Guardando os dados do repositório no grupo grupo['repositorios'].append({'id': r.id, 'data_ocorrencia': r.data_ocorrencia.isoformat(), 'estado': r.estado, 'ocorrencia': r.ocorrencia, 'servicos': r.servicos.all().order_by('nome'), 'memorandos': r.memorandos.all(), 'tickets': Ticket.objects.filter(repositorio=r).order_by('ticket'), 'patrimonios': r.patrimonios.all().order_by('ns'), 'anexos': anexos }) # carregando os dados de exibição dos filtros filtro_entidades = Entidade.objects.filter(id__in=TipoRepositorio.objects.all().values_list('entidade_id')) filtro_nomes = [] if param_entidade_id: # filtro_nomes = TipoRepositorio.objects.filter(entidade_id=param_entidade_id).values_list('nome', flat=True) # .order_by('nome') filtro_nomes = TipoRepositorio.objects.filter(entidade_id=param_entidade_id).values('nome')\ .annotate(dcount=Count('nome')).order_by('nome') filtro_naturezas = Natureza.objects.filter(id__in=Repositorio.objects.all().values_list('natureza_id')) filtro_servicos = Servico.objects.filter(id__in=Repositorio.objects.all().values_list('servicos__id')) template_name = "relatorio_repositorio" if pdf: return render_to_pdf_weasy('repositorio/%s.pdf' % template_name, {'grupos': grupos.itervalues()}, request=request, filename='%s.pdf' % template_name) return TemplateResponse(request, 'repositorio/%s.html' % template_name, { # Dados dos repositórios 'grupos': grupos.itervalues(), 'qtd_grupos': len(grupos), # Dados dos filtros 'filtro_entidades': filtro_entidades, 'filtro_nomes': filtro_nomes, 'filtro_naturezas': filtro_naturezas, 'filtro_servicos': filtro_servicos, # Parametros dos filtros 'entidade': param_entidade_id, 'natureza': param_natureza_id, 'servico': param_servico_id, 'nome': param_nome, 'data_de': param_data_de, 'data_ate': param_data_ate })
def relatorio_recursos_operacional(request, pdf=0, xls=0): """ Relatório Técnico - Relatório de recursos. Relatório operacional para visualização dos recursos. """ # Variável indicando o datacenter. Ex: 1 == terremark datacenter_id = Variavel.objects.get(nome=Variavel.DATACENTER_IDS) # Filtrando por Entidade planejamentos = PlanejaAquisicaoRecurso.objects.filter(os__contrato__entidade_id=datacenter_id.valor)\ .prefetch_related('beneficiado_set').select_related('os', 'os__estado', 'os__contrato', 'projeto', 'tipo')\ .order_by('projeto__nome', 'tipo__nome', 'os__numero') estado_selected = 0 # Filtro selecionado do estado da OS estado = request.GET.get('estado') if estado and estado > '0': estado_selected = int(request.GET.get('estado')) planejamentos = planejamentos.filter(os__estado__id=estado_selected) # Dados para montar o filtro dos estados filtro_estados = EstadoOS.objects.all() # Filtro selecionado do beneficiado beneficiado_selected = 0 beneficiado = request.GET.get('beneficiado') if beneficiado and beneficiado > '0': beneficiado_selected = int(request.GET.get('beneficiado')) # Restringindo a lista de dados do filtro de beneficiados de acordo com o # filtro de Estado da OS selecionado if estado and estado > '0': filtro_beneficiados = Beneficiado.objects.filter(planejamento__os__estado__id=estado_selected)\ .distinct('entidade__nome').order_by('entidade__nome').select_related('entidade') else: filtro_beneficiados = Beneficiado.objects.all().distinct('entidade__nome').order_by('entidade__nome')\ .select_related('entidade') # Montando os dados de contexto context_dict = [] for p in planejamentos: ctx_beneficiados = [] # Filtra os beneficiados, se for informado o parametro no REQUEST beneficiados = [] if beneficiado_selected != 0: beneficiados = p.beneficiado_set.filter( entidade_id=beneficiado_selected) else: beneficiados = p.beneficiado_set.all() beneficiados = beneficiados.select_related('entidade', 'estado') for b in beneficiados: beneficiado = { 'id': b.id, 'entidade': b.entidade.nome, 'quantidade': b.quantidade, 'estado': b.estado } ctx_beneficiados.append(beneficiado) if beneficiado_selected == 0 or len(ctx_beneficiados) > 0: ctx_planejamento = { 'id': p.id, 'beneficiados': ctx_beneficiados, 'contrato': p.os.contrato, 'os': p.os, 'classificacao': p.projeto, 'descricao': p.tipo, 'referente': p.referente, 'entidade': '', 'quantidade': p.quantidade, } context_dict.append(ctx_planejamento) if request.GET.get('acao') and request.GET.get('acao') == '2': # Export para Excel/XLS beneficiados = Beneficiado.objects.all() if beneficiado_selected != 0: beneficiados = Beneficiado.objects.filter( entidade_id=beneficiado_selected) if estado and estado > '0': beneficiados = beneficiados.filter( planejamento__os__estado__id=estado_selected) beneficiados = beneficiados.order_by('planejamento__projeto__nome', 'planejamento__tipo__nome', 'planejamento__os__numero') dataset = RecursoOperacionalResource().export(queryset=beneficiados) response = HttpResponse( dataset.xls, content_type='application/vnd.ms-excel;charset=utf-8') response[ 'Content-Disposition'] = "attachment; filename=recursos_tecnicos.xls" return response elif request.GET.get('acao') and request.GET.get('acao') == '1': # Export para PDF return render_to_pdf_weasy( template_src='rede/recurso_operacional.pdf', context_dict={'planejamentos': context_dict}, request=request, filename='recursos_tecnicos.pdf') return TemplateResponse( request, 'rede/recurso_operacional.html', { 'planejamentos': context_dict, 'filtro_estados': filtro_estados, 'estado': estado, 'estado_selected': estado_selected, 'filtro_beneficiados': filtro_beneficiados, 'beneficiado_selected': beneficiado_selected, 'beneficiado': beneficiado })
def relatorio_recursos_operacional(request, pdf=0, xls=0): """ Relatório Técnico - Relatório de recursos. Relatório operacional para visualização dos recursos. """ # Variável indicando o datacenter. Ex: 1 == terremark datacenter_id = Variavel.objects.get(nome=Variavel.DATACENTER_IDS) # Filtrando por Entidade planejamentos = PlanejaAquisicaoRecurso.objects.filter(os__contrato__entidade_id=datacenter_id.valor)\ .prefetch_related('beneficiado_set').select_related('os', 'os__estado', 'os__contrato', 'projeto', 'tipo')\ .order_by('projeto__nome', 'tipo__nome', 'os__numero') estado_selected = 0 # Filtro selecionado do estado da OS estado = request.GET.get('estado') if estado and estado > '0': estado_selected = int(request.GET.get('estado')) planejamentos = planejamentos.filter(os__estado__id=estado_selected) # Dados para montar o filtro dos estados filtro_estados = EstadoOS.objects.all() # Filtro selecionado do beneficiado beneficiado_selected = 0 beneficiado = request.GET.get('beneficiado') if beneficiado and beneficiado > '0': beneficiado_selected = int(request.GET.get('beneficiado')) # Restringindo a lista de dados do filtro de beneficiados de acordo com o # filtro de Estado da OS selecionado if estado and estado > '0': filtro_beneficiados = Beneficiado.objects.filter(planejamento__os__estado__id=estado_selected)\ .distinct('entidade__nome').order_by('entidade__nome').select_related('entidade') else: filtro_beneficiados = Beneficiado.objects.all().distinct('entidade__nome').order_by('entidade__nome')\ .select_related('entidade') # Montando os dados de contexto context_dict = [] for p in planejamentos: ctx_beneficiados = [] # Filtra os beneficiados, se for informado o parametro no REQUEST beneficiados = [] if beneficiado_selected != 0: beneficiados = p.beneficiado_set.filter(entidade_id=beneficiado_selected) else: beneficiados = p.beneficiado_set.all() beneficiados = beneficiados.select_related('entidade', 'estado') for b in beneficiados: beneficiado = {'id': b.id, 'entidade': b.entidade.nome, 'quantidade': b.quantidade, 'estado': b.estado} ctx_beneficiados.append(beneficiado) if beneficiado_selected == 0 or len(ctx_beneficiados) > 0: ctx_planejamento = {'id': p.id, 'beneficiados': ctx_beneficiados, 'contrato': p.os.contrato, 'os': p.os, 'classificacao': p.projeto, 'descricao': p.tipo, 'referente': p.referente, 'entidade': '', 'quantidade': p.quantidade, } context_dict.append(ctx_planejamento) if request.GET.get('acao') and request.GET.get('acao') == '2': # Export para Excel/XLS beneficiados = Beneficiado.objects.all() if beneficiado_selected != 0: beneficiados = Beneficiado.objects.filter(entidade_id=beneficiado_selected) if estado and estado > '0': beneficiados = beneficiados.filter(planejamento__os__estado__id=estado_selected) beneficiados = beneficiados.order_by('planejamento__projeto__nome', 'planejamento__tipo__nome', 'planejamento__os__numero') dataset = RecursoOperacionalResource().export(queryset=beneficiados) response = HttpResponse(dataset.xls, content_type='application/vnd.ms-excel;charset=utf-8') response['Content-Disposition'] = "attachment; filename=recursos_tecnicos.xls" return response elif request.GET.get('acao') and request.GET.get('acao') == '1': # Export para PDF return render_to_pdf_weasy(template_src='rede/recurso_operacional.pdf', context_dict={'planejamentos': context_dict}, request=request, filename='recursos_tecnicos.pdf') return TemplateResponse(request, 'rede/recurso_operacional.html', {'planejamentos': context_dict, 'filtro_estados': filtro_estados, 'estado': estado, 'estado_selected': estado_selected, 'filtro_beneficiados': filtro_beneficiados, 'beneficiado_selected': beneficiado_selected, 'beneficiado': beneficiado})
def planejamento2(request, pdf=0): """ Relatório Técnico - Relatório de Serviços contratados por processo. """ entidade_id = request.GET.get('entidade') termo_id = request.GET.get('termo') if entidade_id and termo_id: entidade = Entidade.objects.filter(id=entidade_id) termo = Termo.objects.filter(id=termo_id) else: entidade = None termo = None beneficiado_id = request.GET.get('beneficiado') if beneficiado_id: beneficiado = Entidade.objects.filter(id=beneficiado_id) else: beneficiado = None descricoes_ids = request.GET.getlist('tiposervico') if entidade and termo: igeral = Decimal('0.0') tgeral = Decimal('0.0') if beneficiado: beneficiado = beneficiado[0] entidade = entidade[0] termo = termo[0] pagamentos = [] pgs = Pagamento.objects.filter(recurso__id__isnull=False, protocolo__termo=termo)\ .order_by('protocolo__num_documento').distinct() if beneficiado: pgs = pgs.filter(recurso__planejamento__beneficiado__entidade=beneficiado) if descricoes_ids: pgs = pgs.filter(recurso__planejamento__tipo__id__in=descricoes_ids) pgs = pgs.select_related('protocolo') for p in pgs: imposto = Decimal('0.0') total = Decimal('0.0') recursos = [] rcs = p.recurso_set.filter(planejamento__os__contrato__entidade=entidade) if beneficiado: rcs = rcs.filter(planejamento__beneficiado__entidade=beneficiado) if descricoes_ids: rcs = rcs.filter(planejamento__tipo__id__in=descricoes_ids) rcs = rcs.select_related('planejamento', 'planejamento__os', 'planejamento__os__contrato', 'planejamento__os__tipo', 'planejamento__tipo') for r in rcs: if beneficiado: b = r.planejamento.beneficiado_set.get(entidade=beneficiado) imposto += Decimal(str(r.quantidade))*r.valor_imposto_mensal*Decimal(str(b.porcentagem()/100)) \ if beneficiado else Decimal(str(r.quantidade))*r.valor_imposto_mensal total += Decimal(str(r.quantidade))*r.valor_mensal_sem_imposto*Decimal(str(b.porcentagem()/100)) \ if beneficiado else Decimal(str(r.quantidade))*r.valor_mensal_sem_imposto unitario_sem = r.valor_mensal_sem_imposto*Decimal(str(b.porcentagem()/100)) \ if beneficiado else r.valor_mensal_sem_imposto unitario_com = r.valor_imposto_mensal*Decimal(str(b.porcentagem()/100))\ if beneficiado else r.valor_imposto_mensal sub_sem = Decimal(str(r.quantidade)) * unitario_sem sub_com = Decimal(str(r.quantidade)) * unitario_com recursos.append({'os': r.planejamento.os, 'quantidade': r.quantidade, 'sem': unitario_sem, 'com': unitario_com, 'sub_sem': sub_sem, 'sub_com': sub_com, 'tipo': r.planejamento.tipo, 'referente': r.planejamento.referente, 'beneficiados': None if beneficiado else r.planejamento.beneficiado_set.all() .select_related('entidade').order_by('quantidade')}) pagamentos.append({'nf': p.protocolo.num_documento, 'sem': total, 'com': imposto, 'recursos': recursos}) igeral += imposto tgeral += total if pdf: return render_to_pdf_weasy('rede/planejamento2.pdf', {'beneficiado': beneficiado, 'entidade': entidade, 'termo': termo, 'pagamentos': pagamentos, 'sem': tgeral, 'com': igeral}, request=request, filename="servicos_contratados_por_processo.pdf") else: return TemplateResponse(request, 'rede/planejamento2.html', {'beneficiado': beneficiado, 'entidade': entidade, 'termo': termo, 'pagamentos': pagamentos, 'sem': tgeral, 'com': igeral, 'servicos': descricoes_ids}) else: return TemplateResponse(request, 'rede/escolhe_entidade_termo.html', {'entidades': Entidade.objects.filter(contrato__ordemdeservico__planejaaquisicaorecurso__id__isnull=False).distinct(), 'termos': Termo.objects.all(), 'beneficiados': Entidade.objects.all(), 'descricoes': TipoServico.objects.order_by('nome')})