Django_Basic_Manufacturing_3/templates/database_management/dashboard.html
2025-08-22 17:05:22 +07:00

201 lines
8.4 KiB
HTML

{% extends 'base.html' %}
{% block title %}{{ module_title }} - Manufacturing App{% endblock %}
{% block content %}
<div class="container-fluid mt-4">
<div class="row">
<div class="col-12">
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
<h1 class="h2">{{ module_title }}</h1>
<div class="btn-toolbar mb-2 mb-md-0">
<button type="button" class="btn btn-sm btn-outline-primary me-2" onclick="refreshDatabaseInfo()">
<i class="fas fa-sync-alt"></i> Refresh
</button>
</div>
</div>
<!-- Database Information Cards -->
<div class="row">
<div class="col-md-4">
<div class="card text-center">
<div class="card-body">
<i class="fas fa-database fa-2x text-primary mb-3"></i>
<h5 class="card-title">Database Size</h5>
<p class="card-text" id="db-size">Loading...</p>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card text-center">
<div class="card-body">
<i class="fas fa-table fa-2x text-success mb-3"></i>
<h5 class="card-title">Tables</h5>
<p class="card-text" id="table-count">Loading...</p>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card text-center">
<div class="card-body">
<i class="fas fa-clock fa-2x text-warning mb-3"></i>
<h5 class="card-title">Last Backup</h5>
<p class="card-text" id="last-backup">Loading...</p>
</div>
</div>
</div>
</div>
<!-- Database Management Actions -->
<div class="row mt-4">
<div class="col-12">
<div class="card">
<div class="card-header">
<h5 class="mb-0">Database Management Actions</h5>
</div>
<div class="card-body">
<div class="row">
{% if perms.database_management.add_database %}
<div class="col-md-4 mb-3">
<a href="{% url 'database_management:backup' %}" class="btn btn-primary w-100">
<i class="fas fa-download"></i> Create Backup
</a>
</div>
{% endif %}
{% if perms.database_management.view_database %}
<div class="col-md-4 mb-3">
<a href="{% url 'database_management:backup_list' %}" class="btn btn-info w-100">
<i class="fas fa-list"></i> View Backups
</a>
</div>
{% endif %}
{% if perms.database_management.change_database %}
<div class="col-md-4 mb-3">
<button class="btn btn-warning w-100" onclick="showRestoreModal()">
<i class="fas fa-upload"></i> Restore Database
</button>
</div>
{% endif %}
</div>
<div class="row mt-3">
{% if perms.database_management.add_database %}
<div class="col-md-6 mb-3">
<button class="btn btn-success w-100" onclick="initializeDatabase()">
<i class="fas fa-cog"></i> Initialize Database
</button>
</div>
{% endif %}
{% if perms.database_management.delete_database %}
<div class="col-md-6 mb-3">
<button class="btn btn-danger w-100" onclick="showCleanupModal()">
<i class="fas fa-trash"></i> Cleanup Old Backups
</button>
</div>
{% endif %}
</div>
</div>
</div>
</div>
</div>
<!-- Recent Backups -->
<div class="row mt-4">
<div class="col-12">
<div class="card">
<div class="card-header">
<h5 class="mb-0">Recent Backups</h5>
</div>
<div class="card-body">
<div id="recent-backups">
<p class="text-muted">Loading recent backups...</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Restore Modal -->
<div class="modal fade" id="restoreModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Restore Database</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<p>This action will restore the database from a backup file. All current data will be lost.</p>
<div class="mb-3">
<label for="backupFile" class="form-label">Select Backup File</label>
<input type="file" class="form-control" id="backupFile" accept=".sql,.dump">
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-warning" onclick="restoreDatabase()">Restore</button>
</div>
</div>
</div>
</div>
{% endblock %}
{% block extra_js %}
<script>
function refreshDatabaseInfo() {
// Simulate refreshing database information
document.getElementById('db-size').textContent = 'Loading...';
document.getElementById('table-count').textContent = 'Loading...';
document.getElementById('last-backup').textContent = 'Loading...';
setTimeout(() => {
document.getElementById('db-size').textContent = '15.2 MB';
document.getElementById('table-count').textContent = '25 tables';
document.getElementById('last-backup').textContent = '2024-01-15 10:30 AM';
}, 1000);
}
function showRestoreModal() {
const modal = new bootstrap.Modal(document.getElementById('restoreModal'));
modal.show();
}
function restoreDatabase() {
const fileInput = document.getElementById('backupFile');
if (!fileInput.files[0]) {
alert('Please select a backup file first.');
return;
}
// Simulate restore process
alert('Database restore functionality would be implemented here.');
// Close modal
const modal = bootstrap.Modal.getInstance(document.getElementById('restoreModal'));
modal.hide();
}
function initializeDatabase() {
if (confirm('Are you sure you want to initialize the database? This will reset all data.')) {
alert('Database initialization functionality would be implemented here.');
}
}
function showCleanupModal() {
if (confirm('Are you sure you want to delete old backup files? This action cannot be undone.')) {
alert('Backup cleanup functionality would be implemented here.');
}
}
// Load initial data
document.addEventListener('DOMContentLoaded', function() {
refreshDatabaseInfo();
});
</script>
{% endblock %}