diff --git a/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/Domain/AccountCodings/AccountCoding.cs b/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/Domain/AccountCodings/AccountCoding.cs index d7a058ebf..f68e1684d 100644 --- a/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/Domain/AccountCodings/AccountCoding.cs +++ b/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/Domain/AccountCodings/AccountCoding.cs @@ -3,11 +3,13 @@ using System; using Volo.Abp.Domain.Entities.Auditing; using System.Linq; +using Volo.Abp.MultiTenancy; namespace Unity.Payments.Domain.AccountCodings { - public class AccountCoding : AuditedAggregateRoot + public class AccountCoding : AuditedAggregateRoot, IMultiTenant { + public Guid? TenantId { get; set; } public string MinistryClient { get; private set; } public string Responsibility { get; private set; } public string ServiceLine { get; private set; } diff --git a/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/PaymentRequests/PaymentRequestAppService.cs b/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/PaymentRequests/PaymentRequestAppService.cs index c34ff1413..c615ebc00 100644 --- a/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/PaymentRequests/PaymentRequestAppService.cs +++ b/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/PaymentRequests/PaymentRequestAppService.cs @@ -419,8 +419,12 @@ protected internal async Task> MapToDtoAndLoadDetailsAsy { paymentRequestDto.CreatorUser = paymentRequestUserDto; } - paymentRequestDto.AccountCodingDisplay = await GetAccountDistributionCode(paymentRequestDto.AccountCoding); + if(paymentRequestDto != null && paymentRequestDto.AccountCoding != null) + { + paymentRequestDto.AccountCodingDisplay = await GetAccountDistributionCode(paymentRequestDto.AccountCoding); + } + foreach (var expenseApproval in paymentRequestDto.ExpenseApprovals) { if (expenseApproval.DecisionUserId.HasValue diff --git a/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/PaymentsApplicationAutoMapperProfile.cs b/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/PaymentsApplicationAutoMapperProfile.cs index f437fd146..1903c3ef4 100644 --- a/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/PaymentsApplicationAutoMapperProfile.cs +++ b/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Application/PaymentsApplicationAutoMapperProfile.cs @@ -39,6 +39,7 @@ public PaymentsApplicationAutoMapperProfile() CreateMap(); CreateMap() + .ForMember(dest => dest.TenantId, opt => opt.Ignore()) .ForMember(dest => dest.LastModificationTime, opt => opt.Ignore()) .ForMember(dest => dest.LastModifierId, opt => opt.Ignore()) .ForMember(dest => dest.CreationTime, opt => opt.Ignore()) @@ -50,6 +51,7 @@ public PaymentsApplicationAutoMapperProfile() CreateMap(); CreateMap(); CreateMap() + .ForMember(dest => dest.TenantId, opt => opt.Ignore()) .ForMember(dest => dest.LastModificationTime, opt => opt.Ignore()) .ForMember(dest => dest.LastModifierId, opt => opt.Ignore()) .ForMember(dest => dest.CreationTime, opt => opt.Ignore()) diff --git a/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Web/Pages/PaymentApprovals/PaymentsApprovalModel.cs b/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Web/Pages/PaymentApprovals/PaymentsApprovalModel.cs index 45c3925de..6b7acbade 100644 --- a/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Web/Pages/PaymentApprovals/PaymentsApprovalModel.cs +++ b/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Web/Pages/PaymentApprovals/PaymentsApprovalModel.cs @@ -45,6 +45,7 @@ public class PaymentsApprovalModel : IValidatableObject public string ToStatusText { get; set; } = string.Empty; public Guid? PreviousL1Approver { get; set; } + public bool HasUserPaymentThreshold { get; set; } public bool IsApproval { get; set; } public bool IsValid { get; set; } = false; @@ -64,7 +65,14 @@ public IEnumerable Validate(ValidationContext validationContex errorMessage: localizer["ApplicationPaymentRequest:Validations:L2ApproverRestriction"], memberNames: [nameof(PreviousL1Approver)] ); - } + } else if (IsApproval + && Status == PaymentRequestStatus.L2Pending && !HasUserPaymentThreshold) + { + yield return new ValidationResult( + errorMessage: "Your User has not been configured with an Approved Payment Threshold. Please contact your system administrator.", + memberNames: [nameof(PreviousL1Approver)] + ); + } } } } diff --git a/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Web/Pages/PaymentApprovals/UpdatePaymentRequestStatus.cshtml b/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Web/Pages/PaymentApprovals/UpdatePaymentRequestStatus.cshtml index d3804689d..63ab8ef87 100644 --- a/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Web/Pages/PaymentApprovals/UpdatePaymentRequestStatus.cshtml +++ b/applications/Unity.GrantManager/modules/Unity.Payments/src/Unity.Payments.Web/Pages/PaymentApprovals/UpdatePaymentRequestStatus.cshtml @@ -87,6 +87,7 @@ +
@@ -161,10 +162,17 @@ } - @if(ModelState.ContainsKey(nameof(PaymentsApprovalModel.PreviousL1Approver)) + @if (ModelState.ContainsKey(nameof(PaymentsApprovalModel.PreviousL1Approver)) && ModelState[nameof(PaymentsApprovalModel.PreviousL1Approver)]?.ValidationState == Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState.Invalid) { - @L["ApplicationPaymentRequest:Validations:L2ApproverRestrictionBatch"] + var previousL1ApproverState = ModelState[nameof(PaymentsApprovalModel.PreviousL1Approver)]; + if (previousL1ApproverState != null) + { + foreach (var error in previousL1ApproverState.Errors) + { + @error.ErrorMessage + } + } }