var tabla;
var controlfechavalido = [];
//declaramos variables necesarias para trabajar con las Ventas y sus detalles

var cont = 0;
var cont1 = 0;

$("#btnGuardar").hide();

//funcion que se ejecuta al inicio
function init() {
  mostrarform(false, false);
  inciarsemana();
  //actualizarsemana();
  listar();

  $("#btnGuardardespachoestado").on("click", function (e) {
    /*	 Evitamos el envío real del formulario  */
    e.preventDefault();
    $("#myModalFechadespachoestado").modal("hide");
    guardarestado();
  });

  $("#btnGuardarFechadespacho").click(function () {
    $("#fecha_despacho").val($("#fecha_despacho1").val());
    $("#myModalFechadespacho").modal("hide");
    $("#fecha_despacho1").val("");
    console.log('	$("#fecha_despacho").val(): ' + $("#fecha_despacho").val());
    guardaryeditar();
  });

  $("#btnGuardarFechayEstadodespacho").click(function (e) {
    e.preventDefault();
    $("#myModalFechayEstadodespachogrupo").modal("hide");
    guardarfechacontroldevisitagrupo();
  });

  $("#btnGuardarcontroldevisita").click(function (e) {
    e.preventDefault();
    $("#myModalFechacontroldevisita").modal("hide");
    guardarfechacontroldevisita();
  });

  $("#btnGuardarcontroldevisitam").click(function (e) {
    e.preventDefault();
    $("#myModalFechacontroldevisitam").modal("hide");
    guardarfechacontroldevisitam();
  });
}

function idp(data) {
  const arraySubcadenas = data.split("-");
  return arraySubcadenas[1];
}

function actualizar() {
  location.reload();
}

//funcion limpiar
function limpiar() {
  $("#formulario").data("bootstrapValidator").resetForm(true);
  document.getElementById("formaguardarcliente").reset();
  $("#detalles").html("");
  //$("#detalles").html(r);
  $("#tipo_documento").val("");
  $("#num_documento").val("");
  $("#nombre").val("");
  $("#tipo_comprobante").val("");
  $("#serie_comprobante").val("");
  $("#num_comprobante").val("");
  $("#ordendecompra").val("");
  $("#diacredito").val("");
  $("#zona").val("");
  $("#impuesto").val("");
  $("#montosubtotal").val(0);
  $("#montoapagarbs").val(0);
  $("#validar").val(0);
  $("#total_venta").val(0);
  $("#total_venta1").val(0);
  $(".filas").remove();
  $("#total").html("0");
  $("#idtransportista").val(0);
  $("#idtransportista").selectpicker("refresh");
  $("#idtransporte").val(0);
  $("#idtransporte").selectpicker("refresh");
  $("#idalmacen").val(0);
  $("#idalmacen").selectpicker("refresh");
  $("#idvendedor").val(0);
  $("#idvendedor").selectpicker("refresh");
  $("#idcliente").val(0);
  $("#idcliente").selectpicker("refresh");
  $("#idclientedespacho").html("<option value='0'></option>");
  $("#idclientedespacho").selectpicker("refresh");
  $("#licencia_licor").val("");
  //buscarTasaDeCambio();

  //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();

  //marcamos el primer tipo_documento
  $("#tipo_documento").val("RIF");
  $("#tipo_documento").selectpicker("refresh");

  //Buscamos el ultimo Control de visita
  buscarNumeroControlvisita();
}

//funcion mostrar formulario
function mostrarform(flag, bu) {
  limpiar();
  if (flag) {
    $("#listadoregistros").hide();
    $("#formularioregistros").show();
    $("#formularioregistros1").show();
    //$("#btnGuardar").prop("disabled",false);
    $("#btnagregar").hide();
    //listarArticulos(1);
    //listarArticulosb(1);
    //listarArticulosc(1);
    //listarArticulosd(1);
    //listarArticulose(1);
    //listarPedidos();
    //listarServicios();
    if (bu) {
      //	buscarNroFacturaControl();
    }
    //buscarTasaDeCambio();

    $("#btnGuardar").hide();
    $("#btnCancelar").show();
    detalles = 0;
    $("#btnAgregarArt").show();
    $("#btnAgregarArtb").hide();
    $("#btnAgregarArtc").hide();
    $("#btnAgregarArtd").hide();
    $("#btnAgregarArte").hide();
    $("#btnAgregarSer").show();
    $("#cod_barra").val("");
    $("#cod_barra").focus();
  } else {
    $("#listadoregistros").show();
    $("#formularioregistros").hide();
    $("#formularioregistros1").hide();
    $("#btnagregar").hide();
  }
}

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

function marcarImpuesto() {
  var tipo_comprobante = $("#tipo_comprobante option:selected").text();
  var impuestotexto = document.getElementById("impuesto");
  var serie_comprobante = document.getElementById("serie_comprobante");
  var serie_comprobante1 = document.getElementById("serie_comprobante1");
  var num_comprobante = document.getElementById("num_comprobante");
  var num_comprobante1 = document.getElementById("num_comprobante1");
  impuestotexto.style.backgroundColor = "#D5D5CE";
  if (tipo_comprobante == "Factura") {
    $("#impuesto").val(impuesto1);
    impuesto = $("#impuesto").val();
    serie_comprobante.type = "text";
    num_comprobante.type = "text";
    serie_comprobante1.type = "hidden";
    num_comprobante1.type = "hidden";
    $("#tipodocumentoc").html("# Control");
    $("#tipodocumentof").html("# Factura");
  } else {
    $("#impuesto").val(0);
    impuesto = 0;
    serie_comprobante.type = "hidden";
    num_comprobante.type = "hidden";
    serie_comprobante1.type = "text";
    num_comprobante1.type = "text";
    $("#tipodocumentoc").html("# Control");
    $("#tipodocumentof").html("# NEntrega");
  }
}

//funcion listar
function listar() {
  //$('#tbllistado').DataTable().destroy();
  //$('#tbllistado').DataTable().fnResetAllFilters();
  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: [
        {
          text: "Excel",
          extend: "excelHtml5",
          footer: true,
          filename: "Despacho",
          //orientation: 'landscape', //portrait
          //pageSize: 'A4', //A3 , A5 , A6 , legal , letter
          title: "",
          exportOptions: {
            columns: ":visible",
            search: "applied",
            order: "applied",
          },
        },
        {
          text: "PDF",
          extend: "pdfHtml5",
          className: "btn btn-danger",
          footer: true,
          filename: "Despacho",
          orientation: "landscape", //portrait
          pageSize: "A4", //A3 , A5 , A6 , legal , letter
          title: "",
          exportOptions: {
            columns: ":visible",
            search: "applied",
            order: "applied",
          },
        },
        {
          text: "Guardar Selección", // Texto del botón personalizado
          className: "btn btn-primary btn-sm btn-rounded",
          action: function (e, dt, node, config) {
            // Acción a realizar cuando se hace clic en el botón personalizado
            seleccioncxc();
          },
        },
        {
          text: "Limpiar Selección", // Texto del botón personalizado
          className: "btn btn-primary btn-sm btn-rounded",
          action: function (e, dt, node, config) {
            // Acción a realizar cuando se hace clic en el botón personalizado
            quitarcxc();
          },
        },
      ],
      /* "columnDefs": [ //Oculto La columna por donde ordeno
			{
					"targets": [ 9 ],
					"visible": false,
					"searchable": false
			}
		], */
      ajax: {
        url: "controladores/personaControlador.php?op=listarclientepordiavisitatodos",
        type: "get",
        dataType: "json",
        error: function (e) {
          console.log(e.responseText);
        },
      },

      /* "drawCallback":function(){
			//alert("La tabla se está recargando"); 
			var api 	= this.api();
		//	var tactual	= api.column(3, {page:'current'}).data().sum();
			var total	= api.column(9).data().sum();
		//	tactual		= number_format(tactual*1,2);
			total		= number_format(total*1,2);
			/* $(api.column(4).footer()).html('Total Actual:');
			$(api.column(5).footer()).html(tactual); */
      /*	$(api.column(6).footer()).html('Total:');
			$(api.column(7).footer()).html(total);
	  },  */
      bDestroy: true,
      iDisplayLength: -1, //paginacion
      order: [[0, "desc"]], //ordenar (columna, orden)
    })
    .DataTable();
  //tabla.column(8).visible(8);
  //tabla.dataTable();
  //table.;
  //	$('#tbllistado').DataTable().ajax.reload();
}

//funcion para guardaryeditar
function guardaryeditar() {
  //e.preventDefault();//no se activara la accion predeterminada
  //$("#btnGuardar").prop("disabled",true);
  var formData = new FormData($("#formulario")[0]);

  $.ajax({
    url: "controladores/ventanControlador.php?op=guardaryeditar",
    type: "POST",
    data: formData,
    contentType: false,
    processData: false,

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

function guardarestado() {
  //e.preventDefault();//no se activara la accion predeterminada
  //$("#btnGuardar").prop("disabled",true);
  //var idordenproduccioncamiseria = $("#idordenproduccioncamiseriac").val();
  //console.log('vamos a guardar solo costureras')
  var formData = new FormData($("#formaguarestado")[0]);

  $.ajax({
    url: "controladores/ventanControlador.php?op=guardaryeditarestado",
    type: "POST",
    data: formData,
    contentType: false,
    processData: false,

    success: function (datos) {
      bootbox.alert(datos);
      mostrarform(false);
      listar();
    },
    error: function (e) {
      console.log(e.responseText);
    },
  });

  limpiar();
}

function guardarfechayestadodespacho() {
  let fecha_despachog = $("#fecha_despachog").val();
  let estadodg = $("#estadodg").val();
  console.log("fecha: ", fecha_despachog);
  console.log("estado: ", estadodg);
  console.log("controlfechavalido: ", controlfechavalido);

  if (validarmarcadocxc()) {
    bootbox.confirm(
      "¿Está seguro de que desea actualizar la selección de Notas de Entrega?",
      function (result) {
        if (result) {
          //console.log('idventa y idusuario: '+idventa+'--'+idusuario);
          $.post(
            "controladores/ventanControlador.php?op=guardarfechayestadodespacho",
            {
              fecha_despachog: fecha_despachog,
              estadodg: estadodg,
              controlfechavalido: controlfechavalido,
            },
            function (e) {
              bootbox.alert(e);
              tabla.ajax.reload();
            }
          );
        }
      }
    );
  } else {
    bootbox.alert("No ha seleccionado una Nota de Entrega.");
  }

  /**/
}

function inciarsemana() {
  //obtenemos la fecha actual
  var now = new Date();

  $(fecha_hora).val(fechahoy(now));

  // Array con los nombres de los días de la semana
  const diasSemana = [
    "Domingo",
    "Lunes",
    "Martes",
    "Miércoles",
    "Jueves",
    "Viernes",
    "Sábado",
  ];

  // Obtener el día de la semana como número (0: domingo, 1: lunes, ..., 6: sábado)
  const diaSemanaNumero = now.getDay();

  // Obtener el nombre del día de la semana
  const diaSemana = diasSemana[diaSemanaNumero];
  $("#dia").val(diaSemana);

  const numeroSemana = getWeekNumber(now);
  $("#semana").val(numeroSemana);

  //Buscamos el ultimo Control de visita

  buscarSemanaControlvisita(numeroSemana)
    .then(() => {
      console.log("$(#idcontrolvisita).val(): ", $("#idcontrolvisita").val());
      if ($("#idcontrolvisita").val() != "") {
        buscarNumeroControlvisita();
      }
    })
    .catch((error) => {
      console.error("Error en buscarSemanaControlvisita:", error);
    });
}

function actualizar() {
  location.reload();
}

function guardarfechacontroldevisitagrupo() {
  let fechac = $("#fecha_despachog").val();
  let semana = $("#semana").val();
  let num_controlvisita = $("#num_controlvisita").val();
  let fecha_hora = $("#fecha_hora").val();
  let dia = $("#dia").val();
  let fechaActual = new Date();
  // Limpiar la hora de la fecha actual para comparar solo la fecha
  fechaActual.setHours(0, 0, 0, 0);
  // Convertir la fecha ingresada a un objeto Date
  let fechaIngresadaDate = new Date(fechac);

  // Contenedor donde agregarás los nuevos elementos input (puede ser un div, form, etc.)
  var container = document.getElementById("controlfechavalido-container");

  // Limpia el contenedor por si tiene elementos anteriores
  container.innerHTML = "";

  // Crea los elementos input dinámicamente y asígnales los valores
  for (let i = 0; i < controlfechavalido.length; i++) {
    // Crea un nuevo elemento input
    let input = document.createElement("input");

    // Configura el input
    input.type = "hidden"; // Cambia el tipo si es necesario
    input.name = "controlfechavalidog[]";
    input.value = controlfechavalido[i];

    // Agrega el input al contenedor
    container.appendChild(input);
  }

  /*
  console.log("fecha: ", fechac);
  console.log("idpersona: ", idpersona);
  console.log("semana: ", semana);
  console.log("num_controlvisita: ", num_controlvisita);
  console.log("fecha_hora: ", fecha_hora);
  console.log("dia: ", dia);
  //console.log("cliente[0].value :", cliente[0].value);
*/

  var controlfechavalido1 = Array.from(
    document.getElementsByName("controlfechavalidog[]")
  ).map((input) => input.value);

  buscarSemanaControlvisita(semana)
    .then(() => {
      console.log("$(#idcontrolvisita).val(): ", $("#idcontrolvisita").val());
    })
    .catch((error) => {
      console.error("Error en buscarSemanaControlvisita:", error);
    });

  let idcontrolvisita = $("#idcontrolvisita").val();

  if (fechaIngresadaDate <= fechaActual) {
    if (fechac != "") {
      if (validarmarcadocxc()) {
        if (idcontrolvisita == "") {
          bootbox.confirm(
            "¿Está seguro de que desea actualizar la fecha de visita de clientes seleccionados?",
            function (result) {
              if (result) {
                //console.log('idventa y idusuario: '+idventa+'--'+idusuario);
                $.post(
                  "controladores/controlvisitaControlador.php?op=guardarfechacontroldevisitagrupo",
                  {
                    idcontrolvisita: idcontrolvisita,
                    num_controlvisita: num_controlvisita,
                    fecha_hora: fecha_hora,
                    semana: semana,
                    dia: dia,
                    fechac: fechac,
                    controlfechavalido: controlfechavalido1,
                  },
                  function (e) {
                    bootbox.alert(e);
                    //tabla.ajax.reload();
                    actualizar();
                  }
                );
              }
            }
          );
        } else {
          bootbox.confirm(
            "¿Está seguro de que desea actualizar la fecha de visita?",
            function (result) {
              if (result) {
                //console.log('idventa y idusuario: '+idventa+'--'+idusuario);
                $.post(
                  "controladores/controlvisitaControlador.php?op=guardarfechacontroldevisitagrupo",
                  {
                    idcontrolvisita: idcontrolvisita,
                    num_controlvisita: num_controlvisita,
                    fecha_hora: fecha_hora,
                    semana: semana,
                    dia: dia,
                    fechac: fechac,
                    controlfechavalido: controlfechavalido1,
                  },
                  function (e) {
                    bootbox.alert(e);
                    //tabla.ajax.reload();
                    actualizar();
                  }
                );
              }
            }
          );
        }
      } else {
        swal(
          "No se ha seleccionado ningún cliente para actualizar la fecha de visita. Por favor, elige un cliente antes de continuar!"
        );
      }
    } else {
      swal(
        "La fecha de visita no puede estar en blanco. Por favor, ingrese una fecha antes de continuar"
      );
    }
  } else {
    swal(
      "La fecha ingresada es mayor que la fecha actual. Por favor, ingrese una fecha válida."
    );
  }
}

function guardarfechacontroldevisita() {
  let fechac = $("#fecha_despacho1c").val();
  let idpersona = $("#idpersonac").val();
  let idvendedor = $("#idvendedorc").val();
  let semana = $("#semana").val();
  let num_controlvisita = $("#num_controlvisita").val();
  let fecha_hora = $("#fecha_hora").val();
  let dia = $("#dia").val();
  let fechaActual = new Date();
  // Limpiar la hora de la fecha actual para comparar solo la fecha
  fechaActual.setHours(0, 0, 0, 0);
  // Convertir la fecha ingresada a un objeto Date
  let fechaIngresadaDate = new Date(fechac);

  const numeroSemana = getWeekNumber(fechaIngresadaDate);

  //Verificamos la semana a guardar
  if (semana != numeroSemana) {
    semana = numeroSemana;
  }

  //Detalle
  let cliente = document.getElementsByName("cliente[]");
  let fechavisita = document.getElementsByName("fechavisita[]");
  let personacontacto = document.getElementsByName("personacontacto[]");
  let telefono = document.getElementsByName("telefono[]");
  let observacion = document.getElementsByName("observacion[]");

  cliente[0].value = semana + "/" + idpersona + "/" + idvendedor;
  fechavisita[0].value = fechac;
  personacontacto[0].value = "";
  telefono[0].value = "";
  observacion[0].value = "";

  console.log("fecha: ", fechac);
  console.log("idpersona: ", idpersona);
  console.log("semana a la fecha de hoy: ", semana);
  console.log("semana de la fecha ingresada: ", numeroSemana);
  console.log("num_controlvisita: ", num_controlvisita);
  console.log("fecha_hora: ", fecha_hora);
  console.log("dia: ", dia);
  console.log("cliente[0].value :", cliente[0].value);

  let clientes = Array.from(document.getElementsByName("cliente[]")).map(
    (input) => input.value
  );
  let fechavisitas = Array.from(
    document.getElementsByName("fechavisita[]")
  ).map((input) => input.value);
  let personacontactos = Array.from(
    document.getElementsByName("personacontacto[]")
  ).map((input) => input.value);
  let telefonos = Array.from(document.getElementsByName("telefono[]")).map(
    (input) => input.value
  );
  let observacions = Array.from(
    document.getElementsByName("observacion[]")
  ).map((input) => input.value);

  buscarSemanaControlvisita(semana)
    .then(() => {
      console.log("$(#idcontrolvisita).val(): ", $("#idcontrolvisita").val());
    })
    .catch((error) => {
      console.error("Error en buscarSemanaControlvisita:", error);
    });

  let idcontrolvisita = $("#idcontrolvisita").val();

  console.log("fechaActual :", fechaActual);
  console.log("Fecha ingresada: ", fechaIngresadaDate);
  if (fechac != "") {
    if (fechaIngresadaDate <= fechaActual) {
      if (idcontrolvisita == "") {
        bootbox.confirm(
          "¿Está seguro de que desea actualizar la fecha de visita?",
          function (result) {
            if (result) {
              //console.log('idventa y idusuario: '+idventa+'--'+idusuario);
              $.post(
                "controladores/controlvisitaControlador.php?op=guardaryeditar",
                {
                  idcontrolvisita: idcontrolvisita,
                  num_controlvisita: num_controlvisita,
                  fecha_hora: fecha_hora,
                  semana: semana,
                  dia: dia,
                  cliente: clientes,
                  fechavisita: fechavisitas,
                  personacontacto: personacontactos,
                  telefono: telefonos,
                  observacion: observacions,
                },
                function (e) {
                  bootbox.alert(e);
                  actualizar();
                }
              );
            }
          }
        );
      } else {
        bootbox.confirm(
          "¿Está seguro de que desea actualizar la fecha de visita?",
          function (result) {
            if (result) {
              //console.log('idventa y idusuario: '+idventa+'--'+idusuario);
              $.post(
                "controladores/controlvisitaControlador.php?op=guardaryeditar",
                {
                  idcontrolvisita: idcontrolvisita,
                  num_controlvisita: num_controlvisita,
                  fecha_hora: fecha_hora,
                  semana: semana,
                  dia: dia,
                  cliente: clientes,
                  fechavisita: fechavisitas,
                  personacontacto: personacontactos,
                  telefono: telefonos,
                  observacion: observacions,
                },
                function (e) {
                  bootbox.alert(e);
                  tabla.ajax.reload();
                }
              );
            }
          }
        );
      }
    } else {
      swal(
        "La fecha ingresada es mayor que la fecha actual. Por favor, ingrese una fecha válida."
      );
    }
  } else {
    swal(
      "La fecha de visita no puede estar en blanco. Por favor, ingrese una fecha antes de continuar"
    );
  }

  /* */
}

function guardarfechacontroldevisitam() {
  let fechac = $("#fecha_despacho1cm").val();
  let idcliente = $("#idpersonacm").val();
  let idvendedor = $("#idvendedorcm").val();
  let idcontrolvisita = $("#idcontrolvisitacm").val();
  let iddetalle_controlvisita = $("#iddetalle_controlvisitacm").val();
  let fechaActual = new Date();

  if (fechac != "") {
    bootbox.confirm(
      "¿Está seguro de que desea actualizar la fecha de visita?",
      function (result) {
        if (result) {
          //console.log('idventa y idusuario: '+idventa+'--'+idusuario);
          $.post(
            "controladores/controlvisitaControlador.php?op=guardaryeditarm",
            {
              iddetalle_controlvisita: iddetalle_controlvisita,
              idcontrolvisita: idcontrolvisita,
              fecha_modificacion: fechaActual,
              fechavisita: fechac,
              idcliente: idcliente,
              idvendedor: idvendedor,
            },
            function (e) {
              //bootbox.alert(e);
              //detalles.ajax.reload();
              $.post(
                "controladores/controlvisitaControlador.php?op=listarDetalleclientevendedor&id=" +
                  idcliente,
                function (r) {
                  $("#detalles").html(r);
                }
              );
            }
          );
        }
      }
    );
  } else {
    swal(
      "La fecha de visita no puede estar en blanco. Por favor, ingrese una fecha antes de continuar"
    );
  }
}

//Se busca el numero de factura y control
function buscarNumeroControlvisita() {
  $.post(
    "controladores/controlvisitaControlador.php?op=buscarNumeroControlvisita",
    function (data, status) {
      //alert ('estatus: '+status);
      var controlvisita = 1;
      data1 = JSON.parse(data);
      if (data1 == null) {
        $("#num_controlvisita").val(controlvisita);
      } else {
        controlvisita = data1.num_controlvisita * 1 + 1;
        $("#num_controlvisita").val(controlvisita);
      }
      //console.log("#idu: " + $("#idu").val());
      console.log("#num_controlvisita: " + $("#num_controlvisita").val());
      //alert ('num_pedido: '+pedido);
    }
  );
}

//Se busca la semana
/**/
function buscarSemanaControlvisita(semana) {
  return new Promise((resolve, reject) => {
    // Aquí realizas la operación asíncrona (como una llamada AJAX)
    $.ajax({
      url: "controladores/controlvisitaControlador.php?op=buscarSemanaControlvisita", // Cambia esto por tu URL real
      method: "POST",
      data: { semana: semana },
      success: function (response) {
        // Asume que haces algo con la respuesta
        // y luego resuelves la promesa

        response1 = JSON.parse(response);
        if (response1 != null) {
          $("#idcontrolvisita").val(response1.idcontrolvisita);
          console.log("#idcontrolvisita: " + $("#idcontrolvisita").val());
        }

        resolve(); // Resuelve la promesa una vez que la operación ha terminado
      },
      error: function (error) {
        reject(error); // Rechaza la promesa si hay un error
      },
    });
  });
}

/*
function buscarSemanaControlvisita(semana) {
  $.post(
    "controladores/controlvisitaControlador.php?op=buscarSemanaControlvisita",
    { semana: semana },
    function (data, status) {
      //alert ('estatus: '+status);

      data1 = JSON.parse(data);
      if (data1 == null) {
        $("#idcontrolvisita").val("");
      } else {
        $("#idcontrolvisita").val(data1.idcontrolvisita);
      }
      //console.log("#idu: " + $("#idu").val());
      console.log("#idcontrolvisita: " + $("#idcontrolvisita").val());
      //alert ('num_pedido: '+pedido);
    }
  );
}
  */

// Función para obtener el número de la semana
function getWeekNumber(d) {
  // Copiar fecha para no modificar la original
  d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
  // Establecer el primer día de la semana en lunes
  d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay() || 7));
  // Obtener el primer día del año
  var startOfYear = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
  // Calcular el número de la semana
  var weekNo = Math.ceil(((d - startOfYear) / 86400000 + 1) / 7);
  return weekNo;
}

function fechahoy(fecha) {
  var today = new Date();
  var dd = ("0" + fecha.getDate()).slice(-2);
  var mm = ("0" + (fecha.getMonth() + 1)).slice(-2);
  var yyyy = fecha.getFullYear();
  var today = yyyy + "-" + mm + "-" + dd;
  return today;
}

function actualizarsemana() {
  //obtenemos la fecha actual
  var now = new Date();

  $(fecha_hora).val(fechahoy(now));

  // Array con los nombres de los días de la semana
  const diasSemana = [
    "Domingo",
    "Lunes",
    "Martes",
    "Miércoles",
    "Jueves",
    "Viernes",
    "Sábado",
  ];

  // Obtener el día de la semana como número (0: domingo, 1: lunes, ..., 6: sábado)
  const diaSemanaNumero = now.getDay();

  // Obtener el nombre del día de la semana
  const diaSemana = diasSemana[diaSemanaNumero];
  $("#dia").val(diaSemana);

  const numeroSemana = getWeekNumber(now);
  $("#semana").val(numeroSemana);
}

function mostrar(idpersona) {
  $.post(
    "controladores/personaControlador.php?op=mostrarclientevendedor",
    { idpersona: idpersona },
    function (data, status) {
      data = JSON.parse(data);
      mostrarform(true, false);

      $("#cliente").val(data.cliente);
      $("#vendedor").val(data.vendedor);
      $("#numerovisita").val(data.numerovisita);
      $("#fechavisitaultima").val(data.fechavisitaultima);
      $("#semana1").val(data.semana);
      $("#nrocxc").val(data.nrocxc);
      $("#fechaventaultima").val(data.fechaventaultima);

      $("#btnGuardar").hide();
      $("#btnCancelar").show();
      $("#btnAgregarArt").hide();
      $("#btnAgregarSer").hide();
      $("#btnTotalizar").hide();
      $("#btnAgregarBar").hide();
      $("#btnAgregarPed").hide();
      $("#btnFacturar").hide();
      $.post(
        "controladores/controlvisitaControlador.php?op=listarDetalleclientevendedor&id=" +
          idpersona,
        function (r) {
          $("#detalles").html(r);
        }
      );
    }
  );

  /**/
}

function cambiaratributo(idventa1) {
  console.log("cambiar atributto");
  mostrarfechadespacho(idventa1);
}

//
function mostrarfechadespacho(idventa) {
  console.log("cambiar fecha");
  $("#idventa").val(idventa);
  $("#estadoporfecha").val("Despachada");
  $("#myModalFechadespacho").modal("show");
  mostrarsestadod(idventa);
  $("#myModalFechadespachoestado").modal("hide");
}

//
function actualizarfecha(idpersona, idvendedor, persona) {
  console.log("actualizar fecha: ", idpersona);
  $("#controlcliente").html(persona);
  $("#idpersonac").val(idpersona);
  $("#idvendedorc").val(idvendedor);
  $("#myModalFechacontroldevisita").modal("show");
}

function actualizarfecham(
  iddetalle_controlvisita,
  idcontrolvisita,
  idpersona,
  idvendedor,
  persona
) {
  console.log("actualizar fecha: ", idpersona);
  $("#controlclientem").html(persona);
  $("#idpersonacm").val(idpersona);
  $("#idvendedorcm").val(idvendedor);
  $("#idcontrolvisitacm").val(idcontrolvisita);
  $("#iddetalle_controlvisitacm").val(iddetalle_controlvisita);
  $("#myModalFechacontroldevisitam").modal("show");
}

function mostrarsestadod(idventa) {
  //bootbox.alert('mostar articulo sin stock '+idordenproduccioncamiseria);
  //console.log('idordenproduccioncamiseria: '+idordenproduccioncamiseria)
  tabla1 = $("#tbestado")
    .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=mostrarsestado",
        method: "post",
        data: {
          idventa: idventa,
        },
        dataType: "json",
        error: function (e) {
          console.log(e.responseText);
        },
      },
      bDestroy: true,
      iDisplayLength: -1, //paginacion
      order: [[0, "desc"]], //ordenar (columna, orden)
    })
    .DataTable();
  $("#myModalFechadespachoestado").modal("show");
}

// Funcion para cambiar el estado y fecha de la cxc seleccionada
function seleccioncxc() {
  let inicio = 0;
  let checks1 = document.getElementsByName("iddocumento[]");

  //recorremos las cxc
  console.log("checks1.length, total de clientes:", checks1.length);
  for (var i = 0, j = checks1.length; i < j; i++) {
    if (checks1[i].checked == true) {
      //controlfechavalido[inicio] = idp(checks1[i].value);
      controlfechavalido[inicio] = checks1[i].value;
      /* console.log(
        "controlfechavalido[inicio] tilde si: ",
        controlfechavalido[inicio]
      ); */
      inicio = inicio + 1;
    } else {
      /* console.log("No tilde"); */
    }
  }

  /* console.log(
    "controlfechavalido.length, total de clientes tildados:",
    controlfechavalido.length
  ); 
  for (var i = 0, j = controlfechavalido.length; i < j; i++) {
    console.log("controlfechavalido[i] guardados: ", controlfechavalido[i]);
  }*/

  $("#myModalFechayEstadodespachogrupo").modal("show");
  // Limpia el contenedor por si tiene elementos anteriores
  container.innerHTML = "";
}

function quitarcxc() {
  let checks1 = document.getElementsByName("iddocumento[]");
  for (var i = 0, j = checks1.length; i < j; i++) {
    checks1[i].checked = false;
  }
}

function validarmarcadocxc() {
  let checks1 = document.getElementsByName("iddocumento[]");
  let total = 0;
  let retorno = true;
  for (var i = 0, j = checks1.length; i < j; i++) {
    if (checks1[i].checked == false) {
      total = total + 1;
    }
  }

  if (total >= checks1.length) {
    retorno = false;
  }

  return retorno;
}

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

function eliminarDetalleClave(indice) {
  $("#myModalPermiso").modal("show");
  indicepermisoborrar = indice;
}

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

init();
