/// <summary> /// Generates notifications for new Medical Appointments /// </summary> private static void GenerateNotificationsForNewMedicalAppointments( [NotNull] CerebelloEntities db, DateTime referenceTime, [NotNull] ICollection <Tuple <Notification, object> > notificationsToBeDispatched) { if (db == null) { throw new ArgumentNullException("db"); } if (notificationsToBeDispatched == null) { throw new ArgumentNullException("notificationsToBeDispatched"); } // check for appointments that have to be notified var timeOffset = referenceTime.AddMinutes(10); var unnotifiedAppointments = db.Appointments.Where( a => !a.Notified && a.Type == (int)TypeAppointment.MedicalAppointment && a.Start >= referenceTime && a.Start < timeOffset).ToList(); foreach (var appointment in unnotifiedAppointments) { Debug.Assert(appointment.PatientId != null, "appointment.PatientId != null"); var medicalAppointmentData = new MedicalAppointmentNotificationData { PatientId = appointment.PatientId.Value, PatientName = appointment.Patient.Person.FullName, DoctorName = appointment.Patient.Doctor.Users.First().Person.FullName, DoctorId = appointment.Patient.DoctorId, AppointmentId = appointment.Id, Time = DateTimeHelper.GetFormattedTime( PracticeController.ConvertToLocalDateTime(appointment.Practice, appointment.Start)), PracticeIdentifier = appointment.Practice.UrlIdentifier, DoctorIdentifier = appointment.Doctor.UrlIdentifier }; var medicalAppointmentDataString = new JavaScriptSerializer().Serialize(medicalAppointmentData); // for each secretary, I need to create a new notification foreach (var user in appointment.Practice.Users.Where(user => user.Secretary != null)) { var newNotification = new Notification() { CreatedOn = referenceTime, IsClosed = false, UserToId = user.Id, Type = NotificationConstants.MEDICAL_APPOINTMENT_NOTIFICATION_TYPE, PracticeId = appointment.PracticeId, Data = medicalAppointmentDataString }; user.Notifications.Add(newNotification); notificationsToBeDispatched.Add(new Tuple <Notification, object>(newNotification, medicalAppointmentData)); } appointment.Notified = true; } db.SaveChanges(); }
/// <summary> /// Generates notifications for new Medical Appointments /// </summary> private static void GenerateNotificationsForNewMedicalAppointments( [NotNull] CerebelloEntities db, DateTime referenceTime, [NotNull] ICollection<Tuple<Notification, object>> notificationsToBeDispatched) { if (db == null) throw new ArgumentNullException("db"); if (notificationsToBeDispatched == null) throw new ArgumentNullException("notificationsToBeDispatched"); // check for appointments that have to be notified var timeOffset = referenceTime.AddMinutes(10); var unnotifiedAppointments = db.Appointments.Where( a => !a.Notified && a.Type == (int)TypeAppointment.MedicalAppointment && a.Start >= referenceTime && a.Start < timeOffset).ToList(); foreach (var appointment in unnotifiedAppointments) { Debug.Assert(appointment.PatientId != null, "appointment.PatientId != null"); var medicalAppointmentData = new MedicalAppointmentNotificationData { PatientId = appointment.PatientId.Value, PatientName = appointment.Patient.Person.FullName, DoctorName = appointment.Patient.Doctor.Users.First().Person.FullName, DoctorId = appointment.Patient.DoctorId, AppointmentId = appointment.Id, Time = DateTimeHelper.GetFormattedTime( PracticeController.ConvertToLocalDateTime(appointment.Practice, appointment.Start)), PracticeIdentifier = appointment.Practice.UrlIdentifier, DoctorIdentifier = appointment.Doctor.UrlIdentifier }; var medicalAppointmentDataString = new JavaScriptSerializer().Serialize(medicalAppointmentData); // for each secretary, I need to create a new notification foreach (var user in appointment.Practice.Users.Where(user => user.Secretary != null)) { var newNotification = new Notification() { CreatedOn = referenceTime, IsClosed = false, UserToId = user.Id, Type = NotificationConstants.MEDICAL_APPOINTMENT_NOTIFICATION_TYPE, PracticeId = appointment.PracticeId, Data = medicalAppointmentDataString }; user.Notifications.Add(newNotification); notificationsToBeDispatched.Add(new Tuple<Notification, object>(newNotification, medicalAppointmentData)); } appointment.Notified = true; } db.SaveChanges(); }