828 lines
26 KiB
C#
828 lines
26 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;
|
|
using static Sarand.Net.Standard.Base.Core.StringPair;
|
|
|
|
namespace Sarand.BusinessMgr.Net.Standard.Base.Bus
|
|
{
|
|
//=======================================================================
|
|
public abstract class SbmAddress : SbmHierarchyItem
|
|
{
|
|
//-------------------------------------------------------------------
|
|
// Columns.
|
|
public enum Column
|
|
{
|
|
Hidden,
|
|
Pos,
|
|
Id,
|
|
// Address.
|
|
Type_Desc,
|
|
RefExt,
|
|
Name,
|
|
DescBrief,
|
|
Summary,
|
|
Line1,
|
|
Line2,
|
|
Line3,
|
|
City,
|
|
Province,
|
|
Postcode,
|
|
Country,
|
|
Contact,
|
|
Phone,
|
|
Fax,
|
|
Email,
|
|
LastVisitOn,
|
|
NextVisitOn,
|
|
IsPrimary,
|
|
// Common properties.
|
|
Notes,
|
|
Flag,
|
|
Status,
|
|
Status_Ind,
|
|
Status_Desc,
|
|
CreateOn_Date,
|
|
UpdateOn_Date,
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
/// <summary>Properties other than common.</summary>
|
|
public class DataProperties
|
|
{
|
|
public Sbm.ItemType ItemType { get; set; } = Sbm.ItemType.Unknown;
|
|
public SysId ItemId { get; set; } = new SysId();
|
|
public Sbm.AddressType AddressType { get; set; } = Sbm.AddressType.Any;
|
|
public SysId AddressIdRef { get; set; } = new SysId();
|
|
public String RefExt { get; set; } = "";
|
|
public String Name { get; set; } = "";
|
|
public String DescBrief { get; set; } = "";
|
|
public String Line1 { get; set; } = "";
|
|
public String Line2 { get; set; } = "";
|
|
public String Line3 { get; set; } = "";
|
|
public String City { get; set; } = "";
|
|
public String Province { get; set; } = "";
|
|
public String Postcode { get; set; } = "";
|
|
public String Country { get; set; } = "";
|
|
public SysId RegionIdCity { get; set; } = new SysId();
|
|
public SysId RegionIdProvince { get; set; } = new SysId();
|
|
public SysId RegionIdCountry { get; set; } = new SysId();
|
|
public String Contact { get; set; } = "";
|
|
public String Phone { get; set; } = "";
|
|
public String Fax { get; set; } = "";
|
|
public String Email { get; set; } = "";
|
|
public String AccountManagerCode { get; set; } = "";
|
|
public String AccountHandlerCode { get; set; } = "";
|
|
public String ContactAreaCode { get; set; } = "";
|
|
public String ContactHandlerCode { get; set; } = "";
|
|
public String DeliveryTypeCode { get; set; } = "";
|
|
public String DeliveryMethodCode { get; set; } = "";
|
|
public String DeliveryBookInCode { get; set; } = "";
|
|
public DateTime LastVisitOn { get; set; } = DateTime.MinValue;
|
|
public DateTime NextVisitOn { get; set; } = DateTime.MinValue;
|
|
|
|
// Flags.
|
|
public bool IsPrimary { get; set; }
|
|
public bool IncludeName { get; set; }
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Data.
|
|
public new class Data : SacsHierarchyItem.Data
|
|
{
|
|
// Data members.
|
|
private readonly DataProperties data = new DataProperties();
|
|
// Construction.
|
|
public Data()
|
|
{
|
|
Status = DefaultStatus;
|
|
}
|
|
public Sbm.ItemType ItemType
|
|
{
|
|
get { return data.ItemType; }
|
|
set { CheckChanged((int)data.ItemType, (int)value); data.ItemType = value; }
|
|
}
|
|
public SysId ItemId
|
|
{
|
|
get { return data.ItemId; }
|
|
set { CheckChanged(data.ItemId, value); data.ItemId = value; }
|
|
}
|
|
public SysId AddressIdRef
|
|
{
|
|
get { return data.AddressIdRef; }
|
|
set { CheckChanged(data.AddressIdRef, value); data.AddressIdRef = value; }
|
|
}
|
|
public String RefExt
|
|
{
|
|
get { return data.RefExt; }
|
|
set { CheckChanged(data.RefExt, value); data.RefExt = value; }
|
|
}
|
|
public Sbm.AddressType AddressType
|
|
{
|
|
get { return data.AddressType; }
|
|
set { CheckChanged((int)data.AddressType, (int)value); data.AddressType = value; }
|
|
}
|
|
public String Name
|
|
{
|
|
get { return data.Name; }
|
|
set { CheckChanged(data.Name, value); data.Name = value; }
|
|
}
|
|
public String DescBrief
|
|
{
|
|
get { return data.DescBrief; }
|
|
set { CheckChanged(data.DescBrief, value); data.DescBrief = value; }
|
|
}
|
|
public String Line1
|
|
{
|
|
get { return data.Line1; }
|
|
set { CheckChanged(data.Line1, value); data.Line1 = value; }
|
|
}
|
|
public String Line2
|
|
{
|
|
get { return data.Line2; }
|
|
set { CheckChanged(data.Line2, value); data.Line2 = value; }
|
|
}
|
|
public String Line3
|
|
{
|
|
get { return data.Line3; }
|
|
set { CheckChanged(data.Line3, value); data.Line3 = value; }
|
|
}
|
|
public String City
|
|
{
|
|
get { return data.City; }
|
|
set { CheckChanged(data.City, value); data.City = value; }
|
|
}
|
|
public String Province
|
|
{
|
|
get { return data.Province; }
|
|
set { CheckChanged(data.Province, value); data.Province = value; }
|
|
}
|
|
public String Postcode
|
|
{
|
|
get { return data.Postcode; }
|
|
set { CheckChanged(data.Postcode, value); data.Postcode = value; }
|
|
}
|
|
public String Country
|
|
{
|
|
get { return data.Country; }
|
|
set { CheckChanged(data.Country, value); data.Country = value; }
|
|
}
|
|
public SysId RegionIdCity
|
|
{
|
|
get { return data.RegionIdCity; }
|
|
set { CheckChanged(data.RegionIdCity, value); data.RegionIdCity = value; }
|
|
}
|
|
public SysId RegionIdProvince
|
|
{
|
|
get { return data.RegionIdProvince; }
|
|
set { CheckChanged(data.RegionIdProvince, value); data.RegionIdProvince = value; }
|
|
}
|
|
public SysId RegionIdCountry
|
|
{
|
|
get { return data.RegionIdCountry; }
|
|
set { CheckChanged(data.RegionIdCountry, value); data.RegionIdCountry = value; }
|
|
}
|
|
public String Contact
|
|
{
|
|
get { return data.Contact; }
|
|
set { CheckChanged(data.Contact, value); data.Contact = value; }
|
|
}
|
|
public String Phone
|
|
{
|
|
get { return data.Phone; }
|
|
set { CheckChanged(data.Phone, value); data.Phone = value; }
|
|
}
|
|
public String Fax
|
|
{
|
|
get { return data.Fax; }
|
|
set { CheckChanged(data.Fax, value); data.Fax = value; }
|
|
}
|
|
public String Email
|
|
{
|
|
get { return data.Email; }
|
|
set { CheckChanged(data.Email, value); data.Email = value; }
|
|
}
|
|
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 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 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 DeliveryBookInCode
|
|
{
|
|
get { return data.DeliveryBookInCode; }
|
|
set { CheckChanged(data.DeliveryBookInCode, value); data.DeliveryBookInCode = value; }
|
|
}
|
|
public DateTime LastVisitOn
|
|
{
|
|
get { return data.LastVisitOn; }
|
|
set { CheckChanged(data.LastVisitOn, value); data.LastVisitOn = value; }
|
|
}
|
|
public DateTime NextVisitOn
|
|
{
|
|
get { return data.NextVisitOn; }
|
|
set { CheckChanged(data.NextVisitOn, value); data.NextVisitOn = value; }
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
// Flags.
|
|
public bool IsPrimary
|
|
{
|
|
get { return GetFlag(Flag_Primary); }
|
|
set { SetFlag(Flag_Primary, value); }
|
|
}
|
|
public bool IncludeName
|
|
{
|
|
get { return GetFlag(Flag_IncludeName); }
|
|
set { SetFlag(Flag_IncludeName, value); }
|
|
}
|
|
|
|
internal void PopulateFrom(Data data)
|
|
{
|
|
ItemType = data.ItemType;
|
|
ItemId = data.ItemId;
|
|
AddressType = data.AddressType;
|
|
AddressIdRef = data.AddressIdRef;
|
|
RefExt = data.RefExt;
|
|
Name = data.Name;
|
|
DescBrief = data.DescBrief;
|
|
Line1 = data.Line1;
|
|
Line2 = data.Line2;
|
|
Line3 = data.Line3;
|
|
City = data.City;
|
|
Province = data.Province;
|
|
Postcode = data.Postcode;
|
|
Country = data.Country;
|
|
RegionIdCity = data.RegionIdCity;
|
|
RegionIdProvince = data.RegionIdProvince;
|
|
RegionIdCountry = data.RegionIdCountry;
|
|
Contact = data.Contact;
|
|
Phone = data.Phone;
|
|
Fax = data.Fax;
|
|
Email = data.Email;
|
|
AccountManagerCode = data.AccountManagerCode;
|
|
AccountHandlerCode = data.AccountHandlerCode;
|
|
ContactAreaCode = data.ContactAreaCode;
|
|
ContactHandlerCode = data.ContactHandlerCode;
|
|
DeliveryMethodCode = data.DeliveryMethodCode;
|
|
DeliveryTypeCode = data.DeliveryTypeCode;
|
|
DeliveryBookInCode = data.DeliveryBookInCode;
|
|
LastVisitOn = data.LastVisitOn;
|
|
NextVisitOn = data.NextVisitOn;
|
|
IsPrimary = data.IsPrimary;
|
|
IncludeName = data.IncludeName;
|
|
base.PopulateFrom(data);
|
|
}
|
|
public Data Clone()
|
|
{
|
|
Data data = new Data();
|
|
data.PopulateFrom(this);
|
|
return data;
|
|
}
|
|
}
|
|
//-------------------------------------------------------------------
|
|
// ErrField.
|
|
public new class ErrField : SacsHierarchyItem.ErrField
|
|
{
|
|
// Identifies the field that has invalid data.
|
|
public ValidValue ItemType { get; set; } = ValidValue.Valid;
|
|
public ValidValue ItemId { get; set; } = ValidValue.Valid;
|
|
public ValidValue AddressIdRef { get; set; } = ValidValue.Valid;
|
|
public ValidValue RefExt { get; set; } = ValidValue.Valid;
|
|
public ValidValue AddressType { get; set; } = ValidValue.Valid;
|
|
public ValidValue Name { get; set; } = ValidValue.Valid;
|
|
public ValidValue DescBrief { get; set; } = ValidValue.Valid;
|
|
public ValidValue Line1 { get; set; } = ValidValue.Valid;
|
|
public ValidValue Line2 { get; set; } = ValidValue.Valid;
|
|
public ValidValue Line3 { get; set; } = ValidValue.Valid;
|
|
public ValidValue City { get; set; } = ValidValue.Valid;
|
|
public ValidValue Province { get; set; } = ValidValue.Valid;
|
|
public ValidValue Postcode { get; set; } = ValidValue.Valid;
|
|
public ValidValue Country { get; set; } = ValidValue.Valid;
|
|
public ValidValue RegionIdCity { get; set; } = ValidValue.Valid;
|
|
public ValidValue RegionIdProvince { get; set; } = ValidValue.Valid;
|
|
public ValidValue RegionIdCountry { get; set; } = ValidValue.Valid;
|
|
public ValidValue Contact { get; set; } = ValidValue.Valid;
|
|
public ValidValue Phone { get; set; } = ValidValue.Valid;
|
|
public ValidValue Fax { get; set; } = ValidValue.Valid;
|
|
public ValidValue Email { get; set; } = ValidValue.Valid;
|
|
public ValidValue AccountManagerCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue AccountHandlerCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue ContactAreaCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue ContactHandlerCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue DeliveryTypeCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue DeliveryMethodCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue DeliveryBookInCode { get; set; } = ValidValue.Valid;
|
|
public ValidValue LastVisitOn { get; set; } = ValidValue.Valid;
|
|
public ValidValue NextVisitOn { get; set; } = ValidValue.Valid;
|
|
public ValidValue IsPrimary { get; set; } = ValidValue.Valid;
|
|
public ValidValue InlcudeName { get; set; } = ValidValue.Valid;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Data members.
|
|
private readonly Data data = new Data();
|
|
public static readonly Byte Flag_Primary = 0x01;
|
|
public static readonly Byte Flag_IncludeName = 0x02;
|
|
|
|
//-------------------------------------------------------------------
|
|
// Construction.
|
|
protected SbmAddress(ISbmUserContext_Core userContext, SysId id, Sbm.ItemType itemType, SysId itemId, Sbm.AddressType addressType) :
|
|
base(userContext, id)
|
|
{
|
|
base.SetData(data);
|
|
ItemType = itemType;
|
|
ItemId = itemId;
|
|
AddressType = addressType;
|
|
Status = DefaultStatus;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Address status.
|
|
private static readonly List<SaStatus> addressStatuses = new List<SaStatus>()
|
|
{
|
|
SaStatus.Current,
|
|
};
|
|
public static SaStatus DefaultStatus { get { return SaStatus.Current; } }
|
|
public static List<SaStatus> AddressStatuses { get { return new List<SaStatus>(addressStatuses); } }
|
|
public static DataValue.TriStateType GetStatusTriState(SaStatus status)
|
|
{
|
|
addressStatuses.Add(SaStatus.Current);
|
|
|
|
switch (status)
|
|
{
|
|
case SaStatus.Current:
|
|
return DataValue.TriStateType.Green;
|
|
}
|
|
return DataValue.TriStateType.Unknown;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Formatting.
|
|
public enum AddressFmt
|
|
{
|
|
ScreenList,
|
|
Clipboard,
|
|
}
|
|
public List<String> Format(AddressFmt addressFmt)
|
|
{
|
|
return Format(GetData(), addressFmt);
|
|
}
|
|
public static List<String> Format(SbmAddress address, AddressFmt addressFmt)
|
|
{
|
|
return Format(address.GetData(), addressFmt);
|
|
}
|
|
public static List<String> Format(SbmAddress.Data address, AddressFmt addressFmt)
|
|
{
|
|
List<String> addressLines = new List<String>();
|
|
switch (addressFmt)
|
|
{
|
|
case AddressFmt.ScreenList:
|
|
case AddressFmt.Clipboard:
|
|
{
|
|
if (addressFmt == AddressFmt.ScreenList || address.IncludeName && StringUtil.IsEmpty(address.Name)) addressLines.Add(address.Name);
|
|
addressLines.Add(address.Line1);
|
|
addressLines.Add(address.Line2);
|
|
addressLines.Add(address.Line3);
|
|
addressLines.Add(address.City);
|
|
String provincePostcode = address.Province + " " + address.Postcode;
|
|
provincePostcode.Trim();
|
|
addressLines.Add(provincePostcode);
|
|
addressLines.Add(address.Country);
|
|
// Trim leading and trailing spaces from each line and trailing commas.
|
|
for (int addressLineIdx = 0; addressLineIdx < addressLines.Count; addressLineIdx++)
|
|
{
|
|
String addressLine = addressLines[addressLineIdx];
|
|
addressLine.Trim(new char[] { ',', ' ' });
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
addressLines.RemoveBlanks();
|
|
return addressLines;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Utilities.
|
|
|
|
// Address display.
|
|
public String GetDisplay()
|
|
{
|
|
return GetDisplay(Line1, Line2, Line3, City, Province, Postcode, Country);
|
|
}
|
|
public static String GetDisplay(String line1, String line2, String line3, String city, String province, String postcode, String country)
|
|
{
|
|
List<String> lines = new List<String>() { line1, line2, line3, city, province };
|
|
return StringUtil.TrimWhitespace(lines.Concat(", ", null, null, true, true).ToString() + " " + postcode + " " + country);
|
|
}
|
|
|
|
// Address summary.
|
|
public String GetSummary()
|
|
{
|
|
return GetSummary(Line1, City, Province, Postcode, Country);
|
|
}
|
|
public static String GetSummary(String line1, String city, String province, String postcode, String country)
|
|
{
|
|
List<String> lines = new List<String>() { line1, city, province };
|
|
return StringUtil.TrimWhitespace(lines.Concat(", ", null, null, true, true).ToString() + " " + postcode + " " + country);
|
|
}
|
|
|
|
// Visit on.
|
|
public bool IsVisitOn(DateTime visitDate)
|
|
{
|
|
if (DateUtil.IsValid(LastVisitOn) && LastVisitOn.CompareTo(visitDate) > 0) return false;
|
|
if (DateUtil.IsValid(NextVisitOn) && NextVisitOn.CompareTo(visitDate) < 0) return false;
|
|
return true;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Properties.
|
|
public Data GetData() { return data.Clone(); }
|
|
public void SetData(Data data)
|
|
{
|
|
// Properties that cannot be changed if previously specified.
|
|
// Id.
|
|
if (SysId.IsValid(Id) && SysId.ToInt(Id) != SysId.ToInt(data.Id))
|
|
throw new NotSupportedException($"{SysUtil.Fn} Id cannot be changed");
|
|
// Item type.
|
|
if ((int)ItemType > 1 && ItemType != data.ItemType)
|
|
throw new NotSupportedException($"{SysUtil.Fn} Item Type cannot be changed");
|
|
// Item Id.
|
|
if (SysId.IsValid(ItemId) && SysId.ToInt(ItemId) != SysId.ToInt(data.ItemId))
|
|
throw new NotSupportedException($"{SysUtil.Fn} Item Id cannot be changed");
|
|
// Populate individual properties to ensure that 'Changed' indicator is kept up to date.
|
|
this.data.PopulateFrom(data);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Attributes.
|
|
public Sbm.ItemType ItemType
|
|
{
|
|
get { return data.ItemType; }
|
|
protected set { data.ItemType = value; }
|
|
}
|
|
public SysId ItemId
|
|
{
|
|
get { return data.ItemId; }
|
|
protected set { data.ItemId = value; }
|
|
}
|
|
public SysId AddressIdRef
|
|
{
|
|
get { return data.AddressIdRef; }
|
|
set { data.AddressIdRef = value; }
|
|
}
|
|
public String RefExt
|
|
{
|
|
get { return data.RefExt; }
|
|
set { data.RefExt = value; }
|
|
}
|
|
public Sbm.AddressType AddressType
|
|
{
|
|
get { return data.AddressType; }
|
|
set { data.AddressType = value; }
|
|
}
|
|
public String Name
|
|
{
|
|
get { return data.Name; }
|
|
set { data.Name = value; }
|
|
}
|
|
public String DescBrief
|
|
{
|
|
get { return data.DescBrief; }
|
|
set { data.DescBrief = value; }
|
|
}
|
|
public String Line1
|
|
{
|
|
get { return data.Line1; }
|
|
set { data.Line1 = value; }
|
|
}
|
|
public String Line2
|
|
{
|
|
get { return data.Line2; }
|
|
set { data.Line2 = value; }
|
|
}
|
|
public String Line3
|
|
{
|
|
get { return data.Line3; }
|
|
set { data.Line3 = value; }
|
|
}
|
|
public String City
|
|
{
|
|
get { return data.City; }
|
|
set { data.City = value; }
|
|
}
|
|
public String Province
|
|
{
|
|
get { return data.Province; }
|
|
set { data.Province = value; }
|
|
}
|
|
public String Postcode
|
|
{
|
|
get { return data.Postcode; }
|
|
set { data.Postcode = value; }
|
|
}
|
|
public String Country
|
|
{
|
|
get { return data.Country; }
|
|
set { data.Country = value; }
|
|
}
|
|
public SysId RegionIdCity
|
|
{
|
|
get { return data.RegionIdCity; }
|
|
set { data.RegionIdCity = value; }
|
|
}
|
|
public SysId RegionIdProvince
|
|
{
|
|
get { return data.RegionIdProvince; }
|
|
set { data.RegionIdProvince = value; }
|
|
}
|
|
public SysId RegionIdCountry
|
|
{
|
|
get { return data.RegionIdCountry; }
|
|
set { data.RegionIdCountry = value; }
|
|
}
|
|
public String Contact
|
|
{
|
|
get { return data.Contact; }
|
|
set { data.Contact = value; }
|
|
}
|
|
public String Phone
|
|
{
|
|
get { return data.Phone; }
|
|
set { data.Phone = value; }
|
|
}
|
|
public String Fax
|
|
{
|
|
get { return data.Fax; }
|
|
set { data.Fax = value; }
|
|
}
|
|
public String Email
|
|
{
|
|
get { return data.Email; }
|
|
set { data.Email = 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 ContactAreaCode
|
|
{
|
|
get { return data.ContactAreaCode; }
|
|
set { data.ContactAreaCode = value; }
|
|
}
|
|
public String ContactHandlerCode
|
|
{
|
|
get { return data.ContactHandlerCode; }
|
|
set { data.ContactHandlerCode = 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 DeliveryBookInCode
|
|
{
|
|
get { return data.DeliveryBookInCode; }
|
|
set { data.DeliveryBookInCode = value; }
|
|
}
|
|
public DateTime LastVisitOn
|
|
{
|
|
get { return data.LastVisitOn; }
|
|
set { data.LastVisitOn = value; }
|
|
}
|
|
public DateTime NextVisitOn
|
|
{
|
|
get { return data.NextVisitOn; }
|
|
set { data.NextVisitOn = value; }
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Flags.
|
|
public bool IsPrimary
|
|
{
|
|
get { return GetFlag(Flag_Primary); }
|
|
set { SetFlag(Flag_Primary, value); }
|
|
}
|
|
public bool IncludeName
|
|
{
|
|
get { return GetFlag(Flag_IncludeName); }
|
|
set { SetFlag(Flag_IncludeName, 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 HasInterfaceDataItems();
|
|
public abstract bool ClearDependentData();
|
|
|
|
//-------------------------------------------------------------------
|
|
// C o p y F r o m
|
|
//-------------------------------------------------------------------
|
|
public void CopyFrom(SbmAddress address)
|
|
{
|
|
AddressIdRef = address.AddressIdRef;
|
|
AddressType = address.AddressType;
|
|
RefExt = address.RefExt;
|
|
Name = address.Name;
|
|
DescBrief = address.DescBrief;
|
|
Line1 = address.Line1;
|
|
Line2 = address.Line2;
|
|
Line3 = address.Line3;
|
|
City = address.City;
|
|
Province = address.Province;
|
|
Postcode = address.Postcode;
|
|
Country = address.Country;
|
|
RegionIdCity = address.RegionIdCity;
|
|
RegionIdProvince = address.RegionIdProvince;
|
|
RegionIdCountry = address.RegionIdCountry;
|
|
Contact = address.Contact;
|
|
Phone = address.Phone;
|
|
Fax = address.Fax;
|
|
Email = address.Email;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// P a r a m s
|
|
//-------------------------------------------------------------------
|
|
/// <summary>Parameters - used to define the filters that should be applied to a List of Addresses</summary>
|
|
// List parameters.
|
|
public enum StatusCat
|
|
{
|
|
Any,
|
|
NotDeleted,
|
|
Deleted,
|
|
}
|
|
/// <summary>
|
|
/// Item list parameters.
|
|
/// </summary>
|
|
public new class Params : SacsHierarchyItem.Params
|
|
{
|
|
// List filtering.
|
|
public List<SysId> IdsIncluded { get; } = new List<SysId>();
|
|
public List<SysId> IdsExcluded { get; } = new List<SysId>();
|
|
// Address.
|
|
public Sbm.AddressType AddressType { get; set; }
|
|
public ItemId ItemId { get; set; }
|
|
public SysId AffiliateIdOwner { get; set; }
|
|
public SysId AddressIdRef { get; set; }
|
|
public String RefExt { get; set; }
|
|
public String Name { get; set; }
|
|
public String NamePartial { get; set; }
|
|
public String Address { get; set; }
|
|
public String AddressPartial { get; set; }
|
|
public String Postcode { get; set; }
|
|
public String PostcodePartial { get; set; }
|
|
public String Phone { get; set; }
|
|
public String PhonePartial { get; set; }
|
|
public String AccountManagerCode { get; set; }
|
|
public String AccountHandlerCode { get; set; }
|
|
public String ContactAreaCode { get; set; }
|
|
public String ContactHandlerCode { get; set; }
|
|
public String DeliveryTypeCode { get; set; }
|
|
public String DeliveryBookInCode { get; set; }
|
|
public bool PrimaryOnly { get; set; }
|
|
|
|
public StatusCat StatusCat { get; set; } = StatusCat.NotDeleted;
|
|
}
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
// A d d r e s s D a t a L i s t
|
|
//=======================================================================
|
|
public static class SbmAddressList
|
|
{
|
|
/// <summary>Check whether currency exists/locate in list with specified Id.</summary>
|
|
public static bool FindPrimary(this List<SbmAddress> values, bool IsPrimary)
|
|
{
|
|
if (!IsPrimary) return false;
|
|
return values.Exists(item => item.IsPrimary.Equals(IsPrimary));
|
|
}
|
|
public static bool FindById(this List<SbmAddress> values, SysId addressId)
|
|
{
|
|
if (!SysId.IsValid(addressId)) return false;
|
|
return values.Exists(item => item.Id.Equals(addressId));
|
|
}
|
|
public static bool FindByType(this List<SbmAddress> values, String addressType)
|
|
{
|
|
if (StringUtil.IsEmpty(addressType)) return false;
|
|
return values.Exists(item => item.AddressType.ToString().EqualsCI(addressType));
|
|
}
|
|
public static bool FindByTypeRef(this List<SbmAddress> values, String refExt)
|
|
{
|
|
if (String.IsNullOrEmpty(refExt)) return false;
|
|
return values.Exists(item => item.RefExt.Equals(refExt));
|
|
}
|
|
public static bool FindByPostcode(this List<SbmAddress> values, String postcode)
|
|
{
|
|
if (String.IsNullOrEmpty(postcode)) return false;
|
|
return values.Exists(item => item.Postcode.Equals(postcode));
|
|
}
|
|
public static bool FindByTypeVisitOn(this List<SbmAddress> values, String type, DateTime visitOn)
|
|
{
|
|
if (StringUtil.IsEmpty(type)) return false;
|
|
if (!DateUtil.IsValid(visitOn)) return false;
|
|
return values.Exists(item => item.AddressType.Equals(type) && item.IsVisitOn(visitOn));
|
|
}
|
|
public static bool HasType(this List<SbmAddress> values, Sbm.AddressType addressType, SbmAddress addressIgnore)
|
|
{
|
|
foreach (SbmAddress address in values)
|
|
{
|
|
if (address == addressIgnore) continue;
|
|
if (address.AddressType == addressType) return true;
|
|
}
|
|
return false;
|
|
}
|
|
public static bool HasType(this List<SbmAddress> values, Sbm.AddressType addressType, SysId addressIdIgnore)
|
|
{
|
|
foreach (SbmAddress address in values)
|
|
{
|
|
if (!SysId.IsValid(addressIdIgnore) || address.Id != addressIdIgnore) continue;
|
|
if (address.AddressType == addressType) return true;
|
|
}
|
|
return false;
|
|
}
|
|
public static int OccurrencesOf(this List<SbmAddress> values, Sbm.AddressType addressType)
|
|
{
|
|
// How many addresses of the specified type are in the list?
|
|
int iOccur = 0;
|
|
foreach (SbmAddress address in values)
|
|
{
|
|
if (address.AddressType == addressType) iOccur++;
|
|
}
|
|
return iOccur;
|
|
}
|
|
public static int OccurrencesOfType(this List<SbmAddress> values)
|
|
{
|
|
// Which occurrence of addresses of the same type is the specified position in the list?
|
|
int iOccur = 1;
|
|
// Move to this item in the list
|
|
for (int i = 1; i < values.Count; i++)
|
|
foreach (SbmAddress address in values)
|
|
{
|
|
Sbm.AddressType addressType = Sbm.AddressType.Any;
|
|
if (address.AddressType == addressType) iOccur++;
|
|
}
|
|
return iOccur;
|
|
|
|
/*
|
|
// Which occurrence of addresses of the same type is the specified position in the list?
|
|
int iOccur = 1;
|
|
// Move to this item in the list:
|
|
if (iPos > -1) Goto(iPos);
|
|
iPos = Pos();
|
|
if (InLst() && Index())
|
|
{
|
|
// Make a note of the type of the specified address:
|
|
eSapAddressType eType = Index()->GetType();
|
|
GotoStart();
|
|
while (Next() && Pos() != iPos)
|
|
if (Index() && Index()->GetType() == eType) iOccur++;
|
|
Goto(iPos);
|
|
}
|
|
return iOccur;*/
|
|
}
|
|
}
|
|
//=======================================================================
|
|
}
|