Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 99 additions & 2 deletions server/src/main/resources/db/dev/R__Load_testing_data.sql
Original file line number Diff line number Diff line change
Expand Up @@ -401,10 +401,30 @@ Values('0ead3434-82e7-47b4-a0ef-d1f44d01732b', '1343411e-26bf-4274-81ca-1b46ba3f
-- Mohit Bhatia Check-ins
---- 2020-09-29 - Active
INSERT INTO checkins
(id, teammemberid, pdlid, checkindate, completed) -- pdl: Michael Kimberlin
(id, teammemberid, pdlid, checkindate, completed) -- pdl: Michael Kimberlin (reassigned to Geetika Sharma)
VALUES
('8aa38f8c-2169-41b1-8548-1c2472fab7ff', 'b2d35288-7f1e-4549-aa2b-68396b162490', '6207b3fd-042d-49aa-9e28-dcc04f537c2d', '2020-09-29 15:40:29.04' , false);

---- NOW() - INTERVAL '2 weeks' - Completed
INSERT INTO checkins (id, teammemberid, pdlid, checkindate, completed)
VALUES (
'ce666f85-4289-4fcd-b3c2-365ab965e30a',
'b2d35288-7f1e-4549-aa2b-68396b162490',
'7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', -- pdl: Geetika Sharma
CURRENT_DATE - INTERVAL '2 weeks', -- 2 weeks ago
true
);

---- NOW() - INTERVAL '3 months' - Completed
INSERT INTO checkins (id, teammemberid, pdlid, checkindate, completed)
VALUES (
'13d76100-a6a4-4d87-82e3-9faac4ea1a09',
'b2d35288-7f1e-4549-aa2b-68396b162490',
'7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', -- pdl: Geetika Sharma
CURRENT_DATE - INTERVAL '3 months', -- 3 months ago
true
);


-- Zack Brown Check-ins
---- 2020-09-29 - Completed
Expand Down Expand Up @@ -453,8 +473,30 @@ INSERT INTO checkins
VALUES
('e60c3ca1-3894-4466-b418-9b743d058cc8', '67dc3a3b-5bfa-4759-997a-fb6bac98dcf3', '802cb1f5-a255-4236-8719-773fa53d79d9', '2020-06-20 11:32:29.04' , false);

-- Suman Maroju Check-ins
---- NOW() - INTERVAL '2 days' - Completed
INSERT INTO checkins (id, teammemberid, pdlid, checkindate, completed)
VALUES (
'34a48fe2-7db9-4e39-927c-ffe32467df71',
'1b4f99da-ef70-4a76-9b37-8bb783b749ad',
'7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', -- pdl: Geetika Sharma
CURRENT_DATE - INTERVAL '2 days', -- 2 days ago
true
);

---- NOW() - INTERVAL '5 months' - Completed
INSERT INTO checkins (id, teammemberid, pdlid, checkindate, completed)
VALUES (
'e70524e2-3f81-4f94-afae-a638aca0d3b5',
'1b4f99da-ef70-4a76-9b37-8bb783b749ad',
'7a6a2d4e-e435-4ec9-94d8-f1ed7c779498', -- pdl: Geetika Sharma
CURRENT_DATE - INTERVAL '5 months', -- 5 months ago
true
);


-- Julia Smith Check-ins
-- NOW() + INTERVAL '1 week'
---- NOW() + INTERVAL '1 week' - Active
INSERT INTO checkins (id, teammemberid, pdlid, checkindate, completed)
VALUES (
'b19a00d4-0225-412a-9456-d349ca293cdd',
Expand All @@ -464,6 +506,17 @@ VALUES (
false
);

---- NOW() - INTERVAL '3 months' - Completed
INSERT INTO checkins (id, teammemberid, pdlid, checkindate, completed)
VALUES (
'30026234-c228-48f5-aa93-53eab4b4dcef',
'59b790d2-fabc-11eb-9a03-0242ac130003',
'6207b3fd-042d-49aa-9e28-dcc04f537c2d', -- pdl: Michael Kimberlin
CURRENT_DATE - INTERVAL '3 months', -- 3 months ago from current date
true
);


-- Unreal Ulysses Check-ins
---- 2021-02-25 - Completed
INSERT INTO checkins
Expand Down Expand Up @@ -514,6 +567,50 @@ VALUES
('73a5e7b5-9292-45c0-a605-5b5c63230892', '553aa528-d5f6-4d15-bfb6-b53738dc7954', '59b790d2-fabc-11eb-9a03-0242ac130003', PGP_SYM_ENCRYPT('Julia''s first private note for Ulysses', '${aeskey}'));


-- Joe Warner Check-ins
---- NOW() - INTERVAL '1 day' - Completed
INSERT INTO checkins (id, teammemberid, pdlid, checkindate, completed)
VALUES (
'f5254f0d-97ba-4e5b-9c16-9a83bb545124',
'066b186f-1425-45de-89f2-4ddcc6ebe237',
'2c1b77e2-e2fc-46d1-92f2-beabbd28ee3d', -- pdl: Mark Volkmann
CURRENT_DATE - INTERVAL '1 day', -- 1 day ago
true
);

---- NOW() - INTERVAL '3 months' - Completed
INSERT INTO checkins (id, teammemberid, pdlid, checkindate, completed)
VALUES (
'962fa088-cf7d-476f-8d8d-625ce190de84',
'066b186f-1425-45de-89f2-4ddcc6ebe237',
'2c1b77e2-e2fc-46d1-92f2-beabbd28ee3d', -- pdl: Mark Volkmann
CURRENT_DATE - INTERVAL '3 months', -- 3 months ago
true
);


-- Holly Williams Check-ins
---- NOW() + INTERVAL '1 month' - Active
INSERT INTO checkins (id, teammemberid, pdlid, checkindate, completed)
VALUES (
'1490caa7-1856-4c08-b287-5aa3684952e6',
'8fa673c0-ca19-4271-b759-41cb9db2e83a',
'802cb1f5-a255-4236-8719-773fa53d79d9', -- pdl: John Meyerin
CURRENT_DATE + INTERVAL '1 month', -- 1 month from now
false
);

---- NOW() - INTERVAL '3 months' - Completed
INSERT INTO checkins (id, teammemberid, pdlid, checkindate, completed)
VALUES (
'a41d9472-69b7-412a-9f76-8d41dae2b165',
'8fa673c0-ca19-4271-b759-41cb9db2e83a', -- Holly Williams
'802cb1f5-a255-4236-8719-773fa53d79d9', -- pdl: John Meyerin
CURRENT_DATE - INTERVAL '3 months', -- 3 months ago
true
);


-- Guilds
insert into guild (id, name, description) -- Software Engineering
values('ba42d181-3c5b-4ee3-938d-be122c314bee', PGP_SYM_ENCRYPT('Software Engineering','${aeskey}'), PGP_SYM_ENCRYPT('Resource for Software Engineering Topics','${aeskey}'));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ import { selectFilteredCheckinsForTeamMemberAndPDL } from '../../../context/sele
import ExpandMore from '../../expand-more/ExpandMore.jsx';
import HorizontalLinearStepper from './HorizontalLinearStepper.jsx';
import TeamMemberMap from './TeamMemberMap.jsx';
import { getCheckinDate } from './checkin-utils.js';
import {
getCheckinDate,
statusForPeriodByMemberScheduling
} from './checkin-utils.js';

import { getQuarterBeginEnd } from '../../../helpers/index.js';

Expand Down Expand Up @@ -36,68 +39,51 @@ const CheckinsReport = ({ closed, pdl, planned, reportDate }) => {
);

const { name, id, members, workEmail, title } = pdl;

const handleExpandClick = () => setExpanded(!expanded);

/**
* Determine the status of the check-ins for a PDL during the reporting period.
* @param {Array} members - Members of the PDL.
* @returns {string} The status of check-ins.
* Determine the status of the check-ins for the period based on the members.
* @param {MemberProfile[]} members - The members of the PDL.
* @returns {CheckinStatus} The status of the check-ins for the period.
*/
const statusForPeriodByMembers = (members = []) => {
if (members.length === 0) return 'No Members';

const isCheckinCompletedDuringPeriod = (checkin, start, end) => {
const checkinDate = getCheckinDate(checkin);
return checkinDate >= start && checkinDate <= end && checkin.completed;
};

const { startOfQuarter, endOfQuarter } = getQuarterBeginEnd(reportDate);

const allCheckinsCompleted = member => {
const checkins = selectFilteredCheckinsForTeamMemberAndPDL(
state,
member.id,
id,
closed,
planned
);
return checkins.every(checkin =>
isCheckinCompletedDuringPeriod(checkin, startOfQuarter, endOfQuarter)
);
};

const allMembersCompleted = members.every(allCheckinsCompleted);
const allMembersCompleted = members.every(
member =>
statusForPeriodByMemberScheduling(
selectFilteredCheckinsForTeamMemberAndPDL(
state,
member.id,
id,
closed,
planned
),
reportDate
) === 'Completed'
);

// Done when all PDL team members have completed check-ins
if (allMembersCompleted) return 'Done';

const isCheckinInProgress = (checkin, start, end) => {
const checkinDate = getCheckinDate(checkin);
const endOfPeriod = new Date(end);
return (
checkinDate >= start &&
checkinDate <= end &&
!checkin.completed &&
checkinDate < endOfPeriod
);
};

const isInProgress = member => {
let checkins = selectFilteredCheckinsForTeamMemberAndPDL(
state,
member.id,
id,
closed,
planned
);
checkins = checkins.filter(checkin =>
isCheckinInProgress(checkin, startOfQuarter, endOfQuarter)
);
return checkins.length > 0;
};

const anyInProgress = members.some(isInProgress);
const anyInProgress = members.some(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I love use of the some and every Array methods!

member =>
statusForPeriodByMemberScheduling(
selectFilteredCheckinsForTeamMemberAndPDL(
state,
member.id,
id,
closed,
planned
),
reportDate
) === 'Scheduled'
);

// In progress when there is at least one scheduled check-in
if (anyInProgress) return 'In Progress';

// Not started when no check-ins are scheduled
return 'Not Started';
};

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import React, { useContext } from 'react';
import React, { useContext, useState } from 'react';
import {
Accordion,
AccordionSummary,
Avatar,
Chip,
Typography,
AccordionDetails
AccordionDetails,
Box
} from '@mui/material';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import { getAvatarURL } from '../../../api/api.js';
Expand All @@ -21,21 +22,10 @@ import './TeamMemberMap.css';
const TeamMemberMap = ({ members, id, closed, planned, reportDate }) => {
const { state } = useContext(AppContext);

const filteredMembers = members?.filter(member => {
const checkins = selectFilteredCheckinsForTeamMemberAndPDL(
state,
member.id,
id,
closed,
planned
);
return checkins && checkins.length > 0;
});

return (
<>
{filteredMembers?.length > 0 ? (
filteredMembers.map(member => {
<Box className="team-member-map">
{members?.length > 0 ? (
members.map(member => {
const checkins = selectFilteredCheckinsForTeamMemberAndPDL(
state,
member.id,
Expand Down Expand Up @@ -66,14 +56,20 @@ const TeamMemberMap = ({ members, id, closed, planned, reportDate }) => {
sx={{ display: { xs: 'none', sm: 'flex' } }}
className="team-member-map-summmary-latest-activity"
>
Latest Activity:{' '}
{getLastCheckinDate(checkins).toLocaleDateString(
navigator.language,
{
year: 'numeric',
month: '2-digit',
day: 'numeric'
}
{getLastCheckinDate(checkins).getFullYear() === 1969 ? (
<p>No activity available.</p>
) : (
<>
Latest Activity:{' '}
{getLastCheckinDate(checkins).toLocaleDateString(
navigator.language,
{
year: 'numeric',
month: '2-digit',
day: 'numeric'
}
)}
</>
)}
</Typography>
<Chip
Expand All @@ -93,13 +89,15 @@ const TeamMemberMap = ({ members, id, closed, planned, reportDate }) => {
</div>
</AccordionSummary>
<AccordionDetails id="accordion-checkin-date">
{checkins.map(checkin => (
<LinkSection
key={checkin.id}
checkin={checkin}
member={member}
/>
))}
{checkins.length === 0
? 'No check-in activity found for this member and PDL.'
: checkins.map(checkin => (
<LinkSection
key={checkin.id}
checkin={checkin}
member={member}
/>
))}
</AccordionDetails>
</Accordion>
);
Expand All @@ -109,7 +107,7 @@ const TeamMemberMap = ({ members, id, closed, planned, reportDate }) => {
<Typography>No team members associated with this PDL.</Typography>
</div>
)}
</>
</Box>
);
};

Expand Down
Loading