Jump to content

¿Cómo actualizar masivamente la cantidad de existencias de un lote de productos en PrestaShop 1.7.6?


Recommended Posts

Trabajo en la integración de un ERP (Random) y PrestaShop, uno de los puntos considerados por la integración es el nivel de stock de los productos. Cuando existen movimientos en el stock de los productos en el ERP con origen fuera de PrestaShop (por ejemplo, traslados entre almacenes, compras, ventas externas, etc.), estas variaciones de stock deben sincronizarse con el stock físico (físico_stock) de PrestaShop, porque el stock reservado (stock_reserved) existe solo en el contexto de PrestaShop y está relacionado con los productos reservados en pedidos que aún no han sido despachados, mientras que el stock disponible (stock_available) no considera el stock reservado por diseño, entonces si el Stock que proviene del ERP se asigna al stock disponible, el stock reservado hasta ahora se duplicaría. Por otro lado, el stock físico considera tanto el stock disponible como el stock reservado, luego el stock que proviene del ERP se asigna al stock físico, se mantiene el stock reservado y el stock disponible variará en función de la siguiente relación:

stock_available.quantity = stock_available.physical_quantity - stock_available.reserved_quantity

Esto actualmente está funcionando correctamente en producción, sin embargo, lo que busco es diseñar estas operaciones de la mejor manera a través de un módulo PrestaShop, el cual a través de un FrontController recibe una solicitud ajax donde uno de los parámetros de la solicitud (Request -> _ POST [ 'stock_quantity_changes']) es una entrada en formato de matriz, por ejemplo:

(matriz) [$ id_stock_avaiblable_1 => $ nueva_cantidad_1, $ id_stock_avaiblable_2 => $ nueva_cantidad_2, ...]

con lo que me gustaría actualizar el conjunto de stocks que contiene en una sola operación. Hasta el momento, encontré el método src / PrestaShopBundle / Entity / Repository / StockRepository.php-> bulkUpdateStock (https://github.com/PrestaShop/PrestaShop/blob/100c5c028b05c579f5788a036041e45cef510e1d/srcRepository/LundRepository2/Presta ), eso me permitiría hacer lo que necesito, sin embargo, todavía no he descubierto cómo crear una instancia adecuada de esta clase (StockRepository). El método StockRepository-> bulkUpdateStock recibe un conjunto de movimientos de stock (MovementsCollection) y con él, actualiza un conjunto de stocks disponibles, tanto en productos individuales como en pack's si es necesario, además registra los movimientos de stock (StockMvt's), ejecuta la acciónUpdateQuantity gancho para cada acción modificada y elimina el valor de cada acción modificada de la caché, todo esto se puede verificar en /src/Core/Stock/StockManager.php->updateQuantity (https://github.com/PrestaShop/PrestaShop/blob /100c5c028b05c579f5788a036041e45cef510e1d/src/Core/Stock/StockManager.php#L153). Finalmente el método bulkUpdateStock sincroniza el nivel de stock físico con el stock disponible + stock reservado. Me interesa usar toda esta lógica a la hora de actualizar un conjunto de stock para adaptarlo al funcionamiento de PrestaShop, ya que actualmente solo actualizando los valores de la tabla stock_available no estoy registrando los StockMvt's, limpiando el caché o ejecutando el hook actionUpdateQuantity.

En resumen, encontré la clase StockRepository que contiene el método bulkUpdateStock que me permitiría actualizar correctamente los niveles de un conjunto de stocks en una sola operación, sin embargo, para instanciar esta clase se requiere un conjunto de parámetros, que se pueden verificar en https : //github.com/PrestaShop/PrestaShop/blob/100c5c028b05c579f5788a036041e45cef510e1d/src/PrestaShopBundle/Entity/Repository/StockRepository.php#L72, y hasta ahora no he encontrado ningún código fuente solo para esta clase. código encontrado que usa esta clase ya instanciada, como puede verificar en src / PrestaShopBundle / Controller / Api / StockController.php (https://github.com/PrestaShop/PrestaShop/blob/100c5c028b05c579f5788a036041e45cef510e1d/StrollerBlepi StockController.php # L126). Entonces, la pregunta finalmente es, ¿cómo puedo crear una instancia adecuada de la clase StockRepository?, O ¿hay alguna alternativa para hacer lo que necesito?, Saludos :)

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...