Skip to content

Commit

Permalink
MODINVOICE-93. Update error code names (#463)
Browse files Browse the repository at this point in the history
  • Loading branch information
SerhiiNosko authored Jan 8, 2024
1 parent 19242c2 commit 058e823
Show file tree
Hide file tree
Showing 7 changed files with 309 additions and 334 deletions.
5 changes: 4 additions & 1 deletion descriptors/ModuleDescriptor-template.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,10 @@
"permissionsRequired": ["invoice.invoices.item.put"],
"permissionsDesired": [
"invoices.acquisitions-units-assignments.manage",
"invoices.fiscal-year.update"
"invoices.fiscal-year.update",
"invoice.item.approve",
"invoice.item.pay",
"invoice.item.cancel"
],
"modulePermissions": [
"configuration.entries.collection.get",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public enum AcqDesiredPermissions {
MANAGE("invoices.acquisitions-units-assignments.manage"),
APPROVE("invoice.item.approve"),
PAY("invoice.item.pay"),
CANCEL("invoice.item.cancel"),
FISCAL_YEAR_UPDATE("invoices.fiscal-year.update");

private String permission;
Expand Down
1 change: 1 addition & 0 deletions src/main/java/org/folio/invoices/utils/ErrorCodes.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ public enum ErrorCodes {
USER_HAS_NO_FISCAL_YEAR_UPDATE_PERMISSIONS("userHasNoFiscalYearUpdatePermission", "User does not have permissions to update fiscal year - operation is restricted"),
USER_HAS_NO_APPROVE_PERMISSIONS("userHasNoInvoiceApprovePermission", "User does not have permissions to approve this invoice - operation is restricted"),
USER_HAS_NO_PAY_PERMISSIONS("userHasNoInvoicePayPermission", "User does not have permissions to pay this invoice - operation is restricted"),
USER_HAS_NO_CANCEL_PERMISSIONS("userHasNoInvoiceCancelPermission", "User does not have permissions to cancel this invoice - operation is restricted"),
ACQ_UNITS_NOT_FOUND("acqUnitsNotFound", "Acquisitions units assigned to the record not found"),
PENDING_PAYMENT_ERROR("pendingPaymentError", "Failed to create pending payment"),
INVOICE_PAYMENT_FAILURE("invoicePaymentFailure", "Invoice payment failure"),
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/org/folio/rest/impl/InvoiceHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,11 @@
import static org.folio.invoices.utils.ResourcePathResolver.INVOICES;
import static org.folio.services.voucher.VoucherCommandService.VOUCHER_NUMBER_PREFIX_CONFIG_QUERY;
import static org.folio.utils.UserPermissionsUtil.verifyUserHasAssignPermission;
import static org.folio.utils.UserPermissionsUtil.verifyUserHasManagePermission;
import static org.folio.utils.UserPermissionsUtil.verifyUserHasFiscalYearUpdatePermission;
import static org.folio.utils.UserPermissionsUtil.verifyUserHasInvoicePayPermission;
import static org.folio.utils.UserPermissionsUtil.verifyUserHasInvoiceApprovePermission;
import static org.folio.utils.UserPermissionsUtil.verifyUserHasInvoiceCancelPermission;
import static org.folio.utils.UserPermissionsUtil.verifyUserHasInvoicePayPermission;
import static org.folio.utils.UserPermissionsUtil.verifyUserHasManagePermission;

import java.util.Collection;
import java.util.Collections;
Expand Down Expand Up @@ -351,6 +352,7 @@ private Future<Void> validateAndHandleInvoiceStatusTransition(Invoice invoice, I
verifyUserHasFiscalYearUpdatePermission(invoice.getFiscalYearId(), invoiceFromStorage.getFiscalYearId(), okapiHeaders);
verifyUserHasInvoiceApprovePermission(invoice.getStatus(), invoiceFromStorage.getStatus(), okapiHeaders);
verifyUserHasInvoicePayPermission(invoice.getStatus(), invoiceFromStorage.getStatus(), okapiHeaders);
verifyUserHasInvoiceCancelPermission(invoice.getStatus(), invoiceFromStorage.getStatus(), okapiHeaders);

setSystemGeneratedData(invoiceFromStorage, invoice);
return null;
Expand Down
29 changes: 22 additions & 7 deletions src/main/java/org/folio/utils/UserPermissionsUtil.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package org.folio.utils;

import static org.folio.invoices.utils.AcqDesiredPermissions.APPROVE;
import static org.folio.invoices.utils.AcqDesiredPermissions.ASSIGN;
import static org.folio.invoices.utils.AcqDesiredPermissions.CANCEL;
import static org.folio.invoices.utils.AcqDesiredPermissions.FISCAL_YEAR_UPDATE;
import static org.folio.invoices.utils.AcqDesiredPermissions.MANAGE;
import static org.folio.invoices.utils.AcqDesiredPermissions.PAY;
import static org.folio.invoices.utils.AcqDesiredPermissions.APPROVE;
import static org.folio.invoices.utils.AcqDesiredPermissions.FISCAL_YEAR_UPDATE;
import static org.folio.invoices.utils.ErrorCodes.USER_HAS_NO_FISCAL_YEAR_UPDATE_PERMISSIONS;
import static org.folio.invoices.utils.ErrorCodes.USER_HAS_NO_ACQ_PERMISSIONS;
import static org.folio.invoices.utils.ErrorCodes.*;
Expand Down Expand Up @@ -68,33 +69,47 @@ public static void verifyUserHasManagePermission(List<String> newAcqUnitIds, Lis
}

/**
* This method checks if user has permission to approve invoice in case when invoice status was changed.
* This method checks if user has permission to approve invoice in case when invoice status was changed to APPROVED.
*
* @param newInvoiceStatus the new invoice status
* @param statusFromStorage the invoice status from DB
* @param okapiHeaders the okapi headers
* @throws HttpException if user does not have permission to approve invoice
*/
public static void verifyUserHasInvoiceApprovePermission(Invoice.Status newInvoiceStatus, Invoice.Status statusFromStorage, Map<String, String> okapiHeaders) {
if (isInvoiceStatusUpdated(newInvoiceStatus, statusFromStorage) && isUserDoesNotHaveDesiredPermission(APPROVE, okapiHeaders)) {
if (isInvoiceStatusUpdated(newInvoiceStatus, statusFromStorage) && Invoice.Status.APPROVED == newInvoiceStatus && isUserDoesNotHaveDesiredPermission(APPROVE, okapiHeaders)) {
throw new HttpException(HttpStatus.HTTP_FORBIDDEN.toInt(), USER_HAS_NO_APPROVE_PERMISSIONS);
}
}

/**
* This method checks if user has permission to pay invoice in case when invoice status was changed.
* This method checks if user has permission to pay invoice in case when invoice status was changed to PAID.
*
* @param newInvoiceStatus the new invoice status
* @param statusFromStorage the invoice status from DB
* @param okapiHeaders the okapi headers
* @throws HttpException if user does not have permission to pay invoice
*/
public static void verifyUserHasInvoicePayPermission(Invoice.Status newInvoiceStatus, Invoice.Status statusFromStorage, Map<String, String> okapiHeaders) {
if (isInvoiceStatusUpdated(newInvoiceStatus, statusFromStorage) && isUserDoesNotHaveDesiredPermission(PAY, okapiHeaders)) {
public static void verifyUserHasInvoicePayPermission(Invoice.Status newInvoiceStatus, Invoice.Status statusFromStorage, Map<String, String> okapiHeaders) {
if (isInvoiceStatusUpdated(newInvoiceStatus, statusFromStorage) && Invoice.Status.PAID == newInvoiceStatus && isUserDoesNotHaveDesiredPermission(PAY, okapiHeaders)) {
throw new HttpException(HttpStatus.HTTP_FORBIDDEN.toInt(), USER_HAS_NO_PAY_PERMISSIONS);
}
}

/**
* This method checks if user has permission to cancel invoice in case wher invoice status was changed to CANCELLED.
*
* @param newInvoiceStatus the new invoice status
* @param statusFromStorage the invoice status from DB
* @param okapiHeaders the okapi headers
* @throws HttpException if user does not have permission to cancel invoice
*/
public static void verifyUserHasInvoiceCancelPermission(Invoice.Status newInvoiceStatus, Invoice.Status statusFromStorage, Map<String, String> okapiHeaders) {
if (isInvoiceStatusUpdated(newInvoiceStatus, statusFromStorage) && Invoice.Status.CANCELLED == newInvoiceStatus && isUserDoesNotHaveDesiredPermission(CANCEL, okapiHeaders)) {
throw new HttpException(HttpStatus.HTTP_FORBIDDEN.toInt(), USER_HAS_NO_CANCEL_PERMISSIONS);
}
}

/**
* The method checks whether the user has the desired permission to update the fiscal year.
*
Expand Down
Loading

0 comments on commit 058e823

Please sign in to comment.