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 GetAffiliateQueryFilter(SbmAffiliate.Params prm); public abstract long GetAffiliateCount(SbmAffiliate.Params prm); public abstract List GetAffiliateList(SbmAffiliate.Params prm); public abstract DbResultSet ExecuteAffiliateQuery(List columns, SbmAffiliate.Params prm); public List GetAffiliatesSupervisedBy(SysId affiliateIdUser) { List affiliateIdNames = new List(); 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 //------------------------------------------------------------------- /// /// Extract and format result set data value where specific handling is required. /// Where response is an invalid data value, format value using column.FormatValue(values). /// 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 addresses = new List() { 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; } //------------------------------------------------------------------- } //======================================================================= }