258 lines
12 KiB
C#
258 lines
12 KiB
C#
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 class DataMembers
|
|
{
|
|
public DataMembers(SbmInternals internalsSupplied)
|
|
{
|
|
this.InternalsSupplied = internalsSupplied;
|
|
}
|
|
public SbmInternals InternalsSupplied { get; }
|
|
public List<TypeCodeDesc> SecurityRights { get; set; }
|
|
}
|
|
private DataMembers mbr { get; }
|
|
|
|
//-------------------------------------------------------------------
|
|
// Construction.
|
|
protected SbmSecurityConsole_Dbas(SbmInternals internals) :
|
|
base(internals.BusMgrDatabase)
|
|
{
|
|
mbr = new DataMembers(internals);
|
|
RegisterSecurityRights();
|
|
}
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
if (disposing)
|
|
{
|
|
}
|
|
base.Dispose(disposing);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Properties.
|
|
public ISbmUserOrganisationContext UserContext { get { return Internals.UserContext; } }
|
|
public SbmSessionContext SessionContext { get { return UserContext.SessionContext; } }
|
|
private SbmInternals Internals { get { return mbr.InternalsSupplied; } }
|
|
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<TypeCodeDesc> GetSecurityRights()
|
|
{
|
|
if (mbr.SecurityRights == null)
|
|
{
|
|
mbr.SecurityRights = new List<TypeCodeDesc>();
|
|
if (SessionConsole != null && SessionConsole.AllowOption(Sbm.ConfigOption.Contacts))
|
|
{
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.Affiliate_Create, "AffIns", "Affiliates - Create");
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.Affiliate_Update, "AffUpd", "Affiliates - Update");
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.Association_Create, "AssIns", "Associations - Create");
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.Association_Update, "AssUpd", "Associations - Update");
|
|
}
|
|
if (SessionConsole != null && SessionConsole.AllowOption(Sbm.ConfigOption.Commodities))
|
|
{
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.Commodity_Create, "CmdIns", "Commodities - Create");
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.Commodity_Update, "CmdUpd", "Commodities - Update");
|
|
if (SessionConsole.GetStockControlConfig().AllowStockControl())
|
|
{
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.StockTake, "CmdStkTak", "Commodities - Stock Take");
|
|
}
|
|
}
|
|
if (SessionConsole != null && SessionConsole.AllowOption(Sbm.ConfigOption.Assets))
|
|
{
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.Asset_Create, "AssetIns", "Assets - Create");
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.Asset_Update, "AssetUpd", "Assets - Update");
|
|
}
|
|
if (SessionConsole != null && SessionConsole.AllowOption(Sbm.ConfigOption.Transactions))
|
|
{
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.Transaction_Create, "TraIns", "Transactions - Create");
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.Transaction_Update, "TraUpd", "Transactions - Update");
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.Transaction_Remove, "TraRem", "Transactions - Remove");
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.Transaction_ByType, "TransType", "Transactions - Allow by type");
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.Transaction_UpdateByTypeStatus, "UpdTransTypeStat", "Transactions - Update by type and status");
|
|
}
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.Security_Admin, "SecAdm", "Admin - Security");
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.Database_Admin, "DbAdm", "Admin - Database");
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.ReferenceData_Admin, "RefAdm", "Admin - Reference data");
|
|
if (SessionConsole != null && SessionConsole.AllowInterfaces())
|
|
{
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.InterfaceConfig, "IntCfg", "Interfaces - Configuration");
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.InterfaceByCategory, "IntCategory", "Interfaces - Allow by category");
|
|
}
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.Financial_Update, "FinUpd", "Financials - Update");
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.Financial_View, "FinLst", "Financials - View");
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.Financial_ViewByType, "FinType", "Financials - View by type");
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.Financial_UpdateByType, "FinTypeUpd", "Financials - Update by type");
|
|
if (SessionConsole != null && SessionConsole.AllowOption(Sbm.ConfigOption.TimeRecording))
|
|
{
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.TimesheetManager, "TimMgr", "Manage - Timesheets");
|
|
}
|
|
if (SessionConsole != null && SessionConsole.AllowOption(Sbm.ConfigOption.Tasks))
|
|
{
|
|
mbr.SecurityRights.Add(Sbm.SecurityRight.TaskManager, "TskMgr", "Manage - Tasks");
|
|
}
|
|
}
|
|
return mbr.SecurityRights;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// T r a n s a c t i o n s
|
|
//-------------------------------------------------------------------
|
|
private List<SysIdString> GetTransactionTypeStatusRights(bool fullList)
|
|
{
|
|
// Construct list of transaction types and statuses to use in security rights.
|
|
List<SysIdString> transactionTypesStatus = new List<SysIdString>();
|
|
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<SysIdString> transactionTypesDesc = new List<SysIdString>();
|
|
List<SysIdString> transactionTypesDescAllowed = new List<SysIdString>();
|
|
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<SysIdString> transactionTypesDescStatus = GetTransactionTypeStatusRights(false);
|
|
List<SysIdString> transactionTypesDescStatusAllowed = GetTransactionTypeStatusRights(true);
|
|
RegisterDataItems((short)Sbm.ItemType.TransactionTypeStatus, transactionTypesDescStatusAllowed, transactionTypesDescStatus);
|
|
|
|
// Interface Categories:
|
|
List<SysIdString> interfaceCategoriesDesc = new List<SysIdString>();
|
|
List<SysIdString> interfaceCategoriesDescAllowed = new List<SysIdString>();
|
|
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<SysIdString> financialTypesDesc = new List<SysIdString>();
|
|
List<SysIdString> financialTypesDescAllowed = new List<SysIdString>();
|
|
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 mbr.SecurityRights.GetCodeDescForType(securityRight);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|