arch-8.x-1.x-dev/modules/stock/src/StockKeeperInterface.php
modules/stock/src/StockKeeperInterface.php
<?php namespace Drupal\arch_stock; use Drupal\arch_order\Entity\OrderInterface; use Drupal\arch_product\Entity\ProductInterface; use Drupal\Core\DependencyInjection\ContainerInjectionInterface; use Drupal\Core\Session\AccountInterface; /** * Stock keeper interface. * * @package Drupal\arch_stock */ interface StockKeeperInterface extends ContainerInjectionInterface { /** * Check if stock management is enabled for type of product. * * @param \Drupal\arch_product\Entity\ProductInterface $product * Product entity. * * @return bool * Returns TRUE if stock management is enabled for type of product. */ public function isProductManagingStock(ProductInterface $product); /** * Reduce stock of product with given amount. * * @param \Drupal\arch_product\Entity\ProductInterface $product * Product entity. * @param float $amount * Sold amount. * @param \Drupal\arch_order\Entity\OrderInterface $order * Order entity. * @param \Drupal\Core\Session\AccountInterface $account * Customer. * * @return bool * Result. */ public function reduceStock( ProductInterface $product, $amount, OrderInterface $order, AccountInterface $account, ); /** * Check if given account can access any warehouse which allow overbooking. * * @param \Drupal\arch_product\Entity\ProductInterface $product * Product instance. * @param \Drupal\Core\Session\AccountInterface $account * Account. * * @return bool * Return TRUE if given user can access warehouse which allow overbooking. */ public function isNegativeStockAllowed( ProductInterface $product, AccountInterface $account, ); /** * Check product has enough stock to sell for given customer. * * @param \Drupal\arch_product\Entity\ProductInterface $product * Product. * @param \Drupal\Core\Session\AccountInterface $account * Customer. * * @return float * Total stock. */ public function getTotalProductStock( ProductInterface $product, AccountInterface $account, ); /** * Check product has enough stock to sell for given customer. * * @param \Drupal\arch_product\Entity\ProductInterface $product * Product. * @param \Drupal\Core\Session\AccountInterface $account * Customer. * @param int|float $amount * Required amount. * * @return bool * Returns TRUE if product has enough stock. */ public function hasProductEnoughStock( ProductInterface $product, AccountInterface $account, $amount = 1, ); /** * Get list of IDs of available warehouses. * * @param \Drupal\Core\Session\AccountInterface $account * Customer. * * @return string[] * List of selected warehouse. */ public function selectWarehouses(AccountInterface $account); }