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