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;
}
?>