/** * Checks whether there is a status change needed and executes the change if * needed. * * @param int $stockQuantityBefore Stock quantity before change. * @param bool $doWrite Set to false to prevent a write. * * @return void * * @author Sebastian Diel <*****@*****.**> * @since 11.06.2014 */ protected function checkForAvailabilityStatusChange($stockQuantityBefore, $doWrite = true) { if ($this->StockQuantity <= 0 && $stockQuantityBefore > 0) { // check for automatic negative availability status and set it. $newStatus = SilvercartAvailabilityStatus::get_negative_status(); if ($newStatus instanceof SilvercartAvailabilityStatus) { $this->SilvercartAvailabilityStatusID = $newStatus->ID; if ($doWrite) { $this->write(); } } } elseif ($this->StockQuantity > 0 && $stockQuantityBefore <= 0) { // check for automatic positive availability status and set it. $newStatus = SilvercartAvailabilityStatus::get_positive_status(); if ($newStatus instanceof SilvercartAvailabilityStatus) { $this->SilvercartAvailabilityStatusID = $newStatus->ID; if ($doWrite) { $this->write(); } } } }
/** * Sets for other status SetForNegativeStock and SetForPositiveStock to * false when set to $this. * * @return void * * @author Sebastian Diel <*****@*****.**> * @since 03.07.2014 */ protected function onBeforeWrite() { parent::onBeforeWrite(); if ($this->SetForNegativeStock) { $statusList = SilvercartAvailabilityStatus::get()->filter(array('SetForNegativeStock' => 1))->exclude(array('SilvercartAvailabilityStatus.ID' => $this->ID)); if ($statusList) { foreach ($statusList as $status) { $status->SetForNegativeStock = false; $status->write(); } } } if ($this->SetForPositiveStock) { $statusList = SilvercartAvailabilityStatus::get()->filter(array('SetForPositiveStock' => 1))->exclude(array('SilvercartAvailabilityStatus.ID' => $this->ID)); if ($statusList) { foreach ($statusList as $status) { $status->SetForPositiveStock = false; $status->write(); } } } $defaultStatus = self::getDefault(); if (!$defaultStatus) { $defaultStatus = $this; $this->IsDefault = true; } elseif ($this->IsDefault && $defaultStatus->ID != $this->ID) { $defaultStatus->IsDefault = false; $defaultStatus->write(); } }