From 83bd127ec153d3f8408643a053f635ca568455ee Mon Sep 17 00:00:00 2001 From: Diya Wadhwani Date: Sat, 29 Nov 2025 15:01:32 -0500 Subject: [PATCH] fix(hoursLogged): Fixed Hours Logged on Weekly Summaries Report --- .../WeeklySummariesReport/FormattedReport.jsx | 4 +- .../WeeklySummariesReport.jsx | 186 +++++++++--------- 2 files changed, 97 insertions(+), 93 deletions(-) diff --git a/src/components/WeeklySummariesReport/FormattedReport.jsx b/src/components/WeeklySummariesReport/FormattedReport.jsx index c195c48e38..6ecaa27f9c 100644 --- a/src/components/WeeklySummariesReport/FormattedReport.jsx +++ b/src/components/WeeklySummariesReport/FormattedReport.jsx @@ -293,7 +293,9 @@ function ReportDetails({ const ref = useRef(null); const cantEditJaeRelatedRecord = cantUpdateDevAdminDetails(summary.email, loggedInUserEmail); - const hoursLogged = (summary.totalSeconds[weekIndex] || 0) / 3600; + const rawSeconds = summary.totalSeconds[weekIndex]; + const hoursLogged = rawSeconds == null ? 0 : rawSeconds / 3600; + const isMeetCriteria = canSeeBioHighlight && summary.totalTangibleHrs > 80 && diff --git a/src/components/WeeklySummariesReport/WeeklySummariesReport.jsx b/src/components/WeeklySummariesReport/WeeklySummariesReport.jsx index b85f9a19c8..b57d420638 100644 --- a/src/components/WeeklySummariesReport/WeeklySummariesReport.jsx +++ b/src/components/WeeklySummariesReport/WeeklySummariesReport.jsx @@ -710,98 +710,100 @@ const WeeklySummariesReport = props => { .filter(([, isSelected]) => isSelected) .map(([color]) => color); - const temp = summaries.filter(summary => { - const { activeTab } = state; - const hoursLogged = (summary.totalSeconds[navItems.indexOf(activeTab)] || 0) / 3600; - - // 🛑 Add this block at the very top inside the filter - // if (summary?.isActive === false) { - // const lastWeekStart = moment() - // .tz('America/Los_Angeles') - // .startOf('week') - // .subtract(1, 'week') - // .toDate(); - // const lastWeekEnd = moment() - // .tz('America/Los_Angeles') - // .endOf('week') - // .subtract(1, 'week') - // .toDate(); - // const summaryStart = new Date(summary.startDate); - // const summaryEnd = new Date(summary.endDate); - // const isLastWeek = summaryStart <= lastWeekEnd && summaryEnd >= lastWeekStart; - - // if (!isLastWeek) { - // return false; // Skip inactive members unless their summary is from last week - // } - // } - if ( - summary?.isActive === false && - !doesSummaryBelongToWeek(summary.startDate, summary.endDate, weekIndex) - ) { - return false; - } - const isMeetCriteria = - summary.totalTangibleHrs > 80 && - summary.daysInTeam > 60 && - summary.bioPosted !== 'posted'; - const isBio = !selectedBioStatus || isMeetCriteria; - const isOverHours = - !selectedOverTime || - (summary.weeklycommittedHours > 0 && - hoursLogged > 0 && - hoursLogged >= summary.promisedHoursByWeek[navItems.indexOf(activeTab)]); - - // Add trophy filter logic - const summarySubmissionDate = moment() - .tz('America/Los_Angeles') - .endOf('week') - .subtract(weekIndex, 'week') - .format('YYYY-MM-DD'); - - const hasTrophy = - !selectedTrophies || - showTrophyIcon(summarySubmissionDate, summary?.startDate?.split('T')[0]); - - // Add special color filter logic - const matchesSpecialColor = - activeFilterColors.length === 0 || activeFilterColors.includes(summary.filterColor); - - // Filtered by Team Code and Extra Members - const isInSelectedCode = selectedCodesArray.includes(summary.teamCode); - const isInSelectedExtraMember = selectedExtraMembersArray.includes(summary._id); - const noFilterSelected = - selectedCodesArray.length === 0 && selectedExtraMembersArray.length === 0; - - let matchesLoggedHoursRange = true; - if (selectedLoggedHoursRange && selectedLoggedHoursRange.length > 0) { - matchesLoggedHoursRange = selectedLoggedHoursRange.some(range => { - switch (range.value) { - case '=0': - return hoursLogged === 0; - case '0-10': - return hoursLogged > 0 && hoursLogged <= 10; - case '10-20': - return hoursLogged > 10 && hoursLogged <= 20; - case '20-40': - return hoursLogged > 20 && hoursLogged <= 40; - case '>40': - return hoursLogged > 40; - default: - return true; - } - }); - } - return ( - (noFilterSelected || isInSelectedCode || isInSelectedExtraMember) && - (selectedColorsArray.length === 0 || - selectedColorsArray.includes(summary.weeklySummaryOption)) && - matchesSpecialColor && - isOverHours && - isBio && - hasTrophy && - matchesLoggedHoursRange - ); - }); + const temp = summaries + .map(s => ({ ...s })) + .filter(summary => { + const { activeTab } = state; + const hoursLogged = (summary.totalSeconds[navItems.indexOf(activeTab)] || 0) / 3600; + + // 🛑 Add this block at the very top inside the filter + // if (summary?.isActive === false) { + // const lastWeekStart = moment() + // .tz('America/Los_Angeles') + // .startOf('week') + // .subtract(1, 'week') + // .toDate(); + // const lastWeekEnd = moment() + // .tz('America/Los_Angeles') + // .endOf('week') + // .subtract(1, 'week') + // .toDate(); + // const summaryStart = new Date(summary.startDate); + // const summaryEnd = new Date(summary.endDate); + // const isLastWeek = summaryStart <= lastWeekEnd && summaryEnd >= lastWeekStart; + + // if (!isLastWeek) { + // return false; // Skip inactive members unless their summary is from last week + // } + // } + if ( + summary?.isActive === false && + !doesSummaryBelongToWeek(summary.startDate, summary.endDate, weekIndex) + ) { + return false; + } + const isMeetCriteria = + summary.totalTangibleHrs > 80 && + summary.daysInTeam > 60 && + summary.bioPosted !== 'posted'; + const isBio = !selectedBioStatus || isMeetCriteria; + const isOverHours = + !selectedOverTime || + (summary.weeklycommittedHours > 0 && + hoursLogged > 0 && + hoursLogged >= summary.promisedHoursByWeek[navItems.indexOf(activeTab)]); + + // Add trophy filter logic + const summarySubmissionDate = moment() + .tz('America/Los_Angeles') + .endOf('week') + .subtract(weekIndex, 'week') + .format('YYYY-MM-DD'); + + const hasTrophy = + !selectedTrophies || + showTrophyIcon(summarySubmissionDate, summary?.startDate?.split('T')[0]); + + // Add special color filter logic + const matchesSpecialColor = + activeFilterColors.length === 0 || activeFilterColors.includes(summary.filterColor); + + // Filtered by Team Code and Extra Members + const isInSelectedCode = selectedCodesArray.includes(summary.teamCode); + const isInSelectedExtraMember = selectedExtraMembersArray.includes(summary._id); + const noFilterSelected = + selectedCodesArray.length === 0 && selectedExtraMembersArray.length === 0; + + let matchesLoggedHoursRange = true; + if (selectedLoggedHoursRange && selectedLoggedHoursRange.length > 0) { + matchesLoggedHoursRange = selectedLoggedHoursRange.some(range => { + switch (range.value) { + case '=0': + return hoursLogged === 0; + case '0-10': + return hoursLogged > 0 && hoursLogged <= 10; + case '10-20': + return hoursLogged > 10 && hoursLogged <= 20; + case '20-40': + return hoursLogged > 20 && hoursLogged <= 40; + case '>40': + return hoursLogged > 40; + default: + return true; + } + }); + } + return ( + (noFilterSelected || isInSelectedCode || isInSelectedExtraMember) && + (selectedColorsArray.length === 0 || + selectedColorsArray.includes(summary.weeklySummaryOption)) && + matchesSpecialColor && + isOverHours && + isBio && + hasTrophy && + matchesLoggedHoursRange + ); + }); // Use Dict and Set for quick access const filteredTeamDict = {};