Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,11 @@ public class AcquisitionFilterModel : PageFilter
/// </summary>
public bool HasNoticeOfClaim { get; set; }

/// <summary>
/// get/set - The region types.
/// </summary>
public IList<int> Regions { get; set; } = new List<int>();

#endregion

#region Constructors
Expand Down Expand Up @@ -90,6 +95,7 @@ public AcquisitionFilterModel(Dictionary<string, Microsoft.Extensions.Primitives
AcquisitionTeamMemberPersonId = filter.GetStringValue(nameof(AcquisitionTeamMemberPersonId));
AcquisitionTeamMemberOrganizationId = filter.GetStringValue(nameof(AcquisitionTeamMemberOrganizationId));
HasNoticeOfClaim = filter.GetBoolValue(nameof(HasNoticeOfClaim));
Regions = filter.GetIntArrayValue(nameof(Regions));

Sort = filter.GetStringArrayValue(nameof(Sort));
}
Expand Down Expand Up @@ -118,6 +124,7 @@ public static explicit operator AcquisitionFilter(AcquisitionFilterModel model)
AcquisitionTeamMemberPersonId = model.AcquisitionTeamMemberPersonId,
AcquisitionTeamMemberOrganizationId = model.AcquisitionTeamMemberOrganizationId,
HasNoticeOfClaim = model.HasNoticeOfClaim,
Regions = model.Regions,

Sort = model.Sort,
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,12 @@ public class DispositionFilterModel : PageFilter
/// get/set - The MOTI Organization id to search by for disposition team members.
/// </summary>
public long? TeamMemberOrganizationId { get; set; }

/// <summary>
/// get/set - The region types.
/// </summary>
public IList<int> Regions { get; set; } = new List<int>();

#endregion

#region Constructors
Expand All @@ -74,15 +80,16 @@ public DispositionFilterModel(Dictionary<string, Microsoft.Extensions.Primitives
// We want case-insensitive query parameter properties.
var filter = new Dictionary<string, Microsoft.Extensions.Primitives.StringValues>(query, StringComparer.OrdinalIgnoreCase);

this.Pid = filter.GetStringValue(nameof(this.Pid));
this.Pin = filter.GetStringValue(nameof(this.Pin));
this.Address = filter.GetStringValue(nameof(this.Address));
this.FileNameOrNumberOrReference = filter.GetStringValue(nameof(this.FileNameOrNumberOrReference));
this.DispositionFileStatusCode = filter.GetStringValue(nameof(this.DispositionFileStatusCode));
this.DispositionStatusCode = filter.GetStringValue(nameof(this.DispositionStatusCode));
this.DispositionTypeCode = filter.GetStringValue(nameof(this.DispositionTypeCode));
this.TeamMemberPersonId = filter.GetLongNullValue(nameof(this.TeamMemberPersonId));
this.TeamMemberOrganizationId = filter.GetLongNullValue(nameof(this.TeamMemberOrganizationId));
Pid = filter.GetStringValue(nameof(this.Pid));
Pin = filter.GetStringValue(nameof(this.Pin));
Address = filter.GetStringValue(nameof(this.Address));
FileNameOrNumberOrReference = filter.GetStringValue(nameof(this.FileNameOrNumberOrReference));
DispositionFileStatusCode = filter.GetStringValue(nameof(this.DispositionFileStatusCode));
DispositionStatusCode = filter.GetStringValue(nameof(this.DispositionStatusCode));
DispositionTypeCode = filter.GetStringValue(nameof(this.DispositionTypeCode));
TeamMemberPersonId = filter.GetLongNullValue(nameof(this.TeamMemberPersonId));
TeamMemberOrganizationId = filter.GetLongNullValue(nameof(this.TeamMemberOrganizationId));
Regions = filter.GetIntArrayValue(nameof(Regions));

this.Sort = filter.GetStringArrayValue(nameof(this.Sort));
}
Expand Down Expand Up @@ -110,6 +117,7 @@ public static explicit operator DispositionFilter(DispositionFilterModel model)
DispositionTypeCode = model.DispositionTypeCode,
TeamMemberPersonId = model.TeamMemberPersonId,
TeamMemberOrganizationId = model.TeamMemberOrganizationId,
Regions = model.Regions,

Sort = model.Sort,
};
Expand Down
47 changes: 24 additions & 23 deletions source/backend/api/Areas/Leases/Models/LeaseFilterModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,6 @@ public class LeaseFilterModel : PageFilter
/// </summary>
public DateOnly? ExpiryEndDate { get; set; }

/// <summary>
/// get/set - The region type.
/// </summary>
public int? RegionType { get; set; }

/// <summary>
/// get/set - Filter for additional lease details.
/// </summary>
Expand All @@ -83,6 +78,12 @@ public class LeaseFilterModel : PageFilter
/// get/set - Filter to return only receivable leases.
/// </summary>
public bool? IsReceivable { get; set; }

/// <summary>
/// get/set - The region types.
/// </summary>
public IList<short> Regions { get; set; } = new List<short>();

#endregion

#region Constructors
Expand All @@ -104,22 +105,23 @@ public LeaseFilterModel(Dictionary<string, Microsoft.Extensions.Primitives.Strin
// We want case-insensitive query parameter properties.
var filter = new Dictionary<string, Microsoft.Extensions.Primitives.StringValues>(query, StringComparer.OrdinalIgnoreCase);

this.Pid = filter.GetStringValue(nameof(this.Pid));
this.Pin = filter.GetStringValue(nameof(this.Pin));
this.LFileNo = filter.GetStringValue(nameof(this.LFileNo));
this.Address = filter.GetStringValue(nameof(this.Address));
this.Historical = filter.GetStringValue(nameof(this.Historical));
this.LeaseStatusTypes = filter.GetStringArrayValue(nameof(this.LeaseStatusTypes));
this.TenantName = filter.GetStringValue(nameof(this.TenantName));
this.Programs = filter.GetStringArrayValue(nameof(this.Programs));
this.ExpiryStartDate = filter.GetDateOnlyNullValue(nameof(this.ExpiryStartDate));
this.ExpiryEndDate = filter.GetDateOnlyNullValue(nameof(this.ExpiryEndDate));
this.RegionType = filter.GetIntNullValue(nameof(this.RegionType));
this.Details = filter.GetStringValue(nameof(this.Details));
this.LeaseTeamPersonId = filter.GetIntNullValue(nameof(this.LeaseTeamPersonId));
this.LeaseTeamOrganizationId = filter.GetIntNullValue(nameof(this.LeaseTeamOrganizationId));
this.IsReceivable = filter.GetValue<bool?>(nameof(this.IsReceivable));
this.Sort = filter.GetStringArrayValue(nameof(this.Sort));
Pid = filter.GetStringValue(nameof(this.Pid));
Pin = filter.GetStringValue(nameof(this.Pin));
LFileNo = filter.GetStringValue(nameof(this.LFileNo));
Address = filter.GetStringValue(nameof(this.Address));
Historical = filter.GetStringValue(nameof(this.Historical));
LeaseStatusTypes = filter.GetStringArrayValue(nameof(this.LeaseStatusTypes));
TenantName = filter.GetStringValue(nameof(this.TenantName));
Programs = filter.GetStringArrayValue(nameof(this.Programs));
ExpiryStartDate = filter.GetDateOnlyNullValue(nameof(this.ExpiryStartDate));
ExpiryEndDate = filter.GetDateOnlyNullValue(nameof(this.ExpiryEndDate));
Details = filter.GetStringValue(nameof(this.Details));
LeaseTeamPersonId = filter.GetIntNullValue(nameof(this.LeaseTeamPersonId));
LeaseTeamOrganizationId = filter.GetIntNullValue(nameof(this.LeaseTeamOrganizationId));
IsReceivable = filter.GetValue<bool?>(nameof(this.IsReceivable));
Regions = filter.GetShortArrayValue(nameof(Regions));

Sort = filter.GetStringArrayValue(nameof(this.Sort));
}
#endregion

Expand All @@ -146,11 +148,11 @@ public static explicit operator LeaseFilter(LeaseFilterModel model)
Programs = model.Programs,
ExpiryStartDate = model.ExpiryStartDate,
ExpiryEndDate = model.ExpiryEndDate,
RegionType = model.RegionType,
Details = model.Details?.Trim(),
LeaseTeamOrganizationId = model.LeaseTeamOrganizationId,
LeaseTeamPersonId = model.LeaseTeamPersonId,
IsReceivable = model.IsReceivable,
Regions = model.Regions,

Sort = model.Sort,
};
Expand Down Expand Up @@ -180,7 +182,6 @@ public override bool IsValid()
|| (Programs.Count != 0)
|| ExpiryStartDate.HasValue
|| ExpiryEndDate.HasValue
|| RegionType.HasValue
|| LeaseTeamPersonId.HasValue
|| LeaseTeamOrganizationId.HasValue
|| IsReceivable.HasValue
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,11 @@ public class ManagementFilterModel : PageFilter
/// </summary>
public bool HasNoticeOfClaim { get; set; }

/// <summary>
/// get/set - The region types.
/// </summary>
public IList<short> Regions { get; set; } = new List<short>();

#endregion

#region Constructors
Expand Down Expand Up @@ -101,6 +106,7 @@ public ManagementFilterModel(Dictionary<string, Microsoft.Extensions.Primitives.
TeamMemberPersonId = filter.GetLongNullValue(nameof(TeamMemberPersonId));
TeamMemberOrganizationId = filter.GetLongNullValue(nameof(TeamMemberOrganizationId));
HasNoticeOfClaim = filter.GetBoolValue(nameof(HasNoticeOfClaim));
Regions = filter.GetShortArrayValue(nameof(Regions));

Sort = filter.GetStringArrayValue(nameof(Sort));
}
Expand Down Expand Up @@ -130,6 +136,7 @@ public static explicit operator ManagementFilter(ManagementFilterModel model)
TeamMemberPersonId = model.TeamMemberPersonId,
TeamMemberOrganizationId = model.TeamMemberOrganizationId,
HasNoticeOfClaim = model.HasNoticeOfClaim,
Regions = model.Regions,

Sort = model.Sort,
};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System.Collections.Generic;
using Pims.Dal.Entities.Models;

namespace Pims.Api.Areas.Projects.Models
Expand All @@ -14,7 +15,10 @@ public ProjectFilterModel()

public string ProjectStatusCode { get; set; }

public string ProjectRegionCode { get; set; }
/// <summary>
/// get/set - The region types.
/// </summary>
public IList<short> Regions { get; set; } = new List<short>();

public static explicit operator ProjectFilter(ProjectFilterModel model)
{
Expand All @@ -26,7 +30,7 @@ public static explicit operator ProjectFilter(ProjectFilterModel model)
ProjectNumber = model.ProjectNumber?.Trim(),
ProjectName = model.ProjectName?.Trim(),
ProjectStatusCode = model.ProjectStatusCode,
ProjectRegionCode = model.ProjectRegionCode,
Regions = model.Regions,

Sort = model.Sort,
};
Expand Down
9 changes: 2 additions & 7 deletions source/backend/api/Services/AcquisitionFileService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -93,20 +93,17 @@ public Paged<PimsAcquisitionFile> GetPage(AcquisitionFilter filter)

_user.ThrowIfNotAuthorized(Permissions.AcquisitionFileView);

// Limit search results to user's assigned region(s)
var pimsUser = _userRepository.GetUserInfoByKeycloakUserId(_user.GetUserKey());
var userRegions = pimsUser.PimsRegionUsers.Select(r => r.RegionCode).ToHashSet();
long? contractorPersonId = pimsUser.IsContractor ? pimsUser.PersonId : null;

return _acqFileRepository.GetPageDeep(filter, userRegions, contractorPersonId);
return _acqFileRepository.GetPageDeep(filter, contractorPersonId);
}

public List<AcquisitionFileExportModel> GetAcquisitionFileExport(AcquisitionFilter filter)
{
_logger.LogInformation("Searching all Acquisition Files matching the filter: {filter}", filter);
_user.ThrowIfNotAuthorized(Permissions.AcquisitionFileView);

// Limit search results to user's assigned region(s)
var pimsUser = _userRepository.GetUserInfoByKeycloakUserId(_user.GetUserKey());
var userRegions = pimsUser.PimsRegionUsers.Select(r => r.RegionCode).ToHashSet();
long? contractorPersonId = pimsUser.IsContractor ? pimsUser.PersonId : null;
Expand Down Expand Up @@ -670,12 +667,10 @@ public List<PimsAcquisitionFile> GetAcquisitionSubFiles(long id)
throw new BadRequestException("Acquisition file should not be a sub-file.");
}

// Limit search results to user's assigned region(s)
var pimsUser = _userRepository.GetUserInfoByKeycloakUserId(_user.GetUserKey());
var userRegions = pimsUser.PimsRegionUsers.Select(r => r.RegionCode).ToHashSet();
long? contractorPersonId = pimsUser.IsContractor ? pimsUser.PersonId : null;

return _acqFileRepository.GetAcquisitionSubFiles(id, userRegions, contractorPersonId);
return _acqFileRepository.GetAcquisitionSubFiles(id, contractorPersonId);
}

private void CheckFileNumberDuplicate(PimsAcquisitionFile acquisitionFile)
Expand Down
15 changes: 8 additions & 7 deletions source/backend/api/Services/LeaseReportsService.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using Pims.Api.Models.CodeTypes;
using Pims.Core.Extensions;
using Pims.Core.Security;
using Pims.Dal.Entities;
using Pims.Dal.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using static Pims.Dal.Entities.PimsLeaseStatusType;

namespace Pims.Api.Services
Expand Down Expand Up @@ -40,9 +41,9 @@ public IEnumerable<PimsLease> GetAggregatedLeaseReport(int fiscalYearStart)
{
ExpiryAfterDate = fiscalYearStartDate,
StartBeforeDate = fiscalYearStartDate.AddYears(1).AddDays(-1),
NotInStatus = new List<string>() { PimsLeaseStatusTypes.DRAFT, PimsLeaseStatusTypes.DISCARD, PimsLeaseStatusTypes.DUPLICATE },
NotInStatus = new List<string>() { LeaseStatusTypes.DRAFT.ToString(), LeaseStatusTypes.DISCARD.ToString(), LeaseStatusTypes.DUPLICATE.ToString() },
IsReceivable = true,
}, pimsUser.PimsRegionUsers.Select(u => u.RegionCode).ToHashSet(),
},
true,
contractorPersonId);
}
Expand All @@ -60,7 +61,7 @@ public IEnumerable<PimsLeasePayment> GetLeasePaymentsReport(int fiscalYearStart)

var allPayments = _leasePaymentRepository.GetAllByDateRange(fiscalYearStartDate, fiscalYearEndDate, contractorPersonId).ToList();
var leaseIds = allPayments.Select(payment => payment.LeasePeriod.LeaseId);
var activeLeases = _leaseService.GetAllByIds(leaseIds).Where(l => l.LeaseStatusTypeCode != PimsLeaseStatusTypes.DUPLICATE && l.LeaseStatusTypeCode != PimsLeaseStatusTypes.DRAFT && l.LeaseStatusTypeCode != PimsLeaseStatusTypes.DISCARD).ToList();
var activeLeases = _leaseService.GetAllByIds(leaseIds).Where(l => l.LeaseStatusTypeCode != LeaseStatusTypes.DUPLICATE.ToString() && l.LeaseStatusTypeCode != LeaseStatusTypes.DRAFT.ToString() && l.LeaseStatusTypeCode != LeaseStatusTypes.DISCARD.ToString()).ToList();
var activePayments = allPayments.Where(payment => activeLeases.Any(lease => lease.LeaseId == payment.LeasePeriod.LeaseId)).ToList();

// Required to display the latest payment on the lease, which may not be part of the current date range filter of payments. This ensures that all payments for a lease associated to one of the payments in the date range are included.
Expand Down
7 changes: 4 additions & 3 deletions source/backend/api/Services/LeaseService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -134,13 +134,14 @@
{
_logger.LogInformation("Getting lease page {filter}", filter);
_user.ThrowIfNotAuthorized(Permissions.LeaseView);

filter.Page = all.HasValue && all.Value ? 1 : filter.Page;
filter.Quantity = all.HasValue && all.Value ? _leaseRepository.Count() : filter.Quantity;

var pimsUser = _userRepository.GetUserInfoByKeycloakUserId(_user.GetUserKey());
long? contractorPersonId = pimsUser.IsContractor ? pimsUser.PersonId : null;

var leases = _leaseRepository.GetPage(filter, pimsUser.PimsRegionUsers.Select(u => u.RegionCode).ToHashSet(), contractorPersonId);
return leases;
return _leaseRepository.GetPage(filter, contractorPersonId);
}

public IEnumerable<PimsInsurance> GetInsuranceByLeaseId(long leaseId)
Expand Down Expand Up @@ -554,9 +555,9 @@
}
}

private static void ValidateRenewalDates(PimsLease lease, PimsLease currentLease, IEnumerable<UserOverrideCode> userOverrides)

Check failure on line 558 in source/backend/api/Services/LeaseService.cs

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Refactor this method to reduce its Cognitive Complexity from 21 to the 15 allowed.

See more on https://sonarcloud.io/project/issues?id=bcgov_PSP&issues=AZ2cOz7yhWggb7hs_cvp&open=AZ2cOz7yhWggb7hs_cvp&pullRequest=5285
{
if (lease.LeaseStatusTypeCode != PimsLeaseStatusTypes.ACTIVE)
if (lease.LeaseStatusTypeCode != LeaseStatusTypes.ACTIVE.ToString())
{
return;
}
Expand All @@ -568,7 +569,7 @@
{
var currentRenewal = currentLease.PimsLeaseRenewals.FirstOrDefault(x => x.LeaseRenewalId == renewal.LeaseRenewalId);
renewalsModified = currentLease.PimsLeaseRenewals.Count != lease.PimsLeaseRenewals.Count
|| !currentRenewal.Equals(renewal);

Check warning on line 572 in source/backend/api/Services/LeaseService.cs

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

'currentRenewal' is null on at least one execution path.

See more on https://sonarcloud.io/project/issues?id=bcgov_PSP&issues=AZ2cOz7yhWggb7hs_cvq&open=AZ2cOz7yhWggb7hs_cvq&pullRequest=5285

if (renewal.IsExercised == true)
{
Expand Down
10 changes: 8 additions & 2 deletions source/backend/api/Services/ManagementFileService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
{
private readonly ClaimsPrincipal _user;
private readonly ILogger _logger;
private readonly IUserRepository _userRepository;
private readonly IManagementFileRepository _managementFileRepository;
private readonly IManagementFilePropertyRepository _managementFilePropertyRepository;
private readonly IPropertyRepository _propertyRepository;
Expand All @@ -32,19 +33,20 @@
private readonly IManagementActivityRepository _managementActivityRepository;
private readonly IFilePropertyLocationUpdateSolver _propertyLocationSolver;

public ManagementFileService(
ClaimsPrincipal user,
ILogger<ManagementFileService> logger,
IManagementFileRepository managementFileRepository,
IManagementFilePropertyRepository managementFilePropertyRepository,
IPropertyRepository propertyRepository,
IPropertyService propertyService,
ILookupRepository lookupRepository,
INoteRelationshipRepository<PimsManagementFileNote> entityNoteRepository,
IManagementFileStatusSolver managementStatusSolver,
IPropertyOperationService propertyOperationService,
IManagementActivityRepository managementActivityRepository,
IFilePropertyLocationUpdateSolver propertyLocationSolver)
IFilePropertyLocationUpdateSolver propertyLocationSolver,
IUserRepository userRepository)

Check warning on line 49 in source/backend/api/Services/ManagementFileService.cs

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Constructor has 13 parameters, which is greater than the 7 authorized.

See more on https://sonarcloud.io/project/issues?id=bcgov_PSP&issues=AZ2cOz8EhWggb7hs_cvr&open=AZ2cOz8EhWggb7hs_cvr&pullRequest=5285
{
_user = user;
_logger = logger;
Expand All @@ -58,6 +60,7 @@
_propertyOperationService = propertyOperationService;
_managementActivityRepository = managementActivityRepository;
_propertyLocationSolver = propertyLocationSolver;
_userRepository = userRepository;
}

public PimsManagementFile Add(PimsManagementFile managementFile, IEnumerable<UserOverrideCode> userOverrides)
Expand Down Expand Up @@ -288,7 +291,10 @@
_logger.LogDebug("Management file search with filter: {filter}", filter);
_user.ThrowIfNotAuthorized(Permissions.ManagementView);

return _managementFileRepository.GetPageDeep(filter);
var pimsUser = _userRepository.GetUserInfoByKeycloakUserId(_user.GetUserKey());
long? contractorPersonId = pimsUser.IsContractor ? pimsUser.PersonId : null;

return _managementFileRepository.GetPageDeep(filter, contractorPersonId);
}

public IEnumerable<PimsManagementFileContact> GetContacts(long id)
Expand Down
Loading
Loading