////////////////////////////////////// 26/10/2019 LOGICA PARA PROGRAMACION JAMN ============================

$("document").ready(function () {
	eventos();
	$('#tablaRelPedimentos').SetEditable();
	$('#tablaDetalleCarga').SetEditable();
	obtenerImportadores("");
	obtenerListadoClientes();
	obtenerTiposCarga();
	
	$("#linkProgramar").addClass("subdrop"); 
	//$(".button-menu-mobile").trigger("click");
});

function eventos() {
	//cargar personal del cliente seleccionado
	$("#idAgenciaPatente").on("change", function(e){
		obtenerListadoPersonalCliente($("#idAgenciaPatente").val());
	});

	$("#btnAgregarPedimento").on("click", function(e){
		agregarColumnaPedimento();
	});
	$("#btnAgregarCarga").on("click", function(e){
		agregarColumnaCarga();
	});
	
	$("#selectTipoCarga").on("change", function(e){
		switch(Number($("#selectTipoCarga").val())){
			case 1: {
				//Carga Contenerizada
				$("#divDetalleCarga").fadeIn("100");
				$("#divDetalleCargaSuelta").fadeOut("100");
			};break;
			case 2: {
				//Carga Suelta
				$("#divDetalleCarga").fadeOut("100");
				$("#divDetalleCargaSuelta").fadeIn("100");
			};break;
			case -1: {
				//sin opcion seleccionada
				$("#divDetalleCarga").fadeOut("100");
				$("#divDetalleCargaSuelta").fadeOut("100");
			};break;
		}
		
	});
	
	/*
	$("#txtImportador").on("change", function(e){
	    obtenerImportadores($(this).val());
	});
	*/
    
    $("#txtImportador").on("keyup", delayKey(function (e) {
      //console.log('Time elapsed!', this.value);
      obtenerImportadores($(this).val());
    }, 200));

	$("#btnGuardar").on("click", function(e){
		//datos de controles
		var validado = 0;
		var errorTablaCarga = 0;
		var idCliente = Number($("#idAgenciaPatente").val());
		var idClientePersonal = Number($("#idDependienteAA").val());
		var importador = "NO APLICA";
		var tipoCarga = Number($("#selectTipoCarga").val());
		var esImo = ($('#checkIMO').is(":checked")) ? 1 : 0 ;
		var numeroPedimentos = $('#tablaRelPedimentos >table >tbody >tr').length;
		var numeroContenedores = $('#tablaDetalleCarga >table >tbody >tr').length;
		var pIdImportador = Number($("#ddlImportador").val());
		
		//validar info
		//TODO: pedimento repetido
		//TODO: contenedor repetido
		if (idCliente > 0) {
			if (idClientePersonal > 0) {
				if (importador.length >= 1) {
					if (numeroPedimentos > 0) {
						if (tipoCarga > 0) {
							if (tipoCarga > 0) {
								switch(tipoCarga){
									case 1: {
										//contenerizada
										if (numeroContenedores > 0){
											$('#tablaDetalleCarga > table').find('tbody').children("tr").each(function() {
												var tmpdimcont = $(this).find("td:nth-child(1) > select").val();					
												var tmpnumcont = $(this).find("td:nth-child(2)").text();
												//var tmptraz = $(this).find("td:nth-child(3)").text();
												//if (!(tmpdimcont > 0) || !(tmpnumcont.length > 0) || !(tmptraz.length > 0)){
												if (!(tmpdimcont > 0) || !(tmpnumcont.length > 0)){
													swal("Datos incompletos de contenedor", "Algun dato de alguno de los contenedores no se capturó o es erroneo", "warning");
													errorTablaCarga = 1;
													return false;
												}
											});
											validado = (errorTablaCarga == 0) ? 1 : 0;
										} else {
											errorTablaCarga = 1;
											swal("Datos incompletos de carga", "Debes capturar al menos un contenedor si el tipo de carga es CONTENERIZADA", "warning");
										}

										
									}; break;
									case 2: {
										//suelta
										$('#tablaDetalleCargaSuelta > table').find('tbody').children("tr").each(function() {
											//solo hay una fila
											tmpcan = Number($(this).find("td:nth-child(1)").text());
											tmpPeso = Number($(this).find("td:nth-child(2)").text());
											//tmptraz = $(this).find("td:nth-child(3)").text();
											//if (!(tmpcan > 0) || !(tmpPeso > 0) || !(tmptraz.length > 0)){
											if (!(tmpcan > 0) || !(tmpPeso > 0)){
												swal("Datos incompletos de carga", "Revisa la cantidad o peso", "warning");
												errorTablaCarga = 1;
												return false;
											}
										});
										validado = (errorTablaCarga == 0) ? 1 : 0;
									};
								}
							} else {
								swal("Por favor selecciona el tipo de carga");
							}
						} else {
							swal("Por favor selecciona el tipo de carga");
						}
					} else {
						swal("Por favor captura al menos un pedimento con referencia");
					}
				} else {
					swal("Por favor captura el importador");
				}
			} else {
				swal("Por favor selecciona un dependiente del campo desplegable.");
			}
		} else {
			swal("Por favor selecciona un cliente del campo desplegable.");
		}

		//determinar tipo de carga}
		if (validado == 1){
			switch(tipoCarga){
				case 1: {
					//CARGA CONTENERIZADA
					//insertar un servicio por cada contenedor
					$('#tablaDetalleCarga > table').find('tbody').children("tr").each(function() {
						var dimensionContenedor = $(this).find("td:nth-child(1) > select").val();					
						var numContenedor = $(this).find("td:nth-child(2)").text();
						//var codigoTrazabilidad = $(this).find("td:nth-child(3)").text();
	
						//serviciosInsertar(	codigoTrazabilidad, idCliente, idClientePersonal, importador, 
						serviciosInsertar(idCliente, idClientePersonal, importador, tipoCarga, esImo, dimensionContenedor, numContenedor, "", "", 0, 0, "", "", "", "",pIdImportador);
						
						// //una vez obtenido el idServicio creado, insertamos los pedimentos capturados en la programación
						// $('#tablaRelPedimentos > table').find('tbody').children("tr").each(function() {
						// 	var pedimento = $(this).find("td:nth-child(1)").text();
						// 	var referencia = $(this).find("td:nth-child(2)").text();
						// 	insertarPedimentoServicio(idServicio, pedimento, referencia);
						// });
	
					});
					//sweet alert de confirmación
					//Limpiar controles / recargar pagina
	
				}; break;
	
				case 2: {
					//CARGA SUELTA
					//Obtener información de la carga
					var cantidad = 0;
					var peso = 0;
					//var codigoTrazabilidad = "";
					$('#tablaDetalleCargaSuelta > table').find('tbody').children("tr").each(function() {
						//solo hay una fila
						cantidad = Number($(this).find("td:nth-child(1)").text());
						peso = Number($(this).find("td:nth-child(2)").text());
						//codigoTrazabilidad = $(this).find("td:nth-child(3)").text();
					});
	
					//insertar en servicio, obtener id de servicio
					// serviciosInsertar(codigoTrazabilidad, idCliente, idClientePersonal, importador, tipoCarga, esImo, "", "", "", "", cantidad, peso, "", "", "", "");
					
					//insertar en servicio, obtener id de servicio
					//serviciosInsertar(codigoTrazabilidad, idCliente, idClientePersonal, importador, tipoCarga, esImo, null, null, "", "", cantidad, peso, "", "", "", "");
					serviciosInsertar(idCliente, idClientePersonal, importador, tipoCarga, esImo, null, null, "", "", cantidad, peso, "", "", "", "",pIdImportador);
	
					//sweet alert de confirmación
					//Limpiar controles / recargar pagina
	
				}; break;
	
				default: break;
			}

		}
		
	});
	
}

function agregarColumnaPedimento() {  //Agrega fila a la tabla indicada.
    var $filas = $("#tablaRelPedimentos").find('tbody tr');
	if ($filas.length==0) {
        var $row = $("#tablaRelPedimentos").find('thead tr');  //encabezado
        var $cols = $row.find('th');  //lee campos
        //construye html
        var htmlDat = '';
        $cols.each(function() {
            if ($(this).attr('name')=='buttons') {
                //Es columna de botones
                htmlDat = htmlDat + colEdicHtml;  //agrega botones
            } else {
                htmlDat = htmlDat + '<td></td>';
            }
        });
        $("#tablaRelPedimentos").find('tbody').append('<tr>'+htmlDat+'</tr>');
    } else {
        //Hay otras filas, podemos clonar la última fila, para copiar los botones
        var $ultFila = $("#tablaRelPedimentos").find('tr:last');
        $ultFila.clone().appendTo($ultFila.parent());  
        $ultFila = $("#tablaRelPedimentos").find('tr:last');
        var $cols = $ultFila.find('td');  //lee campos
        $cols.each(function() {
            if ($(this).attr('name')=='buttons') {
                //Es columna de botones
            } else {
                $(this).html('');  //limpia contenido
            }
        });
    }
	params.onAdd();
}

function agregarColumnaCarga() {  //Agrega fila a la tabla indicada.
    var $filas = $("#tablaDetalleCarga").find('tbody tr');
	if ($filas.length==0) {
        var $row = $("#tablaDetalleCarga").find('thead tr');  //encabezado
        var $cols = $row.find('th');  //lee campos
        //construye html
        var htmlDat = '';
        $cols.each(function(index, value) {
            if ($(this).attr('name')=='buttons') {
                //Es columna de botones
                htmlDat = htmlDat + colEdicHtml;  //agrega botones
            } else {
				if (index == 0) {
					htmlDat = htmlDat + "<td contenteditable='true'><select class='select form-control selectTipoCarga'><option value='-1'>Selecione una opción</option><option value='1'>Contenedor de 20</option><option value='2'>Contenedor de 40</option></select></td>";
				} else {
					htmlDat = htmlDat + '<td></td>';
				}
                //htmlDat = htmlDat + '<td></td>';
            }
        });
        $("#tablaDetalleCarga").find('tbody').append('<tr>'+htmlDat+'</tr>');
    } else {
		var htmlDat = "<tr><td contenteditable='true'><select class='select form-control selectTipoCarga'><option value='-1'>Selecione una opción</option><option value='1'>Contenedor de 20</option><option value='2'>Contenedor de 40</option></select></td><td contenteditable='true'>0</td><td contenteditable='true'>0</td><td>" + newColHtml + "</td></tr>";
		$("#tablaDetalleCarga").find('tbody').append(htmlDat);
    }
	params.onAdd();
}

function obtenerListadoClientes(){
	var datos = {
		pTipoOperacion: "obtenerListadoClientes"
	};
	
	$.ajax({
		type: "POST",
		data: datos,
		url: "../sippre/dataAccess/catFuncionesProgramarServicios.php",
		dataType: "json",
		async: true,
		beforeSend: function () {
			//indicador de carga
		},
		success: function (resp) { 
			 var strtmp = "<option value='-1' selected> Seleccione una opción </option>";
			//Recorremos lista de empresas
			if (resp.transaccion > 0){
				for (var i = 0; i < resp.datos.length; i++) {
					strtmp += "<option value='" + resp.datos[i].id + "'> " + resp.datos[i].patente +" - " + resp.datos[i].nombre + " </option>";
				}
				$("#idAgenciaPatente").empty();
				$("#idAgenciaPatente").append(strtmp);
				
				$("#ddlImportador").empty();
				$("#ddlImportador").append(strtmp);
			}
				
		},
		complete: function () {
			//detener indicador de carga
			$('#idAgenciaPatente').selectpicker('refresh');
			$('#ddlImportador').selectpicker('refresh');
		},
		error: function (xhr, ajaxOptions, thrownError) {
			console.log(xhr);
			console.log(ajaxOptions);
		}
	});
	
}

function obtenerListadoPersonalCliente(idCliente){
	var datos = {
		pTipoOperacion: "obtenerListadoPersonalCliente",
		pIdCliente: Number(idCliente),
	};
	
	$.ajax({
		type: "POST",
		data: datos,
		url: "../sippre/dataAccess/catFuncionesProgramarServicios.php",
		dataType: "json",
		async: true,
		beforeSend: function () {
			//indicador de carga
		},
		success: function (resp) { 
			var strtmp = "<option value='-1' selected> Seleccione una opción </option>";
			//Recorremos lista de personal del cliente especificado
			if (resp.transaccion > 0 && (resp.datos != null) ){
				for (var i = 0; i < resp.datos.length; i++) {
					strtmp += "<option value='" + resp.datos[i].id + "'> " + resp.datos[i].nombre + " </option>";
				}
				$("#idDependienteAA").empty();
				$("#idDependienteAA").append(strtmp);
			} else {
				strtmp = "<option value='-1' selected> No se encontró personal para la empresa seleccionada </option>";
				$("#idDependienteAA").empty();
				$("#idDependienteAA").append(strtmp);
			}
				
		},
		complete: function () {
			//detener indicador de carga
			$('#idDependienteAA').selectpicker('refresh');
		},
		error: function (xhr, ajaxOptions, thrownError) {
			console.log(xhr);
			console.log(ajaxOptions);
		}
	});
}

function obtenerTiposCarga(){
	var datos = {
		pTipoOperacion: "obtenerTiposCarga",
	};
	
	$.ajax({
		type: "POST",
		data: datos,
		url: "../sippre/dataAccess/catFuncionesProgramarServicios.php",
		dataType: "json",
		async: true,
		beforeSend: function () {
			//indicador de carga
		},
		success: function (resp) { 
			 var strtmp = "<option value='-1' selected> Seleccione una opción </option>";
			//Recorremos lista de personal del cliente especificado
			if (resp.transaccion > 0){
				for (var i = 0; i < resp.datos.length; i++) {
					strtmp += "<option value='" + resp.datos[i].id + "'> " + resp.datos[i].nomtipocarga + " </option>";
				}
				//console.log(strtmp);
				$("#selectTipoCarga").empty();
				$("#selectTipoCarga").append(strtmp);
			}
				
		},
		complete: function () {
			//detener indicador de carga
		},
		error: function (xhr, ajaxOptions, thrownError) {
			console.log(xhr);
			console.log(ajaxOptions);
		}
	});
}

//function serviciosInsertar(trazabilidad, cliente, clientePersonal, importador, tipoCarga, imo, dimContenedor, numContenedor, selloOriginal, selloNuevo, cantidad, peso, tipoServicio, idDesMed, notasCantidad, notasCarga){
function serviciosInsertar(cliente, clientePersonal, importador, tipoCarga, imo, dimContenedor, numContenedor, selloOriginal, selloNuevo, cantidad, peso, tipoServicio, idDesMed, notasCantidad, notasCarga,pIdImportador){

	var esimoint = (imo) ? 1 : 0 ;
	var datos = {
		pTipoOperacion : "serviciosInsertar",
		//pCodigoTrazabilidad: trazabilidad,
		pIdCliente : cliente,
		pIdCliPersonal : clientePersonal,
		pImportador : importador,
		pIdTipoCarga : tipoCarga,
		pimo : esimoint,
		pIdDimCon : dimContenedor,
		pContenedor : numContenedor,
		pSelloOriginal : selloOriginal,
		pSelloNuevo : selloNuevo,
		pCantidad : cantidad,
		pPeso : peso,
		pIdTipoServicio : tipoServicio,
		pIdDesMed : idDesMed,
		pNotasCantidad : notasCantidad,
		pNotasCarga : notasCarga,
		pIdImportador: pIdImportador
	};

	$.ajax({
		type: "POST",
		data: datos,
		url: "../sippre/dataAccess/catFuncionesProgramarServicios.php",
		dataType: "json",
		async: false,
		beforeSend: function () {

		},
		success: function (resp) {
			console.log(resp);
			if (resp.transaccion > 0){
				//return Number(resp.transaccion);
				var idServicio = Number(resp.transaccion);
				//insertamos pedimentos capturados
				$('#tablaRelPedimentos > table').find('tbody').children("tr").each(function(index) {
					var pedimento = $(this).find("td:nth-child(1)").text();
					var referencia = $(this).find("td:nth-child(2)").text();
					var last = ($('#tablaRelPedimentos > table').find('tbody').children("tr").length == (index + 1)) ? 1 : 0 ;
					insertarPedimentoServicio(idServicio, pedimento, referencia, last);
				});

			} else {
				//return 0;
			}
				
		},
		complete: function () {
			
		},
		error: function (xhr, ajaxOptions, thrownError) {
			console.log(xhr);
			console.log(ajaxOptions);
		}
	});
						

}

function insertarPedimentoServicio(servicio, pedimento, referencia, ultimo){
	
	var datos = {
		pTipoOperacion: "serviciosPedimentosInsertar",
		pIdServicio: Number(servicio),
		pPedimento: pedimento,
		pReferencia: referencia
	};

	$.ajax({
		type: "POST",
		data: datos,
		url: "../sippre/dataAccess/catFuncionesProgramarServicios.php",
		dataType: "json",
		async: false,
		beforeSend: function () {
			//indicador de carga
		},
		success: function (resp) {
			//console.log(resp);
			if(ultimo == 1){
				swal("Programación exitosa","El servicio y su información se programó correctamente","success").then((value) => {
					location.reload();
				  });
			}
			if (resp.transaccion > 0){
			} else {
				console.log("Error al insertar pedimento "+ pedimento + " del servicio" + servicio + ": " + resp.mensaje);
			}
				
		},
		complete: function () {
			//detener indicador de carga
			
		},
		error: function (xhr, ajaxOptions, thrownError) {
			console.log(xhr);
			console.log(ajaxOptions);
		}
	});

}

function obtenerImportadores(texto){
	var datos = {
		pTipoOperacion: "obtenerImportadores",
		pTexto: texto
	};
	
	$.ajax({
		type: "POST",
		data: datos,
		url: "../sippre/dataAccess/catFuncionesProgramarServicios.php",
		dataType: "json",
		async: true,
		beforeSend: function () {
			//indicador de carga
		},
		success: function (resp) {
			if (resp.transaccion > 0 && (resp.datos != null) ){
				var importadores = new Array(resp.datos.length);
				for (var i = 0; i < resp.datos.length; i++) {
					importadores[i] = resp.datos[i].importador;
					if (i == (resp.datos.length - 1)) {
					    autoCompletar(importadores);
					}
				}
				
			} else {
				//no hay importadores, no se inicializa el typeahead
			}
				
		},
		complete: function () {
			/*
			$('#txtImportador').autoComplete({
				resolverSettings: {
					url: JSON.stringify(importadores);
				}
			});
			*/
		},
		error: function (xhr, ajaxOptions, thrownError) {
			console.log(xhr);
			console.log(ajaxOptions);
		}
	});
}

function autoCompletar(importadores){
    console.log(JSON.stringify(importadores));
    /*
    $(".basicautocomplete").autoComplete({
		resolverSettings: {
			//url: JSON.stringify(importadores)
			url: '../sippre/assets/js/test-list.json'
		}
	});
	*/
	$(".basicautocomplete").autoComplete();
	
}

function delayKey(callback, ms) {
  var timer = 0;
  return function() {
    var context = this, args = arguments;
    clearTimeout(timer);
    timer = setTimeout(function () {
      callback.apply(context, args);
    }, ms || 0);
  };
}
