@@ -319,7 +319,7 @@ private void calculateFilteredStatistics() {
319319 }
320320
321321 // For completed assessments, count by assessor
322- if ( (" Completed" .equals (status ) || status == null && assessment .getCompleted () != null || status == "Open" && assessment .getCompleted () != null ) && assessment .getAssessor () != null ) {
322+ if ( (( "Complete" . equals ( status ) || " Completed" .equals (status ) ) || status == null && assessment .getCompleted () != null || status == "Open" && assessment .getCompleted () != null ) && assessment .getAssessor () != null ) {
323323 for (User assessor : assessment .getAssessor ()) {
324324 String assessorName = assessor .getFname () + " " + assessor .getLname ();
325325 filteredAssessorStats .put (assessorName ,
@@ -364,6 +364,8 @@ private void calculateFilteredStatistics() {
364364
365365 private void performAssessmentSearch () {
366366 List <Assessment > results ;
367+ SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd'T'HH:mm:ssZ" );
368+ StringBuilder query = new StringBuilder ("{" );
367369
368370 // If not searching, get current month's assessments
369371 if (!"search" .equals (searchAction )) {
@@ -374,33 +376,46 @@ private void performAssessmentSearch() {
374376 cal .set (Calendar .MINUTE , 0 );
375377 cal .set (Calendar .SECOND , 0 );
376378 cal .set (Calendar .MILLISECOND , 0 );
377- Date monthStart = cal .getTime ();
379+ startDate = cal .getTime ();
378380
379381 cal .add (Calendar .MONTH , 1 );
380382 cal .add (Calendar .DAY_OF_MONTH , -1 );
381383 cal .set (Calendar .HOUR_OF_DAY , 23 );
382384 cal .set (Calendar .MINUTE , 59 );
383385 cal .set (Calendar .SECOND , 59 );
384- Date monthEnd = cal .getTime ();
386+ endDate = cal .getTime ();
387+
385388
386389 // Query assessments for current month
387- results = em .createQuery ("from Assessment where start >= :monthStart and start <= :monthEnd order by start desc" , Assessment .class )
388- .setParameter ("monthStart" , monthStart )
389- .setParameter ("monthEnd" , monthEnd )
390- .getResultList ();
390+ query .append ("$and: [" );
391+ query .append (" { \" start\" : {$lte: ISODate(\" " ).append (sdf .format (endDate )).append ("\" )}}, " );
392+ query .append (" { $or: [ " );
393+ query .append (" { \" completed\" : { $exists: true, $gte: ISODate(\" " )
394+ .append (sdf .format (startDate )).append ("\" )}}" );
395+ query .append (" ," );
396+ query .append (" { \" completed\" : {$exists: false}}," );
397+ query .append (" ]}" );
398+ query .append ("]}" );
399+ results = em .createNativeQuery (query .toString (), Assessment .class ).getResultList ();
391400 searchResults = results ;
392401 return ;
393402 }
394403
395404 // Build MongoDB query for search mode
396- SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd'T'HH:mm:ssZ" );
397- StringBuilder query = new StringBuilder ("{" );
398405 boolean hasConditions = false ;
399406
400407 // Build date range condition
401408 if (startDate != null && endDate != null ) {
402- query .append ("\" start\" : {$lte: ISODate(\" " ).append (sdf .format (endDate )).append ("\" )}, " );
403- query .append ("\" end\" : {$gte: ISODate(\" " ).append (sdf .format (startDate )).append ("\" )}" );
409+ endDate .setDate (endDate .getDate ()+1 );
410+ query .append ("$and: [" );
411+ query .append (" { \" start\" : {$lte: ISODate(\" " ).append (sdf .format (endDate )).append ("\" )}}, " );
412+ query .append (" { $or: [ " );
413+ query .append (" { \" completed\" : { $exists: true, $gte: ISODate(\" " )
414+ .append (sdf .format (startDate )).append ("\" )}}" );
415+ query .append (" ," );
416+ query .append (" { \" completed\" : {$exists: false}}," );
417+ query .append (" ]}" );
418+ query .append ("]" );
404419 hasConditions = true ;
405420 }
406421
0 commit comments