using Sarand.Net.Standard.Base.App; using Sarand.Net.Standard.Base.Bus; using Sarand.Net.Standard.Base.Core; using Sarand.Net.Standard.Base.Utils; using Saxonite.Base.App; using Saxonite.Net.Core.Web.Base.App; using Saxonite.Net.Core.Web.Base.Controllers; using Saxonite.Net.Core.Web.Base.Models; using Saxonite.Net.Standard.Base.App; using Saxonite.Net.Standard.Base.Bus; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; namespace Saxonite.Net.Core.Web.Admin.Models { //======================================================================= public class Model_OrganisationAssociations : SaxModel_Admin { //------------------------------------------------------------------- // Definitions. public enum AssociationTypeOption { Unknown = 0, AffiliateParent, AffiliatedTo, Partner, } //------------------------------------------------------------------- // Construction. public Model_OrganisationAssociations(SaxLocaliser localiser) : base(localiser) { AdditionalFiles_JS.Add("js/sax-org-ass.js"); } //------------------------------------------------------------------- // List configuration. public class FilterData { public String OrganisationId { get; set; } public String OrganisationName { get; set; } } public FilterData Filter { get; } = new FilterData(); //------------------------------------------------------------------- // Item association. public String ItemAssociationId { get; set; } /// Flag to indicate that a new association needs to be created - must be consistent with validity of Item Association Id. public String NewItem { get; set; } // Organisation. public String OrganisationId { get; set; } // Associated organisation. public String OrganisationIdAssoc { get; set; } public class AssociationData { // Association type option. public String TypeOption { get; set; } public AssociationTypeOption GetAssociationTypeOption() { return EnumUtil.ParseEnum(TypeOption, AssociationTypeOption.Unknown); } // Association properties. public String StatusCode { get; set; } public SaStatus GetStatus() { return SacsSystem.GetStatusForCode(StatusCode); } } public AssociationData Association { get; } = new AssociationData(); //------------------------------------------------------------------- // Utilities. public bool IsAssociationTypeDirectionReversed(AssociationTypeOption associationTypeOption) { switch (associationTypeOption) { case AssociationTypeOption.AffiliatedTo: return true; } return false; } public Sax.AssociationType GetAssociationTypeForOption(AssociationTypeOption associationTypeOption) { switch (associationTypeOption) { case AssociationTypeOption.AffiliateParent: case AssociationTypeOption.AffiliatedTo: return Sax.AssociationType.Affiliate; case AssociationTypeOption.Partner: return Sax.AssociationType.Partner; } return Sax.AssociationType.Unknown; } public bool IsConsistentWith(AssociationTypeOption associationTypeOption, Sax.AssociationType associationType) { switch (associationType) { case Sax.AssociationType.Affiliate: return new List() { AssociationTypeOption.AffiliatedTo, AssociationTypeOption.AffiliateParent }.Contains(associationTypeOption); case Sax.AssociationType.Partner: return new List() { AssociationTypeOption.Partner }.Contains(associationTypeOption); } return false; } //------------------------------------------------------------------- // Validation. //------------------------------------------------------------------- // Organisation association validation. public bool ValidateOrganisationAssociationData(SaxController_Base.AjaxResponse_Data responseData) { // Associated Organisation. if (OrganisationIdAssoc != null) { // Mandatory. String controlName = "OrganisationIdAssoc"; if (!SysId.IsValid(OrganisationIdAssoc.ToSysId())) responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]); // Must exist. else if (!AccountMgr.OrganisationExistsById(OrganisationIdAssoc.ToSysId())) responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]); // Not same as primary organisation. else if (OrganisationId != null && OrganisationId.ToSysId().Equals(OrganisationIdAssoc.ToSysId())) responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]); } // Association type option. if (Association.TypeOption != null) { // Mandatory. String controlName = "AssociationTypeOption"; if (StringUtil.IsEmpty(Association.TypeOption)) responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]); // Valid value. else if ((int)Association.GetAssociationTypeOption() < 1) responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]); } // Association status. if (Association.StatusCode != null) { // Mandatory. String controlName = "AssociationStatus"; if (StringUtil.IsEmpty(Association.StatusCode)) responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]); // Valid value. else if (!SaxOrganisation.ValidStatuses.Contains(Association.GetStatus())) responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]); } return !responseData.HasControlErrors(); } //------------------------------------------------------------------- } //======================================================================= }