/**
  * 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();
     }
 }