using System;
using System.Collections.Generic;
using System.Data;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CMS.CMSHelper;
using CMS.GlobalHelper;
using CMS.OnlineMarketing;
using CMS.SettingsProvider;
using CMS.UIControls;
using CMS.ExtendedControls;
using CMS.FormControls;
using CMS.ExtendedControls.ActionsConfig;
public partial class CMSModules_ContactManagement_Controls_UI_Account_Edit : CMSAdminEditControl
{
#region "Variables"
private AccountInfo ai = null;
private int mSiteID = 0;
private bool mergedIntoSite = false;
private bool mergedIntoGlobal = false;
private AccountInfo parentAI = null;
///
/// URL of modal dialog window for account editing.
///
private const string ACCOUNT_DETAIL_DIALOG = "~/CMSModules/ContactManagement/Pages/Tools/Contact/Account_Detail.aspx";
#endregion
#region "Properties"
///
/// Indicates if the control should perform the operations.
///
public override bool StopProcessing
{
get
{
return base.StopProcessing;
}
set
{
base.StopProcessing = value;
}
}
///
/// Indicates if the control is used on the live site.
///
public override bool IsLiveSite
{
get
{
return base.IsLiveSite;
}
set
{
EnsureChildControls();
base.IsLiveSite = value;
parentAccount.IsLiveSite = value;
accountStatus.IsLiveSite = value;
accountOwner.IsLiveSite = value;
countrySelector.IsLiveSite = value;
primaryContact.IsLiveSite = value;
secondaryContact.IsLiveSite = value;
contactRolePrimary.IsLiveSite = value;
contactRoleSecondary.IsLiveSite = value;
htmlNotes.IsLiveSite = value;
}
}
///
/// SiteID of current account.
///
public int SiteID
{
get
{
return mSiteID;
}
set
{
mSiteID = value;
if ((mSiteID > 0) && !CMSContext.CurrentUser.UserSiteManagerAdmin)
{
mSiteID = CMSContext.CurrentSiteID;
}
parentAccount.SiteID = mSiteID;
accountStatus.SiteID = mSiteID;
primaryContact.SiteID = mSiteID;
secondaryContact.SiteID = mSiteID;
contactRolePrimary.SiteID = mSiteID;
contactRoleSecondary.SiteID = mSiteID;
}
}
#endregion
#region "Page events"
protected void Page_Init(object sender, EventArgs e)
{
primaryContact.UniSelector.SelectionMode = SelectionModeEnum.SingleDropDownList;
secondaryContact.UniSelector.SelectionMode = SelectionModeEnum.SingleDropDownList;
// Get edited object
if (CMSContext.EditedObject != null)
{
ai = (AccountInfo)CMSContext.EditedObject;
}
InitHeaderActions();
}
protected void Page_Load(object sender, EventArgs e)
{
if (StopProcessing)
{
Visible = false;
}
else
{
// Display info label that account is merged into site account
if ((ai != null) && (mergedIntoSite))
{
parentAI = AccountInfoProvider.GetAccountInfo(ai.AccountMergedWithAccountID);
lblMergedInto.ResourceString = "om.account.mergedintosite";
}
// Display info that account is merged into global account
else if ((ai != null) && (mergedIntoGlobal))
{
parentAI = AccountInfoProvider.GetAccountInfo(ai.AccountGlobalAccountID);
lblMergedInto.ResourceString = "om.account.mergedintoglobal";
}
// Don't display any info
else
{
lblMergedInto.Visible = false;
}
// Set basic properties
pnlGeneral.GroupingText = GetString("general.general");
pnlAddress.GroupingText = GetString("contentmenu.address");
pnlContacts.GroupingText = GetString("om.contact.list");
pnlNotes.GroupingText = GetString("om.account.notes");
btnStamp.OnClientClick = "AddStamp('" + htmlNotes.ClientID + "'); return false;";
Reload();
RegisterScripts();
primaryContact.OnSelectionChanged += (s, ea) => SetContactRoleID((FormEngineUserControl)s, contactRolePrimary);
secondaryContact.OnSelectionChanged += (s, ea) => SetContactRoleID((FormEngineUserControl)s, contactRoleSecondary);
// Display 'changes saved' or 'split' label
if (!RequestHelper.IsPostBack())
{
if (QueryHelper.GetBoolean("saved", false))
{
ShowChangesSaved();
}
else if (QueryHelper.GetBoolean("split", false))
{
ShowConfirmation(GetString("om.account.splitted"));
}
}
}
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
// Display panel with primary/secondary contacts
if ((CMSContext.EditedObject != null) && primaryContact.UniSelector.HasData)
{
pnlContacts.Visible = true;
}
else
{
pnlContacts.Visible = false;
}
}
#endregion
#region "Methods"
///
/// Reloads control.
///
public void Reload()
{
// Load controls with data
if (ai != null)
{
SiteID = ai.AccountSiteID;
// Load values from DB
if (!RequestHelper.IsPostBack())
{
txtName.Text = ai.AccountName;
accountStatus.Value = ai.AccountStatusID;
parentAccount.Value = ai.AccountSubsidiaryOfID;
accountOwner.Value = ai.AccountOwnerUserID;
txtAddress1.Text = ai.AccountAddress1;
txtAddress2.Text = ai.AccountAddress2;
txtCity.Text = ai.AccountCity;
txtZip.Text = ai.AccountZIP;
countrySelector.CountryID = ai.AccountCountryID;
countrySelector.StateID = ai.AccountStateID;
txtPhone.Text = ai.AccountPhone;
txtFax.Text = ai.AccountFax;
emailInput.Value = ai.AccountEmail;
txtURL.Text = ai.AccountWebSite;
htmlNotes.Value = ai.AccountNotes;
primaryContact.Value = ai.AccountPrimaryContactID;
secondaryContact.Value = ai.AccountSecondaryContactID;
// Get primary contact role
AccountContactInfo aci = null;
if (ai.AccountPrimaryContactID > 0)
{
aci = AccountContactInfoProvider.GetAccountContactInfo(ai.AccountID, ai.AccountPrimaryContactID);
if (aci != null)
{
contactRolePrimary.Value = aci.ContactRoleID;
}
}
// Get secondary contact role
if (ai.AccountSecondaryContactID > 0)
{
aci = AccountContactInfoProvider.GetAccountContactInfo(ai.AccountID, ai.AccountSecondaryContactID);
if (aci != null)
{
contactRoleSecondary.Value = aci.ContactRoleID;
}
}
}
// Setup selectors
parentAccount.WhereCondition = "(AccountID NOT IN (SELECT * FROM Func_OM_Account_GetSubsidiaries(" + ai.AccountID + ", 1)) AND AccountMergedWithAccountID IS NULL)";
primaryContact.WhereCondition = "(ContactID IN (SELECT ContactID FROM OM_AccountContact WHERE AccountID = " + ai.AccountID + "))";
secondaryContact.WhereCondition = "(ContactID IN (SELECT ContactID FROM OM_AccountContact WHERE AccountID = " + ai.AccountID + "))";
// Reload controls
parentAccount.ReloadData();
primaryContact.ReloadData();
secondaryContact.ReloadData();
accountOwner.ReloadData();
contactRolePrimary.ReloadData();
contactRoleSecondary.ReloadData();
accountStatus.ReloadData();
}
}
///
/// Sets contact role ID to given role selector control based on contact selector value and edited account.
///
private void SetContactRoleID(FormEngineUserControl contactSelector, FormEngineUserControl roleSelector)
{
int contactID = ValidationHelper.GetInteger(contactSelector.Value, 0);
int accountID = ai.AccountID;
var accountContactInfo = AccountContactInfoProvider.GetAccountContactInfo(accountID, contactID);
if (accountContactInfo != null)
{
roleSelector.Value = accountContactInfo.ContactRoleID;
}
else
{
roleSelector.Value = UniSelector.US_NONE_RECORD;
}
}
///
/// Registers JavaScripts on page.
///
private void RegisterScripts()
{
string stamp = null;
if (ContactHelper.IsSiteManager)
{
stamp = SettingsKeyProvider.GetStringValue("CMSCMStamp");
}
else
{
stamp = SettingsKeyProvider.GetStringValue(CMSContext.CurrentSiteName + ".CMSCMStamp");
}
ScriptHelper.RegisterClientScriptBlock(Page, typeof(string), "AddStamp", ScriptHelper.GetScript(
@"function InsertHTML(htmlString, ckClientID)
{
// Get the editor instance that we want to interact with.
var oEditor = oEditor = window.CKEDITOR.instances[ckClientID];
// Check the active editing mode.
if (oEditor != null) {
// Check the active editing mode.
if (oEditor.mode == 'wysiwyg') {
// Insert the desired HTML.
oEditor.focus();
oEditor.insertHtml(htmlString);
}
}
return false;
}
function AddStamp(ckClientID)
{
InsertHTML('
" + CMSContext.CurrentResolver.ResolveMacros(stamp).Replace("'", @"\'") + @"
', ckClientID);
}
function EditAccount(accountID)
{
modalDialog('" + ResolveUrl(ACCOUNT_DETAIL_DIALOG) + @"?accountid=' + accountID + '&isSiteManager=" + ContactHelper.IsSiteManager + @"', 'AccountParent', '1024', '700');
}
"));
if (mergedIntoSite || mergedIntoGlobal)
{
ltlButton.Text = string.Format(@" {0}
",
HTMLHelper.HTMLEncode(parentAI.AccountName.Trim()),
parentAI.AccountID,
GetImageUrl("Design/Controls/UniGrid/Actions/accountdetail.png"),
GetString("om.account.viewdetail"));
}
}
///
/// Initializes header action control.
///
private void InitHeaderActions()
{
// Find out if current account is merged into another site or global account
if (ai != null)
{
mergedIntoSite = (ai.AccountMergedWithAccountID != 0);
mergedIntoGlobal = (ai.AccountGlobalAccountID != 0);
mergedIntoGlobal &= AccountHelper.AuthorizedReadAccount(UniSelector.US_GLOBAL_RECORD, false);
if (!ContactHelper.IsSiteManager)
{
mergedIntoGlobal &= SettingsKeyProvider.GetBoolValue(CMSContext.CurrentSiteName + ".CMSCMGlobalAccounts");
}
}
HeaderActions.AddAction(new SaveAction(Page));
if (mergedIntoSite || mergedIntoGlobal)
{
HeaderActions.AddAction(new HeaderAction
{
ControlType = HeaderActionTypeEnum.Hyperlink,
Text = GetString("om.contact.splitfromparent"),
ImageUrl = GetImageUrl("CMSModules/CMS_ContactManagement/split.png"),
CommandName = "split"
});
}
HeaderActions.ActionPerformed += HeaderActions_ActionPerformed;
}
///
/// Actions handler.
///
protected void HeaderActions_ActionPerformed(object sender, CommandEventArgs e)
{
AccountHelper.AuthorizedModifyAccount(SiteID, true);
// Split from parent account
if (e.CommandName == "split")
{
List mergedAccount = new List();
mergedAccount.Add(ai);
AccountHelper.Split(parentAI, mergedAccount, false, false, false);
ScriptHelper.RefreshTabHeader(Page, null);
string url = URLHelper.AddParameterToUrl(URLHelper.CurrentURL, "split", "1");
ScriptHelper.RegisterStartupScript(Page, typeof(string), "RefreshPage", ScriptHelper.GetScript("window.location.replace('" + url + "');"));
}
// Save contact
else
{
Save();
}
}
///
/// Validates fields.
///
private bool IsValid()
{
// Validates account name
string errorMessage = new Validator().NotEmpty(txtName.Text.Trim(), GetString("om.account.entername")).Result;
if (!String.IsNullOrEmpty(errorMessage.ToString()))
{
ShowError(errorMessage);
return false;
}
// Validates email
if (!emailInput.IsValid())
{
ShowError(emailInput.ValidationError);
return false;
}
return true;
}
///
/// Save data.
///
protected void Save()
{
if (IsValid())
{
bool redirect = false;
// Create new account
if (ai == null)
{
ai = new AccountInfo();
EditedObject = ai;
redirect = true;
}
// Set values
ai.AccountName = txtName.Text.Trim();
ai.AccountSubsidiaryOfID = parentAccount.AccountID;
ai.AccountOwnerUserID = ValidationHelper.GetInteger(accountOwner.Value, 0);
ai.AccountStatusID = accountStatus.AccountStatusID;
ai.AccountAddress1 = txtAddress1.Text.Trim();
ai.AccountAddress2 = txtAddress2.Text.Trim();
ai.AccountCity = txtCity.Text.Trim();
ai.AccountZIP = txtZip.Text.Trim();
ai.AccountCountryID = countrySelector.CountryID;
ai.AccountStateID = countrySelector.StateID;
ai.AccountPhone = txtPhone.Text.Trim();
ai.AccountFax = txtFax.Text.Trim();
ai.AccountEmail = ValidationHelper.GetString(emailInput.Value, null);
ai.AccountWebSite = txtURL.Text.Trim();
ai.AccountPrimaryContactID = primaryContact.ContactID;
ai.AccountSecondaryContactID = secondaryContact.ContactID;
ai.AccountNotes = htmlNotes.Value;
ai.AccountSiteID = SiteID;
try
{
// Save account changes
AccountInfoProvider.SetAccountInfo(ai);
if (AssignContacts())
{
ShowChangesSaved();
}
RaiseOnSaved();
// Redirect page after newly created item is saved
if (redirect)
{
string url = "Frameset.aspx?accountId=" + ai.AccountID + "&saved=1";
url = URLHelper.AddParameterToUrl(url, "siteid", SiteID.ToString());
if (ContactHelper.IsSiteManager)
{
url = URLHelper.AddParameterToUrl(url, "issitemanager", "1");
}
URLHelper.Redirect(url);
}
}
catch (Exception e)
{
ShowError(GetString("general.saveerror"), e.Message, null);
}
}
}
///
/// Sets primary and secondary contacts.
///
private bool AssignContacts()
{
ContactInfo contact = null;
AccountContactInfo accountContact = null;
// Assign primary contact to account and/or assign role
if (primaryContact.ContactID > 0)
{
contact = ContactInfoProvider.GetContactInfo(primaryContact.ContactID);
if (contact != null)
{
// Check if contact <-> account relation is already created
accountContact = AccountContactInfoProvider.GetAccountContactInfo(ai.AccountID, primaryContact.ContactID);
// Update relation
if (accountContact != null)
{
accountContact.ContactRoleID = contactRolePrimary.ContactRoleID;
}
AccountContactInfoProvider.SetAccountContactInfo(accountContact);
}
// Selected contact doesn't exist
else
{
ShowError(GetString("om.contact.primarynotexists"));
return false;
}
}
// Assign secondary contact to account and/or assign role
if (secondaryContact.ContactID > 0)
{
contact = ContactInfoProvider.GetContactInfo(secondaryContact.ContactID);
if (contact != null)
{
// Check if contact <-> account relation is already created
accountContact = AccountContactInfoProvider.GetAccountContactInfo(ai.AccountID, secondaryContact.ContactID);
// Update relation
if (accountContact != null)
{
accountContact.ContactRoleID = contactRoleSecondary.ContactRoleID;
}
AccountContactInfoProvider.SetAccountContactInfo(accountContact);
}
else
{
ShowError(GetString("om.contact.secondarynotexists"));
return false;
}
}
return true;
}
#endregion
}