//************ FACTURACION ELECTRONICA   ********************/

///api para clarisa

var clickfacturaelectronica = false;

document.querySelector("#electro").addEventListener("click", function() {
    if (clickfacturaelectronica == false) {
        clickfacturaelectronica = true;
        let mpago=$("#mpago").val();
        let vencimientoFactura=document.getElementById("vencimientoFactura").value;
        let nombreClienteElectro = $("#Nombre_elect").val();
        let apellidoClienteElectro = $("#Apellido_elect").val();
        let naturaleza = $("#Naturaleza_elect").val();
        let regimen = $("#Regimen_elect").val();
        let responsabilidad_elec = $("#responsabilidad_elec").val();
        let tipoIdentificacion = $("#tipoIdentificacion_elect").val();
        let correo = $("#Correoc").val();
        let telecliente = document.querySelector("#telCli").value;
        let ciudad = document.querySelector("#ciudad_elec").value;
        let cliente = $("#nit").val();
        if (cliente.includes('-') || cliente == "1") {
            alert("el nit no puede contener '-'  O el cliente debe ser diferente de 1 ");
            clickfacturaelectronica = false;

        } else {

         if(vencimientoFactura.trim()=="" && mpago=="2"){

            alert("DEBE DE ASIGNAR LOS DIAS DE VENCIMIENTO DE LA FACTURA");
            clickfacturaelectronica = false;

         }else{
            if (correo.includes('@') && nombreClienteElectro != "" && apellidoClienteElectro != "" && naturaleza != "" && regimen != "" && regimen != "no" &&
                responsabilidad_elec != "" && ciudad != "") {

                let tipoFactura = $("#tipoFactu").val();
                if (tipoFactura == "Electronica") {
                   loginApiElectronica().then(token => {
                    // token="12235544"
                        DatosParaFacturaElectronica(token);
                    })
                  


                } else {

                    alert("El tipo de factura es Pos No se puede General Factura Electronica");
                    clickfacturaelectronica = false;
                }
                // 
            } else {
                  alert("debe de actulizar los datos del cliente Para Generar la factura Electronica");
                  clickfacturaelectronica = false;
            }
        }

        }


    } else {
        console.log("No se ha terminado de procesar la factura anterior");

    }
})




// consultar datos facturacion electonica

DatosParaFacturaElectronica = (token) => {

    var array = [];

    var rowsBody = $("#table").find('tbody > tr');

    var rowsHead = $("#table").find('thead > tr > th');


    if (rowsBody.length > 0) {
        for (var i = 0; i < rowsBody.length; i++) {
            var obj = {};
            for (var j = 0; j < rowsHead.length; j++)

                obj[rowsHead[j].innerText] = rowsBody[i].getElementsByTagName('th')[j].innerText;
            array.push(obj);
        }
    }
    let factura = JSON.stringify(array);
    let bodega = document.getElementById("idbodegas").value
    let cliente = $("#nit").val();
    // let vendedor = $("#vendedorr").val();
    let total = $("#totalfact").val();
    let formaPago=$("#mpago").val();
    if(formaPago==0){
        alert("Selecione Una Forma de Pago");
        clickfacturaelectronica = false;

    }else{

    $.ajax({
        data: { "dato": "dato", "productos": factura,"bodega":bodega,"id":cliente,"total":total,"formaPago":formaPago }, //datos que se envian a traves de ajax
        url: "../controlador/config/datosElectonica.php", //archivo que recibe la peticion
        type: 'post', //método de envio


        success: function(response) {
            //una vez que el archivo recibe el request lo procesa y lo devuelve

            var respuesta = JSON.parse(response);

            if (respuesta["estado"] == "ok") {

                let numeroResolucion = respuesta["resolucionElec"];
                let numeroFactElectronica = respuesta["numeroFactuElectro"]; // $("#NumeroFactElectronica").val();
                let Prefijo = respuesta["prefijo"];
                let fechaFactElectro = respuesta["fecha"];
                let NitElectronica = respuesta["nitE"];

                facturaElectronica(numeroResolucion, numeroFactElectronica, Prefijo, fechaFactElectro, NitElectronica, token);



            } else {
                alert(respuesta["respueta"] + " " + respuesta["produc"]);
                clickfacturaelectronica = false;
            }
        }
    })
}
}

// Fin consultar datos facturacion electonica




//login

function loginApiElectronica() {
    let bodega = document.getElementById("idbodegas").value;

    return new Promise((resolver, rechazar) => {

        $.ajax({
            data: { "login": "login","bodega":bodega }, //datos que se envian a traves de ajax
            url: "../controlador/config/datosElectonica.php", //archivo que recibe la peticion
            type: 'post', //método de envio
    
    
            success: function(response) {
                
                var respuest = JSON.parse(response);

                if (respuest["estado"] == "ok") {
                 
                    const userrApi = respuest["userApi"];
                    const passApi = respuest["passApi"]; 
                    
                    //  url_producion = https://csi.clarisa.co:8443/seguridad/rest/api/v1/login/
                   // url_pruebas=https://central.clarisacloud.com:8443/seguridad/rest/api/v1/login/
                    fetch("https://csi.clarisa.co:8443/seguridad/rest/api/v1/login/", {
                        method: 'post',
                        headers: {
                            'Content-Type': 'application/json',
                            // "X-CSRF-TOKEN": token
                        },
                        body: JSON.stringify({
                            "usuario": userrApi,
                            "contrasenia": passApi
                        }),
                        //body:JSON.stringify("german"),
                    })
                    .then(response => {
                        return response.json() //convierte la respuesta en json 
                            // return response.text() //para mostras los datos por var_dump de php
                            // console.log(response)
                            
                    })
                    .then(respuesta => {
                        //console.log(respuesta)
                        if (respuesta.success == true) {
                            tokenUser = respuesta.data.token;
                            // return tokenUser;
                            resolver(tokenUser);

                        }

                    })
                    
    
    
    
                }







            }
                
        })

        
    })






}




//fin login


function facturaElectronica(numeroResolucion, numeroFactElectronica, Prefijo, fechaFactElectro, NitElectronica, token) {
    $('#modalcarga').modal('show');
    var validadro = true;
   let fechaFactElectroVencime=$("#fechaV").val();
   let formaPago=$("#mpago").val();
   let medioPago=$("#mediopago").val();
  let detalleElectronico=$("#detalleElectronico").val();
    
   
    var productos = [];
    let array = [];
    let rowsBody = $("#table").find('tbody > tr');
    let rowsHead = $("#table").find('thead > tr > th');

    if(formaPago==2){
        if(fechaFactElectroVencime =="" || fechaFactElectroVencime ==" ") {
            validadro = false;
        }
    }  


    if (rowsBody.length > 0) {
        
        for (var i = 0; i < rowsBody.length; i++) {
            var obj = {};
            for (var j = 0; j < rowsHead.length; j++){

                obj[rowsHead[j].innerText] = rowsBody[i].getElementsByTagName('th')[j].innerText;
            }
            array.push(obj);
            //Añadimos al Array Principal
        }
    }

    // console.log(array)
    array.forEach(function(valor) {
        let caja = valor.Cantida_caja;
        let frcc = valor.Cantida_frcc;
        let costounitario = 0;
        let cnatidad = 0;
        descuento=0;
        let tipoiva = valor.tipo;
        let iva = "SIN_IMPUESTO";

         descuento=valor.Descu;

        if (tipoiva == "19") {
            iva = "IVA_19";
        } else {
            if (tipoiva == "5") {
                iva = "IVA_5";
            } else {
                if (tipoiva == "0") {
                    iva = "EXCENTO";
                } else {
                    if (tipoiva == "1") {
                        iva = "EXCLUIDO";
                    }else{
                        if (tipoiva == "8") {
                            iva = "IMPUESTO_CONSUMO_8";
                        }
                        
                    }
                }

            }

        }
        if (caja > 0) {
            cnatidad = caja;
            descuentoUnitario=descuento/cnatidad;
            costounitario = valor.preciounitarioCaja-descuentoUnitario;
            
        } else {
            cnatidad = frcc;
            descuentoUnitario=descuento/cnatidad;
            costounitario = valor.preciounitariofrcc-descuentoUnitario;
            
        }
        if (caja > 0 && frcc > 0) {
            validadro = false;
        }

        let datos = {

            "nombreItemVenta": valor.Nombre,

            "precioVentaUnitario": costounitario,

            "precioReferencia": 0,

            "cantidad": cnatidad,

            "codigo": valor.Codigo,

            "descuentoPorcentaje": 0,

            "observacion": "",

            "unidad": "94",

            "codigoDescuento": "04",

            "impuesto": iva

        }

        productos.push(datos)


    })
    let cliente = $("#nit").val();
    // let vendedor = $("#vendedorr").val();
    let total = $("#totalfact").val();


    let direcion = $("#diree").val();
    let nombreClienteElectro = $("#Nombre_elect").val();
    let apellidoClienteElectro = $("#Apellido_elect").val();
    let naturaleza = $("#Naturaleza_elect").val();
    let regimen = $("#Regimen_elect").val();
    let responsabilidad_elec = $("#responsabilidad_elec").val();
    let tipoIdentificacion = $("#tipoIdentificacion_elect").val();
    let correo = $("#Correoc").val();
    let telecliente = document.querySelector("#telCli").value;
    let ciudad = document.querySelector("#ciudad_elec").value;
    
    // let formaPago="00";
    


    let facturaelectroni = {

        "nit": NitElectronica, //"2352342233",

        "numeroResolucion": numeroResolucion,

        "numeroDocumentoComercial": Prefijo + numeroFactElectronica,

        "fechaGeneracion": fechaFactElectro, //"2021-03-29T00:00:00"

        "fechaVencimiento": fechaFactElectroVencime,

        "mediosPago": medioPago,

        "observacion": detalleElectronico,

        "formaPago": formaPago,

        "total": total,

        "cliente": {

            "nombreRazonSocial": nombreClienteElectro + " " + apellidoClienteElectro, //nombreclien,

            "tipoIdentificacion": tipoIdentificacion,

            "numIdentificacion": cliente, //cliente,

            "naturaleza": naturaleza,

            "direccion": direcion,

            "ciudad": ciudad,

            "telefono": telecliente,

            "email": correo, //correo,

            "responsabilidadesFiscales": responsabilidad_elec,

            // "regimenContable": "NO_RESPONSABLE_IVA",
            "respTributarias": regimen

        },

        "codigoDescuento": "04",

        "porcentajeDescuentoGeneral": 0,

        "items": productos


    }

    // console.log(facturaelectroni)
    //console.log(token)
    if (validadro == true) {
        //url_producion=https://csi.clarisa.co:8443/facturas/rest/api/v1/factura
        // url_pruebas=https://central.clarisacloud.com:8443/facturacion/rest/api/v1/factura

        fetch("https://csi.clarisa.co:8443/facturas/rest/api/v1/factura", {
                method: 'post',
                body: JSON.stringify(facturaelectroni),
                headers: {
                    'Content-Type': 'application/json',
                    "Authorization": token
                },


            })
            .then(response => {
                return response.json() //convierte la respuesta en json 
                    //  return response.text() //para mostras los datos por var_dump de php
                    //  console.log(response)
            })
            .then(respuesta => {
                $('#salirrr').click();
                console.log(respuesta);

                   // guardar respuesta
                fetch(`../controlador/config/fechas.php?resp=${JSON.stringify(respuesta)}`);
               
                // if (typeof(Storage) !== "undefined") {                    
                //     localStorage.setItem("electornica", JSON.stringify(respuesta));
                // }


                if (respuesta.success == false || respuesta.success =="false" ) {                           

                    alert(respuesta.errores.errores[0].errorMessage);   
                    
                    // //pruebas
                    //     if(formaPago==2){
                    //         generarfactura(total, 0, 0, 0, 0, " ", descuento, "Electronica", "prueba");

                    //     }else{
                    //         generarfactura(0, total, 0, 0, 0, " ", descuento, "Electronica", "prueba"); 
                    //     }
                    // //fin pruebas

                    clickfacturaelectronica = false;
                   

                } else {

                    clicguardar=true;

                    let descuento = $("#TotalDescu").val();
                    alert("Factura electronica Generada Con exito");

                    let cufe = respuesta.data["cufe"];
                    clickfacturaelectronica = false;

                        if(formaPago==2){
                            generarfactura(total, 0, 0, 0, 0,detalleElectronico, descuento, "Electronica", cufe);

                        }else{

                             

                            // //trasferencia
                            if(medioPago==47){
                                generarfactura(0, 0, total, 0, 0,detalleElectronico, descuento, "Electronica", cufe); 
                            }else{
                                //tarjetas
                                if(medioPago==49){
                                    generarfactura(0, 0, 0,total , 0,detalleElectronico, descuento, "Electronica", cufe); 
                                }else{
                                    //efectivo
                                    generarfactura(0, total, 0, 0, 0,detalleElectronico, descuento, "Electronica", cufe); 
                                }
                            }
                            
                        }
                    


                    // $("#guarfactu").click();

                }



            })
    } else {
        
        clickfacturaelectronica = false;
        alert("Revise la factura, No se puede Generar factura Electronica con productos que tenga cantidad caja y fraccion AL tiempo, Si es Factura credito selecione fecha vencimeinto");
        $('#modalcarga').modal('hide');
    }

   


}


/// FUNCION DEVOLUCION FACTURA O DEVOLUCION PARCIAL

function DatosParaDevolucionElectronica(items, total, tipoDevolucion) {
    return new Promise((resolve, reject) => {
        let bodega = document.getElementById("idbodegas").value;
        // let numerofactd=document.getElementById("numerofactd").value;
        $.ajax({
            data: { "dato1": "dato1","bodega":bodega }, //datos que se envian a traves de ajax
            url: "../controlador/config/datosElectonica.php", //archivo que recibe la peticion
            type: 'post', //método de envio

            success: function(response) {
                //una vez que el archivo recibe el request lo procesa y lo devuelve

                var respuesta = JSON.parse(response);

                let fechaDevolucion = respuesta["fecha"];
                let NitElectronica = respuesta["nitE"];
                let numeroDevoluciEl=respuesta["NumeroDevolucion"];
                
                loginApiElectronica().then(token => {
                    //devolucionFacElectr(token);


                    resolve(devolucionFacElectr(token, NitElectronica, total, items, fechaDevolucion, tipoDevolucion,numeroDevoluciEl));



                })


            }
        });
    })
}





function devolucionFacElectr(token, NitElectronica, total, items, fechaDevolucion, tipoDevolucion,numeroDevoluciEl) {
    $('#modalcarga').modal('show');
    return new Promise((resolver, noreselve) => {


        if (tipoDevolucion == "ANULACION") {
            var item = [{ "items": items }]

        } else {
            var item = [{ "items": [items] }]
        }



        let valorCredito=$("#dtotalfactCredito").val();
        let cliente = $("#dnit").val();
        // let vendedor = $("#vendedorr").val();
        //let total = $("#dtotalfact").val();
        let numeroFactElectronica = $("#NumeroFactElectronica").val();
        let mensaje;
        let direcion = $("#ddire").val();
        let nombreClienteElectro = $("#Nombre_electd").val();
        let apellidoClienteElectro = $("#Apellido_electd").val();
        let naturaleza = $("#Naturaleza_electd").val();
        let regimen = $("#Regimen_electd").val();
        let responsabilidad_elec = $("#responsabilidad_elecd").val();
        let tipoIdentificacion = $("#tipoIdentificacion_electd").val();
        let correo = $("#dcorreo").val();
        let telecliente = document.querySelector("#dtel").value;
        let ciudad = document.querySelector("#dciudadd").value;
        // let numeroDevolucion = $("#iddevolu").val();
        let formaPago=0;
        if(valorCredito>0){
             formaPago=2;

        }else{
             formaPago=1; 
        }



        let facturaDevolucion = {

            "nit": NitElectronica,

            "numeroFacturaAsociada": numeroFactElectronica,

            "numeroDocumentoComercial": numeroDevoluciEl,

            "tipo": tipoDevolucion,

            "fechaGeneracion": fechaDevolucion,

            "fechaVencimiento": fechaDevolucion,

            "mediosPago": "10,30",

            "observacion": " Devolucion",

            "formaPago": formaPago,

            "total": total,

            "cliente": {

                "nombreRazonSocial": nombreClienteElectro,

                "tipoIdentificacion": tipoIdentificacion,

                "numIdentificacion": cliente,

                "naturaleza": naturaleza,

                "direccion": direcion,

                "ciudad": ciudad,

                "telefono": telecliente,

                "email": correo,

                "responsabilidadesFiscales": responsabilidad_elec,

                "regimenContable": regimen

            },


            "items": item[0].items

        }
       


        //url_producion=https://csi.clarisa.co:8443/facturas/rest/api/v1/notaCredito
        // url_prueba=https://central.clarisacloud.com:8443/facturacion/rest/api/v1/notaCredito

        fetch("https://csi.clarisa.co:8443/facturas/rest/api/v1/notaCredito", {
                method: 'post',
                body: JSON.stringify(facturaDevolucion),
                headers: {
                    'Content-Type': 'application/json',
                    "Authorization": token
                },


            })
            .then(response => {
                $('#salirrr').click();
                resolver(response.json()) //convierte la respuesta en json 
                numeroDevoElectorinca=numeroDevoluciEl;
                    // return response.text() //para mostras los datos por var_dump de php
                    //  console.log(response)
            })


    })

}