EDITAR MASIVAMENTE CAMPOS EN TODAS LAS FILAS DE UNA TABLA
  • Ver los descuentos: en principio por js copia los valores de las columnas 1,2 y 3 los multiplica por el coeficiente de descuento desc = (100 - entrada)/100; y lo escribe en las columnas 4,5 y 6; después calcula el % de descuento con desreal = parseInt((precio-preciodesc)*100/precio); y lo escribe en las columnas 7,8 y 9.
  • Cancelar los descuentos: simplemente hace lo mismo pero copia directamente los valores de las columnas 1,2 y 3 en 4,5 y 6; después escribe 0% en las 7,8 y 9.
  • Guardar los descuentos: guarda en el array valores las columnas 4,5 y 6 (es decir los que tienen los descuentos) y los mete como array de array en envio con envio.push(valores); y después manda al script php todo el array con data: {'envio': JSON.stringify(envio)},, el script recupera como array con $data = json_decode($_POST['envio']); después recupera el id de cada fila con $temporario = $data[$i]; y los 3 valores asociados con $id = $temporario[0]; finalmente los guarda con un UPDATE
  • Ver aumentos: en principio es muy similar a ver descuento, pero: a) antes de cambiar los valores guardamos todos los valores actuales en el array copia (global, declarado bajo $(document).ready(function(){} ) luego me aseguro que no haya descuentos aplicados con un if sobre todos las celdas de % $(celdas[7]).children("div").html()!="0%" || con OR (||) y si alguna tiene descuento levanto la flag aviso en true. Luego para las columnas 1,2 y 3 recupero el precio original con precio = parseInt($(celdas[1]).children("div").text());. Le aplico el aumento con nuevoprecio = sindec(precio * (1 + entrada/100)); con sindec() redondeando para arriba por decenas o centenas y lo escribo en las columnas 1 y 4 repito con columna 2 aumentada y escrita en 2 y 5 e idem la 3 aumentada y escrita en 3 y 6.
  • Cancelar aumentos: Recorro las filas con for(i=1; i<filas.length; i++){} luego con for(j=1; j<=6; j++){} las 6 columnas (empezando por la 2° índice 1) y repongo el valor original que guardé en el array copia con $(celdas[j]).children("div").html(copia[i-1][j]); el índice de copia es i-1 porque el primer elemento tiene índice [0].
    Si solo queremos una o dos columnas no contiguas en vez del bucle interior directamente ponemos dentro del bucle exterior $(celdas[1]).children("div").html(copia[i-1][1]); por ejemplo para la columna 1 o $(celdas[3]).children("div").html(copia[i-1][3]); para la columna 3 y así sucesivamente.
  • Guardar los aumentos: guarda en el array valores las columnas 1,2,3,4,5 y 6 y los mete como array de array en envio con envio.push(valores); y después el script actúa como en guardar descuentos solo que guarda todas las columnas.
						
1) Script JAVASCRIPT para ver cambios y AJAX

<script>
$(document).ready(function(){
			let copia = [];							//declaro array copia para conservar la tabla para cancelar aumentos (global)
			var largo;								// tamaño de copia tb global porque los cargo en veraumento y uso en cancelar
			jQuery.fn.center = function () {
				this.css("position","absolute");
				this.css("top", Math.max(0, (($(window).height() - $(this).outerHeight()) / 2) + 
                                                $(window).scrollTop()) + "px");
				this.css("left", Math.max(0, (($(window).width() - $(this).outerWidth()) / 2) + 
                                                $(window).scrollLeft()) + "px");
				return this;
			} 
			function sindec(a){						//redondea los precios quitando decenas (> 100) o centenas (> 1000)
				if(a< =100){
					return Math.ceil(a);
				}else if(a< =1000 && a> 100){	
					return Math.ceil(a/10)*10 ;
				}else if(a> 1000){
					return Math.ceil(a/100)*100 ;	
				}
			}			

			//*************************FUNCIONES PARA CALCULAR LOS DESCUENTOS*********************

			// calcular para ver un descuento

			$("#verdescuento").click(function(evento){							// al clicar ver descuento
				evento.preventDefault();
				var entrada = parseInt($("#descuento").val());					//intentamos convertir en entero
				if(isNaN(entrada) || entrada> =100){							//si no es numero o es mayor a 100				
					$("#msgtxt").css("color","red");
					$("#msgtxt").html("El descuento no es un número válido");
				}else{
					$("#msgtxt").css("color","black");
					$("#msgtxt").html("");
					$("#divcancelar").css("display","block");					//aparece cancelar / guardar
					$("#divguardar").css("display","block");	
					var desc = (100 - entrada)/100;								// carga el coeficiente multiplicador para descuento
					var precio;
					var preciodesc;
					var desreal;			
					var filas = $("#tabla1 tbody").find("tr");					//carga vector con todas las filas de t-body
					var celdas;
					for(i=1; i< filas.length; i++){
						celdas = $(filas[i]).find("td");						//carga vector celdas de fila
						// precio argentino
						precio = parseInt($(celdas[1]).children("div").text());	//recupero el precio
						preciodesc = sindec(precio * desc); 					//calculo el precio con desc.
						desreal = parseInt((precio-preciodesc)*100/precio);		//calculo el descuento % real (por los redondeos)
						$(celdas[4]).children("div").html(preciodesc);			//escribo el precio con el descuento
						$(celdas[7]).children("div").html(desreal + "%");		//escribo el precio con el descuento
						// precio uruguay
						precio = parseInt($(celdas[2]).children("div").text());	//recupero el precio
						preciodesc = sindec(precio * desc); 					//calculo el precio con desc.
						desreal = parseInt((precio-preciodesc)*100/precio);		//calculo el descuento % real (por los redondeos)
						$(celdas[5]).children("div").html(preciodesc);			//escribo el precio con el descuento
						$(celdas[8]).children("div").html(desreal + "%");		//escribo el precio con el descuento
						// precio mundo
						precio = parseInt($(celdas[3]).children("div").text());	//recupero el precio
						preciodesc = sindec(precio * desc); 					//calculo el precio con desc.
						desreal = parseInt((precio-preciodesc)*100/precio);		//calculo el descuento % real (por los redondeos)
						$(celdas[6]).children("div").html(preciodesc);			//escribo el precio con el descuento
						$(celdas[9]).children("div").html(desreal + "%");		//escribo el precio con el descuento
					} //fin for
				}
		   });
			// eliminar todos los descuentos
			$("#cancelardesc").click(function(evento){							// al clicar eliminar descuentos
					var precio;
					var preciodesc;
					var desreal;
					var filas = $("#tabla1 tbody").find("tr");					//carga vector con todas las filas de t-body
					var celdas;
					for(i=1; i< filas.length; i++){
						celdas = $(filas[i]).find("td");						//carga vector celdas de fila
						precio = parseInt($(celdas[1]).children("div").text());	//recupero el precio sin descuento
						$(celdas[4]).children("div").html(precio);				//escribo el precio con el descuento
						$(celdas[7]).children("div").html("0%");				//escribo el descuento en cero
						precio = parseInt($(celdas[2]).children("div").text());	//recupero el precio sin descuento
						$(celdas[5]).children("div").html(precio);				//escribo el precio con el descuento
						$(celdas[8]).children("div").html("0%");				//escribo el descuento en cero
						precio = parseInt($(celdas[3]).children("div").text());	//recupero el precio sin descuento
						$(celdas[6]).children("div").html(precio);				//escribo el precio con el descuento
						$(celdas[9]).children("div").html("0%");				//escribo el descuento en cero
						$("#divcancelar").css("display","none");				//desaparece cancelar / guardar
						$("#divguardar").css("display","none");
						$("#msgtxt").html("");	
					} //fin for
		   });
		   $("#guardardesc").click(function(evento){
				var valores;													//guarda los valores seleccionados de la fila
				let envio = [];													//vector de vectores con los "valores"
				var celdas;
				$("#divcancelar").css("display","none");						//desaparece cancelar / guardar
				$("#divguardar").css("display","none");
				var filas = $("#tabla1 tbody").find("tr");						//carga vector con todas las filas de t-body
				for(i=1; i< filas.length; i++){
					celdas = $(filas[i]).find("td");							//carga vector celdas de fila
					valores=[$(celdas[0]).children("div").text(),$(celdas[4]).children("div").text(),$(celdas[5]).children("div").text(),$(celdas[6]).children("div").text()];
					envio.push(valores);										//recupero los valores de la fila y los meto en envio
				}
				$.ajax({  
				type: "POST",  
				url: "tec-php-editar-masivo-procesar.php?accion=E",				//mando a procesar por ajax
				data: {'envio': JSON.stringify(envio)}, 						// sintaxis para enviar un array por ajax			 
				success: function(data) { 
					$("#msgtxt").html("los valores han sido guardados");		
				},		
				error: function(request,error) {
					$("#msgtxt").html("ha ocurrido un error al guardar los valores");	
				}
				});    //fin ajax
		   });
		   //************************** FUNCIONES PARA AUMENTAR LOS PRECIOS *******************************	

		   $("#veraumento").click(function(evento){								// al clicar ver descuento
				evento.preventDefault();
				var celdas;
				var precio;
				var nuevoprecio;
				var entrada = parseInt($("#aumento").val());					//intentamos convertir en entero
				var filas = $("#tabla1 tbody").find("tr");						//carga vector con todas las filas de t-body
				largo=filas.length;												//guardo la cantidad de filas (para cancelar)
				var aviso= false;												//precargo flag en falso
				for(i=1; i< filas.length; i++){
					celdas = $(filas[i]).find("td");							//carga vector celdas de fila
					valores=[$(celdas[0]).children("div").text(),$(celdas[1]).children("div").text(),$(celdas[2]).children("div").text(),$(celdas[3]).children("div").text(),$(celdas[4]).children("div").text(),$(celdas[5]).children("div").text(),$(celdas[6]).children("div").text()];
					copia.push(valores);						//guardo los valores de toda la tabla en copia (para cancelar)
					if($(celdas[7]).children("div").html()!="0%" || $(celdas[8]).children("div").html()!="0%" || $(celdas[9]).children("div").html()!="0%"){
						aviso= true; 											//si algun descuento esta presente levanto flag
					}
				}
				// fin de controlar los descuentos en cero
				if(isNaN(entrada) || entrada> =100){							//si no es numero o es mayor a 100				
					$("#msgtxt").css("color","red");
					$("#msgtxt").html("El aumento no es un número válido");
				}else if(aviso){												//si flag true es que hay descuentos
					$("#msgtxt").css("color","red");
					$("#msgtxt").html("Hay algún descuento, quitarlos primero y reintentar");
				}else{
					$("#msgtxt").css("color","black");
					$("#msgtxt").html("");
					$("#divcancelaraumento").css("display","block");			//aparece cancelar / guardar
					$("#divguardaraumento").css("display","block");
					//comienzo a aplicar el aumento
					for(i=1; i< filas.length; i++){
						celdas = $(filas[i]).find("td");						//carga vector celdas de fila
						precio = parseInt($(celdas[1]).children("div").text());	//recupero el precio original ARG
						nuevoprecio = sindec(precio * (1 + entrada/100));		//calculo el precio aumentado
						$(celdas[1]).children("div").html(nuevoprecio);			//escribo el precio con el aumento
						$(celdas[4]).children("div").html(nuevoprecio);			//escribo el precio con el aumento en col.desc
						precio = parseInt($(celdas[2]).children("div").text());	//recupero el precio original URU
						nuevoprecio = sindec(precio * (1 + entrada/100));		//calculo el precio aumentado
						$(celdas[2]).children("div").html(nuevoprecio);			//escribo el precio con el aumento
						$(celdas[5]).children("div").html(nuevoprecio);			//escribo el precio con el aumento en col.desc
						precio = parseInt($(celdas[3]).children("div").text());	//recupero el precio original ARG
						nuevoprecio = sindec(precio * (1 + entrada/100));		//calculo el precio aumentado
						$(celdas[3]).children("div").html(nuevoprecio);			//escribo el precio con el aumento
						$(celdas[6]).children("div").html(nuevoprecio);			//escribo el precio con el aumento en col.desc
						$("#divcancelar").css("display","none");				//desaparece cancelar / guardar
						$("#divguardar").css("display","none");
						$("#msgtxt").html("");	
					} //fin for

				}	//fin del else
			});

			$("#cancelaraumento").click(function(evento){						// al clicar eliminar descuentos
				
				$("#msgtxt").html("");
				$("#divcancelaraumento").css("display","none");					//desaparece cancelar / guardar
				$("#divguardaraumento").css("display","none");
				var filas = $("#tabla1 tbody").find("tr");						//carga vector con todas las filas de t-body
				var celdas;
				for(i=1; i< filas.length; i++){									//repongo los valores de la tabla desde copia
					celdas = $(filas[i]).find("td");							//carga vector celdas de fila
					for(j=1; j< =6; j++){
						$(celdas[j]).children("div").html(copia[i-1][j]);		//i recorre las filas, j recorre las columnas
					}															//en copia es i-1 porque empieza en cero
					/*    si se quiere solo algunas columnas
					$(celdas[1]).children("div").html(copia[i-1][1]);
					$(celdas[2]).children("div").html(copia[i-1][2]);
					.................................................
					$(celdas[6]).children("div").html(copia[i-1][6]);   */
				}
				$("#msgtxt").html("Se han repuesto los valores");

			});

			$("#guardaraumento").click(function(evento){						// al clicar guarda aumentos
				var valores;													//guarda los valores seleccionados de la fila
				let envio = [];													//vector de vectores con los "valores"
				var celdas;
				$("#msgtxt").html("");
				$("#divcancelaraumento").css("display","none");					//desaparece cancelar / guardar
				$("#divguardaraumento").css("display","none");
				var filas = $("#tabla1 tbody").find("tr");						//carga vector con todas las filas de t-body
				for(i=1; i< filas.length; i++){
					celdas = $(filas[i]).find("td");							//carga vector celdas de fila
					valores=[$(celdas[0]).children("div").text(),$(celdas[1]).children("div").text(),$(celdas[2]).children("div").text(),$(celdas[3]).children("div").text(),$(celdas[4]).children("div").text(),$(celdas[5]).children("div").text(),$(celdas[6]).children("div").text()];
					envio.push(valores);
				}
				$.ajax({  
				type: "POST",  
				url: "tec-php-editar-masivo-procesar.php?accion=A",  
				data: {'envio': JSON.stringify(envio)}, 			 
				success: function(data) { 
					$("#msgtxt").html("los valores con aumento han sido guardados");
				},		
				error: function(request,error) {
					$("#msgtxt").html("ha ocurrido un error al guardar los valores");					
				}
				});    //fin ajax
			});
		});					
</script>

2) TABLA en HTML
< div style="padding-left: 20px; padding-right:20px;"> 
	< div class="mensajes" id="msgtxt">  < !-- < span id="msgjs"> < /span>  --> 
			 
	< /div> 
	< !--  fin  mensaje   --> 	
	< !--   inicio página ******************************************************************************************* --> 
	< div class="submenuadmin" style=" padding-bottom:10px;"> 
		< div class="submenuitem" > 
			< a href="javascript:" id="verdescuento"> VER DESCUENTOS< /a>   
		< /div> 
		< div class="submenuitem" > 
			< input type="text" style="width:50px; text-align:center;" id="descuento" />  % 
		< /div> 
		< div class="submenuitem" id="divcancelar" style="display: none;"> 
			< input type="submit" value="CANCELAR" id="cancelardesc"> 
		< /div> 
		< div class="submenuitem" id="divguardar" style="display: none;"> 
			< input type="submit" value="GUARDAR" id="guardardesc"> 
		< /div> 

		< div class="cierre"> < /div> 
	< /div> 
	< div class="submenuadmin" style=" padding-bottom:10px;"> 
		< div class="submenuitem" > 
			< a href="javascript:" id="veraumento"> VER AUMENTOS    < /a>   
		< /div> 
		< div class="submenuitem" > 
			< input type="text" style="width:50px; text-align:center;" id="aumento" />  % 
		< /div> 
		< div class="submenuitem" id="divcancelaraumento" style="display: none;"> 
			< input type="submit" value="CANCELAR" id="cancelaraumento"> 
		< /div> 
		< div class="submenuitem" id="divguardaraumento" style="display: none;"> 
			< input type="submit" value="GUARDAR" id="guardaraumento"> 
		< /div> 
		< div> 
			APLICAR AUMENTOS SOLO SI NO HAY DESCUENTOS !!! 
		< /div> 

		< div class="cierre"> < /div> 
	< /div> 
	< table class="tabla" id="tabla1">       < !-- SI SE AGREGAN COLUMNAS IR A $("#ver descuento") $("#ver aumento")--> 
		< thead> < /thead> 						< !--Y CAMBIAR LOS ÍNDICES EN LOS VECTORES --> 
			< tr> 
				< th class="celdaPTizq" style="width:30px;"> ID< /th> 
				< th class="celdaPT" style="width:40px;" > Precio ARG< /th> 
				< th class="celdaPT" style="width:40px;" > Precio URU< /th> 	
				< th class="celdaPT" style="width:40px;" > Precio mundo< /th> 
				< th class="celdaPT" style="width:40px;" > $ desc. ARG< /th> 	
				< th class="celdaPT" style="width:40px;" > $ desc. URU< /th> 
				< th class="celdaPT" style="width:40px;" > $ desc. Mundo< /th> 	
				< th class="celdaPT" style="width:40px;" > % desc. ARG< /th> 
				< th class="celdaPT" style="width:40px;" > % desc. URU< /th> 
				< th class="celdaPT" style="width:40px;" > % desc. Mundo< /th> 
			< /tr> 
			< /thead> 
			< tbody> 
		< ?php 
			conectar();
			mysqli_set_charset($conn, "utf8mb4");
			$sqldevolucion = mysqli_query($conn,"SELECT * FROM descuentos ");
			while ($r = mysqli_fetch_array($sqldevolucion, MYSQLI_ASSOC)){ 
			if ($r["precioARG"]< > 0){
					$descuentoARG=round(($r["precioARG"]-$r["precioARGdes"])/$r["precioARG"]*100);
			}else{
				$descuentoARG=0;
			}
			if ($r["precioURU"]< > 0){
					$descuentoURU=round(($r["precioURU"]-$r["precioURUdes"])/$r["precioURU"]*100);
			}else{
				$descuentoURU=0;
			} 
			if ($r["precioMUN"]< > 0){
					$descuentoMUN=round(($r["precioMUN"]-$r["precioMUNdes"])/$r["precioMUN"]*100);
			}else{
				$descuentoMUN=0;
			}  
		?> 
			
			< tr> 
				< td class="celdaPizq" > 
					< div class="idfila"> < ?php  echo ($r["id"]); ?> < /div> 	
				< /td> 
				< td class="celdaPc">    
				   	< div id="< ?php  echo ("precioARG".$r["id"]); ?> "> < ?php  echo ($r["precioARG"]); ?> < /div> 	
				< /td> 
				< td class="celdaPc">   
				   	< div id="< ?php  echo ("precioURU".$r["id"]); ?> "> < ?php  echo ($r["precioURU"]); ?> < /div> 
				< /td> 
				< td class="celdaPc">  
				   	< div id="< ?php  echo ("precioMUN".$r["id"]); ?> "> < ?php  echo ($r["precioMUN"]); ?> < /div> 				
				< /td> 		
				< td class="celdaPc">    
				   	< div id="< ?php  echo ("precioARGdes".$r["id"]); ?> "> < ?php  echo ($r["precioARGdes"]); ?> < /div> 
				< /td> 
				< td class="celdaPc">  
				   	< div id="< ?php  echo ("precioURUdes".$r["id"]); ?> "> < ?php  echo ($r["precioURUdes"]); ?> < /div> 
				< /td> 	
				< td class="celdaPc">    
				   	< div id="< ?php  echo ("precioMUNdes".$r["id"]); ?> "> < ?php  echo ($r["precioMUNdes"]); ?> < /div> 
				< /td> 
				< td class="celdaPc">  
				   	< div id="< ?php  echo ("desARG".$r["id"]); ?> "> < ?php  echo ($descuentoARG . "%"); ?> < /div> 	
				< /td> 	
				< td class="celdaPc"> 
                    < div id="< ?php  echo ("desURU".$r["id"]); ?> "> < ?php  echo ($descuentoURU . "%"); ?> < /div> 
				< /td> 
				< td class="celdaPc"> 
                    < div id="< ?php  echo ("desMUN".$r["id"]); ?> "> < ?php  echo ($descuentoMUN . "%"); ?> < /div> 
				< /td> 				
			< /tr> 	 	 	 
			< ?php 
			}  //fin while
			mysqli_close($conn); 
			?> 
		< /tbody> 		
	< /table> 
	< div style="margin-top:15px;"> 
		INSTRUCCIONES
	< /div>  
	< div style="margin-top:5px; font-size:.8rem; color:#000;"> 
			Elegir un descuento (número entero) y clicar VER DESCUENTOS
	< /div>  
	   < !-- ************************************************fin bloque útil **************************   --> 
	   < div class="cierre"> < /div> 


	< !-- FIN página ******************************************************************************************* --> 
< /div> 

3) SCRIPT PHP
< ?php
include("conexion.php");	 			// abre la conexión a la base de datos
global $conn;
$accion= $_GET["accion"];
conectar();
mysqli_set_charset($conn, "utf8mb4");		// machear el cotejamiento con las tablas       
switch ($accion) {
	case"E": 
		$data = json_decode($_POST['envio']);
		$filas= count($data);
 		for($i=0;$i< $filas; $i++){
			$temporario = $data[$i];
			$id = $temporario[0];
			$pA = $temporario[1];
			$pU = $temporario[2];
			$pM = $temporario[3];
			$sqlstring="UPDATE descuentos SET precioARGdes = '" . $pA . "', precioURUdes = '" . $pU . "' , precioMUNdes = '" . $pM . "'	WHERE id = ".$id;
			$sqldevolucion = mysqli_query($conn,$sqlstring);
 		}   //fin for
		mysqli_close($conn);
		echo(json_encode([$id,$pA,$pU,$pM]));
	break;
	case"A": 
		$data = json_decode($_POST['envio']);
		$filas= count($data);
 		for($i=0;$i< $filas; $i++){
			$temporario = $data[$i];
			$id = $temporario[0];
			$pA = $temporario[1];
			$pU = $temporario[2];
			$pM = $temporario[3];
			$pAd = $temporario[4];
			$pUd = $temporario[5];
			$pMd = $temporario[6];
			$sqlstring="UPDATE descuentos SET precioARG = '" . $pA . "',precioURU = '" . $pU . "',precioMUN = '" . $pM . "',precioARGdes = '" . $pAd . "', precioURUdes = '" . $pUd . "' , precioMUNdes = '" . $pMd . "'	WHERE id = ".$id;
			$sqldevolucion = mysqli_query($conn,$sqlstring);
 		}   //fin for
		mysqli_close($conn);
		echo(json_encode([$id,$pA,$pU,$pM]));
	break;
}
?> 

						
					
© IQSystems 2023