using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; 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 Saxonite.Net.Core.Web.Base.App; using Saxonite.Net.Core.Web.Online.Models; using Saxonite.Net.Standard.Base.Bus; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Saxonite.Net.Core.Web.Online.Controllers { //======================================================================= // Online Organisation Controller. //======================================================================= public partial class OrganisationController : SaxController_Online { //------------------------------------------------------------------- // Construction. public OrganisationController(SaxLocaliser localiser, ILogger logger) : base(localiser, logger) { } //------------------------------------------------------------------- [HttpGet] public IActionResult Index() { // Validate session. if (!ValidUserSession) return RedirectToAction("", ""); // No 'Index' view as yet - default to 'Opportunities' view. return RedirectToAction("Opportunities", "Organisation"); } //------------------------------------------------------------------- [HttpGet] public IActionResult Opportunities() { // Validate session. if (!ValidUserSession) return RedirectToAction("", ""); // Model. Model_Organisation_Opportunities model = new Model_Organisation_Opportunities(Localiser); // Get a suitable organisation for the filter. SysId filterOrganisationId = SessionData_Online.Filter.OrganisationIdMember; String filterOrganisationCaption = SessionData_Online.Filter.OrganisationCaptionMember; OrganisationData organisationData = GetOrganisationForFilter(filterOrganisationId, filterOrganisationCaption); if (organisationData == null) return RedirectToAction("", ""); // Make a note of the filter values. model.Filter.OrganisationId = SysId.ToString(organisationData.Id); model.Filter.OrganisationCaption = organisationData.Caption; SessionData_Online.Filter.OrganisationIdMember = organisationData.Id; SessionData_Online.Filter.OrganisationCaptionMember = organisationData.Caption; return View(model); } //------------------------------------------------------------------- [HttpGet] public IActionResult Members() { // Validate session. if (!ValidUserSession) return RedirectToAction("", ""); // Model. Model_Organisation_Members model = new Model_Organisation_Members(Localiser); // Get a suitable organisation for the filter. SysId filterOrganisationId = SessionData_Online.Filter.OrganisationIdMember; String filterOrganisationCaption = SessionData_Online.Filter.OrganisationCaptionMember; OrganisationData organisationData = GetOrganisationForFilter(filterOrganisationId, filterOrganisationCaption); if (organisationData == null) return RedirectToAction("", ""); // Make a note of the filter values. model.Filter.OrganisationId = SysId.ToString(organisationData.Id); model.Filter.OrganisationCaption = organisationData.Caption; SessionData_Online.Filter.OrganisationIdMember = organisationData.Id; SessionData_Online.Filter.OrganisationCaptionMember = organisationData.Caption; return View(model); } //------------------------------------------------------------------- public class OrganisationData { public OrganisationData(SysId id) { Id = id; } public SysId Id { get; } public String Caption { get; set; } } private OrganisationData GetOrganisationForFilter(SysId filterOrganisationId, String filterOrganisationCaption) { // Check that user is associated with organisations. SaxUserOrganisation.Params prmUserOrganisation = new SaxUserOrganisation.Params(); prmUserOrganisation.UserAccountIdsIncluded.Add(SessionData.User.UserAccountId); prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly; if (AccountMgr.GetUserOrganisationCount(prmUserOrganisation) < 1) return null; // Filter organisation. OrganisationData organisationData = new OrganisationData(filterOrganisationId); organisationData.Caption = filterOrganisationCaption; if (!SysId.IsValid(filterOrganisationId) || StringUtil.IsEmpty(filterOrganisationCaption)) { // Pick the first Organisation that the user is a member of. ColumnDfn colOrganisationId = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.OrganisationId); ColumnDfn colOrganisationName = AccountMgr.GetUserOrganisationColumnDfn(SaxUserOrganisation.Column.Organisation_Name); prmUserOrganisation = new SaxUserOrganisation.Params(); prmUserOrganisation.UserAccountIdsIncluded.Add(SessionData.User.UserAccountId); if (SysId.IsValid(filterOrganisationId)) prmUserOrganisation.OrganisationIdsIncluded.Add(filterOrganisationId); prmUserOrganisation.OrganisationMembersOnly = true; prmUserOrganisation.StatusCat = SaxUserOrganisation.StatusCat.ActiveOnly; prmUserOrganisation.SortColumns.Add(colOrganisationName); prmUserOrganisation.ResultsPaging.PageLength = 1; prmUserOrganisation.ResultsPaging.PageNo = 1; using (DbResultSet resultSet = AccountMgr.ExecuteUserOrganisationQuery(new List() { colOrganisationId, colOrganisationName }, prmUserOrganisation)) { while (resultSet != null && resultSet.HasRows && resultSet.NextRecord()) { NamedValue.Map values = resultSet.GetRecordValues(); SysId organisationId = new SysId(values.GetLong(colOrganisationId.DataName)); if (SysId.IsValid(organisationId)) { organisationData = new OrganisationData(organisationId); organisationData.Caption = values.GetString(colOrganisationName.DataName); break; } } } } if (SysId.IsValid(organisationData.Id) && StringUtil.IsEmpty(organisationData.Caption)) { // Organisation has been identified but no caption available as yet. using (SaxOrganisation organisation = AccountMgr.GetOrganisationById(organisationData.Id)) { if (organisation != null) organisationData.Caption = organisation.Name; } } return organisationData; } //------------------------------------------------------------------- } //======================================================================= }