Beispiel #1
0
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})
Beispiel #2
0
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
        })
Beispiel #3
0
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
    })
Beispiel #4
0
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')
Beispiel #5
0
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})
Beispiel #6
0
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))
Beispiel #7
0
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__())
Beispiel #8
0
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})
Beispiel #9
0
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})
Beispiel #10
0
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})
Beispiel #11
0
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')
Beispiel #12
0
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})
Beispiel #13
0
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))
Beispiel #14
0
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})
Beispiel #15
0
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
        })
Beispiel #16
0
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})
Beispiel #17
0
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')
            })
Beispiel #18
0
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})
Beispiel #19
0
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__())
Beispiel #20
0
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
                            })
Beispiel #21
0
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
        })
Beispiel #22
0
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})
Beispiel #23
0
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')})