import datetime
import os.path
import shutil
import time

from celery import shared_task
from django.contrib import messages
from django.contrib.auth.models import User
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
import pandas as pd
import openpyxl
from Permiso.models import Permisos
from THumano.models import Personales, Licencias, Enfermedades, Capacitacion, TrayectoriaLaboral, Vivienda, \
    CondicionesVida, InformacionMonetaria, EnfermedadesAccidentes, ApoyoEconomico, InformacionSocial
from THumano.tasks import reporte_task
from TransitoApp.settings import BASE_DIR
from TransitoApp.snnipers import render_to_pdf


# Create your views here.
def registro(request):
    personales = Personales()
    try:
        personales = Personales.objects.get(usuario=request.user)
    except:
        personales.usuario = request.user
    if request.POST:
        if request.GET.get('op') == '1':
            request.user.first_name = str.upper(request.POST.get('nombres'))
            request.user.last_name =str.upper(request.POST.get('apellidos'))
            request.user.save()
            try:
                ini = InformacionMonetaria.objects.get(usuario=request.user)
            except:
                InformacionMonetaria.objects.create(
                    usuario=request.user
                )
            try:
                personales = Personales.objects.get(usuario=request.user)
            except:
                personales.usuario = request.user
            personales.l_nacimiento = request.POST.get('l_nacimiento')
            personales.f_nacimiento = request.POST.get('f_nacimiento')
            personales.edad = request.POST.get('edad')
            personales.e_civil = request.POST.get('e_civil')
            personales.etnia = request.POST.get('etnia')
            personales.genero = request.POST.get('genero')
            personales.nacionalidad = str.upper(request.POST.get('nacionalidad'))
            personales.celular = request.POST.get('celular')
            personales.telefono = request.POST.get('telefono')
            personales.correo_i = str.upper(request.POST.get('correo_i'))
            personales.correo_p = str.upper(request.POST.get('correo_p'))

            personales.lugar = str.upper(request.POST.get('lugar'))
            personales.provincia = str.upper(request.POST.get('provincia'))
            personales.canton = str.upper(request.POST.get('canton'))
            personales.parroquia = str.upper(request.POST.get('parroquia'))
            personales.barrio = str.upper(request.POST.get('barrio'))
            personales.calle_principal = str.upper(request.POST.get('calle_principal'))
            personales.calle_secundaria = str.upper(request.POST.get('calle_secundaria'))
            personales.numero_casa = str.upper(request.POST.get('numero_casa'))
            personales.referencia = str.upper(request.POST.get('referencia'))
            personales.save()
        if request.GET.get('op') == '2':
            Licencias.objects.create(
                usuario=request.user,
                tipo=str.upper(request.POST.get('tipo')),
                f_caducidad=request.POST.get('f_caducidad'),
            )
        if request.GET.get('op') == '3':
            personales.nombre_contacto = str.upper(request.POST.get('nombre_contacto'))
            personales.parentesco = str.upper(request.POST.get('parentesco'))
            personales.cedula_contacto = request.POST.get('cedula_contacto')
            personales.celular_contacto = request.POST.get('celular_contacto')
            personales.convencional_contacto = request.POST.get('convencional_contacto')
            personales.direccion =str.upper( request.POST.get('direccion_contacto'))
            personales.save()
        if request.GET.get('op') == '4':
            personales.titulo = str.upper(request.POST.get('titulo'))
            personales.pais = str.upper(request.POST.get('pais'))
            personales.area = str.upper(request.POST.get('area'))
            personales.institucion_educativa = str.upper(request.POST.get('institucion_educativa'))
            personales.numero_periodos = request.POST.get('numero_periodos')
            personales.tipo_periodo = str.upper(request.POST.get('tipo_periodo'))
            personales.egresado = str.upper(request.POST.get('egresado'))
            personales.numero_registro = str.upper(request.POST.get('numero_registro'))
            personales.save()
        if request.GET.get('op') == '5':

            if request.GET.get('ef'):
                Enfermedades.objects.create(
                    catastrofica=str.upper(request.POST.get('catastrofica')),
                    enfermedad=str.upper(request.POST.get('enfermedad')),
                )
            else:
                personales.tipo_sangre = str.upper(request.POST.get('tipo_sangre'))
                personales.discapacidad = str.upper(request.POST.get('discapacidad'))
                personales.tipo_discapacidad = str.upper(request.POST.get('tipo_discapacidad'))
                personales.porcentaje_discapacidad = request.POST.get('porcentaje_discapacidad')
                personales.carnet_CONADIS = str.upper(request.POST.get('carnet_CONADIS'))
                personales.sustituto = str.upper(request.POST.get('sustituto'))
                if request.POST.get('fecha_declaracion'):
                    personales.fecha_declaracion = request.POST.get('fecha_declaracion')
                personales.nombres_familiar = str.upper(request.POST.get('nombres_familiar'))
                personales.telefono_sustituto = request.POST.get('telefono_sustituto')
                personales.t_enfermedad_sustituto = request.POST.get('t_enfermedad_sustituto')
                personales.enfermedad_sustituto = str.upper(request.POST.get('enfermedad_sustituto'))
                personales.save()
        if request.GET.get('op') == '6':
            if request.POST.get('ingreso_institucion'):
                personales.ingreso_institucion = request.POST.get('ingreso_institucion')
            personales.tiempo_servicio = request.POST.get('tiempo_servicio')
            if request.POST.get('ultima_fecha_entrada_servicio_publico'):
                personales.ultima_fecha_entrada_servicio_publico = request.POST.get(
                    'ultima_fecha_entrada_servicio_publico')
            personales.ultimo_tiempo_servicio_anios = request.POST.get('ultimo_tiempo_servicio_anios')
            personales.ultimo_tiempo_servicio_meses = request.POST.get('ultimo_tiempo_servicio_meses')
            if request.POST.get('finalizacion_contrato'):
                personales.finalizacion_contrato = request.POST.get('finalizacion_contrato')
            if request.POST.get('estado') == "S":
                personales.estado = True
            else:
                personales.estado = False
            personales.save()
        if request.GET.get('op') == '7':
            personales.acumulacion = True if request.POST.get('acumulacion') == "SI" else False
            personales.cuenta_bancaria = request.POST.get('cuenta_bancaria')
            personales.banco = str.upper(request.POST.get('banco'))
            personales.tipo_cuenta = str.upper(request.POST.get('tipo_cuenta'))
            personales.save()
        if request.GET.get('op') == '8':
            personales.solicitud = request.POST.get('solicitud')
            if request.POST.get('fecha_entrega'):
                personales.fecha_entrega = request.POST.get('fecha_entrega')
            personales.informe_tecnico = str.upper(request.POST.get('informe_tecnico'))
            if request.POST.get('completado'):
                personales.completado = request.POST.get('completado')
            if request.POST.get('firma'):
                personales.firma = request.POST.get('firma')
            personales.finanzas = str.upper(request.POST.get('finanzas'))
            personales.archivo = str.upper(request.POST.get('archivo'))
            personales.numero_meses = request.POST.get('numero_meses')
            personales.remuneracion = request.POST.get('remuneracion')
            personales.save()
        if request.GET.get('op') == '9':
            Capacitacion.objects.create(
                usuario=request.user,
                evento=str.upper(request.POST.get('evento')),
                tipo=str.upper(request.POST.get('tipo')),
                duracion=request.POST.get('duracion'),
                auspiciante=str.upper(request.POST.get('auspiciante')),
                tipo_certificado=str.upper(request.POST.get('tipo_certificado')),
                certificado_por=str.upper(request.POST.get('certificado_por')),
                fecha_inicio=request.POST.get('fecha_inicio'),
                fecha_finalizacion=request.POST.get('fecha_finalizacion'),
                pais=str.upper(request.POST.get('pais_certificado'))
            )
        if request.GET.get('op') == '10':
            TrayectoriaLaboral.objects.create(
                usuario=request.user,
                tipo_insititucion=str.upper(request.POST.get('tipo_institucion')),
                fecha_ingreso=request.POST.get('fecha_ingreso_institucion'),
                nombre_insitutucion=str.upper(request.POST.get('nombre_institutucion')),
                unidad_administrativa=str.upper(request.POST.get('unidad_administrativa')),
                puesto=str.upper(request.POST.get('puesto')),
                fecha_salida=request.POST.get('fecha_salida_institucion') or None,
                motivo_ingreso=str.upper(request.POST.get('motivo_ingreso')),
                motivo_salida=str.upper(request.POST.get('motivo_salida')),
            )
        if request.GET.get('op') == '11':
            print(request.POST)
            Vivienda.objects.create(
                usuario=request.user,
                tipo_relacion=request.POST.get('tipo_relacionV'),
                tipo_documento=request.POST.get('tipo_documentoV'),
                numero_documento=request.POST.get('numero_documentoV'),
                nombres=str.upper(request.POST.get('nombresV')),
                fecha_nacimiento=request.POST.get('fecha_nacimientoV') or None,
                edad=request.POST.get('edadV'),
                estado_civil=str.upper(request.POST.get('estado_civilV')),
                instruccion_formal=str.upper(request.POST.get('instruccion_formalV')),
                profesion=str.upper(request.POST.get('profesionV')),
                institucion_labora=str.upper(request.POST.get('institucion_laboraV')),
                tipo_institucion=str.upper(request.POST.get('tipo_institucionV')),
                ingreso_mensual=request.POST.get('ingreso_mensualV'),
                discapacidad=str.upper(request.POST.get('discapacidadV')),
                tipo_discapacidad=str.upper(request.POST.get('tipo_discapacidadV')),
                porcentaje_discapacidad=request.POST.get('porcentaje_discapacidadV'),
                carnet_conadis=str.upper(request.POST.get('carnet_conadisV')),
                enfermedad=str.upper(request.POST.get('enfermedadV')),
                tipo_enfermedad=str.upper(request.POST.get('tipo_enfermedadV')),
                tipo_sangre=str.upper(request.POST.get('tipo_sangreV')),
                vive_con_usted=str.upper(request.POST.get('vive_con_ustedV')),
            ).save()
            print(' se registro..!')
        if request.GET.get('op') == '12':
            condicion = None
            try:
                condicion = CondicionesVida.objects.get(usuario=request.user)
            except:
                condicion = CondicionesVida()
            condicion.usuario = request.user
            condicion.agua = True if request.POST.get("agua") == "SI" else False
            condicion.alumbrado_vivienda = True if request.POST.get("alumbrado_vivienda") == "SI" else False
            condicion.alumbrado_publico = True if request.POST.get("alumbrado_publico") == "SI" else False
            condicion.alcantarillado = True if request.POST.get("alcantarillado") == "SI" else False
            condicion.calles = True if request.POST.get("calles") == "SI" else False
            condicion.basura = True if request.POST.get("basura") == "SI" else False
            condicion.iglesia = True if request.POST.get("iglesia") == "SI" else False
            condicion.hospital = True if request.POST.get("hospital") == "SI" else False
            condicion.centro_medico = True if request.POST.get("centro_medico") == "SI" else False
            condicion.subcentro = True if request.POST.get("subcentro") == "SI" else False
            condicion.escuela = True if request.POST.get("escuela") == "SI" else False
            condicion.colegio = True if request.POST.get("colegio") == "SI" else False
            condicion.mercado = True if request.POST.get("mercado") == "SI" else False
            condicion.telefono_convencional = True if request.POST.get("telefono_convencional") == "SI" else False
            condicion.telefono_celular = True if request.POST.get("telefono_celular") == "SI" else False
            condicion.internet = True if request.POST.get("internet") == "SI" else False
            condicion.transporte = True if request.POST.get("transporte") == "SI" else False
            condicion.seguridad = True if request.POST.get("seguridad") == "SI" else False
            condicion.estado_calles = True if request.POST.get("estado_calles") == "BUENO" else False
            condicion.aceras = True if request.POST.get("aceras") == "SI" else False
            condicion.bordillos = True if request.POST.get("bordillos") == "SI" else False
            condicion.colector_aguas_lluvias = True if request.POST.get("colector_aguas_lluvias") == "SI" else False
            condicion.otros = str.upper(request.POST.get("otros"))
            condicion.tenencia_vivienda = True if request.POST.get("tenencia_vivienda") == "SI" else False
            condicion.tipo_vivienda = str.upper(request.POST.get("tipo_vivienda"))
            condicion.tipo_familia = str.upper(request.POST.get("tipo_familia"))
            condicion.dormitorios = True if request.POST.get("dormitorios") == "SI" else False
            condicion.sala = True if request.POST.get("sala") == "SI" else False
            condicion.comedor = True if request.POST.get("comedor") == "SI" else False
            condicion.sala_comedor = True if request.POST.get("sala_comedor") == "SI" else False
            condicion.cocina = True if request.POST.get("cocina") == "SI" else False
            condicion.banios = True if request.POST.get("banios") == "SI" else False
            condicion.patio = True if request.POST.get("patio") == "SI" else False
            condicion.garaje = True if request.POST.get("garaje") == "SI" else False
            condicion.otros_c = str.upper(request.POST.get("otros_c"))
            condicion.potable = True if request.POST.get("potable") == "SI" else False
            condicion.hervida = True if request.POST.get("hervida") == "SI" else False
            condicion.tratada = True if request.POST.get("tratada") == "SI" else False
            condicion.cisterna = True if request.POST.get("cisterna") == "SI" else False
            condicion.pozo = True if request.POST.get("pozo") == "SI" else False
            condicion.tanqueros = True if request.POST.get("tanqueros") == "SI" else False
            condicion.otro_a = str.upper(request.POST.get("otro_a"))
            condicion.alimentacion = True if request.POST.get("alimentacion") == "SI" else False
            condicion.recolector_basura = True if request.POST.get("recolector_basura") == "SI" else False
            condicion.quma_basura = True if request.POST.get("quma_basura") == "SI" else False
            condicion.otro_b = str.upper(request.POST.get("otros_b"))
            condicion.save()
        if request.GET.get('op') == '13':
            monetaria = None
            try:
                monetaria = InformacionMonetaria.objects.get(usuario=request.user)
            except:
                monetaria = InformacionMonetaria()
            monetaria.usuario = request.user
            monetaria.vivienda = request.POST.get('vivienda_g')
            monetaria.manutencion = request.POST.get('manutencion_g')
            monetaria.educacion = request.POST.get('educacion_g')
            monetaria.medicina = request.POST.get('medicina_g')
            monetaria.alimentacion = request.POST.get('alimentacion_g')
            monetaria.vestuario = request.POST.get('vestuario_g')
            monetaria.extraordinario = request.POST.get('extraordinario_g')
            monetaria.total = request.POST.get('total_g')
            monetaria.ahorro = request.POST.get('ahorro')
            monetaria.save()
        if request.GET.get('op') == '14':
            EnfermedadesAccidentes.objects.create(
                usuario=request.user,
                enfermedades=True if request.POST.get('enfermedades_e') == "SI" else False,
                enfermedades_hereditarias=str.upper(request.POST.get('enfermedades_hereditarias')),
                accidente=True if request.POST.get('accidente') == "SI" else False,
                tipo_accidente=str.upper(request.POST.get('tipo_accidente')),
                consecuencia=str.upper(request.POST.get('consecuencia')),
                hospital_publico=True if request.POST.get('hospital_publico') == "SI" else False,
                hospital_IESS=True if request.POST.get('hospital_IESS') == "SI" else False,
                clinica=True if request.POST.get('clinica') == "SI" else False,
                centro_salud=True if request.POST.get('centro_salud_e') == "SI" else False,
                medico_particular=True if request.POST.get('medico_particular') == "SI" else False,
                otro=str.upper(request.POST.get('otro_e')),
            )
        if request.GET.get('op') == '15':
            apoyo = None
            try:
                apoyo = ApoyoEconomico.objects.get(usuario=request.user)
            except:
                apoyo = ApoyoEconomico()
            apoyo.usuario = request.user
            apoyo.padres = True if request.POST.get('padres_ae') == "SI" else False
            apoyo.hijo = True if request.POST.get('hijo_ae') == "SI" else False
            apoyo.conyuge = True if request.POST.get('conyuge_ae') == "SI" else False
            apoyo.otro = True if request.POST.get('otro_ae') == "SI" else False
            apoyo.save()
        if request.GET.get('op') == '16':
            inf_social = None
            try:
                inf_social = InformacionSocial.objects.get(usuario=request.user)
            except:
                inf_social = InformacionSocial()
            inf_social.usuario = request.user
            inf_social.servidor = True if request.POST.get('servidor_inf') == "SI" else False
            inf_social.conyuge = True if request.POST.get('conyuge_inf') == "SI" else False
            inf_social.familiares = True if request.POST.get('familiares_inf') == "SI" else False
            inf_social.guarderias = True if request.POST.get('guarderias_inf') == "SI" else False
            inf_social.empleada_domestica = True if request.POST.get('empleada_domestica_inf') == "SI" else False
            inf_social.niniera = True if request.POST.get('niniera_inf') == "SI" else False
            inf_social.vecinos = True if request.POST.get('vecinos_inf') == "SI" else False
            inf_social.otros = True if request.POST.get('otros_inf') == "SI" else False
            inf_social.leer = True if request.POST.get('leer_inf') == "SI" else False
            inf_social.escuchar_musica = True if request.POST.get('escuchar_musica_inf') == "SI" else False
            inf_social.deportes = True if request.POST.get('deportes_inf') == "SI" else False
            inf_social.reuniones = True if request.POST.get('reuniones_inf') == "SI" else False
            inf_social.quehaceres = True if request.POST.get('quehaceres_inf') == "SI" else False
            inf_social.trabajos_extras = True if request.POST.get('trabajos_extras_inf') == "SI" else False
            inf_social.otro = True if request.POST.get('otro_inf') == "SI" else False
            inf_social.save()
        if request.GET.get('op') == '17':
            Enfermedades.objects.create(
                usuario=request.user,
                catastrofica=True if request.POST.get('tipo_enfermedad_e') == "str.upper(" else False,
                enfermedad=str.upper(request.POST.get('nombre_enfermedad_e'))
            )
        messages.add_message(request, messages.SUCCESS, 'Registro Exitoso')
        return HttpResponseRedirect('/thumano/act?op=%s' % request.GET.get('op'))

    if request.GET.get('del'):
        l = Licencias.objects.get(id=request.GET.get('del'))
        l.delete()
        messages.add_message(request, messages.ERROR, 'Registro eliminado')
        return HttpResponseRedirect('/thumano/act?op=2')

    if request.GET.get('tab9'):
        c = Capacitacion.objects.get(id=request.GET.get('tab9'))
        c.delete()
        messages.add_message(request, messages.ERROR, 'Registro eliminado')
        return HttpResponseRedirect('/thumano/act?op=9')

    if request.GET.get('tab10'):
        t = TrayectoriaLaboral.objects.get(id=request.GET.get('tab10'))
        t.delete()
        messages.add_message(request, messages.ERROR, 'Registro eliminado')
        return HttpResponseRedirect('/thumano/act?op=9')

    if request.GET.get('tab11'):
        t = Vivienda.objects.get(id=request.GET.get('tab11'))
        t.delete()
        messages.add_message(request, messages.ERROR, 'Registro eliminado')
        return HttpResponseRedirect('/thumano/act?op=11')

    if request.GET.get('tab14'):
        e = EnfermedadesAccidentes.objects.get(id=request.GET.get('tab14'))
        e.delete()
        messages.add_message(request, messages.ERROR, 'Registro eliminado')
        return HttpResponseRedirect('/thumano/act?op=14')

    if request.GET.get("tab17"):
        e = Enfermedades.objects.get(id=request.GET.get("tab17"))
        e.delete()
        messages.add_message(request, messages.ERROR, 'Registro Eliminado')
        return HttpResponseRedirect('/thumano/act?op=17')

    contexto = {
        'personales': personales,
    }
    return render(request, 'thumano/index.html', contexto)


def migracion_funcionarios(request):
    path = os.path.join(BASE_DIR, 'personal.xlsx')
    print(path)
    df = pd.read_excel(path)
    print(df.count())
    for index, registro in df.iterrows():
        try:
            usuario = User.objects.create(
                username=str.zfill(str(registro['cedula']), 10),
                first_name=registro['nombres'],
                last_name=registro['apellidos'],
            )
            usuario.set_password(str.zfill(str(registro['cedula']), 10))
            usuario.save()
            Permisos.objects.create(
                usuario=usuario,
                t_humano=True,
            )
            print(index, 'Creado el usuario', str.zfill(str(registro['cedula']), 10), registro['nombres'],
                  registro['apellidos'])
        except:
            print("usuario ya existe", registro['nombres'], registro['apellidos'])

    return HttpResponse("Completo: " + str(df.count()))

def reporte(request):
    print('imprimiendo reporte..!')
    reporte_task()
    return HttpResponseRedirect('/thumano/personas')
    #return HttpResponseRedirect("/static/siith.xlsx")

def todas(request):
    personas=Personales.objects.all().order_by('usuario__last_name')
    contexto={
        'personas':personas,
    }
    return render(request, 'thumano/personas.html',contexto)

def constancia_registro(request):
    persona=None
    try:
        persona=Personales.objects.get(usuario_id=request.GET.get('id'))
    except:
        return render(request,'thumano/404.html')
    contexto={
        'persona':persona,
        'fecha':datetime.datetime.now()
    }
    return render_to_pdf('thumano/constancia.html',contexto)
