Added: Added Lync to the Scheduled Enterprise HOsting report
ReAdded: ability to send summary email when create an user account or a mailbox
This commit is contained in:
parent
3053af2827
commit
90a746bc3c
23 changed files with 278 additions and 40 deletions
|
@ -6415,4 +6415,12 @@ exec sp_executesql @sql, N'@StartRow int, @MaximumRows int, @PackageID int, @Fil
|
||||||
|
|
||||||
|
|
||||||
RETURN
|
RETURN
|
||||||
GO
|
GO
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
IF NOT EXISTS (SELECT * FROM [dbo].[ScheduleTaskParameters] WHERE [ParameterID] = 'LYNC_REPORT')
|
||||||
|
BEGIN
|
||||||
|
INSERT [dbo].[ScheduleTaskParameters] ([TaskID], [ParameterID], [DataTypeID], [DefaultValue], [ParameterOrder]) VALUES (N'SCHEDULE_TASK_HOSTED_SOLUTION_REPORT', N'LYNC_REPORT', N'Boolean', N'true', 5)
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
|
@ -431,7 +431,12 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static LyncUsersPagedResult GetLyncUsers(int itemId, string sortColumn, string sortDirection, int startRow, int count)
|
public static LyncUsersPagedResult GetLyncUsers(int itemId)
|
||||||
|
{
|
||||||
|
return GetLyncUsersPaged(itemId, string.Empty, string.Empty, 0, int.MaxValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LyncUsersPagedResult GetLyncUsersPaged(int itemId, string sortColumn, string sortDirection, int startRow, int count)
|
||||||
{
|
{
|
||||||
LyncUsersPagedResult res = TaskManager.StartResultTask<LyncUsersPagedResult>("LYNC", "GET_LYNC_USERS");
|
LyncUsersPagedResult res = TaskManager.StartResultTask<LyncUsersPagedResult>("LYNC", "GET_LYNC_USERS");
|
||||||
|
|
||||||
|
|
|
@ -517,7 +517,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
LyncUsersPagedResult res = LyncController.GetLyncUsers(itemId, string.Empty, string.Empty, 0, int.MaxValue);
|
LyncUsersPagedResult res = LyncController.GetLyncUsers(itemId);
|
||||||
|
|
||||||
if (res.IsSuccess)
|
if (res.IsSuccess)
|
||||||
{
|
{
|
||||||
|
|
|
@ -123,8 +123,22 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
|
||||||
delegate(CRMOrganizationStatistics stats) { return stats.OrganizationID == org.OrganizationId; });
|
delegate(CRMOrganizationStatistics stats) { return stats.OrganizationID == org.OrganizationId; });
|
||||||
|
|
||||||
item.TotalCRMUsers = crmOrganizationStatistics.Count;
|
item.TotalCRMUsers = crmOrganizationStatistics.Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (report.LyncReport != null)
|
||||||
|
{
|
||||||
|
List<LyncUserStatistics> lyncOrganizationStatistics =
|
||||||
|
report.LyncReport.Items.FindAll(
|
||||||
|
delegate(LyncUserStatistics stats) { return stats.OrganizationID == org.OrganizationId; });
|
||||||
|
|
||||||
|
foreach (LyncUserStatistics current in lyncOrganizationStatistics)
|
||||||
|
{
|
||||||
|
if (current.EnterpriseVoice) item.TotalLyncEVUsers++;
|
||||||
|
}
|
||||||
|
|
||||||
|
item.TotalLyncUsers = lyncOrganizationStatistics.Count;
|
||||||
}
|
}
|
||||||
|
|
||||||
report.OrganizationReport.Items.Add(item);
|
report.OrganizationReport.Items.Add(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -308,7 +322,20 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
|
||||||
{
|
{
|
||||||
TaskManager.WriteError(ex);
|
TaskManager.WriteError(ex);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (report.LyncReport != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
PopulateLyncReportItems(org, report, topReseller);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
TaskManager.WriteError(ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int GetExchangeServiceID(int packageId)
|
private static int GetExchangeServiceID(int packageId)
|
||||||
|
@ -316,6 +343,10 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
|
||||||
return PackageController.GetPackageServiceId(packageId, ResourceGroups.Exchange);
|
return PackageController.GetPackageServiceId(packageId, ResourceGroups.Exchange);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static int GetLyncServiceID(int packageId)
|
||||||
|
{
|
||||||
|
return PackageController.GetPackageServiceId(packageId, ResourceGroups.Lync);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private static void PopulateSharePointItem(Organization org, EnterpriseSolutionStatisticsReport report, string topReseller)
|
private static void PopulateSharePointItem(Organization org, EnterpriseSolutionStatisticsReport report, string topReseller)
|
||||||
|
@ -422,7 +453,13 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
|
||||||
{
|
{
|
||||||
PopulateBaseItem(stats, org, topReseller);
|
PopulateBaseItem(stats, org, topReseller);
|
||||||
stats.MailboxType = mailbox.AccountType;
|
stats.MailboxType = mailbox.AccountType;
|
||||||
|
if (mailbox.AccountType == ExchangeAccountType.Mailbox)
|
||||||
|
{
|
||||||
|
ExchangeAccount a = ExchangeServerController.GetAccount(mailbox.ItemId, mailbox.AccountId);
|
||||||
|
stats.MailboxPlan = a.MailboxPlan;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
stats.BlackberryEnabled = BlackBerryController.CheckBlackBerryUserExists(mailbox.AccountId);
|
stats.BlackberryEnabled = BlackBerryController.CheckBlackBerryUserExists(mailbox.AccountId);
|
||||||
report.ExchangeReport.Items.Add(stats);
|
report.ExchangeReport.Items.Add(stats);
|
||||||
}
|
}
|
||||||
|
@ -436,6 +473,74 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private static void PopulateLyncReportItems(Organization org, EnterpriseSolutionStatisticsReport report, string topReseller)
|
||||||
|
{
|
||||||
|
|
||||||
|
//Check if lync organization
|
||||||
|
if (string.IsNullOrEmpty(org.LyncTenantId))
|
||||||
|
return;
|
||||||
|
|
||||||
|
LyncUser[] lyncUsers = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
LyncUsersPagedResult res = LyncController.GetLyncUsers(org.Id);
|
||||||
|
if (res.IsSuccess) lyncUsers = res.Value.PageUsers;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
throw new ApplicationException(
|
||||||
|
string.Format("Could not get lync users for current organization {0}", org.Id), ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (lyncUsers == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (LyncUser lyncUser in lyncUsers)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
LyncUserStatistics stats = new LyncUserStatistics();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
stats.SipAddress = lyncUser.PrimaryEmailAddress;
|
||||||
|
if (string.IsNullOrEmpty(lyncUser.LineUri)) stats.PhoneNumber = string.Empty; else stats.PhoneNumber = lyncUser.LineUri;
|
||||||
|
|
||||||
|
LyncUserPlan plan = LyncController.GetLyncUserPlan(org.Id, lyncUser.LyncUserPlanId);
|
||||||
|
stats.Conferencing = plan.Conferencing;
|
||||||
|
stats.EnterpriseVoice = plan.EnterpriseVoice;
|
||||||
|
stats.Federation = plan.Federation;
|
||||||
|
stats.InstantMessaing = plan.IM;
|
||||||
|
stats.MobileAccess = plan.Mobility;
|
||||||
|
stats.LyncUserPlan = plan.LyncUserPlanName;
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
TaskManager.WriteError(ex, "Could not get lync statistics. AccountName: {0}",
|
||||||
|
lyncUser.DisplayName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (stats != null)
|
||||||
|
{
|
||||||
|
PopulateBaseItem(stats, org, topReseller);
|
||||||
|
report.LyncReport.Items.Add(stats);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
TaskManager.WriteError(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private static void PopulateSpaceData(int packageId, EnterpriseSolutionStatisticsReport report, string topReseller)
|
private static void PopulateSpaceData(int packageId, EnterpriseSolutionStatisticsReport report, string topReseller)
|
||||||
{
|
{
|
||||||
List<Organization> organizations;
|
List<Organization> organizations;
|
||||||
|
@ -489,8 +594,8 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void GetUsersData(EnterpriseSolutionStatisticsReport report, int userId, bool generateExchangeReport, bool generateSharePointReport, bool generateCRMReport, bool generateOrganizationReport, string topReseller)
|
private static void GetUsersData(EnterpriseSolutionStatisticsReport report, int userId, bool generateExchangeReport, bool generateSharePointReport, bool generateCRMReport, bool generateOrganizationReport, bool generateLyncReport, string topReseller)
|
||||||
{
|
{
|
||||||
List<UserInfo> users;
|
List<UserInfo> users;
|
||||||
try
|
try
|
||||||
|
@ -514,6 +619,7 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
|
||||||
GetUsersData(report, user.UserId, generateExchangeReport, generateSharePointReport,
|
GetUsersData(report, user.UserId, generateExchangeReport, generateSharePointReport,
|
||||||
generateCRMReport,
|
generateCRMReport,
|
||||||
generateOrganizationReport,
|
generateOrganizationReport,
|
||||||
|
generateLyncReport,
|
||||||
string.IsNullOrEmpty(topReseller) ? user.Username : topReseller);
|
string.IsNullOrEmpty(topReseller) ? user.Username : topReseller);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -523,8 +629,8 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static EnterpriseSolutionStatisticsReport GetEnterpriseSolutionStatisticsReport(int userId, bool generateExchangeReport, bool generateSharePointReport, bool generateCRMReport, bool generateOrganizationReport)
|
public static EnterpriseSolutionStatisticsReport GetEnterpriseSolutionStatisticsReport(int userId, bool generateExchangeReport, bool generateSharePointReport, bool generateCRMReport, bool generateOrganizationReport, bool generateLyncReport)
|
||||||
{
|
{
|
||||||
EnterpriseSolutionStatisticsReport report = new EnterpriseSolutionStatisticsReport();
|
EnterpriseSolutionStatisticsReport report = new EnterpriseSolutionStatisticsReport();
|
||||||
|
|
||||||
|
@ -534,17 +640,20 @@ namespace WebsitePanel.EnterpriseServer.Code.HostedSolution
|
||||||
if (generateSharePointReport || generateOrganizationReport)
|
if (generateSharePointReport || generateOrganizationReport)
|
||||||
report.SharePointReport = new SharePointStatisticsReport();
|
report.SharePointReport = new SharePointStatisticsReport();
|
||||||
|
|
||||||
|
if (generateLyncReport || generateOrganizationReport)
|
||||||
|
report.LyncReport = new LyncStatisticsReport();
|
||||||
|
|
||||||
|
|
||||||
if (generateCRMReport || generateOrganizationReport)
|
if (generateCRMReport || generateOrganizationReport)
|
||||||
report.CRMReport = new CRMStatisticsReport();
|
report.CRMReport = new CRMStatisticsReport();
|
||||||
|
|
||||||
if (generateOrganizationReport)
|
if (generateOrganizationReport)
|
||||||
report.OrganizationReport = new OrganizationStatisticsReport();
|
report.OrganizationReport = new OrganizationStatisticsReport();
|
||||||
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
GetUsersData(report, userId, generateExchangeReport, generateSharePointReport, generateCRMReport,
|
GetUsersData(report, userId, generateExchangeReport, generateSharePointReport, generateCRMReport,
|
||||||
generateOrganizationReport, null);
|
generateOrganizationReport, generateLyncReport, null);
|
||||||
}
|
}
|
||||||
catch(Exception ex)
|
catch(Exception ex)
|
||||||
{
|
{
|
||||||
|
|
|
@ -42,6 +42,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
private static readonly string EXCHANGE_REPORT = "EXCHANGE_REPORT";
|
private static readonly string EXCHANGE_REPORT = "EXCHANGE_REPORT";
|
||||||
private static readonly string ORGANIZATION_REPORT = "ORGANIZATION_REPORT";
|
private static readonly string ORGANIZATION_REPORT = "ORGANIZATION_REPORT";
|
||||||
private static readonly string SHAREPOINT_REPORT = "SHAREPOINT_REPORT";
|
private static readonly string SHAREPOINT_REPORT = "SHAREPOINT_REPORT";
|
||||||
|
private static readonly string LYNC_REPORT = "LYNC_REPORT";
|
||||||
private static readonly string CRM_REPORT = "CRM_REPORT";
|
private static readonly string CRM_REPORT = "CRM_REPORT";
|
||||||
private static readonly string EMAIL = "EMAIL";
|
private static readonly string EMAIL = "EMAIL";
|
||||||
|
|
||||||
|
@ -52,6 +53,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
{
|
{
|
||||||
bool isExchange = Utils.ParseBool(TaskManager.TaskParameters[EXCHANGE_REPORT], false);
|
bool isExchange = Utils.ParseBool(TaskManager.TaskParameters[EXCHANGE_REPORT], false);
|
||||||
bool isSharePoint = Utils.ParseBool(TaskManager.TaskParameters[SHAREPOINT_REPORT], false);
|
bool isSharePoint = Utils.ParseBool(TaskManager.TaskParameters[SHAREPOINT_REPORT], false);
|
||||||
|
bool isLync = Utils.ParseBool(TaskManager.TaskParameters[LYNC_REPORT], false);
|
||||||
bool isCRM = Utils.ParseBool(TaskManager.TaskParameters[CRM_REPORT], false);
|
bool isCRM = Utils.ParseBool(TaskManager.TaskParameters[CRM_REPORT], false);
|
||||||
bool isOrganization = Utils.ParseBool(TaskManager.TaskParameters[ORGANIZATION_REPORT], false);
|
bool isOrganization = Utils.ParseBool(TaskManager.TaskParameters[ORGANIZATION_REPORT], false);
|
||||||
|
|
||||||
|
@ -61,13 +63,14 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
UserInfo user = PackageController.GetPackageOwner(TaskManager.PackageId);
|
UserInfo user = PackageController.GetPackageOwner(TaskManager.PackageId);
|
||||||
EnterpriseSolutionStatisticsReport report =
|
EnterpriseSolutionStatisticsReport report =
|
||||||
ReportController.GetEnterpriseSolutionStatisticsReport(user.UserId, isExchange, isSharePoint, isCRM,
|
ReportController.GetEnterpriseSolutionStatisticsReport(user.UserId, isExchange, isSharePoint, isCRM,
|
||||||
isOrganization);
|
isOrganization, isLync);
|
||||||
|
|
||||||
|
|
||||||
SendMessage(user, email, isExchange && report.ExchangeReport != null ? report.ExchangeReport.ToCSV() : string.Empty,
|
SendMessage(user, email, isExchange && report.ExchangeReport != null ? report.ExchangeReport.ToCSV() : string.Empty,
|
||||||
isSharePoint && report.SharePointReport != null ? report.SharePointReport.ToCSV() : string.Empty,
|
isSharePoint && report.SharePointReport != null ? report.SharePointReport.ToCSV() : string.Empty,
|
||||||
isCRM && report.CRMReport != null ? report.CRMReport.ToCSV() : string.Empty,
|
isCRM && report.CRMReport != null ? report.CRMReport.ToCSV() : string.Empty,
|
||||||
isOrganization && report.OrganizationReport != null ? report.OrganizationReport.ToCSV() : string.Empty);
|
isOrganization && report.OrganizationReport != null ? report.OrganizationReport.ToCSV() : string.Empty,
|
||||||
|
isLync && report.LyncReport != null ? report.LyncReport.ToCSV() : string.Empty);
|
||||||
}
|
}
|
||||||
catch(Exception ex)
|
catch(Exception ex)
|
||||||
{
|
{
|
||||||
|
@ -90,11 +93,12 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SendMessage(UserInfo user,string email, string exchange_csv, string sharepoint_csv, string crm_csv, string organization_csv)
|
private void SendMessage(UserInfo user,string email, string exchange_csv, string sharepoint_csv, string crm_csv, string organization_csv, string lync_csv)
|
||||||
{
|
{
|
||||||
List<Attachment> attacments = new List<Attachment>();
|
List<Attachment> attacments = new List<Attachment>();
|
||||||
PrepareAttament("exchange.csv", exchange_csv, attacments);
|
PrepareAttament("exchange.csv", exchange_csv, attacments);
|
||||||
PrepareAttament("sharepoint.csv", sharepoint_csv, attacments);
|
PrepareAttament("sharepoint.csv", sharepoint_csv, attacments);
|
||||||
|
PrepareAttament("lync.csv", lync_csv, attacments);
|
||||||
PrepareAttament("crm.csv", crm_csv, attacments);
|
PrepareAttament("crm.csv", crm_csv, attacments);
|
||||||
PrepareAttament("organization.csv", organization_csv, attacments);
|
PrepareAttament("organization.csv", organization_csv, attacments);
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<add name="EnterpriseServer" connectionString="server=HSTPROV01;database=WebsitePanelMerge;uid=WebsitePanel;pwd=aj7ep6fyhmw3b5qeth7c;" />
|
<add name="EnterpriseServer" connectionString="server=HSTPROV01;database=WebsitePanelMerge;uid=WebsitePanel;pwd=aj7ep6fyhmw3b5qeth7c;" />
|
||||||
<add name="EnterpriseServer" connectionString="server=HSTWSP01;database=WebsitePanelMerge;uid=WebsitePanel;pwd=pserxfbnlc6hwmdedbp0;" providerName="System.Data.SqlClient" />
|
<add name="EnterpriseServer" connectionString="server=HSTWSP01;database=WebsitePanelMerge;uid=WebsitePanel;pwd=pserxfbnlc6hwmdedbp0;" providerName="System.Data.SqlClient" />
|
||||||
-->
|
-->
|
||||||
<add name="EnterpriseServer" connectionString="server=HSTWSP01;database=WebsitePanelMerge;uid=WebsitePanel;pwd=pserxfbnlc6hwmdedbp0;" providerName="System.Data.SqlClient" />
|
<add name="EnterpriseServer" connectionString="server=HSTPROV01;database=WebsitePanelMerge;uid=WebsitePanel;pwd=aj7ep6fyhmw3b5qeth7c;" />
|
||||||
</connectionStrings>
|
</connectionStrings>
|
||||||
<appSettings>
|
<appSettings>
|
||||||
<!-- A1D4KDHUE83NKHddF -->
|
<!-- A1D4KDHUE83NKHddF -->
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
<add key="WebsitePanel.CryptoKey" value="3x7eqt7zabc5n5afs6dg" />
|
<add key="WebsitePanel.CryptoKey" value="3x7eqt7zabc5n5afs6dg" />
|
||||||
<add key="WebsitePanel.CryptoKey" value="fr2ym4wn2gmbrj7dz336" />
|
<add key="WebsitePanel.CryptoKey" value="fr2ym4wn2gmbrj7dz336" />
|
||||||
-->
|
-->
|
||||||
<add key="WebsitePanel.CryptoKey" value="fr2ym4wn2gmbrj7dz336" />
|
<add key="WebsitePanel.CryptoKey" value="3x7eqt7zabc5n5afs6dg" />
|
||||||
<!-- A1D4KDHUE83NKHddF -->
|
<!-- A1D4KDHUE83NKHddF -->
|
||||||
<add key="WebsitePanel.EncryptionEnabled" value="true" />
|
<add key="WebsitePanel.EncryptionEnabled" value="true" />
|
||||||
<!-- Web Applications -->
|
<!-- Web Applications -->
|
||||||
|
|
|
@ -59,7 +59,7 @@ namespace WebsitePanel.EnterpriseServer
|
||||||
[WebMethod]
|
[WebMethod]
|
||||||
public LyncUsersPagedResult GetLyncUsersPaged(int itemId, string sortColumn, string sortDirection, int startRow, int maximumRows)
|
public LyncUsersPagedResult GetLyncUsersPaged(int itemId, string sortColumn, string sortDirection, int startRow, int maximumRows)
|
||||||
{
|
{
|
||||||
return LyncController.GetLyncUsers(itemId, sortColumn, sortDirection, startRow, maximumRows);
|
return LyncController.GetLyncUsersPaged(itemId, sortColumn, sortDirection, startRow, maximumRows);
|
||||||
}
|
}
|
||||||
|
|
||||||
[WebMethod]
|
[WebMethod]
|
||||||
|
|
|
@ -34,6 +34,6 @@
|
||||||
public SharePointStatisticsReport SharePointReport { get; set; }
|
public SharePointStatisticsReport SharePointReport { get; set; }
|
||||||
public CRMStatisticsReport CRMReport { get; set; }
|
public CRMStatisticsReport CRMReport { get; set; }
|
||||||
public OrganizationStatisticsReport OrganizationReport { get; set; }
|
public OrganizationStatisticsReport OrganizationReport { get; set; }
|
||||||
|
public LyncStatisticsReport LyncReport { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,5 +50,6 @@ namespace WebsitePanel.Providers.HostedSolution
|
||||||
public bool Enabled { get; set; }
|
public bool Enabled { get; set; }
|
||||||
public ExchangeAccountType MailboxType { get; set; }
|
public ExchangeAccountType MailboxType { get; set; }
|
||||||
public bool BlackberryEnabled { get; set; }
|
public bool BlackberryEnabled { get; set; }
|
||||||
|
public string MailboxPlan { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,6 +67,7 @@ namespace WebsitePanel.Providers.HostedSolution
|
||||||
sb.AppendFormat("{0},", ToCsvString(item.Enabled, "Enabled", "Disabled"));
|
sb.AppendFormat("{0},", ToCsvString(item.Enabled, "Enabled", "Disabled"));
|
||||||
sb.AppendFormat("{0},", ToCsvString(item.MailboxType));
|
sb.AppendFormat("{0},", ToCsvString(item.MailboxType));
|
||||||
sb.AppendFormat("{0}", ToCsvString(item.BlackberryEnabled));
|
sb.AppendFormat("{0}", ToCsvString(item.BlackberryEnabled));
|
||||||
|
sb.AppendFormat("{0}", ToCsvString(item.MailboxPlan));
|
||||||
mainBuilder.Append(sb.ToString());
|
mainBuilder.Append(sb.ToString());
|
||||||
}
|
}
|
||||||
return mainBuilder.ToString();
|
return mainBuilder.ToString();
|
||||||
|
@ -74,7 +75,7 @@ namespace WebsitePanel.Providers.HostedSolution
|
||||||
|
|
||||||
private void AddCSVHeader(StringBuilder sb)
|
private void AddCSVHeader(StringBuilder sb)
|
||||||
{
|
{
|
||||||
sb.Append("Top Reseller,Reseller,Customer,Customer Created,Hosting Space,Hosting Space Created,Ogranization Name,Ogranization Created,Organization ID,Mailbox Display Name,Account Created,Primary E-mail Address,MAPI,OWA,ActiveSync,POP 3,IMAP,Mailbox Size (Mb),Max Mailbox Size (Mb),Last Logon,Enabled,Mailbox Type, BlackBerry");
|
sb.Append("Top Reseller,Reseller,Customer,Customer Created,Hosting Space,Hosting Space Created,Ogranization Name,Organization Created,Organization ID,Mailbox Display Name,Account Created,Primary E-mail Address,MAPI,OWA,ActiveSync,POP 3,IMAP,Mailbox Size (Mb),Max Mailbox Size (Mb),Last Logon,Enabled,Mailbox Type, BlackBerry, Mailbox Plan");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,6 +57,8 @@ namespace WebsitePanel.Providers.HostedSolution
|
||||||
sb.AppendFormat("{0},", ToCsvString(item.TotalSharePointSiteCollections));
|
sb.AppendFormat("{0},", ToCsvString(item.TotalSharePointSiteCollections));
|
||||||
sb.AppendFormat("{0},", ToCsvString(item.TotalSharePointSiteCollectionsSize / 1024.0 / 1024.0));
|
sb.AppendFormat("{0},", ToCsvString(item.TotalSharePointSiteCollectionsSize / 1024.0 / 1024.0));
|
||||||
sb.AppendFormat("{0}", ToCsvString(item.TotalCRMUsers));
|
sb.AppendFormat("{0}", ToCsvString(item.TotalCRMUsers));
|
||||||
|
sb.AppendFormat("{0}", ToCsvString(item.TotalLyncUsers));
|
||||||
|
sb.AppendFormat("{0}", ToCsvString(item.TotalLyncEVUsers));
|
||||||
|
|
||||||
mainBuilder.Append(sb.ToString());
|
mainBuilder.Append(sb.ToString());
|
||||||
}
|
}
|
||||||
|
@ -65,7 +67,7 @@ namespace WebsitePanel.Providers.HostedSolution
|
||||||
|
|
||||||
private static void AddCSVHeader(StringBuilder sb)
|
private static void AddCSVHeader(StringBuilder sb)
|
||||||
{
|
{
|
||||||
sb.Append("Top Reseller,Reseller,Customer,Customer Created,Hosting Space,Hosting Space Created,Ogranization Name,Ogranization Created,Organization ID,Total mailboxes,Total mailboxes size(Mb),Total Public Folders size(Mb),Total SharePoint site collections,Total SharePoint site collections size(Mb),Total CRM users");
|
sb.Append("Top Reseller,Reseller,Customer,Customer Created,Hosting Space,Hosting Space Created,Ogranization Name,Ogranization Created,Organization ID,Total mailboxes,Total mailboxes size(Mb),Total Public Folders size(Mb),Total SharePoint site collections,Total SharePoint site collections size(Mb),Total CRM users,Total Lync users,Total Lync EV users");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,5 +66,18 @@
|
||||||
set;
|
set;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int TotalLyncUsers
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int TotalLyncEVUsers
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,6 +88,9 @@
|
||||||
<Compile Include="HostedSolution\LyncConstants.cs" />
|
<Compile Include="HostedSolution\LyncConstants.cs" />
|
||||||
<Compile Include="HostedSolution\LyncErrorCodes.cs" />
|
<Compile Include="HostedSolution\LyncErrorCodes.cs" />
|
||||||
<Compile Include="HostedSolution\LyncFederationDomain.cs" />
|
<Compile Include="HostedSolution\LyncFederationDomain.cs" />
|
||||||
|
<Compile Include="HostedSolution\LyncOrganizationStatistics.cs" />
|
||||||
|
<Compile Include="HostedSolution\LyncUserStatistics.cs" />
|
||||||
|
<Compile Include="HostedSolution\LyncStatisticsReport.cs" />
|
||||||
<Compile Include="HostedSolution\LyncUser.cs" />
|
<Compile Include="HostedSolution\LyncUser.cs" />
|
||||||
<Compile Include="HostedSolution\LyncUserPlan.cs" />
|
<Compile Include="HostedSolution\LyncUserPlan.cs" />
|
||||||
<Compile Include="HostedSolution\LyncUserPlanType.cs" />
|
<Compile Include="HostedSolution\LyncUserPlanType.cs" />
|
||||||
|
|
|
@ -147,7 +147,15 @@
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td class="FormLabel150">
|
||||||
|
<asp:CheckBox ID="chkSendInstructions" runat="server" meta:resourcekey="chkSendInstructions" Text="Send Setup Instructions" Checked="true" />
|
||||||
|
</td>
|
||||||
|
<td><wsp:EmailControl id="sendInstructionEmail" runat="server" RequiredEnabled="true" ValidationGroup="CreateMailbox"></wsp:EmailControl></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
<div class="FormFooterClean">
|
<div class="FormFooterClean">
|
||||||
<asp:Button id="btnCreate" runat="server" Text="Create Mailbox"
|
<asp:Button id="btnCreate" runat="server" Text="Create Mailbox"
|
||||||
|
|
|
@ -65,13 +65,24 @@ namespace WebsitePanel.Portal.ExchangeServer
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PackageInfo package = ES.Services.Packages.GetPackage(PanelSecurity.PackageId);
|
string instructions = ES.Services.ExchangeServer.GetMailboxSetupInstructions(PanelRequest.ItemID, PanelRequest.AccountID, false, false, false);
|
||||||
if (package != null)
|
if (!string.IsNullOrEmpty(instructions))
|
||||||
{
|
{
|
||||||
//UserInfo user = ES.Services.Users.GetUserById(package.UserId);
|
chkSendInstructions.Checked = chkSendInstructions.Visible = sendInstructionEmail.Visible = true;
|
||||||
//if (user != null)
|
PackageInfo package = ES.Services.Packages.GetPackage(PanelSecurity.PackageId);
|
||||||
//sendInstructionEmail.Text = user.Email;
|
if (package != null)
|
||||||
|
{
|
||||||
|
UserInfo user = ES.Services.Users.GetUserById(package.UserId);
|
||||||
|
if (user != null)
|
||||||
|
sendInstructionEmail.Text = user.Email;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
chkSendInstructions.Checked = chkSendInstructions.Visible = sendInstructionEmail.Visible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
WebsitePanel.Providers.HostedSolution.ExchangeMailboxPlan[] plans = ES.Services.ExchangeServer.GetExchangeMailboxPlans(PanelRequest.ItemID);
|
WebsitePanel.Providers.HostedSolution.ExchangeMailboxPlan[] plans = ES.Services.ExchangeServer.GetExchangeMailboxPlans(PanelRequest.ItemID);
|
||||||
|
|
||||||
|
@ -124,8 +135,8 @@ namespace WebsitePanel.Portal.ExchangeServer
|
||||||
name,
|
name,
|
||||||
domain,
|
domain,
|
||||||
password.Password,
|
password.Password,
|
||||||
false,
|
chkSendInstructions.Checked,
|
||||||
"",
|
sendInstructionEmail.Text,
|
||||||
Convert.ToInt32(mailboxPlanSelector.MailboxPlanId),
|
Convert.ToInt32(mailboxPlanSelector.MailboxPlanId),
|
||||||
subscriberNumber);
|
subscriberNumber);
|
||||||
|
|
||||||
|
|
|
@ -327,6 +327,24 @@ namespace WebsitePanel.Portal.ExchangeServer {
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.MailboxPlanSelector mailboxPlanSelector;
|
protected global::WebsitePanel.Portal.ExchangeServer.UserControls.MailboxPlanSelector mailboxPlanSelector;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// chkSendInstructions control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.CheckBox chkSendInstructions;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// sendInstructionEmail control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::WebsitePanel.Portal.UserControls.EmailControl sendInstructionEmail;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// btnCreate control.
|
/// btnCreate control.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -91,6 +91,15 @@
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td class="FormLabel150">
|
||||||
|
<asp:CheckBox ID="chkSendInstructions" runat="server" meta:resourcekey="chkSendInstructions" Text="Send Setup Instructions" Checked="true" />
|
||||||
|
</td>
|
||||||
|
<td><wsp:EmailControl id="sendInstructionEmail" runat="server" RequiredEnabled="true" ValidationGroup="CreateMailbox"></wsp:EmailControl></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
<div class="FormFooterClean">
|
<div class="FormFooterClean">
|
||||||
<asp:Button id="btnCreate" runat="server" Text="Create Mailbox"
|
<asp:Button id="btnCreate" runat="server" Text="Create Mailbox"
|
||||||
|
|
|
@ -58,12 +58,21 @@ namespace WebsitePanel.Portal.HostedSolution
|
||||||
messageBox.ShowMessage(passwordPolicy, "CREATE_ORGANIZATION_USER", "HostedOrganization");
|
messageBox.ShowMessage(passwordPolicy, "CREATE_ORGANIZATION_USER", "HostedOrganization");
|
||||||
}
|
}
|
||||||
|
|
||||||
PackageInfo package = ES.Services.Packages.GetPackage(PanelSecurity.PackageId);
|
string instructions = ES.Services.Organizations.GetOrganizationUserSummuryLetter(PanelRequest.ItemID, PanelRequest.AccountID, false, false, false);
|
||||||
if (package != null)
|
if (!string.IsNullOrEmpty(instructions))
|
||||||
{
|
{
|
||||||
//UserInfo user = ES.Services.Users.GetUserById(package.UserId);
|
chkSendInstructions.Checked = chkSendInstructions.Visible = sendInstructionEmail.Visible = true;
|
||||||
//if (user != null)
|
PackageInfo package = ES.Services.Packages.GetPackage(PanelSecurity.PackageId);
|
||||||
//sendInstructionEmail.Text = user.Email;
|
if (package != null)
|
||||||
|
{
|
||||||
|
UserInfo user = ES.Services.Users.GetUserById(package.UserId);
|
||||||
|
if (user != null)
|
||||||
|
sendInstructionEmail.Text = user.Email;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
chkSendInstructions.Checked = chkSendInstructions.Visible = sendInstructionEmail.Visible = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,8 +105,8 @@ namespace WebsitePanel.Portal.HostedSolution
|
||||||
email.DomainName.ToLower(),
|
email.DomainName.ToLower(),
|
||||||
password.Password,
|
password.Password,
|
||||||
txtSubscriberNumber.Text.Trim(),
|
txtSubscriberNumber.Text.Trim(),
|
||||||
false,
|
chkSendInstructions.Checked,
|
||||||
"");
|
sendInstructionEmail.Text);
|
||||||
|
|
||||||
if (accountId < 0)
|
if (accountId < 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -219,6 +219,24 @@ namespace WebsitePanel.Portal.HostedSolution {
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
protected global::WebsitePanel.Portal.PasswordControl password;
|
protected global::WebsitePanel.Portal.PasswordControl password;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// chkSendInstructions control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.CheckBox chkSendInstructions;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// sendInstructionEmail control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::WebsitePanel.Portal.UserControls.EmailControl sendInstructionEmail;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// btnCreate control.
|
/// btnCreate control.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -112,10 +112,10 @@
|
||||||
<value>2.0</value>
|
<value>2.0</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<resheader name="reader">
|
<resheader name="reader">
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<data name="cbCRM.Text" xml:space="preserve">
|
<data name="cbCRM.Text" xml:space="preserve">
|
||||||
<value>CRM Report</value>
|
<value>CRM Report</value>
|
||||||
|
@ -123,6 +123,9 @@
|
||||||
<data name="cbExchange.Text" xml:space="preserve">
|
<data name="cbExchange.Text" xml:space="preserve">
|
||||||
<value>Exchange Report</value>
|
<value>Exchange Report</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="cbLync.Text" xml:space="preserve">
|
||||||
|
<value>Lync Report</value>
|
||||||
|
</data>
|
||||||
<data name="cbOrganization.Text" xml:space="preserve">
|
<data name="cbOrganization.Text" xml:space="preserve">
|
||||||
<value>Organization Report</value>
|
<value>Organization Report</value>
|
||||||
</data>
|
</data>
|
||||||
|
|
|
@ -19,6 +19,11 @@
|
||||||
<asp:CheckBox runat="server" ID="cbSharePoint" meta:resourcekey="cbSharePoint" />
|
<asp:CheckBox runat="server" ID="cbSharePoint" meta:resourcekey="cbSharePoint" />
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2">
|
||||||
|
<asp:CheckBox runat="server" ID="cbLync" meta:resourcekey="cbLync" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2">
|
<td colspan="2">
|
||||||
<asp:CheckBox runat="server" ID="cbCRM" meta:resourcekey="cbCRM" />
|
<asp:CheckBox runat="server" ID="cbCRM" meta:resourcekey="cbCRM" />
|
||||||
|
|
|
@ -37,6 +37,7 @@ namespace WebsitePanel.Portal.ScheduleTaskControls
|
||||||
private static readonly string EXCHANGE_REPORT = "EXCHANGE_REPORT";
|
private static readonly string EXCHANGE_REPORT = "EXCHANGE_REPORT";
|
||||||
private static readonly string ORGANIZATION_REPORT = "ORGANIZATION_REPORT";
|
private static readonly string ORGANIZATION_REPORT = "ORGANIZATION_REPORT";
|
||||||
private static readonly string SHAREPOINT_REPORT = "SHAREPOINT_REPORT";
|
private static readonly string SHAREPOINT_REPORT = "SHAREPOINT_REPORT";
|
||||||
|
private static readonly string LYNC_REPORT = "LYNC_REPORT";
|
||||||
private static readonly string CRM_REPORT = "CRM_REPORT";
|
private static readonly string CRM_REPORT = "CRM_REPORT";
|
||||||
private static readonly string EMAIL = "EMAIL";
|
private static readonly string EMAIL = "EMAIL";
|
||||||
|
|
||||||
|
@ -51,6 +52,7 @@ namespace WebsitePanel.Portal.ScheduleTaskControls
|
||||||
base.SetParameters(parameters);
|
base.SetParameters(parameters);
|
||||||
SetParameter(cbExchange, EXCHANGE_REPORT);
|
SetParameter(cbExchange, EXCHANGE_REPORT);
|
||||||
SetParameter(cbSharePoint, SHAREPOINT_REPORT);
|
SetParameter(cbSharePoint, SHAREPOINT_REPORT);
|
||||||
|
SetParameter(cbLync, LYNC_REPORT);
|
||||||
SetParameter(cbCRM, CRM_REPORT);
|
SetParameter(cbCRM, CRM_REPORT);
|
||||||
SetParameter(cbOrganization, ORGANIZATION_REPORT);
|
SetParameter(cbOrganization, ORGANIZATION_REPORT);
|
||||||
SetParameter(txtMail, EMAIL);
|
SetParameter(txtMail, EMAIL);
|
||||||
|
@ -61,12 +63,13 @@ namespace WebsitePanel.Portal.ScheduleTaskControls
|
||||||
{
|
{
|
||||||
ScheduleTaskParameterInfo exchange = GetParameter(cbExchange, EXCHANGE_REPORT);
|
ScheduleTaskParameterInfo exchange = GetParameter(cbExchange, EXCHANGE_REPORT);
|
||||||
ScheduleTaskParameterInfo sharepoint = GetParameter(cbSharePoint, SHAREPOINT_REPORT);
|
ScheduleTaskParameterInfo sharepoint = GetParameter(cbSharePoint, SHAREPOINT_REPORT);
|
||||||
|
ScheduleTaskParameterInfo lync = GetParameter(cbLync, LYNC_REPORT);
|
||||||
ScheduleTaskParameterInfo crm = GetParameter(cbCRM, CRM_REPORT);
|
ScheduleTaskParameterInfo crm = GetParameter(cbCRM, CRM_REPORT);
|
||||||
ScheduleTaskParameterInfo organization = GetParameter(cbOrganization, ORGANIZATION_REPORT);
|
ScheduleTaskParameterInfo organization = GetParameter(cbOrganization, ORGANIZATION_REPORT);
|
||||||
ScheduleTaskParameterInfo email = GetParameter(txtMail, EMAIL);
|
ScheduleTaskParameterInfo email = GetParameter(txtMail, EMAIL);
|
||||||
|
|
||||||
|
|
||||||
return new ScheduleTaskParameterInfo[5] { exchange, sharepoint, crm , organization, email};
|
return new ScheduleTaskParameterInfo[6] { exchange, sharepoint, lync, crm , organization, email};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,10 +1,9 @@
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// <auto-generated>
|
// <auto-generated>
|
||||||
// This code was generated by a tool.
|
// This code was generated by a tool.
|
||||||
// Runtime Version:2.0.50727.1433
|
|
||||||
//
|
//
|
||||||
// Changes to this file may cause incorrect behavior and will be lost if
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
// the code is regenerated.
|
// the code is regenerated.
|
||||||
// </auto-generated>
|
// </auto-generated>
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -49,6 +48,15 @@ namespace WebsitePanel.Portal.ScheduleTaskControls {
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
protected global::System.Web.UI.WebControls.CheckBox cbSharePoint;
|
protected global::System.Web.UI.WebControls.CheckBox cbSharePoint;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// cbLync control.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Auto-generated field.
|
||||||
|
/// To modify move field declaration from designer file to code-behind file.
|
||||||
|
/// </remarks>
|
||||||
|
protected global::System.Web.UI.WebControls.CheckBox cbLync;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// cbCRM control.
|
/// cbCRM control.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue