@@ -13,7 +13,7 @@ import {
13
13
DisbursementOveraward ,
14
14
DisbursementOverawardOriginType ,
15
15
} from "@sims/sims-db" ;
16
- import { DataSource , EntityManager } from "typeorm" ;
16
+ import { Brackets , DataSource , EntityManager } from "typeorm" ;
17
17
import { StudentUserToken } from "../../auth/userToken.interface" ;
18
18
import { LoggerService , InjectLogger } from "@sims/utilities/logger" ;
19
19
import { removeWhiteSpaces , transformAddressDetails } from "../../utilities" ;
@@ -438,17 +438,21 @@ export class StudentService extends RecordDataModelService<Student> {
438
438
}
439
439
440
440
/**
441
- * Search students based on the search criteria.
441
+ * Search students based on the search criteria and institution id if provided .
442
442
* @param searchCriteria options to search by firstName,
443
443
* lastName, appNumber or sin.
444
- * @returns list of students.
444
+ * @param institutionId id of the institution that the student applied to.
445
+ * @returns list of student details.
445
446
*/
446
- async searchStudentApplication ( searchCriteria : {
447
- firstName ?: string ;
448
- lastName ?: string ;
449
- appNumber ?: string ;
450
- sin ?: string ;
451
- } ) : Promise < Student [ ] > {
447
+ async searchStudent (
448
+ searchCriteria : {
449
+ firstName ?: string ;
450
+ lastName ?: string ;
451
+ appNumber ?: string ;
452
+ sin ?: string ;
453
+ } ,
454
+ institutionId ?: number ,
455
+ ) : Promise < Student [ ] > {
452
456
const searchQuery = this . repo
453
457
. createQueryBuilder ( "student" )
454
458
. select ( [
@@ -457,16 +461,48 @@ export class StudentService extends RecordDataModelService<Student> {
457
461
"user.firstName" ,
458
462
"user.lastName" ,
459
463
"sinValidation.sin" ,
460
- ] )
461
- . leftJoin (
464
+ ] ) ;
465
+ if ( institutionId ) {
466
+ searchQuery
467
+ . innerJoin (
468
+ Application ,
469
+ "application" ,
470
+ "application.student.id = student.id" ,
471
+ )
472
+ . leftJoin ( "application.location" , "pirLocation" )
473
+ . leftJoin ( "pirLocation.institution" , "pirInstitution" )
474
+ . leftJoin ( "application.currentAssessment" , "studentAssessment" )
475
+ . leftJoin ( "studentAssessment.offering" , "offering" )
476
+ . leftJoin ( "offering.institutionLocation" , "offeringLocation" )
477
+ . leftJoin ( "offeringLocation.institution" , "offeringInstitution" ) ;
478
+ } else {
479
+ searchQuery . leftJoin (
462
480
Application ,
463
481
"application" ,
464
482
"application.student.id = student.id" ,
465
- )
483
+ ) ;
484
+ }
485
+ searchQuery
466
486
. innerJoin ( "student.user" , "user" )
467
487
. innerJoin ( "student.sinValidation" , "sinValidation" )
468
488
. where ( "user.isActive = true" ) ;
469
-
489
+ if ( institutionId ) {
490
+ searchQuery . andWhere (
491
+ new Brackets ( ( qb ) => {
492
+ qb . where ( "offeringInstitution.id = :institutionId" , {
493
+ institutionId,
494
+ } ) . orWhere ( "pirInstitution.id = :institutionId" , { institutionId } ) ;
495
+ } ) ,
496
+ ) ;
497
+ }
498
+ if ( institutionId || searchCriteria . appNumber ) {
499
+ searchQuery . andWhere (
500
+ "application.applicationStatus != :overwrittenStatus" ,
501
+ {
502
+ overwrittenStatus : ApplicationStatus . Overwritten ,
503
+ } ,
504
+ ) ;
505
+ }
470
506
if ( searchCriteria . sin ) {
471
507
searchQuery . andWhere ( "sinValidation.sin = :sin" , {
472
508
sin : removeWhiteSpaces ( searchCriteria . sin ) ,
@@ -483,13 +519,9 @@ export class StudentService extends RecordDataModelService<Student> {
483
519
} ) ;
484
520
}
485
521
if ( searchCriteria . appNumber ) {
486
- searchQuery
487
- . andWhere ( "application.applicationNumber Ilike :appNumber" )
488
- . andWhere ( "application.applicationStatus != :overwrittenStatus" )
489
- . setParameters ( {
490
- appNumber : `%${ searchCriteria . appNumber } %` ,
491
- overwrittenStatus : ApplicationStatus . Overwritten ,
492
- } ) ;
522
+ searchQuery . andWhere ( "application.applicationNumber Ilike :appNumber" , {
523
+ appNumber : `%${ searchCriteria . appNumber } %` ,
524
+ } ) ;
493
525
}
494
526
return searchQuery . getMany ( ) ;
495
527
}
0 commit comments