971 lines
33 KiB
C#
971 lines
33 KiB
C#
using Sarand.BusinessMgr.Net.Standard.Base.App;
|
|
using Sarand.BusinessMgr.Net.Standard.Base.Core;
|
|
using Sarand.Net.Standard.Base.Bus;
|
|
using Sarand.Net.Standard.Base.Core;
|
|
using Sarand.Net.Standard.Base.Utils;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
|
|
{
|
|
//=======================================================================
|
|
public abstract class SbmAssociation : SbmHierarchyItem
|
|
{
|
|
//-------------------------------------------------------------------
|
|
// Columns.
|
|
public enum Column
|
|
{
|
|
Hidden,
|
|
Pos,
|
|
Id,
|
|
//Association.
|
|
Type,
|
|
Type_Desc,
|
|
Code,
|
|
ExtRef,
|
|
Role,
|
|
Location,
|
|
PhoneMain,
|
|
Email,
|
|
Group,
|
|
DescDetail,
|
|
DefaultNominalCode,
|
|
AmountTransMax,
|
|
AnnualSalesTarget,
|
|
CreditLimit,
|
|
AccountBalance,
|
|
DiscountType,
|
|
DiscountType_Desc,
|
|
DiscountRate,
|
|
PriceSetId,
|
|
PriceSet_Ref,
|
|
PriceSet_Type,
|
|
PriceSet_TypeDesc,
|
|
PriceSet_Name,
|
|
TaxCodeId,
|
|
PaymentTerms,
|
|
InvoiceDesc,
|
|
AccountManagerCode, AccountManagerDesc,
|
|
AccountHandlerCode, AccountHandlerDesc,
|
|
AccountTypeCode, AccountTypeDesc,
|
|
AccountRatingCode, AccountRatingDesc,
|
|
ContactAreaCode, ContactAreaDesc,
|
|
ContactHandlerCode, ContactHandlerDesc,
|
|
ContactMethodCode, ContactMethodDesc,
|
|
ContactCallCycleCode, ContactCallCycleDesc,
|
|
CallsPerYear,
|
|
LastCall,
|
|
SeasonalCategoryCodes,
|
|
SeasonalCategoryCode1, SeasonalCategoryDesc1,
|
|
SeasonalCategoryCode2, SeasonalCategoryDesc2,
|
|
SeasonalCategoryCode3, SeasonalCategoryDesc3,
|
|
OrderLeadTimeCode, OrderLeadTimeDesc,
|
|
DeliveryTypeCode, DeliveryTypeDesc,
|
|
DeliveryMethodCode, DeliveryMethodDesc,
|
|
DeliveryBookInCode, DeliveryBookInDesc,
|
|
Terminated,
|
|
Primary,
|
|
Technician,
|
|
// Association's owner details
|
|
AffIdOwner,
|
|
Owner_Name,
|
|
// Association's target details
|
|
AffIdTarget,
|
|
Target_Type,
|
|
Target_TypeDesc,
|
|
Target_Name,
|
|
Target_FirstName,
|
|
Target_LastName,
|
|
Target_Nature,
|
|
Target_PhoneMain,
|
|
Target_PhoneAlt,
|
|
Target_PhoneFax,
|
|
Target_PhoneMobile,
|
|
Target_Email,
|
|
Target_Website,
|
|
Target_Notes,
|
|
// Association's target Address details
|
|
Target_Address_Type,
|
|
Target_Address_TypeDesc,
|
|
Target_Address_RefExt,
|
|
Target_Address_Name,
|
|
Target_Address_DescBrief,
|
|
Target_Address_Summary,
|
|
Target_Address_Line1, Target_Address_Line2, Target_Address_Line3,
|
|
Target_Address_City, Target_Address_Province, Target_Address_Postcode, Target_Address_Country,
|
|
Target_Address_Contact, Target_Address_Phone, Target_Address_Email,
|
|
Target_Address_AccountManagerCode, Target_Address_AccountManagerDesc,
|
|
Target_Address_AccountHandlerCode, Target_Address_AccountHandlerDesc,
|
|
Target_Address_ContactAreaCode, Target_Address_ContactAreaDesc,
|
|
Target_Address_ContactHandlerCode, Target_Address_ContactHandlerDesc,
|
|
Target_Address_LastVisitOn, Target_Address_NextVisitOn,
|
|
// Target delivery addresses. [27-Jan-2016 Association import for Cadix]
|
|
Target_DeliveryAddress_Postcode,
|
|
Target_DeliveryAddress_AccountManagerCode,
|
|
Target_DeliveryAddress_ContactAreaCode,
|
|
// Associated members. [17-Nov-10]
|
|
Member_Type,
|
|
Member_TypeDesc,
|
|
Member_Code,
|
|
Member_ExtRef,
|
|
Member_Role,
|
|
Member_Location,
|
|
Member_PhoneMain,
|
|
Member_Email,
|
|
Member_Target_Name,
|
|
Member_Target_Nature,
|
|
Member_Target_PhoneMain, Member_Target_PhoneAlt, Member_Target_PhoneFax, Member_Target_PhoneMobile,
|
|
Member_Target_Email, Member_Target_Website, Member_Target_Notes,
|
|
Member_Target_Address_Summary,
|
|
Member_Target_Address_Line1, Member_Target_Address_Line2, Member_Target_Address_City,
|
|
Member_Target_Address_Province, Member_Target_Address_Postcode, Member_Target_Address_Country,
|
|
Trans_LastSaleRaised, // Most recent sales order opened date.
|
|
Trans_SalesValue_Open, // Net open sales order value.
|
|
Trans_SalesValue_Cytd, // Net sales order value closed this calendar year.
|
|
Trans_SalesValue_Lcy, // Net sales order value closed last calendar year.
|
|
CommodityCount, // Count of commodities defined against association (customer or supplier).
|
|
LastColumn, // Must be last in list (ref. SapProcAssociationImport).
|
|
|
|
// Common properties.
|
|
Notes,
|
|
Flag,
|
|
Status,
|
|
Status_Ind,
|
|
Status_Desc,
|
|
CreateOn_Date,
|
|
UpdateOn_Date,
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
/// <summary>Properties other than common.</summary>
|
|
public class DataProperties
|
|
{
|
|
public SysId AffiliateIdOwner { get; set; } = new SysId();
|
|
public SysId AffiliateIdTarget { get; set; } = new SysId();
|
|
public Sbm.AssociationType AssociationType { get; set; }
|
|
public String Code { get; set; } = "";
|
|
public String RefExt { get; set; } = "";
|
|
public String Location { get; set; } = "";
|
|
public String Role { get; set; } = "";
|
|
public String PhoneMain { get; set; } = "";
|
|
public String Email { get; set; } = "";
|
|
public String Group { get; set; } = "";
|
|
public String DescDetail { get; set; } = "";
|
|
public String DefaultNominalCode { get; set; } = "";
|
|
// Account.
|
|
public String AccountManagerCode { get; set; } = "";
|
|
public String AccountHandlerCode { get; set; } = "";
|
|
public String AccountTypeCode { get; set; } = "";
|
|
public String AccountRatingCode { get; set; } = "";
|
|
// Contact.
|
|
public String ContactAreaCode { get; set; } = "";
|
|
public String ContactHandlerCode { get; set; } = "";
|
|
public String ContactMethodCode { get; set; } = "";
|
|
public String ContactCallCycleCode { get; set; } = "";
|
|
public int CallsPerYear { get; set; } = 0;
|
|
public DateTime LastCall { get; set; } = DateTime.MinValue;
|
|
// Customer.
|
|
public SysId CommodityIdSalesDefault { get; set; } = new SysId();
|
|
public String OrderLeadTimeCode { get; set; } = "";
|
|
public String DeliveryTypeCode { get; set; } = "";
|
|
public String DeliveryMethodCode { get; set; } = "";
|
|
public String DeliveryCourierCode { get; set; } = "";
|
|
public String DeliveryBookInCode { get; set; } = "";
|
|
// Transactions.
|
|
public decimal AmountTransMax { get; set; } = 0.0m;
|
|
public decimal AnnualSalesTarget { get; set; } = 0.0m;
|
|
public decimal CreditLimit { get; set; } = 0.0m;
|
|
public decimal AccountBalance { get; set; } = 0.0m;
|
|
public Sbm.DiscountType DiscountType { get; set; } = Sbm.DiscountType.NoDiscount;
|
|
public decimal DiscountRate { get; set; } = 0.0m;
|
|
public SysId PriceSetId { get; set; } = new SysId();
|
|
public SysId TaxCodeId { get; set; } = new SysId();
|
|
public short PaymentTerms { get; set; } = 0;
|
|
public String InvoiceDesc { get; set; } = "";
|
|
public DateTime Terminated { get; set; } = DateTime.MinValue;
|
|
}
|
|
|
|
// Data.
|
|
public new class Data : SacsHierarchyItem.Data
|
|
{
|
|
// Data members.
|
|
private readonly DataProperties data = new DataProperties();
|
|
// Construction.
|
|
public Data()
|
|
{
|
|
Status = DefaultStatus;
|
|
}
|
|
public SysId AffiliateIdOwner
|
|
{
|
|
get { return data.AffiliateIdOwner; }
|
|
set { CheckChanged(data.AffiliateIdOwner, value); data.AffiliateIdOwner = value; }
|
|
}
|
|
public SysId AffiliateIdTarget
|
|
{
|
|
get { return data.AffiliateIdTarget; }
|
|
set { CheckChanged(data.AffiliateIdTarget, value); data.AffiliateIdTarget = value; }
|
|
}
|
|
public Sbm.AssociationType AssociationType
|
|
{
|
|
get { return data.AssociationType; }
|
|
set { CheckChanged((int)data.AssociationType, (int)value); data.AssociationType = value; }
|
|
}
|
|
public String Code
|
|
{
|
|
get { return data.Code; }
|
|
set { CheckChanged(data.Code, value); data.Code = value; }
|
|
}
|
|
public String RefExt
|
|
{
|
|
get { return data.RefExt; }
|
|
set { CheckChanged(data.RefExt, value); data.RefExt = value; }
|
|
}
|
|
public String Location
|
|
{
|
|
get { return data.Location; }
|
|
set { CheckChanged(data.Location, value); data.Location = value; }
|
|
}
|
|
public String Role
|
|
{
|
|
get { return data.Role; }
|
|
set { CheckChanged(data.Role, value); data.Role = value; }
|
|
}
|
|
public String PhoneMain
|
|
{
|
|
get { return data.PhoneMain; }
|
|
set { CheckChanged(data.PhoneMain, value); data.PhoneMain = value; }
|
|
}
|
|
public String Email
|
|
{
|
|
get { return data.Email; }
|
|
set { CheckChanged(data.Email, value); data.Email = value; }
|
|
}
|
|
public String Group
|
|
{
|
|
get { return data.Group; }
|
|
set { CheckChanged(data.Group, value); data.Group = value; }
|
|
}
|
|
public String DescDetail
|
|
{
|
|
get { return data.DescDetail; }
|
|
set { CheckChanged(data.DescDetail, value); data.DescDetail = value; }
|
|
}
|
|
public String DefaultNominalCode
|
|
{
|
|
get { return data.DefaultNominalCode; }
|
|
set { CheckChanged(data.DefaultNominalCode, value); data.DefaultNominalCode = value; }
|
|
}
|
|
// Account.
|
|
public String AccountManagerCode
|
|
{
|
|
get { return data.AccountManagerCode; }
|
|
set { CheckChanged(data.AccountManagerCode, value); data.AccountManagerCode = value; }
|
|
}
|
|
public String AccountHandlerCode
|
|
{
|
|
get { return data.AccountHandlerCode; }
|
|
set { CheckChanged(data.AccountHandlerCode, value); data.AccountHandlerCode = value; }
|
|
}
|
|
public String AccountTypeCode
|
|
{
|
|
get { return data.AccountTypeCode; }
|
|
set { CheckChanged(data.AccountTypeCode, value); data.AccountTypeCode = value; }
|
|
}
|
|
public String AccountRatingCode
|
|
{
|
|
get { return data.AccountRatingCode; }
|
|
set { CheckChanged(data.AccountRatingCode, value); data.AccountRatingCode = value; }
|
|
}
|
|
// Contact.
|
|
public String ContactAreaCode
|
|
{
|
|
get { return data.ContactAreaCode; }
|
|
set { CheckChanged(data.ContactAreaCode, value); data.ContactAreaCode = value; }
|
|
}
|
|
public String ContactHandlerCode
|
|
{
|
|
get { return data.ContactHandlerCode; }
|
|
set { CheckChanged(data.ContactHandlerCode, value); data.ContactHandlerCode = value; }
|
|
}
|
|
public String ContactMethodCode
|
|
{
|
|
get { return data.ContactMethodCode; }
|
|
set { CheckChanged(data.ContactMethodCode, value); data.ContactMethodCode = value; }
|
|
}
|
|
public String ContactCallCycleCode
|
|
{
|
|
get { return data.ContactCallCycleCode; }
|
|
set { CheckChanged(data.ContactCallCycleCode, value); data.ContactCallCycleCode = value; }
|
|
}
|
|
public int CallsPerYear
|
|
{
|
|
get { return data.CallsPerYear; }
|
|
set { CheckChanged(data.CallsPerYear, value); data.CallsPerYear = value; }
|
|
}
|
|
public DateTime LastCall
|
|
{
|
|
get { return data.LastCall; }
|
|
set { CheckChanged(data.LastCall, value); data.LastCall = value; }
|
|
}
|
|
// Customer.
|
|
public SysId CommodityIdSalesDefault
|
|
{
|
|
get { return data.CommodityIdSalesDefault; }
|
|
set { CheckChanged(data.CommodityIdSalesDefault, value); data.CommodityIdSalesDefault = value; }
|
|
}
|
|
public String OrderLeadTimeCode
|
|
{
|
|
get { return data.OrderLeadTimeCode; }
|
|
set { CheckChanged(data.OrderLeadTimeCode, value); data.OrderLeadTimeCode = value; }
|
|
}
|
|
public String DeliveryTypeCode
|
|
{
|
|
get { return data.DeliveryTypeCode; }
|
|
set { CheckChanged(data.DeliveryTypeCode, value); data.DeliveryTypeCode = value; }
|
|
}
|
|
public String DeliveryMethodCode
|
|
{
|
|
get { return data.DeliveryMethodCode; }
|
|
set { CheckChanged(data.DeliveryMethodCode, value); data.DeliveryMethodCode = value; }
|
|
}
|
|
public String DeliveryCourierCode
|
|
{
|
|
get { return data.DeliveryCourierCode; }
|
|
set { CheckChanged(data.DeliveryCourierCode, value); data.DeliveryCourierCode = value; }
|
|
}
|
|
public String DeliveryBookInCode
|
|
{
|
|
get { return data.DeliveryBookInCode; }
|
|
set { CheckChanged(data.DeliveryBookInCode, value); data.DeliveryBookInCode = value; }
|
|
}
|
|
// Transactions.
|
|
public decimal AmountTransMax
|
|
{
|
|
get { return data.AmountTransMax; }
|
|
set { CheckChanged(data.AmountTransMax, value); data.AmountTransMax = value; }
|
|
}
|
|
public decimal AnnualSalesTarget
|
|
{
|
|
get { return data.AnnualSalesTarget; }
|
|
set { CheckChanged(data.AnnualSalesTarget, value); data.AnnualSalesTarget = value; }
|
|
}
|
|
public decimal CreditLimit
|
|
{
|
|
get { return data.CreditLimit; }
|
|
set { CheckChanged(data.CreditLimit, value); data.CreditLimit = value; }
|
|
}
|
|
public decimal AccountBalance
|
|
{
|
|
get { return data.AccountBalance; }
|
|
set { CheckChanged(data.AccountBalance, value); data.AccountBalance = value; }
|
|
}
|
|
public Sbm.DiscountType DiscountType
|
|
{
|
|
get { return data.DiscountType; }
|
|
set { CheckChanged((int)data.DiscountType, (int)value); data.DiscountType = value; }
|
|
}
|
|
public decimal DiscountRate
|
|
{
|
|
get { return data.DiscountRate; }
|
|
set { CheckChanged(data.DiscountRate, value); data.DiscountRate = value; }
|
|
}
|
|
public SysId PriceSetId
|
|
{
|
|
get { return data.PriceSetId; }
|
|
set { CheckChanged(data.PriceSetId, value); data.PriceSetId = value; }
|
|
}
|
|
public SysId TaxCodeId
|
|
{
|
|
get { return data.TaxCodeId; }
|
|
set { CheckChanged(data.TaxCodeId, value); data.TaxCodeId = value; }
|
|
}
|
|
public short PaymentTerms
|
|
{
|
|
get { return data.PaymentTerms; }
|
|
set { CheckChanged(data.PaymentTerms, value); data.PaymentTerms = value; }
|
|
}
|
|
public String InvoiceDesc
|
|
{
|
|
get { return data.InvoiceDesc; }
|
|
set { CheckChanged(data.InvoiceDesc, value); data.InvoiceDesc = value; }
|
|
}
|
|
public DateTime Terminated
|
|
{
|
|
get { return data.Terminated; }
|
|
set { CheckChanged(data.Terminated, value); data.Terminated = value; }
|
|
}
|
|
|
|
internal void PopulateFrom(Data data)
|
|
{
|
|
AffiliateIdOwner = data.AffiliateIdOwner;
|
|
AffiliateIdTarget = data.AffiliateIdTarget;
|
|
AssociationType = data.AssociationType;
|
|
Code = data.Code;
|
|
RefExt = data.RefExt;
|
|
Location = data.Location;
|
|
Role = data.Role;
|
|
PhoneMain = data.PhoneMain;
|
|
Email = data.Email;
|
|
Group = data.Group;
|
|
DescDetail = data.DescDetail;
|
|
DefaultNominalCode = data.DefaultNominalCode;
|
|
// Account.
|
|
AccountManagerCode = data.AccountManagerCode;
|
|
AccountHandlerCode = data.AccountHandlerCode;
|
|
AccountTypeCode = data.AccountTypeCode;
|
|
AccountRatingCode = data.AccountRatingCode;
|
|
// Contact.
|
|
ContactAreaCode = data.ContactAreaCode;
|
|
ContactHandlerCode = data.ContactHandlerCode;
|
|
ContactMethodCode = data.ContactMethodCode;
|
|
ContactCallCycleCode = data.ContactCallCycleCode;
|
|
CallsPerYear = data.CallsPerYear;
|
|
LastCall = data.LastCall;
|
|
// Customer.
|
|
CommodityIdSalesDefault = data.CommodityIdSalesDefault;
|
|
OrderLeadTimeCode = data.OrderLeadTimeCode;
|
|
DeliveryTypeCode = data.DeliveryTypeCode;
|
|
DeliveryMethodCode = data.DeliveryMethodCode;
|
|
DeliveryCourierCode = data.DeliveryCourierCode;
|
|
DeliveryBookInCode = data.DeliveryBookInCode;
|
|
// Transactions.
|
|
AmountTransMax = data.AmountTransMax;
|
|
AnnualSalesTarget = data.AnnualSalesTarget;
|
|
CreditLimit = data.CreditLimit;
|
|
AccountBalance = data.AccountBalance;
|
|
DiscountType = data.DiscountType;
|
|
DiscountRate = data.DiscountRate;
|
|
PriceSetId = data.PriceSetId;
|
|
TaxCodeId = data.TaxCodeId;
|
|
PaymentTerms = data.PaymentTerms;
|
|
InvoiceDesc = data.InvoiceDesc;
|
|
Terminated = data.Terminated;
|
|
base.PopulateFrom(data);
|
|
}
|
|
public Data Clone()
|
|
{
|
|
Data data = new Data();
|
|
data.PopulateFrom(this);
|
|
return data;
|
|
}
|
|
}
|
|
public new class ErrField : SacsHierarchyItem.ErrField
|
|
{
|
|
// Identifies the field that has invalid data.
|
|
public ValidValue AffiliateIdOwner { get; set; } = ValidValue.Valid;
|
|
public ValidValue AffiliateIdTarget { get; set; } = ValidValue.Valid;
|
|
public ValidValue AssociationType { get; set; } = ValidValue.Valid;
|
|
public ValidValue Code { get; set; } = ValidValue.Valid;
|
|
public ValidValue RefExt { get; set; } = ValidValue.Valid;
|
|
public ValidValue Location { get; set; } = ValidValue.Valid;
|
|
public ValidValue Role { get; set; } = ValidValue.Valid;
|
|
public ValidValue PhoneMain { get; set; } = ValidValue.Valid;
|
|
public ValidValue Email { get; set; } = ValidValue.Valid;
|
|
public ValidValue Group { get; set; } = ValidValue.Valid;
|
|
public ValidValue DescDetail { get; set; } = ValidValue.Valid;
|
|
public ValidValue DefaultNominalCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue AccountManagerCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue AccountHandlerCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue AccountTypeCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue AccountRatingCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue ContactAreaCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue ContactHandlerCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue ContactMethodCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue ContactCallCycleCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue CallsPerYear { get; set; } = ValidValue.Valid;
|
|
public ValidValue LastCall { get; set; } = ValidValue.Valid;
|
|
public ValidValue CommodityIdSalesDefault { get; set; } = ValidValue.Valid;
|
|
public ValidValue OrderLeadTimeCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue DeliveryTypeCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue DeliveryMethodCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue DeliveryCourierCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue DeliveryBookInCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue AmountTransMax { get; set; } = ValidValue.Valid;
|
|
public ValidValue AnnualSalesTarget { get; set; } = ValidValue.Valid;
|
|
public ValidValue CreditLimit { get; set; } = ValidValue.Valid;
|
|
public ValidValue AccountBalance { get; set; } = ValidValue.Valid;
|
|
public ValidValue DiscountType { get; set; } = ValidValue.Valid;
|
|
public ValidValue DiscountRate { get; set; } = ValidValue.Valid;
|
|
public ValidValue PriceSetId { get; set; } = ValidValue.Valid;
|
|
public ValidValue TaxCodeId { get; set; } = ValidValue.Valid;
|
|
public ValidValue PaymentTerms { get; set; } = ValidValue.Valid;
|
|
public ValidValue InvoiceDesc { get; set; } = ValidValue.Valid;
|
|
public ValidValue Terminated { get; set; } = ValidValue.Valid;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Data members.
|
|
private readonly Data data = new Data();
|
|
public static readonly Byte Flag_Supervised = 0x01;
|
|
public static readonly Byte Flag_Primary = 0x02;
|
|
public static readonly Byte Flag_AccountOnHold = 0x03;
|
|
public static readonly Byte Flag_Technician = 0x04;
|
|
public static readonly Byte Flag_TaxCodeOverridden = 0x05;
|
|
|
|
//-------------------------------------------------------------------
|
|
// Construction.
|
|
protected SbmAssociation(SysId id, SysId affiliateIdOwner, Sbm.AssociationType associationType, SysId affiliateIdTarget) : base(id)
|
|
{
|
|
base.SetData(data);
|
|
AffiliateIdOwner = affiliateIdOwner;
|
|
AssociationType = associationType;
|
|
AffiliateIdTarget = affiliateIdTarget;
|
|
Status = DefaultStatus;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Association status.
|
|
private static readonly List<SaStatus> associationStatuses = new List<SaStatus>()
|
|
{
|
|
SaStatus.Current,
|
|
SaStatus.OnHold,
|
|
SaStatus.Disabled,
|
|
};
|
|
public static SaStatus DefaultStatus { get { return SaStatus.Current; } }
|
|
public static List<SaStatus> ValidStatuses { get { return new List<SaStatus>(associationStatuses); } }
|
|
public static DataValue.TriStateType GetStatusTriState(SaStatus status)
|
|
{
|
|
switch (status)
|
|
{
|
|
case SaStatus.Active:
|
|
case SaStatus.Current:
|
|
return DataValue.TriStateType.Green;
|
|
case SaStatus.OnHold:
|
|
return DataValue.TriStateType.Amber;
|
|
case SaStatus.Inactive:
|
|
case SaStatus.Cancelled:
|
|
case SaStatus.Disabled:
|
|
return DataValue.TriStateType.Red;
|
|
case SaStatus.Deleted:
|
|
return DataValue.TriStateType.Purple;
|
|
}
|
|
return DataValue.TriStateType.Unknown;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Utilities.
|
|
public SbmItemId GetItemId()
|
|
{
|
|
return new SbmItemId(Sbm.ItemType.Association, Id);
|
|
}
|
|
|
|
// Association type.
|
|
public bool TypeIsValid()
|
|
{
|
|
if (AssociationType > 0) return true;
|
|
return false;
|
|
}
|
|
public bool IsOfType(Sbm.AssociationType associationType)
|
|
{
|
|
return AssociationType == associationType;
|
|
}
|
|
public static bool IsCustomer(Sbm.AssociationType associationType)
|
|
{
|
|
return associationType == Sbm.AssociationType.Customer;
|
|
}
|
|
public static bool IsSupplier(Sbm.AssociationType associationType)
|
|
{
|
|
return associationType == Sbm.AssociationType.Supplier;
|
|
}
|
|
public bool IsInternal()
|
|
{
|
|
return IsOfType(Sbm.AssociationType.Internal);
|
|
}
|
|
public bool IsCustomer()
|
|
{
|
|
return IsOfType(Sbm.AssociationType.Customer);
|
|
}
|
|
public bool IsSupplier()
|
|
{
|
|
return IsOfType(Sbm.AssociationType.Supplier);
|
|
}
|
|
public bool IsAssociate()
|
|
{
|
|
return IsOfType(Sbm.AssociationType.Associate);
|
|
}
|
|
public bool IsMember()
|
|
{
|
|
return IsOfType(Sbm.AssociationType.Member);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Properties.
|
|
public Data GetData() { return data.Clone(); }
|
|
public void SetData(Data data)
|
|
{
|
|
// Properties that cannot be changed if previously specified.
|
|
if (SysId.IsValid(Id) && SysId.ToInt(Id) != SysId.ToInt(data.Id))
|
|
throw new NotSupportedException($"{SysUtil.Fn} Id cannot be changed");
|
|
// Populate individual properties to ensure that 'Changed' indicator is kept up to date.
|
|
this.data.PopulateFrom(data);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Attributes.
|
|
public SysId AffiliateIdOwner
|
|
{
|
|
get { return data.AffiliateIdOwner; }
|
|
set { data.AffiliateIdOwner = value; }
|
|
}
|
|
public SysId AffiliateIdTarget
|
|
{
|
|
get { return data.AffiliateIdTarget; }
|
|
set { data.AffiliateIdTarget = value; }
|
|
}
|
|
public Sbm.AssociationType AssociationType
|
|
{
|
|
get { return data.AssociationType; }
|
|
set { data.AssociationType = value; }
|
|
}
|
|
public String Code
|
|
{
|
|
get { return data.Code; }
|
|
set { data.Code = value; }
|
|
}
|
|
public String RefExt
|
|
{
|
|
get { return data.RefExt; }
|
|
set { data.RefExt = value; }
|
|
}
|
|
public String Location
|
|
{
|
|
get { return data.Location; }
|
|
set { data.Location = value; }
|
|
}
|
|
public String Role
|
|
{
|
|
get { return data.Role; }
|
|
set { data.Role = value; }
|
|
}
|
|
public String PhoneMain
|
|
{
|
|
get { return data.PhoneMain; }
|
|
set { data.PhoneMain = value; }
|
|
}
|
|
public String Email
|
|
{
|
|
get { return data.Email; }
|
|
set { data.Email = value; }
|
|
}
|
|
public String Group
|
|
{
|
|
get { return data.Group; }
|
|
set { data.Group = value; }
|
|
}
|
|
public String DescDetail
|
|
{
|
|
get { return data.DescDetail; }
|
|
set { data.DescDetail = value; }
|
|
}
|
|
// Codes.
|
|
public String DefaultNominalCode
|
|
{
|
|
get { return data.DefaultNominalCode; }
|
|
set { data.DefaultNominalCode = value; }
|
|
}
|
|
public String AccountManagerCode
|
|
{
|
|
get { return data.AccountManagerCode; }
|
|
set { data.AccountManagerCode = value; }
|
|
}
|
|
public String AccountHandlerCode
|
|
{
|
|
get { return data.AccountHandlerCode; }
|
|
set { data.AccountHandlerCode = value; }
|
|
}
|
|
public String AccountTypeCode
|
|
{
|
|
get { return data.AccountTypeCode; }
|
|
set { data.AccountTypeCode = value; }
|
|
}
|
|
public String AccountRatingCode
|
|
{
|
|
get { return data.AccountRatingCode; }
|
|
set { data.AccountRatingCode = value; }
|
|
}
|
|
public String ContactAreaCode
|
|
{
|
|
get { return data.ContactAreaCode; }
|
|
set { data.ContactAreaCode = value; }
|
|
}
|
|
public String ContactHandlerCode
|
|
{
|
|
get { return data.ContactHandlerCode; }
|
|
set { data.ContactHandlerCode = value; }
|
|
}
|
|
public String ContactMethodCode
|
|
{
|
|
get { return data.ContactMethodCode; }
|
|
set { data.ContactMethodCode = value; }
|
|
}
|
|
public String ContactCallCycleCode
|
|
{
|
|
get { return data.ContactCallCycleCode; }
|
|
set { data.ContactCallCycleCode = value; }
|
|
}
|
|
public int CallsPerYear
|
|
{
|
|
get { return data.CallsPerYear; }
|
|
set { data.CallsPerYear = value; }
|
|
}
|
|
public DateTime LastCall
|
|
{
|
|
get { return data.LastCall; }
|
|
set { data.LastCall = value; }
|
|
}
|
|
public SysId CommodityIdSalesDefault
|
|
{
|
|
get { return data.CommodityIdSalesDefault; }
|
|
set { data.CommodityIdSalesDefault = value; }
|
|
}
|
|
public String OrderLeadTimeCode
|
|
{
|
|
get { return data.OrderLeadTimeCode; }
|
|
set { data.OrderLeadTimeCode = value; }
|
|
}
|
|
public String DeliveryTypeCode
|
|
{
|
|
get { return data.DeliveryTypeCode; }
|
|
set { data.DeliveryTypeCode = value; }
|
|
}
|
|
public String DeliveryMethodCode
|
|
{
|
|
get { return data.DeliveryMethodCode; }
|
|
set { data.DeliveryMethodCode = value; }
|
|
}
|
|
public String DeliveryCourierCode
|
|
{
|
|
get { return data.DeliveryCourierCode; }
|
|
set { data.DeliveryCourierCode = value; }
|
|
}
|
|
public String DeliveryBookInCode
|
|
{
|
|
get { return data.DeliveryBookInCode; }
|
|
set { data.DeliveryBookInCode = value; }
|
|
}
|
|
public decimal AmountTransMax
|
|
{
|
|
get { return data.AmountTransMax; }
|
|
set { data.AmountTransMax = value; }
|
|
}
|
|
public decimal AnnualSalesTarget
|
|
{
|
|
get { return data.AnnualSalesTarget; }
|
|
set { data.AnnualSalesTarget = value; }
|
|
}
|
|
public decimal CreditLimit
|
|
{
|
|
get { return data.CreditLimit; }
|
|
set { data.CreditLimit = value; }
|
|
}
|
|
public decimal AccountBalance
|
|
{
|
|
get { return data.AccountBalance; }
|
|
set { data.AccountBalance = value; }
|
|
}
|
|
public Sbm.DiscountType DiscountType
|
|
{
|
|
get { return data.DiscountType; }
|
|
set { data.DiscountType = value; }
|
|
}
|
|
public decimal DiscountRate
|
|
{
|
|
get { return data.DiscountRate; }
|
|
set { data.DiscountRate = value; }
|
|
}
|
|
public SysId PriceSetId
|
|
{
|
|
get { return data.PriceSetId; }
|
|
set { data.PriceSetId = value; }
|
|
}
|
|
public SysId TaxCodeId
|
|
{
|
|
get { return data.TaxCodeId; }
|
|
set { data.TaxCodeId = value; }
|
|
}
|
|
public short PaymentTerms
|
|
{
|
|
get { return data.PaymentTerms; }
|
|
set { data.PaymentTerms = value; }
|
|
}
|
|
public String InvoiceDesc
|
|
{
|
|
get { return data.InvoiceDesc; }
|
|
set { data.InvoiceDesc = value; }
|
|
}
|
|
public DateTime Terminated
|
|
{
|
|
get { return data.Terminated; }
|
|
set { data.Terminated = value; }
|
|
}
|
|
|
|
public bool IsActiveStatus(SaStatus status)
|
|
{
|
|
switch (status)
|
|
{
|
|
case SaStatus.Inactive:
|
|
case SaStatus.Disabled:
|
|
case SaStatus.Cancelled:
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public bool IsActiveStatus()
|
|
{
|
|
return IsActiveStatus(SaStatus.Unknown);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Flags.
|
|
public bool Supervised
|
|
{
|
|
get { return GetFlag(Flag_Supervised); }
|
|
set { SetFlag(Flag_Supervised, value); }
|
|
}
|
|
public bool Primary
|
|
{
|
|
get { return GetFlag(Flag_Primary); }
|
|
set { SetFlag(Flag_Primary, value); }
|
|
}
|
|
public bool AccountOnHold
|
|
{
|
|
get { return GetFlag(Flag_AccountOnHold); }
|
|
set { SetFlag(Flag_AccountOnHold, value); }
|
|
}
|
|
public bool Technician
|
|
{
|
|
get { return GetFlag(Flag_Technician); }
|
|
set { SetFlag(Flag_Technician, value); }
|
|
}
|
|
public bool TaxCodeOverridden
|
|
{
|
|
get { return GetFlag(Flag_TaxCodeOverridden); }
|
|
set { SetFlag(Flag_TaxCodeOverridden, value); }
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// P a r a m s
|
|
//-------------------------------------------------------------------
|
|
/// <summary>Status category - to restrict associations by status.</summary>
|
|
public enum StatusCat
|
|
{
|
|
Any = 0,
|
|
CurrentOnly,
|
|
OnHoldOnly,
|
|
/// <summary>Current or On-hold</summary>
|
|
Active,
|
|
DisabledOnly,
|
|
NotDeleted,
|
|
DeletedOnly,
|
|
}
|
|
/// <summary>Parameters - used to define the filters that should be applied to a List of Association</summary>
|
|
public new class Params : SacsHierarchyItem.Params
|
|
{
|
|
// List filtering.
|
|
public HashSet<SysId> IdsIncluded { get; } = new HashSet<SysId>();
|
|
public HashSet<SysId> IdsExcluded { get; } = new HashSet<SysId>();
|
|
// Association.
|
|
public Sbm.AssociationType AssociationType { get; set; } = Sbm.AssociationType.NotInternal;
|
|
public SysId AffiliateIdOwner { get; set; }
|
|
public SysId AffiliateIdTarget { get; set; }
|
|
public SysId AffiliateIdContactGroup { get; set; }
|
|
/// <summary>Generic search value - code, name, phone, website, email, address etc.</summary>
|
|
public String Search { get; set; }
|
|
public String Code { get; set; }
|
|
public String CodePartial { get; set; }
|
|
public String NameTargetFull { get; set; }
|
|
public String NameTargetPartial { get; set; }
|
|
public String GroupFull { get; set; }
|
|
public String GroupPartial { get; set; }
|
|
public String AddressPartial { get; set; }
|
|
public String PostcodePartial { get; set; }
|
|
public SysId PriceSetId { get; set; }
|
|
// Association codes.
|
|
public String DefaultNominalCodeFull { get; set; }
|
|
public String DefaultNominalCodePartial { get; set; }
|
|
public HashSet<String> AccountManagerCodes { get; } = new HashSet<String>();
|
|
public HashSet<String> AccountHandlerCodes { get; } = new HashSet<String>();
|
|
public HashSet<String> AccountTypeCodes { get; } = new HashSet<String>();
|
|
public HashSet<String> AccountRatingCodes { get; } = new HashSet<String>();
|
|
public HashSet<String> ContactAreaCodes { get; } = new HashSet<String>();
|
|
public HashSet<String> ContactHandlerCodes { get; } = new HashSet<String>();
|
|
public HashSet<String> ContactMethodCodes { get; } = new HashSet<String>();
|
|
public HashSet<String> ContactCallCycleCodes { get; } = new HashSet<String>();
|
|
public HashSet<String> OrderLeadTimeCodes { get; } = new HashSet<String>();
|
|
public HashSet<String> DeliveryTypeCodes { get; } = new HashSet<String>();
|
|
public HashSet<String> DeliveryMethodCodes { get; } = new HashSet<String>();
|
|
public HashSet<String> DeliveryCourierCodes { get; } = new HashSet<String>();
|
|
public HashSet<String> DeliveryBookInCodes { get; } = new HashSet<String>();
|
|
// Association must have a transaction of the specified type (optional) active at some time between the specified dates (one date can be specified for open ended period).
|
|
/// <summary>Transaction status - Value other than 'Any' triggers transaction filter.</summary>
|
|
public SbmTransaction.StatusCat TransactionStatusCat { get; set; } = SbmTransaction.StatusCat.Any;
|
|
/// <summary>Has transactions of type.</summary>
|
|
public Sbm.TransactionType TransactionType { get; set; } = Sbm.TransactionType.Unknown;
|
|
/// <summary>Has transactions active from.</summary>
|
|
public DateTime TransactionActiveFrom { get; set; } = DateTime.MinValue;
|
|
/// <summary>Has transactions active up to (inclusive).</summary>
|
|
public DateTime TransactionActiveTo { get; set; } = DateTime.MinValue;
|
|
/// <summary>Excluded associations that are already a System Account for the specified Interface.</summary>
|
|
public SysId InterfaceIdExcludeSystemAccounts { get; set; }
|
|
/// <summary>Associated codes (via ItemLink) - Seasonal Category.</summary>
|
|
public String SeasonalCategoryCode { get; set; }
|
|
/// <summary>Target addresses</summary>
|
|
public enum AddressContextType
|
|
{
|
|
All,
|
|
Primary,
|
|
Delivery
|
|
};
|
|
/// <summary>Target address context - for Target Address join.<para>NB Not included in query filter.</para></summary>
|
|
public AddressContextType AddressContext { get; set; } = Params.AddressContextType.Primary;
|
|
/// <summary>Whether association is flagged as 'supervised'.</summary>
|
|
public enum AssociationSupervised { Any, Yes, No };
|
|
/// <summary>Restrict to supervised associations.</summary>
|
|
public AssociationSupervised Supervised { get; set; } = AssociationSupervised.Any;
|
|
/// <summary>Primary associations only.</summary>
|
|
public bool PrimaryOnly { get; set; }
|
|
/// <summary>Not terminated on this date.</summary>
|
|
public DateTime ApplicableFrom { get; set; }
|
|
/// <summary>Status category.</summary>
|
|
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
|
|
|
|
// Aliases for tables included in the query.
|
|
public String Alias_Affiliate_Owner { get; set; }
|
|
public String Alias_Affiliate_Target { get; set; }
|
|
public String Alias_Address_Target { get; set; }
|
|
public String Alias_Association_Member { get; set; }
|
|
public String Alias_Address_Member { get; set; }
|
|
public String Alias_PriceSet { get; set; }
|
|
}
|
|
}
|
|
//=======================================================================
|
|
// A s s o c i a t i o n D a t a L i s t
|
|
//=======================================================================
|
|
public static class SbmAssociationList
|
|
{
|
|
/// <summary>Check whether association exists/locate in list with specified Id.</summary>
|
|
public static bool FindById(this List<SbmAssociation> values, SysId associationId)
|
|
{
|
|
if (!SysId.IsValid(associationId)) return false;
|
|
return values.Exists(item => item.Id.Equals(associationId));
|
|
}
|
|
public static bool FindByType(this List<SbmAssociation> values, String associationType)
|
|
{
|
|
if (StringUtil.IsEmpty(associationType)) return false;
|
|
return values.Exists(item => item.AssociationType.ToString().EqualsCI(associationType));
|
|
}
|
|
public static bool FindByCode(this List<SbmAssociation> values, String associationCode)
|
|
{
|
|
if (StringUtil.IsEmpty(associationCode)) return false;
|
|
return values.Exists(item => item.Code.EqualsCI(associationCode));
|
|
}
|
|
public static bool FindByTypeRef(this List<SbmAssociation> values, String refExt)
|
|
{
|
|
if (String.IsNullOrEmpty(refExt)) return false;
|
|
return values.Exists(item => item.RefExt.Equals(refExt));
|
|
}
|
|
}
|
|
//=======================================================================
|
|
}
|