data.js working correctly with weekly availabilities

This commit is contained in:
Dobromir Popov
2024-05-28 13:33:17 +03:00
parent 57a292a9f3
commit 3e6d898f78
2 changed files with 17 additions and 5 deletions

View File

@ -377,7 +377,10 @@ exports.getDateFormattedShort = function (date) {
} }
exports.getDateTimeFormatted = function (date) {
// const startTime = start.toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit', timeZone: 'Europe/Sofia' });
return exports.getISODateOnly(new Date(date)) + " " + exports.getTimeFormatted(date);
}
/*Todo: remove: /*Todo: remove:
toISOString toISOString

View File

@ -253,6 +253,7 @@ async function filterPublishersNew(selectFields, filterDate, isExactTime = false
} }
} }
} }
const dayOfWeekEnum = common.getDayOfWeekNameEnEnumForDate(filterTimeFrom);
const monthInfo = common.getMonthDatesInfo(filterDate); const monthInfo = common.getMonthDatesInfo(filterDate);
let prevMnt = new Date(filterDate) let prevMnt = new Date(filterDate)
@ -303,6 +304,7 @@ async function filterPublishersNew(selectFields, filterDate, isExactTime = false
if (filterTimeFrom) { // if no date is provided, we don't filter by date if (filterTimeFrom) { // if no date is provided, we don't filter by date
selectBase.assignments.where = { selectBase.assignments.where = {
shift: { shift: {
startTime: { gte: prevMnt }, startTime: { gte: prevMnt },
@ -325,6 +327,7 @@ async function filterPublishersNew(selectFields, filterDate, isExactTime = false
// startTime: { gte: filterTimeFrom }, // startTime: { gte: filterTimeFrom },
AND: [ AND: [
{ dayOfMonth: null }, { dayOfMonth: null },
{ dayofweek: dayOfWeekEnum },
// moved down to conditional filters // moved down to conditional filters
{ startTime: { lte: filterTimeTo } }, // startTime included { startTime: { lte: filterTimeTo } }, // startTime included
{ {
@ -356,7 +359,7 @@ async function filterPublishersNew(selectFields, filterDate, isExactTime = false
// no dayofweek or time filters here // no dayofweek or time filters here
} }
else { else {
let dayOfWeekEnum = common.getDayOfWeekNameEnEnumForDate(filterDate); //moved to upper qery as it is now also dependant on date filter
whereClause["availabilities"].some.OR[1].dayofweek = dayOfWeekEnum; whereClause["availabilities"].some.OR[1].dayofweek = dayOfWeekEnum;
//NOTE: we filter by date after we calculate the correct dates post query //NOTE: we filter by date after we calculate the correct dates post query
if (isExactTime) { if (isExactTime) {
@ -377,7 +380,7 @@ async function filterPublishersNew(selectFields, filterDate, isExactTime = false
where: whereClause, where: whereClause,
select: { select: {
...selectBase, ...selectBase,
availabilities: true availabilities: true // we select all availabilities here and should filter them later
} }
}); });
@ -385,10 +388,15 @@ async function filterPublishersNew(selectFields, filterDate, isExactTime = false
// include repeating weekly availabilities. generate occurrences for the month // include repeating weekly availabilities. generate occurrences for the month
// convert matching weekly availabilities to availabilities for the day to make further processing easier on the client. // convert matching weekly availabilities to availabilities for the day to make further processing easier on the client.
// we trust that the filtering was OK, so we use the dateFilter as date.
publishers.forEach(pub => { publishers.forEach(pub => {
pub.availabilities = pub.availabilities.map(avail => { pub.availabilities = pub.availabilities.map(avail => {
if (avail.dayOfMonth == null) { if (avail.dayOfMonth == null) {
// filter out repeating availabilities when on other day of week
if (filterTimeFrom) {
if (avail.dayofweek != dayOfWeekEnum) {
return null;
}
}
let newStart = new Date(filterDate); let newStart = new Date(filterDate);
newStart.setHours(avail.startTime.getHours(), avail.startTime.getMinutes(), 0, 0); newStart.setHours(avail.startTime.getHours(), avail.startTime.getMinutes(), 0, 0);
let newEnd = new Date(filterDate); let newEnd = new Date(filterDate);
@ -400,7 +408,8 @@ async function filterPublishersNew(selectFields, filterDate, isExactTime = false
} }
} }
return avail; return avail;
}); })
.filter(avail => avail !== null);
}); });