0

我从事 ERP(随机)和 PrestaShop 的集成工作,集成考虑的要点之一是产品的库存水平。当 ERP 中源自 PrestaShop 外部的产品库存发生变动时(例如,仓库之间的转移、采购、外部销售等),这些库存变化必须与 PrestaShop 的实物库存(physical_stock)同步,因为预留库存 (stock_reserved) 仅存在于 PrestaShop 上下文中,并且与尚未发货的订单中的预留产品相关,而可用库存 (stock_available) 在设计上并未考虑预留库存,那么如果 Stock来自 ERP 的分配到可用库存,到现在保留的库存将翻倍。另一方面,

stock_available.quantity = stock_available.physical_quantity - stock_available.reserved_quantity

这目前在生产中正常工作,但是,我正在寻找的是通过 PrestaShop 模块以最佳方式设计这些操作,该模块通过 FrontController 接收 ajax 请求,其中请求参数之一(Request->_ POST [ 'stock_quantity_changes']) 是数组格式的输入,例如:

[
    $id_stock_avaiblable_1 => $new_quantity_1,
    $id_stock_avaiblable_2 => $new_quantity_2,
    ...
]

我想用它来更新它在单个操作中包含的一组股票。到目前为止,我找到了方法 src/PrestaShopBundle/Entity/Repository/StockRepository.php->bulkUpdateStock ( https://github.com/PrestaShop/PrestaShop/blob/100c5c028b05c579f5788a036041e45cef510e1d/src/PrestaShopBundle/Entity/Repository/StockRepository.php#L102),这将允许我做我需要的事情,但是我还没有弄清楚如何创建这个类(StockRepository)的正确实例。StockRepository->bulkUpdateStock 方法接收一组库存变动 (MovementsCollection),并使用它更新一组可用库存,包括单个产品和包装中(如有必要),此外,记录库存变动 (StockMvt's),执行 actionUpdateQuantity钩住每个修改过的股票并从缓存中删除每个修改过的股票的价值,所有这些都可以在 /src/Core/Stock/StockManager.php->updateQuantity ( https://github.com/PrestaShop/PrestaShop/blob /100c5c028b05c579f5788a036041e45cef510e1d/src/Core/Stock/StockManager.php#L153)。最后,bulkUpdateStock 方法将实物库存水平与可用库存 + 预留库存同步。我有兴趣在更新一组库存以使其适应 PrestaShop 的操作时使用所有这些逻辑,因为目前只更新 stock_available 表的值,我没有注册 StockMvt,清理缓存或执行 actionUpdateQuantity 挂钩。

总之,我发现 StockRepository 类包含 bulkUpdateStock 方法,该方法允许我在单个操作中正确更新一组股票的水平,但是,实例化这个类需要一组参数,可以在https中验证://github.com/PrestaShop/PrestaShop/blob/100c5c028b05c579f5788a036041e45cef510e1d/src/PrestaShopBundle/Entity/Repository/StockRepository.php#L72,到目前为止我还没有在源代码中找到这个类的任何实例化示例,我只有发现使用该类的代码已经实例化,您可以在 src/PrestaShopBundle/Controller/Api/StockController.php 中检查(https://github.com/PrestaShop/PrestaShop/blob/100c5c028b05c579f5788a036041e45cef510e1d/src/PrestaShopBundle/Controller/Api/ StockController.php#L126)。所以最后的问题是,我怎样才能正确实例化 StockRepository 类?或者有什么替代方法可以做我需要的吗?,问候:)

4

0 回答 0