Jump to content

CANTIDAD DE STOCK NO COINCIDE CON LAS COMBINACIONES


Recommended Posts

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.

image.thumb.png.ace120add33161ad9384703c96957203.png

image.thumb.png.578f4ec4f98b48b4d16fd19bf4ac9249.png

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 by toni_svo (see edit history)
Link to comment
Share on other sites

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.

image.thumb.png.ace120add33161ad9384703c96957203.png

image.thumb.png.578f4ec4f98b48b4d16fd19bf4ac9249.png

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

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.

image.thumb.png.ace120add33161ad9384703c96957203.png

image.thumb.png.578f4ec4f98b48b4d16fd19bf4ac9249.png

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...