toni_svo Posted August 28, 2020 Share Posted August 28, 2020 (edited) Hola, Yo en mi web actualizo el stock con un modulo propio. Me he dado cuenta que un producto que tiene combinaciones y tiene stock a cero en la pagina general de productos pone una cantidad de stock que no corresponde a la del producto. Adjunto fotos para que lo veais haber si alguien me puede decir que está pasando. La correcta es cero no 36 que no se de donde sale. En la tienda si sale correctamente y aparece cero unidades pero me provoca lio ver el 36 ahi. Os pongo aqui el codigo que conecta la base de datos igual falta algo: function get_id_product_attribute($ref){ $sql = "SELECT id_product_attribute FROM ps_product_attribute WHERE reference LIKE '".$ref."'"; $result = $this->conn->query($sql); $row = $result->fetch_assoc(); return $row["id_product_attribute"]; } function update_stock_single_product($id,$cant){ $sql = "UPDATE ps_stock_available SET quantity=".$cant." WHERE id_product_attribute LIKE '".$id."'"; return($this->conn->query($sql)); } function get_id_product_from_id_product_attribute($id_pa){ $sql = "SELECT id_product FROM ps_stock_available WHERE id_product_attribute LIKE '".$id_pa."'"; $result = $this->conn->query($sql); $row = $result->fetch_assoc(); return $row["id_product"]; } function update_group_combination_stock($id_prod){ $total = 0; $sql = "SELECT quantity FROM ps_stock_available WHERE id_product=".$id_prod." AND id_product_attribute<>0"; $result = $this->conn->query($sql); if($result==false){ echo "ESTE ID DA ERROR ---> ".$id_prod."<br>"; } while($row = $result->fetch_assoc()){ $total += $row["quantity"]; } //echo "<br/>total de producto ".$id_prod." => ".$total; $sql = "UPDATE ps_stock_available SET quantity=".$total." WHERE id_product=".$id_prod." AND id_product_attribute=0"; return($this->conn->query($sql)); } } Gracias, un saludo Edited August 28, 2020 by toni_svo (see edit history) Link to comment Share on other sites More sharing options...
JavierP Posted August 29, 2020 Share Posted August 29, 2020 En 28/8/2020 a las 10:57 AM, toni_svo dijo: Hola, Yo en mi web actualizo el stock con un modulo propio. Me he dado cuenta que un producto que tiene combinaciones y tiene stock a cero en la pagina general de productos pone una cantidad de stock que no corresponde a la del producto. Adjunto fotos para que lo veais haber si alguien me puede decir que está pasando. La correcta es cero no 36 que no se de donde sale. En la tienda si sale correctamente y aparece cero unidades pero me provoca lio ver el 36 ahi. Os pongo aqui el codigo que conecta la base de datos igual falta algo: function get_id_product_attribute($ref){ $sql = "SELECT id_product_attribute FROM ps_product_attribute WHERE reference LIKE '".$ref."'"; $result = $this->conn->query($sql); $row = $result->fetch_assoc(); return $row["id_product_attribute"]; } function update_stock_single_product($id,$cant){ $sql = "UPDATE ps_stock_available SET quantity=".$cant." WHERE id_product_attribute LIKE '".$id."'"; return($this->conn->query($sql)); } function get_id_product_from_id_product_attribute($id_pa){ $sql = "SELECT id_product FROM ps_stock_available WHERE id_product_attribute LIKE '".$id_pa."'"; $result = $this->conn->query($sql); $row = $result->fetch_assoc(); return $row["id_product"]; } function update_group_combination_stock($id_prod){ $total = 0; $sql = "SELECT quantity FROM ps_stock_available WHERE id_product=".$id_prod." AND id_product_attribute<>0"; $result = $this->conn->query($sql); if($result==false){ echo "ESTE ID DA ERROR ---> ".$id_prod."<br>"; } while($row = $result->fetch_assoc()){ $total += $row["quantity"]; } //echo "<br/>total de producto ".$id_prod." => ".$total; $sql = "UPDATE ps_stock_available SET quantity=".$total." WHERE id_product=".$id_prod." AND id_product_attribute=0"; return($this->conn->query($sql)); } } Gracias, un saludo Buenas puede que al ser un producto con combinaciones, del producto principal (color Cera) si tengas esas 36 unidades pero del segundo producto "en color negro" tengas 0 unidades.. Yo a simple vista lo veo bien. No se si sera esa la confusión que tienes y no sea un error de stock. Saludos Link to comment Share on other sites More sharing options...
toni_svo Posted August 31, 2020 Author Share Posted August 31, 2020 On 8/28/2020 at 10:57 AM, toni_svo said: Hola, Yo en mi web actualizo el stock con un modulo propio. Me he dado cuenta que un producto que tiene combinaciones y tiene stock a cero en la pagina general de productos pone una cantidad de stock que no corresponde a la del producto. Adjunto fotos para que lo veais haber si alguien me puede decir que está pasando. La correcta es cero no 36 que no se de donde sale. En la tienda si sale correctamente y aparece cero unidades pero me provoca lio ver el 36 ahi. Gracias, un saludo Hola, Es el mismo producto no son dos diferentes y el stock es cero y aparece una cantidad que no es fuera no entiendo el porque. POngo el codigo: function update_stock($filename,$filename2){ //Cargamos el fichero CSV de stock de marckeric $pa_ids = array(); $new_stock = array(); $pa_ids2 = array(); $new_stock2 = array(); $product_ids = array(); $file = fopen($filename,"r"); //CONECTAMOS CON LA BASE DE DATOS Y OBTENEMOS LOS ID_PRODUCT_ATRIBUTE NECESARIOS PARA ACTUALIZAR EN LA TABLA DE STOCK //EN ESTA PRIMERA VUELTA CARGAMOS DIRECTAMENTE TODAS LAS REFERENCIAS Y STOCKS DE MARCKERIC $conn = new db_connect(); $conn->db_start(); while(($line = fgetcsv($file,0,";")) !== false){ $current_pa_id = $conn->get_id_product_attribute($line[0]); if(is_null($current_pa_id) == false){ array_push($pa_ids,$current_pa_id); array_push($new_stock,$line[1]); } } //AHORA CARGAMOS LOS DATOS DE SOMOS EN LOS ARRAYS, PARA ELLO VAMOS A COMPARAR CADA ID_PRODUCT_ATTRIBUTE, Y ACTUALIZAREMOS SOLO LOS STOCKS SI SON MAYORES QUE LOS //QUE YA SE HAN AÑADIDO $repetido=0; $file = fopen($filename2,"r"); while(($line = fgetcsv($file,0,";")) !== false){ $repetido=0; $current_pa_id = $conn->get_id_product_attribute($line[0]); //COMPROBAMOS IS EL ID OBTENIDO NO ES NULO if(is_null($current_pa_id) == false){ //COMPROBAMOS SI EL ID OBTENIDO YA SE ENCUENTRA EN EL ARRAY for($i=0;$i<(sizeof($pa_ids)-1);$i++){ //Si los ids son iguales if(strcasecmp($current_pa_id,$pa_ids[$i])==0){ //si el stock del id es mayor que el anterior /*if($line[1]>$new_stock[$i]){ echo $current_pa_id."=".$pa_ids[$i]."<br>"; echo $line[1].">".$new_stock[$i]."<br>"; $new_stock[$i]=$line[1]; echo "Ahora el producto ".$pa_ids[$i]." tiene stock ".$new_stock[$i]."<br>"; }*/ //SUMAMOS EL STOCK EN EL CASO DE REPETIRSE LA REFERENCIA EN AMBOS SITIOS echo $current_pa_id."=".$pa_ids[$i]."<br>"; echo "Sumamos ".$new_stock[$i]."+".$line[1]."<br>"; $new_stock[$i]+=$line[1]; echo "Ahora el producto ".$pa_ids[$i]." tiene stock ".$new_stock[$i]."<br>"; $repetido=1; } } //SI NO ESTABA REPETIDO CREAMOS UN NUEVO REGISTRO EN EL ARRAY if($repetido==0){ array_push($pa_ids,$current_pa_id); array_push($new_stock,$line[1]); } } } //UNIMOS LOS ARRAYS DE IDS Y DATOS OBTENIDOS EN LA COMPARACION EXCLUSIVA DE SOMOS //LO HACEMOS ASI PORQUE SINO DA ERROR ITERANDO EN EL MISMO BUCLE Y HACIENDO ARRAY_PUSH array_merge($pa_ids,$pa_ids2); array_merge($new_stock,$new_stock2); //ACTUALIZAMOS EL STOCK EN PS_STOCK_AVAILABLE A PARTIR DE LOS ID'S OBTENIDOS $actualizados = 0; for($i=0;$i<count($pa_ids);$i++){ //echo ($pa_ids[$i].",".$new_stock[$i]."<br/>"); if($conn->update_stock_single_product($pa_ids[$i],$new_stock[$i])){ $actualizados++; } } //AHORA AJUSTAMOS EL STOCK DE LA COMBINACION 0 QUE AGRUPA LA SUMA DEL STOCK DE LAS COMBINACIONES DE UN PRODUCTO //PRIMERO COGEMOS TODOS LOS ID_PRODUCT IMPLICADOS Y HACEMOS UN ARRAY SIN REPETICIONES for($i=0;$i<count($pa_ids);$i++){ $current_prod_id = $conn->get_id_product_from_id_product_attribute($pa_ids[$i]); array_push($product_ids,$current_prod_id); } $product_ids = array_unique($product_ids); //var_dump($product_ids); //AHORA LLAMAMOS A LA FUNCION QUE SUMA LOS STOCKS DE CADA COMBINACION DE UN PRODUCTO Y LOS GUARDA EN LA COMBINACION 0 DE DICHO PRODUCTO foreach($product_ids as $producto){ $conn->update_group_combination_stock($producto); } echo "<br/>"; echo "Productos encontrados: ".count($pa_ids); echo "<br/>"; echo "Productos actualizados: ".$actualizados; echo "<br/>"; echo "<br/>"; fclose($file); } ?> Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now