public async Task <OperationDataResult <PairingsModel> > GetAllPairings(PairingRequestModel pairingRequestModel) { try { var sdkCore = await _coreService.GetCore(); await using var sdkDbContext = sdkCore.DbContextHelper.GetDbContext(); var sitesQuery = sdkDbContext.Sites .Where(x => x.WorkflowState != Constants.WorkflowStates.Removed) .AsNoTracking(); if (pairingRequestModel.SiteIds.Any()) { sitesQuery = sitesQuery.Where(x => pairingRequestModel.SiteIds.Contains(x.Id)); } var deviceUsers = await sitesQuery.Select(x => new CommonDictionaryModel { Id = x.Id, Name = x.Name, }).ToListAsync(); var pairingQuery = _dbContext.Plannings .Where(x => x.SdkFolderId != null) .Where(x => x.SdkFolderId != 0) .Where(x => x.IsLocked == false) .Where(x => x.IsEditable == true) .Where(x => x.IsHidden == false) .AsQueryable(); if (pairingRequestModel.TagIds.Any()) { foreach (var tagId in pairingRequestModel.TagIds) { pairingQuery = pairingQuery.Where(x => x.PlanningsTags.Any(y => y.PlanningTagId == tagId && y.WorkflowState != Constants.WorkflowStates.Removed)); } } var language = await _userService.GetCurrentUserLanguage(); var pairing = await pairingQuery .Where(x => x.WorkflowState != Constants.WorkflowStates.Removed) .Select(x => new PairingModel { PlanningId = x.Id, PlanningName = x.NameTranslations .Where(y => y.WorkflowState != Constants.WorkflowStates.Removed) .Where(y => y.Language.Id == language.Id) .Select(y => y.Name) .FirstOrDefault(), PairingValues = x.PlanningSites .Where(y => y.WorkflowState != Constants.WorkflowStates.Removed) .Select(y => new PairingValueModel { DeviceUserId = y.SiteId, Paired = true }).ToList(), }).ToListAsync(); // Add users who is not paired foreach (var pairingModel in pairing) { // get status last executed case for planning foreach (var pairingModelPairingValue in pairingModel.PairingValues) { var planningCaseSite = await _dbContext.PlanningCaseSites .CustomOrderByDescending("UpdatedAt") .Where(z => z.PlanningId == pairingModel.PlanningId) .Where(z => z.WorkflowState != Constants.WorkflowStates.Removed) .Where(z => z.MicrotingSdkSiteId == pairingModelPairingValue.DeviceUserId) .FirstOrDefaultAsync(); //if (pairingModelPairingValue.DeviceUserId == planningCaseSite.MicrotingSdkSiteId && // pairingModelPairingValue.Paired) //{ if (planningCaseSite != null) { pairingModelPairingValue.LatestCaseStatus = planningCaseSite.Status; pairingModelPairingValue.PlanningCaseSiteId = planningCaseSite.Id; } //} } // Add users foreach (var deviceUser in deviceUsers) { if (deviceUser.Id != null && pairingModel.PairingValues.All(x => x.DeviceUserId != deviceUser.Id)) { var pairingValue = new PairingValueModel { DeviceUserId = (int)deviceUser.Id, Paired = false, }; pairingModel.PairingValues.Add(pairingValue); } } pairingModel.PairingValues = pairingModel.PairingValues .OrderBy(x => x.DeviceUserId) .ToList(); } // Build result var result = new PairingsModel() { DeviceUsers = deviceUsers.Select(x => x.Name).ToList(), Pairings = pairing, }; return(new OperationDataResult <PairingsModel>( true, result)); } catch (Exception e) { Trace.TraceError(e.Message); return(new OperationDataResult <PairingsModel>(false, _itemsPlanningLocalizationService.GetString("ErrorWhileObtainingPlanningPairings"))); } }
public async Task <OperationDataResult <PairingsModel> > GetAllPairings([FromBody] PairingRequestModel requestModel) { return(await _pairingService.GetAllPairings(requestModel)); }