From 3d9c3b21db2e4766d2895e437f5ddd0ff13ca0e5 Mon Sep 17 00:00:00 2001 From: Hemanth Kona Date: Wed, 29 May 2024 15:36:15 -0400 Subject: [PATCH 1/5] SS-788: Fix performance issue with loading Sheriff profile details - Lazy load the profile detail tab comonents, only query for data once you click on the tab ui --- .../usermanagement/SheriffController.cs | 96 ++++++++++++++++++- api/services/usermanagement/SheriffService.cs | 65 ++++++++++++- web/src/components/MyTeam/MyTeamMembers.vue | 6 +- web/src/components/MyTeam/Tabs/LeaveTab.vue | 53 +++++----- .../components/MyTeam/Tabs/LocationTab.vue | 46 +++++---- web/src/components/MyTeam/Tabs/RankTab.vue | 43 +++++---- .../MyTeam/Tabs/RoleAssignmentTab.vue | 34 ++++--- .../components/MyTeam/Tabs/TrainingTab.vue | 53 +++++----- 8 files changed, 281 insertions(+), 115 deletions(-) diff --git a/api/controllers/usermanagement/SheriffController.cs b/api/controllers/usermanagement/SheriffController.cs index 3778402e..a371fab8 100644 --- a/api/controllers/usermanagement/SheriffController.cs +++ b/api/controllers/usermanagement/SheriffController.cs @@ -37,7 +37,7 @@ public class SheriffController : UserController // ReSharper disable once InconsistentNaming private readonly long _uploadPhotoSizeLimitKB; - public SheriffController(SheriffService sheriffService, DutyRosterService dutyRosterService, ShiftService shiftService, UserService userUserService,TrainingService trainingService, IConfiguration configuration, SheriffDbContext db) : base(userUserService) + public SheriffController(SheriffService sheriffService, DutyRosterService dutyRosterService, ShiftService shiftService, UserService userUserService, TrainingService trainingService, IConfiguration configuration, SheriffDbContext db) : base(userUserService) { SheriffService = sheriffService; ShiftService = shiftService; @@ -92,6 +92,96 @@ public async Task> GetSheriffForTeam(Guid id) return Ok(sheriffDto); } + /// + /// Get Sheriff Identification data. + /// + /// Guid of the userid. + /// SheriffWithIdirDto + [HttpGet] + [PermissionClaimAuthorize(perm: Permission.Login)] + [Route("{id}/identification")] + public async Task> GetSheriffIdentification(Guid id) + { + Sheriff sheriffIdentification = await SheriffService.GetSheriffIdentification(id); + if (sheriffIdentification == null) return NotFound(CouldNotFindSheriffError); + if (!PermissionDataFiltersExtensions.HasAccessToLocation(User, Db, sheriffIdentification.HomeLocationId)) return Forbid(); + + SheriffWithIdirDto sheriffDto = sheriffIdentification.Adapt(); + //Prevent exposing Idirs to regular users. + sheriffDto.IdirName = User.HasPermission(Permission.EditIdir) ? sheriffIdentification.IdirName : null; + return Ok(sheriffDto); + } + + /// + /// Get Sheriff Leaves. + /// + /// Guid of the userid. + /// SheriffLeaveDto[] + [HttpGet] + [PermissionClaimAuthorize(perm: Permission.Login)] + [Route("{id}/leaves")] + public async Task>> GetSheriffLeaves(Guid id) + { + List sheriffLeave = await SheriffService.GetSheriffLeaves(id); + return Ok(sheriffLeave.Adapt>()); + } + + /// + /// Get Sheriff AwayLocations. + /// + /// Guid of the userid. + /// SheriffAwayLocationDto[] + [HttpGet] + [PermissionClaimAuthorize(perm: Permission.Login)] + [Route("{id}/awaylocations")] + public async Task>> GetSheriffAwayLocations(Guid id) + { + List sheriffAwayLocations = await SheriffService.GetSheriffAwayLocations(id); + return Ok(sheriffAwayLocations.Adapt>()); + } + + /// + /// Get Sheriff Ranks. + /// + /// Guid of the userid. + /// SheriffActingRankDto[] + [HttpGet] + [PermissionClaimAuthorize(perm: Permission.Login)] + [Route("{id}/actingranks")] + public async Task>> GetSheriffActingRanks(Guid id) + { + List sheriffActingRanks = await SheriffService.GetSheriffActingRanks(id); + return Ok(sheriffActingRanks.Adapt>()); + } + + /// + /// Get Sheriff Roles. + /// + /// Guid of the userid. + /// UserRoleDto[] + [HttpGet] + [PermissionClaimAuthorize(perm: Permission.Login)] + [Route("{id}/roles")] + public async Task>> GetSheriffRoles(Guid id) + { + List sheriffRoles = await SheriffService.GetSheriffRoles(id); + return Ok(sheriffRoles.Adapt>()); + } + + /// + /// Get Sheriff Trainings. + /// + /// Guid of the userid. + /// SheriffTrainingDto[] + [HttpGet] + [PermissionClaimAuthorize(perm: Permission.Login)] + [Route("{id}/trainings")] + public async Task>> GetSheriffTrainings(Guid id) + { + List sheriffTrainings = await SheriffService.GetSheriffTrainings(id); + return Ok(sheriffTrainings.Adapt>()); + } + /// /// Development route, do not use this in application. /// @@ -159,7 +249,7 @@ public async Task> UploadPhoto(Guid? id, string badgeNu [HttpPut] [Route("updateExcused")] - [PermissionClaimAuthorize(perm: Permission.GenerateReports)] + [PermissionClaimAuthorize(perm: Permission.GenerateReports)] public async Task> UpdateExcused(Sheriff excusedSheriff) { var sheriff = await SheriffService.UpdateSheriffExcused(excusedSheriff); @@ -296,7 +386,7 @@ public async Task> GetSheriffsTrainingReports(Tr public async Task TrainingExpiryAdjustment() { await TrainingService.TrainingExpiryAdjustment(); - return Ok(new { result = "success"}); + return Ok(new { result = "success" }); } #endregion SheriffTrainingReports diff --git a/api/services/usermanagement/SheriffService.cs b/api/services/usermanagement/SheriffService.cs index b55f0fff..4eb5f9cc 100644 --- a/api/services/usermanagement/SheriffService.cs +++ b/api/services/usermanagement/SheriffService.cs @@ -10,10 +10,12 @@ using SS.Api.helpers.extensions; using SS.Api.infrastructure.authorization; using SS.Api.infrastructure.exceptions; +using SS.Api.models.dto.generated; using SS.Api.Models.DB; using SS.Api.services.scheduling; using SS.Common.helpers.extensions; using SS.Db.models; +using SS.Db.models.auth; using SS.Db.models.scheduling; using SS.Db.models.sheriff; @@ -99,7 +101,7 @@ public async Task GetFilteredSheriffForTeams(Guid id) var minDateForAwayAndTraining = DateTimeOffset.UtcNow.AddDays(-daysPrevious); var sevenDaysFromNow = DateTimeOffset.UtcNow.AddDays(7); - return await Db.Sheriff.AsNoTracking().AsSingleQuery() + return await Db.Sheriff.AsNoTracking() .ApplyPermissionFilters(User, minDateForAwayAndTraining, sevenDaysFromNow, Db) .Include(s => s.HomeLocation) .Include(s => s.AwayLocation.Where(al => al.EndDate >= minDateForAwayAndTraining && al.ExpiryDate == null)) @@ -114,6 +116,63 @@ public async Task GetFilteredSheriffForTeams(Guid id) .SingleOrDefaultAsync(s => s.Id == id); } + public async Task GetSheriffIdentification(Guid id) + { + var daysPrevious = int.Parse(Configuration.GetNonEmptyValue("DaysInPastToIncludeAwayLocationAndTraining")); + var minDateForAwayAndTraining = DateTimeOffset.UtcNow.AddDays(-daysPrevious); + var sevenDaysFromNow = DateTimeOffset.UtcNow.AddDays(7); + + return await Db.Sheriff.AsNoTracking() + .ApplyPermissionFilters(User, minDateForAwayAndTraining, sevenDaysFromNow, Db) + .Include(s => s.HomeLocation) + .SingleOrDefaultAsync(s => s.Id == id); + } + + public async Task> GetSheriffLeaves(Guid id) + { + var daysPrevious = int.Parse(Configuration.GetNonEmptyValue("DaysInPastToIncludeAwayLocationAndTraining")); + var minDateForAwayAndTraining = DateTimeOffset.UtcNow.AddDays(-daysPrevious); + + return await Db.SheriffLeave.AsNoTracking() + .Where(l => l.SheriffId == id && l.EndDate >= minDateForAwayAndTraining && l.ExpiryDate == null) + .Include(l => l.LeaveType) + .ToListAsync(); + } + + public async Task> GetSheriffAwayLocations(Guid id) + { + var daysPrevious = int.Parse(Configuration.GetNonEmptyValue("DaysInPastToIncludeAwayLocationAndTraining")); + var minDateForAwayAndTraining = DateTimeOffset.UtcNow.AddDays(-daysPrevious); + + return await Db.SheriffAwayLocation.AsNoTracking() + .Where(al => al.SheriffId == id && al.EndDate >= minDateForAwayAndTraining && al.ExpiryDate == null) + .Include(al => al.Location) + .ToListAsync(); + } + + public async Task> GetSheriffActingRanks(Guid id) + { + return await Db.SheriffActingRank.AsNoTracking() + .Where(ar => ar.SheriffId == id && ar.ExpiryDate == null) + .ToListAsync(); + } + + public async Task> GetSheriffRoles(Guid id) + { + return await Db.UserRole.AsNoTracking() + .Where(ur => ur.UserId == id) + .Include(ur => ur.Role) + .ToListAsync(); + } + + public async Task> GetSheriffTrainings(Guid id) + { + return await Db.SheriffTraining.AsNoTracking() + .Where(t => t.SheriffId == id && t.ExpiryDate == null) + .Include(t => t.TrainingType) + .ToListAsync(); + } + public async Task UpdateSheriff(Sheriff sheriff, bool canEditIdir) { var savedSheriff = await Db.Sheriff.FindAsync(sheriff.Id); @@ -168,7 +227,7 @@ public async Task UpdateSheriffExcused(Sheriff sheriff) { var savedSheriff = await Db.Sheriff.FindAsync(sheriff.Id); savedSheriff.ThrowBusinessExceptionIfNull($"No {nameof(Sheriff)} with Id: {sheriff.Id}"); - savedSheriff.Excused = sheriff.Excused; + savedSheriff.Excused = sheriff.Excused; await Db.SaveChangesAsync(); return savedSheriff; } @@ -344,7 +403,7 @@ public async Task> GetSheriffsTraining() var daysPrevious = int.Parse(Configuration.GetNonEmptyValue("DaysInPastToIncludeAwayLocationAndTraining")); var minDateForAwayAndTraining = DateTimeOffset.UtcNow.AddDays(-daysPrevious); var sevenDaysFromNow = DateTimeOffset.UtcNow.AddDays(7); - + var sheriffQuery = Db.Sheriff.AsNoTracking() .AsSplitQuery() .ApplyPermissionFilters(User, minDateForAwayAndTraining, sevenDaysFromNow, Db) diff --git a/web/src/components/MyTeam/MyTeamMembers.vue b/web/src/components/MyTeam/MyTeamMembers.vue index 556a19f3..b26bde45 100644 --- a/web/src/components/MyTeam/MyTeamMembers.vue +++ b/web/src/components/MyTeam/MyTeamMembers.vue @@ -73,7 +73,7 @@ - + { if(response.data){ @@ -503,7 +503,7 @@ if(userJson.awayLocation && userJson.awayLocation.length>0) user.awayLocation = userJson.awayLocation; - + user.actingRank = userJson.actingRank; user.leave = userJson.leave; user.training = userJson.training; diff --git a/web/src/components/MyTeam/Tabs/LeaveTab.vue b/web/src/components/MyTeam/Tabs/LeaveTab.vue index 7be48cc5..17872a0f 100644 --- a/web/src/components/MyTeam/Tabs/LeaveTab.vue +++ b/web/src/components/MyTeam/Tabs/LeaveTab.vue @@ -215,33 +215,36 @@ } public extractLeaves () { - - const assignedLeavesJson = this.userToEdit.leave? this.userToEdit.leave: []; - for(const leaveJson of assignedLeavesJson){ - const leave = {} as userLeaveInfoType; - leave.id = leaveJson.id; - leave.leaveType = leaveJson.leaveType; - leave.leaveTypeId = leaveJson.leaveTypeId; - leave.leaveName = leaveJson.leaveType?leaveJson.leaveType.description: ''; - leave.comment = leaveJson.comment?leaveJson.comment:''; - - if(Vue.filter('isDateFullday')(leaveJson.startDate,leaveJson.endDate)){ - leave.isFullDay = true; - leave['_cellVariants'] = {isFullDay:'danger'} - } else{ - leave.isFullDay = false; - leave['_cellVariants'] = {isFullDay:'success'} + const url = `api/sheriff/${this.userToEdit.id}/leaves`; + + this.$http.get(url).then((response) => { + const assignedLeavesJson = response?.data ? response.data: []; + for(const leaveJson of assignedLeavesJson){ + const leave = {} as userLeaveInfoType; + leave.id = leaveJson.id; + leave.leaveType = leaveJson.leaveType; + leave.leaveTypeId = leaveJson.leaveTypeId; + leave.leaveName = leaveJson.leaveType?leaveJson.leaveType.description: ''; + leave.comment = leaveJson.comment?leaveJson.comment:''; + + if(Vue.filter('isDateFullday')(leaveJson.startDate,leaveJson.endDate)){ + leave.isFullDay = true; + leave['_cellVariants'] = {isFullDay:'danger'} + } else{ + leave.isFullDay = false; + leave['_cellVariants'] = {isFullDay:'success'} + } + + leave.startDate = moment(leaveJson.startDate).tz(this.timezone).format(); + leave.endDate = moment(leaveJson.endDate).tz(this.timezone).format(); + leave['_rowVariant'] = ''; + if(leave.endDate < this.currentTime) + leave['_rowVariant'] = 'info'; + this.assignedLeaves.push(leave); } - leave.startDate = moment(leaveJson.startDate).tz(this.timezone).format(); - leave.endDate = moment(leaveJson.endDate).tz(this.timezone).format(); - leave['_rowVariant'] = ''; - if(leave.endDate < this.currentTime) - leave['_rowVariant'] = 'info'; - this.assignedLeaves.push(leave); - } - - this.loadLeaveTypes(); + this.loadLeaveTypes(); + }); } public loadLeaveTypes() { diff --git a/web/src/components/MyTeam/Tabs/LocationTab.vue b/web/src/components/MyTeam/Tabs/LocationTab.vue index a9a69d07..130d947b 100644 --- a/web/src/components/MyTeam/Tabs/LocationTab.vue +++ b/web/src/components/MyTeam/Tabs/LocationTab.vue @@ -200,28 +200,32 @@ public extractAwayLocations () { - this.assignedAwayLocations = this.userToEdit.awayLocation? this.userToEdit.awayLocation: []; - for(const inx in this.assignedAwayLocations) - { - const location = this.getLocation(this.assignedAwayLocations[inx].locationId) - this.assignedAwayLocations[inx]['locationNm'] = location? location.name : ''; - - if(Vue.filter('isDateFullday')(this.assignedAwayLocations[inx].startDate,this.assignedAwayLocations[inx].endDate)){ - this.assignedAwayLocations[inx]['isFullDay'] = true; - this.assignedAwayLocations[inx]['_cellVariants'] = {isFullDay:'danger'} - }else{ - this.assignedAwayLocations[inx]['isFullDay'] = false; - this.assignedAwayLocations[inx]['_cellVariants'] = {isFullDay:'success'} + const url = `api/sheriff/${this.userToEdit.id}/awaylocations`; + + this.$http.get(url).then((response) => { + this.assignedAwayLocations = response.data? response.data: []; + for(const inx in this.assignedAwayLocations) + { + const location = this.getLocation(this.assignedAwayLocations[inx].locationId) + this.assignedAwayLocations[inx]['locationNm'] = location? location.name : ''; + + if(Vue.filter('isDateFullday')(this.assignedAwayLocations[inx].startDate,this.assignedAwayLocations[inx].endDate)){ + this.assignedAwayLocations[inx]['isFullDay'] = true; + this.assignedAwayLocations[inx]['_cellVariants'] = {isFullDay:'danger'} + }else{ + this.assignedAwayLocations[inx]['isFullDay'] = false; + this.assignedAwayLocations[inx]['_cellVariants'] = {isFullDay:'success'} + } + const timezone = location? location.timezone : 'UTC'; + this.currentTime = moment(new Date()).tz(timezone).format(); + this.assignedAwayLocations[inx].startDate = moment(this.assignedAwayLocations[inx].startDate).tz(timezone).format(); + this.assignedAwayLocations[inx].endDate = moment(this.assignedAwayLocations[inx].endDate).tz(timezone).format(); + this.currentTime = moment(new Date()).tz(timezone).format(); + this.assignedAwayLocations[inx]['_rowVariant'] = ''; + if(this.assignedAwayLocations[inx].endDate < this.currentTime) + this.assignedAwayLocations[inx]['_rowVariant'] = 'info'; } - const timezone = location? location.timezone : 'UTC'; - this.currentTime = moment(new Date()).tz(timezone).format(); - this.assignedAwayLocations[inx].startDate = moment(this.assignedAwayLocations[inx].startDate).tz(timezone).format(); - this.assignedAwayLocations[inx].endDate = moment(this.assignedAwayLocations[inx].endDate).tz(timezone).format(); - this.currentTime = moment(new Date()).tz(timezone).format(); - this.assignedAwayLocations[inx]['_rowVariant'] = ''; - if(this.assignedAwayLocations[inx].endDate < this.currentTime) - this.assignedAwayLocations[inx]['_rowVariant'] = 'info'; - } + }); } public confirmDeleteLocation(location) { diff --git a/web/src/components/MyTeam/Tabs/RankTab.vue b/web/src/components/MyTeam/Tabs/RankTab.vue index 4953db83..da06b711 100644 --- a/web/src/components/MyTeam/Tabs/RankTab.vue +++ b/web/src/components/MyTeam/Tabs/RankTab.vue @@ -190,27 +190,30 @@ public extractActingRanks () { - this.assignedActingRanks = this.userToEdit.actingRank? this.userToEdit.actingRank: []; - - - for(const inx in this.assignedActingRanks) - { - if(Vue.filter('isDateFullday')(this.assignedActingRanks[inx].startDate,this.assignedActingRanks[inx].endDate)){ - this.assignedActingRanks[inx]['isFullDay'] = true; - this.assignedActingRanks[inx]['_cellVariants'] = {isFullDay:'danger'} - }else{ - this.assignedActingRanks[inx]['isFullDay'] = false; - this.assignedActingRanks[inx]['_cellVariants'] = {isFullDay:'success'} + const url = `api/sheriff/${this.userToEdit.id}/actingranks`; + + this.$http.get(url).then((response) => { + this.assignedActingRanks = response.data? response.data: []; + + for(const inx in this.assignedActingRanks) + { + if(Vue.filter('isDateFullday')(this.assignedActingRanks[inx].startDate,this.assignedActingRanks[inx].endDate)){ + this.assignedActingRanks[inx]['isFullDay'] = true; + this.assignedActingRanks[inx]['_cellVariants'] = {isFullDay:'danger'} + }else{ + this.assignedActingRanks[inx]['isFullDay'] = false; + this.assignedActingRanks[inx]['_cellVariants'] = {isFullDay:'success'} + } + const timezone = this.assignedActingRanks[inx].timezone? this.assignedActingRanks[inx].timezone : 'UTC'; + this.currentTime = moment(new Date()).tz(timezone).format(); + this.assignedActingRanks[inx].startDate = moment(this.assignedActingRanks[inx].startDate).tz(timezone).format(); + this.assignedActingRanks[inx].endDate = moment(this.assignedActingRanks[inx].endDate).tz(timezone).format(); + this.currentTime = moment(new Date()).tz(timezone).format(); + this.assignedActingRanks[inx]['_rowVariant'] = ''; + if(this.assignedActingRanks[inx].endDate < this.currentTime) + this.assignedActingRanks[inx]['_rowVariant'] = 'info'; } - const timezone = this.assignedActingRanks[inx].timezone? this.assignedActingRanks[inx].timezone : 'UTC'; - this.currentTime = moment(new Date()).tz(timezone).format(); - this.assignedActingRanks[inx].startDate = moment(this.assignedActingRanks[inx].startDate).tz(timezone).format(); - this.assignedActingRanks[inx].endDate = moment(this.assignedActingRanks[inx].endDate).tz(timezone).format(); - this.currentTime = moment(new Date()).tz(timezone).format(); - this.assignedActingRanks[inx]['_rowVariant'] = ''; - if(this.assignedActingRanks[inx].endDate < this.currentTime) - this.assignedActingRanks[inx]['_rowVariant'] = 'info'; - } + }); } public addNewRank(){ diff --git a/web/src/components/MyTeam/Tabs/RoleAssignmentTab.vue b/web/src/components/MyTeam/Tabs/RoleAssignmentTab.vue index daae5361..e24d0e79 100644 --- a/web/src/components/MyTeam/Tabs/RoleAssignmentTab.vue +++ b/web/src/components/MyTeam/Tabs/RoleAssignmentTab.vue @@ -235,22 +235,26 @@ this.assignedRoles =[]; this.roleAssignError = false; - if (this.userToEdit.userRoles && this.userToEdit.userRoles.length>0) { - let userRole: userRoleJsonType; - for(userRole of this.userToEdit.userRoles) - { - this.assignedRoles.push({ - text:userRole.role.name, - desc: userRole.role.description, - value:userRole.role.id.toString(), - effectiveDate:moment(userRole.effectiveDate).tz(this.timezone).format(), - expiryDate:userRole.expiryDate?moment(userRole.expiryDate).tz(this.timezone).format():'' - }) + const url = `api/sheriff/${this.userToEdit.id}/roles`; + + this.$http.get(url).then((response) => { + if (response.data && response.data.length>0) { + let userRole: userRoleJsonType; + for(userRole of response.data) + { + this.assignedRoles.push({ + text:userRole.role.name, + desc: userRole.role.description, + value:userRole.role.id.toString(), + effectiveDate:moment(userRole.effectiveDate).tz(this.timezone).format(), + expiryDate:userRole.expiryDate?moment(userRole.expiryDate).tz(this.timezone).format():'' + }) + } } - } - - this.refreshTable++; - this.populateRolesDropdown(); + + this.refreshTable++; + this.populateRolesDropdown(); + }); } public populateRolesDropdown() { diff --git a/web/src/components/MyTeam/Tabs/TrainingTab.vue b/web/src/components/MyTeam/Tabs/TrainingTab.vue index 736e3bbf..782b08d7 100644 --- a/web/src/components/MyTeam/Tabs/TrainingTab.vue +++ b/web/src/components/MyTeam/Tabs/TrainingTab.vue @@ -273,32 +273,35 @@ } public extractTrainings (){ - - if(this.userToEdit.training) - for(const training of this.userToEdit.training) - { - const assignedTraining = {} as userTrainingInfoType; - assignedTraining.id = training.id; - assignedTraining.trainingType = training.trainingType; - assignedTraining.trainingTypeId = training.trainingTypeId; - assignedTraining.startDate = moment(training.startDate).tz(this.timezone).format(); - assignedTraining.endDate = moment(training.endDate).tz(this.timezone).format(); - assignedTraining.expiryDate = training.trainingCertificationExpiry; - assignedTraining.comment = training.comment; - assignedTraining.note = training['note']; - assignedTraining['_rowVariant'] = ''; - if(assignedTraining.endDate < this.currentTime) - assignedTraining['_rowVariant'] = 'info'; - - if(Vue.filter('isDateFullday')(assignedTraining.startDate,assignedTraining.endDate)){ - assignedTraining.isFullDay = true; - }else{ - assignedTraining.isFullDay = false; + const url = `api/sheriff/${this.userToEdit.id}/trainings`; + + this.$http.get(url).then((response) => { + if(response.data) + for(const training of response.data) + { + const assignedTraining = {} as userTrainingInfoType; + assignedTraining.id = training.id; + assignedTraining.trainingType = training.trainingType; + assignedTraining.trainingTypeId = training.trainingTypeId; + assignedTraining.startDate = moment(training.startDate).tz(this.timezone).format(); + assignedTraining.endDate = moment(training.endDate).tz(this.timezone).format(); + assignedTraining.expiryDate = training.trainingCertificationExpiry; + assignedTraining.comment = training.comment; + assignedTraining.note = training['note']; + assignedTraining['_rowVariant'] = ''; + if(assignedTraining.endDate < this.currentTime) + assignedTraining['_rowVariant'] = 'info'; + + if(Vue.filter('isDateFullday')(assignedTraining.startDate,assignedTraining.endDate)){ + assignedTraining.isFullDay = true; + }else{ + assignedTraining.isFullDay = false; + } + + this.assignedTrainings.push(assignedTraining) } - - this.assignedTrainings.push(assignedTraining) - } - this.loadTrainingTypes(); + this.loadTrainingTypes(); + }); } get filteredAssignedTrainings(){ From 662af0d10e9265d994519ebab4e5f818f1049a6b Mon Sep 17 00:00:00 2001 From: Hemanth Kona Date: Wed, 29 May 2024 15:40:08 -0400 Subject: [PATCH 2/5] revert removing AsSingleQuery --- api/services/usermanagement/SheriffService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/services/usermanagement/SheriffService.cs b/api/services/usermanagement/SheriffService.cs index 4eb5f9cc..bdabaa37 100644 --- a/api/services/usermanagement/SheriffService.cs +++ b/api/services/usermanagement/SheriffService.cs @@ -101,7 +101,7 @@ public async Task GetFilteredSheriffForTeams(Guid id) var minDateForAwayAndTraining = DateTimeOffset.UtcNow.AddDays(-daysPrevious); var sevenDaysFromNow = DateTimeOffset.UtcNow.AddDays(7); - return await Db.Sheriff.AsNoTracking() + return await Db.Sheriff.AsNoTracking().AsSingleQuery() .ApplyPermissionFilters(User, minDateForAwayAndTraining, sevenDaysFromNow, Db) .Include(s => s.HomeLocation) .Include(s => s.AwayLocation.Where(al => al.EndDate >= minDateForAwayAndTraining && al.ExpiryDate == null)) From 4a08dd1de9414465095f9e1fe0d362103ab13a71 Mon Sep 17 00:00:00 2001 From: Hemanth Kona Date: Wed, 29 May 2024 16:21:24 -0400 Subject: [PATCH 3/5] update dotnet version to 5.0.17 in workflows --- .github/workflows/api-dotnetcore.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/api-dotnetcore.yml b/.github/workflows/api-dotnetcore.yml index 5d137f53..7bcf4518 100644 --- a/.github/workflows/api-dotnetcore.yml +++ b/.github/workflows/api-dotnetcore.yml @@ -17,7 +17,7 @@ jobs: - name: Setup .NET Core uses: actions/setup-dotnet@v4 with: - dotnet-version: 3.1.101 + dotnet-version: 5.0.17 - name: Install dependencies run: dotnet restore working-directory: ${{env.working-directory}} From 30fe34bd718e6507b78a67d9869864a1da9bc8b9 Mon Sep 17 00:00:00 2001 From: Hemanth Kona Date: Thu, 30 May 2024 11:57:07 -0400 Subject: [PATCH 4/5] fix dotnet version in workflow --- .github/workflows/api-dotnetcore.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/api-dotnetcore.yml b/.github/workflows/api-dotnetcore.yml index 7bcf4518..3a950299 100644 --- a/.github/workflows/api-dotnetcore.yml +++ b/.github/workflows/api-dotnetcore.yml @@ -17,7 +17,7 @@ jobs: - name: Setup .NET Core uses: actions/setup-dotnet@v4 with: - dotnet-version: 5.0.17 + dotnet-version: 5.x - name: Install dependencies run: dotnet restore working-directory: ${{env.working-directory}} From 811ed53829250d836f2088bc527e420f0ff6b54d Mon Sep 17 00:00:00 2001 From: Hemanth Kona Date: Thu, 30 May 2024 12:51:29 -0400 Subject: [PATCH 5/5] fix vue build --- .github/workflows/app-vue.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/app-vue.yml b/.github/workflows/app-vue.yml index 9fe7afe9..cd9975c2 100644 --- a/.github/workflows/app-vue.yml +++ b/.github/workflows/app-vue.yml @@ -24,7 +24,7 @@ jobs: uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - - run: npm ci + - run: npm install && npm ci working-directory: ${{env.working-directory}} - run: npm run build --if-present working-directory: ${{env.working-directory}}