/home/sharedstore/public_html/prestashop.sharedstore.ma/src/Adapter
NameSizeModeActions
Address/-0755rm
Admin/-0755rm
Assets/-0755rm
Attachment/-0755rm
Attribute/-0755rm
AttributeGroup/-0755rm
Backup/-0755rm
BestSales/-0755rm
Cache/-0755rm
Carrier/-0755rm
Cart/-0755rm
CartRule/-0755rm
CatalogPriceRule/-0755rm
Category/-0755rm
CMS/-0755rm
Configuration/-0755rm
Contact/-0755rm
Container/-0755rm
Converter/-0755rm
Country/-0755rm
CreditSlip/-0755rm
Currency/-0755rm
Customer/-0755rm
Debug/-0755rm
Domain/-0755rm
Email/-0755rm
Employee/-0755rm
EntityTranslation/-0755rm
Feature/-0755rm
File/-0755rm
Form/-0755rm
Geolocation/-0755rm
Grid/-0755rm
Group/-0755rm
Hook/-0755rm
Hosting/-0755rm
Image/-0755rm
Import/-0755rm
Invoice/-0755rm
Kpi/-0755rm
Language/-0755rm
Localization/-0755rm
Mail/-0755rm
MailTemplate/-0755rm
Manufacturer/-0755rm
Media/-0755rm
Meta/-0755rm
Module/-0755rm
NewProducts/-0755rm
Notification/-0755rm
Number/-0755rm
OptionalFeatures/-0755rm
Order/-0755rm
OrderMessage/-0755rm
OrderReturn/-0755rm
OrderReturnState/-0755rm
OrderState/-0755rm
Pack/-0755rm
PDF/-0755rm
Preferences/-0755rm
Presenter/-0755rm
PricesDrop/-0755rm
Product/-0755rm
Profile/-0755rm
Requirement/-0755rm
Routes/-0755rm
Routing/-0755rm
Search/-0755rm
SearchEngine/-0755rm
Security/-0755rm
Session/-0755rm
Shop/-0755rm
Smarty/-0755rm
SpecificPrice/-0755rm
SqlManager/-0755rm
State/-0755rm
Store/-0755rm
Supplier/-0755rm
Support/-0755rm
System/-0755rm
Tab/-0755rm
Tax/-0755rm
TaxRulesGroup/-0755rm
Theme/-0755rm
Title/-0755rm
Translations/-0755rm
Twig/-0755rm
Upload/-0755rm
Warehouse/-0755rm
Webservice/-0755rm
Zone/-0755rm
AbstractObjectModelValidator.php37190644editdlrm
AddressFactory.php20510644editdlrm
CacheManager.php14500644editdlrm
ClassLang.php17160644editdlrm
CombinationDataProvider.php85800644editdlrm
Configuration.php139590644editdlrm
ContainerBuilder.php89660644editdlrm
ContainerFinder.php23980644editdlrm
ContextStateManager.php103360644editdlrm
CoreException.php12290644editdlrm
Database.php26980644editdlrm
EntityMapper.php55730644editdlrm
EntityMetaDataRetriever.php20340644editdlrm
Environment.php26700644editdlrm
GeneralConfiguration.php43310644editdlrm
HookManager.php39690644editdlrm
ImageManager.php43200644editdlrm
LegacyContext.php110080644editdlrm
LegacyContextLoader.php42620644editdlrm
LegacyHookSubscriber.php47800644editdlrm
LegacyLogger.php48980644editdlrm
ObjectPresenter.php13270644editdlrm
RoundingMapper.php25230644editdlrm
ServiceLocator.php20650644editdlrm
StockManager.php79140644editdlrm
SymfonyContainer.php19700644editdlrm
Tools.php59320644editdlrm
Validate.php38330644editdlrm
Edit: /home/sharedstore/public_html/prestashop.sharedstore.ma/src/Adapter/StockManager.php (7914B)
* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) */ namespace PrestaShop\PrestaShop\Adapter; use Db; use PrestaShop\PrestaShop\Adapter\Configuration as ConfigurationAdapter; use PrestaShop\PrestaShop\Adapter\Shop\Context as ShopAdapter; use PrestaShopBundle\Service\DataProvider\StockInterface; use StockAvailable; /** * Data provider for new Architecture, about Product stocks. * * This class will provide data from DB / ORM about Product stocks. */ class StockManager implements StockInterface { /** * Gets available stock for a given product / combination / shop. * * @param object $product * @param null $id_product_attribute * @param int|null $id_shop * * @return StockAvailable */ public function getStockAvailableByProduct($product, $id_product_attribute = null, $id_shop = null) { $stockAvailable = $this->newStockAvailable($this->getStockAvailableIdByProductId($product->id, $id_product_attribute, $id_shop)); if (!$stockAvailable->id) { $shopAdapter = new ShopAdapter(); $stockAvailable->id_product = (int) $product->id; $stockAvailable->id_product_attribute = (int) $id_product_attribute; $outOfStock = $this->outOfStock((int) $product->id, $id_shop); $stockAvailable->out_of_stock = (int) $outOfStock; if ($id_shop === null) { $shop_group = $shopAdapter->getContextShopGroup(); } else { $shop_group = $shopAdapter->ShopGroup((int) $shopAdapter->getGroupFromShop((int) $id_shop)); } // if quantities are shared between shops of the group if ($shop_group->share_stock) { $stockAvailable->id_shop = 0; $stockAvailable->id_shop_group = (int) $shop_group->id; } else { $stockAvailable->id_shop = (int) $id_shop; $stockAvailable->id_shop_group = 0; } $stockAvailable->add(); } return $stockAvailable; } /** * Returns True if Stocks are managed by a module (or by legacy ASM). * * @return bool True if Stocks are managed by a module (or by legacy ASM) */ public function isAsmGloballyActivated() { return (bool) (new ConfigurationAdapter())->get('PS_ADVANCED_STOCK_MANAGEMENT'); } /** * @param int $shopId * @param int $errorState * @param int $cancellationState * @param int|null $idProduct * @param int|null $idOrder * * @return bool */ public function updatePhysicalProductQuantity($shopId, $errorState, $cancellationState, $idProduct = null, $idOrder = null) { $this->updateReservedProductQuantity($shopId, $errorState, $cancellationState, $idProduct, $idOrder); $updatePhysicalQuantityQuery = ' UPDATE {table_prefix}stock_available sa SET sa.physical_quantity = sa.quantity + sa.reserved_quantity WHERE sa.id_shop = ' . (int) $shopId . ' '; if ($idProduct) { $updatePhysicalQuantityQuery .= ' AND sa.id_product = ' . (int) $idProduct; } if ($idOrder) { $updatePhysicalQuantityQuery .= ' AND sa.id_product IN (SELECT product_id FROM {table_prefix}order_detail WHERE id_order = ' . (int) $idOrder . ')'; } $updatePhysicalQuantityQuery = str_replace('{table_prefix}', _DB_PREFIX_, $updatePhysicalQuantityQuery); return Db::getInstance()->execute($updatePhysicalQuantityQuery); } /** * @param int $shopId * @param int $errorState * @param int $cancellationState * @param int|null $idProduct * @param int|null $idOrder * * @return bool */ private function updateReservedProductQuantity($shopId, $errorState, $cancellationState, $idProduct = null, $idOrder = null) { $updateReservedQuantityQuery = ' UPDATE {table_prefix}stock_available sa SET sa.reserved_quantity = ( SELECT SUM(od.product_quantity - od.product_quantity_refunded) FROM {table_prefix}orders o INNER JOIN {table_prefix}order_detail od ON od.id_order = o.id_order INNER JOIN {table_prefix}order_state os ON os.id_order_state = o.current_state WHERE o.id_shop = :shop_id AND os.shipped != 1 AND ( o.valid = 1 OR ( os.id_order_state != :error_state AND os.id_order_state != :cancellation_state ) ) AND sa.id_product = od.product_id AND sa.id_product_attribute = od.product_attribute_id GROUP BY od.product_id, od.product_attribute_id ) WHERE sa.id_shop = :shop_id '; $strParams = [ '{table_prefix}' => _DB_PREFIX_, ':shop_id' => (int) $shopId, ':error_state' => (int) $errorState, ':cancellation_state' => (int) $cancellationState, ]; if ($idProduct) { $updateReservedQuantityQuery .= ' AND sa.id_product = :product_id'; $strParams[':product_id'] = (int) $idProduct; } if ($idOrder) { $updateReservedQuantityQuery .= ' AND sa.id_product IN (SELECT product_id FROM {table_prefix}order_detail WHERE id_order = :order_id)'; $strParams[':order_id'] = (int) $idOrder; } $updateReservedQuantityQuery = strtr($updateReservedQuantityQuery, $strParams); return Db::getInstance()->execute($updateReservedQuantityQuery); } /** * Instance a new StockAvailable. * * @param bool|int|null $stockAvailableId * * @return StockAvailable */ public function newStockAvailable($stockAvailableId = null) { if (is_int($stockAvailableId)) { return new StockAvailable($stockAvailableId); } return new StockAvailable(); } /** * Use legacy getStockAvailableIdByProductId. * * @param int $productId * @param int|null $productAttributeId * @param int|null $shopId * * @return bool|int */ public function getStockAvailableIdByProductId($productId, $productAttributeId = null, $shopId = null) { return StockAvailable::getStockAvailableIdByProductId($productId, $productAttributeId, $shopId); } /** * For a given product, get its "out of stock" flag. * * @param int $productId * @param int $shopId Optional : gets context if null @see Context::getContext() * * @return bool : depends on stock @see $depends_on_stock */ public function outOfStock($productId, $shopId = null) { return StockAvailable::outOfStock($productId, $shopId); } }