150 lines
5.6 KiB
C#
150 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.
|
|
|
|
//-------------------------------------------------------------------
|
|
// 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 Sax.AssociationTypeOption GetAssociationTypeOption() { return EnumUtil.ParseEnum(TypeOption, Sax.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(Sax.AssociationTypeOption associationTypeOption)
|
|
{
|
|
switch (associationTypeOption)
|
|
{
|
|
case Sax.AssociationTypeOption.AffiliateChild:
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
public Sax.AssociationType GetAssociationTypeForOption(Sax.AssociationTypeOption associationTypeOption)
|
|
{
|
|
switch (associationTypeOption)
|
|
{
|
|
case Sax.AssociationTypeOption.AffiliateParent:
|
|
case Sax.AssociationTypeOption.AffiliateChild:
|
|
return Sax.AssociationType.Affiliate;
|
|
case Sax.AssociationTypeOption.Partner:
|
|
return Sax.AssociationType.Partner;
|
|
}
|
|
return Sax.AssociationType.Unknown;
|
|
}
|
|
public bool IsConsistentWith(Sax.AssociationTypeOption associationTypeOption, Sax.AssociationType associationType)
|
|
{
|
|
switch (associationType)
|
|
{
|
|
case Sax.AssociationType.Affiliate:
|
|
return new List<Sax.AssociationTypeOption>() { Sax.AssociationTypeOption.AffiliateChild, Sax.AssociationTypeOption.AffiliateParent }.Contains(associationTypeOption);
|
|
case Sax.AssociationType.Partner:
|
|
return new List<Sax.AssociationTypeOption>() { Sax.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(SysId.ToSysId(OrganisationIdAssoc)))
|
|
responseData.SetControlError(controlName, Localiser["msg.validation.mandatory.value"]);
|
|
// Must exist.
|
|
else if (!AccountMgr.OrganisationExistsById(SysId.ToSysId(OrganisationIdAssoc)))
|
|
responseData.SetControlError(controlName, Localiser["msg.validation.invalid.value"]);
|
|
// Not same as primary organisation.
|
|
else if (OrganisationId != null && SysId.ToSysId(OrganisationId).Equals(SysId.ToSysId(OrganisationIdAssoc)))
|
|
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();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|