397 lines
16 KiB
C#
397 lines
16 KiB
C#
using Sarand.BusinessMgr.Net.Standard.Base.App;
|
|
using Sarand.BusinessMgr.Net.Standard.Base.Bus;
|
|
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.Utils;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Sarand.BusinessMgr.Net.Standard.Base.Mgr
|
|
{
|
|
//=======================================================================
|
|
partial class SbmAccountMgr
|
|
{
|
|
//*******************************************************************
|
|
// A d d r e s s e s
|
|
//*******************************************************************
|
|
// Utilities.
|
|
//public override SbmAddress CloneAddress(SbmAddress addressSource, bool copyId)
|
|
public abstract bool VerifyAsPrimaryAddress(SbmAddress addressPrimary);
|
|
|
|
//-------------------------------------------------------------------
|
|
// Retrieve individual addresses.
|
|
//-------------------------------------------------------------------
|
|
// Address exists.
|
|
public bool AddressExistsById(SysId addressId)
|
|
{
|
|
ClearErrorState();
|
|
if (!SysId.IsValid(addressId)) return false;
|
|
SbmAddress.Params prmAddress = new SbmAddress.Params();
|
|
prmAddress.IncludedIds.Add(addressId);
|
|
prmAddress.StatusCat = SbmAddress.StatusCat.Any;
|
|
return GetAddressCount(prmAddress) == 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Get address.
|
|
public abstract SbmAddress GetAddress(SbmAddress.Params prm);
|
|
public SbmAddress GetAddressById(SysId addressId)
|
|
{
|
|
ClearErrorState();
|
|
if (!SysId.IsValid(addressId)) return null;
|
|
SbmAddress.Params prmAddress = new SbmAddress.Params();
|
|
prmAddress.IncludedIds.Add(addressId);
|
|
prmAddress.StatusCat = SbmAddress.StatusCat.Any;
|
|
return GetAddress(prmAddress);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Create address.
|
|
public abstract SbmAddress CreateAddress(Sbm.ItemType itemType, SysId idItem, Sbm.AddressType addressType);
|
|
|
|
//-------------------------------------------------------------------
|
|
// Validate address data.
|
|
public bool IsValidAddress(SbmAddress address)
|
|
{
|
|
ClearErrorState();
|
|
if (address == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
|
|
return IsValidAddressData(address.GetData(), new SbmAddress.ErrField());
|
|
}
|
|
public virtual bool IsValidAddressData(SbmAddress.Data data, SbmAddress.ErrField errField)
|
|
{
|
|
ClearErrorState();
|
|
// Address properties.
|
|
if (errField.ItemType != SacsHierarchyItem.ValidValue.Ignore)
|
|
{
|
|
if ((int)data.ItemType < 1)
|
|
{
|
|
errField.ItemType = SacsHierarchyItem.ValidValue.Invalid;
|
|
return SetErrorState("Item type must be supplied");
|
|
}
|
|
}
|
|
if (errField.ItemId != SacsHierarchyItem.ValidValue.Ignore)
|
|
{
|
|
if (!SysId.IsValid(data.ItemId))
|
|
{
|
|
errField.ItemId = SacsHierarchyItem.ValidValue.Invalid;
|
|
return SetErrorState("Item Id must be specified");
|
|
}
|
|
}
|
|
if (errField.AddressType != SacsHierarchyItem.ValidValue.Ignore)
|
|
{
|
|
if ((int)data.AddressType < 1)
|
|
{
|
|
errField.AddressType = SacsHierarchyItem.ValidValue.Invalid;
|
|
return SetErrorState("Address type must be supplied");
|
|
}
|
|
}
|
|
if (errField.RefExt != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.RefExt, "reference", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_RefExt)))
|
|
{
|
|
errField.RefExt = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.Name != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Name, "name", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_Name)))
|
|
{
|
|
errField.Name = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.DescBrief != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DescBrief, "description", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_DescBrief)))
|
|
{
|
|
errField.DescBrief = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.Line1 != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Line1, "line 1", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_Line1), true))
|
|
{
|
|
errField.Line1 = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.Line2 != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Line2, "line 2", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_Line2)))
|
|
{
|
|
errField.Line2 = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.Line3 != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Line3, "line 3", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_Line3)))
|
|
{
|
|
errField.Line3 = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.City != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.City, "city", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_City)))
|
|
{
|
|
errField.City = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.Province != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Province, "province", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_Province)))
|
|
{
|
|
errField.Province = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.Postcode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Postcode, "postcode", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_Postcode)))
|
|
{
|
|
errField.Postcode = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.Country != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Country, "country", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_Country)))
|
|
{
|
|
errField.Country = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.Contact != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Contact, "contact", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_Contact)))
|
|
{
|
|
errField.Contact = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.Phone != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Phone, "phone", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_Phone)))
|
|
{
|
|
errField.Phone = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.Fax != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Fax, "fax", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_Fax)))
|
|
{
|
|
errField.Fax = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.Email != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Email, "email", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_Email)))
|
|
{
|
|
errField.Email = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.AccountManagerCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.AccountManagerCode, " account manager phone", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_AccountManagerCode)))
|
|
{
|
|
errField.AccountManagerCode = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.AccountHandlerCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.AccountHandlerCode, "account handler phone", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_AccountHandlerCode)))
|
|
{
|
|
errField.AccountHandlerCode = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.ContactAreaCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ContactAreaCode, "contact area phone", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_ContactAreaCode)))
|
|
{
|
|
errField.ContactAreaCode = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.ContactHandlerCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.ContactHandlerCode, "contact handler phone", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_ContactHandlerCode)))
|
|
{
|
|
errField.ContactHandlerCode = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.DeliveryTypeCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DeliveryTypeCode, "delivery type code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_DeliveryTypeCode)))
|
|
{
|
|
errField.DeliveryTypeCode = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.DeliveryBookInCode != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.DeliveryBookInCode, "delivery book-in code", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_DeliveryBookInCode)))
|
|
{
|
|
errField.DeliveryBookInCode = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.LastVisitOn != SacsHierarchyItem.ValidValue.Ignore && errField.NextVisitOn != SacsHierarchyItem.ValidValue.Ignore && DateUtil.IsValid(data.LastVisitOn) && DateUtil.IsValid(data.NextVisitOn))
|
|
{
|
|
if (data.LastVisitOn.CompareTo(data.NextVisitOn) > 0)
|
|
{
|
|
errField.LastVisitOn = SacsHierarchyItem.ValidValue.Invalid;
|
|
return SetErrorState("Invalid visit date range");
|
|
}
|
|
}
|
|
// Common properties.
|
|
if (!IsValidValue(data.Notes, "notes", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_Notes)))
|
|
{
|
|
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (errField.Status != SacsHierarchyItem.ValidValue.Ignore)
|
|
{
|
|
if (!IsValidValue(data.StatusCode, "status", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Address_Status), true, true))
|
|
{
|
|
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
|
|
return false;
|
|
}
|
|
if (!SbmAddress.AddressStatuses.Contains(data.Status))
|
|
{
|
|
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
|
|
return SetErrorState(ErrorMessage.InvalidStatus);
|
|
}
|
|
}
|
|
// Validate associated data.
|
|
if (errField.AddressIdRef != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.AddressIdRef))
|
|
{
|
|
errField.AddressIdRef = SacsHierarchyItem.ValidValue.Invalid;
|
|
return SetErrorState("Invalid Reference Address Id specified");
|
|
}
|
|
if (errField.RegionIdCity != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.RegionIdCity))
|
|
{
|
|
errField.RegionIdCity = SacsHierarchyItem.ValidValue.Invalid;
|
|
return SetErrorState("Invalid City Region Id specified");
|
|
}
|
|
if (errField.RegionIdProvince != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.RegionIdProvince))
|
|
{
|
|
errField.RegionIdProvince = SacsHierarchyItem.ValidValue.Invalid;
|
|
return SetErrorState("Invalid Province Region Id specified");
|
|
}
|
|
if (errField.RegionIdCountry != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.RegionIdCountry))
|
|
{
|
|
errField.RegionIdCountry = SacsHierarchyItem.ValidValue.Invalid;
|
|
return SetErrorState("Invalid Country Region Id specified");
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Address database interface.
|
|
public abstract bool InsertAddress(SbmAddress address, DbUpdateInfo dbUpdateInfo);
|
|
public abstract bool UpdateAddress(SbmAddress address, DbUpdateInfo dbUpdateInfo);
|
|
public virtual bool AddressCanBeDeleted(SbmAddress address)
|
|
{
|
|
ClearErrorState();
|
|
return true;
|
|
}
|
|
public abstract bool DeleteAddress(SbmAddress address, DbUpdateInfo dbUpdateInfo);
|
|
|
|
//-------------------------------------------------------------------
|
|
// Address list.
|
|
public abstract ColumnDfn GetAddressColumnDfn(SbmAddress.Column columnId, String caption = "", int width = 0);
|
|
public abstract List<String> GetAddressQueryFilter(SbmAddress.Params prm);
|
|
public abstract long GetAddressCount(SbmAddress.Params prm);
|
|
public abstract List<SbmAddress> GetAddressList(SbmAddress.Params prm);
|
|
public abstract DbResultSet AddressExecuteQuery(List<ColumnDfn> columns, SbmAddress.Params prm);
|
|
|
|
//-------------------------------------------------------------------
|
|
// Item addresses.
|
|
public bool HasItemAddresses(ItemId itemId, Sbm.AddressType addressType = Sbm.AddressType.Any, SbmAddress.StatusCat statusCat = SbmAddress.StatusCat.NotDeleted)
|
|
{
|
|
if (itemId.Type < 1 || !SysId.IsValid(itemId.Id)) return false;
|
|
SbmAddress.Params prm = new SbmAddress.Params
|
|
{
|
|
ItemId = itemId,
|
|
AddressType = addressType,
|
|
StatusCat = statusCat
|
|
};
|
|
return (GetAddressCount(prm) > 0);
|
|
}
|
|
public List<SbmAddress> GetItemAddresses(ItemId itemId, Sbm.AddressType addressType = Sbm.AddressType.Any, SbmAddress.StatusCat statusCat = SbmAddress.StatusCat.NotDeleted)
|
|
{
|
|
if (addressType > 0 || !SysId.IsValid(itemId.Id)) return new List<SbmAddress>();
|
|
SbmAddress.Params prm = new SbmAddress.Params
|
|
{
|
|
ItemId = itemId,
|
|
AddressType = addressType,
|
|
StatusCat = statusCat
|
|
};
|
|
return GetAddressList(prm);
|
|
}
|
|
//-------------------------------------------------------------------
|
|
// Utilities.
|
|
public List<SbmAddress> GetAddressesFor(SbmAddress.Params prm)
|
|
{
|
|
GetAddressCount(prm);
|
|
return GetAddresses();
|
|
}
|
|
public List<SbmAddress> GetAddresses()
|
|
{
|
|
List<SbmAddress> addresses = new List<SbmAddress>();
|
|
while (true)
|
|
{
|
|
SbmAddress address = null;
|
|
if (address == null) break;
|
|
addresses.Add(address);
|
|
address = null; // Do not delete - it is now owned by the list.
|
|
}
|
|
return addresses;
|
|
}
|
|
|
|
public List<SbmAddress> GetAddressesFor(Sbm.ItemType itemType, ItemId itemId)
|
|
{
|
|
if ((int)itemType < 1 || !ItemId.IsValid(itemId)) return null;
|
|
SbmAddress.Params prmAddress = new SbmAddress.Params();
|
|
prmAddress.ItemId = itemId;
|
|
GetAddressCount(prmAddress);
|
|
return GetAddresses();
|
|
}
|
|
public bool ClearAddressesFor(Sbm.ItemType itemType, ItemId itemId)
|
|
{
|
|
List<SbmAddress> addresses = GetAddressesFor(itemType, itemId);
|
|
bool bClear = ClearAddresses(addresses);
|
|
if (addresses != null) addresses.Clear();
|
|
return bClear;
|
|
}
|
|
|
|
public bool ClearAddresses(List<SbmAddress> addresses)
|
|
{
|
|
bool clear = addresses != null;
|
|
if (clear)
|
|
{
|
|
foreach (SbmAddress addresss in addresses)
|
|
{
|
|
return false;
|
|
}
|
|
addresses.Clear();
|
|
}
|
|
return clear;
|
|
}
|
|
public String GetRegionDesc(SysId regionId)
|
|
{
|
|
return FindRegionById(regionId)?.Name ?? "";
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// D a t a V a l u e s
|
|
//-------------------------------------------------------------------
|
|
/// <summary>
|
|
/// Extract and format result set data value where specific handling is required.
|
|
/// <para>Where response is an invalid data value, format value using column.FormatValue(values).</para>
|
|
/// </summary>
|
|
public DataValue GetAddressDataValue(ColumnDfn column, NamedValue.Map values)
|
|
{
|
|
DataValue value = new DataValue();
|
|
switch ((SbmAddress.Column)column.Id)
|
|
{
|
|
// Address type description.
|
|
case SbmAddress.Column.Type_Desc:
|
|
{
|
|
Sbm.AddressType addressType = (Sbm.AddressType)values.GetValue(column.DataName).AsLong();
|
|
value = new DataValue(AddressTypes.GetDescForType(addressType, ((int)addressType).ToString()));
|
|
}
|
|
break;
|
|
|
|
// Address summary.
|
|
case SbmAddress.Column.Summary:
|
|
{
|
|
List<String> addresses = new List<String>();
|
|
addresses.Add(values.GetValue(GetAddressColumnDfn(SbmAddress.Column.Line1).DataName).AsString());
|
|
addresses.Add(values.GetValue(GetAddressColumnDfn(SbmAddress.Column.Line2).DataName).AsString());
|
|
addresses.Add(values.GetValue(GetAddressColumnDfn(SbmAddress.Column.Line3).DataName).AsString());
|
|
addresses.Add(values.GetValue(GetAddressColumnDfn(SbmAddress.Column.City).DataName).AsString());
|
|
addresses.Add(values.GetValue(GetAddressColumnDfn(SbmAddress.Column.Province).DataName).AsString());
|
|
value = new DataValue(addresses.Concat(", ", null, null, true, true).ToString() + " " + values.GetValue(GetAddressColumnDfn(SbmAddress.Column.Postcode).DataName).AsString());
|
|
}
|
|
break;
|
|
|
|
// Notes.
|
|
case SbmAddress.Column.Notes:
|
|
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
|
|
break;
|
|
|
|
// Status.
|
|
case SbmAddress.Column.Status_Desc:
|
|
case SbmAddress.Column.Status_Ind:
|
|
{
|
|
String statusCode = values.GetValue(column.DataName).ToString();
|
|
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
|
|
if (column.Id == (int)SbmAddress.Column.Status_Desc)
|
|
value = new DataValue(SacsSystem.GetStatusDescForCode(statusCode));
|
|
else if (column.Id == (int)SbmAddress.Column.Status_Ind)
|
|
value = new DataValue(SbmAddress.GetStatusTriState(status));
|
|
}
|
|
break;
|
|
}
|
|
return value;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|