from django.shortcuts import render, redirect, get_object_or_404
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from inventario.views import inv_equipo
from .models import bitpendientes
from .forms import FormularioPendiente, FormularioPendienteEnv
from servicios.models import serviciorealizado, accesorios
from inventario.models import invequipo
from bitacora.models import bitreporte
from django.http.response import HttpResponse
from datetime import datetime
import datetime
from openpyxl import Workbook


# Create your views here.

def pendientes(request):
    datos = bitpendientes.objects.filter(concluido='Pendiente')
    equipo = invequipo.objects.all()
    servicios = serviciorealizado.objects.all()
    usuarios = User.objects.all()
    accesorio = accesorios.objects.all()
    return render(request, 'pendientes.html', {"datos": datos, "servicios": servicios, "equipo": equipo, "usuarios": usuarios, "accesorio": accesorio})


@login_required(login_url='/acceder')
def crear_pendiente(request, cb):
    if request.method == "POST":
        form = FormularioPendiente(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.save()
            titulo = form.cleaned_data.get("n_reporte")
            update = bitreporte.objects.values('pendiente').filter(control_bit=titulo).update(pendiente='Pendiente')
            messages.success(request, f"La bitacora con el reporte {titulo} se ha creado correctamente")
            return redirect("pendientes")
        else:
            for field, items in form.errors.items():
                for item in items:
                    messages.error(request, '{}: {}'.format(field, item))

    ccontrolb = cb
    dato = bitreporte.objects.filter(control_bit=ccontrolb)
    falla = dato[0].reporte
    reporta_ib_1 = dato[0].asignado
    reporta_ib = dato[0].asignado.id
    form = FormularioPendienteEnv()
    return render(request, "crear_pendiente.html", {"form": form, "ccontrolb": ccontrolb, "falla": falla, "reporta_ib": reporta_ib, "reporta_ib_1": reporta_ib_1})


@login_required(login_url='/acceder')
def ActualizarPendientes(request, id):
        instance= get_object_or_404(bitpendientes, pk=id)
        form = FormularioPendiente(request.POST or None, instance=instance)
        context= {'form': form}
        if form.is_valid():
                obj= form.save(commit= False)
                obj.save()
                messages.success(request, "La Bitacora de Pendientes fue actualizada")
                return redirect("pendientes")

        else:
                context= {'form': form, 'error': 'Error al actualizar'}
                return render(request,'crear_pendiente2.html' , context)



@login_required(login_url='/acceder')
def ReporteExcelPendietes(request):
    datospendientes = bitpendientes.objects.all()
    ibs = User.objects.all()
    datosservicio = serviciorealizado.objects.all()
    datosaccesorios = accesorios.objects.all()
    fecha = datetime.datetime.now()
    fe = str(fecha)
    wb = Workbook()
    ws = wb.active
    ws['B1'] = 'REPORTE DE SERVICIOS CONCLUIDOS'

    ws.merge_cells('B1:L1')

    ws['B2'] = datetime.datetime.now()
    
    ws.merge_cells('B2:D2')

    ws['B3'] = 'No. REPORTE'
    ws['C3'] = 'FECHA'
    ws['D3'] = 'REPORTA IB'
    ws['E3'] = 'No. CONTROL'
    ws['F3'] = 'FALLA PRESENTADA'
    ws['G3'] = 'CON CONTRATO'
    ws['H3'] = 'PROVEEDOR'
    ws['I3'] = 'REFACCIONES PENDENTES'
    ws['J3'] = 'SERVICIOS'
    ws['K3'] = 'ACCESORIOS'

    cont = 4
    for datopendientes in datospendientes:
        for ib in ibs:
            if datopendientes.reporta_ib_id == ib.id:
                reporta = ib.username
        
        count = 0
        serreali = ""
        for datoservicio in datosservicio:
            if datopendientes.n_reporte == datoservicio.control_bit:
                count = count + 1
                realizado = str(count) + " - " + datoservicio.descripcion 
                serreali = serreali + " // " + realizado
        if count == 0 :
            serreali = ""
        count = 0

        count1 = 0
        seracce = ""
        for datoaccesorios in datosaccesorios:
            if datopendientes.n_reporte == datoaccesorios.control_bit:
                count1 = count1 + 1
                acceso = str(count1) + " - " + datoaccesorios.n_parte + " | " + datoaccesorios.descripcion 
                seracce = seracce + " // " + acceso
        if count1 == 0 :
            seracce = ""
        
        ws.cell(row=cont, column=2).value = datopendientes.n_reporte
        ws.cell(row=cont, column=3).value = datopendientes.fecha
        ws.cell(row=cont, column=4).value = reporta
        ws.cell(row=cont, column=5).value = datopendientes.n_control
        ws.cell(row=cont, column=6).value = datopendientes.falla
        ws.cell(row=cont, column=7).value = datopendientes.contrato
        ws.cell(row=cont, column=8).value = datopendientes.reprovedor
        ws.cell(row=cont, column=9).value = datopendientes.refacciones
        ws.cell(row=cont, column=10).value = serreali
        ws.cell(row=cont, column=11).value = seracce

        cont += 1
        serreali = ""
        seracce = ""
        

    nombre_archivo = "ReporteServicioConcluidos "+fe+".xlsx"
    response = HttpResponse(content_type="application/ms-excel")
    content = "attachment; filename = {0}".format(nombre_archivo)
    response['Content-Disposition'] = content
    wb.save(response)
    return response

