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;
        }
示例#2
0
        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;
        }
示例#3
0
 private MeasuringNotification GetLastNonAnsweredNotification(AssignedMeasuring assignedMeasuring)
 {
     return this.measuringNotificationRepository.GetEntitiesByQuery(
         v =>
         !v.IsActive && v.AssignedMeasuringId == assignedMeasuring.Id && !v.ExecutedDate.HasValue).OrderByDescending(v => v.SendingDate).FirstOrDefault();
 }
示例#4
0
 private string GetNotificationMessage(AssignedMeasuring assignedMeasuring)
 {
     return string.Format(
         "Измерьте {0} в единицах {1} с кодом {2}",
         assignedMeasuring.MeasuringType.Title,
         assignedMeasuring.MeasuringType.Measuring,
         assignedMeasuring.MeasuringType.Code);
 }
示例#5
0
        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));
        }