using framework_business;
using framework_library;
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Reflection;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Linq;
using System.Collections.Generic;
public partial class controls_admin_campaigns : System.Web.UI.UserControl
{
#region methods
///
/// Method to Bind Campaign Data
///
private void BindCampaignData()
{
try
{
lblTotalCredits.Text = SMSCredit.currentBalance.ToString();
lblTotalAllocated.Text = SMSCredit.allocatedBalance.ToString();
lblTotalAvailable.Text = SMSCredit.availableBalance.ToString();
CheckThreshold();
ArrayList campaignList = xData.GetTypedByCriteriaSpecific("recId", typeof(ovCampaignDetail), "", "", "campaignTitle");
rptCampaigns.DataSource = campaignList;
rptCampaigns.DataBind();
BindLog();
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// Bind Log
///
private void BindLog()
{
try
{
ArrayList campaignLogList = xData.GetTypedByCriteriaSpecific("recId", typeof(ovCampaignLog), "", "", "lastSent DESC");
rptLog.DataSource = campaignLogList;
rptLog.DataBind();
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
private void CheckThreshold()
{
try
{
if (SMSCredit.availableBalance < SMSCredit.threshold)
{
oEmail mail = new oEmail();
mail.Subject = "SMS Credit Threshold Reached";
StringBuilder emailBody = new StringBuilder();
emailBody.AppendLine("Your SMS Credit Threshold has been reached.");
emailBody.AppendLine("Current Avaialble Credits: " + SMSCredit.availableBalance.ToString());
mail.fromAddress = ConfigurationManager.AppSettings["from"];
mail.bccAddress = ConfigurationManager.AppSettings["bcc"];
mail.toAddress = ConfigurationManager.AppSettings["admin"];
mail.Body = emailBody.ToString();
communication.SendAnEmail(mail);
}
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// Bind Templates
///
private void BindTemplates()
{
ArrayList templates = new ArrayList();
try
{
templates = xData.GetTypedByCriteriaSpecific("recId", typeof(oTemplate), "templateTypeId", "3", "templateName");
ddEmailTemplate.DataSource = templates;
ddEmailTemplate.DataTextField = "templateName";
ddEmailTemplate.DataValueField = "recId";
ddEmailTemplate.DataBind();
ddEmailTemplate.Items.Insert(0, new ListItem("None Selected", "0"));
}
catch (Exception ex)
{
exception.HandleException("Admin:", MethodBase.GetCurrentMethod().Name, ex, 0);
Response.Redirect("Error.aspx", false);
}
}
///
/// Populate Form Values
///
///
private void PopulatePageFormValues(ref oCampaign _Campaign)
{
try
{
BindCampaignTypes();
BindCampaignIntervals();
txtTitle.Value = _Campaign.campaignTitle;
if (ddInterval.Items.FindByValue(_Campaign.interval.ToString()) != null)
ddInterval.SelectedValue = _Campaign.interval.ToString();
if (ddInterval.SelectedItem != null && ddInterval.SelectedItem.Text == "Once Off")
{
if (ddCampaignType.Items.FindByText("Ad Hoc") != null)
ddCampaignType.SelectedValue = ddCampaignType.Items.FindByText("Ad Hoc").Value;
ddCampaignType.Enabled = false;
divDateTime.Visible = false;
_Campaign.nextSend = DateTime.Now;
btnSave.Text = "Send Now";
}
else
{
if (ddCampaignType.Items.FindByText("Ad Hoc") != null)
ddCampaignType.Items.Remove(ddCampaignType.Items.FindByText("Ad Hoc"));
if (ddCampaignType.Items.FindByValue(_Campaign.campaignType.ToString()) != null)
ddCampaignType.SelectedValue = _Campaign.campaignType.ToString();
ddCampaignType.Enabled = true;
divDateTime.Visible = true;
btnSave.Text = "Save";
}
ddMessageType.SelectedValue = _Campaign.messageType.ToString();
ToggleMessageTypes();
if (_Campaign.messageType == 1)
edEmailMessage.Content = _Campaign.campaignBody;
else if (_Campaign.messageType == 2)
txbMessageSMS.Value = _Campaign.campaignBody;
if (_Campaign.nextSend.Year > 1901)
{
txbStartDate.Text = utils.formatDateToString(_Campaign.nextSend);
txbTime.Text = _Campaign.nextSend.ToString("HH:mm");
}
else
{
txbStartDate.Text = string.Empty;
txbTime.Text = string.Empty;
}
chkActive.Checked = _Campaign.isActive;
string currentState = "";
divCurrentState.Visible = _Campaign.recId > 0;
if (_Campaign.isDraft)
currentState = "Draft";
else if (_Campaign.lastSent > Convert.ToDateTime("1900-01-01"))
currentState = "Sent";
else
currentState = "Pending";
lblCurrentState.Text = currentState;
//<%#(Convert.ToBoolean(DataBinder.Eval(Container.DataItem, "isDraft"))==true)?"Draft":Convert.ToDateTime(DataBinder.Eval(Container.DataItem, "lastSent")) > Convert.ToDateTime("1900-01-01") ? "Sent": "Pending" %>
divRecipients.Visible = true;
BindRecipients(_Campaign.recId);
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, 0);
Response.Redirect("/error", false);
}
}
///
/// Validate SMS Credits - Take SMS length into account
///
///
private bool ValidateSMSCredits()
{
bool valid = false;
try
{
int smsLength = txbMessageSMS.Value.Length;
int smsCount = 0;
if (smsLength > 0 && smsLength <= 160)
smsCount = 0;
else
{
decimal calc = (smsLength - 160m) / (160m - 7m) + 1m;
int.TryParse((Math.Ceiling(calc)).ToString(), out smsCount);
}
int creditsNeeded = smsCount * RecipientCount;
valid = creditsNeeded <= SMSCredit.availableBalance;
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, 0);
Response.Redirect("/error", false);
}
return valid;
}
private void BindRecipients(int campaignId)
{
try
{
DataTable dtRecipients = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oCampaignRecipient), "campaignId,isIncluded", campaignId.ToString() + ",1", "recipientName");
Session["dtRecipient"] = dtRecipients;
lblRecipientCount.Text = "Number of Recipients: " + dtRecipients.Rows.Count.ToString();
if (ddMessageType.SelectedValue == "2")
{
//CVH 2018-03-27 Allowing longer sms'es to be sent, check message length in validation
//if (RecipientCount > SMSCredit.availableBalance)
if (!ValidateSMSCredits())
{
btnSave.Enabled = false;
lblRecipientCount.ForeColor = System.Drawing.Color.Red;
}
else
{
btnSave.Enabled = RecipientCount > 0;
lblRecipientCount.ForeColor = System.Drawing.Color.Empty;
}
}
else
{
btnSave.Enabled = RecipientCount > 0;
lblRecipientCount.ForeColor = System.Drawing.Color.Empty;
}
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, 0);
Response.Redirect("/error", false);
}
}
///
/// Bind Campaign Types
///
private void BindCampaignTypes()
{
try
{
DataTable dtCampaignTypes = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oCampaignType), "isActive", "1");
ddCampaignType.DataSource = dtCampaignTypes;
ddCampaignType.DataTextField = "campaignType";
ddCampaignType.DataValueField = "recId";
ddCampaignType.DataBind();
if (dtCampaignTypes.Rows.Count == 1)
ddCampaignType.Enabled = false;
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, 0);
Response.Redirect("/error", false);
}
}
///
/// Bind Campaign Intervals
///
private void BindCampaignIntervals()
{
try
{
DataTable dtCampaignIntervals = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oCampaignInterval), "isActive", "1");
ddInterval.DataSource = dtCampaignIntervals;
ddInterval.DataTextField = "interval";
ddInterval.DataValueField = "recId";
ddInterval.DataBind();
//if (dtCampaignIntervals.Rows.Count == 1)
// ddInterval.Enabled = false;
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, 0);
Response.Redirect("/error", false);
}
}
///
/// Save Form Values
///
///
private void SavePageFormValues(ref oCampaign _Campaign)
{
try
{
_Campaign.campaignTitle = txtTitle.Value;
_Campaign.campaignType = int.Parse(ddCampaignType.SelectedValue);
_Campaign.messageType = int.Parse(ddMessageType.SelectedValue);
if (_Campaign.messageType == 1)
_Campaign.campaignBody = edEmailMessage.Content;
else if (_Campaign.messageType == 2)
_Campaign.campaignBody = txbMessageSMS.Value;
else
_Campaign.campaignBody = "";
_Campaign.interval = int.Parse(ddInterval.SelectedValue);
if (_Campaign.interval == 1)
_Campaign.isRecurring = false;
else
_Campaign.isRecurring = true;
DateTime dateOnly = DateTime.Now;
DateTime timeOnly = new DateTime();
if (txbStartDate.Text != string.Empty)
dateOnly = utils.formatStringToDate(txbStartDate.Text);
if (txbTime.Text != string.Empty)
{
timeOnly = Convert.ToDateTime(txbTime.Text);
}
_Campaign.nextSend = dateOnly.Date.Add(timeOnly.TimeOfDay);
_Campaign.isActive = chkActive.Checked;
_Campaign.dateUpdated = DateTime.Now;
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, 0);
Response.Redirect("/error", false);
}
}
///
/// Method to Toggle Panels
///
///
private void TogglePanels(string panelName)
{
switch (panelName)
{
case "pnlCampaignPage":
pnlCampaignPage.Visible = true;
pnlCampaignList.Visible = false;
break;
case "pnlCampaignList":
pnlCampaignPage.Visible = false;
pnlCampaignList.Visible = true;
break;
}
//clear result
pnlResult.Visible = false;
}
///
/// Toggle Message Types
///
private void ToggleMessageTypes()
{
switch (ddMessageType.SelectedValue)
{
case "0":
divEmailTemplate.Visible = false;
pnlEmailMessage.Visible = false;
pnlSMSMessage.Visible = false;
break;
case "1"://email
divEmailTemplate.Visible = true;
pnlEmailMessage.Visible = true;
pnlSMSMessage.Visible = false;
break;
case "2"://sms
divEmailTemplate.Visible = false;
pnlEmailMessage.Visible = false;
pnlSMSMessage.Visible = true;
break;
}
}
///
/// Generate Recipient List
///
///
private void GenerateRecipients(bool clearExisting = true)
{
try
{
int surfaceId = Convert.ToInt32(ddRecipientSurface.SelectedValue.ToString());
oSurface _surface = new oSurface();
foreach (oSurface surf in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurface), "recId", surfaceId.ToString()))
{
_surface = surf;
break;
}
string filterField = string.Empty;
string filterValues = string.Empty;
string filter = string.Empty;
if (handler.ReturnSetup().code == "STUD-1")
{
filterField = "School|IntakeYear";
string schoolValues = string.Empty;
string intakeYearValues = string.Empty;
foreach (ListItem item in lstRecipientFilterSchool.Items.GetSelectedItems())
{
if (item.Selected)
{
if (schoolValues != string.Empty)
schoolValues += ",'" + item.Value.ToString().Replace("'", "''") + "'";
else
schoolValues += "'" + item.Value.ToString().Replace("'", "''") + "'";
}
}
foreach (ListItem item in lstRecipientFilterIntakeYear.Items.GetSelectedItems())
{
if (item.Selected)
{
if (intakeYearValues != string.Empty)
intakeYearValues += ",'" + item.Value.ToString() + "'";
else
intakeYearValues += "'" + item.Value.ToString() + "'";
}
}
filterValues = schoolValues + "|" + intakeYearValues;
if (schoolValues != string.Empty)
{
if (filter != string.Empty)
filter += " AND ";
filter += "ProfileHeader_School IN (" + schoolValues + ")";
}
if (intakeYearValues != string.Empty)
{
if (filter != string.Empty)
filter += " AND ";
filter += "ProfileHeader_IntakeYear IN (" + intakeYearValues + ")";
}
}
else
{
filterField = ddRecipientFilter.SelectedValue.ToString();
foreach (ListItem item in lstRecipientFilterValue.Items.GetSelectedItems())
{
if (item.Selected)
{
if (filterValues != string.Empty)
filterValues += ",'" + item.Value.ToString() + "'";
else
filterValues += "'" + item.Value.ToString() + "'";
}
}
if (filterField != "0")
filter = filterField + " IN (" + filterValues + ")";
}
if (surfaceId > 0 && lstRecipientName.GetSelectedIndices().Any() && ddRecipientNumber.SelectedValue.ToString() != "0")
{
int totalRows = 0;
if (_surface.isPublished)
totalRows = xData.GetPublishedSurfaceDataCount(surfaceId, 0, "", filter);
else
totalRows = xData.GetSurfaceQueryDataCount(surfaceId, 0, "", filter);
//CVH 2017-10-10 Getting Object Ref exceptions here, no Campaign session. If not, save new.
oCampaign campaign = new oCampaign();
if (utils.verifySession("Campaign"))
campaign = (oCampaign)Session["Campaign"];
campaign.contactSourceSurface = surfaceId;
campaign.contactNumberField = ddRecipientNumber.SelectedValue.ToString();
var contactNameFields = String.Empty;
foreach (var selected in lstRecipientName.GetSelectedIndices())
{
if (contactNameFields == String.Empty)
contactNameFields = lstRecipientName.Items[selected].Value;
else
contactNameFields += "," + lstRecipientName.Items[selected].Value;
}
campaign.contactNameField = contactNameFields;
campaign.filterField = filterField;
campaign.filterValue = filterValues;
if (campaign.recId > 0)
xData.UpdateTyped("recId", campaign.recId.ToString(), typeof(oCampaign), campaign);
else
{
campaign.createdBy = handler.ReturnUser().recId;
campaign.dateSaved = System.DateTime.Now;
campaign.recId = xData.SaveTyped("recId", typeof(oCampaign), campaign);
}
Session["CampaignId"] = campaign.recId;
Session["Campaign"] = campaign;
DataTable dtRecipients = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oCampaignRecipient), "campaignId,isIncluded", campaign.recId.ToString() + ",1", "recipientName");
DataTable dtGenerated = new DataTable();
if (_surface.isPublished)
dtGenerated = xData.GetPublishedSurfaceDataPaged(surfaceId, 0, totalRows, "", "", handler.ReturnUser().recId, 0, filter, true);
else
dtGenerated = xData.GetSurfaceQueryDataPaged(surfaceId, 0, totalRows, "", "", handler.ReturnUser().recId, 0, filter, true);
if (dtGenerated.Rows.Count > 0)
{
DataView view = new DataView(dtGenerated);
//DataTable dtRec = view.ToTable("Recipients", false, ddRecipientName.SelectedValue.ToString(), ddRecipientNumber.SelectedValue.ToString(), "itemID");
//CVH 2017-11-22 Return selected Name columns, as well as Number column and ItemID in table
int fieldCount = campaign.contactNameField.Split(',').Count() + 2;
string[] fields = new string[fieldCount];
for (int i = 0; i < fieldCount; i++)
{
if (i < (fieldCount - 2))
fields[i] = campaign.contactNameField.Split(',')[i];
else if (i < (fieldCount - 1))
fields[i] = campaign.contactNumberField;
else
fields[i] = "itemID";
}
DataTable dtRec = view.ToTable("Recipients", false, fields);
foreach (DataRow row in dtRec.Rows)
{
DataRow newRecipientRow = dtRecipients.NewRow();
//newRecipientRow["recipientName"] = row[ddRecipientName.SelectedValue.ToString()].ToString();
//newRecipientRow["recipientNumber"] = row[ddRecipientNumber.SelectedValue.ToString()].ToString();
string name = String.Empty;
foreach (var colName in campaign.contactNameField.Split(','))
{
if (name == String.Empty)
name = row[colName].ToString();
else
name += " " + row[colName].ToString();
}
newRecipientRow["recipientName"] = name;
newRecipientRow["recipientNumber"] = row[campaign.contactNumberField].ToString();
newRecipientRow["surfaceItemId"] = row["itemID"].ToString();
newRecipientRow["isIncluded"] = false;
newRecipientRow["recId"] = 0;
var dr = from r in dtRecipients.AsEnumerable()
where r.Field("recipientName") == newRecipientRow["recipientName"].ToString()
&& r.Field("recipientNumber") == newRecipientRow["recipientNumber"].ToString()
select r;
if (dr.AsDataView().Count == 0)
dtRecipients.Rows.Add(newRecipientRow);
}
}
Session["dtRecipient"] = dtRecipients;
grdRecipients.DataSource = dtRecipients;
grdRecipients.DataBind();
lblRecipientIncludedCount.Text = "Recipient Count: " + RecipientCount.ToString();
btnRecipientSave.Visible = RecipientCount > 0;
upRecipient.Update();
}
else if (surfaceId == 0)
{
if (utils.verifySession("Campaign"))
{
oCampaign campaign = (oCampaign)Session["Campaign"];
DataTable dtRecipients = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oCampaignRecipient), "campaignId,isIncluded", campaign.recId.ToString() + ",1", "recipientName");
Session["dtRecipient"] = dtRecipients;
grdRecipients.DataSource = dtRecipients;
grdRecipients.DataBind();
lblRecipientIncludedCount.Text = "Recipient Count: " + RecipientCount.ToString();
btnRecipientSave.Visible = RecipientCount > 0;
upRecipient.Update();
}
}
}
catch (Exception ex)
{
exception.HandleException("campaigns:", MethodBase.GetCurrentMethod().Name, ex, 0);
Response.Redirect("/error", false);
}
}
///
/// Validate Campaign
///
///
private bool ValidateCampaign()
{
bool result = true;
try
{
DateTime dateOnly = DateTime.Now;
DateTime timeOnly = new DateTime();
if (txbStartDate.Text != string.Empty)
dateOnly = utils.formatStringToDate(txbStartDate.Text);
if (txbTime.Text != string.Empty)
timeOnly = Convert.ToDateTime(txbTime.Text);
DateTime dateToCheck = dateOnly.Date.Add(timeOnly.TimeOfDay);
int idToIgnore = 0;
if (utils.verifySession("Campaign"))
{
idToIgnore = ((oCampaign)Session["Campaign"]).recId;
}
if (idToIgnore > 0 && (ddInterval.SelectedItem != null && ddInterval.SelectedItem.Text != "Once Off") && (handler.ReturnSetup().code != "PROP-1"))
{
foreach (oCampaign campaign in xData.GetTypedByCriteriaSpecific("recId", typeof(oCampaign), "recId,~DATEONLYnextSend", "~<>" + idToIgnore.ToString() + "," + dateOnly.ToString("MM/dd/yyyy")))
{
DateTime existingDateTime = campaign.nextSend;
if (existingDateTime.Subtract(dateToCheck).TotalMinutes < 15 && existingDateTime.Subtract(dateToCheck).TotalMinutes > -15)
{
result = false;
pnlResult.Visible = true;
lblResult.Text = "Campaign (" + campaign.campaignTitle + " - " + campaign.nextSend.ToString("dd/MM/yyyy hh:mm tt") + ") already exists for that time slot";
}
}
}
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
return result;
}
///
/// bind surfaces
///
private void BindSurfaces()
{
try
{
DataTable apps = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oSurface), "isActive", "1", "surface");
if (handler.ReturnSetup().code == "STUD-1")
{
ArrayList allowedSurfaces = new ArrayList();
allowedSurfaces.Add("Profiles");
//allowedSurfaces.Add("DetailsofPrimaryCaregivers");
DataTable sourceSurface = apps.AsEnumerable()
.Where(r => allowedSurfaces.Contains(r.Field("name")))
.CopyToDataTable();
ddRecipientSurface.DataSource = sourceSurface;
}
else
ddRecipientSurface.DataSource = apps;
ddRecipientSurface.DataTextField = "surface";
ddRecipientSurface.DataValueField = "recId";
ddRecipientSurface.DataBind();
ddRecipientSurface.Items.Insert(0, new ListItem("select...", "0"));
if (utils.verifySession("Campaign"))
{
oCampaign campaign = (oCampaign)Session["Campaign"];
if (ddRecipientSurface.Items.FindByValue(campaign.contactSourceSurface.ToString()) != null)
{
ddRecipientSurface.Items.FindByValue(campaign.contactSourceSurface.ToString()).Selected = true;
ddRecipientSurface_SelectedIndexChanged(null, null);
}
}
}
catch (Exception ex)
{
exception.HandleException("campaigns:", MethodBase.GetCurrentMethod().Name, ex, 0);
Response.Redirect("/error", false);
}
}
#endregion
#region events
///
/// Page Load Event
///
///
///
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (!Page.IsPostBack)
{
BindCampaignData();
BindTemplates();
if (utils.verifySession("campaign"))
{
oCampaign campaign = (oCampaign)Session["campaign"];
}
if (utils.verifySession("eventToCampaigns"))
{
SetCampaignFromEvent();
}
else if (utils.verifySession("campaignParcel"))
{
SetCampaignFromParcel();
}
if (utils.displayDateFormat() == "yyyy/MM/dd")
regExportDate.ValidationExpression = "^(((20[0-9][0-9])|(19[0-9][0-9]))\\/((((0[1-9])|(1[0-2]))\\/((0[1-9])|(1\\d)|(2[0-8])))|((((0[13578])|(1[02]))\\/31)|(((0[1,3-9])|(1[0-2]))\\/(29|30)))))|(((19|20)(([02468][048])|([13579][26]))\\/02\\/29))$";
}
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// set campaign from event
///
private void SetCampaignFromEvent()
{
try
{
oCalendarEvent evnt = (oCalendarEvent)Session["eventToCampaigns"];
oCampaign campaign = new oCampaign();
campaign.campaignTitle = "Reminder for " + evnt.subject + " (created " + DateTime.Now.ToString("dd/MM/yyyy HH:mm") + ")";
campaign.campaignType = 1;
ddCampaignType.Items.Add(new ListItem("Appointment Reminder", "1"));
foreach (oCalendarEventModule calmod in xData.GetTypedByCriteriaSpecific("recId", typeof(oCalendarEventModule), "calendarId", evnt.calendarId.ToString()))
{
foreach (oSurfaceField field in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "recId", calmod.entityNameField.ToString()))
{
campaign.contactNameField = field.surfaceFieldName;
}
foreach (oSurfaceField field in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "recId", calmod.entityMobileField.ToString()))
{
campaign.contactNumberField = field.surfaceFieldName;
}
campaign.contactSourceSurface = calmod.entityId;
campaign.filterField = evnt.filterField;
campaign.filterValue = evnt.filterValue;
}
foreach (oTemplate campaignTemplate in xData.GetTypedByCriteriaSpecific("recId", typeof(oTemplate), "templateTypeId,templateName", ((int)pNums.TemplateType.Campaign).ToString() + ",Event Notification"))
{
campaign.campaignBody = campaignTemplate.templateContent.Replace("{eventName}", evnt.subject).Replace("{eventDate}", evnt.start.ToString("dd/MM/yyyy HH:mm"));
}
campaign.isDraft = true;
campaign.isActive = true;
campaign.isRecurring = false;
campaign.interval = 1;
campaign.messageType = 2;
campaign.nextSend = evnt.start.AddDays(-1);
campaign.dateSaved = System.DateTime.Now;
campaign.createdBy = handler.ReturnUser().recId;
campaign.recId = xData.SaveTyped("recId", typeof(oCampaign), campaign);
TogglePanels("pnlCampaignPage");
Session["CampaignId"] = campaign.recId;
Session["Campaign"] = campaign;
IncludeAll = false;
PopulatePageFormValues(ref campaign);
pnlSMSMessage.Visible = true;
//saveDraft();
ArrayList newRecipList = new ArrayList();
foreach (oCalendarEventContact contact in xData.GetTypedByCriteriaSpecific("recId", typeof(oCalendarEventContact), "calendarEventId,isIncluded", evnt.recId.ToString() + ",1"))
{
oCampaignRecipient newRecip = new oCampaignRecipient();
newRecip.campaignId = Convert.ToInt32(Session["CampaignId"].ToString());
newRecip.surfaceItemId = contact.contactSurfaceItemId;
newRecip.recipientName = contact.recipientName;
newRecip.recipientNumber = contact.recipientNumber;
newRecip.isIncluded = contact.isIncluded;
newRecipList.Add(newRecip);
}
xData.UpdateTypedCollection("recId", typeof(oCampaignRecipient), newRecipList);
DataTable dtRecipients = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oCampaignRecipient), "campaignId,isIncluded", campaign.recId.ToString() + ",1", "recipientName");
Session["dtRecipient"] = dtRecipients;
lblRecipientCount.Text = "Recipient Count: " + RecipientCount.ToString();
ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "showRecipientModal", "$('#modRecipient').modal('hide');", true);
if (ddMessageType.SelectedValue == "2")
{
//CVH 2018-03-27 Allowing longer sms'es to be sent, check message length in validation
//if (RecipientCount > SMSCredit.availableBalance)
if (!ValidateSMSCredits())
{
btnSave.Enabled = false;
lblRecipientCount.ForeColor = System.Drawing.Color.Red;
}
else
{
btnSave.Enabled = true;
lblRecipientCount.ForeColor = System.Drawing.Color.Empty;
}
}
else
{
btnSave.Enabled = true;
lblRecipientCount.ForeColor = System.Drawing.Color.Empty;
}
upCampaigns.Update();
utils.disposeSession("eventToCampaigns");
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// Set Campaign from parcel
///
private void SetCampaignFromParcel()
{
try
{
oCampaignParcel parcel = (oCampaignParcel)Session["campaignParcel"];
//set recipient details
btnNewCampaign_Click(null, null);
if (ddMessageType.Items.FindByValue(parcel.messageType.ToString()) != null)
ddMessageType.SelectedValue = parcel.messageType.ToString();
ToggleMessageTypes();
oCampaignRecipient onceOffRecipient = new oCampaignRecipient();
onceOffRecipient.recipientName = parcel.name;
if (parcel.messageType == 1)
onceOffRecipient.recipientNumber = parcel.email;
else if (parcel.messageType == 2)
onceOffRecipient.recipientNumber = parcel.mobile;
onceOffRecipient.surfaceItemId = parcel.itemId;
onceOffRecipient.isIncluded = true;
ArrayList recipList = new ArrayList();
recipList.Add(onceOffRecipient);
DataTable dtRecipients = utils.ConvertListToDataTable(recipList);
Session["dtRecipient"] = dtRecipients;
//CVH 2017-10-10 Pro-Pro-113 Show name of recipient
lblRecipientCount.Text = "Recipient: " + onceOffRecipient.recipientName;
if (ddMessageType.SelectedValue == "2")
{
//CVH 2018-03-27 Allowing longer sms'es to be sent, check message length in validation
//if (RecipientCount > SMSCredit.availableBalance)
if (!ValidateSMSCredits())
{
btnSave.Enabled = false;
lblRecipientCount.ForeColor = System.Drawing.Color.Red;
}
else
{
btnSave.Enabled = RecipientCount > 0;
lblRecipientCount.ForeColor = System.Drawing.Color.Empty;
}
}
else
{
btnSave.Enabled = RecipientCount > 0;
lblRecipientCount.ForeColor = System.Drawing.Color.Empty;
}
btnSave.Text = "Send Now";
//CVH 2017-10-10 Pro-Pro-111 Enable changing of message type
if (handler.ReturnSetup().code != "PROP-1")
{
ddMessageType.Enabled = false;
}
lnkRecipients.Enabled = false;
if (ddInterval.Items.FindByValue("1") != null)
ddInterval.SelectedValue = "1";
ddInterval.Enabled = false;
utils.disposeSession("campaignParcel");
oCampaign camp = new oCampaign();
if (utils.verifySession("campaign"))
{
camp = (oCampaign)Session["campaign"];
}
camp.contactSourceSurface = parcel.contactSourceSurface;
camp.contactNameField = parcel.contactNameField;
camp.contactNumberField = parcel.contactNumberField;
Session["campaign"] = camp;
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// New Campaign
///
///
///
protected void btnNewCampaign_Click(object sender, EventArgs e)
{
try
{
//show Content Specific
TogglePanels("pnlCampaignPage");
Session["CampaignId"] = 0;
utils.disposeSession("Campaign");
oCampaign Campaign = new oCampaign();
Campaign.isActive = true;
IncludeAll = false;
PopulatePageFormValues(ref Campaign);
divEmailTemplate.Visible = false;
pnlEmailMessage.Visible = false;
pnlSMSMessage.Visible = false;
btnSave.Text = "Save";
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// Edit the Campaign
///
///
///
protected void lnkEdit_Click(object sender, EventArgs e)
{
oCampaign _Campaign = new oCampaign();
ArrayList catList = new ArrayList();
try
{
if (sender.GetType() == typeof(LinkButton))
{
int recId = int.Parse(((LinkButton)sender).CommandArgument);
if (recId > 0)
{
Session["CampaignId"] = recId;
//enumerate list
foreach (oCampaign cat in xData.GetTypedByCriteriaSpecific("recId", typeof(oCampaign), "recId", recId.ToString()))
{
//assign object
_Campaign = cat;
//populate page form
PopulatePageFormValues(ref _Campaign);
Session["Campaign"] = _Campaign;
break;
}
//show Campaign Form
IncludeAll = false;
TogglePanels("pnlCampaignPage");
//if (!IsOnceOffMessage) btnSave.Text = "Save";
//else
//{
// btnSave.Text = "Send";
// ddCampaignType.Enabled = false;
// ddMessageType.Enabled = false;
//}
}
}
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// Clone the Campaign
///
///
///
protected void lnkClone_Click(object sender, EventArgs e)
{
oCampaign _Campaign = new oCampaign();
try
{
if (sender.GetType() == typeof(LinkButton))
{
int recId = int.Parse(((LinkButton)sender).CommandArgument);
if (recId > 0)
{
Session["CampaignId"] = 0;
foreach (oCampaign campaigntoClone in xData.GetTypedByCriteriaSpecific("recId", typeof(oCampaign), "recId", recId.ToString()))
{
//assign object
_Campaign = campaigntoClone;
_Campaign.recId = 0;
_Campaign.campaignTitle += " (Cloned)";
//populate page form
PopulatePageFormValues(ref _Campaign);
Session["Campaign"] = _Campaign;
break;
}
//show Campaign Form
IncludeAll = false;
TogglePanels("pnlCampaignPage");
btnSave.Text = "Save";
saveDraft(true);
int newCampaignId = Convert.ToInt32(Session["CampaignId"].ToString());
List recipList = xData.GetTypedByCriteriaSpecific("recId", typeof(oCampaignRecipient), "campaignId,isIncluded", recId.ToString() + ",1")
.Cast()
.ToList();
recipList.ForEach(x => x.campaignId = newCampaignId);
ArrayList recipients = new ArrayList(recipList);
xData.SaveTypedCollection("recId", typeof(oCampaignRecipient), recipients);
BindRecipients(newCampaignId);
}
}
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// save draft method
///
///
private void saveDraft(bool isClone = false)
{
oCampaign Campaign = new oCampaign();
try
{
if (utils.verifySession("Campaign") && ((oCampaign)Session["Campaign"]).recId > 0)//update mode
{
Campaign = (oCampaign)Session["Campaign"];
Campaign.isDraft = true;
//save form values
SavePageFormValues(ref Campaign);
if (xData.UpdateTyped("recId", Campaign.recId.ToString(), typeof(oCampaign), Campaign))
{
Session["CampaignId"] = Campaign.recId;
Session["Campaign"] = Campaign;
BindCampaignData();
pnlResult.Visible = true;
lblResult.Text = "your changes were updated successfully.";
}
}
else
{
if (utils.verifySession("Campaign") && isClone)
Campaign = (oCampaign)Session["Campaign"];
//save form values
SavePageFormValues(ref Campaign);
if (!xData.VerifyExists("recId", typeof(oCampaign), "campaignTitle", Campaign.campaignTitle, ""))
{
//setup initial values for campaign
Campaign.dateSaved = DateTime.Now;
Campaign.isDraft = true;
oUser usr = handler.ReturnUser();
Campaign.createdBy = usr.recId;
Campaign.recId = xData.SaveTyped("recId", typeof(oCampaign), Campaign);
if (Campaign.recId > 0)
{
Session["CampaignId"] = Campaign.recId;
Session["Campaign"] = Campaign;
BindCampaignData();
PopulatePageFormValues(ref Campaign);
pnlResult.Visible = true;
lblResult.Text = "the Campaign was created successfully.";
}
}
else
{
pnlResult.Visible = true;
lblResult.Text = "A campaign with this title already exists on the system";
}
}
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// Remove the Campaign
///
///
///
protected void lnkRemove_Click(object sender, EventArgs e)
{
try
{
if (sender.GetType() == typeof(LinkButton))
{
//
int recId = int.Parse(((LinkButton)sender).CommandArgument);
//Delete cat
if (xData.DeleteTyped("recId", recId.ToString(), typeof(oCampaign)))
{
//rebind pages grid
BindCampaignData();
pnlResult.Visible = true;
//display successful result
lblResult.Text = "the selected Campaign was deleted successfully.";
}
}
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// Cancel
///
///
///
protected void btnCancel_Click(object sender, EventArgs e)
{
try
{
Session["CampaignId"] = 0;
utils.disposeSession("Campaign");
//CVH 2017-10-10 Pro-Pro-112 Redirect back to surface instead of campaign grid if came from surface
if (utils.verifySession("SurfaceControlParcel"))
{
//only catering for main surface now, not handling child surface redirect back
oSurfaceControlParcel parcel = (oSurfaceControlParcel)Session["SurfaceControlParcel"];
Response.Redirect("/pages/" + parcel.SurfaceApp.name + "?mode=view", false);
}
else
{
BindCampaignData();
//show list
TogglePanels("pnlCampaignList");
}
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// Save Click
///
///
///
protected void btnSave_Click(object sender, EventArgs e)
{
oCampaign Campaign = new oCampaign();
try
{
if (ValidateCampaign())
{
//CVH 2018-03-27 Don't send SMS if not enough credits
if (ddMessageType.SelectedValue == "2" && !ValidateSMSCredits())
{
pnlResult.Visible = true;
lblResult.Text = "Not enough credits to send SMS.";
}
else
{
if (utils.verifySession("Campaign") && ((oCampaign)Session["Campaign"]).recId > 0)//update mode
{
Campaign = (oCampaign)Session["Campaign"];
Campaign.isDraft = false;
//save form values
SavePageFormValues(ref Campaign);
if (xData.UpdateTyped("recId", Campaign.recId.ToString(), typeof(oCampaign), Campaign))
{
Session["CampaignId"] = Campaign.recId;
Session["Campaign"] = Campaign;
BindCampaignData();
pnlResult.Visible = true;
if (Campaign.interval == 1) //once off
lblResult.Text = "your message has been queued";
else
lblResult.Text = "your changes were updated successfully.";
}
}
else
{
if (utils.verifySession("Campaign"))
Campaign = (oCampaign)Session["Campaign"];
//save form values
SavePageFormValues(ref Campaign);
if (!xData.VerifyExists("recId", typeof(oCampaign), "campaignTitle", Campaign.campaignTitle, "") || Campaign.interval == 1)
{
//setup initial values for campaign
Campaign.dateSaved = DateTime.Now;
Campaign.isDraft = false;
oUser usr = handler.ReturnUser();
Campaign.createdBy = usr.recId;
Campaign.recId = xData.SaveTyped("recId", typeof(oCampaign), Campaign);
if (Campaign.recId > 0)
{
Session["CampaignId"] = Campaign.recId;
Session["Campaign"] = Campaign;
BindCampaignData();
if (Campaign.interval == 1)
{
if (utils.verifySession("dtRecipient"))
{
DataTable dtRecipient = (DataTable)Session["dtRecipient"];
foreach (oCampaignRecipient recip in utils.ConvertDataTableToList(dtRecipient, typeof(oCampaignRecipient)))
{
recip.campaignId = Campaign.recId;
if (recip.recId == 0)
{
recip.recId = xData.SaveTyped("recId", typeof(oCampaignRecipient), recip);
}
}
}
lblResult.Text = "your message has been queued";
lnkRecipients.Enabled = true;
}
else
lblResult.Text = "the " + (handler.ReturnSetup().code == "PROP-1" ? "Template" : "Campaign") + " was created successfully.";
pnlResult.Visible = true;
PopulatePageFormValues(ref Campaign);
pnlResult.Visible = true;
lblResult.Text = "the Campaign was created successfully.";
}
}
else
{
pnlResult.Visible = true;
lblResult.Text = "A campaign with this title already exists on the system";
}
}
}
}
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// Send Once off message
///
///
private void SendOnceOff(oCampaign campaign)
{
//change this to allow for recipients to be sent to once off
try
{
//campaign.messageType ==
if (txbMessageSMS.Value != String.Empty)
{
foreach (oCampaignRecipient recipient in xData.GetTypedByCriteriaSpecific("recId", typeof(oCampaignRecipient), "campaignId", campaign.recId.ToString()))
{
if (recipient.recipientNumber != String.Empty)
{
lblResultSMSTest.Visible = true;
if (txtMobileNumbers.Value.Contains(","))//send the sms in a batch
{
int resultBatch = xSendEasy.SendSMSBatch(handler.ReturnConfigAppSetting("smsU"), handler.ReturnConfigAppSetting("smsP"), txtMobileNumbers.Value.Split(char.Parse(",")), txbMessageSMS.Value);
if (resultBatch < 0)
{
lblResultSMSTest.Text = "SMS Failed: " + xSendEasy.ReturnErrorDetail(resultBatch);
}
else
{
lblResultSMSTest.Text = "SMS Test message was sent successfully.";
}
}
else//send individual
{
long resultSingle = xSendEasy.SendSMS(handler.ReturnConfigAppSetting("smsU"), handler.ReturnConfigAppSetting("smsP"), txtMobileNumbers.Value, txbMessageSMS.Value);
if (resultSingle < 0)
{
lblResultSMSTest.Text = "SMS Failed: " + xSendEasy.ReturnErrorDetail(Convert.ToInt32(resultSingle));
}
else
{
lblResultSMSTest.Text = "SMS Test message was sent successfully.";
}
}
}
}
}
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// Save Draft Click
///
///
///
protected void btnDraft_Click(object sender, EventArgs e)
{
saveDraft();
}
///
/// Selected Index Changed event
///
///
///
protected void ddCampaignType_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
if (ddCampaignType.SelectedValue == "1")
txbMessageSMS.Value = "Dear {name}, this is just a reminder of your appointment with {customer} tomorrow, {startDate} at {startTime}.See you then.";
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// Message Type Selection Changed
///
///
///
protected void ddMessageType_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
ToggleMessageTypes();
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// Email Template selected index changed
///
///
///
protected void ddEmailTemplate_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
if (ddEmailTemplate.SelectedValue != "0")
{
ArrayList templateList = new ArrayList();
templateList = xData.GetTypedByCriteriaSpecific("recId", typeof(oTemplate), "recId", ddEmailTemplate.SelectedValue);
foreach (oTemplate template in templateList)
{
//apply template to editor
edEmailMessage.Content = template.templateContent;
}
}
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// Send Test Email
///
///
///
protected void lnkSendEmailTest_Click(object sender, EventArgs e)
{
try
{
if (edEmailMessage.Content != String.Empty)
{
if (txtTestEmails.Value != String.Empty)
{
oEmail testEmail = new oEmail();
testEmail.Subject = txtTitle.Value;
testEmail.Body = edEmailMessage.Content;
testEmail.Body = testEmail.Body.Replace("src=\"/images", "src=\"" + handler.ReturnConfigAppSetting("WebAddy") + "/images");
testEmail.Body = testEmail.Body.Replace("{WebAddress}", handler.ReturnConfigAppSetting("WebAddy"));
testEmail.toAddress = txtTestEmails.Value;
testEmail.fromAddress = handler.ReturnConfigAppSetting("from");
bool success = false;
success = communication.SendAnEmail(testEmail);
lblResultEmailTest.Visible = true;
if (success)
lblResultEmailTest.Text = "Email Test message was sent successfully.";
else
lblResultEmailTest.Text = "Email Test message failed to send.";
}
}
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// Send a Test SMS
///
///
///
protected void lnkSendTextSMS_Click(object sender, EventArgs e)
{
try
{
if (txbMessageSMS.Value != String.Empty)
{
if (txtMobileNumbers.Value != String.Empty)
{
lblResultSMSTest.Visible = true;
if (txtMobileNumbers.Value.Contains(","))//send the sms in a batch
{
int resultBatch = xSendEasy.SendSMSBatch(handler.ReturnConfigAppSetting("smsU"), handler.ReturnConfigAppSetting("smsP"), txtMobileNumbers.Value.Split(char.Parse(",")), txbMessageSMS.Value);
if (resultBatch < 0)
{
lblResultSMSTest.Text = "SMS Failed: " + xSendEasy.ReturnErrorDetail(resultBatch);
}
else
{
lblResultSMSTest.Text = "SMS Test message was sent successfully.";
}
}
else//send individual
{
long resultSingle = xSendEasy.SendSMS(handler.ReturnConfigAppSetting("smsU"), handler.ReturnConfigAppSetting("smsP"), txtMobileNumbers.Value, txbMessageSMS.Value);
if (resultSingle < 0)
{
lblResultSMSTest.Text = "SMS Failed: " + xSendEasy.ReturnErrorDetail(Convert.ToInt32(resultSingle));
}
else
{
lblResultSMSTest.Text = "SMS Test message was sent successfully.";
}
}
}
}
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// recipients click
///
///
///
protected void lnkRecipients_Click(object sender, EventArgs e)
{
//if (MessageType == "email")
//{
// lblRecipientNumber.Text = "Contact Email";
//}
//else if (MessageType == "sms")
//{
// lblRecipientNumber.Text = "Contact Number";
//}
ReadonlyRecipients = false;
divRecipientsFilter.Visible = !ReadonlyRecipients;
BindSurfaces();
GenerateRecipients(true);
upRecipient.Update();
ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "showRecipientModal", "$('#modRecipient').modal('show');", true);
}
///
/// surface change
///
///
///
protected void ddRecipientSurface_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
if (ddRecipientSurface.SelectedValue != null)
{
if ((ddMessageType.SelectedItem != null && ddMessageType.SelectedItem.Value == "2") || (utils.verifySession("Campaign") && ((oCampaign)Session["Campaign"]).messageType == 2))
{
DataTable numberFields = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oSurfaceField), "isActive,validationType,surfaceId", "1," + ((int)pNums.ValidationType.ContactNumber).ToString() + "," + ddRecipientSurface.SelectedValue.ToString(), "surfaceFieldName");
foreach (oSurfaceField labelFields in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "isActive,surfaceFieldTypeId,surfaceId", "1,29," + ddRecipientSurface.SelectedValue.ToString(), "surfaceFieldName"))
{
foreach (oSurfaceField labelNumberFields in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "recId,validationType", labelFields.relationalFields + "," + ((int)pNums.ValidationType.ContactNumber).ToString()))
{
DataTable numberLabelFields = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oSurfaceField), "recId", labelFields.recId.ToString());
numberFields.Merge(numberLabelFields);
}
}
ddRecipientNumber.DataSource = numberFields;
ddRecipientNumber.DataTextField = "surfaceFieldDisplay";
ddRecipientNumber.DataValueField = "surfaceFieldName";
ddRecipientNumber.DataBind();
ddRecipientNumber.Items.Insert(0, new ListItem("select...", "0"));
}
else
{
DataTable emailFields = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oSurfaceField), "isActive,validationType,surfaceId", "1," + ((int)pNums.ValidationType.Email).ToString() + "," + ddRecipientSurface.SelectedValue.ToString(), "surfaceFieldName");
foreach (oSurfaceField labelFields in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "isActive,surfaceFieldTypeId,surfaceId", "1,29," + ddRecipientSurface.SelectedValue.ToString(), "surfaceFieldName"))
{
foreach (oSurfaceField labelEmailFields in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "recId,validationType", labelFields.relationalFields + "," + ((int)pNums.ValidationType.Email).ToString()))
{
DataTable emailLabelFields = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oSurfaceField), "recId", labelFields.recId.ToString());
emailFields.Merge(emailLabelFields);
}
}
ddRecipientNumber.DataSource = emailFields;
ddRecipientNumber.DataTextField = "surfaceFieldDisplay";
ddRecipientNumber.DataValueField = "surfaceFieldName";
ddRecipientNumber.DataBind();
ddRecipientNumber.Items.Insert(0, new ListItem("select...", "0"));
}
DataTable nameFields = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oSurfaceField), "isActive,surfaceFieldTypeId,surfaceId,surfaceFieldName", "1,~()3|29," + ddRecipientSurface.SelectedValue.ToString() + ",~%name", "surfaceFieldName");
//CVH 2018-04-09 There are multiple fields with display "First Name", "Surname" etc. Add group to help differentiate
if (handler.ReturnSetup().code == "GLOB-1" || handler.ReturnSetup().code == "GLOB-2" || handler.ReturnSetup().code == "MEDI-1")
{
var groups = xData.GetDynamicByCriteriaSpecific("recId", typeof(oSurfaceField), "isActive,surfaceFieldTypeId,surfaceId", "1,2," + ddRecipientSurface.SelectedValue.ToString()).AsEnumerable();
for (int i=0; i 0)
{
var groupDisplay = (from groupRow in groups
where groupRow.Field("recId").Equals(groupId)
select groupRow.Field("surfaceFieldDisplay")).FirstOrDefault();
nameFields.Rows[i]["surfaceFieldDisplay"] = nameFields.Rows[i]["surfaceFieldDisplay"].ToString() + " (" + groupDisplay + ")";
}
}
}
lstRecipientName.DataSource = nameFields;
lstRecipientName.DataTextField = "surfaceFieldDisplay";
lstRecipientName.DataValueField = "surfaceFieldName";
lstRecipientName.DataBind();
//ddRecipientName.Items.Insert(0, new ListItem("select...", "0"));
if (handler.ReturnSetup().code == "STUD-1")//only show sbf filters
{
divFilterStandard.Visible = false;
divFilterSBF.Visible = true;
foreach (oSurface surface in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurface), "name,isActive", "Profiles,1"))
{
foreach (oSurfaceField field in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceId,isActive,surfaceFieldName", surface.recId.ToString() + ",1,ProfileHeader_School"))
{
DataTable dtSchoolValues = xData.GetSurfaceModulePicklist(Convert.ToInt32(field.relationalFields));
lstRecipientFilterSchool.DataSource = dtSchoolValues;
lstRecipientFilterSchool.DataTextField = "DataText";
lstRecipientFilterSchool.DataValueField = "DataText";
lstRecipientFilterSchool.DataBind();
}
}
lstRecipientFilterIntakeYear.Items.Clear();
for (int i = 2010; i <= DateTime.Now.Year; i++)
{
string display = i.ToString();
if (i == DateTime.Now.Year - 4)
display = i.ToString() + " (Grade 12)";
if (i == DateTime.Now.Year - 3)
display = i.ToString() + " (Grade 11)";
if (i == DateTime.Now.Year - 2)
display = i.ToString() + " (Grade 10)";
if (i == DateTime.Now.Year - 1)
display = i.ToString() + " (Grade 9)";
if (i == DateTime.Now.Year)
display = i.ToString() + " (Grade 8)";
lstRecipientFilterIntakeYear.Items.Add(new ListItem(display, i.ToString()));
}
}
else
{
divFilterStandard.Visible = true;
divFilterSBF.Visible = false;
DataTable filterFields = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oSurfaceField), "isActive,surfaceFieldTypeId,surfaceId", "1,6," + ddRecipientSurface.SelectedValue.ToString(), "surfaceFieldName");
ddRecipientFilter.DataSource = filterFields;
ddRecipientFilter.DataTextField = "surfaceFieldDisplay";
ddRecipientFilter.DataValueField = "surfaceFieldName";
ddRecipientFilter.DataBind();
ddRecipientFilter.Items.Insert(0, new ListItem("select...", "0"));
}
if (utils.verifySession("Campaign"))
{
oCampaign campaign = (oCampaign)Session["Campaign"];
if (ddRecipientNumber.Items.FindByValue(campaign.contactNumberField.ToString()) != null)
ddRecipientNumber.Items.FindByValue(campaign.contactNumberField.ToString()).Selected = true;
foreach (var sel in campaign.contactNameField.Split(','))
{
if (lstRecipientName.Items.FindByValue(sel) != null)
lstRecipientName.Items.FindByValue(sel).Selected = true;
}
if (handler.ReturnSetup().code == "STUD-1")
{
int filterIndex = 0;
foreach (string fieldType in campaign.filterValue.Split('|'))
{
foreach (string fields in fieldType.Split(','))
{
switch (filterIndex)
{
case 0://school
if (fields.Length > 0)
{
if (lstRecipientFilterSchool.Items.FindByValue(fields.Substring(1, fields.Length - 2).Replace("''", "'")) != null)
{
lstRecipientFilterSchool.Items.FindByValue(fields.Substring(1, fields.Length - 2).Replace("''", "'")).Selected = true;
}
}
break;
case 1://intake year
if (lstRecipientFilterIntakeYear.Items.FindByValue(fields.Replace("'", "")) != null)
{
lstRecipientFilterIntakeYear.Items.FindByValue(fields.Replace("'", "")).Selected = true;
}
break;
default:
break;
}
}
filterIndex++;
}
GenerateRecipients(true);
}
else
{
if (ddRecipientFilter.Items.FindByValue(campaign.filterField.ToString()) != null)
{
ddRecipientFilter.Items.FindByValue(campaign.filterField.ToString()).Selected = true;
ddRecipientFilter_SelectedIndexChanged(null, null);
}
}
}
}
}
catch (Exception ex)
{
exception.HandleException("campaigns:", MethodBase.GetCurrentMethod().Name, ex, 0);
Response.Redirect("/error", false);
}
}
///
/// recipient filter selected index change
///
///
///
protected void ddRecipientFilter_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
string fieldId = ddRecipientFilter.SelectedValue;
if (fieldId != "0")
{
oSurfaceField filterField = ((oSurfaceField)xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceFieldName", fieldId)[0]);
if (filterField.isCustomSource)
{
string fieldSelect = String.Empty;
String[] flds = filterField.relationalFields.Split(char.Parse(","));
foreach (string f in flds)
{
if (fieldSelect == String.Empty)
fieldSelect = f;
else
fieldSelect += " + ' ' + " + f;
}
string query = "Select " + filterField.relationalValues + ", " + fieldSelect + " AS Display FROM " + filterField.relationalObject + " ";
if (filterField.relationalWhere != String.Empty)
{
query += "WHERE " + filterField.relationalWhere + " ";
}
if (filterField.relationalOrderBy != String.Empty)
{
query += "ORDER By " + filterField.relationalOrderBy + " ";
}
DataTable customDT = xData.GetCustomTypedTable(query);
lstRecipientFilterValue.DataSource = customDT;
lstRecipientFilterValue.DataTextField = "Display";
lstRecipientFilterValue.DataValueField = filterField.relationalValues;
lstRecipientFilterValue.DataBind();
//lstRecipientFilterValue.Items.Insert(0, new ListItem("select", "0"));
}
else
{
int lookupCatId = ((oSurfaceField)xData.GetTypedByCriteriaSpecific("recId", typeof(oSurfaceField), "surfaceFieldName", fieldId)[0]).lookupCategory;
DataTable dtFilterValues = xData.GetTypedByCriteriaSpecificTable("recId", typeof(oSurfaceLookup), "categoryId,isActive", lookupCatId.ToString() + ",1", "sequence");
lstRecipientFilterValue.DataSource = dtFilterValues;
lstRecipientFilterValue.DataTextField = "display";
lstRecipientFilterValue.DataValueField = "display";
lstRecipientFilterValue.DataBind();
//lstRecipientFilterValue.Items.Insert(0, new ListItem("select..."));
}
if (utils.verifySession("Campaign"))
{
oCampaign campaign = (oCampaign)Session["Campaign"];
foreach (string fields in campaign.filterValue.Split(','))
{
if (lstRecipientFilterValue.Items.FindByValue(fields.Replace("'", "")) != null)
{
lstRecipientFilterValue.Items.FindByValue(fields.Replace("'", "")).Selected = true;
}
}
//if (lstRecipientFilterValue.SelectedIndex != -1)
// GenerateRecipients(true);
}
}
}
catch (Exception ex)
{
exception.HandleException("campaigns:", MethodBase.GetCurrentMethod().Name, ex, 0);
Response.Redirect("/error", false);
}
}
///
/// btn generate click
///
///
///
protected void btnGenerate_Click(object sender, EventArgs e)
{
GenerateRecipients();
}
///
/// recipient save
///
///
///
protected void btnRecipientSave_Click(object sender, EventArgs e)
{
try
{
ArrayList currentList = new ArrayList();
ArrayList newList = new ArrayList();
oCampaign campaign = new oCampaign();
//string contactNumberField = "";
//if (ddMessageType.SelectedItem != null && ddMessageType.SelectedItem.Value == "2") //sms
// contactNumberField = "Mobile";
//else
// contactNumberField = "Email";
//var contactNameFields = String.Empty;
//foreach (var selected in lstRecipientName.GetSelectedIndices())
//{
// if (contactNameFields == String.Empty)
// contactNameFields = lstRecipientName.Items[selected].Value;
// else
// contactNameFields += "," + lstRecipientName.Items[selected].Value;
//}
if (!utils.verifySession("Campaign"))
{
//CVH 2017-10-11 If no campaign, need to create it, otherwise recipients saved with campaignId = 0
btnSave_Click(this, new EventArgs());
if (utils.verifySession("Campaign"))
campaign = (oCampaign)Session["Campaign"];
}
else
{
campaign = (oCampaign)Session["Campaign"];
}
if (campaign.recId <= 0)
throw new Exception("Campaign could not be created, unknown reason.");
currentList = xData.GetTypedByCriteriaSpecific("recId", typeof(oCampaignRecipient), "campaignId,isIncluded", campaign.recId.ToString() + ",1");
if (currentList.Count > 0)
{
foreach (oCampaignRecipient item in currentList)
{
item.isIncluded = false;
}
xData.UpdateTypedCollection("recId", typeof(oCampaignRecipient), currentList);
}
DataTable dtRecipients = (DataTable)Session["dtRecipient"];
foreach (DataRow row in dtRecipients.Rows)
{
if (row["isIncluded"].ToString() == "True")
{
oCampaignRecipient campaignRecipient = new oCampaignRecipient();
campaignRecipient.campaignId = campaign.recId;
campaignRecipient.surfaceItemId = Convert.ToInt32(row["surfaceItemId"].ToString());
campaignRecipient.recipientName = row["recipientName"].ToString();
campaignRecipient.recipientNumber = row["recipientNumber"].ToString();
campaignRecipient.isIncluded = true;
newList.Add(campaignRecipient);
}
}
xData.UpdateTypedCollection("recId", typeof(oCampaignRecipient), newList);
lblRecipientCount.Text = "Recipient Count: " + RecipientCount.ToString();
ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "showRecipientModal", "$('#modRecipient').modal('hide');", true);
if (ddMessageType.SelectedValue == "2")
{
//CVH 2018-03-27 Allowing longer sms'es to be sent, check message length in validation
//if (RecipientCount > SMSCredit.availableBalance)
if (!ValidateSMSCredits())
{
btnSave.Enabled = false;
lblRecipientCount.ForeColor = System.Drawing.Color.Red;
}
else
{
btnSave.Enabled = true;
lblRecipientCount.ForeColor = System.Drawing.Color.Empty;
}
}
else
{
btnSave.Enabled = true;
lblRecipientCount.ForeColor = System.Drawing.Color.Empty;
}
upCampaigns.Update();
}
catch (Exception ex)
{
exception.HandleException("campaigns:", MethodBase.GetCurrentMethod().Name, ex, 0);
Response.Redirect("/error", false);
}
}
///
/// include all click
///
///
///
protected void lnkIncludeAll_Click(object sender, EventArgs e)
{
try
{
LinkButton lnkIncludeAll = (LinkButton)sender;
DataTable dtRecipients = (DataTable)Session["dtRecipient"];
if (IncludeAll)
{
IncludeAll = false;
foreach (DataRow row in dtRecipients.Rows)
{
row["isIncluded"] = false;
}
}
else
{
IncludeAll = true;
foreach (DataRow row in dtRecipients.Rows)
{
row["isIncluded"] = true;
}
}
Session["dtRecipient"] = dtRecipients;
grdRecipients.DataSource = dtRecipients;
grdRecipients.DataBind();
lnkIncludeAll.Text = IncludeAll ? "exclude all" : "include all";
lblRecipientIncludedCount.Text = "Recipient Count: " + RecipientCount.ToString();
btnRecipientSave.Visible = RecipientCount > 0;
upRecipient.Update();
}
catch (Exception ex)
{
exception.HandleException("campaigns:", MethodBase.GetCurrentMethod().Name, ex, 0);
Response.Redirect("/error", false);
}
}
///
/// recipient prerender
///
///
///
protected void rptRecipient_PreRender(object sender, EventArgs e)
{
Repeater rptRecipient = (Repeater)sender;
LinkButton lnkIncludeAll = (LinkButton)rptRecipient.Controls[0].Controls[0].FindControl("lnkIncludeAll");
lnkIncludeAll.Text = IncludeAll ? "exclude all" : "include all";
}
///
/// recipient item created
///
///
///
protected void rptRecipient_ItemCreated(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Header)
{
LinkButton lnkIncludeAll = (LinkButton)e.Item.FindControl("lnkIncludeAll");
lnkIncludeAll.Text = IncludeAll ? "exclude all" : "include all";
}
}
///
/// check included
///
///
///
protected void chkIncluded_CheckedChanged(object sender, EventArgs e)
{
int selRowIndex = ((GridViewRow)(((CheckBox)sender).Parent.Parent)).RowIndex;
CheckBox cb = (CheckBox)grdRecipients.Rows[selRowIndex].FindControl("chkIncluded");
Label lblId = (Label)grdRecipients.Rows[selRowIndex].FindControl("lblId");
Label lblName = (Label)grdRecipients.Rows[selRowIndex].FindControl("lblName");
Label lblNumber = (Label)grdRecipients.Rows[selRowIndex].FindControl("lblNumber");
DataTable dtRecipients = (DataTable)Session["dtRecipient"];
DataRow[] foundRows = dtRecipients.Select("recId = " + lblId.Text + "AND recipientName = '" + lblName.Text + "' AND recipientNumber = '" + lblNumber.Text + "'");
foundRows[0]["isIncluded"] = cb.Checked;
Session["dtRecipient"] = dtRecipients;
grdRecipients.DataSource = dtRecipients;
//grdRecipients.DataBind();
lblRecipientIncludedCount.Text = "Recipient Count: " + RecipientCount.ToString();
btnRecipientSave.Visible = RecipientCount > 0;
upRecipient.Update();
}
///
/// recipientlist click
///
///
///
protected void lnkRecipientList_Click(object sender, EventArgs e)
{
oCampaign _Campaign = new oCampaign();
ArrayList catList = new ArrayList();
try
{
if (sender.GetType() == typeof(LinkButton))
{
int recId = int.Parse(((LinkButton)sender).CommandArgument);
if (recId > 0)
{
Session["CampaignId"] = recId;
catList = xData.GetTypedByCriteriaSpecific("recId", typeof(oCampaign), "recId", recId.ToString());
//enumerate list
foreach (oCampaign cat in catList)
{
//assign object
_Campaign = cat;
Session["Campaign"] = _Campaign;
break;
}
ReadonlyRecipients = true;
BindSurfaces();
GenerateRecipients();
divRecipientsFilter.Visible = !ReadonlyRecipients;
upRecipient.Update();
ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "showRecipientModal", "$('#modRecipient').modal('show');", true);
}
}
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// grid recipients prerender
///
///
///
protected void grdRecipients_PreRender(object sender, EventArgs e)
{
if (grdRecipients.Rows.Count > 0)
{
LinkButton lnkIncludeAll = (LinkButton)grdRecipients.Controls[0].Controls[0].FindControl("lnkIncludeAll");
lnkIncludeAll.Text = IncludeAll ? "exclude all" : "include all";
lnkIncludeAll.Visible = !ReadonlyRecipients;
}
}
///
/// grid recipients rowcreated
///
///
///
protected void grdRecipients_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Header)
{
e.Row.TableSection = TableRowSection.TableHeader;
LinkButton lb = (LinkButton)e.Row.Cells[3].FindControl("lnkIncludeAll");
lb.Visible = !ReadonlyRecipients;
}
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.TableSection = TableRowSection.TableBody;
CheckBox chkIncluded = (CheckBox)e.Row.FindControl("chkIncluded");
chkIncluded.Enabled = !ReadonlyRecipients;
}
if (e.Row.RowType == DataControlRowType.Footer)
{
e.Row.TableSection = TableRowSection.TableFooter;
}
}
///
/// Campaign Log Item Data Bound
///
///
///
protected void rptLog_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
try
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Label lblRecipientType = (Label)e.Item.FindControl("lblRecipientType");
if (lblRecipientType != null)
{
string surfaceId = lblRecipientType.Text;
if (surfaceId == "" || surfaceId == "0")
lblRecipientType.Text = "";
else if (surfaceId == "1")
lblRecipientType.Text = "General";
else
{
lblRecipientType.Text = "";
foreach (oSurface surf in xData.GetTypedByCriteriaSpecific("recId", typeof(oSurface), "recId", surfaceId))
{
lblRecipientType.Text = surf.surface;
}
}
}
}
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// Interval selection changed
///
///
///
protected void ddInterval_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
if (sender is DropDownList)
{
DropDownList dd = (DropDownList)sender;
BindCampaignTypes();
if (dd.SelectedItem != null && dd.SelectedItem.Text == "Once Off")
{
if (ddCampaignType.Items.FindByText("Ad Hoc") != null)
ddCampaignType.SelectedValue = ddCampaignType.Items.FindByText("Ad Hoc").Value;
ddCampaignType.Enabled = false;
divDateTime.Visible = false;
btnSave.Text = "Send Now";
txbStartDate.Text = System.DateTime.Now.ToString("dd/MM/yyyy");
txbTime.Text = System.DateTime.Now.ToString("HH:mm");
}
else
{
if (ddCampaignType.Items.FindByText("Ad Hoc") != null)
ddCampaignType.Items.Remove(ddCampaignType.Items.FindByText("Ad Hoc"));
ddCampaignType.Enabled = true;
divDateTime.Visible = true;
btnSave.Text = "Save";
}
}
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
///
///
///
///
protected void lnkLogTitle_Click(object sender, EventArgs e)
{
oCampaign _Campaign = new oCampaign();
ArrayList catList = new ArrayList();
try
{
if (sender.GetType() == typeof(LinkButton))
{
int recId = int.Parse(((LinkButton)sender).CommandArgument);
foreach (oCampaign campaign in xData.GetTypedByCriteriaSpecific("recId", typeof(oCampaign), "recId", recId.ToString()))
{
if (campaign.messageType == 1) //email
{
radMessageSent.Content = campaign.campaignBody;
lblMessageSent.Visible = false;
radMessageSent.Visible = true;
}
else
{
lblMessageSent.Text = campaign.campaignBody;
lblMessageSent.Visible = true;
radMessageSent.Visible = false;
}
lblLogTitle.Text = string.Format("{0} message", campaign.campaignTitle);
}
upLogMessage.Update();
ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "showMessageModal", "$('#modMessage').modal('show');", true);
}
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
///
/// Export to Excel
///
///
///
protected void btnExport_Click(object sender, EventArgs e)
{
try
{
string exportDate = "";
DateTime dtExportDate = new DateTime();
if (txtExportDate.Text != "" && DateTime.TryParse(txtExportDate.Text, out dtExportDate) && dtExportDate > Convert.ToDateTime("2000-01-01"))
exportDate = dtExportDate.ToString("yyyy-MM-dd");
//create Excel
string fileName = "CommunicationsLog" + exportDate.Replace("-", "") + "_" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss") + ".xlsx";
List list = new List();
oDynamicParam param = new oDynamicParam();
param.paramDisplayName = "exportDate";
param.paramObject = exportDate;
list.Add(param);
DataTable dt = xData.GetTypedTableByProc("recId", typeof(oCampaignMessage), "sp_CampaignLogExport", list);
dt.TableName = "Communications Log";
string excelFile = Server.MapPath("~/upload/documents/" + fileName);
utils.ExportDataTabletoExcelFormatted(dt, excelFile, true, false);
//CVH 2018-01-12 Response.Transmitfile not working, getting javascript error, doing it this way works.
string virtualPath = ConfigurationManager.AppSettings["WebAddy"] + "/upload/documents/" + fileName;
ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "downloadFile", "window.open('" + virtualPath + "');", true);
}
catch (Exception ex)
{
exception.HandleException("Campaigns:", MethodBase.GetCurrentMethod().Name, ex, Session["campaign"]);
Response.Redirect("/error", false);
}
}
#endregion
#region Properties
///
/// Include All Property
///
public bool IncludeAll
{
get
{
if (ViewState["includeAll"] == null)
return false;
else
return (bool)ViewState["includeAll"];
}
set
{
ViewState["includeAll"] = value;
}
}
///
/// Calc Recipient Count
///
public int RecipientCount
{
get
{
int counter = 0;
DataTable dtRecipients = (DataTable)Session["dtRecipient"];
foreach (DataRow row in dtRecipients.Rows)
{
if (row["isIncluded"].ToString() == "True")
{
counter++;
}
}
return counter;
}
}
public oSMSCredit SMSCredit
{
get
{
return (oSMSCredit)(xData.GetTypedByCriteriaSpecific("recId", typeof(oSMSCredit), "customerCode", handler.ReturnSetup().code, "", "pal_", true)[0]);
}
}
//public string MessageType
//{
// get
// {
// string returnVal = "";
// if (ViewState["messageType"] == null)
// {
// if (utils.verifySession("campaign"))
// {
// oCampaign campaign = (oCampaign)Session["campaign"];
// switch (campaign.messageType)
// {
// case 1:
// returnVal = "email";
// break;
// case 2:
// returnVal = "sms";
// break;
// default:
// break;
// }
// }
// return returnVal;
// }
// else
// return ViewState["messageType"].ToString();
// }
// set
// {
// ViewState["messageType"] = value;
// }
//}
public bool ReadonlyRecipients
{
get
{
if (ViewState["readonlyRecipients"] == null)
return false;
else
return (bool)ViewState["readonlyRecipients"];
}
set
{
ViewState["readonlyRecipients"] = value;
}
}
#endregion
}