StockPresenter
extends BasePresenter
in package
Nightly stock recount: repairs reserved quantities, batches and card prices.
A self-healing recount of the invariants levels, batches, journal and pairing, plus card prices. Drift is
repaired and logged (channel 'store'); the batch total and old active reservations are only alarms (they
cannot be repaired automatically and are not bugs by themselves). The logic lives in the Api service
StockRecalculator, reached via StockLevelManager::recountLevels() /
StockItemManager::recountItemPrices().
URL: /cron/store/stock/recount?token=xxx
Table of Contents
Properties
- $cronLockManager : CronLockManager
- $operationRunner : OperationRunner
- Boundary of one cron action (see {@see self::tryCall()}).
- $settingContext : SettingContext
- $settingManager : SettingManager
- $debugMode : bool
- $productionMode : bool
- $stockItemManager : StockItemManager
- $stockLevelManager : StockLevelManager
Methods
- __construct() : mixed
- actionLowStockAlert() : void
- Alerts about cards below the minimum stock: one summary e-mail to `stock.lowStock.email`.
- actionRecount() : void
- Frequency: daily, at night.
- releaseLock() : void
- Releases the lock at most once; called by both `shutdown()` and the PHP shutdown function.
- sendResponse() : void
- setConfigParameters() : void
- shutdown() : void
- startup() : void
- isSameSiteRequest() : bool
- Tells whether the request comes from the own site (Nette SameSite cookie); protects GET actions with a side effect.
- sendError() : never
- sendSkipped() : never
- Reports that the job did only part of the work and the next call finishes the rest (e.g. a reindex done in chunks).
- sendSuccess() : never
- tryCall() : bool
- Runs the `action<Action>()` method as one operation (transitional).
Properties
$cronLockManager
public
CronLockManager
$cronLockManager
Attributes
- #[Inject]
$operationRunner
Boundary of one cron action (see {@see self::tryCall()}).
public
OperationRunner
$operationRunner
Attributes
- #[Inject]
$settingContext
public
SettingContext
$settingContext
Attributes
- #[Inject]
$settingManager
public
SettingManager
$settingManager
Attributes
- #[Inject]
$debugMode
protected
bool
$debugMode
= false
$productionMode
protected
bool
$productionMode
= false
$stockItemManager read-only
private
StockItemManager
$stockItemManager
$stockLevelManager read-only
private
StockLevelManager
$stockLevelManager
Methods
__construct()
public
__construct(StockLevelManager $stockLevelManager, StockItemManager $stockItemManager) : mixed
Parameters
- $stockLevelManager : StockLevelManager
- $stockItemManager : StockItemManager
actionLowStockAlert()
Alerts about cards below the minimum stock: one summary e-mail to `stock.lowStock.email`.
public
actionLowStockAlert() : void
A card is reported only once until it returns to the minimum (StockItemManager::watchLowStock()).
An empty address means nothing is sent (the result carries skipped).
URL: /cron/store/stock/low-stock-alert?token=xxx
Frequency: daily, in the morning.
Attributes
- #[CronJob]
- $frequency: 'daily:07:10'
- $outbound: true
actionRecount()
Frequency: daily, at night.
public
actionRecount() : void
Attributes
- #[CronJob]
- $frequency: 'daily:03:45'
- $outbound: false
releaseLock()
Releases the lock at most once; called by both `shutdown()` and the PHP shutdown function.
public
releaseLock() : void
sendResponse()
public
sendResponse(Response $response) : void
Parameters
- $response : Response
setConfigParameters()
public
setConfigParameters([bool $debugMode = false ][, bool $productionMode = false ]) : void
Parameters
- $debugMode : bool = false
- $productionMode : bool = false
shutdown()
public
shutdown(Response $response) : void
Parameters
- $response : Response
startup()
public
startup() : void
isSameSiteRequest()
Tells whether the request comes from the own site (Nette SameSite cookie); protects GET actions with a side effect.
protected
isSameSiteRequest() : bool
getHttpRequest() returns the IRequest interface, while isSameSite() exists only on
Nette\Http\Request.
Return values
boolsendError()
protected
sendError(string $message[, int $code = 500 ]) : never
Parameters
- $message : string
- $code : int = 500
Return values
neversendSkipped()
Reports that the job did only part of the work and the next call finishes the rest (e.g. a reindex done in chunks).
protected
sendSkipped(string $reason[, array<string, mixed> $data = [] ]) : never
The scheduler does not record skipped as a run, so the job stays due and is called
again on the next tick.
Parameters
- $reason : string
- $data : array<string, mixed> = []
Return values
neversendSuccess()
protected
sendSuccess([array<string|int, mixed> $data = [] ]) : never
Parameters
- $data : array<string|int, mixed> = []
Return values
nevertryCall()
Runs the `action<Action>()` method as one operation (transitional).
protected
tryCall(string $method, array<string, mixed> $params) : bool
Cron has no internalAction*(): its actions call the Api managers directly, so without this in
scoped mode nothing would ever empty the unit of work of a cron run. The boundary is the action
only; startup() (settings, token, lock) stays outside like the startup of an Api request. A cron
action ends with AbortException from send*(), which is a regular end: the outcome comes from the
response (ok succeeded, skipped unknown — possibly a part of a batch was done, error failed).
Render and signal methods are not wrapped (cron presenters have none).
Parameters
- $method : string
- $params : array<string, mixed>