Created
October 23, 2021 11:15
-
-
Save chsami/5fc3328f81704449e077ceea6f84bfe1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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