public function sync() { if ($this->_debug) { echo "Sync of reservation #{$this->_reservation->getId()}" . PHP_EOL; } if (!$this->isValid()) { if ($this->_debug) { echo 'Something wrong with calendar. Stop' . PHP_EOL; } return false; } if ($this->_reservation->isAccepted()) { if ($this->_reservation->wasSynced()) { $this->_sync(); } else { $this->_addRemote(); } } else { if ($this->_reservation->isDeclined()) { if ($this->_reservation->wasSynced()) { $this->deleteRemote(); // delete remove first because delete remove method removes Google Event Id !! $this->_deleteLocal(); } } } return true; }
protected function __setData(stdClass $data) { try { $finalVisitTime = DateTime::create($data->final_visit_time); $visitEndTime = DateTime::create($data->visit_end_time); } catch (Exception $e) { throw new Exception('Время имеет неверный формат'); } if ($finalVisitTime->getTimestamp() > $visitEndTime->getTimestamp()) { throw new Exception('Время приема не может быть позже времени окончания приема'); } $timeChanged = false || $this->_entity->getFinalVisitTime() != $finalVisitTime->getTimestamp(); $timeChanged = $timeChanged || $this->_entity->getVisitEndTime() != $visitEndTime->getTimestamp(); if ($timeChanged) { $schedule = $this->_entity->getDoctor()->getSchedule($finalVisitTime); if (!$schedule->isAvailable($finalVisitTime, $visitEndTime, [(int) $this->_entity->getId()])) { throw new Exception('В это время доктор не принимает или занят'); } } $this->_entity->setFinalVisitTime($finalVisitTime->getTimestamp()); $this->_entity->setVisitEndTime($visitEndTime->getTimestamp()); $serviceCollection = $this->_entity->getServiceCollection(); $serviceCollection->resetItems(); foreach ($data->id_services as $idService) { $service = Application_Model_Medical_Service::getById($idService); if ($service instanceof Application_Model_Medical_Service) { $serviceCollection->add($service); } } $this->_entity->setStatus($data->status); }