Exemplo n.º 1
0
        public bool SendSmsAppointment(string apptId, SmsCase smsCase, out string messageCode)
        {
            bool result = false;
            messageCode = MessageCode.GeneralCode.SystemError;
            try
            {
                SingletonLogger.Instance.Debug(String.Format("SendSmsAppointment-------ApptId: {0}", apptId));

                #region Validate
                var appt = DataRepository.AppointmentProvider.GetById(apptId);
                if (appt == null || appt.IsDisabled)
                {
                    messageCode = MessageCode.SmsCode.ApptNotExists;
                    return false;
                }

                var patient = DataRepository.VcsPatientProvider.GetByPatientCode(appt.PatientCode).FirstOrDefault();
                if (patient == null || string.IsNullOrEmpty(patient.MobilePhone))
                {
                    messageCode = MessageCode.SmsCode.NoMobile;
                    return false;
                }
                #endregion

                #region Lấy thông tin
                // Lấy đầy đủ thông tin
                var doctor = DataRepository.UsersProvider.GetByUsername(appt.Username);
                var room = DataRepository.RoomProvider.GetById(appt.RoomId.HasValue ? appt.RoomId.Value : 0);
                var service =
                    DataRepository.ServicesProvider.GetById(appt.ServicesId.HasValue ? appt.ServicesId.Value : 0);
                string doctorName = doctor == null ? string.Empty : doctor.Firstname,
                       roomName = room == null ? string.Empty : room.Title,
                       serviceName = service == null ? string.Empty : service.Title;
                #endregion

                #region Lưu Sms, Receiver, Log
                var sms = DataRepository.SmsProvider.GetByAppointmentId(apptId).FirstOrDefault();
                var receivers = new TList<SmsReceiver>();
                if (sms == null)
                {
                    sms = new Sms
                              {
                                  EntityState = EntityState.Added
                              };
                }
                else
                {
                    sms.EntityState = EntityState.Changed;
                    receivers = DataRepository.SmsReceiverProvider.GetBySmsId(sms.Id);
                }

                switch (smsCase)
                {
                    case SmsCase.WebApp:
                        sms.Message = String.Format(ServiceFacade.SettingsHelper.ApptSmsTemplate, patient.FirstName,
                                                    appt.StartTime, doctorName, roomName, serviceName);
                        break;
                    case SmsCase.Auto:
                        sms.Message = String.Format(ServiceFacade.SettingsHelper.ApptAutoSmsTemplate, patient.FirstName,
                                                    appt.StartTime, doctorName, roomName, serviceName);
                        break;
                }
                sms.SmsType = SmsType.Appointment;
                sms.SendTime = DateTime.Now;
                sms.IsSendNow = true;
                sms.IsSent = false;
                sms.SendingTimes += 1;
                sms.AppointmentId = appt.Id;
                sms = DataRepository.SmsProvider.Save(sms);
                if (sms == null)
                {
                    return false;
                }

                var receiver = receivers.FirstOrDefault(x => x.Mobile.Equals(patient.MobilePhone));
                if (receiver == null)
                {
                    receiver = new SmsReceiver
                                   {
                                       Mobile = patient.MobilePhone,
                                       FirstName = patient.FirstName,
                                       LastName = patient.LastName,
                                       UserType = SmsUserType.Patient,
                                       SmsId = sms.Id,
                                       IsSent = false,
                                       SendingTimes = 0,
                                       CreateDate = DateTime.Now
                                   };
                    DataRepository.SmsReceiverProvider.Insert(receiver);
                }

                var smsLog = new SmsLog
                                 {
                                     Id = Guid.NewGuid(),
                                     SmsId = sms.Id,
                                     Message = sms.Message,
                                     Mobile = receiver.Mobile,
                                     SendTime = sms.SendTime,
                                     RealSendTime = DateTime.Now,
                                     IsSent = false
                                 };
                DataRepository.SmsLogProvider.Insert(smsLog);
                #endregion

                #region Gửi sms và update thông tin

                var status = SendSms(smsLog.Mobile, smsLog.Title, smsLog.Message);
                if (status)
                {
                    sms.IsSent = receiver.IsSent = smsLog.IsSent = true;
                    result = true;
                    messageCode = MessageCode.SmsCode.Success;
                }

                DataRepository.SmsLogProvider.Update(smsLog);
                DataRepository.SmsProvider.Update(sms);
                DataRepository.SmsReceiverProvider.Update(receiver);

                #endregion
            }
            catch (Exception ex)
            {
                SingletonLogger.Instance.Error(String.Format("SendSmsAppointment"), ex);
            }
            return result;
        }