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,
}
//-------------------------------------------------------------------
/// Properties other than common.
public class DataProperties
{
public SysId AffiliateIdOwner { get; set; } = new SysId();
public SysId AffiliateIdTarget { get; set; } = new SysId();
public Sbm.AssociationType AssociationType { get; set; } = Sbm.AssociationType.Unknown;
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(ISbmUserContext userContext, SysId id, SysId affiliateIdOwner, Sbm.AssociationType associationType, SysId affiliateIdTarget) : base(userContext, id)
{
base.SetData(data);
AffiliateIdOwner = affiliateIdOwner;
AssociationType = associationType;
AffiliateIdTarget = affiliateIdTarget;
Status = DefaultStatus;
}
//-------------------------------------------------------------------
// Association status.
private static readonly List associationStatuses = new List()
{
SaStatus.Current,
SaStatus.OnHold,
SaStatus.Disabled,
};
public static SaStatus DefaultStatus { get { return SaStatus.Current; } }
public static List ValidStatuses { get { return new List(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 - 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)
{
String fn = GetType().Name + ".SetData";
// Properties that cannot be changed if previously specified.
if (SysId.IsValid(Id) && SysId.ToInt(Id) != SysId.ToInt(data.Id))
throw new NotSupportedException(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); }
}
//-------------------------------------------------------------------
// A s s o c i a t e d D a t a E l e m e n t s
//-------------------------------------------------------------------
public abstract bool HasTransactions();
public abstract bool HasRequirements();
public abstract bool HasConstituents();
// Is associated with transaction for delivery.
public abstract bool IsDeliveryContractor();
// Dependent data should only be cleared when removing an association.
public abstract bool ClearDependentData();
//-------------------------------------------------------------------
// P a r a m s
//-------------------------------------------------------------------
/// Status category - to restrict associations by status.
public enum StatusCat
{
Any = 0,
NotDeleted,
Current,
OnHold,
/// Current or On-hold
Active,
Disabled,
}
/// Parameters - used to define the filters that should be applied to a List of Association
public new class Params : SacsHierarchyItem.Params
{
// List filtering.
public List IncludedIds { get; } = new List();
public List ExcludedIds { get; } = new List();
// Association.
public Sbm.AssociationType AssociationType { get; set; } = Sbm.AssociationType.Any;
public SysId AffiliateIdOwner { get; set; }
public SysId AffiliateIdTarget { get; set; }
public SysId PriceSetId { get; set; }
public SysId AffiliateIdContactGroup { 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; }
// Association codes.
public String DefaultNominalCodeFull { get; set; }
public String DefaultNominalCodePartial { get; set; }
public List AccountManagerCodes { get; } = new List();
public List AccountHandlerCodes { get; } = new List();
public List AccountTypeCodes { get; } = new List();
public List AccountRatingCodes { get; } = new List();
public List ContactAreaCodes { get; } = new List();
public List ContactHandlerCodes { get; } = new List();
public List ContactMethodCodes { get; } = new List();
public List ContactCallCycleCodes { get; } = new List();
public List OrderLeadTimeCodes { get; } = new List();
public List DeliveryTypeCodes { get; } = new List();
public List DeliveryMethodCodes { get; } = new List();
public List DeliveryCourierCodes { get; } = new List();
public List DeliveryBookInCodes { get; } = new List();
/// Association must have a transaction active at some time between the specified dates (one date can be specified for open ended period).
public SbmTransaction.StatusCat TransactionStatusCat { get; set; } = SbmTransaction.StatusCat.Any;
/// Has transactions active from.
public DateTime TransActiveFrom { get; set; } = DateTime.MinValue;
/// Has transactions active up to (inclusive).
public DateTime TransActiveTo { get; set; } = DateTime.MinValue;
/// Excluded associations that are already a System Account for the specified Interface.
public SysId InterfaceIdExcludeSystemAccounts { get; set; }
/// Associated codes (via ItemLink) - Seasonal Category.
public String SeasonalCategoryCode { get; set; }
/// Target addresses
public enum AddressContextType
{
All,
Primary,
Delivery
};
/// Target address context - for Target Address join.NB Not included in query filter.
public AddressContextType AddressContext { get; set; } = Params.AddressContextType.Primary;
/// Whether association is flagged as 'supervised'.
public enum AssociationSupervised { Any, Yes, No };
/// Restrict to supervised associations.
public AssociationSupervised Supervised { get; set; } = AssociationSupervised.Any;
/// Primary associations only.
public bool PrimaryOnly { get; set; }
/// Not terminated on this date.
public DateTime ApplicableFrom { get; set; }
/// Status category.
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
}
}
//=======================================================================
// A s s o c i a t i o n D a t a L i s t
//=======================================================================
public static class SbmAssociationList
{
/// Check whether association exists/locate in list with specified Id.
public static bool FindById(this List values, SysId associationId)
{
if (!SysId.IsValid(associationId)) return false;
return values.Exists(item => item.Id.Equals(associationId));
}
public static bool FindByType(this List values, String associationType)
{
if (StringUtil.IsEmpty(associationType)) return false;
return values.Exists(item => item.AssociationType.ToString().EqualsCI(associationType));
}
public static bool FindByCode(this List values, String associationCode)
{
if (StringUtil.IsEmpty(associationCode)) return false;
return values.Exists(item => item.Code.EqualsCI(associationCode));
}
public static bool FindByTypeRef(this List values, String refExt)
{
if (String.IsNullOrEmpty(refExt)) return false;
return values.Exists(item => item.RefExt.Equals(refExt));
}
}
//=======================================================================
}