using Sarand.BusinessMgr.Net.Standard.Base.App; using Sarand.BusinessMgr.Net.Standard.Base.Bus; using Sarand.BusinessMgr.Net.Standard.Base.Consoles; using Sarand.BusinessMgr.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Dbas; using Sarand.Net.Standard.Base.Security; using Sarand.Net.Standard.Base.UpdateLog; using Sarand.Net.Standard.Dbas.Security; using System; using System.Collections.Generic; using System.Linq; namespace Sarand.BusinessMgr.Net.Standard.Dbas.Consoles { //======================================================================= public abstract class SbmSecurityConsole_Dbas : SaSecurityConsole_Dbas { //------------------------------------------------------------------- // Data members. private SbmInternals internals; private List securityRights; //------------------------------------------------------------------- // Construction. protected SbmSecurityConsole_Dbas(ISbmUserOrganisationContext userContext) : base(SbmGlobals.Application.GetBusMgrDatabase(userContext.SessionContext)) { UserContext = userContext; RegisterSecurityRights(); } protected override void Dispose(bool disposing) { if (disposing) { if (internals != null) internals.Dispose(); internals = null; } base.Dispose(disposing); } //------------------------------------------------------------------- // Properties. public ISbmUserOrganisationContext UserContext { get; } public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } } private SbmInternals Internals { get { if (internals == null) internals = new SbmInternals(UserContext); return internals; } } public override short SecurityItemDataType { get { return (short)Sbm.ItemType.SecurityItem; } } public override short SecurityLinkDataType { get { return (short)Sbm.ItemType.SecurityLink; } } // Consoles. private SbmSessionConsole SessionConsole { get { return Internals.SessionConsole; } } public override SaUpdateLogConsole UpdateLogConsole { get { return Internals.UpdateLogConsole; } } //------------------------------------------------------------------- // Utilities. //------------------------------------------------------------------- // S e c u r i t y R i g h t s //------------------------------------------------------------------- protected List GetSecurityRights() { if (securityRights == null) { securityRights = new List(); if (SessionConsole != null && SessionConsole.AllowOption(Sbm.ConfigOption.Contacts)) { securityRights.Add(Sbm.SecurityRight.Affiliate_Create, "AffIns", "Affiliates - Create"); securityRights.Add(Sbm.SecurityRight.Affiliate_Update, "AffUpd", "Affiliates - Update"); securityRights.Add(Sbm.SecurityRight.Association_Create, "AssIns", "Associations - Create"); securityRights.Add(Sbm.SecurityRight.Association_Update, "AssUpd", "Associations - Update"); } if (SessionConsole != null && SessionConsole.AllowOption(Sbm.ConfigOption.Commodities)) { securityRights.Add(Sbm.SecurityRight.Commodity_Create, "CmdIns", "Commodities - Create"); securityRights.Add(Sbm.SecurityRight.Commodity_Update, "CmdUpd", "Commodities - Update"); if (SessionConsole.GetStockControlConfig().AllowStockControl()) { securityRights.Add(Sbm.SecurityRight.StockTake, "CmdStkTak", "Commodities - Stock Take"); } } if (SessionConsole != null && SessionConsole.AllowOption(Sbm.ConfigOption.Assets)) { securityRights.Add(Sbm.SecurityRight.Asset_Create, "AssetIns", "Assets - Create"); securityRights.Add(Sbm.SecurityRight.Asset_Update, "AssetUpd", "Assets - Update"); } if (SessionConsole != null && SessionConsole.AllowOption(Sbm.ConfigOption.Transactions)) { securityRights.Add(Sbm.SecurityRight.Transaction_Create, "TraIns", "Transactions - Create"); securityRights.Add(Sbm.SecurityRight.Transaction_Update, "TraUpd", "Transactions - Update"); securityRights.Add(Sbm.SecurityRight.Transaction_Remove, "TraRem", "Transactions - Remove"); securityRights.Add(Sbm.SecurityRight.Transaction_ByType, "TransType", "Transactions - Allow by type"); securityRights.Add(Sbm.SecurityRight.Transaction_UpdateByTypeStatus, "UpdTransTypeStat", "Transactions - Update by type and status"); } securityRights.Add(Sbm.SecurityRight.Security_Admin, "SecAdm", "Admin - Security"); securityRights.Add(Sbm.SecurityRight.Database_Admin, "DbAdm", "Admin - Database"); securityRights.Add(Sbm.SecurityRight.ReferenceData_Admin, "RefAdm", "Admin - Reference data"); if (SessionConsole != null && SessionConsole.AllowInterfaces()) { securityRights.Add(Sbm.SecurityRight.InterfaceConfig, "IntCfg", "Interfaces - Configuration"); securityRights.Add(Sbm.SecurityRight.InterfaceByCategory, "IntCategory", "Interfaces - Allow by category"); } securityRights.Add(Sbm.SecurityRight.Financial_Update, "FinUpd", "Financials - Update"); securityRights.Add(Sbm.SecurityRight.Financial_View, "FinLst", "Financials - View"); securityRights.Add(Sbm.SecurityRight.Financial_ViewByType, "FinType", "Financials - View by type"); securityRights.Add(Sbm.SecurityRight.Financial_UpdateByType, "FinTypeUpd", "Financials - Update by type"); if (SessionConsole != null && SessionConsole.AllowOption(Sbm.ConfigOption.TimeRecording)) { securityRights.Add(Sbm.SecurityRight.TimesheetManager, "TimMgr", "Manage - Timesheets"); } if (SessionConsole != null && SessionConsole.AllowOption(Sbm.ConfigOption.Tasks)) { securityRights.Add(Sbm.SecurityRight.TaskManager, "TskMgr", "Manage - Tasks"); } } return securityRights; } //------------------------------------------------------------------- // T r a n s a c t i o n s //------------------------------------------------------------------- private List GetTransactionTypeStatusRights(bool fullList) { // Construct list of transaction types and statuses to use in security rights. List transactionTypesStatus = new List(); foreach (TypeCodeDesc transactionType in internals.GetSystemCodes(Sbm.SystemCode.TransactionType)) { Sbm.TransactionType transType = (Sbm.TransactionType)transactionType.Type; // Only interested in sales quotes and orders for now. bool bValidTransType = false; if (!bValidTransType) bValidTransType = (transType == Sbm.TransactionType.SalesQuote); if (!bValidTransType) bValidTransType = (transType == Sbm.TransactionType.SalesOrder); if ((fullList || bValidTransType) && SessionConsole.AllowTransactionType(transType)) { // Retrieve status categories for transaction type: foreach (TypeCodeDesc transactionStatus in SbmTransaction.GetTransactionStatusCats(transType)) { SbmTransaction.StatusCat transStatusCat = (SbmTransaction.StatusCat)transactionStatus.Type; String sDesc = transactionType.Desc + " - " + transactionType.Desc; SysId transactionTypeIdStatus = GetTransactionTypeStatusId(transType, transStatusCat); if (fullList || SessionConsole.AllowTransactionType(transType)) transactionTypesStatus.Add(transactionTypeIdStatus, transactionStatus.Desc); } } } return transactionTypesStatus; } //------------------------------------------------------------------- // TRansaction Status Id. private SysId GetTransactionTypeStatusId(Sbm.TransactionType transactionType, SbmTransaction.StatusCat transactionStatusCat) { return new SysId(((int)transactionType * 100) + (int)transactionStatusCat); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // R e g i t e r S e c u r i t y R i g h t s //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Register Security Rights. public override void RegisterSecurityRights() { // Reset. ClearRegisteredSecurityRights(); //--------------------------------------------------------------- // Register data item types. [Not used - to demonstrate option] RegisterDataItemType((short)Sbm.ItemType.Commodity, "Commodity"); //--------------------------------------------------------------- // Register security rights. foreach (TypeCodeDesc securityRight in GetSecurityRights()) { TypeCodeDesc secRight = securityRight; switch (secRight.Type) { case (int)Sbm.SecurityRight.Transaction_ByType: RegisterSecurityRight(secRight.Type, secRight.Code, secRight.Desc, (short)Sbm.ItemType.TransactionType); break; case (int)Sbm.SecurityRight.Transaction_UpdateByTypeStatus: RegisterSecurityRight(secRight.Type, secRight.Code, secRight.Desc, (short)Sbm.ItemType.TransactionTypeStatus); break; case (int)Sbm.SecurityRight.InterfaceByCategory: RegisterSecurityRight(secRight.Type, secRight.Code, secRight.Desc, (short)Sbm.ItemType.InterfaceCategory); break; case (int)Sbm.SecurityRight.Financial_ViewByType: RegisterSecurityRight(secRight.Type, secRight.Code, secRight.Desc, (short)Sbm.ItemType.FinancialType); break; case (int)Sbm.SecurityRight.Financial_UpdateByType: RegisterSecurityRight(secRight.Type, secRight.Code, secRight.Desc, (short)Sbm.ItemType.FinancialType); break; default: RegisterSecurityRight(secRight.Type, secRight.Code, secRight.Desc); break; } } //--------------------------------------------------------------- // Register the security data item types. if (SessionConsole != null) { // Transaction types: List transactionTypesDesc = new List(); List transactionTypesDescAllowed = new List(); foreach (TypeCodeDesc transactionType in internals.GetSystemCodes(Sbm.SystemCode.TransactionType)) { if (SessionConsole.AllowTransactionType((Sbm.TransactionType)transactionType.Type)) transactionTypesDescAllowed.Add(new SysId(transactionType.Type), transactionType.Desc); transactionTypesDesc.Add(new SysId(transactionType.Type), transactionType.Desc); } RegisterDataItems((short)Sbm.ItemType.TransactionType, transactionTypesDescAllowed, transactionTypesDesc); // Transaction types with statuses: List transactionTypesDescStatus = GetTransactionTypeStatusRights(false); List transactionTypesDescStatusAllowed = GetTransactionTypeStatusRights(true); RegisterDataItems((short)Sbm.ItemType.TransactionTypeStatus, transactionTypesDescStatusAllowed, transactionTypesDescStatus); // Interface Categories: List interfaceCategoriesDesc = new List(); List interfaceCategoriesDescAllowed = new List(); foreach (TypeCodeDesc interfaceCategory in SacsSystem.GetCodesOfType(SaSysCodeType.InterfaceCategory)) { if (SessionConsole.AllowInterfaceCategory((SaInterfaceCategory)interfaceCategory.Type)) interfaceCategoriesDescAllowed.Add(new SysId(interfaceCategory.Type), interfaceCategory.Desc); interfaceCategoriesDesc.Add(new SysId(interfaceCategory.Type), interfaceCategory.Desc); } RegisterDataItems((short)Sbm.ItemType.InterfaceCategory, interfaceCategoriesDescAllowed, interfaceCategoriesDesc); // Financial types: List financialTypesDesc = new List(); List financialTypesDescAllowed = new List(); foreach (TypeCodeDesc financialType in internals.GetSystemCodes(Sbm.SystemCode.FinancialType)) { financialTypesDescAllowed.Add(new SysId(financialType.Type), financialType.Desc); financialTypesDesc.Add(new SysId(financialType.Type), financialType.Desc); } RegisterDataItems((short)Sbm.ItemType.FinancialType, financialTypesDescAllowed, financialTypesDesc); } //--------------------------------------------------------------- } CodeDesc GetSecurityRight(Sbm.SecurityRight securityRight) { return securityRights.GetCodeDescForType(securityRight); } //------------------------------------------------------------------- } //======================================================================= }