Skip to content

Commit

Permalink
Added date filtering
Browse files Browse the repository at this point in the history
  • Loading branch information
clr-li committed Mar 31, 2024
1 parent 22b6f35 commit 50ce0db
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 22 deletions.
2 changes: 1 addition & 1 deletion public/components/Table.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export class Table extends Component {
<label for="filtername">Name: </label>
<input type="text" id="filtername" name="filtername" placeholder="person name"><br>
<type-select label="Event Name:" name="eventName" id="filterEventName" placeholder="select/type event"></type-select>
<type-select label="Event Tag:" name="eventTags" id="filter-event-tags" placeholder="select/type event tag"></type-select>
<type-select label="Event Tag:" name="eventTags" id="filter-event-tags" placeholder="select/type tag"></type-select>
<label for="filterstart">Start Date: </label>
<input type="date" id="filterstart" name="filterstart">
<label for="filterend">End Date: </label>
Expand Down
82 changes: 68 additions & 14 deletions public/stats.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,17 @@ import { Popup } from './components/Popup.js';
await requireLogin();

const { get: getBusinessId } = await initBusinessSelector('business-selector', async () => {
const res = await GET(`/memberattendancedata?businessId=${getBusinessId()}&tag=&role=`);
const res = await GET(
`/memberattendancedata?businessId=${getBusinessId()}&tag=&role=&start=&end=${Math.round(
Date.now() / 1000,
)}`,
);
const memberAttArr = await res.json();
const numRes = await GET(`/countAllEvents?businessId=${getBusinessId()}&tag=`);
const numRes = await GET(
`/countAllEvents?businessId=${getBusinessId()}&tag=&start=&end=${Math.round(
Date.now() / 1000,
)}`,
);
const numPastEvents = (await numRes.json())['total_count'];
runMemberStatsTable(memberAttArr, numPastEvents);
});
Expand Down Expand Up @@ -66,13 +74,21 @@ document.getElementById('show-filter').onclick = async () => {
filter.innerHTML = /* html */ `
<form id="filterform" class="form" onsubmit="return false;">
<h1>Filter</h1>
<type-select label="Event Tag:" name="event-tag" id="filter-tag" placeholder="select/type event tag"></type-select>
<type-select label="Role:" name="role" id="filter-role" placeholder="select/type role"></type-select>
<!--<label for="filter-start">Start Date: </label>
<input type="date" id="filter-start" name="filter-start">
<label for="filter-end">End Date: </label>
<input type="date" id="filter-end" name="filter-end"><br>-->
<button type="button" value="Submit" id="submit-filterform" class="button">Apply</button>
<div class="rows">
<div class="cols">
<type-select label="Role:" name="role" id="filter-role" placeholder="select/type role"></type-select>
</div>
<div class="cols">
<type-select label="Event Tag:" name="event-tag" id="filter-tag" placeholder="select/type tag"></type-select>
<label for="filter-start">Start Date: </label>
<input type="date" id="filter-start" name="filter-start"><br>
<label for="filter-end">End Date: </label>
<input type="date" id="filter-end" name="filter-end">
</div>
</div>
<div class="rows">
<button type="button" value="Submit" id="submit-filterform" class="button">Apply</button>
</div>
</form>
`;
document.body.appendChild(filter);
Expand Down Expand Up @@ -106,21 +122,59 @@ document.getElementById('show-filter').onclick = async () => {
tag = e.detail.value;
});
document.getElementById('submit-filterform').onclick = async () => {
const start = document.getElementById('filter-start').value;
const end = document.getElementById('filter-end').value;
let start = document.getElementById('filter-start').value;
let end = document.getElementById('filter-end').value;
start = new Date(start + 'T00:00').getTime() / 1000;
const month = new Date(Date.now()).getMonth() + 1;
let monthString = month.toString();
if (month < 10) monthString = '0' + month;
if (
end ===
new Date(Date.now()).getFullYear() +
'-' +
monthString +
'-' +
new Date(Date.now()).getDate()
) {
end =
new Date(
end + 'T' + new Date().getHours() + ':' + new Date().getMinutes(),
).getTime() / 1000;
} else {
end = new Date(end + 'T23:59').getTime() / 1000;
}
if (isNaN(start)) start = '';
if (isNaN(end)) end = Math.round(Date.now() / 1000);
if (end != '' && start != '' && end < start) {
Popup.alert('End date must be after start date', 'var(--error)');
return;
} else if (end > Math.round(Date.now() / 1000) || start > Math.round(Date.now() / 1000)) {
Popup.alert('Start and end date must be before today', 'var(--error)');
return;
}
const res = await GET(
`/memberattendancedata?businessId=${getBusinessId()}&tag=${tag}&role=${role}&start=${start}&end=${end}`,
);
const memberAttArr = await res.json();
const numRes = await GET(`/countAllEvents?businessId=${getBusinessId()}&tag=${tag}`);
const numRes = await GET(
`/countAllEvents?businessId=${getBusinessId()}&tag=${tag}&start=${start}&end=${end}`,
);
const numPastEvents = (await numRes.json())['total_count'];
runMemberStatsTable(memberAttArr, numPastEvents);
};
};

const res = await GET(`/memberattendancedata?businessId=${getBusinessId()}&tag=&role=`);
const res = await GET(
`/memberattendancedata?businessId=${getBusinessId()}&tag=&role=&start=&end=${Math.round(
Date.now() / 1000,
)}`,
);
const memberAttArr = await res.json();
const numRes = await GET(`/countAllEvents?businessId=${getBusinessId()}&tag=`);
const numRes = await GET(
`/countAllEvents?businessId=${getBusinessId()}&tag=&start=&end=${Math.round(
Date.now() / 1000,
)}`,
);
const numPastEvents = (await numRes.json())['total_count'];
runMemberStatsTable(memberAttArr, numPastEvents);

Expand Down
17 changes: 10 additions & 7 deletions server/Attendance.js
Original file line number Diff line number Diff line change
Expand Up @@ -310,8 +310,8 @@ router.get('/memberattendancedata', async function (request, response) {
const businessid = request.query.businessId;
let tag = '%,' + request.query.tag + ',%';
const role = request.query.role;
// const start = request.query.start;
// const end = request.query.end;
let start = request.query.start;
let end = request.query.end;
if (tag === '%,,%') tag = '';
const memberAttendance = await asyncAll(
`
Expand All @@ -326,15 +326,16 @@ router.get('/memberattendancedata', async function (request, response) {
AND Members.business_id = ?
AND Events.business_id = ?
AND Records.event_id = Events.id
AND Events.endtimestamp <= ?
AND (? = '' OR Members.role = ?)
AND (? = '' OR Events.tag LIKE ?)
AND (? = '' OR Events.starttimestamp >= ?)
AND (? = '' OR Events.endtimestamp <= ?)
GROUP BY
Records.user_id, Records.status
ORDER BY
Users.name ASC
`,
[businessid, businessid, businessid, Math.round(Date.now() / 1000), role, role, tag, tag],
[businessid, businessid, businessid, role, role, tag, tag, start, start, end, end],
);

response.send(
Expand All @@ -356,9 +357,10 @@ router.get('/countAllEvents', async function (request, response) {
if (!uid) return;

const businessid = request.query.businessId;
let start = request.query.start;
let end = request.query.end;
let tag = '%,' + request.query.tag + ',%';
if (tag === '%,,%') tag = '';
console.log(tag);
const num = await asyncGet(
`
SELECT
Expand All @@ -367,10 +369,11 @@ router.get('/countAllEvents', async function (request, response) {
Events
WHERE
business_id = ?
AND endtimestamp <= ?
AND (? = '' OR Events.starttimestamp >= ?)
AND (? = '' OR Events.endtimestamp <= ?)
AND (? = '' OR tag LIKE ?)
`,
[businessid, Math.round(Date.now() / 1000), tag, tag],
[businessid, start, start, end, end, tag, tag],
);
response.send(num);
});
Expand Down

0 comments on commit 50ce0db

Please sign in to comment.