Joywork/ajax/storeReservation.php
2026-05-22 21:21:54 +03:00

300 lines
15 KiB
PHP

<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/config.php");
ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE);
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/IReservationState.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/ImportRecord.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/target/DocTarget.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Apartment.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Block.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/ImporterService.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/helper/Date.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/Clock.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Clock/RealtimeClock.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/Reservation.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/ReservationImage.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/ApartmentHistory.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/ReservationService.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/BaseState.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/reservation/state/StateNew.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/RoomType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/FlatType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/DecorationType.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Building.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Builder.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/BlockSubway.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Region.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Mortgage.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/Bank.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/BankProgram.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/obj/BankProgramRate.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/provider/DocProvider.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/ar/Document.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/provider/DbDocProvider.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/Dir.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/RootDir.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/File.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/entity/DocCollection.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/DocumentManager.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/Prefetcher.php';
include $_SERVER['DOCUMENT_ROOT'] . '/import/document/presentation/DocumentPrefetcher.php';
$err = "";
if ($_SESSION['id'] && isset($_POST)) {
$post = clearInputData($_POST);
$user = new User;
$user->get($_SESSION['id']);
$service = new ReservationService();
$images = [];
try {
if (isset($_FILES['passport_main']['name']) && $_FILES['passport_main']['name']) {
if ($_FILES['passport_main']['error'] == UPLOAD_ERR_OK) {
list($a, $ext) = explode("/", $_FILES['passport_main']['type']);
if ($ext == "pjpeg") {
$ext = "jpeg";
}
$ext = mb_strtolower($ext);
if ($ext == "jpeg" or $ext == "jpg" or $ext == "png") {
$name = md5($_FILES['passport_main']['tmp_name'] . time()) . "." . $ext;
$photo = $_SERVER['DOCUMENT_ROOT'] . "/private/" . $name;
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/private")) {
mkdir($_SERVER['DOCUMENT_ROOT'] . "/private");
}
if (move_uploaded_file($_FILES['passport_main']['tmp_name'], $photo)) {
$images['passport_main'] = "/private/" . $name;
}
} else {
if (strlen($err) > 0) {
$err = $err . "<br/>";
}
$err .= "Неверный тип файла. Допустимые типы - jpg или png.";
}
} else {
if ($_FILES['passport_main']['error'] == UPLOAD_ERR_FORM_SIZE) {
if (strlen($err) > 0) {
$err = $err . "<br/>";
}
$err .= "Превышен размер файла. Допустимый размер 8 Mb.";
} else {
if (strlen($err) > 0) {
$err = $err . "<br/>";
}
$err .= "Ошибка при загрузке: " . $_FILES['passport_main']['error'];
}
}
}
if (isset($_FILES['passport_prop']['name']) && $_FILES['passport_prop']['name']) {
if ($_FILES['passport_prop']['error'] == UPLOAD_ERR_OK) {
list($a, $ext) = explode("/", $_FILES['passport_prop']['type']);
if ($ext == "pjpeg") {
$ext = "jpeg";
}
$ext = mb_strtolower($ext);
if ($ext == "jpeg" or $ext == "jpg" or $ext == "png") {
$name = md5($_FILES['passport_prop']['tmp_name'] . time()) . "." . $ext;
$photo = $_SERVER['DOCUMENT_ROOT'] . "/private/" . $name;
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/private")) {
mkdir($_SERVER['DOCUMENT_ROOT'] . "/private");
}
if (move_uploaded_file($_FILES['passport_prop']['tmp_name'], $photo)) {
$images['passport_prop'] = "/private/" . $name;
}
} else {
if (strlen($err) > 0) {
$err = $err . "<br/>";
}
$err .= "Неверный тип файла. Допустимые типы - jpg или png.";
}
} else {
if ($_FILES['passport_prop']['error'] == UPLOAD_ERR_FORM_SIZE) {
if (strlen($err) > 0) {
$err = $err . "<br/>";
}
$err .= "Превышен размер файла. Допустимый размер 8 Mb.";
} else {
if (strlen($err) > 0) {
$err = $err . "<br/>";
}
$err .= "Ошибка при загрузке: " . $_FILES['passport_prop']['error'];
}
}
}
if (strlen($err) == 0) {
$apartment = Apartment::findOne($post['object_id']);
$roomType = RoomType::findOne($apartment->room_type_id);
$decorationType = DecorationType::findOne($apartment->decoration_id);
$flatType = FlatType::findOne($apartment->flat_type_id);
$block = Block::findOne($apartment->block_id);
$building = Building::findOne($apartment->building_id);
$builder = Builder::findOne($block->builder_id);
$region = Region::findOne($block->region_id);
$subways = BlockSubway::createStringsForBlock($block->id);
$imagesFromBlock = Block::getAllImagesUrl($block->id);
$mortgageList = Mortgage::findByBuildingId($apartment->building_id);
$programIds = array();
foreach ($mortgageList as $mortgage) {
$programIds[] = $mortgage->program_id;
}
$bankPrograms = array();
if ($programIds && count($programIds) > 0) {
$bankPrograms = BankProgram::find($programIds);
foreach ($bankPrograms as $bankProgram) {
$bankProgram->bank = Bank::findOne($bankProgram->bank_id);
$bankProgram->bankProgramRates = BankProgramRate::findByProgramId($bankProgram->id);
}
}
$manager = new DocumentManager($block);
$docs = (new DocumentPrefetcher($manager))->prefetch();
$object_desc = "Тип: " . $roomType->name . " Площадь: " . $apartment->space_total . " Этаж: " . $apartment->flat_floor .
" Цена: " . number_format($apartment->discount_price, 0, ',', ' ') . " Цена базовая: " . number_format($apartment->base_price, 0, ',', ' ') .
" ЖК: " . $block->name . " Очередь: " . $building->line . " Корпус: " . $building->corp .
" Сдача: " . Date::getFormatedEndingPeriod($building->deadline) . " Этажей: " . $building->floors .
" Адрес: " . $block->address . " Застройщик: " . $builder->name;
$reservation = new Reservation();
$reservation->bank = $post["bank"];
$reservation->secondname = $post["secondname"];
$reservation->firstname = $post["firstname"];
$reservation->surname = $post["surname"];
$reservation->birth_date = Date::dateTimeToMysql(strtotime($post["birth_date"]));
$reservation->phone = $post["phone"];
$reservation->payment = $post["payment"];
$reservation->passport_series = $post["passport_series"];
$reservation->passport_num = $post["passport_num"];
$reservation->passport_date = Date::dateTimeToMysql(strtotime($post["passport_date"]));
$reservation->passport_place = $post["passport_place"];
$reservation->passport_address = $post["passport_address"];
$reservation->info = $post["info"];
$reservation->user_id = $_SESSION['id'];
$reservation->object_id = $apartment->id;
$reservation->object_desc = $object_desc;
$reservation->apartment_number = $apartment->number;
if ($apartment) {
$block = Block::findOne($apartment->block_id);
$reservation->full_price = $reservation->full_price ?: $apartment->discount_price;
$reservation->base_price = $reservation->base_price ?: $apartment->base_price;
if ($flatType->name == 'Переуступка') {
if ($builder && (float)$builder->discount_fee) {
$reservation->fee = $reservation->fee ?: $builder->discount_fee;
} else {
$reservation->fee = (float)(new ImporterService())->getDefaultFee();
}
} else {
$reservation->fee = $reservation->fee ?: $block->getCalculatedFee();
}
}
$service->reservate($reservation, $images);
// сохраняем данные
$apartmentSerialized = serialize($apartment);
$roomTypeSerialized = serialize($roomType);
$blockSerialized = serialize($block);
$buildingSerialized = serialize($building);
$builderSerialized = serialize($builder);
$decorationTypeSerialized = serialize($decorationType);
$regionSerialized = serialize($region);
$subwaysSerialized = serialize($subways);
$imagesSerialized = serialize($imagesFromBlock);
$banksSerialized = serialize($bankPrograms);
$docsSerialized = serialize($docs);
$flatTypeSerialized = serialize($flatType);
$apartmentHistory = new ApartmentHistory();
$apartmentHistory->saveDataForReservation($reservation->id, $apartmentSerialized, $blockSerialized,
$buildingSerialized, $builderSerialized, $roomTypeSerialized, $decorationTypeSerialized,
$regionSerialized, $subwaysSerialized, $imagesSerialized, $banksSerialized, $docsSerialized, $flatTypeSerialized);
$f1 = file("https://joywork.ru/template_mail/reservation_admin.html");
$text = implode("", $f1);
$text = str_replace("<%apartment_number%>", $apartment->number, $text);
$text = str_replace("<%user_name%>", $user->fio, $text);
$text = str_replace("<%apartment_description%>", $object_desc, $text);
mailClientFromJoywork("JoyWork2016@mail.ru", "Пользователь забронировал квартиру на JoyWork", $text);
mailClientFromJoywork("joywork@list.ru", "Пользователь забронировал квартиру на JoyWork", $text);
$f1 = file("https://joywork.ru/template_mail/reservation_client.html");
$text = implode("", $f1);
$text = str_replace("<%apartment_number%>", $apartment->number, $text);
$text = str_replace("<%user_name%>", $user->fio, $text);
$text = str_replace("<%reservation_status%>", $reservation->getStateName(), $text);
$text = str_replace("<%room_type%>", $roomType->name, $text);
$text = str_replace("<%space_total%>", $apartment->space_total, $text);
$text = str_replace("<%flat_floor%>", $apartment->flat_floor, $text);
$text = str_replace("<%discount_price%>", number_format($reservation->full_price, 0, ',', ' '), $text);
$text = str_replace("<%base_price%>", number_format($reservation->base_price, 0, ',', ' '), $text);
$text = str_replace("<%block_name%>", $block->name, $text);
$text = str_replace("<%building_line%>", $building->line, $text);
$text = str_replace("<%building_corp%>", $building->corp, $text);
$text = str_replace("<%building_deadline%>", Date::getFormatedEndingPeriod($building->deadline), $text);
$text = str_replace("<%building_floors%>", $building->floors, $text);
$text = str_replace("<%block_address%>", $block->address, $text);
$text = str_replace("<%builder_name%>", $builder->name, $text);
$text = str_replace("<%reservation_client_name%>", $reservation->getFullname(), $text);
$text = str_replace("<%reservation_client_phone%>", $reservation->phone, $text);
$style = "";
switch( $reservation->status ) {
case 1:
$style = "background: #d0d0d0; color: #757575;";
break;
case 2:
$style = "background: #ffc107; color: #ffffff;";
break;
case 3:
$style = "background: #d0d0d0; color: #757575;";
break;
case 4:
$style = "background: #4caf50;color: #ffffff;";
break;
case 5:
$style = "background: #d0d0d0; color: #757575;";
break;
}
$text = str_replace("<%reservation_status_style%>", $style, $text);
mailClientFromJoywork($user->email, "Вы забронировали квартиру", $text);
}
} catch (\Exception $e) {
var_dump($e);
if (strlen($err) > 0) {
$err = $err . "<br/>";
}
$err .= "Произошла непредвиденная ошибка: " . $e->getMessage();
}
}
?>
<script type="text/javascript">
<?php if ($err) {?>
parent.document.getElementById('errorBlock').innerHTML = '<?php echo $err; ?>';
parent.document.getElementById('flat_booking_modal_title').scrollIntoView();
<?php } else { ?>
parent.successReservation();
<?php }?>
parent.document.getElementById('reservationSaveLoader').style.display = "none";
parent.document.getElementById('reservationSaveButton').disabled = false;
</script>