{% extends "layouts/base.html" %} {% block title %}Readings{% endblock %}
<!-- Specific Page CSS goes HERE -->
{% block stylesheets %}
<style>
.main-panel .content {
min-height: calc(100vh - 155px);
}
.navbar.navbar-absolute {
z-index: 100000;
}
.card-body i {
color: #9a9a9a;
font-size: 1.4em;
}
.card-body i:hover {
color: #575757;
}
.table > tbody > tr > .button-td,
.white-content .table > tbody > tr > .button-td {
width: 4rem;
padding: 5px 0px;
}
.tooltip-inner {
font-size: 10.5px;
padding: 5px 10px;
}
.tooltip {
border-radius: 4px;
}
#notification-bar {
font-size: large;
font-weight: bolder;
position: fixed;
top: -100%;
left: 25%;
width: 50%;
color: #fff;
padding: 20px;
text-align: center;
z-index: 9999;
border-radius: 10px;
transition: 0.5s;
}
#notification-bar.show{
top: 10px;
}
.success {
background-color: #4caf50;
}
.error {
background-color: #f44336;
}
.filter-container {
display: flex;
flex-wrap: wrap;
margin-bottom: 10px;
color: white;
}
.filter-container div {
margin: 10px;
width: 100%;
max-width: 180px;
}
.filter-container div select {
width: 100%;
max-width: 180px;
}
.filter-container #quarter-number-filter {
width: 100%;
max-width: 180px;
}
.white-content .filter-container {
color: black;
}
.white-content #show-filter-container {
color: black;
}
#show-filter-container {
display: inline;
margin: 10px;
color: white;
font-weight: bold;
cursor: pointer;
}
.filter-container {
max-height: 0;
overflow: hidden;
opacity: 0;
visibility: hidden;
transition: max-height 1s, opacity 1s, visibility 0.5s;
}
.filter-container.show {
max-height: 1000px;
opacity: 1;
visibility: visible;
}
.card-header {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
align-items: center;
}
.btn-primary {
/*padding: 10px 20px;*/
margin: 0 20px;
}
.footer {
padding: 0;
}
.footer .nav {
padding-left: 0;
}
.footer .copyright {
padding-right: 0;
}
@media screen and (max-width: 500px) {
.filter-container div select,
.filter-container #quarter-number-filter {
font-size: 12px;
}
.btn-primary {
font-size: 12px;
padding: 8px 18px;
margin: 0 10px 0 0;
}
#notification-bar {
font-size: medium;
left: 10%;
width: 80%;
padding: 10px;
}
}
.hidden-column {
display: none;
}
</style>
<style type="text/css">
body
{
counter-reset: Serial;
}
table
{
border-collapse: separate;
}
tr td:first-child:before
{
counter-increment: Serial;
content: counter(Serial);
}
</style>
{% endblock %} {% block content %}
<div id="notification-bar"></div>
<div class="content">
<div class="row">
<div class="col-md-12">
<div id="show-filter-container">
Show Filters <i class="tim-icons icon-minimal-down"></i>
</div>
<div class="filter-container">
<div class="quarter-number-filter">
<label for="quarter-number-filter">Filter by Address Number:</label>
<input type="text" id="quarter-number-filter" />
</div>
<div>
<label for="quarter-type-filter">Filter by Address Type:</label>
<select id="quarter-type-filter">
<option value="">All</option>
{% for value in quarterType %}
<option value="{{ value }}">{{ value }}</option>
{% endfor %}
</select>
</div>
<div>
<label for="id_month_selection">Month</label>
<select id="id_month_selection" name="selected_month">
<option value="">All</option>
<option value="JAN">January (01)</option>
<option value="FEB">February (02)</option>
<option value="MAR">March (03)</option>
<option value="aPR">April (04)</option>
<option value="MAY">May (05)</option>
<option value="JUN">June (06)</option>
<option value="JUL">July (07)</option>
<option value="AUG">August (08)</option>
<option value="SEP">September (09)</option>
<option value="OCT">October (10)</option>
<option value="NOV">November (11)</option>
<option value="DEC">December (12)</option>
</select>
</div>
<div>
<label for="id_year_selection">Year</label>
<select id="id_year_selection" name="selected_year">
<option value="">All</option>
<option value="2023">2023</option>
<option value="2024">2024</option>
<option value="2025">2025</option>
</select>
</div>
</div>
<div class="content">
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-header">
<h4 class="card-title">List of Readings</h4>
<a href="/set_readings.html">
<button type="" class="btn btn-fill btn-primary">
Upload Readings
</button>
</a>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table tablesorter" id="">
<thead class="text-primary">
<tr>
<th class="text-center">S No.</th>
<th class="text-center">Address</th>
<th class="text-center hidden-column ">Quarter Number</th>
<th class="text-center hidden-column">Quarter Type</th>
<th class="text-center">Month</th>
<th class="text-center">Year</th>
<th class="text-center">Current Reading</th>
<th class="text-center">Previous Reading</th>
<th class="text-center">Units</th>
{% if user_role == 'admin' %}
<th class="text-center">Actions</th>
{% endif %}
</tr>
</thead>
<tbody>
{% for v, value in room_data.items %}
<tr>
<td class="text-center ">
</td>
<td class="text-center ">
{{ value.quarter_type }} - {{value.room_number}}
</td>
<td class="text-center quarter-number-column hidden-column " >
{{value.room_number}}
</td>
<td class="text-center quarter-type-column hidden-column">
{{ value.quarter_type }}
</td>
<!-- <td class="text-center quarter-type-column">
</td> -->
<td class="text-center month-column">
{% if value.month == 1 %}JAN{% endif %}
{% if value.month == 2 %}FEB{% endif %}
{% if value.month == 3 %}MAR{% endif %}
{% if value.month == 4 %}APR{% endif %}
{% if value.month == 5 %}MAY{% endif %}
{% if value.month == 6 %}JUN{% endif %}
{% if value.month == 7 %}JUL{% endif %}
{% if value.month == 8 %}AUG{% endif %}
{% if value.month == 9 %}SEP{% endif %}
{% if value.month == 10 %}OCT{% endif %}
{% if value.month == 11 %}NOV{% endif %}
{% if value.month == 12 %}DEC{% endif %}
</td>
<td class="text-center year-column">
{{ value.year }}
</td>
<td class="text-center">{{ value.curr_reading}}</td>
<td class="text-center">{{ value.prev_reading}}</td>
<td class="text-center">{{ value.units}}</td>
{% if user_role == 'admin' %}
<td class="td-actions button-td">
<a
href="{% url 'update_reading.html' reading_id=value.reading_id %}"
class="btn btn-link"
data-toggle="tooltip"
title="Edit Reading"
>
<i class="tim-icons icon-pencil"></i>
</a>
</td>
<td class="td-actions button-td">
<button
type="button"
class="btn btn-link delete-button"
data-reading-id="{{value.reading_id}}"
data-toggle="tooltip"
title="Delete Reading"
>
<i class="tim-icons icon-trash-simple"></i>
</button>
</td>
{%endif%}
</tr>
{%endfor%}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock content %}
<!-- Specific Page JS goes HERE -->
{% block javascripts %}
<!--<script>
// script.js
document.addEventListener('DOMContentLoaded', () => {
const filterInput = document.getElementById('filterInput');
const dataTable = document.getElementById('dataTable');
const hiddenColumns = document.querySelectorAll('.hidden-column');
filterInput.addEventListener('input', () => {
const filterValue = filterInput.value.toLowerCase();
// Loop through each row and show/hide based on the filter value
for (let row of dataTable.rows) {
let shouldDisplay = false;
// Check both hidden columns' content for a match
for (let column of hiddenColumns) {
const cellValue = row.querySelector(`.${column.classList[1]}`).textContent.toLowerCase();
if (cellValue.includes(filterValue)) {
shouldDisplay = true;
break; // No need to check other columns if we found a match
}
}
row.style.display = shouldDisplay ? '' : 'none';
}
});
});
</script>-->
<script>
window.onload = function() {
var messages = [
{% for msg in messages %}
"{{ msg }}"
{% endfor %}
];
let tags = [{% for msg in messages %}
"{{ msg.tags }}"
{% endfor %}]
if (messages.length === 0) {
return;
}
let tag = tags.join('\n')
var messageText = messages.join('\n');
//console.log(tag)
//alert(messageText);
const notificationBar = document.getElementById("notification-bar");
function showNotification(tag, message) {
notificationBar.textContent = message;
notificationBar.classList.add(tag);
notificationBar.classList.add("show");
setTimeout(function () {
hideNotification();
}, 3000);
}
function hideNotification() {
notificationBar.textContent = "";
notificationBar.classList.remove("show","success", "error");
}
if (tag.toLowerCase() == "success") {
showNotification("success", messageText);
}
if (tag.toLowerCase() == "error") {
showNotification("error", messageText);
}
};
$(document).ready(function () {
$('[data-toggle="tooltip"]').tooltip();
$(".delete-button").click(function () {
var readingId = $(this).data("reading-id");
if (confirm("Are you sure you want to delete this reading?")) {
$.ajax({
url: "{% url 'delete_reading' %}",
type: "POST",
data: {
reading_id: readingId,
csrfmiddlewaretoken: "{{ csrf_token }}",
},
success: function (response) {
location.reload();
},
error: function (xhr, status, error) {
console.error(error);
alert("Error deleting quarter. Please try again.");
},
});
}
});
});
// document.addEventListener("DOMContentLoaded", function () {
// const notificationBar = document.getElementById("notification-bar");
//
// function showNotification(status, message) {
// notificationBar.textContent = message;
// notificationBar.classList.add(status);
// notificationBar.classList.remove("hidden");
// setTimeout(function () {
// hideNotification();
// }, 3000);
// }
//
// function hideNotification() {
// notificationBar.textContent = "";
// notificationBar.classList.remove("success", "error");
// notificationBar.classList.add("hidden");
// }
//
// const successMessage = "{{ success_message }}";
// const errorMessage = "{{ error_message }}";
//
// if (successMessage.trim() !== "") {
// showNotification("success", successMessage.trim());
// }
//
// if (errorMessage.trim() !== "") {
// showNotification("error", errorMessage.trim());
// }
// });
$(document).ready(function () {
function filterTable() {
var quarterNumber = $("#quarter-number-filter").val().trim();
var quarterType = $("#quarter-type-filter").val();
var selectedMonth = $("#id_month_selection").val();
var selectedYear = $("#id_year_selection").val();
$(".table tbody tr").each(function () {
var row = $(this);
var quarterNumberColumn = row
.find(".quarter-number-column")
.text()
.trim();
var quarterTypeColumn = row
.find(".quarter-type-column")
.text()
.trim();
var monthColumn = row.find(".month-column").text().trim();
var yearColumn = row.find(".year-column").text().trim();
var showRow =
(quarterNumber === "" ||
quarterNumberColumn === quarterNumber) &&
(quarterType === "" || quarterTypeColumn === quarterType) &&
(selectedMonth === "" || monthColumn === selectedMonth) &&
(selectedYear === "" || yearColumn === selectedYear);
if (showRow) {
row.show();
} else {
row.hide();
}
});
}
$(
"#quarter-number-filter, #quarter-type-filter, #id_month_selection, #id_year_selection"
).change(function () {
filterTable();
});
filterTable();
});
const showFilterBtn = document.getElementById("show-filter-container");
const filterContainer = document.querySelector(".filter-container");
showFilterBtn.addEventListener("click", () => {
filterContainer.classList.toggle("show");
if (filterContainer.classList.contains("show")) {
showFilterBtn.innerHTML =
"Hide Filters <i class='tim-icons icon-minimal-up'></i>";
} else {
showFilterBtn.innerHTML =
"Show Filters <i class='tim-icons icon-minimal-down'></i>";
}
});
</script>
{% endblock %}
</div>
</div>
</div>