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); } } } }