private function saveChildrenPassports($i, $roomPassport, $hotelBookerId) { foreach ($roomPassport->childrenPassports as $childInfo) { $hotelPassport = new HotelBookingPassport(); $hotelPassport->scenario = 'child'; $hotelPassport->attributes = $childInfo->attributes; $hotelPassport->hotelBookingId = $hotelBookerId; $hotelPassport->roomKey = $i; if (!$hotelPassport->save()) { $errMsg = 'Incorrect child passport data.' . PHP_EOL . CVarDumper::dumpAsString($hotelPassport->errors); Yii::trace($errMsg, 'HotelBooker.EnterCredentials.childPassport'); throw new CException($errMsg); } } }
public function execute() { $valid = false; $rooms = Yii::app()->hotelBooker->getCurrent()->hotel->rooms; $form = new HotelPassportForm(); foreach ($rooms as $room) { $form->addRoom($room->adults, $room->childCount); } if (isset($_POST['BookingForm'])) { $valid = true; $form->bookingForm->attributes = $_POST['BookingForm']; $valid = $valid & $form->bookingForm->validate(); } if (isset($_POST['HotelAdultPassportForm'])) { foreach ($_POST['HotelAdultPassportForm'] as $i => $adults) { foreach ($adults as $j => $adultInfo) { $form->roomsPassports[$i]->adultsPassports[$j]->attributes = $adultInfo; $valid = $valid & $form->roomsPassports[$i]->adultsPassports[$j]->validate(); } } } if (isset($_POST['HotelChildPassportForm'])) { foreach ($_POST['HotelChildPassportForm'] as $i => $children) { foreach ($children as $j => $childrenInfo) { $form->roomsPassports[$i]->childrenPassports[$j]->attributes = $childrenInfo; $valid = $valid & $form->roomsPassports[$i]->childrenPassports[$j]->validate(); } } } if ($valid) { /** @var HotelBookerComponent $hotelBookerComponent */ $hotelBookerComponent = Yii::app()->hotelBooker; $hotelBookerComponent->book(); $hotelBookerId = $hotelBookerComponent->getHotelBookerId(); //saving booking data /** @var BookingForm */ $bookingForm = $form->bookingForm; $bookingModel = new OrderBooking(); $bookingModel->email = $bookingForm->contactEmail; $bookingModel->phone = $bookingForm->contactPhone; $bookingModel->timestamp = new CDbExpression('NOW()'); $validSaving = $bookingModel->save(); $errors = array(); if ($validSaving) { $hotelBookerComponent->getCurrent()->orderBookingId = $bookingModel->id; $hotelBookerComponent->getCurrent()->save(); } else { $errors = CMap::mergeArray($errors, $bookingModel->errors); Yii::trace(CVarDumper::dumpAsString($bookingModel->errors), 'HotelBooker.EnterCredentials.bookingModel'); } foreach ($form->roomsPassports as $i => $roomPassport) { foreach ($roomPassport->adultsPassports as $adultInfo) { $hotelPassport = new HotelBookingPassport(); $hotelPassport->scenario = 'adult'; $hotelPassport->attributes = $adultInfo->attributes; $hotelPassport->hotelBookingId = $hotelBookerId; $hotelPassport->roomKey = $i; $validSaving = $validSaving and $hotelPassport->save(); $errors = CMap::mergeArray($errors, $hotelPassport->errors); Yii::trace(CVarDumper::dumpAsString($hotelPassport->errors), 'HotelBooker.EnterCredentials.adultPassport'); } foreach ($roomPassport->childrenPassports as $childInfo) { $hotelPassport = new HotelBookingPassport(); $hotelPassport->scenario = 'child'; $hotelPassport->attributes = $childInfo->attributes; $hotelPassport->hotelBookingId = $hotelBookerId; $hotelPassport->roomKey = $i; $validSaving = $validSaving and $hotelPassport->save(); $errors = CMap::mergeArray($errors, $hotelPassport->errors); Yii::trace(CVarDumper::dumpAsString($hotelPassport->errors), 'HotelBooker.EnterCredentials.childPassport'); } } if ($validSaving) { $hotelBookerComponent->status('analyzing'); } else { throw new CHttpException(500, 'Couldn\'t save passport records to db'); } } $this->getController()->render('hotelBooker.views.enterCredentials', array('model' => $form)); }