[17ed1da] | 1 | <!DOCTYPE html>
|
---|
| 2 | <html>
|
---|
| 3 | <head>
|
---|
[4abe330] | 4 | <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.5/dist/css/bootstrap.min.css" rel="stylesheet"
|
---|
| 5 | integrity="sha384-SgOJa3DmI69IUzQ2PVdRZhwQ+dy64/BUtbMJw1MZ8t5HZApcHrRKUc4W0kG879m7" crossorigin="anonymous">
|
---|
| 6 | <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.5/dist/js/bootstrap.bundle.min.js"
|
---|
| 7 | integrity="sha384-k6d4wzSIapyDyv1kpU366/PK5hCdSbCRGRCMv+eplOQJWyd1fbcAu9OCUj5zNLiq"
|
---|
| 8 | crossorigin="anonymous"></script>
|
---|
| 9 | <title>Number of Tracks from Each Genre per Customer</title>
|
---|
[17ed1da] | 10 | </head>
|
---|
[4abe330] | 11 | <body class="d-flex bg-light">
|
---|
| 12 | {% include 'sidebar.html' %}
|
---|
| 13 | <div class="container mt-5">
|
---|
| 14 | <h1 class="mb-4 text-center">Number of Tracks from Each Genre per Customer</h1>
|
---|
[17ed1da] | 15 |
|
---|
[4abe330] | 16 | <form method="GET" action="" class="row g-3 mb-4">
|
---|
| 17 | <div class="col-md-4">
|
---|
| 18 | <label for="customer_id" class="form-label">Select Customer:</label>
|
---|
| 19 | <select name="customer_id" id="customer_id" class="form-select">
|
---|
| 20 | <option value="">All Customers</option>
|
---|
| 21 | {% for customer in customers %}
|
---|
| 22 | <option value="{{ customer.customer_id }}"
|
---|
| 23 | {% if request.GET.customer_id == customer.0|stringformat:'s' %}selected{% endif %}>
|
---|
| 24 | {{ customer.first_name }} {{ customer.last_name }}
|
---|
| 25 | </option>
|
---|
| 26 | {% endfor %}
|
---|
| 27 | </select>
|
---|
| 28 | </div>
|
---|
[17ed1da] | 29 |
|
---|
[4abe330] | 30 | <div class="col-md-4 d-flex align-items-end">
|
---|
| 31 | <button type="submit" class="btn btn-primary w-100">Filter</button>
|
---|
| 32 | </div>
|
---|
| 33 | </form>
|
---|
[59b2e9c] | 34 | {% if customer %}
|
---|
| 35 | <div class="row display-5">
|
---|
| 36 | <div class="col-3 bg-light-subtle m-1 pb-3 border border-secondary-subtle rounded-3">
|
---|
| 37 | {{ customer }}
|
---|
| 38 | </div>
|
---|
| 39 | </div>
|
---|
| 40 | {% endif %}
|
---|
[4abe330] | 41 | {% if not data %}
|
---|
| 42 | <div class="alert alert-warning" role="alert">
|
---|
| 43 | No data available for the selected customer.
|
---|
| 44 | </div>
|
---|
| 45 | {% else %}
|
---|
[59b2e9c] | 46 | <div class="container">
|
---|
| 47 | <div class="row col-6 justify-content-between mb-3">
|
---|
| 48 | <div class="col-6 font-weight-bold">
|
---|
| 49 | <strong>Genre</strong>
|
---|
| 50 | </div>
|
---|
| 51 | <div class="col-6 font-weight-bold px-4">
|
---|
| 52 | <strong>Number of tracks</strong>
|
---|
| 53 | </div>
|
---|
| 54 | </div>
|
---|
| 55 | <ul class="row list-group col-6">
|
---|
[4abe330] | 56 | {% for row in data %}
|
---|
[59b2e9c] | 57 | <li class="list-group-item d-flex justify-content-between align-items-center">
|
---|
| 58 | <div class="col-6">
|
---|
| 59 | <span>{{ row.genre }}</span>
|
---|
| 60 | </div>
|
---|
| 61 | <div class="col-6">
|
---|
| 62 | <span>Number of Tracks: {{ row.track_count }}</span>
|
---|
| 63 | </div>
|
---|
| 64 | </li>
|
---|
| 65 | {% empty %}
|
---|
| 66 | <li class="list-group-item">No data available for this customer.</li>
|
---|
[4abe330] | 67 | {% endfor %}
|
---|
[59b2e9c] | 68 | </ul>
|
---|
[4abe330] | 69 | </div>
|
---|
| 70 | {% endif %}
|
---|
| 71 | </div>
|
---|
[17ed1da] | 72 |
|
---|
| 73 | </body>
|
---|
| 74 | </html>
|
---|