Example #1
0
 /**
  * @param $itemId
  * @param null $dateFrom
  * @param null $dateTo
  * @param string $type
  * @return CivilResponder
  */
 public function syncAll($itemId, $dateFrom = null, $dateTo = null, $type = self::SYNC_WITH_PRODUCT)
 {
     $response = new \stdClass();
     try {
         /**
          * @var \DDD\Dao\Apartel\Inventory $apartelInventoryDao
          */
         if ($this->getProductType() == self::PRODUCT_APARTEL) {
             $apartelInventoryDao = $this->getServiceLocator()->get('dao_apartel_inventory');
             $inventoryDomain = $apartelInventoryDao->getRateAvailabilityByApartelId($itemId, $dateFrom, $dateTo, $type);
         } else {
             $inventoryDao = new Inventory($this->getServiceLocator(), 'DDD\\Domain\\Apartment\\Inventory\\RateAvailabilityComplete');
             $inventoryDomain = $inventoryDao->getRateAvailabilityByApartmentId($itemId, $dateFrom, $dateTo, $type);
         }
         if ($inventoryDomain) {
             $reqRates = $chunkedReqRates = $resultStatuses = [];
             $apartmentId = 0;
             foreach ($inventoryDomain as $rate) {
                 if (!$apartmentId) {
                     $apartmentId = $rate->getProductId();
                 }
                 $reqRates[] = ['rate_id' => $rate->getCubilisRateId(), 'room_id' => $rate->getCubilisRoomId(), 'avail' => $rate->getAvailability(), 'capacity' => $rate->getCapacity(), 'price' => $rate->getPrice(), 'min_stay' => $rate->getMinStay(), 'max_stay' => $rate->getMaxStay(), 'date' => $rate->getDate()];
             }
             if (count($reqRates) > 50) {
                 $chunkedReqRates = array_chunk($reqRates, 50);
             } else {
                 $chunkedReqRates[] = $reqRates;
             }
             foreach ($chunkedReqRates as $ratesCollection) {
                 $result = $this->syncCollection($apartmentId, $ratesCollection);
                 if ($result->getStatus() == CivilResponder::STATUS_ERROR) {
                     break;
                 }
                 $resultStatuses[] = $result;
             }
             if (count($chunkedReqRates) == count($resultStatuses)) {
                 $response->code = 0;
                 $response->status = CivilResponder::STATUS_SUCCESS;
                 $response->message = 'Successfully synced.';
             } else {
                 $response->code = 1;
                 $response->status = CivilResponder::STATUS_ERROR;
                 $response->message = count($resultStatuses) . ' out of ' . count($chunkedReqRates) . ' fail. Last error message: ' . $result->getMessage() . '.';
                 $response->data = $resultStatuses;
             }
             $response = ['Cubilis' => $response];
         } else {
             throw new \Exception('Nothing found to sync.');
         }
     } catch (\Exception $ex) {
         $this->gr2logException($ex, 'Channel Manager: Synchronization All Failed', ['item_id' => $itemId, 'date_from' => $dateFrom, 'date_to' => $dateTo, 'type' => $type]);
         $response->status = CivilResponder::STATUS_ERROR;
         $response->code = $ex->getCode();
         $response->message = $ex->getMessage();
         $response = ['ChannelManager' => $response];
     }
     return $this->civilResponseForCivilPeople($response);
 }