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