コード例 #1
0
        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));
 }