Ejemplo n.º 1
0
 /**
  * @param $apartmentId
  * @param $amount
  * @param $dateFrom
  * @param $dateTo
  * @param $weekDays
  * @param $priceType
  * @param int $setLockPrice
  * @param $forceLockPrice
  * @throws \Exception
  */
 public function updatePriceByApartmentId($apartmentId, $amount, $dateFrom, $dateTo, $weekDays, $priceType, $setLockPrice = 0, $forceLockPrice)
 {
     /**
      * @var \DDD\Dao\Apartment\Rate $rateDao
      * @var \DDD\Dao\Apartment\Inventory $inventoryDao
      */
     $rateDao = $this->getServiceLocator()->get('dao_apartment_rate');
     $inventoryDao = $this->getServiceLocator()->get('dao_apartment_inventory');
     // get parent rate
     $parentRateId = $rateDao->getApartmentParentRate($apartmentId);
     // update parent rate price by range
     $inventoryDao->updateParentRatePriceByRang($amount, $priceType, $parentRateId['id'], $dateFrom, $dateTo, $weekDays, $forceLockPrice);
     // get rates without parent rate
     $rates = $rateDao->getApartmentRatesWithoutParent($apartmentId);
     $rates = iterator_to_array($rates);
     // get parent inventory date by range
     $parentInventoryData = $inventoryDao->getRateInventoryData($apartmentId, $dateFrom, $dateTo, $weekDays, $forceLockPrice);
     // for check rate date already updated or not
     $checkRateIdDateCombination = [];
     foreach ($parentInventoryData as $parentRate) {
         // get date name
         $percentField = Helper::getDateWeekType($parentRate['date']);
         $parentRatePrice = $parentRate['price'];
         // update all rate without parent
         foreach ($rates as $rate) {
             if (isset($checkRateIdDateCombination[$parentRate['date']]) && in_array($rate['id'], $checkRateIdDateCombination[$parentRate['date']])) {
                 continue;
             }
             $checkRateIdDateCombination[$parentRate['date']][] = $rate['id'];
             $childPrice = round($parentRatePrice + $parentRatePrice * $rate[$percentField] / 100, 2);
             $inventoryDao->update(['price' => $childPrice], ['rate_id' => $rate['id'], 'date' => $parentRate['date']]);
         }
     }
     // set lock price bit
     $inventoryDao->updateLockPriceBit($apartmentId, $dateFrom, $dateTo, $weekDays, $setLockPrice, $forceLockPrice);
 }