public async Task Update(AppointmentPnDbContext dbContext) { AppointmentSite appointmentSite = dbContext.AppointmentSites.FirstOrDefault(x => x.Id == Id); if (appointmentSite == null) { throw new NullReferenceException($"Could not find AppointmentSite with {Id}"); } appointmentSite.AppointmentId = AppointmentId; appointmentSite.MicrotingSiteUid = MicrotingSiteUid; appointmentSite.ExceptionString = ExceptionString; appointmentSite.SdkCaseId = SdkCaseId; appointmentSite.ProcessingState = ProcessingState; appointmentSite.Completed = Completed; appointmentSite.WorkflowState = WorkflowState; appointmentSite.UpdatedByUserId = UpdatedByUserId; if (dbContext.ChangeTracker.HasChanges()) { appointmentSite.UpdatedAt = DateTime.UtcNow; appointmentSite.Version += 1; dbContext.SaveChanges(); dbContext.AppointmentSiteVersions.Add(MapVersions(appointmentSite)); dbContext.SaveChanges(); } }
public async Task <OperationResult> Create(AppointmentModel appointmentModel) { using (var transaction = await _dbContext.Database.BeginTransactionAsync()) { try { if (appointmentModel.ExpireAt == null || appointmentModel.StartAt == null || appointmentModel.ExpireAt <= appointmentModel.StartAt || appointmentModel.StartAt <= DateTime.UtcNow) { return(new OperationResult( false, _appointmentLocalizationService.GetString("AppointmentDateNotCorrect"))); } var appointment = new Entities.Appointment { CreatedAt = DateTime.UtcNow, CreatedByUserId = UserId, ExpireAt = appointmentModel.ExpireAt, StartAt = appointmentModel.StartAt, Info = appointmentModel.Info, Description = appointmentModel.Description, Title = appointmentModel.Title, ColorHex = appointmentModel.ColorHex, RepeatEvery = appointmentModel.RepeatEvery, RepeatType = appointmentModel.RepeatType, RepeatUntil = appointmentModel.RepeatUntil, SdkeFormId = appointmentModel.eFormId }; await appointment.Create(_dbContext); foreach (var siteUid in appointmentModel.SiteUids) { var appointmentSite = new Entities.AppointmentSite() { AppointmentId = appointment.Id, MicrotingSiteUid = siteUid }; await appointmentSite.Create(_dbContext); } transaction.Commit(); return(new OperationResult( true, _appointmentLocalizationService.GetString("AppointmentCreatedSuccessfully"))); } catch (Exception e) { transaction.Rollback(); Trace.TraceError(e.Message); return(new OperationResult(false, _appointmentLocalizationService.GetString("ErrorWhileCreatingAppointment"))); } } }
private AppointmentSiteVersion MapVersions(AppointmentSite appointmentSite) { AppointmentSiteVersion appointmentSiteVersion = new AppointmentSiteVersion() { AppointmentId = appointmentSite.AppointmentId, MicrotingSiteUid = appointmentSite.MicrotingSiteUid, ExceptionString = appointmentSite.ExceptionString, SdkCaseId = appointmentSite.SdkCaseId, ProcessingState = appointmentSite.ProcessingState, Completed = appointmentSite.Completed, AppointmentSiteId = appointmentSite.Id, Version = appointmentSite.Version, CreatedAt = appointmentSite.CreatedAt, CreatedByUserId = appointmentSite.CreatedByUserId, UpdatedAt = appointmentSite.UpdatedAt, UpdatedByUserId = appointmentSite.UpdatedByUserId, WorkflowState = appointmentSite.WorkflowState }; return(appointmentSiteVersion); }
public async Task Delete(AppointmentPnDbContext dbContext) { AppointmentSite appointmentSite = dbContext.AppointmentSites.FirstOrDefault(x => x.Id == Id); if (appointmentSite == null) { throw new NullReferenceException($"Could not find AppointmentSite with {Id}"); } appointmentSite.WorkflowState = Constants.WorkflowStates.Removed; if (dbContext.ChangeTracker.HasChanges()) { appointmentSite.UpdatedAt = DateTime.UtcNow; appointmentSite.Version += 1; dbContext.SaveChanges(); dbContext.AppointmentSiteVersions.Add(MapVersions(appointmentSite)); dbContext.SaveChanges(); } }
public async Task <OperationResult> Update(AppointmentModel appointmentModel) { using (var transaction = await _dbContext.Database.BeginTransactionAsync()) { try { Debugger.Break(); var appointment = await _dbContext.Appointments .Include(x => x.AppointmentSites) .Include(x => x.AppointmentPrefillFieldValues) .FirstOrDefaultAsync(x => x.Id == appointmentModel.Id); if (appointment.StartAt <= DateTime.UtcNow) { return(new OperationResult( false, _appointmentLocalizationService.GetString("CannotEditAppointment"))); } if (appointmentModel.ExpireAt == null || appointmentModel.StartAt == null || appointmentModel.ExpireAt <= appointmentModel.StartAt || appointmentModel.StartAt <= DateTime.UtcNow) { return(new OperationResult( false, _appointmentLocalizationService.GetString("AppointmentDateNotCorrect"))); } if (appointmentModel.ExpireAt > appointmentModel.RepeatUntil) { appointmentModel.RepeatUntil = appointmentModel.ExpireAt; } appointment.UpdatedAt = DateTime.UtcNow; appointment.UpdatedByUserId = UserId; appointment.ExpireAt = appointmentModel.ExpireAt; appointment.StartAt = appointmentModel.StartAt; appointment.Info = appointmentModel.Info; appointment.Description = appointmentModel.Description; appointment.Title = appointmentModel.Title; appointment.ColorHex = appointmentModel.ColorHex; appointment.RepeatEvery = appointmentModel.RepeatEvery; appointment.RepeatType = appointmentModel.RepeatType; appointment.RepeatUntil = appointmentModel.RepeatUntil; appointment.SdkeFormId = appointmentModel.eFormId; await appointment.Update(_dbContext); var asToDelete = appointment.AppointmentSites .Where(s => appointmentModel.SiteUids.All(x => x != s.MicrotingSiteUid)); foreach (var site in asToDelete) { await site.Delete(_dbContext); } var asToCreate = appointmentModel.SiteUids .Where(s => appointment.AppointmentSites.All(x => x.MicrotingSiteUid != s)); foreach (var siteUid in asToCreate) { var appointmentSite = new Entities.AppointmentSite() { AppointmentId = appointment.Id, MicrotingSiteUid = siteUid }; await appointmentSite.Create(_dbContext); } var afToDelete = appointment.AppointmentPrefillFieldValues .Where(f => appointmentModel.Fields.All(x => x.FieldId != f.FieldId)); foreach (var field in afToDelete) { await field.Delete(_dbContext); } var afToCreate = appointmentModel.Fields .Where(f => appointment.AppointmentPrefillFieldValues.All(x => x.FieldId != f.FieldId)); foreach (var field in afToCreate) { var appointmentPrefillField = new Entities.AppointmentPrefillFieldValue() { AppointmentId = appointment.Id, FieldId = field.FieldId, FieldValue = field.FieldValue }; await appointmentPrefillField.Create(_dbContext); } transaction.Commit(); return(new OperationResult( true, _appointmentLocalizationService.GetString("AppointmentUpdatedSuccessfully"))); } catch (Exception e) { Trace.TraceError(e.Message); transaction.Rollback(); return(new OperationResult( false, _appointmentLocalizationService.GetString("ErrorWhileUpdatingAppointment"))); } } }