113 lines
5.2 KiB
HTML
113 lines
5.2 KiB
HTML
{% extends "base.html" %}
|
|
{% load static %}
|
|
|
|
{% block title %}Scheduling Calendar - {{ block.super }}{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="container-fluid">
|
|
<div class="row">
|
|
<div class="col-12">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h4 class="card-title mb-0">
|
|
<i class="fas fa-calendar-alt me-2"></i>Scheduling Calendar
|
|
</h4>
|
|
</div>
|
|
|
|
<div class="card-body">
|
|
<!-- Filters -->
|
|
<div class="row mb-3">
|
|
<div class="col-md-3">
|
|
<label for="provider-filter" class="form-label">Provider</label>
|
|
<select id="provider-filter" class="form-select">
|
|
<option value="">All Providers</option>
|
|
{% for provider in providers %}
|
|
<option value="{{ provider.id }}">{{ provider.get_full_name }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="specialty-filter" class="form-label">Specialty</label>
|
|
<select id="specialty-filter" class="form-select">
|
|
<option value="">All Specialties</option>
|
|
{% for specialty in specialties %}
|
|
<option value="{{ specialty }}">{{ specialty }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label for="date-picker" class="form-label">Date</label>
|
|
<input type="date" id="date-picker" class="form-control" value="{{ today|date:'Y-m-d' }}">
|
|
</div>
|
|
<div class="col-md-3">
|
|
<label class="form-label"> </label>
|
|
<div class="d-grid">
|
|
<button type="button" class="btn btn-primary" onclick="loadCalendarData()">
|
|
<i class="fas fa-search me-1"></i>Update View
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<!-- Calendar View -->
|
|
<div class="col-lg-8">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h5 class="mb-0">Appointments</h5>
|
|
</div>
|
|
<div class="card-body"
|
|
id="calendar-appointments"
|
|
hx-get="{% url 'appointments:calendar_appointments' %}"
|
|
hx-trigger="load"
|
|
hx-include="#date-picker, #provider-filter">
|
|
<div class="text-center">
|
|
<div class="spinner-border text-primary" role="status"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Available Slots -->
|
|
<div class="col-lg-4">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h5 class="mb-0">Available Slots</h5>
|
|
</div>
|
|
<div class="card-body"
|
|
id="available-slots"
|
|
hx-get="{% url 'appointments:available_slots' %}"
|
|
hx-trigger="load"
|
|
hx-include="#date-picker, #provider-filter, #specialty-filter">
|
|
<div class="text-center">
|
|
<div class="spinner-border text-primary" role="status"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|
|
|
|
{% block js %}
|
|
<script>
|
|
function loadCalendarData() {
|
|
// Trigger HTMX refresh for both calendar and slots
|
|
htmx.trigger('#calendar-appointments', 'refresh');
|
|
htmx.trigger('#available-slots', 'refresh');
|
|
}
|
|
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
// Auto-refresh when filters change
|
|
document.getElementById('provider-filter').addEventListener('change', loadCalendarData);
|
|
document.getElementById('specialty-filter').addEventListener('change', loadCalendarData);
|
|
document.getElementById('date-picker').addEventListener('change', loadCalendarData);
|
|
});
|
|
</script>
|
|
{% endblock %}
|
|
|