Files
BusinessMgr-2019/SaBusMgrStandardBase/Base/Mgr/SbmAccountMgr_Affiliate.cs
T
2021-05-05 21:00:33 +01:00

436 lines
19 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);
//-------------------------------------------------------------------
// Retrieve individual affiliates.
//-------------------------------------------------------------------
// Affiliate exists.
public bool AffiliateExistsById(SysId affiliateId)
{
ClearErrorState();
if (!SysId.IsValid(affiliateId)) return false;
SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params();
prmAffiliate.IncludedIds.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.IncludedIds.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.ExcludedIds.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.ExcludedIds.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.IncludedIds.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.Any;
return GetAffiliate(prmAffiliate);
}
public SbmAffiliate GetAffiliateByTypeName(Sbm.AffiliateType affiliateType, String affiliateName)
{
ClearErrorState();
if (!StringUtil.IsEmpty(affiliateName)) return null;
SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params();
prmAffiliate.Name = affiliateName;
prmAffiliate.StatusCat = SbmAffiliate.StatusCat.Any;
return GetAffiliate(prmAffiliate);
}
public SbmAffiliate GetIndividualByName(String firstName, String lastName)
{
ClearErrorState();
if (!StringUtil.IsEmpty(firstName) || !StringUtil.IsEmpty(lastName)) return null;
SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params();
prmAffiliate.Name = firstName;
prmAffiliate.Name = lastName;
prmAffiliate.StatusCat = SbmAffiliate.StatusCat.Any;
return GetAffiliate(prmAffiliate);
}
public SbmAffiliate GetOrganisationByName(String organisationName)
{
ClearErrorState();
if (!StringUtil.IsEmpty(organisationName)) return null;
SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params();
prmAffiliate.Name = organisationName;
prmAffiliate.StatusCat = SbmAffiliate.StatusCat.Any;
return GetAffiliate(prmAffiliate);
}
public SbmAffiliate GetTargetAffiliateByAssocId(SysId associationId)
{
ClearErrorState();
if (!SysId.IsValid(associationId)) return null;
SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params();
prmAffiliate.IncludedIds.Add(associationId);
prmAffiliate.StatusCat = SbmAffiliate.StatusCat.Any;
return GetAffiliate(prmAffiliate);
}
public SbmAffiliate GetTargetAffiliateByAssocTypeCode(Sbm.AssociationType associationType, String associationCode)
{
ClearErrorState();
if ((int)associationType < 1 || !StringUtil.IsEmpty(associationCode)) return null;
SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params();
prmAffiliate.AssociationType = associationType;
//prmAffiliate.Code = associationCode;
prmAffiliate.StatusCat = SbmAffiliate.StatusCat.Any;
return GetAffiliate(prmAffiliate);
}
//-------------------------------------------------------------------
// 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 List<SysIdString> GetAffiliatesSupervisedBy(SysId affiliateIdUser)
{
List<SysIdString> affiliateIdNames = new List<SysIdString>();
SbmAffiliate.Params prmAffiliate = new SbmAffiliate.Params();
prmAffiliate.AffiliateIdAssocTarget = affiliateIdUser;
prmAffiliate.TargetSupervised = SbmAffiliate.Params.Supervised.Yes;
foreach (SbmAffiliate affiliate in GetAffiliateList(prmAffiliate))
affiliateIdNames.Add(affiliate.Id, affiliate.Name);
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_Desc:
{
Sbm.AffiliateType affiliateType = (Sbm.AffiliateType)values.GetValue(column.DataName).AsLong();
value = new DataValue(AffiliateTypes.GetDescForType(affiliateType, affiliateType.ToString()));
}
break;
// Address summary.
case SbmAffiliate.Column.Address_Summary:
{
List<String> addresses = new List<String>()
{
values.GetValue(GetAffiliateColumnDfn(SbmAffiliate.Column.Address_Line1).DataName).AsString(),
values.GetValue(GetAffiliateColumnDfn(SbmAffiliate.Column.Address_Line2).DataName).AsString(),
values.GetValue(GetAffiliateColumnDfn(SbmAffiliate.Column.Address_City).DataName).AsString(),
values.GetValue(GetAffiliateColumnDfn(SbmAffiliate.Column.Address_Province).DataName).AsString(),
values.GetValue(GetAffiliateColumnDfn(SbmAffiliate.Column.Address_Postcode).DataName).AsString(),
values.GetValue(GetAffiliateColumnDfn(SbmAffiliate.Column.Address_Country).DataName).AsString(),
};
value = new DataValue(addresses.Concat(", ", null, null, true, true).Replace(" ,", ",").Trim(',').Trim());
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;
//-----------------------------------------------------------
}
return value;
}
//-------------------------------------------------------------------
}
//=======================================================================
}