public AssignedMeasuring CreateOrUpdateEntity(AssignedMeasuring entity) { if (entity == null) { throw new ArgumentNullException("entity"); } using (var context = new DomainContext(this.ConnectionString)) { if (this.GetEntityById(entity.Id) == null) { context.AssignedMeasurings.Add(entity); } else { context.Entry(entity).State = EntityState.Modified; } context.SaveChanges(); } return entity; }
private bool IsDailyNotificationCountEnough(AssignedMeasuring assignedMeasuring) { if (assignedMeasuring.Frequency >= 1) { return false; } var maxDailyNotificationCount = (int)Math.Round(1 / assignedMeasuring.Frequency); var dailyNotificationCount = this.measuringNotificationRepository.GetEntitiesByQuery( v => v.AssignedMeasuringId == assignedMeasuring.Id && v.SendingDate.Date == DateTime.Now.Date).Count(); return maxDailyNotificationCount == dailyNotificationCount; }
private MeasuringNotification GetLastNonAnsweredNotification(AssignedMeasuring assignedMeasuring) { return this.measuringNotificationRepository.GetEntitiesByQuery( v => !v.IsActive && v.AssignedMeasuringId == assignedMeasuring.Id && !v.ExecutedDate.HasValue).OrderByDescending(v => v.SendingDate).FirstOrDefault(); }
private string GetNotificationMessage(AssignedMeasuring assignedMeasuring) { return string.Format( "Измерьте {0} в единицах {1} с кодом {2}", assignedMeasuring.MeasuringType.Title, assignedMeasuring.MeasuringType.Measuring, assignedMeasuring.MeasuringType.Code); }
private void CreateNewNotification(AssignedMeasuring assignedMeasuring) { var periodInMinutes = this.GetPeriodInMinutes(assignedMeasuring.Frequency); if (this.IsDailyNotificationCountEnough(assignedMeasuring)) { return; } DateTime sendingDate; var measuringNotification = this.GetLastAnsweredNotification(assignedMeasuring); if (measuringNotification == null) { var nonAnsweredNotification = this.GetLastNonAnsweredNotification(assignedMeasuring); if (nonAnsweredNotification == null) { sendingDate = new DateTime( assignedMeasuring.StartDate.Year, assignedMeasuring.StartDate.Month, assignedMeasuring.StartDate.Day, this.startDayFromHour, 0, 0); } else { sendingDate = this.GetSendingDate(nonAnsweredNotification.SendingDate, periodInMinutes); } } else { sendingDate = this.GetSendingDate(measuringNotification.ExecutedDate.Value, periodInMinutes); } if (sendingDate.Date >= assignedMeasuring.FinishDate.Date) { return; } var newNotification = this.measuringNotificationFactory.Create( Guid.NewGuid(), assignedMeasuring.Id, assignedMeasuring.PersonConsultation.PatientId, assignedMeasuring.MeasuringTypeId, sendingDate, this.GetNotificationMessage(assignedMeasuring)); this.measuringNotificationRepository.CreateOrUpdateEntity(newNotification); // this.logger.LogMessage(string.Format("MeasuringNotification {0} was created", newNotification.Id)); }