コード例 #1
0
        public async Task PlanningCase_Update_DoesUpdate()
        {
            // Arrange
            var planning = new Planning();

            await planning.Create(DbContext);

            var commonTranslationModels = new List <PlanningNameTranslation>()
            {
                new PlanningNameTranslation()
                {
                    Name     = Guid.NewGuid().ToString(),
                    Language = new Language()
                    {
                        LanguageCode = "da", Name = "Danish"
                    },
                    Planning = planning
                }
            };

            foreach (var translationModel in commonTranslationModels)
            {
                await translationModel.Create(DbContext);
            }

            var planningCase = new PlanningCase
            {
                MicrotingSdkSiteId  = 24,
                MicrotingSdkCaseId  = 34,
                MicrotingSdkeFormId = 234,
                Status     = 66,
                PlanningId = planning.Id,
            };

            await planningCase.Create(DbContext);

            // Act
            // itemCase = await DbContext.PlanningCases.AsNoTracking().FirstOrDefaultAsync();

            planningCase.Status = 77;
            await planningCase.Update(DbContext);

            var planningCases        = DbContext.PlanningCases.AsNoTracking().ToList();
            var planningCaseVersions = DbContext.PlanningCaseVersions.AsNoTracking().ToList();

            // Assert
            Assert.AreEqual(1, planningCases.Count);
            Assert.AreEqual(2, planningCaseVersions.Count);
            Assert.AreEqual(planningCase.MicrotingSdkSiteId, planningCases[0].MicrotingSdkSiteId);
            Assert.AreEqual(planningCase.MicrotingSdkCaseId, planningCases[0].MicrotingSdkCaseId);
            Assert.AreEqual(planningCase.MicrotingSdkeFormId, planningCases[0].MicrotingSdkeFormId);
            Assert.AreEqual(77, planningCases[0].Status);
            Assert.AreEqual(Constants.WorkflowStates.Created, planningCases[0].WorkflowState);
            Assert.AreEqual(planningCase.Id, planningCases[0].Id);
            Assert.AreEqual(planningCase.PlanningId, planningCases[0].PlanningId);
            Assert.AreEqual(2, planningCases[0].Version);

            Assert.AreEqual(planningCase.MicrotingSdkSiteId, planningCaseVersions[0].MicrotingSdkSiteId);
            Assert.AreEqual(planningCase.MicrotingSdkCaseId, planningCaseVersions[0].MicrotingSdkCaseId);
            Assert.AreEqual(planningCase.MicrotingSdkeFormId, planningCaseVersions[0].MicrotingSdkeFormId);
            Assert.AreEqual(66, planningCaseVersions[0].Status);
            Assert.AreEqual(Constants.WorkflowStates.Created, planningCaseVersions[0].WorkflowState);
            Assert.AreEqual(planningCase.Id, planningCaseVersions[0].PlanningCaseId);
            Assert.AreEqual(1, planningCaseVersions[0].Version);

            Assert.AreEqual(planningCase.MicrotingSdkSiteId, planningCaseVersions[1].MicrotingSdkSiteId);
            Assert.AreEqual(planningCase.MicrotingSdkCaseId, planningCaseVersions[1].MicrotingSdkCaseId);
            Assert.AreEqual(planningCase.MicrotingSdkeFormId, planningCaseVersions[1].MicrotingSdkeFormId);
            Assert.AreEqual(77, planningCaseVersions[1].Status);
            Assert.AreEqual(Constants.WorkflowStates.Created, planningCaseVersions[1].WorkflowState);
            Assert.AreEqual(planningCase.Id, planningCaseVersions[1].PlanningCaseId);
            Assert.AreEqual(planningCase.PlanningId, planningCaseVersions[0].PlanningId);
            Assert.AreEqual(2, planningCaseVersions[1].Version);
        }
        public async Task Handle(eFormCompleted message)
        {
            await using MicrotingDbContext sdkDbContext = _sdkCore.DbContextHelper.GetDbContext();
            Console.WriteLine($"Checking PlanningCaseSites with MicrotingSdkCaseId == {message.caseId}");
            Console.WriteLine($"Checking Cases with Id == {message.caseId}");
            Console.WriteLine($"Checking Cases with MicrotingCheckUid == {message.CheckId}");
            var planningCaseSite =
                await _dbContext.PlanningCaseSites.FirstOrDefaultAsync(x => x.MicrotingSdkCaseId == message.caseId);

            var dbCase = await sdkDbContext.Cases.FirstOrDefaultAsync(x => x.Id == message.caseId) ?? await sdkDbContext.Cases.FirstOrDefaultAsync(x => x.MicrotingCheckUid == message.CheckId);

            if (planningCaseSite == null)
            {
                Console.WriteLine($"Checking CheckListSites with MicrotingUid == {message.MicrotingUId}");
                var checkListSite = await sdkDbContext.CheckListSites.FirstOrDefaultAsync(x =>
                                                                                          x.MicrotingUid == message.MicrotingUId);

                if (checkListSite != null)
                {
                    Console.WriteLine($"Checking PlanningCaseSites with MicrotingCheckListSitId == {checkListSite.Id}");
                    planningCaseSite =
                        await _dbContext.PlanningCaseSites.FirstOrDefaultAsync(x =>
                                                                               x.MicrotingCheckListSitId == checkListSite.Id);
                }
            }
            if (planningCaseSite != null)
            {
                Planning planning =
                    await _dbContext.Plannings.FirstAsync(x => x.Id == planningCaseSite.PlanningId);

                Site site = await sdkDbContext.Sites.FirstAsync(x => x.Id == dbCase.SiteId);

                Language language = await sdkDbContext.Languages.FirstAsync(x => x.Id == site.LanguageId);

                if (dbCase.MicrotingUid != null && dbCase.MicrotingCheckUid != null)
                {
                    ReplyElement theCase =
                        await _sdkCore.CaseRead((int)dbCase.MicrotingUid, (int)dbCase.MicrotingCheckUid, language);

                    if (planning.RepeatType == RepeatType.Day && planning.RepeatEvery == 0)
                    {
                        var planningCase =
                            await _dbContext.PlanningCases.FirstOrDefaultAsync(x =>
                                                                               x.Id == planningCaseSite.PlanningCaseId);

                        if (planningCase != null && planningCase.Status != 100)
                        {
                            planningCase.Status = 100;
                            planningCase.MicrotingSdkCaseDoneAt = theCase.DoneAt;
                            planningCase.MicrotingSdkCaseId     = dbCase.Id;
                            planningCase.DoneByUserId           = theCase.DoneById;
                            planningCase.DoneByUserName         = site.Name;
                            planningCase.MicrotingSdkeFormId    = (int)dbCase.CheckListId;
                            planningCase.WorkflowState          = Constants.WorkflowStates.Processed;

                            planningCase = await SetFieldValue(planningCase, theCase.Id, language);

                            await planningCase.Update(_dbContext);
                        }
                        else
                        {
                            if (planningCase == null || planningCase.MicrotingSdkCaseId != dbCase.Id)
                            {
                                planningCase = new PlanningCase
                                {
                                    Status = 100,
                                    MicrotingSdkCaseDoneAt = theCase.DoneAt,
                                    MicrotingSdkCaseId     = dbCase.Id,
                                    DoneByUserId           = theCase.DoneById,
                                    DoneByUserName         = site.Name,
                                    WorkflowState          = Constants.WorkflowStates.Processed,
                                    MicrotingSdkeFormId    = (int)dbCase.CheckListId,
                                    PlanningId             = planning.Id
                                };
                                await planningCase.Create(_dbContext);

                                planningCase = await SetFieldValue(planningCase, theCase.Id, language);

                                await planningCase.Update(_dbContext);
                            }
                        }
                    }
                    else
                    {
                        planningCaseSite.Status = 100;
                        planningCaseSite        = await SetFieldValue(planningCaseSite, theCase.Id, language);

                        planningCaseSite.MicrotingSdkCaseDoneAt = theCase.DoneAt;
                        planningCaseSite.DoneByUserId           = theCase.DoneById;
                        var worker = await sdkDbContext.Workers.SingleAsync(x => x.Id == planningCaseSite.DoneByUserId);

                        planningCaseSite.DoneByUserName = $"{worker.FirstName} {worker.LastName}";
                        await planningCaseSite.Update(_dbContext);

                        var planningCase =
                            await _dbContext.PlanningCases.SingleOrDefaultAsync(x =>
                                                                                x.Id == planningCaseSite.PlanningCaseId);

                        if (planningCase.Status != 100)
                        {
                            planningCase.Status = 100;
                            planningCase.MicrotingSdkCaseDoneAt = theCase.DoneAt;
                            planningCase.MicrotingSdkCaseId     = dbCase.Id;
                            planningCase.DoneByUserId           = theCase.DoneById;
                            planningCase.DoneByUserName         = site.Name;
                            planningCase.WorkflowState          = Constants.WorkflowStates.Processed;
                            // planningCase.DoneByUserName = $"{site.Result.FirstName} {site.Result.LastName}";

                            planningCase = await SetFieldValue(planningCase, theCase.Id, language);

                            await planningCase.Update(_dbContext);
                        }

                        planning.DoneInPeriod = true;
                        await planning.Update(_dbContext);

                        await RetractFromMicroting(planningCase.Id);
                    }
                }
            }
        }