144 lines
7.5 KiB
HTML
144 lines
7.5 KiB
HTML
{% extends "admin/change_list.html" %}
|
||
{% block content %}
|
||
<!-- Кнопка импорта -->
|
||
<div class="form-group mb-3">
|
||
<button type="button" class="btn btn-primary" id="importHotelsButton">
|
||
Импортировать выбранные отели
|
||
</button>
|
||
</div>
|
||
|
||
<!-- Уведомление -->
|
||
<div id="notification" class="alert alert-info d-none" role="alert">
|
||
Здесь появятся уведомления.
|
||
</div>
|
||
|
||
<!-- Действия админки -->
|
||
{{ block.super }}
|
||
|
||
<!-- Список отелей для выбора в виде таблицы -->
|
||
<form id="importHotelsForm" method="POST">
|
||
{% csrf_token %}
|
||
|
||
<div class="table-responsive">
|
||
<table class="table table-bordered">
|
||
<thead class="thead-dark">
|
||
<tr>
|
||
<!-- Чекбокс для выбора всех отелей -->
|
||
<th><input type="checkbox" id="select-all" /></th>
|
||
<th>Внешний ID</th>
|
||
<th>Отображаемое имя</th>
|
||
<th>Имя отеля</th>
|
||
<th>Дата создания</th>
|
||
<th>Дата обновления</th>
|
||
<th>Импортирован в основную базу</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{% for hotel in imported_hotels %}
|
||
<tr>
|
||
<td>
|
||
<input type="checkbox" name="hotels" value="{{ hotel.id }}" id="hotel{{ hotel.id }}" class="select-row" />
|
||
</td>
|
||
<td>{{ hotel.external_id }}</td>
|
||
<td>{{ hotel.display_name }}</td>
|
||
<td>{{ hotel.name }}</td>
|
||
<td>{{ hotel.creation_date }}</td>
|
||
<td>{{ hotel.updated_at }}</td>
|
||
<td>{{ hotel.imported_to_main_db }}</td>
|
||
</tr>
|
||
{% endfor %}
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<!-- Здесь вы можете добавить скрытые поля или другие элементы формы, если они нужны -->
|
||
</form>
|
||
|
||
{% endblock %}
|
||
|
||
{% block extrahead %}
|
||
{{ block.super }}
|
||
<!-- Подключаем Bootstrap 4 -->
|
||
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
|
||
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.bundle.min.js"></script>
|
||
<script>
|
||
document.addEventListener('DOMContentLoaded', function() {
|
||
// Обработчик для выбора всех чекбоксов
|
||
const selectAllCheckbox = document.getElementById('select-all');
|
||
selectAllCheckbox.addEventListener('change', function() {
|
||
const checkboxes = document.querySelectorAll(".select-row");
|
||
checkboxes.forEach(function(checkbox) {
|
||
checkbox.checked = selectAllCheckbox.checked;
|
||
});
|
||
});
|
||
|
||
// Кнопка импорта
|
||
const importButton = document.getElementById('importHotelsButton');
|
||
const notificationElement = document.getElementById('notification');
|
||
|
||
importButton.addEventListener('click', function(e) {
|
||
e.preventDefault(); // предотвращаем стандартное поведение кнопки
|
||
|
||
// Даем время DOM полностью загрузиться
|
||
setTimeout(function() {
|
||
const checkboxes = document.querySelectorAll('input[name="hotels"]:checked');
|
||
const selectedHotels = [];
|
||
|
||
console.log("Чекбоксы:", checkboxes); // Отладка: выводим все выбранные чекбоксы
|
||
|
||
checkboxes.forEach(function(checkbox) {
|
||
selectedHotels.push(checkbox.value);
|
||
console.log("Выбранный отель:", checkbox.value); // Отладка: выводим ID выбранного отеля
|
||
});
|
||
|
||
if (selectedHotels.length > 0) {
|
||
const csrfToken = document.querySelector('[name=csrfmiddlewaretoken]').value;
|
||
console.log("CSRF токен:", csrfToken);
|
||
|
||
importButton.disabled = true;
|
||
importButton.textContent = 'Импортируем...';
|
||
|
||
// Отправка выбранных отелей на сервер через fetch
|
||
fetch('/import_hotels/', {
|
||
method: 'POST',
|
||
headers: {
|
||
'Content-Type': 'application/json',
|
||
'X-CSRFToken': csrfToken,
|
||
},
|
||
body: JSON.stringify({ hotels: selectedHotels })
|
||
})
|
||
.then(response => response.json())
|
||
.then(data => {
|
||
console.log("Ответ сервера:", data);
|
||
notificationElement.classList.remove('d-none');
|
||
notificationElement.classList.add('alert-success');
|
||
notificationElement.textContent = "Отели успешно импортированы!";
|
||
checkboxes.forEach(checkbox => checkbox.checked = false); // Снимаем выделение с чекбоксов
|
||
})
|
||
.catch((error) => {
|
||
console.error("Ошибка при импорте:", error);
|
||
notificationElement.classList.remove('d-none');
|
||
notificationElement.classList.add('alert-danger');
|
||
notificationElement.textContent = "Произошла ошибка при импорте отелей.";
|
||
})
|
||
.finally(() => {
|
||
importButton.disabled = false;
|
||
importButton.textContent = 'Импортировать выбранные отели';
|
||
});
|
||
} else {
|
||
console.log("Не выбраны отели");
|
||
notificationElement.classList.remove('d-none');
|
||
notificationElement.classList.add('alert-warning');
|
||
notificationElement.textContent = "Пожалуйста, выберите хотя бы один отель для импорта.";
|
||
}
|
||
}, 100); // Задержка 100ms, чтобы дождаться рендеринга всех элементов
|
||
});
|
||
});
|
||
document.addEventListener('DOMContentLoaded', function() {
|
||
const checkboxes = document.querySelectorAll('input[name="hotels"]');
|
||
console.log("Чекбоксы на странице:", checkboxes); // Проверим, есть ли чекбоксы
|
||
});
|
||
</script>
|
||
{% endblock %}
|