public static decimal GetSendPrice(Guid userGuid, SmsTypes smsType, int smsPartCount, Guid privateNumberGuid, Dictionary <int, int> operatorNumberCount) { decimal smsPrice = 0; Common.PrivateNumber privateNumber = Facade.PrivateNumber.LoadNumber(privateNumberGuid); List <DataRow> lstOperatorRatio = Facade.SmsSenderAgent.GetAgentRatio(privateNumber.SmsSenderAgentGuid).AsEnumerable().ToList(); Dictionary <Guid, decimal> dictionaryAgentRatio = Facade.GroupPrice.GetAgentRatio(userGuid); smsPartCount = privateNumber.Type == (int)Business.TypePrivateNumberAccesses.Bulk ? smsPartCount : 1; switch (smsType) { case SmsTypes.Farsi: foreach (KeyValuePair <int, int> opt in operatorNumberCount) { smsPrice += opt.Value * GetOperatorRatio(lstOperatorRatio, opt.Key, SmsTypes.Farsi) * smsPartCount; } break; case SmsTypes.Latin: foreach (KeyValuePair <int, int> opt in operatorNumberCount) { smsPrice += opt.Value * GetOperatorRatio(lstOperatorRatio, opt.Key, SmsTypes.Latin) * smsPartCount; } break; } smsPrice *= dictionaryAgentRatio.ContainsKey(privateNumber.SmsSenderAgentGuid) ? Helper.GetDecimal(dictionaryAgentRatio[privateNumber.SmsSenderAgentGuid]) : 1; return(smsPrice); }
public async Task <bool> SendSmsAsync(string mobile, SmsTypes type, string token, string token2 = null, string token3 = null) { var client = new HttpClient { BaseAddress = new Uri(BaseUrl) }; client.DefaultRequestHeaders.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = null; if (type == SmsTypes.Register) { response = await client.GetAsync("v1/6E65695778564344644231365673544D73794E324C7377634149324F7A5270324F6346774D6753666363633D/verify/lookup.json?receptor=" + mobile + "&token=" + token + "&token10=" + token2 + "&template=SchoolPortalRegister"); } else if (type == SmsTypes.ResetPass) { response = await client.GetAsync("v1/6E65695778564344644231365673544D73794E324C7377634149324F7A5270324F6346774D6753666363633D/verify/lookup.json?receptor=" + mobile + "&token=" + token + "&template=SahadResetPass"); } else if (type == SmsTypes.SchoolPaymentDone) { response = await client.GetAsync("v1/6E65695778564344644231365673544D73794E324C7377634149324F7A5270324F6346774D6753666363633D/verify/lookup.json?receptor=" + mobile + "&token=" + token + "&token10=" + token2 + "&token20=" + token3 + "&template=SchoolPaymentDone"); } else if (type == SmsTypes.SchoolPreSubmitDone) { response = await client.GetAsync("v1/6E65695778564344644231365673544D73794E324C7377634149324F7A5270324F6346774D6753666363633D/verify/lookup.json?receptor=" + mobile + "&token=" + token + "&token10=" + token2 + "&token20=" + token3 + "&template=SchoolPreSubmitDone"); } else if (type == SmsTypes.SchoolRegisterDone) { response = await client.GetAsync("v1/6E65695778564344644231365673544D73794E324C7377634149324F7A5270324F6346774D6753666363633D/verify/lookup.json?receptor=" + mobile + "&token=" + token + "&token10=" + token2 + "&token20=" + token3 + "&template=SchoolRegisterDone"); } if (response != null && response.IsSuccessStatusCode) { var result = response.Content.ReadAsStringAsync().Result; try { var datalist = JsonConvert.DeserializeObject <SMSViewModel.RootObject>(result); } catch (Exception e) { throw; } return(true); } return(false); }
private static decimal GetOperatorRatio(List <DataRow> lstOperatorRatio, int opt, SmsTypes smsType) { List <DataRow> optInfo = lstOperatorRatio.Where(row => Helper.GetInt(row["OperatorID"]) == opt && Helper.GetInt(row["SmsType"]) == (int)smsType).ToList(); if (optInfo.Count > 0) { return(Helper.GetDecimal(optInfo.First()["Ratio"], 1)); } else { return(1); } }
protected void btnSendSms_Click(object sender, EventArgs e) { Common.ScheduledSms scheduledSms = new Common.ScheduledSms(); try { #region GetSendSmsInfo List <string> recieversNumber = new List <string>(); Dictionary <int, int> operatorNumberCount = new Dictionary <int, int>(); Dictionary <string, string> dicFileInfo = new Dictionary <string, string>(); SmsTypes smsType = Helper.HasUniCodeCharacter(txtSmsBody.Text) ? SmsTypes.Farsi : SmsTypes.Latin; if (Helper.GetGuid(hdnGroupGuid.Value.Trim('\'')) != Guid.Empty) { scheduledSms.ReferenceGuid = hdnGroupGuid.Value.Trim('\''); operatorNumberCount = Facade.PhoneNumber.GetCountPhoneBooksNumberOperator(scheduledSms.ReferenceGuid); } string fileInfo = string.Empty; if (!string.IsNullOrEmpty(hdnFilePath.Value)) { dicFileInfo = Facade.PhoneNumber.GetFileNumberInfo(Server.MapPath("~/Uploads/" + hdnFilePath.Value), recieversNumber); fileInfo = string.Format(@"<p>عنوان فایل {0}</p> <p>تعداد کل شماره ها {1} عدد</p> <p>تعداد شماره های تکراری {2} عدد</p> <p>تعداد شماره های صحیح {3} عدد</p>" , hdnFilePath.Value.Split('/')[1], dicFileInfo["TotalNumberCount"], dicFileInfo["DuplicateNumberCount"], dicFileInfo["CorrectNumberCount"]); } recieversNumber.AddRange(txtRecievers.Text.Split(new string[] { "\n", "\r\n", ",", " ", ";" }, StringSplitOptions.RemoveEmptyEntries).ToList()); Facade.Outbox.AddCountNumberOfOperatorsToDictionary(ref recieversNumber, ref operatorNumberCount); decimal sendPrice = Facade.Transaction.GetSendPrice(UserGuid, smsType, Helper.GetSmsCount(txtSmsBody.Text), Helper.GetGuid(drpSenderNumber.SelectedValue.Split(';')[0]), operatorNumberCount); int numberType = Facade.PrivateNumber.LoadNumber(Helper.GetGuid(drpSenderNumber.SelectedValue.Split(';')[0])).Type; string result = "Result{(OK)}TotalCount{(" + operatorNumberCount.Values.Sum() + ")}SendPrice{(" + sendPrice + ")}NumberType{(" + numberType + ")}"; if (!string.IsNullOrEmpty(fileInfo)) { result += "FileInfo{(" + fileInfo + ")}FilePath{(" + hdnFilePath.Value + ")}FileCorrectNumberCount{(" + dicFileInfo["CorrectNumberCount"] + ")}"; } foreach (KeyValuePair <int, int> opt in operatorNumberCount) { result += opt.Key + "{(" + opt.Value + ")}"; } #endregion scheduledSms.PrivateNumberGuid = Helper.GetGuid(drpSenderNumber.SelectedValue.Split(';')[0]); if (!string.IsNullOrEmpty(hdnFileSoundPath.Value)) { scheduledSms.SmsLen = int.Parse(hdnFileSoundLength.Value); //scheduledSms.SmsText = txtVoiceTitle.Text; scheduledSms.VoiceURL = Server.MapPath("~/Uploads/" + hdnFileSoundPath.Value); scheduledSms.VoiceMessageId = int.Parse(hdnFileSoundID.Value); } else { scheduledSms.SmsText = txtSmsBody.Text; scheduledSms.SmsLen = Helper.GetSmsCount(txtSmsBody.Text); } scheduledSms.PresentType = txtSmsBody.IsFlashSms ? (int)Arad.SMS.Gateway.Business.Messageclass.Flash : (int)Arad.SMS.Gateway.Business.Messageclass.Normal; scheduledSms.Encoding = Helper.HasUniCodeCharacter(txtSmsBody.Text) ? (int)Encoding.Utf8 : (int)Encoding.Default; scheduledSms.UserGuid = UserGuid; scheduledSms.Status = (int)ScheduledSmsStatus.Stored; scheduledSms.IP = Ip; scheduledSms.Browser = Browser; scheduledSms.ScheduledSmsGuid = Guid.NewGuid(); if (operatorNumberCount.Values.Sum() == 0) { throw new Exception(Language.GetString("RecieverListIsEmpty")); } if (rdbSendDateTime.Checked) { var dateTime = dtpSendDateTime.FullDateTime; if (Session["Language"].ToString() == "fa") { scheduledSms.DateTimeFuture = DateManager.GetChristianDateTimeForDB(dateTime); } else { scheduledSms.DateTimeFuture = DateTime.Parse(dateTime); } if (scheduledSms.DateTimeFuture < DateTime.Now) { scheduledSms.DateTimeFuture = DateTime.Now.AddSeconds(15); } if (recieversNumber.Count > 0) { scheduledSms.TypeSend = (int)SmsSendType.SendSms; Facade.ScheduledSms.InsertSms(scheduledSms, recieversNumber); } if (!string.IsNullOrEmpty(scheduledSms.ReferenceGuid)) { scheduledSms.TypeSend = (int)SmsSendType.SendGroupSms; Facade.ScheduledSms.InsertGroupSms(scheduledSms); } } else if (rdbSendPeriod.Checked) { scheduledSms.PeriodType = Helper.GetInt(drpPeriodType.SelectedValue); scheduledSms.Period = Helper.GetInt(txtPeriod.Text); //scheduledSms.StartDateTime = DateManager.GetChristianDateTimeForDB(dtpPeriodStart.FullDateTime); //scheduledSms.EndDateTime = DateManager.GetChristianDateTimeForDB(dtpPeriodEnd.FullDateTime); var dateTime = dtpPeriodStart.FullDateTime; var dateTimeEnd = dtpPeriodEnd.FullDateTime; if (Session["Language"].ToString() == "fa") { scheduledSms.StartDateTime = DateManager.GetChristianDateTimeForDB(dateTime); scheduledSms.EndDateTime = DateManager.GetChristianDateTimeForDB(dateTimeEnd); } else { scheduledSms.StartDateTime = DateTime.Parse(dateTime); scheduledSms.EndDateTime = DateTime.Parse(dateTimeEnd); } Facade.ScheduledSms.InsertPeriodSms(scheduledSms, recieversNumber); } else if (rdbGradual.Checked) { scheduledSms.PeriodType = (int)SmsSentPeriodType.Minute; scheduledSms.Period = Helper.GetInt(txtGradualPeriod.Text); scheduledSms.SendPageSize = Helper.GetInt(txtGradualPageSize.Text); scheduledSms.SendPageNo = 0; scheduledSms.DateTimeFuture = DateTime.Now.AddMinutes(scheduledSms.Period); Facade.ScheduledSms.InsertGradualSms(scheduledSms, recieversNumber); } ClientSideScript = string.Format("result('step4','OK','{0}');setSendPriceTableInfo('step4','{1}');", Language.GetString("SendSmsSuccessful"), result); Response.Redirect(string.Format("/PageLoader.aspx?c={0}", Helper.Encrypt((int)UserControls.UI_SmsReports_ScheduledSms, Session))); } catch (Exception ex) { ClientSideScript = string.Format("result('step4','Error','{0}');setSendPriceTableInfo('step4','{1}');", ex.Message, string.Empty); } }
private static string FormatSmsRate(List <UserSmsRateInfo> smsRates, SmsSenderAgentReference agent, Operators operators, SmsTypes smsType) { if (smsRates.Any(rate => rate.Agent == agent && rate.Operator == operators && rate.SmsType == smsType)) { return(smsRates.Where(rate => rate.Agent == agent && rate.Operator == operators && rate.SmsType == smsType).First().Rate.ToString()); } else { return("------"); } }