var tabla;
//declaramos variables necesarias para trabajar con las compras y sus detalles
var impuesto1 = 16;
var cont = 0;
var detalles = 0;

//funcion que se ejecuta al inicio
function init() {
  // mostrarform(true);
  //** temporal */
  mostrarform(false);
  listar();
  listarArticulos();
  //  listarServicios();
  //   buscarAlmacen('BODEGART');

  // listarArticuloBarra();

  $("#btnGuardar").on("click", function (e) {
    /* Evitamos el envío real del formulario */
    e.preventDefault();

    validar();
    var val = $("#validado").val();
    console.log(val);
    if (val == 1) {
      bootbox.confirm(
        "¿Esta seguro que quiere guardar los dato?",
        function (result) {
          if (result) {
            modificarValoresAnumerico();
            guardaryeditar(e);
          }
        }
      );
    }
  });

  // Capturamos el evento click de la ventana modal Articulo
  // Para habilitar y desabilitar los botones y campos que van con cada funcion
  $("#btnAgregarArt").on("click", function (e) {
    $("#myModalArt").modal("show");
    // $('#serie_comprobante').prop("disabled", false);
    // $('#num_comprobante').prop("disabled", false);
    // $("#num_comprobante1").show();
    // $("#serie_comprobante1").show();
    // $('#num_suministro').prop("disabled", false);
    // $('#num_suministro').val("N/A");
    // $("#num_suministro1").hide();
    // $("#tipo_comprobante").val("Factura");
    // $("#tipo_comprobante").selectpicker('refresh');
    // $("#tipo_comprobante").val("1");
    // $("#tipo_comprobante").selectpicker('refresh');
  });

  $("#btnAgregarSer").on("click", function (e) {
    $("#myModalS").modal("show");
  });

  //se verifica si cambia el campo de de idarticulo
  $("#idarticuloca").change(function () {
    var idarticuloca = $("#idarticuloca").val().split("-");
    let nombre = "";
    let nombre1 = this.options[this.selectedIndex].innerText;
    nombre = nombre1;
    $("#nombre").val(nombre);
    console.log(idarticuloca[0]);
    buscarproductocompuesto(idarticuloca[0]);
  });

  //se verifica si cambia el campo de de Maquila
  $("#idmaquila").change(function () {
    let nombre = $("#nombre").val();
    let nombre1 = this.options[this.selectedIndex].innerText;
    if (nombre != "") {
      nombre = nombre + "-" + nombre1;
    } else {
      nombre = nombre1;
    }
    $("#nombre").val(nombre);
  });

  $("#cod_barra").keypress(function (e) {
    var keycode = e.keyCode ? e.keyCode : e.which;
    var codigobarra = $("#cod_barra").val();
    if (keycode == "13") {
      // Evitamos el envío real del enter
      e.preventDefault();
      // Hacemos la llamada al API Buscamos el codigo de barra
      buscarcodigodebarra(codigobarra);
      return false;
    }
  });

  $("#btnGuardar").hide();
  $("#tipo_comprobante").change(marcarImpuesto);

  //cargamos los Los productos compuesto
  $.post(
    "controladores/productocompuestoControlador.php?op=selectProductocompuesto",
    function (r) {
      $("#idarticuloca").html(r);
      $("#idarticuloca").val(0);
      $("#idarticuloca").selectpicker("refresh");
    }
  );

  //cargamos la maquila
  $.post(
    "controladores/ordenproduccionControlador.php?op=selectCliente",
    function (r) {
      $("#idmaquila").html(r);
      $("#idmaquila").val(0);
      $("#idmaquila").selectpicker("refresh");
    }
  );

  //De detectamos cuando cambia un valor en la tabla de producto para la formula
  // Campos que vamos a formatear
  // cantidad

  var typingTimer; //timer identifier
  var doneTypingInterval = 10000; //time in ms, 1 second for example
  //var doneTypingInterval = 1500;  //time in ms, 1 second for example
  //detalles
  $("#detallesformula").on("keyup paste", ":input", function () {
    var value = $(this).val(); //obtiene el valor actual del input.
    var name = $(this).prop("name");

    if (name == "cantidad[]") {
      //console.log("cambio cantidad");
      $(this).val(decimald4(value));
      //evaluar(value);
    }

    clearTimeout(typingTimer);
    typingTimer = setTimeout(doneTyping, doneTypingInterval);
  });

  //Se limpia el contador cuando deja de escribir
  $("#detallesformula").on("keydown", function () {
    clearTimeout(typingTimer);
  });

  //calculamos los totales
  function doneTyping() {
    if (
      typeof modificarSubtotales !== "undefined" &&
      jQuery.isFunction(modificarSubtotales)
    ) {
      //Es seguro ejectura la función
      modificarSubtotales();
    }
    //modificarSubtotales();
  }
}

//Formateo para 4 decimales
function decimald4(value) {
  return value
    .replace(/\D/g, "")
    .replace(/([0-9])([0-9]{4})$/, "$1,$2")
    .replace(/\B(?=(\d{4})+(?!\d)\.?)/g, ".");
}

//Funcion para bucar dentro de un select
function buscarSelect() {
  // creamos un variable que hace referencia al select
  var select = document.getElementById("idproveedor");
  // obtenemos el valor a buscar
  var buscar = "BODEGART";
  // recorremos todos los valores del select
  for (var i = 1; i < select.length; i++) {
    if (select.options[i].text == buscar) {
      // seleccionamos el valor que coincide
      select.selectedIndex = i;
      $("#tipo_comprobante").val("'i'");
      $("#tipo_comprobante").selectpicker("refresh");
    }
  }
}

//funcion limpiar
function limpiar() {
  $("#formulario").data("bootstrapValidator").resetForm(true);
  $("#idarticuloc").val(0);
  $("#idarticuloc").selectpicker("refresh");
  $("#idmaquila").val(0);
  $("#idmaquila").selectpicker("refresh");

  $("#fecha_hora").val("");
  $("#fecha_horar").val("");
  $("#proveedor").val("");
  $("#serie_comprobante").val("");
  $("#num_comprobante").val("");
  $("#num_suministro").val("");
  $("#idproductocompuesto").val("");
  $("#impuesto").val("");
  $("#validado").val("0");

  $("#total_compra").val("");
  $(".filas").remove();
  $("#total").html("0");

  //obtenemos la fecha actual
  var now = new Date();
  var today = new Date();
  var dd = ("0" + now.getDate()).slice(-2);
  var mm = ("0" + (now.getMonth() + 1)).slice(-2);
  var yyyy = now.getFullYear();
  var today = yyyy + "-" + mm + "-" + dd;
  $(fecha_hora).val(today);

  //marcamos el primer tipo_documento
  $("#tipo_comprobante").val("Factura");
  $("#tipo_comprobante").selectpicker("refresh");
  marcarImpuesto();
}

//funcion mostrar formulario
function mostrarform(flag) {
  limpiar();
  if (flag) {
    $("#listadoregistros").hide();
    $("#formularioregistros").show();
    $("#formularioregistros1").show();
    $("#num_suministro1").hide();
    //buscarTasaDeCambio();
    //$("#btnGuardar").prop("disabled",false);
    $("#btnagregar").hide();

    $("#cod_barra").focus();
    $("#btnGuardar").hide();
    $("#btnCancelar").show();
    detalles = 0;
    $("#btnAgregarArt").show();
    $("#btnAgregarSer").hide();
  } else {
    $("#listadoregistros").show();
    $("#btnagregar").show();
    $("#labelcodigobarra").show();
    $("#inputcodigobarra").show();
    /* $('#serie_comprobante').prop("disabled", false);
		$('#num_comprobante').prop("disabled", false);
		$('#num_suministro').prop("disabled", true); */
    $("#num_comprobante1").show();
    $("#serie_comprobante1").show();
    $("#num_suministro1").hide();
    $("#formularioregistros").hide();
    $("#formularioregistros1").hide();
  }
}

//cancelar form
function cancelarform() {
  limpiar();
  mostrarform(false);
}

//funcion listar
function listar() {
  tabla = $("#tbllistado")
    .dataTable({
      aProcessing: true, //activamos el procedimiento del datatable
      aServerSide: true, //paginacion y filrado realizados por el server
      dom: "Bfrtip", //definimos los elementos del control de la tabla
      buttons: ["copyHtml5", "excelHtml5", "csvHtml5", "pdf"],
      ajax: {
        url: "controladores/productocompuestoControlador.php?op=listar",
        type: "get",
        dataType: "json",
        error: function (e) {
          console.log(e.responseText);
        },
      },
      bDestroy: true,
      iDisplayLength: -1, //paginacion
      order: [[0, "desc"]], //ordenar (columna, orden)
    })
    .DataTable();
}

function listarServicios() {
  tabla1 = $("#tblservicios")
    .dataTable({
      aProcessing: true, //activamos el procedimiento del datatable
      aServerSide: true, //paginacion y filrado realizados por el server
      dom: "Bfrtip", //definimos los elementos del control de la tabla
      buttons: [],
      ajax: {
        url: "controladores/ventanControlador.php?op=listarServicios",
        type: "get",
        dataType: "json",
        error: function (e) {
          console.log(e.responseText);
        },
      },
      bDestroy: true,
      iDisplayLength: 5, //paginacion
      order: [[0, "desc"]], //ordenar (columna, orden)
    })
    .DataTable();
}

function listarArticulos() {
  tabla2 = $("#tblarticulos")
    .dataTable({
      aProcessing: true, //activamos el procedimiento del datatable
      aServerSide: true, //paginacion y filrado realizados por el server
      dom: "Bfrtip", //definimos los elementos del control de la tabla
      buttons: [],
      ajax: {
        url: "controladores/productocompuestoControlador.php?op=listarArticulos",
        type: "get",
        dataType: "json",
        error: function (e) {
          console.log(e.responseText);
        },
      },
      bDestroy: true,
      iDisplayLength: 5, //paginacion
      order: [[0, "desc"]], //ordenar (columna, orden)
    })
    .DataTable();
}

function listarArticuloBarra() {
  tabla3 = $("#tblservicios")
    .dataTable({
      aProcessing: true, //activamos el procedimiento del datatable
      aServerSide: true, //paginacion y filrado realizados por el server
      dom: "Bfrtip", //definimos los elementos del control de la tabla
      buttons: [],
      ajax: {
        url: "controladores/productocompuestoControlador.php?op=listarArticuloBarra",
        type: "get",
        dataType: "json",
        error: function (e) {
          console.log(e.responseText);
        },
      },
      bDestroy: true,
      iDisplayLength: 5, //paginacion
      order: [[0, "desc"]], //ordenar (columna, orden)
    })
    .DataTable();
}

function buscarproductocompuesto(idproductocompuesto) {
  console.log("Producto a buscar: " + idproductocompuesto);
  //"controladores/productocompuestoControlador.php?op=listarDetalleproductocompuesto=" +
  $.post(
    "controladores/productocompuestoControlador.php?op=listarDetalleproductocompuesto&id=" +
      idproductocompuesto,
    function (r) {
      console.log(r);
      $("#detalles").html(r);
      var det = document.getElementsByName("idarticulo[]");
      var detalles = det.length;
      if (detalles > 0) {
        bootbox.alert("Este producto ya existe con una fórmula");
      } else {
        bootbox.alert("Producto nuevo proceda a ingresar la fórmula");
      }
      detallesv(detalles);
      modificarSubtotales();
    }
  );
}

function buscarAlmacen(almacen) {
  $.post(
    "controladores/productocompuestoControlador.php?op=buscarAlmacen",
    { almacen: almacen },
    function (data, status) {
      data = JSON.parse(data);
      $("#idalmacen").val(data.idalmacen);
    }
  );
}

//Se busca el numero la tasa de cambio
function buscarTasaDeCambio() {
  idempresa_venta = $("#idempresa_venta").val();
  //alert ('idempresa_venta: '+idempresa_venta);
  $.post(
    "controladores/empresaControlador.php?op=buscarTasaDeCambio",
    { idempresa_venta: idempresa_venta },
    function (data, status) {
      //alert ('estatus: '+status);
      data1 = JSON.parse(data);
      $("#tasa_dollar").val(number_format(data1.tasa_dollar), 2);
      $("#tasa_euro").val(number_format(data1.tasa_euro), 2);
      //		alert ('Control: '+data1.nrocontrol+' Factura: '+data1.nrofactura);
    }
  );
}

//funcion para guardaryeditar
function guardaryeditar(e) {
  e.preventDefault(); //no se activara la accion predeterminada
  //$("#btnGuardar").prop("disabled",true);
  var formData = new FormData($("#formulario")[0]);
  //  alert("Vamos a actualizar ");
  $.ajax({
    url: "controladores/productocompuestoControlador.php?op=guardaryeditar",
    type: "POST",
    data: formData,
    contentType: false,
    processData: false,

    success: function (datos) {
      bootbox.alert(datos);
      mostrarform(false);
      listar();
    },
  });

  limpiar();
}

function mostrar(idproductocompuesto) {
  $.post(
    "controladores/productocompuestoControlador.php?op=mostrar",
    { idproductocompuesto: idproductocompuesto },
    function (data, status) {
      data = JSON.parse(data);
      mostrarform(true);
      $articulo = data.idarticulo + "-" + data.idalmacen;
      console.log("articulo : " + $articulo);
      $("#idarticuloca").val($articulo);
      $("#idarticuloca").selectpicker("refresh");
      $("#fecha_hora").val(data.fecha);
      $("#idproductocompuesto").val(data.idarticulocompuesto);
      $("#idmaquila").val(data.idmaquila);
      $("#idmaquila").selectpicker("refresh");
      $("#nombre").val(data.nombre);

      //ocultar y mostrar los botones
      $("#btnGuardar").show();
      $("#btnCancelar").show();
      $("#btnAgregarArt").show();
      $.post(
        "controladores/productocompuestoControlador.php?op=listarDetalle&id=" +
          idproductocompuesto,
        function (r) {
          $("#detallesformula").html(r);
          var det = document.getElementsByName("idarticulo[]");
          var detalles = det.length;
          detallesv(detalles);
          modificarSubtotales();
        }
      );
    }
  );
}

function detallesv(det) {
  detalles = det;
  cont = det;
}

//funcion para desactivar
function anular(idproductocompuesto) {
  bootbox.confirm("¿Esta seguro de desactivar este dato?", function (result) {
    if (result) {
      $.post(
        "controladores/productocompuestoControlador.php?op=anular",
        { idproductocompuesto: idproductocompuesto },
        function (e) {
          bootbox.alert(e);
          tabla.ajax.reload();
        }
      );
    }
  });
}

//funcion para habilitar la fecha de lote
function cambiarfechalote(idproductocompuesto) {
  var fechal = document.getElementsByName("fecha_lote[]");
  var lotef = document.getElementsByName("lote[]");
  //	alert('numero de lote: '+lotef[idproductocompuesto].value);
  if (lotef[idproductocompuesto].value == "N/A") {
    fechal[idproductocompuesto].disabled = true;
  } else {
    fechal[idproductocompuesto].disabled = false;
  }
}

function marcarImpuesto() {
  var tipo_comprobante = $("#tipo_comprobante option:selected").text();
  if (tipo_comprobante == "Factura") {
    $("#impuesto").val(impuesto1);
  } else {
    $("#impuesto").val("0");
  }
  $("#impuesto").attr("readonly", "readonly");
  impuesto.style.backgroundColor = "#D5D5CE";
}

function buscarcodigodebarra(codbarra) {
  //alert ('buscando codigo de barra: '+codbarra);
  $.ajax({
    url: "complemento/leercodigobarra.php",
    method: "post",
    data: {
      codigobarra: codbarra,
    },
  })
    .done(function (datos) {
      /* Depuramos los datos recibidos */
      console.log(datos);
      /* Si no se devolvió ningún registro (false) debería hacerse algo */
      if (datos === false) {
        /* hacer algo */
        bootbox.alert("No se encontró el código de barras");
        $("#cod_barra").val("");
        return;
      }
      /* Agregamos una fila con los datos obtenidos */
      agregarDetalle(datos.idarticulo, datos.nombre, datos.costo, datos.precio);
    })
    .fail(function () {
      alert("Error");
    })
    .always(function () {
      /* Seleccionamos el texto para que se pueda sobreescribir por la siguiente lectura */
      $("input[name='cod_barra']").select();
    });
}

function agregarDetalle(
  idarticulo,
  idalmacen,
  articulo,
  costo,
  costod,
  precio,
  preciod,
  idunidademedidad
) {
  var cantidad = 1;
  var lote = "N/A";
  var fecha = "N/A";
  var tasa_dollar = $("#tasa_dollar").val();
  var precio_compra = costod * tasa_dollar;
  var precio_venta = preciod * tasa_dollar;

  // Crear un arreglo con 9 posiciones (de 0 a 8) y llenarlo con valores `null`
  let valor = new Array(9).fill(null);

  if (idarticulo != "") {
    //verificamos el valor idunidaddemedidad
    switch (idunidademedidad) {
      case 1:
        valor[0] = "selected";
        break;
      case 2:
        valor[1] = "selected";
        break;
      case 3:
        valor[2] = "selected";
        break;
      case 4:
        valor[3] = "selected";
        break;
      case 5:
        valor[4] = "selected";
        break;
      case 6:
        valor[5] = "selected";
        break;
      case 7:
        valor[6] = "selected";
        break;
      default:
        valor[7] = "selected";
        break;
    }
    var subtotal = cantidad * precio_compra;
    var fila =
      '<tr class="filas" id="fila' +
      cont +
      '">' +
      '<td style="text-align:center"><button type="button" class="btn btn-danger" onclick="eliminarDetalle(' +
      cont +
      ')">X</button></td>' +
      '<td style="text-align:left"><input type="hidden" name="idarticulo[]" value="' +
      idarticulo +
      '">' +
      articulo +
      "</td>" +
      '<td style="text-align:center"><input type="text" style="text-align:center;background-color:#cffedf;border:none" name="cantidad[]" id="cantidad[]" value="' +
      number_format(cantidad, 4) +
      '"></td>' +
      '<td style="text-align:center"><select name="factor[]" id="factor[]">' +
      '<option value="' +
      1 +
      '" ' +
      valor[0] +
      ">UNIDAD</option>" +
      '<option value="' +
      2 +
      '" ' +
      valor[1] +
      ">LITROS</option>" +
      '<option value="' +
      3 +
      '" ' +
      valor[2] +
      ">MILITROS</option>" +
      '<option value="' +
      4 +
      '" ' +
      valor[3] +
      ">KILO</option>" +
      '<option value="' +
      5 +
      '" ' +
      valor[4] +
      ">GRAMOS</option>" +
      '<option value="' +
      6 +
      '" ' +
      valor[5] +
      ">LVR</option>" +
      '<option value="' +
      7 +
      '" ' +
      valor[6] +
      ">ESENCIA</option>" +
      "</select>" +
      "</td>" +
      '<td style="text-align:center"><input type="hidden" name="precio_compra[]" id="precio_compra[]" value="' +
      number_format(precio_compra, 2) +
      '">' +
      '<input type="hidden" name="precio_comprad[]" id="precio_compra[]" value="' +
      number_format(costod, 2) +
      '">' +
      '<input type="hidden" name="precio_venta[]"  value="' +
      number_format(precio_venta, 2) +
      '">' +
      '<input type="hidden" name="precio_ventad[]"  value="' +
      number_format(preciod, 1) +
      '">' +
      '<input type="hidden" name="nrolote[]" id=""nrolote[]" value="' +
      lote +
      '">' +
      '<input type="hidden" name="fecha_lote[]" id="fecha_lote[]" value="' +
      fecha +
      '" >' +
      '<input type="hidden" name="subtotal[]" id="subtotal[]" value="' +
      number_format(subtotal, 2) +
      '" >' +
      '<input type="hidden" name="idalmacen[]" id="idalmacen[]" value="' +
      idalmacen +
      '" >' +
      '<button type="button" onclick="modificarSubtotales()" class="btn btn-info"><i class="fa fa-refresh"></i></button></td>' +
      "</tr>";
    cont++;
    detalles++;
    $("#detallesformula").append(fila);
    modificarSubtotales();
  } else {
    alert("error al ingresar el detalle, revisar las datos del articulo ");
  }
}

function modificarValoresAnumerico() {
  var cant = document.getElementsByName("cantidad[]");
  var prec = document.getElementsByName("precio_compra[]");
  var prev = document.getElementsByName("precio_venta[]");
  var sub = document.getElementsByName("subtotal[]");
  var idart = $("#idarticuloca").val();
  var idatt1 = idart.split("-");
  $("#idproductoc").val(idatt1[0]);
  $("#idalmacenc").val(idatt1[1]);
  console.log("idproductoc: " + $("#idproductoc").val());
  console.log("idalmacenc: " + $("#idalmacenc").val());
  for (var i = 0; i < cant.length; i++) {
    var Cmod = cant[i];
    var Pcmod = prec[i];
    var Pvmod = prev[i];
    var Smod = sub[i];
    Cmod.value = numero(Cmod.value);
    Pcmod.value = numero(Pcmod.value);
    Pvmod.value = numero(Pvmod.value);
    Smod.value = numero(Smod.value);
  }
}

function modificarSubtotales() {
  var cant = document.getElementsByName("cantidad[]");
  var prec = document.getElementsByName("precio_compra[]");
  var sub = document.getElementsByName("subtotal[]");

  for (var i = 0; i < cant.length; i++) {
    var inpC = cant[i];
    var inpP = prec[i];
    var inpS = sub[i];

    //inpS.value=numero(inpC.value)*numero(inpP.value);
    inpS.value = numero(inpC.value);
    //document.getElementsByName("subtotal")[i].innerHTML=number_format(inpS.value,2);
  }
  calcularTotales();
}

function calcularTotales() {
  var sub = document.getElementsByName("subtotal[]");
  var total = 0.0;
  for (var i = 0; i < sub.length; i++) {
    var inpS = sub[i];
    total += numero(inpS.value);
  }
  /*  $("#total").html("Unidades: " + number_format(total, 2));
  $("#total_compra").val(total); */
  evaluar();
}

function evaluar() {
  if (detalles > 0) {
    $("#btnGuardar").show();
  } else {
    $("#btnGuardar").hide();
    cont = 0;
  }
}

function eliminarDetalle(indice) {
  $("#fila" + indice).remove();
  calcularTotales();
  detalles = detalles - 1;
}

//funcion para desactivar
function desactivar(idproductocompuesto) {
  bootbox.confirm("¿Esta seguro de desactivar este dato?", function (result) {
    if (result) {
      $.post(
        "controladores/productocompuestoControlador.php?op=desactivar",
        { idproductocompuesto: idproductocompuesto },
        function (e) {
          bootbox.alert(e);
          tabla.ajax.reload();
        }
      );
    }
  });
}

function activar(idproductocompuesto) {
  bootbox.confirm("¿Esta seguro de activar este dato?", function (result) {
    if (result) {
      $.post(
        "controladores/productocompuestoControlador.php?op=activar",
        { idproductocompuesto: idproductocompuesto },
        function (e) {
          bootbox.alert(e);
          tabla.ajax.reload();
        }
      );
    }
  });
}

init();
