<commit_before># -* coding: utf-8 -*-
from django.core.exceptions import PermissionDenied
from django.contrib.auth.models import Group
from django.contrib import admin
from django.contrib.auth.decorators import permission_required, login_required
from django.db.models import Q, Max, Sum
from django.http import Http404, HttpResponse, HttpResponseNotAllowed
from django.shortcuts import render_to_response, get_object_or_404
from django.template import Context, loader, RequestContext
from django.views.decorators.http import require_safe, require_POST

from decimal import Decimal
import json as simplejson
from datetime import datetime as dtime
from datetime import date
import math
import logging

from outorga.models import Modalidade, Outorga, Item, Termo, OrigemFapesp, Natureza_gasto, Acordo
from protocolo.models import Protocolo
from configuracao.models import Cheque
from identificacao.models import Entidade, Identificacao
from rede.models import Recurso, PlanejaAquisicaoRecurso
from utils.functions import pega_lista, formata_moeda, render_to_pdf, render_to_pdf_weasy
from operator import itemgetter
from models import *

# Get an instance of a logger
logger = logging.getLogger(__name__)


@login_required
@require_safe
def ajax_termo_escolhido(request):
    termo_id = request.GET.get('termo_id')
    t = None
    try:
        t = Termo.objects.get(id=termo_id)
    except Termo.DoesNotExist:
        pass

    retorno = {}
    if t:
        protocolos = Protocolo.objects.filter(termo=t).order_by('tipo_documento', 'num_documento', 'data_vencimento')
        origens = OrigemFapesp.objects.filter(item_outorga__natureza_gasto__termo=t).order_by('acordo', 'item_outorga')
        prot = []
        for p in protocolos:
            prot.append({'pk':p.id, 'valor':p.__unicode__()})
        orig = []
        for o in origens:
            orig.append({'pk':o.id, 'valor':'%s - %s' % (o.acordo, o.item_outorga)})

        retorno = {'protocolos':prot, 'origens':orig}
    json = simplejson.dumps(retorno)
    return HttpResponse(json, content_type="application/json")


@login_required
@require_safe
def ajax_numero_escolhido(request):
    termo_id = request.GET.get('termo_id')
    numero = request.GET.get('numero')
    t = None
    if termo_id:
        try:
            t = Termo.objects.get(id=termo_id)
        except Termo.DoesNotExist:
            pass

    retorno = {}
    if t:
        protocolos = Protocolo.objects.filter(termo=t, num_documento__icontains=numero).order_by('tipo_documento', 'num_documento', 'data_vencimento')
    else:
        protocolos = Protocolo.objects.filter(num_documento__icontains=numero).order_by('tipo_documento', 'num_documento', 'data_vencimento')
    prot = []
    for p in protocolos:
        prot.append({'pk':p.id, 'valor':p.__unicode__()})
    retorno = {'protocolos':prot}
    json = simplejson.dumps(retorno)
    return HttpResponse(json, content_type="application/json")


@login_required
@require_safe
def ajax_codigo_escolhido(request):
    codigo = request.GET.get('codigo')

    retorno = {}

    contas = ExtratoCC.objects.filter(cod_oper__icontains=codigo)
    ccs = []

    for c in contas:
        ccs.append({'pk':c.id, 'valor':c.__unicode__()})

    retorno = {'ccs': ccs}
    json = simplejson.dumps(retorno)

    return HttpResponse(json, content_type="application/json")


def _estrutura_pagamentos(pagamentos):
    """
    Função para montar a estrutura de dados utilizado nos relatórios de pagamentos
    """
    total = pagamentos.aggregate(Sum('valor_fapesp'))
    por_modalidade = pagamentos.values('origem_fapesp__item_outorga__natureza_gasto').order_by('origem_fapesp__item_outorga__natureza_gasto').annotate(Sum('valor_fapesp'))
    pm = []
    for p in por_modalidade:
        pg = {}
        try:
            ng = Natureza_gasto.objects.get(id=p['origem_fapesp__item_outorga__natureza_gasto'])
            pg['modalidade'] = ng.modalidade.nome
            pg['total'] = formata_moeda(p['valor_fapesp__sum'], ',')
            pm.append(pg)
        except Natureza_gasto.DoesNotExist:
            pass

    pg = []
    for p in pagamentos.filter(conta_corrente__isnull=False).order_by('origem_fapesp__item_outorga__natureza_gasto__modalidade__sigla').select_related('conta_corrente', 'protocolo', 'protocolo__tipo_documento', 'origem_fapesp__item_outorga__natureza_gasto__modalidade'):
        pp = {}
        pp['data'] = p.conta_corrente.data_oper.strftime('%d/%m/%Y')
        pp['termo'] = p.protocolo.termo.__unicode__()
        pp['oper'] = p.conta_corrente.cod_oper
        if p.protocolo.tipo_documento.nome.lower().find('anexo') == 0:
            pp['documento'] = '%s %s' % (p.protocolo.tipo_documento.nome, p.protocolo.num_documento)
        else:
            pp['documento'] = p.protocolo.num_documento
        pp['valor'] = formata_moeda(p.valor_fapesp, ',')
        try:
            pp['modalidade'] = p.origem_fapesp.item_outorga.natureza_gasto.modalidade.sigla
        except: pp['modalidade'] = ''
        pag = 0
        ane = 0
        out = 0
        for a in p.auditoria_set.all().select_related('tipo'):
            if u'Comprovante de pag' in a.tipo.nome:
                pag = a
            elif u'Anexo' in a.tipo.nome:
                ane = a
            else: out = a

        if pag:
            pp['parcial'] = pag.parcial
            pp['pagina'] = pag.pagina
        elif ane:
            pp['parcial'] = ane.parcial
            pp['pagina'] = ane.pagina
        elif out:
            pp['parcial'] = out.parcial
            pp['pagina'] = out.pagina

        pg.append(pp)

    return {'pg':sorted(pg, key=itemgetter('modalidade', 'pagina')), 'pm':pm, 'total':total}


@login_required
@require_safe
def ajax_parcial_pagina(request):
    orig = request.GET.get('orig_id')
    origem = get_object_or_404(OrigemFapesp, pk=orig)
    a = Auditoria.objects.filter(pagamento__origem_fapesp__item_outorga__natureza_gasto=origem.item_outorga.natureza_gasto).aggregate(Max('parcial'))
    parcial = a['parcial__max']
    a = Auditoria.objects.filter(pagamento__origem_fapesp__item_outorga__natureza_gasto=origem.item_outorga.natureza_gasto, parcial=parcial).aggregate(Max('pagina'))
    pagina = a['pagina__max']
    retorno = {'parcial':parcial, 'pagina':pagina+1}
    json = simplejson.dumps(retorno)

    return HttpResponse(json, content_type="application/json")


@login_required
@require_safe
def ajax_nova_pagina(request):
    origem_id = request.GET.get('orig_id')
    parcial = request.GET.get('parcial')

    origem = get_object_or_404(OrigemFapesp, pk=origem_id)
    pagina = Auditoria.objects.filter(pagamento__origem_fapesp__item_outorga__natureza_gasto=origem.item_outorga.natureza_gasto, parcial=parcial).aggregate(Max('pagina'))
    pagina = 0 if pagina['pagina__max'] is None else pagina['pagina__max']

    retorno = pagina+1
    return HttpResponse(simplejson.dumps(retorno), content_type="application/json")


@login_required
@require_safe
def pagamentos_mensais(request, pdf=False):
    if request.GET.get('ano'):
        ano = int(request.GET.get('ano'))
        mes = int(request.GET.get('mes'))
        pagamentos = Pagamento.objects.filter(conta_corrente__data_oper__month=mes,conta_corrente__data_oper__year=ano)
        dados = _estrutura_pagamentos(pagamentos)
<commit_msg>Resolvido conflito com revisão anterior do Rogério<commit_after># -* coding: utf-8 -*-
from django.core.exceptions import PermissionDenied
from django.contrib.auth.models import Group
from django.contrib import admin
from django.contrib.auth.decorators import permission_required, login_required
from django.db.models import Q, Max, Sum
from django.http import Http404, HttpResponse, HttpResponseNotAllowed
from django.shortcuts import render_to_response, get_object_or_404
from django.template import Context, loader, RequestContext
from django.views.decorators.http import require_safe, require_POST

from decimal import Decimal
import json as simplejson
from datetime import datetime as dtime
from datetime import date
import math
import logging

from outorga.models import Modalidade, Outorga, Item, Termo, OrigemFapesp, Natureza_gasto, Acordo
from protocolo.models import Protocolo
from configuracao.models import Cheque
from identificacao.models import Entidade, Identificacao
from rede.models import Recurso, PlanejaAquisicaoRecurso
from utils.functions import pega_lista, formata_moeda, render_to_pdf, render_to_pdf_weasy
from operator import itemgetter
from models import *

# Get an instance of a logger
logger = logging.getLogger(__name__)


@login_required
@require_safe
def ajax_termo_escolhido(request):
    termo_id = request.GET.get('termo_id')
    t = None
    try:
        t = Termo.objects.get(id=termo_id)
    except Termo.DoesNotExist:
        pass

    retorno = {}
    if t:
        protocolos = Protocolo.objects.filter(termo=t).order_by('tipo_documento', 'num_documento', 'data_vencimento')
        origens = OrigemFapesp.objects.filter(item_outorga__natureza_gasto__termo=t).order_by('acordo', 'item_outorga')
        prot = []
        for p in protocolos:
            prot.append({'pk':p.id, 'valor':p.__unicode__()})
        orig = []
        for o in origens:
            orig.append({'pk':o.id, 'valor':'%s - %s' % (o.acordo, o.item_outorga)})

        retorno = {'protocolos':prot, 'origens':orig}
    json = simplejson.dumps(retorno)
    return HttpResponse(json, content_type="application/json")


@login_required
@require_safe
def ajax_numero_escolhido(request):
    termo_id = request.GET.get('termo_id')
    numero = request.GET.get('numero')
    t = None
    if termo_id:
        try:
            t = Termo.objects.get(id=termo_id)
        except Termo.DoesNotExist:
            pass

    retorno = {}
    if t:
        protocolos = Protocolo.objects.filter(termo=t, num_documento__icontains=numero).order_by('tipo_documento', 'num_documento', 'data_vencimento')
    else:
        protocolos = Protocolo.objects.filter(num_documento__icontains=numero).order_by('tipo_documento', 'num_documento', 'data_vencimento')
    prot = []
    for p in protocolos:
        prot.append({'pk':p.id, 'valor':p.__unicode__()})
    retorno = {'protocolos':prot}
    json = simplejson.dumps(retorno)
    return HttpResponse(json, content_type="application/json")


@login_required
@require_safe
def ajax_codigo_escolhido(request):
    codigo = request.GET.get('codigo')

    retorno = {}

    contas = ExtratoCC.objects.filter(cod_oper__icontains=codigo)
    ccs = []

    for c in contas:
        ccs.append({'pk':c.id, 'valor':c.__unicode__()})

    retorno = {'ccs': ccs}
    json = simplejson.dumps(retorno)

    return HttpResponse(json, content_type="application/json")


def _estrutura_pagamentos(pagamentos):
    """
    Função para montar a estrutura de dados utilizado nos relatórios de pagamentos
    """
    total = pagamentos.aggregate(Sum('valor_fapesp'))
    por_modalidade = pagamentos.values('origem_fapesp__item_outorga__natureza_gasto').order_by('origem_fapesp__item_outorga__natureza_gasto').annotate(Sum('valor_fapesp'))
    pm = []
    for p in por_modalidade:
        pg = {}
        try:
            ng = Natureza_gasto.objects.get(id=p['origem_fapesp__item_outorga__natureza_gasto'])
            pg['modalidade'] = ng.modalidade.nome
            pg['total'] = formata_moeda(p['valor_fapesp__sum'], ',')
            pm.append(pg)
        except Natureza_gasto.DoesNotExist:
            pass

    pg = []
    for p in pagamentos.filter(conta_corrente__isnull=False).order_by('origem_fapesp__item_outorga__natureza_gasto__modalidade__sigla').select_related('conta_corrente', 'protocolo', 'protocolo__tipo_documento', 'origem_fapesp__item_outorga__natureza_gasto__modalidade'):
        pp = {}
        pp['data'] = p.conta_corrente.data_oper.strftime('%d/%m/%Y')
        pp['termo'] = p.protocolo.termo.__unicode__()
        pp['oper'] = p.conta_corrente.cod_oper
        if p.protocolo.tipo_documento.nome.lower().find('anexo') == 0:
            pp['documento'] = '%s %s' % (p.protocolo.tipo_documento.nome, p.protocolo.num_documento)
        else:
            pp['documento'] = p.protocolo.num_documento
        pp['valor'] = formata_moeda(p.valor_fapesp, ',')
        try:
            pp['modalidade'] = p.origem_fapesp.item_outorga.natureza_gasto.modalidade.sigla
        except: pp['modalidade'] = ''
        pag = 0
        ane = 0
        out = 0
        for a in p.auditoria_set.all().select_related('tipo'):
            if u'Comprovante de pag' in a.tipo.nome:
                pag = a
            elif u'Anexo' in a.tipo.nome:
                ane = a
            else: out = a

        if pag:
            pp['parcial'] = pag.parcial
            pp['pagina'] = pag.pagina
        elif ane:
            pp['parcial'] = ane.parcial
            pp['pagina'] = ane.pagina
        elif out:
            pp['parcial'] = out.parcial
            pp['pagina'] = out.pagina

        pg.append(pp)

    return {'pg':sorted(pg, key=itemgetter('modalidade', 'pagina')), 'pm':pm, 'total':total}

@login_required
@require_safe
def ajax_parcial_pagina(request):
    orig = request.GET.get('orig_id')
    origem = get_object_or_404(OrigemFapesp, pk=orig)
    a = Auditoria.objects.filter(pagamento__origem_fapesp__item_outorga__natureza_gasto=origem.item_outorga.natureza_gasto).aggregate(Max('parcial'))
    parcial = a['parcial__max'] or 1
    a = Auditoria.objects.filter(pagamento__origem_fapesp__item_outorga__natureza_gasto=origem.item_outorga.natureza_gasto, parcial=parcial).aggregate(Max('pagina'))
    pagina = a['pagina__max'] or 0
    retorno = {'parcial':parcial, 'pagina':pagina+1}
    json = simplejson.dumps(retorno)

    return HttpResponse(json, content_type="application/json")


@login_required
@require_safe
def ajax_nova_pagina(request):
    origem_id = request.GET.get('orig_id')
    parcial = request.GET.get('parcial')

    origem = get_object_or_404(OrigemFapesp, pk=origem_id)
    pagina = Auditoria.objects.filter(pagamento__origem_fapesp__item_outorga__natureza_gasto=origem.item_outorga.natureza_gasto, parcial=parcial).aggregate(Max('pagina'))
    pagina = 0 if pagina['pagina__max'] is None else pagina['pagina__max']

    retorno = pagina+1
    return HttpResponse(simplejson.dumps(retorno), content_type="application/json")


@login_required
@require_safe
def pagamentos_mensais(request, pdf=False):
    if request.GET.get('ano'):
        ano = int(request.GET.get('ano'))
        mes = int(request.GET.get('mes'))
        pagamentos = Pagamento.objects.filter(conta_corrente__data_oper__month=mes,conta_corrente__data_oper__year=ano)
        dados = _estrutura_pagamentos(pagamentos)

{'fraction_non_alphanumeric': 0.11543184609087188, 'fraction_numerical': 0.0028653295128939827, 'mean_word_length': 3.7563270603504217, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3350219', 'n_tokens_mistral': 5152, 'n_tokens_neox': 5051, 'n_words': 862}