diff --git a/WebsitePanel/Database/update_db.sql b/WebsitePanel/Database/update_db.sql index a6c353fb..527e04d6 100644 --- a/WebsitePanel/Database/update_db.sql +++ b/WebsitePanel/Database/update_db.sql @@ -2732,3 +2732,16 @@ END GO + +-- CRM Quota + +BEGIN +UPDATE [dbo].[Quotas] SET QuotaOrder = 5 WHERE [QuotaName] = 'HostedCRM.MaxDatabaseSize' +END +GO + +IF NOT EXISTS (SELECT * FROM [dbo].[Quotas] WHERE [QuotaName] = 'HostedCRM.ESSUsers') +BEGIN +INSERT [dbo].[Quotas] ([QuotaID], [GroupID],[QuotaOrder], [QuotaName], [QuotaDescription], [QuotaTypeID], [ServiceQuota], [ItemTypeID]) VALUES (462, 21, 4, N'HostedCRM.ESSUsers', N'ESS licenses per organization',3, 0 , NULL) +END +GO diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Packages/Quotas.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Packages/Quotas.cs index a2f4045e..35dc110f 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Packages/Quotas.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Base/Packages/Quotas.cs @@ -160,6 +160,7 @@ order by rg.groupOrder public const string CRM_USERS = "HostedCRM.Users"; public const string CRM_ORGANIZATION = "HostedCRM.Organization"; public const string CRM_LIMITEDUSERS = "HostedCRM.LimitedUsers"; + public const string CRM_ESSUSERS = "HostedCRM.ESSUsers"; public const string CRM_MAXDATABASESIZE = "HostedCRM.MaxDatabaseSize"; public const string VPS_SERVERS_NUMBER = "VPS.ServersNumber"; // Number of VPS diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/CRMController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/CRMController.cs index 956352f8..6ca779d3 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/CRMController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/CRMController.cs @@ -269,7 +269,7 @@ namespace WebsitePanel.EnterpriseServer string rootOU = GetProviderProperty(serviceid, "rootou"); PackageContext cntx = PackageController.GetPackageContext(org.PackageId); - int maxDBSize = cntx.Quotas[Quotas.CRM_MAXDATABASESIZE].QuotaAllocatedValue; + long maxDBSize = cntx.Quotas[Quotas.CRM_MAXDATABASESIZE].QuotaAllocatedValue; if (maxDBSize != -1) maxDBSize = maxDBSize * 1024 * 1024; org.CrmAdministratorId = user.AccountId; @@ -676,7 +676,7 @@ namespace WebsitePanel.EnterpriseServer if (!quotaRes.Value) { - CompleteTask(ret, CrmErrorCodes.USER_QUOTA_HAS_BEEN_REACHED, null, "CRM user quota has been reached."); + CompleteTask(ret, CrmErrorCodes.USER_QUOTA_HAS_BEEN_REACHED + CALType.ToString(), null, "CRM user quota has been reached."); return ret; } @@ -971,7 +971,7 @@ namespace WebsitePanel.EnterpriseServer try { CrmUserResult user = GetCrmUser(itemId, accountId); - if (user.Value.CALType == CALType) + if (user.Value.CALType + ((int)user.Value.ClientAccessMode)*10 == CALType) { res.IsSuccess = true; CompleteTask(); @@ -1012,8 +1012,7 @@ namespace WebsitePanel.EnterpriseServer } if (!quotaRes.Value) { - CompleteTask(res, CrmErrorCodes.USER_QUOTA_HAS_BEEN_REACHED + CALType.ToString(), null, "CRM user quota " + - (CALType==0 ? "(full license)" : "(limited license)") +" has been reached."); + CompleteTask(res, CrmErrorCodes.USER_QUOTA_HAS_BEEN_REACHED + CALType.ToString(), null, "CRM user quota has been reached."); return res; } @@ -1106,7 +1105,20 @@ namespace WebsitePanel.EnterpriseServer return res; } - string quotaName = CALType == 0 ? Quotas.CRM_USERS : Quotas.CRM_LIMITEDUSERS; + string quotaName = Quotas.CRM_USERS; + + switch (CALType) + { + case 0: + quotaName = Quotas.CRM_USERS; + break; + case 2: + quotaName = Quotas.CRM_LIMITEDUSERS; + break; + case 22: + quotaName = Quotas.CRM_ESSUSERS; + break; + } int allocatedCrmUsers = cntx.Quotas[quotaName].QuotaAllocatedValue; res.Value = allocatedCrmUsers == -1 || allocatedCrmUsers > tmp.Value; @@ -1157,7 +1169,7 @@ namespace WebsitePanel.EnterpriseServer PackageContext cntx = PackageController.GetPackageContext(packageId); - int limitSize = cntx.Quotas[Quotas.CRM_MAXDATABASESIZE].QuotaAllocatedValue; + long limitSize = cntx.Quotas[Quotas.CRM_MAXDATABASESIZE].QuotaAllocatedValue; if (limitSize != -1) { diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs index 0530cfc4..5ed2188e 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer.Code/HostedSolution/OrganizationController.cs @@ -934,6 +934,7 @@ namespace WebsitePanel.EnterpriseServer { stats.CreatedCRMUsers = CRMController.GetCRMUsersCount(org.Id, string.Empty, string.Empty, 0).Value; stats.CreatedLimitedCRMUsers = CRMController.GetCRMUsersCount(org.Id, string.Empty, string.Empty, 2).Value; + stats.CreatedESSCRMUsers = CRMController.GetCRMUsersCount(org.Id, string.Empty, string.Empty, 22).Value; stats.UsedCRMDiskSpace = CRMController.GetDBSize(org.Id, org.PackageId); stats.AllocatedCRMDiskSpace = CRMController.GetMaxDBSize(org.Id, org.PackageId); @@ -997,6 +998,7 @@ namespace WebsitePanel.EnterpriseServer { stats.CreatedCRMUsers += CRMController.GetCRMUsersCount(o.Id, string.Empty, string.Empty, 0 ).Value; stats.CreatedLimitedCRMUsers += CRMController.GetCRMUsersCount(o.Id, string.Empty, string.Empty, 2).Value; + stats.CreatedESSCRMUsers += CRMController.GetCRMUsersCount(o.Id, string.Empty, string.Empty, 22).Value; stats.UsedCRMDiskSpace += CRMController.GetDBSize(o.Id, o.PackageId); stats.AllocatedCRMDiskSpace += CRMController.GetMaxDBSize(o.Id, o.PackageId); } @@ -1044,6 +1046,7 @@ namespace WebsitePanel.EnterpriseServer { stats.AllocatedCRMUsers = cntx.Quotas[Quotas.CRM_USERS].QuotaAllocatedValue; stats.AllocatedLimitedCRMUsers = cntx.Quotas[Quotas.CRM_LIMITEDUSERS].QuotaAllocatedValue; + stats.AllocatedESSCRMUsers = cntx.Quotas[Quotas.CRM_ESSUSERS].QuotaAllocatedValue; } if (cntx.Groups.ContainsKey(ResourceGroups.BlackBerry)) diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/CRMOrganizationStatistics.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/CRMOrganizationStatistics.cs index 1ad2f6e3..736afd47 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/CRMOrganizationStatistics.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/CRMOrganizationStatistics.cs @@ -42,6 +42,7 @@ namespace WebsitePanel.Providers.HostedSolution public string СRMOrganizationName { get; set; } public int CRMUsersFullLicenceCount { get; set; } public int CRMUsersReadOnlyLicenceCount { get; set; } + public int CRMUsersESSLicenceCount { get; set; } public int UsedSpace { get; set; } public string UsageMonth { get; set; } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/OrganizationStatistics.cs b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/OrganizationStatistics.cs index 583a80e2..b107d59a 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/OrganizationStatistics.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.Base/HostedSolution/OrganizationStatistics.cs @@ -64,6 +64,9 @@ namespace WebsitePanel.Providers.HostedSolution private int createdLimitedCRMUsers; private int allocatedLimitedCRMUsers; + private int createdESSCRMUsers; + private int allocatedESSCRMUsers; + private long usedCRMDiskSpace; private long allocatedCRMDiskSpace; @@ -97,7 +100,19 @@ namespace WebsitePanel.Providers.HostedSolution get { return allocatedLimitedCRMUsers; } set { allocatedLimitedCRMUsers = value; } } - + + public int CreatedESSCRMUsers + { + get { return createdESSCRMUsers; } + set { createdESSCRMUsers = value; } + } + + public int AllocatedESSCRMUsers + { + get { return allocatedESSCRMUsers; } + set { allocatedESSCRMUsers = value; } + } + public int AllocatedUsers { get { return allocatedUsers; } diff --git a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Crm2011/CRMProvider2011.cs b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Crm2011/CRMProvider2011.cs index b19143bc..44d03f40 100644 --- a/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Crm2011/CRMProvider2011.cs +++ b/WebsitePanel/Sources/WebsitePanel.Providers.HostedSolution.Crm2011/CRMProvider2011.cs @@ -951,6 +951,10 @@ namespace WebsitePanel.Providers.HostedSolution // Retrieve the specified security role. Role role = RetrieveRoleByName(serviceProxy, roleStr); + // CALType and AccessMode + int accessmode = CALType / 10; + int caltype = CALType % 10; + //Create a new system user. SystemUser user = new SystemUser { @@ -963,7 +967,8 @@ namespace WebsitePanel.Providers.HostedSolution Name = BusinessUnit.EntityLogicalName, Id = defaultBusinessUnit.Id }, - CALType = new OptionSetValue(CALType) + CALType = new OptionSetValue(caltype), + AccessMode = new OptionSetValue(accessmode) }; userId = serviceProxy.Create(user); @@ -1930,7 +1935,12 @@ namespace WebsitePanel.Providers.HostedSolution SystemUser user = serviceProxy.Retrieve(SystemUser.EntityLogicalName, userId, new Microsoft.Xrm.Sdk.Query.ColumnSet("domainname", "businessunitid", "accessmode", "isdisabled", "caltype")).ToEntity(); - user.CALType = new OptionSetValue(CALType); + // CALType and AccessMode + int accessmode = CALType / 10; + int caltype = CALType % 10; + + user.CALType = new OptionSetValue(caltype); + user.AccessMode = new OptionSetValue(accessmode); serviceProxy.Update(user); diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx index 94ad568b..f4ec2338 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/App_GlobalResources/WebsitePanel_SharedResources.ascx.resx @@ -5374,4 +5374,10 @@ CRM users quota (limited license) has been reached. + + CRM users quota (ESS license) has been reached. + + + ESS licenses per organization + \ No newline at end of file diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMStorageSettings.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMStorageSettings.ascx.cs index d5da4ddc..f7930b46 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMStorageSettings.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMStorageSettings.ascx.cs @@ -42,10 +42,19 @@ namespace WebsitePanel.Portal protected void Page_Load(object sender, EventArgs e) { warningValue.UnlimitedText = GetLocalizedString("WarningUnlimitedValue"); - if (!IsPostBack) { - BindValues(); + Organization org = ES.Services.Organizations.GetOrganization(PanelRequest.ItemID); + if (org.CrmOrganizationId == Guid.Empty) + { + messageBox.ShowErrorMessage("NOT_CRM_ORGANIZATION"); + StorageLimits.Enabled = false; + btnSave.Enabled = false; + } + else + { + BindValues(); + } } } @@ -77,9 +86,9 @@ namespace WebsitePanel.Portal try { PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId); - int limitSize = cntx.Quotas[Quotas.CRM_MAXDATABASESIZE].QuotaAllocatedValue; + long limitSize = cntx.Quotas[Quotas.CRM_MAXDATABASESIZE].QuotaAllocatedValue; - int maxSize = maxStorageSettingsValue.QuotaValue; + long maxSize = maxStorageSettingsValue.QuotaValue; if (limitSize != -1) { diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUserRoles.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUserRoles.ascx index 142dfecc..320d1a7f 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUserRoles.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUserRoles.ascx @@ -56,6 +56,7 @@ Full Limited + ESS diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUserRoles.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUserRoles.ascx.cs index 82633cbe..232e18ea 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUserRoles.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUserRoles.ascx.cs @@ -59,12 +59,13 @@ namespace WebsitePanel.Portal.CRM lblEmailAddress.Text = user.PrimaryEmailAddress; lblDomainName.Text = user.DomainUserName; - int cALType = userResult.Value.CALType; + int cALType = userResult.Value.CALType + ((int)userResult.Value.ClientAccessMode) * 10; switch (cALType) { case 0 : case 2 : + case 22: ddlLicenseType.SelectedValue = cALType.ToString(); break; default: diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUsers.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUsers.ascx index 5c2d27f9..157c4439 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUsers.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUsers.ascx @@ -97,6 +97,14 @@ + + + + + + + + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUsers.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUsers.ascx.cs index f5c2df3f..e602141d 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUsers.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUsers.ascx.cs @@ -57,6 +57,10 @@ namespace WebsitePanel.Portal.CRM //if (stats.AllocatedCRMUsers != -1) usersQuota.QuotaAvailable = tenantStats.AllocatedCRMUsers - tenantStats.CreatedCRMUsers; //if (stats.AllocatedLimitedCRMUsers != -1) limitedusersQuota.QuotaAvailable = tenantStats.AllocatedLimitedCRMUsers - tenantStats.CreatedLimitedCRMUsers; + + essusersQuota.QuotaUsedValue = stats.CreatedESSCRMUsers; + essusersQuota.QuotaValue = stats.AllocatedESSCRMUsers; + } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUsers.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUsers.ascx.designer.cs index 26126601..721c4be0 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUsers.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CRMUsers.ascx.designer.cs @@ -201,5 +201,23 @@ namespace WebsitePanel.Portal.CRM { /// To modify move field declaration from designer file to code-behind file. /// protected global::WebsitePanel.Portal.QuotaViewer limitedusersQuota; + + /// + /// locESSQuota control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.Localize locESSQuota; + + /// + /// essusersQuota control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.QuotaViewer essusersQuota; } } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CreateCRMUser.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CreateCRMUser.ascx index 8e4684d6..4943ec9d 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CreateCRMUser.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/CRM/CreateCRMUser.ascx @@ -45,6 +45,7 @@ Full Limited + ESS diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx index e5d262c6..86659c0e 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx @@ -224,7 +224,15 @@ - + + + + + + + + + diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx.cs index 647cb8e1..bdadf4b7 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx.cs @@ -247,6 +247,7 @@ namespace WebsitePanel.Portal.ExchangeServer "SpaceID=" + PanelSecurity.PackageId); lnkLimitedCRMUsers.NavigateUrl = lnkCRMUsers.NavigateUrl; + lnkESSCRMUsers.NavigateUrl = lnkCRMUsers.NavigateUrl; lnkCRMDBSize.NavigateUrl = EditUrl("ItemID", PanelRequest.ItemID.ToString(), "crm_storage_settings", "SpaceID=" + PanelSecurity.PackageId); @@ -259,7 +260,10 @@ namespace WebsitePanel.Portal.ExchangeServer crmLimitedUsersStats.QuotaUsedValue = stats.CreatedLimitedCRMUsers; crmLimitedUsersStats.QuotaValue = stats.AllocatedLimitedCRMUsers; - crmDBSize.QuotaUsedValue = Convert.ToInt32( stats.UsedCRMDiskSpace>0 ? stats.UsedCRMDiskSpace/(1024*1024) : -1); + crmESSUsersStats.QuotaUsedValue = stats.CreatedESSCRMUsers; + crmESSUsersStats.QuotaValue = stats.AllocatedESSCRMUsers; + + crmDBSize.QuotaUsedValue = Convert.ToInt32(stats.UsedCRMDiskSpace > 0 ? stats.UsedCRMDiskSpace / (1024 * 1024) : -1); crmDBSize.QuotaValue = Convert.ToInt32(stats.AllocatedCRMDiskSpace>0 ? stats.AllocatedCRMDiskSpace/(1024*1024) : -1); } diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx.designer.cs index 9894c4a6..dd6be843 100644 --- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx.designer.cs +++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ExchangeServer/OrganizationHome.ascx.designer.cs @@ -553,6 +553,24 @@ namespace WebsitePanel.Portal.ExchangeServer { /// protected global::WebsitePanel.Portal.QuotaViewer crmLimitedUsersStats; + /// + /// lnkESSCRMUsers control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::System.Web.UI.WebControls.HyperLink lnkESSCRMUsers; + + /// + /// crmESSUsersStats control. + /// + /// + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// + protected global::WebsitePanel.Portal.QuotaViewer crmESSUsersStats; + /// /// lnkCRMDBSize control. ///