mirror of
https://github.com/RunLit/Bambu-Run.git
synced 2026-06-22 14:09:04 +01:00
Compare commits
1 Commits
v0.1.1
...
as_django_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
05d716c09d |
@@ -9,9 +9,11 @@
|
||||
<p class="text-muted">Manage filament colors for auto-matching</p>
|
||||
</div>
|
||||
<div class="col-md-4 text-end">
|
||||
{% if not is_basic_user %}
|
||||
<a href="{% url 'bambu_run:filament_color_create' %}" class="btn btn-primary">
|
||||
<i class="bi bi-plus-circle"></i> Add New Color
|
||||
</a>
|
||||
{% endif %}
|
||||
<a href="{% url 'bambu_run:filament_list' %}" class="btn btn-outline-secondary">
|
||||
<i class="bi bi-arrow-left"></i> Back to Inventory
|
||||
</a>
|
||||
@@ -70,8 +72,10 @@
|
||||
</td>
|
||||
<td class="align-middle">{{ color.brand }}</td>
|
||||
<td class="align-middle">
|
||||
{% if not is_basic_user %}
|
||||
<a href="{% url 'bambu_run:filament_color_update' color.pk %}" class="btn btn-sm btn-warning">Edit</a>
|
||||
<a href="{% url 'bambu_run:filament_color_delete' color.pk %}" class="btn btn-sm btn-danger">Delete</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% empty %}
|
||||
|
||||
@@ -13,7 +13,9 @@
|
||||
<p class="text-body-secondary">Filament Spool Details</p>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
{% if not is_basic_user %}
|
||||
<a href="{% url 'bambu_run:filament_update' filament.pk %}" class="btn btn-warning">Edit</a>
|
||||
{% endif %}
|
||||
<a href="{% url 'bambu_run:filament_list' %}" class="btn btn-secondary">Back to List</a>
|
||||
</div>
|
||||
</div>
|
||||
@@ -78,6 +80,7 @@
|
||||
|
||||
<!-- Usage Chart -->
|
||||
<div class="card mb-4">
|
||||
{% if not is_basic_user %}
|
||||
<div class="card-header">
|
||||
<div class="d-flex justify-content-between align-items-center flex-wrap gap-2">
|
||||
<div>
|
||||
@@ -118,6 +121,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="card-body">
|
||||
<div class="chart-container" style="height: 300px;">
|
||||
<canvas id="usageChart"></canvas>
|
||||
@@ -199,6 +203,7 @@
|
||||
|
||||
{% block extra_js %}
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0"></script>
|
||||
{% if not is_basic_user %}
|
||||
<script>
|
||||
const filamentId = {{ filament.pk }};
|
||||
let usageChart = null;
|
||||
@@ -308,4 +313,19 @@
|
||||
// Initial load
|
||||
fetchFilamentUsageData();
|
||||
</script>
|
||||
{% else %}
|
||||
<script>
|
||||
// Basic user: render static chart from server-provided data if available
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const ctx = document.getElementById('usageChart');
|
||||
if (ctx) {
|
||||
new Chart(ctx.getContext('2d'), {
|
||||
type: 'line',
|
||||
data: { labels: [], datasets: [{ label: 'Remaining %', data: [], borderColor: 'rgb(75, 192, 192)', backgroundColor: 'rgba(75, 192, 192, 0.1)', tension: 0.3, fill: true }] },
|
||||
options: { responsive: true, maintainAspectRatio: false, scales: { y: { beginAtZero: true, max: 100 } } }
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
<button type="submit" class="btn btn-primary">Save</button>
|
||||
<a href="{% url 'bambu_run:filament_list' %}" class="btn btn-secondary">Cancel</a>
|
||||
</div>
|
||||
{% if form.instance.pk %}
|
||||
{% if form.instance.pk and not is_basic_user %}
|
||||
<button type="button" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#deleteModal" id="deleteBtn">
|
||||
<i class="bi bi-trash-fill me-1"></i>Delete
|
||||
</button>
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
<h1>Filament Inventory</h1>
|
||||
<p class="text-body-secondary">Manage your 3D printer filament spools</p>
|
||||
</div>
|
||||
{% if not is_basic_user %}
|
||||
<div class="col-auto">
|
||||
<a href="{% url 'bambu_run:filament_type_list' %}" class="btn btn-outline-info me-2">
|
||||
<i class="bi bi-list-ul"></i> Manage Types
|
||||
@@ -23,6 +24,7 @@
|
||||
<i class="bi bi-plus-circle"></i> Add Filament
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<!-- Summary Cards -->
|
||||
@@ -158,7 +160,9 @@
|
||||
<td class="align-middle">{{ filament.last_used|date:"Y-m-d H:i"|default:"Never" }}</td>
|
||||
<td class="align-middle">
|
||||
<a href="{% url 'bambu_run:filament_detail' filament.pk %}" class="btn btn-sm btn-info">View</a>
|
||||
{% if not is_basic_user %}
|
||||
<a href="{% url 'bambu_run:filament_update' filament.pk %}" class="btn btn-sm btn-warning">Edit</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% empty %}
|
||||
|
||||
@@ -9,9 +9,11 @@
|
||||
<p class="text-muted">Manage filament types (material, sub-type, brand)</p>
|
||||
</div>
|
||||
<div class="col-md-4 text-end">
|
||||
{% if not is_basic_user %}
|
||||
<a href="{% url 'bambu_run:filament_type_create' %}" class="btn btn-primary">
|
||||
<i class="bi bi-plus-circle"></i> Add New Type
|
||||
</a>
|
||||
{% endif %}
|
||||
<a href="{% url 'bambu_run:filament_list' %}" class="btn btn-outline-secondary">
|
||||
<i class="bi bi-arrow-left"></i> Back to Inventory
|
||||
</a>
|
||||
@@ -60,8 +62,10 @@
|
||||
</td>
|
||||
<td class="align-middle">{{ ft.brand }}</td>
|
||||
<td class="align-middle">
|
||||
{% if not is_basic_user %}
|
||||
<a href="{% url 'bambu_run:filament_type_update' ft.pk %}" class="btn btn-sm btn-warning">Edit</a>
|
||||
<a href="{% url 'bambu_run:filament_type_delete' ft.pk %}" class="btn btn-sm btn-danger">Delete</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
{% empty %}
|
||||
|
||||
@@ -203,6 +203,7 @@
|
||||
</div>
|
||||
|
||||
<!-- Date/Time Filter Controls -->
|
||||
{% if not is_basic_user %}
|
||||
<div class="row mb-4">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
@@ -247,6 +248,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<!-- Filament Timeline Chart - Full Width -->
|
||||
<div class="row g-3 mb-4">
|
||||
@@ -372,6 +374,7 @@
|
||||
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-annotation@3.0.1"></script>
|
||||
<script src="{% static 'bambu_run/js/printer_charts.js' %}"></script>
|
||||
<script src="{% static 'bambu_run/js/printer_charts_control.js' %}"></script>
|
||||
{% if not is_basic_user %}
|
||||
<div id="printerApiUrl" data-url="{% url 'bambu_run:printer_api' %}" style="display: none;"></div>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
@@ -387,4 +390,18 @@
|
||||
}
|
||||
});
|
||||
</script>
|
||||
{% else %}
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const printerData = {{ printer_data_json|safe }};
|
||||
initPrinterCharts(printerData, null);
|
||||
|
||||
if (printerData.project_markers && printerData.project_markers.length > 0) {
|
||||
setTimeout(function() {
|
||||
addProjectMarkersToCharts(printerData.project_markers, printerData.timestamps);
|
||||
}, 500);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -17,6 +17,11 @@ from .forms import FilamentForm, FilamentColorForm, FilamentTypeForm
|
||||
class PrinterDashboardView(LoginRequiredMixin, TemplateView):
|
||||
template_name = "bambu_run/printer_dashboard.html"
|
||||
|
||||
def _get_date_range(self, request):
|
||||
"""Return (start_dt, end_dt) for the dashboard query. Override for custom date logic."""
|
||||
time_24h_ago = timezone.now() - timedelta(hours=24)
|
||||
return time_24h_ago, None # None means "now"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context['bambu_run_base_template'] = app_settings.BASE_TEMPLATE
|
||||
@@ -34,11 +39,14 @@ class PrinterDashboardView(LoginRequiredMixin, TemplateView):
|
||||
|
||||
tz = zoneinfo.ZoneInfo(app_settings.TIMEZONE)
|
||||
|
||||
# Last 24 hours of live data
|
||||
time_24h_ago = timezone.now() - timedelta(hours=24)
|
||||
# Get date range (overridable by subclasses)
|
||||
start_dt, end_dt = self._get_date_range(self.request)
|
||||
metrics = PrinterMetrics.objects.filter(
|
||||
device=printer_device, timestamp__gte=time_24h_ago
|
||||
).prefetch_related('filament_snapshots').order_by("timestamp")
|
||||
device=printer_device, timestamp__gte=start_dt
|
||||
)
|
||||
if end_dt:
|
||||
metrics = metrics.filter(timestamp__lte=end_dt)
|
||||
metrics = metrics.prefetch_related('filament_snapshots').order_by("timestamp")
|
||||
|
||||
latest_metric = metrics.last()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user