Skip to content

Instantly share code, notes, and snippets.

@chsami
Created October 23, 2021 11:15
Show Gist options
  • Save chsami/5fc3328f81704449e077ceea6f84bfe1 to your computer and use it in GitHub Desktop.
Save chsami/5fc3328f81704449e077ceea6f84bfe1 to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using WebAPI.Models;
using WebAPI.Models.Database3PWEB;
using WebAPI.Models.ViewModels;
namespace WebAPI.Services
{
public class OrganisationService
{
private readonly Web3PContext _web3PContext;
public OrganisationService(Web3PContext web3PContext)
{
_web3PContext = web3PContext;
}
public async Task<List<SettingInternOrganisationSelectViewModel>> GetInternOrganisations(Guid uid,
Guid adminPerSettingId, string property, string search)
{
var adminPortalUser = _web3PContext.AdminPortalUsers.SingleOrDefault(x => x.ApplicationUserID == uid);
if (adminPortalUser == null)
throw new Exception("Portal user not found!");
var organisations = await _web3PContext.AdminInternOrganisations.Include(x => x.MainOrganisation)
.Where(m => !m.Description.Equals("") && m.Description.Contains(search)).ToListAsync();
var selectedInternOrganisations = _web3PContext.AdminPerSettings
.Include(x => x.AdminInternOrganisationPerSettings)
.ThenInclude(x => x.InternOrganisation).Where(x => x.ID == adminPerSettingId)
.SelectMany(x => x.AdminInternOrganisationPerSettings).Select(x => x.InternOrganisation).ToList();
return organisations.Select(organisation =>
new SettingInternOrganisationSelectViewModel(organisation, organisations,
selectedInternOrganisations))
.ToList();
}
public async Task<List<SettingExternOrganisationSelectViewModel>> GetExternOrganisations(Guid uid,
Guid adminPerSettingId, string property, string search)
{
var adminPortalUser = _web3PContext.AdminPortalUsers.SingleOrDefault(x => x.ApplicationUserID == uid);
if (adminPortalUser == null)
throw new Exception("Portal user not found!");
var organisations = await _web3PContext.AdminExternOrganisations
.Where(m => !m.Description.Equals("") && m.Description.Contains(search)).ToListAsync();
/* var hasAccessToLoanRequestsUserSetting = property switch
{
nameof(AdminConOORequestsUserSetting.ReadServices) => _web3PContext
.AdminConOORequestsUserSettings.Any(x =>
x.PortalUserID == adminPortalUser.ID && x.ReadServicesID == adminPerSettingId),
_ => true
};
if (!hasAccessToLoanRequestsUserSetting)
throw new Exception("Access denied for loan request setting");*/
var selectedExternOrganisations = _web3PContext.AdminPerSettings
.Include(x => x.AdminExternOrganisationPerSettings)
.ThenInclude(x => x.ExternOrganisation).Where(x => x.ID == adminPerSettingId)
.SelectMany(x => x.AdminExternOrganisationPerSettings).Select(x => x.ExternOrganisation).ToList();
return organisations.Select(organisation =>
new SettingExternOrganisationSelectViewModel(organisation, selectedExternOrganisations))
.ToList();
}
public async Task SaveInternalOrganisations(Guid uid, Guid adminUserSettingId,
IEnumerable<Guid> organisationIds)
{
var adminPortalUser =
_web3PContext.AdminPortalUsers.SingleOrDefault(x => x.ApplicationUserID == uid);
if (adminPortalUser == null)
throw new Exception("Portal user not found!");
var adminUserSetting =
_web3PContext.AdminPerSettings.SingleOrDefault(x => x.ID == adminUserSettingId);
if (adminUserSetting == null) throw new Exception("Admin user setting niet gevonden");
var strategy = _web3PContext.Database.CreateExecutionStrategy();
await strategy.ExecuteAsync(async () =>
{
await using var transaction = await _web3PContext.Database.BeginTransactionAsync();
//delete all
var cleanup = _web3PContext.AdminInternOrganisationPerSettings
.Where(x => x.PerSettingID == adminUserSettingId).ToList();
_web3PContext.RemoveRange(cleanup);
await _web3PContext.SaveChangesAsync();
//add the selected
foreach (var organisationId in organisationIds)
{
_web3PContext.AdminInternOrganisationPerSettings.Add(new AdminInternOrganisationPerSetting
{
InternOrganisationID = organisationId,
PerSettingID = adminUserSettingId
});
}
await _web3PContext.SaveChangesAsync();
await transaction.CommitAsync();
});
}
public async Task SaveExternalOrganisation(Guid uid, Guid adminUserSettingId,
IEnumerable<Guid> organisationIds)
{
var adminPortalUser =
_web3PContext.AdminPortalUsers.SingleOrDefault(x => x.ApplicationUserID == uid);
if (adminPortalUser == null)
throw new Exception("Portal user not found!");
var adminUserSetting =
_web3PContext.AdminPerSettings.SingleOrDefault(x => x.ID == adminUserSettingId);
if (adminUserSetting == null) throw new Exception("Admin user setting niet gevonden");
var strategy = _web3PContext.Database.CreateExecutionStrategy();
await strategy.ExecuteAsync(async () =>
{
await using var transaction = await _web3PContext.Database.BeginTransactionAsync();
//delete all
var cleanup = _web3PContext.AdminExternOrganisationPerSettings
.Where(x => x.PerSettingID == adminUserSettingId).ToList();
_web3PContext.RemoveRange(cleanup);
await _web3PContext.SaveChangesAsync();
//add the selected
foreach (var organisationId in organisationIds)
{
_web3PContext.AdminExternOrganisationPerSettings.Add(new AdminExternOrganisationPerSetting
{
ExternOrganisationID = organisationId,
PerSettingID = adminUserSettingId
});
}
await _web3PContext.SaveChangesAsync();
await transaction.CommitAsync();
});
}
public async Task SaveInternalOrganisationReadServicesByValidator(Guid userId,
SettingsAdminPerSettingsRow adminUserSetting,
IEnumerable<Guid> organisationIds)
{
var adminPortalUser =
_web3PContext.AdminPortalUsers.Include(x => x.AdminDocValidationUserSetting)
.ThenInclude(x => x.ReadServicesByValidator).SingleOrDefault(x => x.ApplicationUserID == userId);
if (adminPortalUser == null)
throw new Exception("Portal user not found!");
if (adminPortalUser.AdminDocValidationUserSetting.ReadServicesByValidator == null)
{
adminPortalUser.AdminDocValidationUserSetting.ReadServicesByValidator = new AdminPerSetting()
{
IsActive = adminUserSetting.IsActive,
IsMandatory = adminUserSetting.IsMandatory,
IsSelection = adminUserSetting.IsSelection,
SettingID = adminUserSetting.SettingId
};
await _web3PContext.SaveChangesAsync();
}
var strategy = _web3PContext.Database.CreateExecutionStrategy();
await strategy.ExecuteAsync(async () =>
{
await using var transaction = await _web3PContext.Database.BeginTransactionAsync();
//delete all
var cleanup = _web3PContext.AdminInternOrganisationPerSettings
.Where(x => x.PerSettingID ==
adminPortalUser.AdminDocValidationUserSetting.ReadServicesByValidator.ID).ToList();
_web3PContext.RemoveRange(cleanup);
await _web3PContext.SaveChangesAsync();
//add the selected
foreach (var organisationId in organisationIds)
{
_web3PContext.AdminInternOrganisationPerSettings.Add(new AdminInternOrganisationPerSetting
{
InternOrganisationID = organisationId,
PerSettingID = adminPortalUser.AdminDocValidationUserSetting.ReadServicesByValidator.ID
});
}
await _web3PContext.SaveChangesAsync();
await transaction.CommitAsync();
});
}
public async Task SaveInternalOrganisationReadServices(Guid userId,
SettingsAdminPerSettingsRow adminUserSetting,
IEnumerable<Guid> organisationIds)
{
var adminPortalUser =
_web3PContext.AdminPortalUsers.Include(x => x.AdminDocValidationUserSetting)
.ThenInclude(x => x.ReadServices).SingleOrDefault(x => x.ApplicationUserID == userId);
if (adminPortalUser == null)
throw new Exception("Portal user not found!");
if (adminPortalUser.AdminDocValidationUserSetting.ReadServices == null)
{
adminPortalUser.AdminDocValidationUserSetting.ReadServices = new AdminPerSetting()
{
IsActive = adminUserSetting.IsActive,
IsMandatory = adminUserSetting.IsMandatory,
IsSelection = adminUserSetting.IsSelection,
SettingID = adminUserSetting.SettingId
};
await _web3PContext.SaveChangesAsync();
}
var strategy = _web3PContext.Database.CreateExecutionStrategy();
await strategy.ExecuteAsync(async () =>
{
await using var transaction = await _web3PContext.Database.BeginTransactionAsync();
//delete all
var cleanup = _web3PContext.AdminInternOrganisationPerSettings
.Where(x => x.PerSettingID ==
adminPortalUser.AdminDocValidationUserSetting.ReadServices.ID).ToList();
_web3PContext.RemoveRange(cleanup);
await _web3PContext.SaveChangesAsync();
//add the selected
foreach (var organisationId in organisationIds)
{
_web3PContext.AdminInternOrganisationPerSettings.Add(new AdminInternOrganisationPerSetting
{
InternOrganisationID = organisationId,
PerSettingID = adminPortalUser.AdminDocValidationUserSetting.ReadServices.ID
});
}
await _web3PContext.SaveChangesAsync();
await transaction.CommitAsync();
});
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment