@@ -29,20 +29,24 @@ func (svc *ClassesService) GetFacilityHealthSummaries(args *models.QueryContext,
2929 return nil , err
3030 }
3131
32- missingByFacility := make (map [uint ]int64 , len (summaries ))
33- for _ , summary := range summaries {
34- facilityRef := summary .FacilityID
35- items , err := svc .GetMissingAttendanceForFacility (args , & facilityRef , days )
36- if err != nil {
37- return nil , err
38- }
39- if len (items ) == 0 {
32+ items , classByID , err := svc .getMissingAttendanceForFacilityData (args , facilityID , days )
33+ if err != nil {
34+ return nil , err
35+ }
36+
37+ missingByFacilityClasses := make (map [uint ]map [uint ]struct {})
38+ for _ , item := range items {
39+ classInfo , ok := classByID [item .ClassID ]
40+ if ! ok {
4041 continue
4142 }
42- classIDs := make (map [uint ]struct {}, len (items ))
43- for _ , item := range items {
44- classIDs [item .ClassID ] = struct {}{}
43+ if _ , exists := missingByFacilityClasses [classInfo .FacilityID ]; ! exists {
44+ missingByFacilityClasses [classInfo .FacilityID ] = make (map [uint ]struct {})
4545 }
46+ missingByFacilityClasses [classInfo.FacilityID ][item.ClassID ] = struct {}{}
47+ }
48+ missingByFacility := make (map [uint ]int64 , len (missingByFacilityClasses ))
49+ for facilityRef , classIDs := range missingByFacilityClasses {
4650 missingByFacility [facilityRef ] = int64 (len (classIDs ))
4751 }
4852
@@ -70,15 +74,23 @@ func getCanonicalHourAndMinute(occurrences []time.Time, timezone string) (int, i
7074}
7175
7276func (svc * ClassesService ) GetMissingAttendanceForFacility (args * models.QueryContext , facilityID * uint , days int ) ([]models.MissingAttendanceItem , error ) {
77+ items , _ , err := svc .getMissingAttendanceForFacilityData (args , facilityID , days )
78+ if err != nil {
79+ return nil , err
80+ }
81+ return items , nil
82+ }
83+
84+ func (svc * ClassesService ) getMissingAttendanceForFacilityData (args * models.QueryContext , facilityID * uint , days int ) ([]models.MissingAttendanceItem , map [uint ]models.MissingAttendanceClass , error ) {
7385 if days <= 0 {
7486 days = 3
7587 }
7688 classes , err := svc .db .GetActiveClassesForMissingAttendance (args , facilityID )
7789 if err != nil {
78- return nil , err
90+ return nil , nil , err
7991 }
8092 if len (classes ) == 0 {
81- return []models.MissingAttendanceItem {}, nil
93+ return []models.MissingAttendanceItem {}, map [ uint ]models. MissingAttendanceClass {}, nil
8294 }
8395
8496 loc , err := time .LoadLocation (args .Timezone )
@@ -98,7 +110,7 @@ func (svc *ClassesService) GetMissingAttendanceForFacility(args *models.QueryCon
98110
99111 events , err := svc .db .GetClassEventsWithOverrides (args , classIDs )
100112 if err != nil {
101- return nil , err
113+ return nil , nil , err
102114 }
103115
104116 type eventInstance struct {
@@ -146,7 +158,7 @@ func (svc *ClassesService) GetMissingAttendanceForFacility(args *models.QueryCon
146158 }
147159 }
148160 if len (instances ) == 0 {
149- return []models.MissingAttendanceItem {}, nil
161+ return []models.MissingAttendanceItem {}, classByID , nil
150162 }
151163
152164 eventIDs := make ([]uint , 0 , len (eventIDSet ))
@@ -160,7 +172,7 @@ func (svc *ClassesService) GetMissingAttendanceForFacility(args *models.QueryCon
160172
161173 attendanceCounts , err := svc .db .GetAttendanceCountsForEvents (args , eventIDs , dates )
162174 if err != nil {
163- return nil , err
175+ return nil , nil , err
164176 }
165177 attendanceMap := make (map [string ]int64 , len (attendanceCounts ))
166178 for _ , attendance := range attendanceCounts {
@@ -174,7 +186,7 @@ func (svc *ClassesService) GetMissingAttendanceForFacility(args *models.QueryCon
174186 }
175187 enrollments , err := svc .db .GetActiveEnrollmentsForClasses (args , classIDs )
176188 if err != nil {
177- return nil , err
189+ return nil , nil , err
178190 }
179191 enrollmentsByClass := make (map [uint ][]enrollmentWindow , len (classIDs ))
180192 for _ , enrollment := range enrollments {
@@ -222,7 +234,7 @@ func (svc *ClassesService) GetMissingAttendanceForFacility(args *models.QueryCon
222234 return items [i ].Date > items [j ].Date
223235 })
224236
225- return items , nil
237+ return items , classByID , nil
226238}
227239
228240func (svc * ClassesService ) GetTodaysSchedule (args * models.QueryContext , facilityID * uint ) ([]models.TodaysScheduleItem , error ) {
0 commit comments