<?php
class ConsultaDespachoNuevo extends Conexion1 {
public $mysqli;  public $data;
public function __construct() {$this->mysqli = parent::conectar();$this->data = array();} 
// ----------------------------------------------------------------------------------
public function hoyHoy(){$hoy = date("Y-m-d H:i:s"); return $hoy;}
// ----------------------------------------------------------------------------------
// ventaTipoDespachoPagina
// ----------------------------------------------------------------------------------
public function finalizarDespachoGeneral($idVenta){
    
}


public function referenciaPDFGenAbono($genAbono,$referencia,$idEmpresa){$paso["paso"]="no paso";
$a=$this->mysqli->query("UPDATE pagos SET pdf_liga='$referencia' WHERE gen_abono='$genAbono' AND id_empresa='$idEmpresa';");
if($a){$paso["paso"]="paso";} return json_encode($paso); }

public function referenciaPDFAbono($idPago,$referencia){$paso["paso"]="no paso";
$a=$this->mysqli->query("UPDATE pagos SET pdf_liga='$referencia' WHERE id_pago='$idPago';");
if($a){$paso["paso"]="paso";} return json_encode($paso); }

public function referenciaPDFVenta($idVenta,$referencia){$paso["paso"]="no paso";
$a=$this->mysqli->query("UPDATE ventas SET pdf='$referencia' WHERE id_venta='$idVenta';");
if($a){$paso["paso"]="paso";} return json_encode($paso); }
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------



public function venta_vendedor_general($idVendedor,$pagina,$idBodega,$busqueda,$control,$mes,$ann,$idEmpresa){$comBase="";  $ancho=5; $limite=$ancho*$pagina; $paso["paso"]="no paso";
// $aStock1=" , SUM(CASE WHEN JSON_EXTRACT(j.venta, '$.estEli') = '0' THEN JSON_UNQUOTE(JSON_EXTRACT(j.venta, '$.rel')) * JSON_UNQUOTE(JSON_EXTRACT(j.venta, '$.costo')) ELSE 0 END) AS totalSuma ";
// $aStock2=" , JSON_TABLE(venta,'$[*]'COLUMNS(venta JSON PATH '$')) AS j ";
$aStock1="";  $aStock2="";
$com1="SELECT ventas.* $aStock1 FROM ventas $aStock2 RIGHT JOIN usuarios ON usuarios.id_usuario=ventas.id_usuario WHERE ventas.id_vendedor='$idVendedor' AND ventas.id_bodega='$idBodega' AND id_empresa='$idEmpresa' ";
$com11="SELECT * $aStock1 FROM ventas $aStock2 WHERE id_vendedor='$idVendedor' AND id_bodega='$idBodega' AND id_empresa='$idEmpresa' ";
$com2="SELECT ventas.* $aStock1 FROM ventas $aStock2 RIGHT JOIN usuarios ON usuarios.id_usuario=ventas.id_usuario WHERE ventas.id_vendedor='$idVendedor' AND id_empresa='$idEmpresa' ";
$com22="SELECT * $aStock1 FROM ventas $aStock2 WHERE id_vendedor='$idVendedor' AND id_empresa='$idEmpresa' AND ";
$baBus=" AND (ventas.id_venta LIKE '%$busqueda%' OR ventas.metodo_pago LIKE '%$busqueda%' OR  ventas.clave_venta LIKE '%$busqueda%' OR JSON_UNQUOTE(JSON_EXTRACT(usuarios.usuario,'$.nombre')) LIKE '%$busqueda%' OR JSON_UNQUOTE(JSON_EXTRACT(usuarios.usuario,'$.apellido')) LIKE '%$busqueda%' OR JSON_UNQUOTE(JSON_EXTRACT(usuarios.usuario,'$.departamento')) LIKE '%$busqueda%' OR JSON_UNQUOTE(JSON_EXTRACT(usuarios.usuario,'$.cedula')) LIKE '%$busqueda%') ORDER BY ventas.fecha DESC LIMIT 0,100; "; 
$com3="SELECT ventas.* $aStock1 FROM ventas $aStock2 RIGHT JOIN usuarios ON usuarios.id_usuario=ventas.id_usuario WHERE ventas.id_vendedor='$idVendedor' AND ventas.fecha LIKE '$ann-$mes%' AND ventas.id_bodega='$idBodega' AND ventas.id_empresa='$idEmpresa' ";
$com33="SELECT .* $aStock1 FROM ventas $aStock2 WHERE id_vendedor='$idVendedor' AND fecha LIKE '$ann-$mes%' AND id_bodega='$idBodega' AND id_empresa='$idEmpresa' ";
if($control=="fecha"){ if($busqueda!=""){$comBase=$com3.$baBus; }else{ $comBase=$com33." ORDER BY fecha DESC; "; } }else{
if($control=="totalBodega"){$comBase=$com11."ORDER BY fecha DESC "; }else{if($control=="total"){$comBase=$com22." ORDER BY ventas.fecha DESC"; }else{if($control=="general"){if($busqueda!=""){$comBase=$com1.$baBus;}else{$comBase=$com11." ORDER BY fecha DESC LIMIT $limite,$ancho ;";}    
}else{if($busqueda!=""){$comBase=$com2.$baBus;}else{$comBase=$com22." ORDER BY fecha DESC LIMIT $limite,$ancho ;";}}}}}
$a=$this->mysqli->query($comBase);if($a->num_rows!=0){ while($fila=$a->fetch_assoc()){$aA[]=$fila;} 
$auxLL=new ConsultaDespacho(); $paso["paso"]="paso"; $paso["lista"]=$auxLL->auxProCliPag($aA);} return json_encode($paso); }
// public function venta_vendedor_general($idVendedor,$pagina,$idBodega,$busqueda,$control,$mes,$ann){$comBase="";  $ancho=5; $limite=$ancho*$pagina; $paso["paso"]="no paso";
// $com1="SELECT ventas.* FROM ventas RIGHT JOIN usuarios ON usuarios.id_usuario=ventas.id_usuario WHERE ventas.id_vendedor='$idVendedor' AND ventas.id_bodega='$idBodega' ";
// $com11="SELECT * FROM ventas WHERE id_vendedor='$idVendedor' AND id_bodega='$idBodega' ";
// $com2="SELECT ventas.* FROM ventas RIGHT JOIN usuarios ON usuarios.id_usuario=ventas.id_usuario WHERE ventas.id_vendedor='$idVendedor' ";
// $com22="SELECT * FROM ventas WHERE id_vendedor='$idVendedor' ";
// $baBus=" AND (ventas.id_venta LIKE '%$busqueda%' OR ventas.metodo_pago LIKE '%$busqueda%' OR  ventas.clave_venta LIKE '%$busqueda%' OR JSON_UNQUOTE(JSON_EXTRACT(usuarios.usuario,'$.nombre')) LIKE '%$busqueda%' OR J";
// $com3="SELECT ventas.* FROM ventas RIGHT JOIN usuarios ON usuarios.id_usuario=ventas.id_usuario WHERE ventas.id_vendedor='$idVendedor' AND ventas.fecha LIKE '$ann-$mes%' AND ventas.id_bodega='$idBodega' ";
// $com33="SELECT * FROM ventas WHERE id_vendedor='$idVendedor' AND fecha LIKE '$ann-$mes%' AND id_bodega='$idBodega' ";
// if($control=="fecha"){ if($busqueda!=""){$comBase=$com3.$baBus; }else{ $comBase=$com33." ORDER BY fecha DESC; "; } }else{
// if($control=="totalBodega"){$comBase=$com11."ORDER BY fecha DESC "; }else{if($control=="total"){$comBase=$com22." ORDER BY ventas.fecha DESC"; }else{if($control=="general"){if($busqueda!=""){$comBase=$com1.$baBus;}>
// }else{if($busqueda!=""){$comBase=$com2.$baBus;}else{$comBase=$com22." ORDER BY fecha DESC LIMIT $limite,$ancho ;";}}}}}
// $a=$this->mysqli->query($comBase);if($a->num_rows!=0){ while($fila=$a->fetch_assoc()){$aA[]=$fila;} 
// $auxLL=new ConsultaDespacho(); $paso["paso"]="paso"; $paso["lista"]=$auxLL->auxProCliPag($aA);
// //$paso["lista"]=$aA;
// } return json_encode($paso); }
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
public function ubicacionControl($id){ $paso["paso"]="no paso";
$a=$this->mysqli->query("SELECT ubicacion_array FROM productos WHERE id='$id';");
if($a->num_rows!=0){$aA=$a->fetch_assoc(); $paso["paso"]="paso";   $paso["info"]=$aA["ubicacion_array"];}  
return json_encode($paso); }

public function agregarMovimiento($movimiento,$id,$idUsuario,$bandera,$idEmpresa){$paso["paso"]="no paso"; $hoy=$this->hoyHoy();
$a=$this->mysqli->query("INSERT INTO historialgestion(movimiento,id,id_usuario,bandera,fecha,id_empresa) VALUES ('$movimiento','$id','$idUsuario','$bandera','$hoy','$idEmpresa')");    
if($a){$paso["paso"]="paso";} return json_encode($paso);}
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------

// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
public function actuAuxPicking($auxPicking,$relArray,$idVenta,$idProducto,$agregado,$ubicacionAntiguo){$paso["paso"]="no paso";
$a=$this->mysqli->query("SELECT aux_picking FROM ventas WHERE id_venta='$idVenta';"); 
if($a->num_rows!=0){ $aA=$a->fetch_assoc();  $auxPick=$aA["aux_picking"];  
if(($auxPick=="{}" || $auxPick=="[]" || $auxPick=="" || $auxPicking!="null") && $relArray=="null"){
$aii=$this->mysqli->query("UPDATE ventas SET aux_picking='$auxPicking' WHERE id_venta='$idVenta';"); if($aii){$paso["aux"]=$auxPicking; $paso["paso"]="paso";}}else{
$jsonPick22=json_decode($auxPick,true);   $auxRel=json_decode($relArray,true);  $verificar=0; $tamAuxAux=sizeof($auxRel);
for($p=0;$p<sizeof($jsonPick22);$p++){if($jsonPick22[$p]["idpr"]==$idProducto){$verificar++;
$jsonPick33=$jsonPick22[$p]["array"]; 

if($ubicacionAntiguo!="null"){
for($b=0;$b<sizeof($jsonPick33);$b++){if($jsonPick33[$b]["ubicacion"]==$ubicacionAntiguo){  
$jsonPick33[$b]["ubicacion"]=$auxRel[0]["ubicacion"];}}     }else{

for($k=0;$k<sizeof($jsonPick33);$k++){for($m=0;$m<sizeof($auxRel);$m++){if($auxRel[$m]["ubicacion"]==$jsonPick33[$k]["ubicacion"]){
$jsonPick33[$k]["cantAux"]=$auxRel[$m]["cantidad"]; unset($auxRel[$m]);   }}} $auxRel=$this->relOrdenado($auxRel,$tamAuxAux);
if(sizeof($auxRel)>0){for($rt=0;$rt<sizeof($auxRel);$rt++){ 
$jsonPick33[]=array("ubicacion"=>$auxRel[$rt]["ubicacion"],"cant"=>$auxRel[$rt]["cantidad"],"cantAux"=>$auxRel[$rt]["cantidad"]);}}
}

$jsonPick22[$p]["array"]=$jsonPick33;}}
if($verificar==0){$js=array(); 
for($pl=0;$pl<sizeof($auxRel);$pl++){
if($agregado=="lleno"){ $js[]=array("ubicacion"=>$auxRel[$pl]["ubicacion"],"cant"=>$auxRel[$pl]["cantidad"],"cantAux"=>0); 
}else{$js[]=array("ubicacion"=>$auxRel[$pl]["ubicacion"],"cant"=>$auxRel[$pl]["cantidad"],"cantAux"=>$auxRel[$pl]["cantidad"]);}
}
$jsonPick22[]=array("idpr"=>$idProducto,"array"=>$js);}
$dejson=json_encode($jsonPick22); $bbi=$this->mysqli->query("UPDATE ventas SET aux_picking='$dejson' WHERE id_venta='$idVenta';");
if($bbi){$paso["paso"]="paso";} $paso["aux"]=$dejson; }} return json_encode($paso);}
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------

public function relOrdenado($rel,$tamRel){ $aux=array(); for($i=0;$i<$tamRel;$i++){if(isset($rel[$i])){$aux[]=$rel[$i];}} return $aux; }
// ----------------------------------------------------------------------------------
// [{"idpr":"11773","array":[{"ubicacion":"01-D06","cant":1,"cantAux":0}]},{"idpr":"1","array":[{"ubicacion":"13-B05","cant":1,"cantAux":0}]},{"idpr":"2","array":[{"ubicacion":"01-A01","cant":1,"cantAux":0}]}]

// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------

public function actualizarRelMasivoUbica($cantidad,$idVenta,$idpr,$control,$idBodega,$ubicacion,$traslado,$cantidadRelArray,$idEmpresa){
$paso["paso"]="no paso"; $cantidadAux=0; $pasoAux="no paso"; $dif=0; $dif1=0; $trasladoAux=0; $difRel=0;
$a=$this->mysqli->query("SELECT ventas.venta, ventas.estado, productos.ubicacion_array, productos.ventas_array FROM  ventas INNER JOIN productos ON productos.id='$idpr' WHERE ventas.id_venta=$idVenta;");
if($a->num_rows!=0){$a1=$a->fetch_assoc(); $v=json_decode($a1["venta"],true); $vS=sizeof($v); $relArray=null;  
for($i=0;$i<$vS;$i++){if($v[$i]["idpr"]==$idpr){ $cantidadAux=$v[$i]["rel"]; $dif=$cantidad-$cantidadAux;
if(isset($v[$i]["traslado"])){$trasladoAux=$traslado; if($traslado==$v[$i]["traslado"]){$pasoAux="paso";}}else{$pasoAux="paso";}
if($pasoAux=="paso"){ 
    
//if($dif<0){$dif1=$dif*(-1);}else{$dif1=$dif;} if($dif<0){$v[$i]["rel"]=$v[$i]["rel"]-$dif1;}else{$v[$i]["rel"]=$v[$i]["rel"]+$dif1;}
$relAux= $this->actuRelAux(isset($v[$i]["relArray"]) ? $v[$i]["relArray"] : null,$ubicacion,$cantidadRelArray); $v[$i]["relArray"]=$relAux;
$v[$i]["rel"]=$this->conteoRelArray($relAux);
} }}

if($pasoAux=="paso"){
$papa= $this->actuAuxPicking("null",json_encode($relAux),$idVenta,$idpr,"vacio","null"); $papa1=json_decode($papa,true);
if($papa1["paso"]=="paso"){$paso["auxPicking"]=$papa1["aux"];}else{ $paso["auxPicking"]="null";}    
if($trasladoAux==0){$aty1=new CarritoGeneral(); 
if($cantidadRelArray<0){$auxCantRel=$cantidadRelArray*(-1); $estadoActual="resta";}else{$estadoActual="suma"; $auxCantRel=$cantidadRelArray;}  
$AAXX=$aty1->auxRelUbicacion($estadoActual,$auxCantRel,$a1["ubicacion_array"],$a1["ventas_array"],$idBodega,"cantidad",$ubicacion);
$vAA=$AAXX["venta"]; $sAA=$AAXX["stock"]; $this->mysqli->query("UPDATE productos SET ventas_array='$vAA', ubicacion_array='$sAA' WHERE id=$idpr;"); }
$v1=json_encode($v); $v2=$this->mysqli->query("UPDATE ventas SET venta='$v1' WHERE id_venta=$idVenta");
if($v2){ $paso["paso"]="paso"; $this->movimientosGestion($ubicacion,$idBodega,$cantidad,"---",$idpr,$idVenta,$control);    
$zzz1=$this->mysqli->query("SELECT id, COALESCE(JSON_UNQUOTE(JSON_EXTRACT(ubicacion_array, '$.".$idBodega."')),'') AS ubicacionAux FROM productos WHERE id='$idpr';")->fetch_assoc();
$paso["ubicacionAux"]=$zzz1["ubicacionAux"]; $paso["relAux"]=$relAux; $paso["valor"]=1;}}} return json_encode($paso); }

public function conteoRelArray($relArray){ if($relArray==null){return 0;}else{
$cantidad=0; for($i=0;$i<sizeof($relArray);$i++){$cantidad=$cantidad+$relArray[$i]["cantidad"];} return $cantidad;} }



public function actualizar_rel_cero_ubicacion($cantidad,$idVenta,$idpr,$idBodega,$traslado,$ubicacion){ 
$relAux=null;    $trasladoAux=0; $paso["paso"]="no paso";
$a=$this->mysqli->query("SELECT venta FROM ventas WHERE id_venta='$idVenta';");
if($a->num_rows!=0){$a1=$a->fetch_assoc();  $v=json_decode($a1["venta"],true);     
for($i=0;$i<sizeof($v);$i++){ if($v[$i]["idpr"]==$idpr){ $trasladoAux=$v[$i]["traslado"]??0;
if($trasladoAux!=0){if(isset($v[$i]["traslado"])){if($traslado==$v[$i]["traslado"]){ $v[$i]["rel"]=0; if(isset($v[$i]["relArray"])){
$aux=$v[$i]["relArray"]; for($k=0;$k<sizeof($aux);$k++){ if($aux[$k]["ubicacion"]==$ubicacion){ $aux[$k]["cantidad"]=0; } } $v[$i]["relArray"]=$aux;
$paso["relAux"]=$aux;}}}}else{ $v[$i]["rel"]=$v[$i]["rel"]-$cantidad;
if(isset($v[$i]["relArray"])){ $aux=$v[$i]["relArray"]; for($k=0;$k<sizeof($aux);$k++){ if($aux[$k]["ubicacion"]==$ubicacion){ $aux[$k]["cantidad"]=0;
$this->auxProductoGeneral("resta",$v[$i]["idpr"],$aux[$k]["cantidad"],$idBodega,$aux[$k]["ubicacion"]);
}}$v[$i]["relArray"]=$aux; $paso["relAux"]=$aux; }}}} 
$paso["venta"]=$v;   $vjson=json_encode($v); $b=$this->mysqli->query("UPDATE ventas SET venta='$vjson' WHERE id_venta='$idVenta';");
if($b){$paso["paso"]="paso";}} return json_encode($paso); }


public function actualizar_rel($cantidad,$idVenta,$idpr,$control,$ubicacion,$idBodega,$traslado){return $this->actualizarRelMasivo($cantidad,$idVenta,$idpr,$control,$idBodega,$ubicacion,$traslado);}
public function corroborar_rel_general($idVenta,$lista,$idBodega){return $this->corroborarRelMasivo($idVenta,$idBodega,$lista);}
public function reiniciar_rel_general($idVenta,$idBodega){return $this->reiniciarRelMasivo($idVenta,$idBodega);}
public function actualizar_rel_cero($cantidad,$idVenta,$idpr,$idBodega){return $this->actualizarRelCeroMasivo($cantidad,$idVenta,$idpr,$idBodega);}

public function actualizarRelCeroMasivo($ubicacion,$idVenta,$idpr,$idBodega){$paso["paso"]="no paso"; $pasoAux="no paso"; $relAux=null; $trasladoAux=0;
$a=$this->mysqli->query("SELECT venta FROM ventas WHERE id_venta='$idVenta';"); if($a->num_rows!=0){$a1=$a->fetch_Assoc(); $v=json_decode($a1["venta"],true);
for($i=0;$i<sizeof($v);$i++){if($v[$i]["idpr"]==$idpr){ $trasladoAux=$v[$i]["traslado"]??0;  if(isset($v[$i]["relArray"])){ $aux=$v[$i]["relArray"]; for($k=0;$k<sizeof($aux);$k++){ 
if($aux[$k]["cantidad"]!=0){ if($trasladoAux){ $this->auxProductoGeneral("resta",$v[$i]["idpr"],$aux[$k]["cantidad"],$idBodega,$aux[$k]["ubicacion"]);}} $aux[$k]["cantidad"]=0; } 
$v[$i]["relArray"]=$aux; $relAux=$aux;} $v[$i]["rel"]=0; $pasoAux="paso";}}}  
$v1=json_encode($v); $v2=$this->mysqli->query("UPDATE ventas SET venta='$v1' WHERE id_venta='$idVenta';");
if($v2){$paso["paso"]="paso"; $paso["relAux"]=$relAux;  } return json_encode($paso);}

//public function actualizarRelCeroMasivo($cantidad,$idVenta,$idpr,$ubicacion){ $paso["paso"]="no paso";
//$a=$this->mysqli->query("SELECT venta FROM ventas WHERE id_venta=$idVenta;");
//if($a->num_rows!=0){$r1=$a->fetch_assoc(); $v=json_decode($r1["venta"],true); $vS=sizeof($v);
//for($i=0;$i<$vS;$i++){if($v[$i]["idpr"]==$idpr){$this->auxProductoGeneral("resta",$v[$i]["idpr"],$v[$i]["rel"],6,$ubicacion);$v[$i]["rel"]=0;}} $v1=json_encode($v);
//$v2=$this->mysqli->query("UPDATE ventas set venta='$v1' WHERE id_venta=$idVenta;");
//if($v2){$paso["paso"]="paso";}}return json_encode($paso);	}

//public function actualizarRelMasivo($cantidad,$idVenta,$idpr,$control,$idBodega,$ubicacion){ $paso["paso"]="no paso"; $cantidadAux=0;  
//$r=$this->mysqli->query("SELECT ventas.venta, ventas.estado, productos.ubicacion_array, productos.ventas_array FROM  ventas INNER JOIN productos ON productos.id='$idpr' WHERE ventas.id_venta=$idVenta;");   
//if($r->num_rows!=0){$r1=$r->fetch_assoc(); $v=json_decode($r1["venta"],true); $vS=sizeof($v);
//for($i=0;$i<$vS;$i++){if($v[$i]["idpr"]==$idpr){$cantidadAux=$v[$i]["rel"]; $v[$i]["rel"]=intval($cantidad);}} $v1=json_encode($v);
//$dif=$cantidad-$cantidadAux;  if($dif<0){$dif1=$dif*(-1);}else{$dif1=$dif;} if($dif<0){$estadoActual="resta";}else{$estadoActual="suma";}//
//$aty1=new CarritoGeneral();   $AAXX=$aty1->auxRelUbicacion($estadoActual,$dif1,$r1["ubicacion_array"],$r1["ventas_array"],$idBodega,"cantidad",$ubicacion);
// $vAA=$AAXX["venta"]; $sAA=$AAXX["stock"]; $this->mysqli->query("UPDATE productos SET ventas_array='$vAA', ubicacion_array='$sAA' WHERE id=$idpr;");
//$v2=$this->mysqli->query("UPDATE ventas SET venta='$v1' WHERE id_venta=$idVenta"); if($v2){
//$zzz1=$this->mysqli->query("SELECT id, COALESCE(JSON_UNQUOTE(JSON_EXTRACT(ubicacion_array, '$.6')),'') AS ubicacionAux FROM productos WHERE id='$idpr';")->fetch_assoc();
//$paso["ubicacion"]=$zzz1["ubicacionAux"]; $paso["paso"]="paso"; $paso["valor"]=1;}} return json_encode($paso);}

public function actualizarRelMasivo($cantidad,$idVenta,$idpr,$control,$idBodega,$ubicacion,$traslado){ $paso["paso"]="no paso"; $cantidadAux=0; $pasoAux="no paso"; $dif=0; $dif1=0; $trasladoAux=0;
$a=$this->mysqli->query("SELECT ventas.venta, ventas.estado, productos.ubicacion_array, productos.ventas_array FROM  ventas INNER JOIN productos ON productos.id='$idpr' WHERE ventas.id_venta=$idVenta;");   
if($a->num_rows!=0){$a1=$a->fetch_assoc(); $v=json_decode($a1["venta"],true); $vS=sizeof($v); $relAux=null;
for($i=0;$i<$vS;$i++){if($v[$i]["idpr"]==$idpr){  if(isset($v[$i]["traslado"])){ $trasladoAux=$traslado; if($traslado==$v[$i]["traslado"]){ 
$cantidadAux=$v[$i]["rel"];  $dif=$cantidad-$cantidadAux; 
$relAux= $this->actuRelAux(isset($v[$i]["relArray"]) ? $v[$i]["relArray"] : null,$ubicacion,$dif); $v[$i]["relArray"]=$relAux;
if($dif<0){$dif1=$dif*(-1);}else{$dif1=$dif;} if($dif<0){$v[$i]["rel"]=$v[$i]["rel"]-$dif1;}else{$v[$i]["rel"]=$v[$i]["rel"]+$dif1;} $pasoAux="paso";}}else{       
$cantidadAux=$v[$i]["rel"]; $trasladoAux=0; $dif=$cantidad-$cantidadAux; 
$relAux= $this->actuRelAux(isset($v[$i]["relArray"]) ? $v[$i]["relArray"] : null,$ubicacion,$dif); $v[$i]["relArray"]=$relAux;
if($dif<0){$dif1=$dif*(-1);}else{$dif1=$dif;} if($dif<0){$v[$i]["rel"]=$v[$i]["rel"]-$dif1;}else{$v[$i]["rel"]=$v[$i]["rel"]+$dif1;} $pasoAux="paso";}}}
if($pasoAux=="paso"){ $aty1=new CarritoGeneral(); if($dif<0){$estadoActual="resta";}else{$estadoActual="suma";} $AAXX=$aty1->auxRelUbicacion($estadoActual,$dif1,$a1["ubicacion_array"],$a1["ventas_array"],$idBodega,"cantidad",$ubicacion);
$vAA=$AAXX["venta"]; $sAA=$AAXX["stock"]; if($trasladoAux==0){$this->mysqli->query("UPDATE productos SET ventas_array='$vAA', ubicacion_array='$sAA' WHERE id=$idpr;");}
$v1=json_encode($v); $v2=$this->mysqli->query("UPDATE ventas SET venta='$v1' WHERE id_venta=$idVenta"); if($v2){$paso["paso"]="paso";
$this->movimientosGestion($ubicacion,$idBodega,$cantidad,"---",$idpr,$idVenta,$control);    
$zzz1=$this->mysqli->query("SELECT id, COALESCE(JSON_UNQUOTE(JSON_EXTRACT(ubicacion_array, '$.".$idBodega."')),'') AS ubicacionAux FROM productos WHERE id='$idpr';")->fetch_assoc();
$paso["ubicacionAux"]=$zzz1["ubicacionAux"]; $paso["relAux"]=$relAux; $paso["valor"]=1;}}}  return json_encode($paso);}



//public function actualizarRelMasivo($cantidad,$idVenta,$idpr,$control,$idBodega,$ubicacion,$traslado){ $paso["paso"]="no paso"; $cantidadAux=0; $pasoAux="no paso"; $dif=0; $dif1=0; $trasladoAux=0;
//$a=$this->mysqli->query("SELECT ventas.venta, ventas.estado, productos.ubicacion_array, productos.ventas_array FROM  ventas INNER JOIN productos ON productos.id='$idpr' WHERE ventas.id_venta=$idVenta;");   
//if($a->num_rows!=0){$a1=$a->fetch_assoc(); $v=json_decode($a1["venta"],true); $vS=sizeof($v); $relAux=null; 
//for($i=0;$i<$vS;$i++){if($v[$i]["idpr"]==$idpr){$trasladoAux=$v[$i]["traslado"]??0;  $cantidadAux=$v[$i]["rel"]; $dif=$cantidad-$cantidadAux; $relAux=$this->actuRelAux(isset($v[$i]["relArray"]) ? $v[$i]["relArray"] : null,$ubicacion,$dif); $v[$i]["relArray"]=$relAux;
//if($dif<0){$dif1=$dif*(-1);}else{$dif1=$dif;} if($dif<0){$v[$i]["rel"]=$v[$i]["rel"]-$dif1;}else{$v[$i]["rel"]=$v[$i]["rel"]+$dif1;} $pasoAux="paso";}}
//if($pasoAux=="paso"){ $aty1=new CarritoGeneral(); if($dif<0){$estadoActual="resta";}else{$estadoActual="suma";}  $AAXX=$aty1->auxRelUbicacion($estadoActual,$dif1,$a1["ubicacion_array"],$a1["ventas_array"],$idBodega,"cantidad",$ubicacion);
//$vAA=$AAXX["venta"]; $sAA=$AAXX["stock"]; if($trasladoAux==0){$this->mysqli->query("UPDATE productos SET ventas_array='$vAA', ubicacion_array='$sAA' WHERE id=$idpr;");}
//$this->movimientosGestion($ubicacion,$idBodega,$cantidad,"---",$idpr,$idVenta,$control);
//$v1=json_encode($v); $v2=$this->mysqli->query("UPDATE ventas SET venta='$v1' WHERE id_venta=$idVenta"); if($v2){$paso["paso"]="paso";
//$zzz1=$this->mysqli->query("SELECT id, COALESCE(JSON_UNQUOTE(JSON_EXTRACT(ubicacion_array, '$.".$idBodega."')),'') AS ubicacionAux FROM productos WHERE id='$idpr';")->fetch_assoc();
//$paso["ubicacionAux"]=$zzz1["ubicacionAux"]; $paso["relAux"]=$relAux;  $paso["valor"]=1;}}}  return json_encode($paso);}

public function actuRelAux($rel,$ubicacion,$cantidad){$res=array(); $arrayBase=array('ubicacion'=>$ubicacion,'cantidad'=>$cantidad);  
if(isset($rel)){$conteo=0; for($i=0;$i<sizeof($rel);$i++){if($ubicacion==$rel[$i]["ubicacion"]){$rel[$i]["cantidad"]=$rel[$i]["cantidad"]+($cantidad); $conteo++;}}
if($conteo==0){ $rel[sizeof($rel)]=$arrayBase;}  return $rel; }else{$res[]=$arrayBase; return $res;}}

//public function corroborarRelMasivo($idVenta,$idBodega,$lista){$paso["paso"]="no paso";
//$a=$this->mysqli->query("SELECT venta FROM ventas WHERE id_venta='$idVenta';"); if($a->num_rows!=0){$aA=$a->fetch_assoc(); 
//$v=json_decode($aA["venta"],true);   $aux=json_decode($lista,true);
//for($i=0;$i<sizeof($v);$i++){ if($v[$i]["estEli"]==0){$v[$i]["rel"]=intval($v[$i]["cant"]); }} $v1=json_encode($v);
//$v2=$this->mysqli->query("UPDATE ventas SET venta='$v1' WHERE id_venta='$idVenta'");
//if($v2){$paso["lista"]=$this->auxRelCant($aux,"corroborar",$idBodega); $paso["paso"]="paso";}} return json_encode($paso);}
public function corroborarRelMasivo($idVenta,$idBodega,$lista){ $paso["paso"]="no paso"; $relAux=array();
$a=$this->mysqli->query("SELECT venta FROM ventas WHERE id_venta='$idVenta';"); if($a->num_rows!=0){$aA=$a->fetch_assoc();
$v=json_decode($aA["venta"],true); $aux=json_decode($lista,true); for($i=0;$i<sizeof($v);$i++){if($v[$i]["estEli"]==0){ 
$aux117=$this->auxRelCantAux($aux,$v[$i]["idpr"],$idBodega,isset($v[$i]["relArray"]) ? $v[$i]["relArray"] : null,$v[$i]["traslado"]??"0");  $v[$i]["relArray"]=$aux117; $v[$i]["rel"]=intval($v[$i]["cant"]);
$relAux[]=array('idpr'=>$v[$i]["idpr"],'relArray'=>$aux117);}} $v1=json_encode($v); $v2=$this->mysqli->query("UPDATE ventas SET  venta='$v1' WHERE id_venta='$idVenta';");
if($v2){$paso["paso"]="paso"; $paso["lista"]=$relAux;}} return json_encode($paso);}

//public function auxRelCantAux($aux,$idpr,$idBodega){ 
//for($i=0;$i<sizeof($aux);$i++){if($idpr==$aux[$i]["idpr"]){ $auxI=$aux[$i]["masCercano"];  for($k=0;$k<sizeof($auxI);$k++){ 
//$this->auxProductoGeneral("suma",$aux[$i]["idpr"],$auxI[$k]["cant"]-$auxI[$k]["cantAux"],$idBodega,$auxI[$k]["ubicacion"]);
//$auxI[$i]["cantAux"]=$auxI["cant"];} return $auxI;}} return "null"; }
public function auxRelCantAux($aux,$idpr,$idBodega,$auxRelArray,$traslado){ $auxDD=array(); $conteoExiste=0;
if($auxRelArray!=null){for($k=0;$k<sizeof($auxRelArray);$k++){if($this->comprobarNoExistencia($aux,$idpr,$auxRelArray[$k]["ubicacion"])=="no"){
$auxFF[$conteoExiste]=$auxRelArray[$k]; $conteoExiste++; }}}  if($conteoExiste!=0){ for($q=0;$q<sizeof($auxFF);$q++){
$this->auxProductoGeneral("resta",$idpr,$auxFF[$q]["cantidad"],$idBodega,$auxFF[$q]["ubicacion"]);}}
for($i=0;$i<sizeof($aux);$i++){if($idpr==$aux[$i]["idpr"]){ $auxI=$aux[$i]["masCercano"];  for($k=0;$k<sizeof($auxI);$k++){ if(($auxI[$k]["cant"]-$auxI[$k]["cantAux"])!=0){
if($traslado==0){ $this->auxProductoGeneral("suma",$aux[$i]["idpr"],$auxI[$k]["cant"]-$auxI[$k]["cantAux"],$idBodega,$auxI[$k]["ubicacion"]);}}
$auxI[$k]["cantAux"]=$auxI[$k]["cant"];$auxDD[]=array("ubicacion"=>$auxI[$k]["ubicacion"],"cantidad"=>$auxI[$k]["cant"]);} return $auxDD;}} return "null"; }

public function comprobarNoExistencia($aux,$idpr,$ubicacion){for($i=0;$i<sizeof($aux);$i++){if($aux[$i]["idpr"]==$idpr){ 
$auxI=$aux[$i]["masCercano"]; for($k=0;$k<sizeof($auxI);$k++){ if($ubicacion==$auxI[$k]["ubicacion"]){return "si"; }}}} return "no";}

//public function reiniciarRelMasivo($idVenta,$idBodega,$lista){$paso["paso"]="no paso";
//$a=$this->mysqli->query("SELECT venta FROM ventas WHERE id_venta='$idVenta';"); if($a->num_rows!=0){$aA=$a->fetch_assoc(); 
//$v=json_decode($aA["venta"],true);   $aux=json_decode($lista,true);
//for($i=0;$i<sizeof($v);$i++){ if($v[$i]["estEli"]==0){$v[$i]["rel"]=0; }} $v1=json_encode($v);
//$v2=$this->mysqli->query("UPDATE ventas SET venta='$v1' WHERE id_venta='$idVenta'");
//if($v2){$paso["lista"]=$this->auxRelCant($aux,"reiniciar",$idBodega); $paso["paso"]="paso";}} return json_encode($paso);}
public function reiniciarRelMasivo($idVenta,$idBodega){$paso["paso"]="no paso"; $relAux=array();
$a=$this->mysqli->query("SELECT venta FROM ventas WHERE id_venta='$idVenta';"); if($a->num_rows!=0){
$a1=$a->fetch_assoc();  $v=json_decode($a1["venta"],true);  for($i=0;$i<sizeof($v);$i++){
if(isset($v[$i]["relArray"])){ $aux=$v[$i]["relArray"]; for($k=0;$k<sizeof($aux);$k++){ if($aux[$k]["cantidad"]!=0){  $traAA=$aux[$k]["traslado"]??0; if($traAA==0){
$this->auxProductoGeneral("resta",$v[$i]["idpr"],$aux[$k]["cantidad"],$idBodega,$aux[$k]["ubicacion"]);} } $aux[$k]["cantidad"]=0; }                 
$v[$i]["relArray"]=$aux; $relAux[]=$aux; }else{$relAux[]="null";}  $v[$i]["rel"]=0;}
$v1=json_encode($v); $v2=$this->mysqli->query("UPDATE ventas SET venta='$v1' WHERE id_venta='$idVenta';");
if($v2){$paso["paso"]="paso"; $paso["relAux"]=$relAux; }} return json_encode($paso); }

public function auxRelCant($aux,$control,$idBodega){
for($i=0;$i<sizeof($aux);$i++){ $auxI=$aux[$i]["masCercano"]; for($k=0;$k<sizeof($auxI);$k++){ if($control=="corroborar"){ 
$this->auxProductoGeneral("suma",$aux[$i]["idpr"],$auxI[$k]["cant"]-$auxI[$k]["cantAux"],$idBodega,$auxI[$k]["ubicacion"]);}else{
$this->auxProductoGeneral("resta",$aux[$i]["idpr"],$auxI[$k]["cantAux"],$idBodega,$auxI[$k]["ubicacion"]);}}}
for($l=0;$l<sizeof($aux);$l++){ $auxI1=$aux[$i]["masCercano"];for($m=0;$m<sizeof($auxI1);$m++){if($control=="corroborar"){
$auxI[$m]["canAux"]=$auxI[$m]["cant"];}else{$auxI[$m]["canAux"]=0;}} $aux[$i]["masCercano"]=$auxI1;} return $this->auxUbicacionAux($aux);}


public function auxUbicacionAux($aux){ $idpr=""; for($i=0;$i<sizeof($aux);$i++){$idpr.=" id='".$aux[$i]["idpr"]."' OR ";} $idpr=substr($idpr,0,-4);   
$a=$this->mysqli->query("SELECT id, COALESCE(JSON_UNQUOTE(JSON_EXTRACT(ubicacion_array, '$.6')),'') AS ubicacionAux FROM productos WHERE ".$idpr.";");
if($a->num_rows!=0){while($fila=$a->fetch_assoc()){ $aA[]=$fila;} for($p=0;$p<sizeof($aux);$p++){ $aux[$p]["ubicacionAux"]=$this->selUbic($aA,$aux[$p]["idpr"]);}
} return $aux; }

public function selUbic($info,$idpr){ for($i=0;$i<sizeof($info);$i++){if($info[$i]["id"]==$idpr){return $info[$i]["ubicacionAux"];}} return "vacio"; }

public function auxProductoGeneral($estadoActual,$idpr,$auxResta,$idBodega,$ubicacion){
$a=$this->mysqli->query("SELECT ubicacion_array, ventas_array FROM productos WHERE id='$idpr';")->fetch_assoc();
$aty1=new CarritoGeneral(); $AAXX=$aty1->auxRelUbicacion($estadoActual,$auxResta,$a["ubicacion_array"],$a["ventas_array"],$idBodega,"cantidad",$ubicacion);    
$vAA=$AAXX["venta"]; $sAA=$AAXX["stock"]; $this->mysqli->query("UPDATE productos SET ventas_array='$vAA', ubicacion_array='$sAA' WHERE id=$idpr;");}

// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
public function movimientosGestion($ubicacion,$idBodega,$cantidad,$cantidadAnt,$idpr,$idVenta,$control){ $hoy=$this->hoyHoy(); $paso["paso"]="no paso";
$arr=array("ubicacion"=>$ubicacion,"idBodega"=>$idBodega,"cantidad"=>$cantidad,"cantidadAnt"=>$cantidadAnt,"idpr"=>$idpr,"idVenta"=>$idVenta,"fecha"=>$hoy,"control"=>$control);    
$a=$this->mysqli->query("SELECT  ventas.control_estado, ventas.venta, historialgestion.*  FROM historialgestion INNER JOIN ventas ON  historialgestion.id=ventas.id_venta WHERE historialgestion.id='$idVenta' AND historialgestion.bandera='gestionConteo';");
if($a->num_rows==0){ $aA[0]=$arr; $arrar=json_encode($aA);
$b=$this->mysqli->query("INSERT INTO historialgestion(id,movimiento,fecha,bandera) VALUES('$idVenta','$arrar','$hoy','gestionConteo');");
if($b){$paso["paso"]="paso"; $paso["lista"]=$arrar;}}else{
$aa=$a->fetch_assoc();  $aA=json_decode($aa["movimiento"],true); $aA[sizeof($aA)]=$arr; $arrar=json_encode($aA);
$b=$this->mysqli->query("UPDATE historialgestion SET movimiento='$arrar' WHERE id=$idVenta AND bandera='gestionConteo'");
if($b){$paso["paso"]="paso"; $paso["lista"]=$arrar;}} return json_encode($paso); }


public function consultaMovimientoGestion($idVenta){$paso["paso"]="no paso";
$a=$this->mysqli->query("SELECT * FROM historialgestion WHERE id='$idVenta' AND bandera='gestionConteo';");if($a->num_rows!=0){ while($fila=$a->fetch_assoc()){$aA[]=$fila;}
$paso["paso"]="paso"; $paso["lista"]=$this->obtenerInfoProducto($aA); 
$paso["general"]=$this->mysqli->query("SELECT ventas.id_venta, ventas.venta, ventas.control_estado FROM ventas WHERE id_venta='$idVenta';")->fetch_assoc();} return json_encode($paso);}


public function obtenerInfoProducto($lista){$idpr=""; $conteo=0; $idGeneral="";
for($i=0;$i<sizeof($lista);$i++){$mov=json_decode($lista[$i]["movimiento"],true); for($j=0;$j<sizeof($mov);$j++){$id[$conteo]=$mov[$j]["idpr"]; $conteo++; }}
$id=array_values(array_unique($id)); for($i=0;$i<sizeof($id);$i++){ $idGeneral.="id =".$id[$i]." OR "; } $idGeneral=substr($idGeneral,0,-4);
$a1="SELECT productos.id,  productos.imagenArray, productos.codigo, JSON_UNQUOTE(JSON_EXTRACT(productos.datos_productos, '$.descripcion')) as descripcion,";
$a2="IFNULL(categorias.categoria, 'DISPONIBLE') as categoria, marca.marca, marca.imagen, ";
$a3="IFNULL(modelos.modelo, 'DISPONIBLE') as modelo FROM productos "; 
$a4="LEFT JOIN categorias ON JSON_UNQUOTE(JSON_EXTRACT(productos.datos_productos, '$.id_categoria')) = categorias.id_categoria ";
$a5="LEFT JOIN modelos ON JSON_UNQUOTE(JSON_EXTRACT(productos.datos_productos, '$.id_modelo')) = modelos.id_modelo ";
$a6="LEFT JOIN marca ON JSON_UNQUOTE(JSON_EXTRACT(productos.datos_productos, '$.id_marca')) = marca.id_marca WHERE ";
$sel2=$this->mysqli->query($a1.$a2.$a3.$a4.$a5.$a6.$idGeneral." ;"); if($sel2->num_rows==0){$aA=[];}else{while($fila=$sel2->fetch_assoc()){$aA[]=$fila;}}
for($k=0;$k<sizeof($lista);$k++){$mov1=json_decode($lista[$k]["movimiento"],true); for($l=0;$l<sizeof($mov1);$l++){ 
$mov1[$l]["infoProducto"]=$this->obProGen($aA,$mov1[$l]["idpr"],"id","vacio");} $lista[$k]["movimiento"]=json_encode($mov1);}
return $lista;}

public function obProGen($info,$idpr,$control,$base){
$respuesta=$base; for($i=0;$i<sizeof($info);$i++){if($idpr==$info[$i][$control]){$respuesta=$info[$i];}} return $respuesta; }
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
}
?>