kancelyary_project/templates/import.html

267 lines
9.3 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{% extends "base.html" %}
{% block content %}
<div class="page-header">
<h2>Импорт данных из Excel</h2>
<a href="{{ url_for('index') }}" class="btn-back">На главную</a>
</div>
<div class="import-container">
<div class="import-info">
<h3>Инструкция по импорту</h3>
<ol>
<li>Подготовьте файлы Excel в соответствии с шаблонами</li>
<li>Убедитесь, что файлы находятся в папке <strong>data/</strong></li>
<li>Введите имена файлов в форму ниже</li>
<li>Нажмите "Импортировать данные"</li>
</ol>
<h4>Требования к файлам:</h4>
<table class="info-table">
<tr>
<th>Файл</th>
<th>Обязательные колонки</th>
</tr>
<tr>
<td>Поставщики</td>
<td>Наименование поставщика, Электронная почта, ИНН</td>
</tr>
<tr>
<td>Типы товаров</td>
<td>Тип товара</td>
</tr>
<tr>
<td>Товары</td>
<td>Тип товара, Наименование, Артикул, Минимальная цена</td>
</tr>
<tr>
<td>Заказы</td>
<td>Поставщик, Дата заказа</td>
</tr>
</table>
</div>
<form method="POST" class="import-form">
<div class="form-section">
<h3>Файлы для импорта</h3>
<div class="form-group">
<label for="suppliers_file">Файл с поставщиками:</label>
<input type="text" id="suppliers_file" name="suppliers_file"
value="data/Suppliers_import.xlsx" placeholder="Например: Suppliers_import.xlsx">
<small class="form-text">Формат: .xlsx, .xls</small>
</div>
<div class="form-group">
<label for="product_types_file">Файл с типами товаров:</label>
<input type="text" id="product_types_file" name="product_types_file"
value="data/Product_types_import.xlsx" placeholder="Например: Product_types_import.xlsx">
<small class="form-text">Формат: .xlsx, .xls</small>
</div>
<div class="form-group">
<label for="products_file">Файл с товарами:</label>
<input type="text" id="products_file" name="products_file"
value="data/Products_import.xlsx" placeholder="Например: Products_import.xlsx">
<small class="form-text">Формат: .xlsx, .xls</small>
</div>
<div class="form-group">
<label for="orders_file">Файл с заказами:</label>
<input type="text" id="orders_file" name="orders_file"
value="data/Orders_import.xlsx" placeholder="Например: Orders_import.xlsx">
<small class="form-text">Формат: .xlsx, .xls</small>
</div>
</div>
<div class="import-warning">
<h4>⚠️ Внимание!</h4>
<p>Импорт данных очистит существующую базу данных и загрузит новые данные из указанных файлов.</p>
<p>Убедитесь, что у вас есть резервная копия важных данных.</p>
</div>
<div class="form-actions">
<button type="submit" class="btn-submit" onclick="return confirmImport()">Импортировать данные</button>
<button type="reset" class="btn-reset">Очистить</button>
</div>
</form>
<div class="template-download">
<h4>Шаблоны файлов</h4>
<p>Скачайте примеры файлов для импорта:</p>
<ul>
<li><a href="#" onclick="downloadTemplate('suppliers')">Suppliers_template.xlsx</a></li>
<li><a href="#" onclick="downloadTemplate('product_types')">Product_types_template.xlsx</a></li>
<li><a href="#" onclick="downloadTemplate('products')">Products_template.xlsx</a></li>
<li><a href="#" onclick="downloadTemplate('orders')">Orders_template.xlsx</a></li>
</ul>
</div>
</div>
<script>
function confirmImport() {
return confirm('Внимание! Все существующие данные будут удалены. Продолжить импорт?');
}
function downloadTemplate(type) {
// Создаем пример данных для скачивания
let data;
let filename;
switch(type) {
case 'suppliers':
data = [
['Наименование поставщика', 'Директор', 'Электронная почта', 'Телефон', 'Юридический адрес', 'ИНН', 'Рейтинг'],
['ООО "КанцПром"', 'Иванов И.И.', 'info@kancprom.ru', '+7(495)123-45-67', 'г. Москва, ул. Промышленная, д.10', '7701234567', '4.8'],
['ИП Петров А.С.', 'Петров А.С.', 'petrov@mail.ru', '+7(495)765-43-21', 'г. Москва, ул. Торговая, д.5', '7707654321', '4.2']
];
filename = 'Suppliers_template.xlsx';
break;
case 'product_types':
data = [
['Тип товара', 'Описание'],
['Ручки', 'Пишущие принадлежности'],
['Тетради', 'Школьные тетради'],
['Бумага', 'Офисная бумага']
];
filename = 'Product_types_template.xlsx';
break;
case 'products':
data = [
['Тип товара', 'Наименование', 'Артикул', 'Минимальная цена', 'Остаток'],
['Ручки', 'Ручка синяя гелевая', 'R001', '15.50', '500'],
['Тетради', 'Тетрадь 48 листов', 'T001', '45.00', '1000'],
['Бумага', 'Бумага А4 500 листов', 'B001', '280.00', '200']
];
filename = 'Products_template.xlsx';
break;
case 'orders':
data = [
['Поставщик', 'Дата заказа', 'Статус', 'Примечания', 'Количество'],
['ООО "КанцПром"', '2026-08-15', 'новый', 'Заказ к началу учебного года', '200'],
['ИП Петров А.С.', '2026-08-20', 'в_обработке', '', '150']
];
filename = 'Orders_template.xlsx';
break;
}
// Создаем CSV и скачиваем (для простоты)
let csvContent = data.map(row => row.join(',')).join('\n');
const blob = new Blob(["\uFEFF" + csvContent], { type: 'text/csv;charset=utf-8;' });
const link = document.createElement('a');
const url = URL.createObjectURL(blob);
link.setAttribute('href', url);
link.setAttribute('download', filename.replace('.xlsx', '.csv'));
link.style.visibility = 'hidden';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
</script>
<style>
.import-container {
display: grid;
grid-template-columns: 1fr 2fr;
gap: 30px;
background: white;
border-radius: 8px;
padding: 25px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
.import-info {
background-color: #F5F5F5;
padding: 20px;
border-radius: 8px;
}
.import-info h3, .import-info h4 {
color: #696969;
margin-bottom: 15px;
}
.import-info ol {
margin-left: 20px;
margin-bottom: 20px;
}
.import-info li {
margin-bottom: 8px;
}
.info-table {
width: 100%;
border-collapse: collapse;
margin-top: 10px;
}
.info-table th {
background-color: #E0E0E0;
padding: 8px;
text-align: left;
}
.info-table td {
padding: 8px;
border-bottom: 1px solid #E0E0E0;
}
.import-form {
padding: 20px;
}
.import-warning {
background-color: #fff3cd;
border: 1px solid #ffeeba;
color: #856404;
padding: 15px;
border-radius: 4px;
margin: 20px 0;
}
.import-warning h4 {
margin-bottom: 10px;
color: #856404;
}
.template-download {
grid-column: span 2;
margin-top: 20px;
padding-top: 20px;
border-top: 1px solid #E0E0E0;
}
.template-download ul {
list-style: none;
display: flex;
gap: 20px;
flex-wrap: wrap;
margin-top: 10px;
}
.template-download li a {
color: #696969;
text-decoration: none;
padding: 5px 10px;
background-color: #F5F5F5;
border-radius: 4px;
}
.template-download li a:hover {
background-color: #E0E0E0;
}
@media (max-width: 768px) {
.import-container {
grid-template-columns: 1fr;
}
.template-download {
grid-column: 1;
}
}
</style>
{% endblock %}