law-common 11.1.1-beta.2 → 11.1.1-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,6 +4,8 @@ exports.vendorInvoiceFlowConfig = void 0;
4
4
  const vendor_invoice_action_enum_1 = require("../enums/vendor_invoice_action.enum");
5
5
  const vendor_invoice_action_status_enum_1 = require("../enums/vendor_invoice_action_status_enum");
6
6
  const base_flow_config_factory_1 = require("./base-flow-config.factory");
7
+ const exceptions_1 = require("../../exceptions");
8
+ const enums_1 = require("../../enums");
7
9
  const VENDOR_INVOICE_APPROVE_PERMISSION = ["VENDOR_INVOICE_APPROVE"];
8
10
  const VENDOR_INVOICE_UPDATE_PERMISSION = ["VENDOR_INVOICE_UPDATE"];
9
11
  const ACTION_MAP = {
@@ -56,6 +58,12 @@ const createTransitionApprovedStatusPaymentAction = createTransition((context) =
56
58
  return vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.PAYMENT_DISBURSE;
57
59
  }
58
60
  }
61
+ else {
62
+ throw new exceptions_1.AppBadRequestException({
63
+ key: enums_1.ErrorKeyEnum.VENDOR_INVOICE_FLOW_CONTEXT_DATA,
64
+ message: ["Both vendorInvoicePayment and existingVendorInvoice must be provided in the context data for processing payment action."],
65
+ });
66
+ }
59
67
  return vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.APPROVED;
60
68
  });
61
69
  const transitionApprovedStatusPaymentAction = createActionConfig(vendor_invoice_action_enum_1.VendorInvoiceActionEnum.PAYMENT, createTransitionApprovedStatusPaymentAction);
@@ -4,6 +4,8 @@ import { BaseEntityModel } from "./base.entity.model";
4
4
  import { VendorInvoiceActionEnum } from "../enums/vendor_invoice_action.enum";
5
5
  import { VendorInvoiceActionStatusEnum } from "../enums/vendor_invoice_action_status_enum";
6
6
  import { VendorInvoiceStatusEnum } from "../enums/vendor_invoice_status_enum";
7
+ import { IVendorInvoiceFlowConfigContextData } from "../flow-configs/vendor-invoice-flow.config";
8
+ import { IUserEntity } from "../interface/user.entity.interface";
7
9
  import { IVendorInvoiceEntity } from "../interface/vendor_invoice.entity.interface";
8
10
  import { IRowActions } from "./interface/row-actions.interface";
9
11
  import { OfficeLocationEntityModel } from "./office_location.entity.model";
@@ -109,4 +111,5 @@ export declare class VendorInvoiceEntityModel extends BaseEntityModel<EntityEnum
109
111
  * @returns The next voucher number string in format `<FY-1><FY><MM><DD><###>`
110
112
  */
111
113
  static getNextVoucherNumber(existingVendorInvoices: VendorInvoiceEntityModel[]): string;
114
+ getNextStatus(currentUser: IUserEntity, action: VendorInvoiceActionEnum, vendorInvoiceFlowConfigContextData: IVendorInvoiceFlowConfigContextData): VendorInvoiceActionStatusEnum;
112
115
  }
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VendorInvoiceEntityModel = void 0;
4
4
  const entity_utils_interface_1 = require("../interface/entity.utils.interface");
5
5
  const base_entity_model_1 = require("./base.entity.model");
6
+ const error_key_enum_1 = require("../../enums/error.key.enum");
7
+ const exceptions_1 = require("../../exceptions");
6
8
  const utils_1 = require("../../utils");
7
9
  const relation_type_enum_1 = require("../enums/relation-type.enum");
8
10
  const vendor_invoice_action_status_enum_1 = require("../enums/vendor_invoice_action_status_enum");
@@ -193,6 +195,50 @@ class VendorInvoiceEntityModel extends base_entity_model_1.BaseEntityModel {
193
195
  }
194
196
  return `${basePrefix}${String(maxSequence + 1).padStart(3, "0")}`;
195
197
  }
198
+ getNextStatus(currentUser, action, vendorInvoiceFlowConfigContextData) {
199
+ const actionStatus = this.actionStatus;
200
+ if (!actionStatus) {
201
+ throw new exceptions_1.AppBadRequestException({
202
+ key: error_key_enum_1.ErrorKeyEnum.STATUS,
203
+ message: [`Status not found: ${actionStatus}`],
204
+ });
205
+ }
206
+ const flowForStatus = vendor_invoice_flow_config_1.vendorInvoiceFlowConfig[actionStatus];
207
+ if (!flowForStatus) {
208
+ throw new exceptions_1.AppBadRequestException({
209
+ key: error_key_enum_1.ErrorKeyEnum.STATUS,
210
+ message: [`No flow configuration found for status: ${actionStatus}`],
211
+ });
212
+ }
213
+ if (!action) {
214
+ throw new exceptions_1.AppBadRequestException({
215
+ key: error_key_enum_1.ErrorKeyEnum.ACTION_DATA,
216
+ message: ["actionData is required"],
217
+ });
218
+ }
219
+ const matchingPermissionConfig = flowForStatus.actions[action];
220
+ if (!matchingPermissionConfig) {
221
+ throw new exceptions_1.AppBadRequestException({
222
+ key: error_key_enum_1.ErrorKeyEnum.ACTION,
223
+ message: [`Action '${action}' is not valid for the current status '${actionStatus}'.`],
224
+ });
225
+ }
226
+ if (!currentUser.permissions || currentUser.permissions.length === 0) {
227
+ throw new exceptions_1.AppBadRequestException({
228
+ key: error_key_enum_1.ErrorKeyEnum.PERMISSIONS,
229
+ message: ["Permission not available for currentUser"],
230
+ });
231
+ }
232
+ const hasPermission = matchingPermissionConfig.permissions.some((permission) => currentUser.permissions.includes(permission));
233
+ if (!hasPermission) {
234
+ throw new exceptions_1.AppBadRequestException({
235
+ key: error_key_enum_1.ErrorKeyEnum.PERMISSION,
236
+ message: [`Current user does not have permission to ${action} leaveApproval. Required permissions: ${matchingPermissionConfig.permissions.join(", ")}`],
237
+ });
238
+ }
239
+ const nextStatus = matchingPermissionConfig.next(vendorInvoiceFlowConfigContextData);
240
+ return nextStatus;
241
+ }
196
242
  }
197
243
  exports.VendorInvoiceEntityModel = VendorInvoiceEntityModel;
198
244
  VendorInvoiceEntityModel.relationConfigs = [
@@ -34,5 +34,6 @@ export declare enum ErrorKeyEnum {
34
34
  BILLING_EXPORT_TYPE = "BILLING_EXPORT_TYPE",
35
35
  VENDOR_INVOICE_ITEMS = "VENDOR_INVOICE_ITEMS",
36
36
  PROJECT_USER_MAPPING = "PROJECT_USER_MAPPING",
37
- CONFIGURATION_KEY = "CONFIGURATION_KEY"
37
+ CONFIGURATION_KEY = "CONFIGURATION_KEY",
38
+ VENDOR_INVOICE_FLOW_CONTEXT_DATA = "VENDOR_INVOICE_FLOW_CONTEXT_DATA"
38
39
  }
@@ -39,4 +39,5 @@ var ErrorKeyEnum;
39
39
  ErrorKeyEnum["VENDOR_INVOICE_ITEMS"] = "VENDOR_INVOICE_ITEMS";
40
40
  ErrorKeyEnum["PROJECT_USER_MAPPING"] = "PROJECT_USER_MAPPING";
41
41
  ErrorKeyEnum["CONFIGURATION_KEY"] = "CONFIGURATION_KEY";
42
+ ErrorKeyEnum["VENDOR_INVOICE_FLOW_CONTEXT_DATA"] = "VENDOR_INVOICE_FLOW_CONTEXT_DATA";
42
43
  })(ErrorKeyEnum || (exports.ErrorKeyEnum = ErrorKeyEnum = {}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "law-common",
3
- "version": "11.1.1-beta.2",
3
+ "version": "11.1.1-beta.4",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "files": [