<?php
session_start();
include('config.php');
include($rutaPhp.$rutaHtml.'/maqueta/includes.php');

$traza=(isset($_GET['traza']) && $_GET['traza']=='si');

include($rutaPhp.$rutaHtml.'/acceso/control.php');
include($rutaPhp.$rutaHtml.'/maqueta/arriba.php');

include($rutaPhp.$rutaHtml.'/librerias/teclado.php');

if( isset($_GET['palet']) && $_GET['palet'] ) $palet=$_GET['palet'];
else if( isset($_POST['palet']) && $_POST['palet'] ) $palet=$_POST['palet'];
else $palet='';

if( isset($_GET['indice']) && $_GET['indice'] ) $indice=$_GET['indice'];
else if( isset($_POST['indice']) && $_POST['indice'] ) $indice=$_POST['indice'];
else $indice='';

if($palet && $indice) {

	//Volvemos a hacer la petición para refrescar
	$noAgrupar='';
	
	$peticion='SGAUbicar#'.$_SESSION['empresa'].'#'.$_SESSION['usuario']['Usuario'].'#PRODUCTOSCONTENEDOR#'.$_SESSION['almacen'].';'.$palet.';'.$noAgrupar;
	$resultado=PedirDatos($wsUsuario,$wsClave,$wsEmpresa,$peticion);
	
	if($traza) {
		echo '<p>'.$peticion.'</p>';
		print_r($resultado);
		echo '<hr>';
	}
	
	unset($producto);
	
	$indiceGrabacion='';
	
	foreach($resultado as $item) {
	
		$indiceTemp=creaIndiceNSInterno($item,$palet);
		
		if(sha1($indiceTemp)==$indice) {
			$producto=$item;
			$indiceGrabacion=$indiceTemp;
		}
		
	}
	
	if(isset($producto)) {
	
		if($_POST['confirmacion']==1) {
		
			//SGANSAsignacionInterna(EMP,Usuario,ParamAlmacen,Rangos)
			//ParamAlmacen="Art¬Idioma¬Ubicacion¬Palet¬Lote¬Caducidad¬Precinta¬Estado¬Entrada¬Linea"
			//Rangos="NS260001¬NS260012"
			//Separador Rangos="|" -> NS260001¬NS260012|NS260015¬NS260015|...
			
			$ParamAlmacen=$indiceGrabacion;
			
			$Rangos='';
			if(isset($_POST['lecturasRangos']) && $_POST['lecturasRangos']) $Rangos=$_POST['lecturasRangos'];
			
			if($Rangos) {
			
				$valoresRangos=explode('|',$Rangos); //Esto se utiliza al final en javascript para reconstruir los campos
			
				$peticion='SGANSAsignacionInterna#'.$_SESSION['empresa'].'#'.$_SESSION['usuario']['Usuario'].'#'.$ParamAlmacen.'#'.$Rangos;
				$resultado=PedirDatos($wsUsuario,$wsClave,$wsEmpresa,$peticion);
				
				if($traza) {
					echo '<p>'.$peticion.'</p>';
					print_r($resultado);
					echo '<hr>';
				}
				
				$valores=explode('#',$resultado[0]['Error']);
				
				if($valores[0]==1) {
					?>
					<script>
						alert('ERROR: <?php echo $valores[1]; ?>',null,'error');
                    </script>
					<?php
				}
				else {
					?>
					<script>
						alert('Números de serie leídos correctamente.',null,'ok')
						.done(function(){
							<?php if(!$traza) { ?>
							$('#botonVolver').trigger('click');
							<?php } ?>
						});
                    </script>
					<?php
				}
				
			}
			else {
				?><p class="error">ERROR: No se han encontrado rangos.</p><?php
			}
		
		}
		
		
		$cantidadNSInformar=$producto['Stock']-$producto['StockEnProceso'];
		
		?>
		
		<h2>Informar números de serie internos</h2>
		
		<form id="formularioNSInterno" name="formularioNSInterno" method="post" action="">
		
			<p>Producto:</p>
			
			<table class="tablaFormateada">
			
			<tr>
				
				<th>Palet</th>
				
				<?php if($_SESSION['gestion']=='PUB' || $_SESSION['gestion']=='PUBPRI') { ?>
				<th>Cliente propietario</th>
				<?php } ?>
				
				<th>Producto</th>
				
				<th>Descripción</th>
				
				<th>Números de serie<br />a informar</th>
		
			</tr>
			
			<tr>
			
				<td><?php echo $palet; ?></td>
				
				<?php if($_SESSION['gestion']=='PUB' || $_SESSION['gestion']=='PUBPRI') { ?>
				<td><?php echo $producto['NombreClientePropietario']; ?></td>
				<?php } ?>
				
				<td><?php echo $producto['Producto']; ?></td>
					
				<td align="left"><?php echo $producto['Descripcion']; ?></td>
				
				<td><?php echo $cantidadNSInformar; ?></td>
		
			</tr>
			
			</table>
			
			<p>Rangos de números de serie:</p>
			
			<div id="bloqueRangos"></div>
			
            <input type="hidden" id="cantidadNSInformar" name="cantidadNSInformar" value="<?php echo $cantidadNSInformar; ?>" />
			<input type="hidden" id="palet" name="palet" value="<?php echo $palet; ?>" />
			<input type="hidden" id="indice" name="indice" value="<?php echo $indice; ?>" />
			<input type="hidden" id="numeroDeRangos" name="numeroDeRangos" value="0" />
			<input type="hidden" id="lecturasRangos" name="lecturasRangos" value="<?php echo $Rangos; ?>" />
			
			<input type="hidden" id="confirmacion" name="confirmacion" value="" />
            
            <p>Cantidad de números leidos:<br />
            <input type="text" id="cuantosNumerosLeidos" name="cuantosNumerosLeidos" value="0" class="campo deshabilitado" style="width:100px" readonly/>
            </p>
			
			<p><input type="button" id="botonConfirmar" name="botonConfirmar" value="CONFIRMAR" class="boton" /></p>
	
		</form>
	
	<?php  
	}
	else {
		?><p class="error">ERROR: No se ha encontrado producto.</p><?php
	}
	?>
	
		<p><input type="button" id="botonVolver" name="botonVolver" value="Volver" class="boton reducido" /></p>
	
	<script>
	
	
	function creaRango(fila,inicio,fin) {
	
		const contenido='<table class="bloqueCentrado"><tr fila="'+fila+'" class="fila"><td><p class="sinMargen">Desde:<br /><img src="<?php echo DIR_IMAGENES; ?>/teclado.png" alt="Mostrar teclado" class="iconoTeclado" id="tecladoRango_'+fila+'_1" /><input type="text" id="rango_'+fila+'_1" name="rango_'+fila+'_1" class="campo campoRango" value="'+inicio+'"/><img src="<?php echo DIR_IMAGENES; ?>/x.png" alt="Borrar" class="boton-x" id="borrarRango_'+fila+'_1"/><p></td><td style="padding-left:80px"><p class="sinMargen">Hasta:<br /><img src="<?php echo DIR_IMAGENES; ?>/teclado.png" alt="Mostrar teclado" class="iconoTeclado" id="tecladoRango_'+fila+'_2" /><input type="text" id="rango_'+fila+'_2" name="rango_'+fila+'_2" class="campo campoRango" value="'+fin+'"/><img src="<?php echo DIR_IMAGENES; ?>/x.png" alt="Borrar" class="boton-x" id="borrarRango_'+fila+'_2"/><p></td><td><img src="<?php echo DIR_IMAGENES; ?>/papelera.png" alt="Mostrar teclado" class="iconoPapelera clicable" id="papelera_'+fila+'" style="width:30px;margin: 7px 0 0 10px;"/></td></tr></table>';
		
		$('#bloqueRangos').append(contenido);
	
		$('#rango_'+fila+'_1').focus();
		
		$('#numeroDeRangos').val( parseInt($('#numeroDeRangos').val())+1 );
	
	}
	
	
	function actualizaLecturasRangos() {
	
		let cadena='';
		const numeroDeRangos=parseInt($('#numeroDeRangos').val());
		
		for(let fila=1;fila<=numeroDeRangos;fila++) {
			const inicio=$('#rango_'+fila+'_1').val();
			const fin=$('#rango_'+fila+'_2').val();
			if( inicio && fin ) {
				if(cadena!='') cadena+='|';
				cadena+=inicio+'¬'+fin;
			}
		}
		
		$('#lecturasRangos').val( cadena );
		
		actualizaCuantosNumerosLeidos();
	
	}
	
	function esNSCorrecto(ns) {
	
		let correcto=true;
		
		if(ns) {
	
			if(ns.substring(0,2)!='NS') correcto=false;
		
			const valores=ns.split('NS');
			const numero=parseInt(valores[1]);
			
			if(!numero>0) correcto=false;
			
		}
		
		return correcto;
	
	}
	
	function extraeNumeroNS(ns) {
	
		let numero=0;
		if(ns) {
			const valores=ns.split('NS');
			console.log(valores);
			numero=parseInt(valores[1]);
		}
		return numero;
	
	}
	
	function esRangoInvertido(inicio,fin) {
	
		let esRangoInvertido=false;
		
		const inicioNumero=extraeNumeroNS(inicio);
		const finNumero=extraeNumeroNS(fin);
		
		if(inicioNumero>finNumero) esRangoInvertido=true;
		
		return esRangoInvertido;
	
	}
	
	function validacion() {
	
		let rangos=[];
	
		let hayNSIncorrecto=false;
		let hayRangosIncompletos=false;
		let hayRangosInvertidos=false;
		let hayNumerosRepetidos=false;
		let hayRangosSuperpuestos=false;

		$('.fila').each(function(){
		
			const fila=$(this).attr('fila');
			
			const inicio=$('#rango_'+fila+'_1').val();
			const fin=$('#rango_'+fila+'_2').val();
			
			if( !esNSCorrecto(inicio) || !esNSCorrecto(fin) ) hayNSIncorrecto=true;
			
			if( (inicio && !fin) || (!inicio && fin) ) hayRangosIncompletos=true;
			
			if( esRangoInvertido(inicio,fin) ) hayRangosInvertidos=true;
			
			if(inicio && fin) rangos.push( [fila,extraeNumeroNS(inicio),extraeNumeroNS(fin)] );
			
		});
		
		rangos.forEach(function(rango){
		
			fila=rango[0];
			inicio=rango[1];
			fin=rango[2]
		
			rangos.forEach(function(rangoEvaluar){
			
				filaEvaluar=rangoEvaluar[0];
				inicioEvaluar=rangoEvaluar[1];
				finEvaluar=rangoEvaluar[2]
			
				if(fila!=filaEvaluar) {
					if( ( inicioEvaluar>=inicio && inicioEvaluar<=fin ) || ( finEvaluar>=inicio && finEvaluar<=fin ) ) hayRangosSuperpuestos=true;
				}
			});
		
		});
		
		const cantidadNSInformar=parseInt($('#cantidadNSInformar').val());
		const cuantosNumerosLeidos=parseInt($('#cuantosNumerosLeidos').val());
		
		if( hayNSIncorrecto ) {
			alert('Error: Hay algún número de serie incorrecto.<br>Comprueba los números y que has leido la etiqueta correcta.',null,'error');
		}
		else if( hayRangosIncompletos ) {
			alert('Error: Hay algún rango incompleto, sin informar inicio o fin de rango.',null,'error')
			.done(function(){
				primerFocoVacio();
			});
		}
		else if( hayRangosInvertidos ) {
			alert('Error: Hay algún rango incorrecto, el primer número es mayor que el segundo.',null,'error');
		}
		else if( hayRangosInvertidos ) {
			alert('Error: Hay algún rango incorrecto, el primer número es mayor que el segundo.',null,'error');
		}
		else if( hayRangosSuperpuestos ) {
			alert('Error: Hay algún rango superpuesto.',null,'error');
		}
		else if( cuantosNumerosLeidos>cantidadNSInformar ) {
			alert('Error: Has indicado más números de serie ('+cuantosNumerosLeidos+') de los disponibles a informar ('+cantidadNSInformar+').',null,'error');
		}
		else if( $('#lecturasRangos').val()=='' ) {
			alert('Error: No hay ningún rango informado.',null,'error')
			.done(function(){
				primerFocoVacio();
			});
		}
		else return true;
	
	}
	
	function primerFocoVacio(){
		let foco=false;
		$('.campoRango').each(function(){
			if(!foco && $(this).val()=='') {
				$(this).focus();
				foco=true;
			}
		});
	}
	
	function hayFilaVacia(){
	
		let hayFilaVacia=false;
		
		$('.fila').each(function(){
		
			const fila=$(this).attr('fila');
			
			const inicio=$('#rango_'+fila+'_1').val();
			const fin=$('#rango_'+fila+'_2').val();
			
			if( !inicio && !fin ) hayFilaVacia=true;
			
		});
		
		return hayFilaVacia;
	}
	
	function cuantasFilasVacias(){
	
		let cuantasFilasVacias=0;
		
		$('.fila').each(function(){
		
			const fila=$(this).attr('fila');
			
			const inicio=$('#rango_'+fila+'_1').val();
			const fin=$('#rango_'+fila+'_2').val();
			
			if( !inicio && !fin ) cuantasFilasVacias++;
			
		});
		
		return cuantasFilasVacias;
	}
	
	function actualizaCuantosNumerosLeidos() {
	
		const rangos=$('#lecturasRangos').val();
		const valores=rangos.split('|');
		
		cuantos=0;
		
		console.log('cuantos 1: '+cuantos);
		
		valores.forEach(function(valor){
		
			if(valor) {
			
				const valores=valor.split('¬');
				
				let valor0=extraeNumeroNS(valores[0]);
				let valor1=extraeNumeroNS(valores[1]);
				
				const cuantosLinea = valor1 - valor0 + 1;
				
				cuantos += cuantosLinea;
			
			}
			
		});

		$('#cuantosNumerosLeidos').val(cuantos);
	}
	
	$(document).ready(function() {
	
		$(document).on('click','.iconoPapelera',function(){
		
			const linea=$(this).parent().parent();
			const fila=linea.attr('fila');
			
			const estaFilaEstaVacia=( $('#rango_'+fila+'_1').val()=='' && $('#rango_'+fila+'_2').val()=='' );
		
			if( cuantasFilasVacias()==1 && estaFilaEstaVacia) {
				//No hacemos nada
			}
			else if( $('#numeroDeRangos').val()==1) {
				$('#rango_'+fila+'_1').val('');
				$('#rango_'+fila+'_2').val('');
				$('#rango_'+fila+'_1').focus();
			}
			else {
				linea.remove();
				$('#numeroDeRangos').val( parseInt($('#numeroDeRangos').val())-1 );
				
				primerFocoVacio();
				
			}
			
			actualizaLecturasRangos();
			
		});
		
		$(document).on('click','.boton-x',function(){
		
			const campo=$(this).siblings('input');
			
			campo.val('');
			campo.focus();
			
			actualizaLecturasRangos();
			
		});
		
		$(document).on('click','.iconoTeclado',function(){
		
			const campo=$(this).siblings('input');
			
			$('#teclado').show();
			$('#valor').val( campo.val() );
			$('#valorOculto').val( campo.val() );
			$('#enter').attr('campoValor',campo.attr('id'));
			$('#enter').attr('forzarEnter','si');
			
		});
	
		$(document).on('change','.campoRango',function(){
		
			const ns=$(this).val();
			
			const id=$(this).attr('id');
			
			const valores=id.split('_');
			const fila=parseInt(valores[1]);
			const columna=parseInt(valores[2]);
			
			const inicio=$('#rango_'+fila+'_1').val();
			const fin=$('#rango_'+fila+'_2').val();
			
			if(!esNSCorrecto(ns)) {
				alert('ERROR: Número de serie interno incorrecto.',null,'error');
			}
			else if( inicio && fin && esRangoInvertido(inicio,fin) ) {
				alert('ERROR: Rango incorrecto. El primer número de serie es mayor que el segundo.',null,'error');
			}
			else {

				if(columna==1) $('#rango_'+fila+'_2').focus();
				else if(!hayFilaVacia()) creaRango(fila+1,'','');
				else primerFocoVacio();
				
				actualizaLecturasRangos();
				
			}
		
		});
		
		$('#botonConfirmar').on('click',function(){
		
			if(validacion()) {
				$('#popupCargando').show();
				$('#confirmacion').val(1);
				$('#formularioNSInterno').submit();
			}
		
		});
	
		$('#botonVolver').on('click',function(){
		
			$('#popupCargando').show();
			window.location='info-contenedor-S.php?procedencia=informarNSInterno&contenedor=<?php echo $palet; ?>';
		
		});
		
		<?php if($Rangos) { ?>
		
			<?php
			
			
			$contador=1;
			
			foreach($valoresRangos as $valor) {
				$valores2=explode('¬',$valor);
				$inicio=$valores2[0];
				$fin=$valores2[1];
				?>creaRango(<?php echo $contador; ?>,'<?php echo $inicio; ?>','<?php echo $fin; ?>');<?php
				$contador++;
			}
			
			?>
			
			actualizaLecturasRangos();
			creaRango(<?php echo $contador; ?>,'','');
		
		<?php } else { ?>
		
		creaRango(1,'','');
		
		<?php } ?>
	
	
	});
	
	</script>
	
	<?php
}
else {
	?><p class="error">ERROR: No hay parámetros</p><?php
}

include($rutaPhp.$rutaHtml.'/maqueta/abajo.php');
?>
