# Create your views here.
#--Importa la libreria de sistema operativo de Python
import os
#--Importa la biblioteca de tiempo de DJANGO
import time
#--Importa la biblioteca de manejo de Oracle
import cx_Oracle
#--Importa la biblioteca de manejo de Http
from django.http import HttpResponse
#--Importa el decorador de autenticacion
from django.views.decorators.csrf import csrf_exempt
#--Importa las bibliotecas de manejo de JSON para REST
from rest_framework.renderers import JSONRenderer
from rest_framework.parsers import JSONParser
from rest_framework import status
from rest_framework.decorators import api_view
from rest_framework.response import Response
#--Importa los modelos que necesita para la ejecucion
from campo_cuenta.models import Campo_Cuenta
from grupos.models import Grupo
#--Importa el serializador
from campo_cuenta.serializers import *
#--Clase que recibe un HttpResponse y devuelve el contenido en JSON
class JSONResponse(HttpResponse):
    """
    An HttpResponse that renders it's content into JSON.
    """
    def __init__(self, data, **kwargs):
        content = JSONRenderer().render(data)
        kwargs['content_type'] = 'application/json'
        super(JSONResponse, self).__init__(content, **kwargs)

#--Metodo para accion LIST
#--Entrada:
#---request: Una peticion http que puede ser GET o POST
#--Salida:
#---JSON con respuesta
@csrf_exempt
def campocuenta_list(request):
    #--Revisa si la peticion es POST o GET
    if request.method == 'GET':
        #--Captura los datos para el filtro
        id_grupo = request.POST.get('id_grupo')
        id_campo_cuenta = request.POST.get('id_campo_cuenta')
        id_input = request.POST.get('input')
        #--Contenedor para respuesta JSON
        contenedor=[]
        if id_grupo is None:
            if id_campo_cuenta is None:
                actividades = sorted(Campo_Cuenta.objects.all(), key=lambda a: a.valor_descripcion)
            else:
                actividades = Campo_Cuenta.objects.filter(id_campo_cuenta=id_campo_cuenta)
            for actividad in actividades:
                info={}
                info["id_campo_cuenta"]=actividad.id_campo_cuenta
                info["id_grupo"]=actividad.id_grupo.id_grupo
                info["nombre_gru"]=actividad.id_grupo.nombre
                info["campo_gru"]=actividad.id_grupo.campo
                info["valor"]=actividad.valor
                info["catalogo"]=actividad.catalogo
                info["auxiliar"]=actividad.auxiliar
                info["valor_descripcion"]=actividad.valor_descripcion
                info["tercero"]=actividad.tercero
                contenedor.append(info)
        elif id_input is not None:
            actividades = sorted(Concepto.objects.filter(valor__istartswith=id_input), key=lambda a: a.nombre)
            for actividad in actividades:
                info={}
                info["id_campo_cuenta"]=actividad.id_campo_cuenta
                info["id_grupo"]=actividad.id_grupo.id_grupo
                info["nombre_gru"]=actividad.id_grupo.nombre
                info["campo_gru"]=actividad.id_grupo.campo
                info["valor"]=actividad.valor
                info["catalogo"]=actividad.catalogo
                info["auxiliar"]=actividad.auxiliar
                info["valor_descripcion"]=actividad.valor_descripcion
                info["tercero"]=actividad.tercero
                contenedor.append(info)
        else:
            if id_campo_cuenta is None:
                actividades = sorted(Campo_Cuenta.objects.filter(id_grupo=id_grupo), key=lambda a: a.valor_descripcion)
            else:
                actividades = sorted(Campo_Cuenta.objects.filter(id_grupo=id_grupo,id_campo_cuenta=id_campo_cuenta), key=lambda a: a.valor_descripcion)
            for actividad in actividades:
                info={}
                info["id_campo_cuenta"]=actividad.id_campo_cuenta
                info["id_grupo"]=actividad.id_grupo.id_grupo
                info["nombre_gru"]=actividad.id_grupo.nombre
                info["campo_gru"]=actividad.id_grupo.campo
                info["valor"]=actividad.valor
                info["catalogo"]=actividad.catalogo
                info["auxiliar"]=actividad.auxiliar
                info["valor_descripcion"]=actividad.valor_descripcion
                info["tercero"]=actividad.tercero
                contenedor.append(info)
        serializer = CampoCuentaSerializer(actividades, many=True)
        response={}
        total={}
        response['status']=0
        response['totalRows']=len(actividades)
        response['startRow']=0
        response['endRow']=len(actividades)-1
        response['data']=contenedor
        total['response']=response
        return JSONResponse(total)
    elif request.method == 'POST':
        id_grupo = request.POST.get('id_grupo')
        id_campo_cuenta = request.POST.get('id_campo_cuenta')
        id_input = request.POST.get('input')
        contenedor=[]
        if id_grupo is None:
            if id_campo_cuenta is None:
                actividades = sorted(Campo_Cuenta.objects.all(), key=lambda a: a.valor_descripcion)
            else:
                actividades = Campo_Cuenta.objects.filter(id_campo_cuenta=id_campo_cuenta)
            for actividad in actividades:
                info={}
                info["id_campo_cuenta"]=actividad.id_campo_cuenta
                info["id_grupo"]=actividad.id_grupo.id_grupo
                info["nombre_gru"]=actividad.id_grupo.nombre
                info["campo_gru"]=actividad.id_grupo.campo
                info["valor"]=actividad.valor
                info["catalogo"]=actividad.catalogo
                info["auxiliar"]=actividad.auxiliar
                info["valor_descripcion"]=actividad.valor_descripcion
                info["tercero"]=actividad.tercero
                contenedor.append(info)
        elif id_input is not None:
            actividades = sorted(Concepto.objects.filter(valor__istartswith=id_input), key=lambda a: a.nombre)
            for actividad in actividades:
                info={}
                info["id_campo_cuenta"]=actividad.id_campo_cuenta
                info["id_grupo"]=actividad.id_grupo.id_grupo
                info["nombre_gru"]=actividad.id_grupo.nombre
                info["campo_gru"]=actividad.id_grupo.campo
                info["valor"]=actividad.valor
                info["catalogo"]=actividad.catalogo
                info["auxiliar"]=actividad.auxiliar
                info["valor_descripcion"]=actividad.valor_descripcion
                info["tercero"]=actividad.tercero
                contenedor.append(info)
        else:
            if id_campo_cuenta is None:
                actividades = sorted(Campo_Cuenta.objects.filter(id_grupo=id_grupo), key=lambda a: a.valor_descripcion)
            else:
                actividades = sorted(Campo_Cuenta.objects.filter(id_grupo=id_grupo,id_campo_cuenta=id_campo_cuenta), key=lambda a: a.valor_descripcion)
            for actividad in actividades:
                info={}
                info["id_campo_cuenta"]=actividad.id_campo_cuenta
                info["id_grupo"]=actividad.id_grupo.id_grupo
                info["nombre_gru"]=actividad.id_grupo.nombre
                info["campo_gru"]=actividad.id_grupo.campo
                info["valor"]=actividad.valor
                info["catalogo"]=actividad.catalogo
                info["auxiliar"]=actividad.auxiliar
                info["valor_descripcion"]=actividad.valor_descripcion
                info["tercero"]=actividad.tercero
                contenedor.append(info)
        serializer = CampoCuentaSerializer(actividades, many=True)
        response={}
        total={}
        response['status']=0
        response['totalRows']=len(actividades)
        response['startRow']=0
        response['endRow']=len(actividades)-1
        response['data']=contenedor
        total['response']=response
        return JSONResponse(total)

@csrf_exempt
def campocuenta_ingresa(request):
    if request.method == 'GET':
        id_grupo = request.GET.get('id_grupo')
        catalogo = request.GET.get('catalogo')
        auxiliar = request.GET.get('auxiliar')
        valor = request.GET.get('valor')
        valor_descripcion = request.GET.get('valor_descripcion')
        grupo = Grupo.objects.get(id_grupo=id_grupo)
        campocuenta=Campo_Cuenta(id_grupo=grupo,catalogo=catalogo,auxiliar=auxiliar,valor=str(valor),valor_descripcion=valor_descripcion)
        campocuenta.save()
        actividades = Campo_Cuenta.objects.get(id_cuenta=campocuenta.id_cuenta)
        serializer = CampoCuentaSerializer(actividades)
        response={}
        total={}
        response['status']=0
        response['totalRows']=1
        response['startRow']=0
        response['endRow']=0
        response['data']=serializer.data
        total['response']=response
        return JSONResponse(total)
    if request.method == 'POST':
        id_grupo = request.POST.get('id_grupo')
        catalogo = request.POST.get('catalogo')
        auxiliar = request.POST.get('auxiliar')
        valor = request.POST.get('valor')
        valor_descripcion = request.POST.get('valor_descripcion')
        grupo = Grupo.objects.get(id_grupo=id_grupo)
        campocuenta=Campo_Cuenta(id_grupo=grupo,catalogo=catalogo,auxiliar=auxiliar,valor=str(valor),valor_descripcion=valor_descripcion)
        campocuenta.save()
        actividades = Campo_Cuenta.objects.get(id_campo_cuenta=campocuenta.id_campo_cuenta)
        serializer = CampoCuentaSerializer(actividades)
        response={}
        total={}
        response['status']=0
        response['totalRows']=1
        response['startRow']=0
        response['endRow']=0
        response['data']=serializer.data
        total['response']=response
        return JSONResponse(total)

@csrf_exempt
def campocuenta_actualiza(request):
    if request.method == 'GET':
        id_campo_cuenta = request.GET.get('id_campo_cuenta')
        id_grupo = request.GET.get('id_grupo')
        catalogo = request.GET.get('catalogo')
        auxiliar = request.GET.get('auxiliar')
        valor = request.GET.get('valor')
        valor_descripcion = request.GET.get('valor_descripcion')
        grupo = Grupo.objects.get(id_grupo=id_grupo)
        campocuenta=Campo_Cuenta.objects.get(id_campo_cuenta=id_campo_cuenta)
        campocuenta.id_grupo = grupo
        campocuenta.catalogo = catalogo
        campocuenta.auxiliar = auxiliar
        campocuenta.valor = str(valor)
        campocuenta.valor_descripcion = valor_descripcion
        campocuenta.save()
        serializer = CampoCuentaSerializer(campocuenta)
        response={}
        total={}
        response['status']=0
        response['totalRows']=1
        response['startRow']=0
        response['endRow']=0
        response['data']=serializer.data
        total['response']=response
        return JSONResponse(total)
    if request.method == 'POST':
        id_campo_cuenta = request.POST.get('id_campo_cuenta')
        id_grupo = request.POST.get('id_grupo')
        catalogo = request.POST.get('catalogo')
        auxiliar = request.POST.get('auxiliar')
        valor = request.POST.get('valor')
        valor_descripcion = request.POST.get('valor_descripcion')
        grupo = Grupo.objects.get(id_grupo=id_grupo)
        campocuenta=Campo_Cuenta.objects.get(id_campo_cuenta=id_campo_cuenta)
        campocuenta.id_grupo = grupo
        campocuenta.catalogo = catalogo
        campocuenta.auxiliar = auxiliar
        campocuenta.valor = str(valor)
        campocuenta.valor_descripcion = valor_descripcion
        campocuenta.save()
        serializer = CampoCuentaSerializer(campocuenta)
        response={}
        total={}
        response['status']=0
        response['totalRows']=1
        response['startRow']=0
        response['endRow']=0
        response['data']=serializer.data
        total['response']=response
        return JSONResponse(total)

@csrf_exempt
def campocuenta_elimina(request):
    if request.method == 'GET':
        id_campo_cuenta = request.GET.get('id_campo_cuenta')
        campocuenta = Campo_Cuenta.objects.get(id_campo_cuenta=id_campo_cuenta)
        campocuenta.delete()
        borro={}
        devuelve={}
        borro['id_campo_cuenta']=id_campo_cuenta
        devuelve['response']=borro
        return JSONResponse(devuelve)
    if request.method == 'POST':
        id_campo_cuenta = request.POST.get('id_campo_cuenta')
        campocuenta = Campo_Cuenta.objects.get(id_campo_cuenta=id_campo_cuenta)
        campocuenta.delete()
        borro={}
        devuelve={}
        borro['id_campo_cuenta']=id_campo_cuenta
        devuelve['response']=borro
        return JSONResponse(devuelve)
