Files
BusinessMgr-2019/SaBusMgrStandardBase/Base/Mgr/SbmAccountMgr_Affiliate.cs
T
2025-01-27 10:01:32 +00:00

467 lines
21 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 f f i l i a t e s
//*******************************************************************
// Utilities.
public abstract String GetAffiliateName(SysId affiliateId);
public abstract String GetAssociationOwnerName(SysId associationIdOwner);
public abstract String GetAssociationTargetName(SysId associationIdTarget);
public static String GetInterfaceContext(SysId affiliateIdOrganisation)
{
if (SysId.IsValid(affiliateIdOrganisation))
return "ORG" + StringUtil.PadLeft(SysId.ToString(affiliateIdOrganisation), 5, '0');
return "";
}
//-------------------------------------------------------------------
// Retrieve individual affiliates.
//-------------------------------------------------------------------
// Affiliate exists.
public bool AffiliateExistsById(SysId affiliateId)
{
ClearErrorState();
if (!SysId.IsValid(affiliateId)) return false;
SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params();
prmAffiliate.IdsIncluded.Add(affiliateId);
prmAffiliate.StatusCat = SbmAffiliate.StatusCat.Any;
return GetAffiliateCount(prmAffiliate) == 1;
}
public bool AffiliateExistsByUserId(SysId affiliateIdOwner)
{
ClearErrorState();
if (!SysId.IsValid(affiliateIdOwner)) return false;
SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params();
prmAffiliate.IdsIncluded.Add(affiliateIdOwner);
prmAffiliate.StatusCat = SbmAffiliate.StatusCat.Any;
return GetAffiliateCount(prmAffiliate) == 1;
}
public bool OrganisationExistsByName(String organisationName, SysId affiliateIdExclude)
{
ClearErrorState();
if (!StringUtil.IsEmpty(organisationName) || !SysId.IsValid(affiliateIdExclude)) return false;
SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params();
prmAffiliate.Name = organisationName;
prmAffiliate.IdsExcluded.Add(affiliateIdExclude);
prmAffiliate.StatusCat = SbmAffiliate.StatusCat.Any;
return GetAffiliateCount(prmAffiliate) == 1;
}
public bool IndividualExistsByName(String firstName, String lastName, SysId affiliateIdExclude)
{
ClearErrorState();
if (!StringUtil.IsEmpty(firstName) || !StringUtil.IsEmpty(lastName) || !SysId.IsValid(affiliateIdExclude)) return false;
SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params();
prmAffiliate.Name = firstName;
prmAffiliate.Name = lastName;
prmAffiliate.IdsExcluded.Add(affiliateIdExclude);
prmAffiliate.StatusCat = SbmAffiliate.StatusCat.Any;
return GetAffiliateCount(prmAffiliate) == 1;
}
//-------------------------------------------------------------------
//Get affiliate.
public abstract SbmAffiliate GetAffiliate(SbmAffiliate.Params prm);
public SbmAffiliate GetAffiliateById(SysId affiliateId)
{
ClearErrorState();
if (!SysId.IsValid(affiliateId)) return null;
SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params();
prmAffiliate.IdsIncluded.Add(affiliateId);
prmAffiliate.StatusCat = SbmAffiliate.StatusCat.Any;
return GetAffiliate(prmAffiliate);
}
public SbmAffiliate GetAffiliateByUserId(SysId userId)
{
ClearErrorState();
if (!SysId.IsValid(userId)) return null;
SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params();
prmAffiliate.UserId = userId;
prmAffiliate.StatusCat = SbmAffiliate.StatusCat.NotDeleted;
return GetAffiliate(prmAffiliate);
}
public SbmAffiliate GetAffiliateByTypeName(Sbm.AffiliateType affiliateType, String affiliateName)
{
ClearErrorState();
if (StringUtil.IsBlank(affiliateName)) return null;
SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params();
prmAffiliate.AffiliateType = affiliateType;
prmAffiliate.Name = affiliateName;
prmAffiliate.StatusCat = SbmAffiliate.StatusCat.NotDeleted;
prmAffiliate.ResultsPaging.Set(1,2);
foreach (SbmAffiliate affiliate in GetAffiliateList(prmAffiliate))
return affiliate;
return null;
}
public SbmAffiliate GetIndividualByName(String firstName, String lastName)
{
ClearErrorState();
if (StringUtil.IsBlank(firstName) || StringUtil.IsBlank(lastName)) return null;
SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params();
prmAffiliate.AffiliateType = Sbm.AffiliateType.Individual;
prmAffiliate.FirstName = firstName;
prmAffiliate.LastName = lastName;
prmAffiliate.StatusCat = SbmAffiliate.StatusCat.NotDeleted;
prmAffiliate.ResultsPaging.Set(1, 2);
foreach (SbmAffiliate affiliate in GetAffiliateList(prmAffiliate))
return affiliate;
return null;
}
public SbmAffiliate GetOrganisationByName(String organisationName)
{
return GetAffiliateByTypeName(Sbm.AffiliateType.AnyOrganisation, organisationName);
}
public SbmAffiliate GetTargetAffiliateByAssocId(SysId associationId)
{
ClearErrorState();
if (!SysId.IsValid(associationId)) return null;
using (SbmAssociation association = GetAssociationById(associationId))
{
if (association != null)
return GetAffiliateById(association.AffiliateIdTarget);
}
return null;
}
public SbmAffiliate GetTargetAffiliateByAssocTypeCode(Sbm.AssociationType associationType, String associationCode)
{
ClearErrorState();
if ((int)associationType < 1 || StringUtil.IsBlank(associationCode)) return null;
using (SbmAssociation association = GetAssociationByTypeCode(associationType, associationCode))
{
if (association != null)
return GetAffiliateById(association.AffiliateIdTarget);
}
return null;
}
//-------------------------------------------------------------------
// Create affiliate.
public abstract SbmAffiliate CreateAffiliate(Sbm.AffiliateType affiliateType);
//-------------------------------------------------------------------
// Validate affiliate data.
public bool IsValidAffiliate(SbmAffiliate affiliate)
{
ClearErrorState();
if (affiliate == null) return SetErrorState(ErrorMessage.ItemNotSpecified);
return IsValidAffiliateData(affiliate.GetData(), new SbmAffiliate.ErrField());
}
public virtual bool IsValidAffiliateData(SbmAffiliate.Data data, SbmAffiliate.ErrField errField)
{
// Affiliate properties.
ClearErrorState();
if (data == null) return SetErrorState("item not specified");
// Validate the type:
if (errField.Type != SacsHierarchyItem.ValidValue.Ignore && (short)data.AffiliateType < 1)
{
if ((int)data.AffiliateType < 1)
{
errField.Type = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Affiliate type must be supplied");
}
}
// Validate the user id.
if (!SbmAffiliate.IsIndividual(data.AffiliateType) && SysId.IsValid(data.UserId)) return SetErrorState("only individuals can have user ids");
if (errField.Abbr != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Abbr, "abbreviation", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_Abbrev)))
{
errField.Abbr = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Validate the affiliate names.
if (errField.Name != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Name, "name", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_Name), !SbmAffiliate.IsIndividual(data.AffiliateType)))
{
errField.Name = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SbmAffiliate.IsIndividual(data.AffiliateType) && !data.Title.IsEmpty()) return SetErrorState("only individuals can have a Title");
if (errField.Title != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Title, "title", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_Title)))
{
errField.Title = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Initials != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Initials, "initials", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_Initials)))
{
errField.Initials = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.LastName != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.LastName, "last name", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_LastName), SbmAffiliate.IsIndividual(data.AffiliateType)))
{
errField.LastName = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.FirstName != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.FirstName, "first name", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_FirstName)))
{
errField.FirstName = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Validate the text attributes.
if (errField.Salutation != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Salutation, "salutation", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_Salutation)))
{
errField.Salutation = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Nature != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Nature, "nature", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_Nature)))
{
errField.Nature = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.CompanyNo != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.CompanyNo, "company no", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_CompanyNo)))
{
errField.CompanyNo = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.VatReg != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.VatReg, "vat no", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_VatReg)))
{
errField.Nature = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Contact != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Contact, "contact", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_Contact)))
{
errField.Contact = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.PhoneMain != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PhoneMain, "phone number", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_PhoneMain)))
{
errField.PhoneMain = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.PhoneAlt != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PhoneAlt, "alt number", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_PhoneAlt)))
{
errField.PhoneAlt = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.PhoneFax != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PhoneFax, "fax number", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_PhoneFax)))
{
errField.PhoneFax = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.PhoneMobile != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PhoneMobile, "mobile number", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_PhoneMobile)))
{
errField.PhoneMobile = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.PhoneDirect != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.PhoneDirect, "direct number", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_PhoneDirect)))
{
errField.PhoneDirect = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Email != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Email, "email", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_Email)))
{
errField.Email = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Website != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Website, "website", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_Website)))
{
errField.Website = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.BirthDay != SacsHierarchyItem.ValidValue.Ignore && data.BirthDay < 0)
{
errField.BirthDay = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Birth day must not be negative");
}
if (errField.BirthMonth != SacsHierarchyItem.ValidValue.Ignore && data.BirthMonth < 0)
{
errField.BirthMonth = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Birth month must not be negative");
}
if (errField.BirthYear != SacsHierarchyItem.ValidValue.Ignore && data.BirthYear < 0)
{
errField.BirthYear = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState("Birth year must not be negative");
}
if (errField.MaritalStatus != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.MaritalStatus, "marital status", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_MaritalStatus)))
{
errField.MaritalStatus = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Spouse != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Spouse, "Partner", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_Spouse)))
{
errField.Spouse = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Children != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Children, "Children", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_Children)))
{
errField.Children = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Hometown != SacsHierarchyItem.ValidValue.Ignore && !IsValidValue(data.Hometown, "Hometown", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_Hometown)))
{
errField.Hometown = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
// Common properties.
if (!IsValidValue(data.Notes, "notes", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_Notes)))
{
errField.Notes = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (errField.Status != SacsHierarchyItem.ValidValue.Ignore)
{
if (!IsValidValue(data.StatusCode, "status", (long)SbmDbDfn.GetColTextLen(SbmDbDfn.ColumnIdx.Affiliate_Status), true, true))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return false;
}
if (!SbmAffiliate.ValidStatuses.Contains(data.Status))
{
errField.Status = SacsHierarchyItem.ValidValue.Invalid;
return SetErrorState(ErrorMessage.InvalidStatus);
}
}
// Validate associated data.
if (errField.AffiliateIdParent != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.AffiliateIdParent))
{
/* ToDo Validate Affiliate Parent
errField.AffiliateIdParent = SacsHierarchyItem.ValidValue.Invalid;
return false;
*/
}
if (errField.UserId != SacsHierarchyItem.ValidValue.Ignore && SysId.IsValid(data.UserId))
{
/* ToDo Validate Affiliate User
errField.UserId = SacsHierarchyItem.ValidValue.Invalid;
return false;
*/
}
return true;
}
//-------------------------------------------------------------------
// Affiliate database interface.
public abstract bool InsertAffiliate(SbmAffiliate affiliate, DbUpdateInfo dbUpdateInfo);
public abstract bool UpdateAffiliate(SbmAffiliate affiliate, DbUpdateInfo dbUpdateInfo);
public virtual bool AffiliateCanBeDeleted(SbmAffiliate affiliate)
{
if (affiliate == null) return SetErrorState("item not specified");
if (affiliate.HasChildAffiliates()) return SetErrorState("item has child organisations");
if (affiliate.OwnerOfAssociations(Sbm.AssociationType.Any, false)) return SetErrorState("item own associations");
if (affiliate.TargetOfAssociations(Sbm.AssociationType.Any, false)) return SetErrorState("item is the target of associations");
if (affiliate.HasDiaryLinks()) return SetErrorState("item has diary links");
//ClearErrorState();
return true;
}
public abstract bool DeleteAffiliate(SbmAffiliate affiliate, DbUpdateInfo dbUpdateInfo);
//-------------------------------------------------------------------
// Affiliate list.
public abstract ColumnDfn GetAffiliateColumnDfn(SbmAffiliate.Column columnId, String caption = "", int width = 0);
public abstract List<String> GetAffiliateQueryFilter(SbmAffiliate.Params prm);
public abstract long GetAffiliateCount(SbmAffiliate.Params prm);
public abstract List<SbmAffiliate> GetAffiliateList(SbmAffiliate.Params prm);
public abstract DbResultSet ExecuteAffiliateQuery(List<ColumnDfn> columns, SbmAffiliate.Params prm);
public bool IsAffiliateSupervisedBy(SysId affiliateIdContact, SysId affiliateIdSupervisor)
{
List<SysIdString> affiliateIdNames = new List<SysIdString>();
SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params();
prmAffiliate.AffiliateIdAssocOwner = affiliateIdContact;
prmAffiliate.AffiliateIdAssocTarget = affiliateIdSupervisor;
prmAffiliate.TargetSupervised = SbmAffiliate.Params.Supervised.Yes;
return GetAffiliateCount(prmAffiliate) > 0;
}
public List<SysIdString> GetAffiliatesSupervisedBy(SysId affiliateIdSupervisor)
{
List<SysIdString> affiliateIdNames = new List<SysIdString>();
SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params();
prmAffiliate.AffiliateIdAssocTarget = affiliateIdSupervisor;
prmAffiliate.TargetSupervised = SbmAffiliate.Params.Supervised.Yes;
foreach (SbmAffiliate affiliate in GetAffiliateList(prmAffiliate))
{
affiliateIdNames.Add(affiliate.Id, affiliate.Name);
affiliate.Dispose();
}
return affiliateIdNames;
}
//-------------------------------------------------------------------
// 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 GetAffiliateDataValue(ColumnDfn column, NamedValue.Map values)
{
DataValue value = new DataValue();
switch ((SbmAffiliate.Column)column.Id)
{
//-----------------------------------------------------------
// Affiliate type description.
case SbmAffiliate.Column.Type_Code:
case SbmAffiliate.Column.Type_Desc:
{
Sbm.AffiliateType affiliateType = (Sbm.AffiliateType)values.GetValue(column.DataName).AsLong();
if (column.Id == (int)SbmAffiliate.Column.Type_Desc)
value = new DataValue(AffiliateTypes.GetDescForType(affiliateType, affiliateType.ToString()));
else value = new DataValue(AffiliateTypes.GetCodeForType(affiliateType, affiliateType.ToString()));
}
break;
//-----------------------------------------------------------
// Address summary.
case SbmAffiliate.Column.Address_Summary:
{
String line1 = values.GetValue(GetAffiliateColumnDfn(SbmAffiliate.Column.Address_Line1).DataName).AsString();
String city = values.GetValue(GetAffiliateColumnDfn(SbmAffiliate.Column.Address_City).DataName).AsString();
String province = values.GetValue(GetAffiliateColumnDfn(SbmAffiliate.Column.Address_Province).DataName).AsString();
String postcode = values.GetValue(GetAffiliateColumnDfn(SbmAffiliate.Column.Address_Postcode).DataName).AsString();
String country = values.GetValue(GetAffiliateColumnDfn(SbmAffiliate.Column.Address_Country).DataName).AsString();
value = new DataValue(SbmAddress.GetSummary(line1, city, province, postcode, country));
break;
}
//-----------------------------------------------------------
// Prospect Group.
case SbmAffiliate.Column.ProspectGroup:
break;
//-----------------------------------------------------------
// Notes.
case SbmAffiliate.Column.Notes:
value = new DataValue(SacsHierarchyItem.FormatForDisplay(values.GetValue(column.DataName).ToString(), 200));
break;
// Status.
case SbmAffiliate.Column.Status_Desc:
case SbmAffiliate.Column.Status_Ind:
{
String statusCode = values.GetValue(column.DataName).ToString();
SaStatus status = SacsSystem.GetStatusForCode(statusCode);
if (column.Id == (int)SbmAffiliate.Column.Status_Desc)
value = new DataValue(SacsSystem.GetStatusDescForCode(statusCode));
else if (column.Id == (int)SbmAffiliate.Column.Status_Ind)
value = new DataValue(SbmAffiliate.GetStatusTriState(status));
}
break;
//-----------------------------------------------------------
default:
value = values.GetValue(column.DataName);
break;
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}