Weeks Within two dates:
Fri Feb 23 2024 14:25:12 GMT+0000 (Coordinated Universal Time)
Saved by @mdfaizi
let CheckDateLieWithin2Dates = (checkdate, from, to) => {
/* Instead of comparing the dates directly, compare the getTime() value of the date. The getTime() function returns the number of milliseconds since Jan 1, 1970 as an integer-- should be trivial to determine if one integer falls between two other integers.
*/
var checkdate = new Date(checkdate);
var from = new Date(from);
var to = new Date(to);
if (
checkdate.getTime() <= to.getTime() &&
checkdate.getTime() >= from.getTime()
) {
//log.debug("date lies inside");
return true;
} else {
//log.debug("date lies outside");
return false;
}
};
let startAndEndDateOfWeek = (wkDate) => {
var curr = new Date(wkDate); // get current date
log.debug("curr.getDate()", curr.getDate());
log.debug("curr.getDay()", curr.getDay());
var first = curr.getDate() - (curr.getDay() - 1); //to make monday first day -1
/**first can be - negative value also it means last month */
log.debug(first);
//setDate() method sets the day of the month for a specified date according to local time.In simple adds /subtract the days to the date.
//setDate() can handle negative values also and also more than 31 value also.
var firstday = new Date(curr.setDate(first)); //
log.debug("first date", firstday);
var firstDay_no = firstday.getDate();
log.debug("firstDay_no", firstDay_no);
var last = firstDay_no + 6; // last day is the first day no + 6
log.debug("last", last);
var lastday = new Date(curr.setDate(last)); //
log.debug("last date", lastday);
return {
start: firstday,
end: lastday,
};
};
let findAllWeeksBetween2dates = (startDate, EndDate) => {
var startDate = new Date(startDate);
var EndDate = new Date(EndDate);
var weeks = {};
var startDate_of_1st_week = startDate;
var i = 0;
while (true) {
weeks[i] = [startDate_of_1st_week];
var endDateof1stWeek = startAndEndDateOfWeek(startDate_of_1st_week);
var endDateof1stWeek = endDateof1stWeek.end;
if (endDateof1stWeek >= EndDate) {
weeks[i].push(EndDate);
break;
}
weeks[i].push(endDateof1stWeek);
var date = new Date(endDateof1stWeek);
// add a day
var secondWeekStartDate = date.setDate(date.getDate() + 1);
var secondWeekStartDate = new Date(secondWeekStartDate);
startDate_of_1st_week = secondWeekStartDate;
i += 1;
}
log.debug("weeks before formating=", weeks);
//format all dates in weeks object to MM/DD/YYYY using format module.
for (var key in weeks) {
for (var i = 0; i < weeks[key].length; i++) {
var date = new Date(weeks[key][i]);
var formattedDate = format.format({
value: date,
type: format.Type.DATE,
});
weeks[key][i] = formattedDate;
}
}
log.debug("weeks after formating=", weeks);
return weeks;
};
/**CONSOLIDATED FORMATING OF JSON OBJECT WEEKLY ADDED 04/05/2023*/
let WeeklyConsolidatedJson = (sampleData,period_starting_date,period_ending_date) => {
var start_end_dates_of_all_week = findAllWeeksBetween2dates(
period_starting_date,
period_ending_date
);
log.debug("start_end_dates_of_all_week", start_end_dates_of_all_week);
var newJson = {};
const names = [...new Set(Object.keys(sampleData))]; //...new Set( ) is used for removing duplicate names from the resultant array.
for (i in names) {
newJson[names[i]] = {};
}
log.debug(" newJson[n] = {};", newJson);
for (weekNo in start_end_dates_of_all_week) {
var start_end_dates_of_week = start_end_dates_of_all_week[weekNo];
var start_date_of_week = start_end_dates_of_week[0];
var end_date_of_week = start_end_dates_of_week[1];
for (var empName in sampleData) {
if (sampleData.hasOwnProperty(empName)) {
var val = sampleData[empName];
log.debug("empName", empName);
log.debug("val", val);
//iterate val
//iterate val
var json_wk_ST = {};
json_wk_ST[end_date_of_week + "-ST"] = {
billeddate_formatted: end_date_of_week.toString(),
employee: "",
TimesheetType: "Straight Time",
quantity: 0,
rate: 0,
amount: 0,
};
var json_wk_OT = {};
json_wk_OT[end_date_of_week + "-OT"] = {
billeddate_formatted: end_date_of_week.toString(),
employee: "",
TimesheetType: "Over Time",
quantity: 0,
rate: 0,
amount: 0,
};
var json_wk_DT = {};
json_wk_DT[end_date_of_week + "-DT"] = {
billeddate_formatted: end_date_of_week.toString(),
employee: "",
TimesheetType: "Double Time",
quantity: 0,
rate: 0,
amount: 0,
};
for (var key1 in val) {
if (val.hasOwnProperty(key1)) {
var val1 = val[key1];
log.debug("key1", key1);
log.debug("val1", val1);
var billeddate_formatted = val1.billeddate_formatted;
var employee = val1.employee;
var TimesheetType = val1.TimesheetType;
var quantity = val1.quantity;
var rate = val1.rate;
var amount = val1.amount;
if (
CheckDateLieWithin2Dates(
billeddate_formatted,
start_date_of_week,
end_date_of_week
) &&
TimesheetType == "1"
) {
log.debug("inside ST");
//employee name and rate also need to be added in the json object.And would be same for each timesheet Type.
json_wk_ST[end_date_of_week + "-ST"].employee = employee;
json_wk_ST[end_date_of_week + "-ST"].rate = rate;
json_wk_ST[end_date_of_week + "-ST"].amount =
Number(json_wk_ST[end_date_of_week + "-ST"].amount) +
Number(amount);
json_wk_ST[end_date_of_week + "-ST"].quantity =
Number(json_wk_ST[end_date_of_week + "-ST"].quantity) +
Number(quantity);
}
if (
CheckDateLieWithin2Dates(
billeddate_formatted,
start_date_of_week,
end_date_of_week
) &&
TimesheetType == "2"
) {
log.debug("inside OT");
json_wk_OT[end_date_of_week + "-OT"].employee = employee;
json_wk_OT[end_date_of_week + "-OT"].rate = rate;
json_wk_OT[end_date_of_week + "-OT"].amount =
Number(json_wk_OT[end_date_of_week + "-OT"].amount) +
Number(amount);
json_wk_OT[end_date_of_week + "-OT"].quantity =
Number(json_wk_OT[end_date_of_week + "-OT"].quantity) +
Number(quantity);
}
if (
CheckDateLieWithin2Dates(
billeddate_formatted,
start_date_of_week,
end_date_of_week
) &&
TimesheetType == "3"
) {
log.debug("inside DT");
json_wk_DT[end_date_of_week + "-DT"].employee = employee;
json_wk_DT[end_date_of_week + "-DT"].rate = rate;
json_wk_DT[end_date_of_week + "-DT"].amount =
Number(json_wk_DT[end_date_of_week + "-DT"].amount) +
Number(amount);
json_wk_DT[end_date_of_week + "-DT"].quantity =
Number(json_wk_DT[end_date_of_week + "-DT"].quantity) +
Number(quantity);
}
}
}
//check if amount and quantity is 0 then dont add it to newJson
if (
Number(json_wk_ST[end_date_of_week + "-ST"].amount) != 0 &&
Number(json_wk_ST[end_date_of_week + "-ST"].quantity) != 0
) {
newJson[empName][end_date_of_week + "-ST"] =
json_wk_ST[end_date_of_week + "-ST"];
}
if (
Number(json_wk_OT[end_date_of_week + "-OT"].amount) != 0 &&
Number(json_wk_OT[end_date_of_week + "-OT"].quantity) != 0
) {
newJson[empName][end_date_of_week + "-OT"] =
json_wk_OT[end_date_of_week + "-OT"];
}
if (
Number(json_wk_DT[end_date_of_week + "-DT"].amount) != 0 &&
Number(json_wk_DT[end_date_of_week + "-DT"].quantity) != 0
) {
newJson[empName][end_date_of_week + "-DT"] =
json_wk_DT[end_date_of_week + "-DT"];
}
}
}
}
log.debug("newJson=", newJson);
return newJson;
};



Comments