Remove water_usage_morning and improve pagination handling.

Removed all references to the water_usage_morning field to simplify data structures and form inputs. Introduced flexible autoload behavior in pagination and improved list filtering by excluding weekends and limiting displayed data to the most recent five days.
This commit is contained in:
Jepp9350
2025-04-16 09:31:24 +02:00
parent fad1e303be
commit 70361523b4
5 changed files with 48 additions and 40 deletions
+4 -2
View File
@@ -77,12 +77,14 @@ export const setMeta = (currentPage, itemsPerPage, totalItems) => {
setLastUpdated();
};
export const setMetaItemsPerPage = (newItemsPerPage) => {
export const setMetaItemsPerPage = (newItemsPerPage, autoload = true) => {
metaItemsPerPage.value = newItemsPerPage;
// Reset the page to 1
setPage(1);
// Load the list
loadList();
if (autoload) {
loadList();
}
};
/**
@@ -337,6 +337,20 @@ export const SessionUser = {
toLocalTimeHours: (date) => {
return new Date(date).toLocaleTimeString('da-DK', {hour: '2-digit', minute: '2-digit'});
},
getDateWeekdayNumber: (date) => {
const created_at_val = new Date(date);
const weekday = created_at_val.getDay();
return weekday === 0 ? 7 : weekday;
},
weekdayNumbers: {
monday: 1,
tuesday: 2,
wednesday: 3,
thursday: 4,
friday: 5,
saturday: 6,
sunday: 7,
}
},
/** Redirect to */
redirectTo: {
@@ -43,15 +43,7 @@ import {ref} from "vue";
}
},
water_usage: {
label: "Vandforbrug (m3)",
type: "number",
sortable: true,
creation: {
required: true
},
},
water_usage_morning: {
label: "Vandforbrug, morgen (m3)",
label: "Vandtal (m3)",
type: "number",
sortable: true,
creation: {
@@ -2,7 +2,7 @@
import {ref, watch} from 'vue';
import { selected_department_id, onChangeCall } from "@/views/dashboards/departmentDashboard/modules/daily-report/DepartmentDailyReportObject.vue";
import { SessionUser } from "@/components/session/token/SessionUser.vue";
import { list, setEndpoint, loadList, setFilter, setMetaItemsPerPage } from "@/components/pagination/paginatedList.vue";
import { list, setEndpoint, loadList, setFilter, setMetaItemsPerPage, orderBy, setOrder } from "@/components/pagination/paginatedList.vue";
import { Colors as TemplateColors } from "@/ThemeConfig.vue";
import {
Chart as ChartJS,
@@ -43,11 +43,6 @@ const parseData = () => {
const tmpParsedList = {
labels: [],
datasets: [
{
label: SessionUser.objects.department_daily_reports.columns.water_usage_morning.label,
backgroundColor: TemplateColors.global.primaryColor,
data: []
},
{
label: SessionUser.objects.department_daily_reports.columns.water_usage.label,
backgroundColor: TemplateColors.global.secondaryColor,
@@ -58,18 +53,40 @@ const parseData = () => {
// Sort the list by created_at date
list.value.sort((a, b) => new Date(a.created_at) - new Date(b.created_at));
for (let i = 0; i < list.value.length; i++) {
// console log the day name
let dateWeekdayNumber = SessionUser.functions.date.getDateWeekdayNumber(list.value[i].created_at);
// Filter out saturday and sunday
let exclude = [
// Saturday
SessionUser.functions.date.weekdayNumbers.saturday,
// Sunday
SessionUser.functions.date.weekdayNumbers.sunday
];
if (exclude.includes(dateWeekdayNumber)) {
//console.log('Excluding date', list.value[i].created_at);
continue;
}
// If there's more than 5 days, remove the first one
if (tmpParsedList.labels.length > 5) {
tmpParsedList.labels.shift();
tmpParsedList.datasets[0].data.shift();
}
tmpParsedList.labels.push(SessionUser.functions.date.toWords(list.value[i].created_at));
// Add the water_usage_morning
tmpParsedList.datasets[0].data.push(list.value[i].water_usage_morning);
tmpParsedList.datasets[1].data.push(list.value[i].water_usage);
tmpParsedList.datasets[0].data.push(list.value[i].water_usage);
}
parsedList.value = tmpParsedList;
};
const getReports = async () => {
if (!selected_department_id.value) {
return;
}
setEndpoint('/departments/daily-reports', false);
setMetaItemsPerPage(7);
setMetaItemsPerPage(9,false);
// Set the order to date
setOrder('created_at', 'desc');
setFilter('department_id', parseInt(selected_department_id.value), true);
};
@@ -83,7 +83,6 @@ const getYesterdaysReport = async () => {
yesterday.value.date
)
.then(response => {
yesterday.value.water_usage_morning = parseInt(response.data.data.water_usage_morning);
yesterday.value.water_usage = parseInt(response.data.data.water_usage);
yesterday.value.notes = response.data.data.notes ? response.data.data.notes : '';
yesterday.value.filled_by = response.data.data.filled_by ? response.data.data.filled_by : null;
@@ -108,7 +107,6 @@ const getDailyReport = async () => {
if (created_at_val.toDateString() === (selected_date.value ? new Date(selected_date.value) : today).toDateString()) {
// The daily report is today
// So we can set the values
water_usage_morning.value = parseInt(response.data.data.water_usage_morning);
water_usage.value = parseInt(response.data.data.water_usage);
notes.value = response.data.data.notes ? response.data.data.notes : '';
filled_by.value = response.data.data.filled_by ? response.data.data.filled_by : null;
@@ -141,14 +139,12 @@ const getDailyReport = async () => {
const resetData = () => {
water_usage.value = 0;
water_usage_morning.value = 0;
notes.value = null;
filled_by.value = null;
created_at.value = null;
id.value = null;
message.value = null;
// Yesterday
yesterday.value.water_usage_morning = 0;
yesterday.value.water_usage = 0;
yesterday.value.notes = null;
yesterday.value.filled_by = null;
@@ -180,28 +176,15 @@ onChangeCall(() => {
<h4 class="subtitle is-5">{{ SessionUser.functions.date.toWords(selected_date) }}</h4>
<ShowErrorField :error="uniqueId" />
</div>
<div class="column is-6">
<div class="column">
<div class="field">
<label class="label">Vandforbrug morgen (m3)</label>
<div class="control">
<input
class="input"
type="number"
v-model="water_usage_morning"
v-bind:placeholder="yesterday.water_usage ? yesterday.water_usage + ' ( I går )' : '0'"
required
>
</div>
</div>
</div>
<div class="column is-6">
<div class="field">
<label class="label">Vandforbrug (m3)</label>
<label class="label">{{SessionUser.objects.department_daily_reports.columns.water_usage.label}}</label>
<div class="control">
<input
class="input"
type="number"
v-model="water_usage"
v-bind:placeholder="yesterday.water_usage ? yesterday.water_usage + ' ( I går )' : '0'"
required
>
</div>