Files
Saxonite/SaxoniteCoreWebAdmin/Admin/Models/Model_OrganisationAssociations.cs
T
2022-07-16 13:30:57 +01:00

157 lines
5.6 KiB
C#

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; }
/// <summary>Flag to indicate that a new association needs to be created - must be consistent with validity of Item Association Id.</summary>
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>() { AssociationTypeOption.AffiliatedTo, AssociationTypeOption.AffiliateParent }.Contains(associationTypeOption);
case Sax.AssociationType.Partner:
return new List<AssociationTypeOption>() { 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();
}
//-------------------------------------------------------------------
}
//=======================================================================
}