예제 #1
0
        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")));
                }
            }
        }
예제 #3
0
        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);
        }
예제 #4
0
        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")));
                }
            }
        }