public static void SaveInfoSmsBookingError(string configuration, SmsInfoBookingInputViewModel infoInput, string message)
        {
            DbContext      _context  = new MySqlContext(new MySqlConnectionFactory(configuration));
            List <SmsLogs> lstSmsLog = new List <SmsLogs>();

            foreach (var resp in infoInput.lstMedicalHealthcareHistories)
            {
                SmsLogs smsLog = new SmsLogs();
                smsLog.PhoneNumber             = resp.PhoneNumber;
                smsLog.Message                 = "";
                smsLog.ResultMessage           = message;
                smsLog.Status                  = 0;
                smsLog.HealthFacilitiesId      = (infoInput.healthFacilitiesId != null ? infoInput.healthFacilitiesId.Value : 0);
                smsLog.SmsTemplateId           = 0;
                smsLog.SmsPackagesDistributeId = 0;
                smsLog.SentDate                = DateTime.Now;
                smsLog.LogType                 = 1;

                lstSmsLog.Add(smsLog);
            }

            _context.InsertRange(lstSmsLog);
        }
        public IActionResult InfoSendSms([FromBody] SmsInfoBookingInputViewModel infoInput)
        {
            int YearNow  = DateTime.Now.Year;
            int MonthNow = DateTime.Now.Month;
            //danh sach goi sms su dung
            var packages = _context.Query <SmsPackagesDistribute>()
                           .Where(pd => pd.HealthFacilitiesId == infoInput.healthFacilitiesId &&
                                  ((pd.YearStart < YearNow && pd.YearEnd == YearNow && pd.MonthEnd <= MonthNow) ||
                                   (pd.YearStart <YearNow && pd.YearEnd> YearNow) ||
                                   (pd.YearStart == YearNow && pd.YearEnd == YearNow && pd.MonthEnd >= MonthNow && pd.MonthStart <= MonthNow) ||
                                   (pd.YearStart == YearNow && pd.YearEnd > YearNow && pd.MonthStart <= MonthNow)) &&
                                  pd.IsDelete == false && pd.IsActive == true)
                           .Select(u => new PackageDistributeViewModel(u, _connectionString)).ToList();

            if (packages.Count == 0)
            {
                SaveInfoSmsBookingError(_connectionString, infoInput, "Không thể gửi tin do không sử dụng gói sms nào");
                if (infoInput.type == 4)
                {
                    return(Json(new ActionResultDto {
                        Result = ""
                    }));
                }
                else
                {
                    return(StatusCode(406, _excep.Throw(406, "Không thể gửi tin do số lượng tin nhắn vượt quá gói SMS hiện tại. Mời bạn mua thêm gói SMS")));
                }
            }

            long totalSms     = 0;
            int  totalSmsSend = infoInput.lstMedicalHealthcareHistories.Count;

            foreach (var s in packages)
            {
                totalSms += s.SmsPackageUsed != null ? s.SmsPackageUsed.Quantityused : 0;
            }

            if (totalSms < totalSmsSend)
            {
                SaveInfoSmsBookingError(_connectionString, infoInput, "Không thể gửi tin do số lượng tin nhắn vượt quá gói SMS hiện tại");
                if (infoInput.type == 4)
                {
                    return(Json(new ActionResultDto {
                        Result = ""
                    }));
                }
                else
                {
                    return(StatusCode(406, _excep.Throw(406, "Không thể gửi tin do số lượng tin nhắn vượt quá gói SMS hiện tại. Mời bạn mua thêm gói SMS")));
                }
            }

            //Xu ly tin nhan
            string code         = "";
            string content      = "";
            int    templateId   = 0;
            string templateCode = "";
            int    indexM       = 0;
            int    indexUsed    = 0;

            switch (infoInput.type)
            {
            case 1:
                code = "A01.SMSTAIKHAM";
                break;

            case 2:
                code = "A02.SMSSINHNHAT";
                break;

            case 4:
                code = "A06.SMSDATKHAM";
                break;
            }

            if (string.IsNullOrEmpty(infoInput.content))
            {
                var config = _context.Query <HealthFacilitiesConfigs>().Where(hp => hp.Code == code).FirstOrDefault();
                //templateId = config != null ? config.Values : 0;
                templateCode = config != null ? config.Values : "";
                //var template = _context.Query<SmsTemplate>().Where(t => t.Id == templateId).FirstOrDefault();
                var template = _context.Query <SmsTemplate>().Where(t => t.SmsTemplateCode == templateCode).FirstOrDefault();
                content = template != null ? template.SmsContent : "";
            }
            else
            {
                //templateId = infoInput.smsTemplateId.Value;
                templateCode = infoInput.SmsTemplateCode;
                content      = infoInput.content;
            }
            //danh sach sms content
            List <SmsContent> lstContent = new List <SmsContent>();

            foreach (var m in infoInput.lstMedicalHealthcareHistories)
            {
                indexM++;
                if (packages[indexUsed].SmsPackageUsed != null && indexM > packages[indexUsed].SmsPackageUsed.Quantityused)
                {
                    indexM = 0;
                    indexUsed++;
                }

                SmsContent scontent = new SmsContent();
                scontent.SmsBrand    = packages[indexUsed].SmsBrand;
                scontent.Message     = ReplaceContentBookingSms(content, m, packages[indexUsed].PackageName);
                scontent.PhoneNumber = m.PhoneNumber;

                scontent.HealthFacilitiesId      = infoInput.healthFacilitiesId.Value;
                scontent.SmsTemplateId           = templateId;
                scontent.SmsTemplateCode         = templateCode;
                scontent.SmsPackagesDistributeId = packages[indexUsed].Id;
                scontent.SmsPackageUsedId        = packages[indexUsed].SmsPackageUsed != null ? packages[indexUsed].SmsPackageUsed.SmsPackageUsedId : 0;
                scontent.PatientHistoriesId      = 0;

                scontent.PatientId  = m.PatientId;
                scontent.objectType = infoInput.objectType;

                lstContent.Add(scontent);
            }

            var sendSMS = Utils.SendListSMS(lstContent, infoInput.type);
            var infoSms = SMS.SaveInfoSMS(_connectionString, sendSMS, infoInput.type);

            return(Json(new ActionResultDto {
                Result = infoSms
            }));
        }