law-common 10.63.2 → 10.63.4-beta.0
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.
- package/dist/src/api/interface/vendor-invoice.entity.response.d.ts +5 -19
- package/dist/src/api/interface/vendor-invoice.entity.response.js +22 -0
- package/dist/src/api/interface/vendor_invoice.update.dto.interface.d.ts +2 -1
- package/dist/src/api/interface/vendor_invoice_item.update.dto.interface.d.ts +1 -4
- package/dist/src/api/interface/vendor_invoice_item.update.dto.interface.js +3 -0
- package/dist/src/entities/enums/vendor_invoice_action.enum.d.ts +3 -0
- package/dist/src/entities/enums/vendor_invoice_action.enum.js +7 -0
- package/dist/src/entities/enums/vendor_invoice_action_status_enum.d.ts +8 -6
- package/dist/src/entities/enums/vendor_invoice_action_status_enum.js +17 -10
- package/dist/src/entities/flow-configs/vendor-invoice-flow.config.d.ts +2 -11
- package/dist/src/entities/flow-configs/vendor-invoice-flow.config.js +192 -88
- package/dist/src/entities/interface/vendor_invoice.entity.interface.d.ts +5 -0
- package/dist/src/entities/interface/vendor_invoice_item.entity.interface.d.ts +5 -3
- package/dist/src/entities/model/vendor.entity.model.d.ts +17 -2
- package/dist/src/entities/model/vendor.entity.model.js +16 -1
- package/dist/src/entities/model/vendor_invoice.entity.model.d.ts +49 -0
- package/dist/src/entities/model/vendor_invoice.entity.model.js +90 -11
- package/dist/src/entities/model/vendor_invoice_item.entity.model.d.ts +20 -18
- package/dist/src/entities/model/vendor_invoice_item.entity.model.js +93 -66
- package/dist/src/utils/code.util.d.ts +2 -0
- package/dist/src/utils/code.util.js +4 -0
- package/dist/src/utils/models/date-code.model.util.d.ts +12 -0
- package/dist/src/utils/models/date-code.model.util.js +14 -0
- package/dist/src/utils/string.util.d.ts +11 -0
- package/dist/src/utils/string.util.js +11 -0
- package/package.json +3 -2
|
@@ -1,29 +1,15 @@
|
|
|
1
1
|
import { IVendorInvoiceEntity, VendorInvoiceActionStatusEnum, VendorInvoiceItemEntityModel } from "../../entities";
|
|
2
2
|
import { VendorInvoiceActionEnum } from "../../entities/enums/vendor_invoice_action.enum";
|
|
3
|
-
import { VendorInvoiceItemActionEnum } from "../../entities/enums/vendor_invoice_item_action.enum";
|
|
4
|
-
import { VendorInvoiceItemStatus } from "../../entities/enums/vendor_invoice_item_status.enum";
|
|
5
3
|
export interface IVendorInvoiceFlowContextData {
|
|
6
4
|
invoice: IVendorInvoiceEntity;
|
|
7
5
|
items: VendorInvoiceItemEntityModel[];
|
|
8
6
|
}
|
|
9
7
|
export type IVendorInvoiceFlowConfig = {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
[
|
|
14
|
-
|
|
15
|
-
next?: (data: IVendorInvoiceFlowContextData) => VendorInvoiceActionStatusEnum;
|
|
16
|
-
};
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
};
|
|
20
|
-
child: {
|
|
21
|
-
[key in VendorInvoiceItemStatus]?: {
|
|
22
|
-
actions: {
|
|
23
|
-
[key in VendorInvoiceItemActionEnum]?: {
|
|
24
|
-
permissions: string[];
|
|
25
|
-
next?: () => VendorInvoiceItemStatus;
|
|
26
|
-
};
|
|
8
|
+
[key in VendorInvoiceActionStatusEnum]?: {
|
|
9
|
+
actions: {
|
|
10
|
+
[key in VendorInvoiceActionEnum]?: {
|
|
11
|
+
permissions: string[];
|
|
12
|
+
next: () => VendorInvoiceActionStatusEnum;
|
|
27
13
|
};
|
|
28
14
|
};
|
|
29
15
|
};
|
|
@@ -1,2 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
// export type IVendorInvoiceFlowConfig = {
|
|
4
|
+
// parent: {
|
|
5
|
+
// [key in VendorInvoiceActionStatusEnum]?: {
|
|
6
|
+
// actions: {
|
|
7
|
+
// [key in VendorInvoiceActionEnum]?: {
|
|
8
|
+
// permissions: string[];
|
|
9
|
+
// next?: (data: IVendorInvoiceFlowContextData) => VendorInvoiceActionStatusEnum;
|
|
10
|
+
// };
|
|
11
|
+
// };
|
|
12
|
+
// };
|
|
13
|
+
// };
|
|
14
|
+
// child: {
|
|
15
|
+
// [key in VendorInvoiceItemStatus]?: {
|
|
16
|
+
// actions: {
|
|
17
|
+
// [key in VendorInvoiceItemActionEnum]?: {
|
|
18
|
+
// permissions: string[];
|
|
19
|
+
// next?: () => VendorInvoiceItemStatus;
|
|
20
|
+
// };
|
|
21
|
+
// };
|
|
22
|
+
// };
|
|
23
|
+
// };
|
|
24
|
+
// };
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { EntityEnum, EnumEntityType, VendorInvoiceActionEnum } from "../../entities";
|
|
1
|
+
import { EntityEnum, EnumEntityType, VendorInvoiceActionEnum, VendorInvoiceActionStatusEnum } from "../../entities";
|
|
2
2
|
import { IDeleteDocumentDetails } from "../../misc";
|
|
3
3
|
import { DeepPartialButRequired } from "./api.utils.interface";
|
|
4
4
|
import { IVendorInvoiceCreateDto } from "./vendor_invoice.create.dto.interface";
|
|
5
5
|
export type IVendorInvoiceUpdateDto = DeepPartialButRequired<IVendorInvoiceCreateDto, never> & {
|
|
6
6
|
deleteDocumentDetails?: IDeleteDocumentDetails<EnumEntityType<EntityEnum.VENDOR_INVOICE>>;
|
|
7
7
|
actionData: IVendorInvoiceActionDataDto;
|
|
8
|
+
actionStatus?: VendorInvoiceActionStatusEnum;
|
|
8
9
|
};
|
|
9
10
|
export interface IVendorInvoiceActionDataDto {
|
|
10
11
|
action: VendorInvoiceActionEnum;
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { VendorInvoiceItemActionEnum } from "../../entities";
|
|
2
1
|
import { DeepPartialButRequired } from "./api.utils.interface";
|
|
3
2
|
import { IVendorInvoiceItemCreateDto } from "./vendor_invoice_item.create.dto.interface";
|
|
4
|
-
export type IVendorInvoiceItemUpdateDto = DeepPartialButRequired<IVendorInvoiceItemCreateDto, never
|
|
5
|
-
action?: VendorInvoiceItemActionEnum;
|
|
6
|
-
};
|
|
3
|
+
export type IVendorInvoiceItemUpdateDto = DeepPartialButRequired<IVendorInvoiceItemCreateDto, never>;
|
|
@@ -6,5 +6,12 @@ var VendorInvoiceActionEnum;
|
|
|
6
6
|
VendorInvoiceActionEnum["VIEW"] = "view";
|
|
7
7
|
VendorInvoiceActionEnum["EDIT"] = "edit";
|
|
8
8
|
VendorInvoiceActionEnum["DELETE"] = "delete";
|
|
9
|
+
VendorInvoiceActionEnum["CREATE"] = "create";
|
|
10
|
+
VendorInvoiceActionEnum["APPROVE"] = "approve";
|
|
11
|
+
VendorInvoiceActionEnum["REJECT"] = "reject";
|
|
9
12
|
VendorInvoiceActionEnum["UPDATE_PAYMENT"] = "update_payment";
|
|
13
|
+
// RECALL = "recall",
|
|
14
|
+
// VIEW = "view",
|
|
15
|
+
// EDIT = "edit",
|
|
16
|
+
// DELETE = "delete",
|
|
10
17
|
})(VendorInvoiceActionEnum || (exports.VendorInvoiceActionEnum = VendorInvoiceActionEnum = {}));
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export declare enum VendorInvoiceActionStatusEnum {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
DELETED = "
|
|
2
|
+
CREATE_APPROVAL = "create_approval",
|
|
3
|
+
EDIT_APPROVAL = "edit_approval",
|
|
4
|
+
DELETE_APPROVAL = "delete_approval",
|
|
5
|
+
REJECTED = "rejected",
|
|
6
|
+
APPROVED = "approved",
|
|
7
|
+
DELETED = "deleted",
|
|
8
|
+
RESOLVED_REJECTED = "resolved_rejected",
|
|
9
|
+
PAYMENT_DISBURSE = "payment_disburse"
|
|
8
10
|
}
|
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// export enum VendorInvoiceActionStatusEnum {
|
|
3
|
-
// PENDING_APPROVAL = "PENDING_APPROVAL",
|
|
4
|
-
// APPROVED = "APPROVED",
|
|
5
|
-
// }
|
|
6
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
3
|
exports.VendorInvoiceActionStatusEnum = void 0;
|
|
8
4
|
var VendorInvoiceActionStatusEnum;
|
|
9
5
|
(function (VendorInvoiceActionStatusEnum) {
|
|
10
|
-
VendorInvoiceActionStatusEnum["
|
|
11
|
-
VendorInvoiceActionStatusEnum["
|
|
12
|
-
VendorInvoiceActionStatusEnum["
|
|
13
|
-
VendorInvoiceActionStatusEnum["
|
|
14
|
-
VendorInvoiceActionStatusEnum["
|
|
15
|
-
VendorInvoiceActionStatusEnum["DELETED"] = "
|
|
6
|
+
VendorInvoiceActionStatusEnum["CREATE_APPROVAL"] = "create_approval";
|
|
7
|
+
VendorInvoiceActionStatusEnum["EDIT_APPROVAL"] = "edit_approval";
|
|
8
|
+
VendorInvoiceActionStatusEnum["DELETE_APPROVAL"] = "delete_approval";
|
|
9
|
+
VendorInvoiceActionStatusEnum["REJECTED"] = "rejected";
|
|
10
|
+
VendorInvoiceActionStatusEnum["APPROVED"] = "approved";
|
|
11
|
+
VendorInvoiceActionStatusEnum["DELETED"] = "deleted";
|
|
12
|
+
VendorInvoiceActionStatusEnum["RESOLVED_REJECTED"] = "resolved_rejected";
|
|
13
|
+
VendorInvoiceActionStatusEnum["PAYMENT_DISBURSE"] = "payment_disburse";
|
|
14
|
+
// PENDING_APPROVAL = "PENDING_APPROVAL",
|
|
15
|
+
// APPROVED = "APPROVED",
|
|
16
|
+
// REJECTED = "REJECTED",
|
|
17
|
+
// PARTIALLY_APPROVED = "PARTIALLY_APPROVED",
|
|
18
|
+
// DELETED = "DELETED",
|
|
16
19
|
})(VendorInvoiceActionStatusEnum || (exports.VendorInvoiceActionStatusEnum = VendorInvoiceActionStatusEnum = {}));
|
|
20
|
+
// export enum VendorInvoiceActionStatusEnum {
|
|
21
|
+
// PENDING_APPROVAL = "PENDING_APPROVAL",
|
|
22
|
+
// APPROVED = "APPROVED",
|
|
23
|
+
// }
|
|
@@ -1,11 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import { VendorInvoiceActionStatusEnum } from "../enums/vendor_invoice_action_status_enum";
|
|
4
|
-
import { VendorInvoiceItemActionEnum } from "../enums/vendor_invoice_item_action.enum";
|
|
5
|
-
import { VendorInvoiceItemStatus } from "../enums/vendor_invoice_item_status.enum";
|
|
6
|
-
import { FlowConfig, ParentChildFlowConfig } from "./flow-config.type";
|
|
7
|
-
export type VendorInvoiceFlowConfig<S extends string, A extends string, CS extends string = never, CA extends string = never> = {
|
|
8
|
-
parent?: FlowConfig<S, A>;
|
|
9
|
-
child?: FlowConfig<CS, CA>;
|
|
10
|
-
};
|
|
11
|
-
export declare const vendorInvoiceConfigFlow: ParentChildFlowConfig<VendorInvoiceActionStatusEnum, VendorInvoiceActionEnum, VendorInvoiceItemStatus, VendorInvoiceItemActionEnum, IVendorInvoiceFlowContextData>;
|
|
1
|
+
import { IVendorInvoiceFlowConfig } from "../../api";
|
|
2
|
+
export declare const vendorInvoiceFlowConfig: IVendorInvoiceFlowConfig;
|
|
@@ -1,105 +1,209 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.APPROVED;
|
|
25
|
-
}
|
|
26
|
-
// rejected + deleted
|
|
27
|
-
if (areAllVendorItemsInStates(data.items, [vendor_invoice_item_status_enum_1.VendorInvoiceItemStatus.REJECTED, vendor_invoice_item_status_enum_1.VendorInvoiceItemStatus.DELETED])) {
|
|
28
|
-
return vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.REJECTED;
|
|
29
|
-
}
|
|
30
|
-
return vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.PARTIALLY_APPROVED;
|
|
31
|
-
}
|
|
32
|
-
return vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.PENDING_APPROVAL;
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
[vendor_invoice_action_enum_1.VendorInvoiceActionEnum.DELETE]: {
|
|
36
|
-
permissions: ["VENDOR_INVOICE_UPDATE"],
|
|
37
|
-
next: () => vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.DELETED,
|
|
38
|
-
},
|
|
6
|
+
exports.vendorInvoiceFlowConfig = {
|
|
7
|
+
[vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.CREATE_APPROVAL]: {
|
|
8
|
+
actions: {
|
|
9
|
+
[vendor_invoice_action_enum_1.VendorInvoiceActionEnum.APPROVE]: {
|
|
10
|
+
permissions: ["VENDOR_INVOICE_APPROVE"],
|
|
11
|
+
next: () => vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.APPROVED,
|
|
12
|
+
},
|
|
13
|
+
[vendor_invoice_action_enum_1.VendorInvoiceActionEnum.EDIT]: {
|
|
14
|
+
permissions: ["VENDOR_INVOICE_UPDATE"],
|
|
15
|
+
next: () => vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.CREATE_APPROVAL,
|
|
16
|
+
},
|
|
17
|
+
[vendor_invoice_action_enum_1.VendorInvoiceActionEnum.REJECT]: {
|
|
18
|
+
permissions: ["VENDOR_INVOICE_APPROVE"],
|
|
19
|
+
next: () => vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.REJECTED,
|
|
20
|
+
},
|
|
21
|
+
[vendor_invoice_action_enum_1.VendorInvoiceActionEnum.DELETE]: {
|
|
22
|
+
permissions: ["VENDOR_INVOICE_UPDATE"],
|
|
23
|
+
next: () => vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.DELETED,
|
|
39
24
|
},
|
|
40
25
|
},
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
26
|
+
},
|
|
27
|
+
[vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.EDIT_APPROVAL]: {
|
|
28
|
+
actions: {
|
|
29
|
+
[vendor_invoice_action_enum_1.VendorInvoiceActionEnum.APPROVE]: {
|
|
30
|
+
permissions: ["VENDOR_INVOICE_APPROVE"],
|
|
31
|
+
next: () => vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.APPROVED,
|
|
32
|
+
},
|
|
33
|
+
[vendor_invoice_action_enum_1.VendorInvoiceActionEnum.EDIT]: {
|
|
34
|
+
permissions: ["VENDOR_INVOICE_UPDATE"],
|
|
35
|
+
next: () => vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.EDIT_APPROVAL,
|
|
36
|
+
},
|
|
37
|
+
[vendor_invoice_action_enum_1.VendorInvoiceActionEnum.REJECT]: {
|
|
38
|
+
permissions: ["VENDOR_INVOICE_APPROVE"],
|
|
39
|
+
next: () => vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.RESOLVED_REJECTED,
|
|
47
40
|
},
|
|
41
|
+
// [VendorInvoiceActionEnum.RECALL]: {
|
|
42
|
+
// permissions: ["VENDOR_INVOICE_UPDATE"],
|
|
43
|
+
// next: () => VendorInvoiceActionStatusEnum.DELETED,
|
|
44
|
+
// },
|
|
48
45
|
},
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
46
|
+
},
|
|
47
|
+
[vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.DELETE_APPROVAL]: {
|
|
48
|
+
actions: {
|
|
49
|
+
[vendor_invoice_action_enum_1.VendorInvoiceActionEnum.APPROVE]: {
|
|
50
|
+
permissions: ["VENDOR_INVOICE_APPROVE"],
|
|
51
|
+
next: () => vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.DELETED,
|
|
52
|
+
},
|
|
53
|
+
[vendor_invoice_action_enum_1.VendorInvoiceActionEnum.REJECT]: {
|
|
54
|
+
permissions: ["VENDOR_INVOICE_APPROVE"],
|
|
55
|
+
next: () => vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.RESOLVED_REJECTED,
|
|
55
56
|
},
|
|
57
|
+
// [VendorInvoiceActionEnum.RECALL]: {
|
|
58
|
+
// permissions: ["VENDOR_INVOICE_UPDATE"],
|
|
59
|
+
// next: () => VendorInvoiceActionStatusEnum.DELETED,
|
|
60
|
+
// },
|
|
56
61
|
},
|
|
57
62
|
},
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
[
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
[
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
[
|
|
70
|
-
|
|
71
|
-
next: () => vendor_invoice_item_status_enum_1.VendorInvoiceItemStatus.REJECTED,
|
|
72
|
-
},
|
|
73
|
-
[vendor_invoice_item_action_enum_1.VendorInvoiceItemActionEnum.DELETE]: {
|
|
74
|
-
permissions: ["VENDOR_INVOICE_UPDATE"],
|
|
75
|
-
next: () => vendor_invoice_item_status_enum_1.VendorInvoiceItemStatus.DELETED,
|
|
76
|
-
},
|
|
63
|
+
[vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.APPROVED]: {
|
|
64
|
+
actions: {
|
|
65
|
+
[vendor_invoice_action_enum_1.VendorInvoiceActionEnum.EDIT]: {
|
|
66
|
+
permissions: ["VENDOR_INVOICE_UPDATE"],
|
|
67
|
+
next: () => vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.EDIT_APPROVAL,
|
|
68
|
+
},
|
|
69
|
+
[vendor_invoice_action_enum_1.VendorInvoiceActionEnum.DELETE]: {
|
|
70
|
+
permissions: ["VENDOR_INVOICE_UPDATE"],
|
|
71
|
+
next: () => vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.DELETE_APPROVAL,
|
|
72
|
+
},
|
|
73
|
+
[vendor_invoice_action_enum_1.VendorInvoiceActionEnum.UPDATE_PAYMENT]: {
|
|
74
|
+
permissions: ["VENDOR_INVOICE_UPDATE"],
|
|
75
|
+
next: () => vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.PAYMENT_DISBURSE,
|
|
77
76
|
},
|
|
78
77
|
},
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
78
|
+
},
|
|
79
|
+
[vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.RESOLVED_REJECTED]: {
|
|
80
|
+
actions: {
|
|
81
|
+
[vendor_invoice_action_enum_1.VendorInvoiceActionEnum.EDIT]: {
|
|
82
|
+
permissions: ["VENDOR_INVOICE_UPDATE"],
|
|
83
|
+
next: () => vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.EDIT_APPROVAL,
|
|
84
|
+
},
|
|
85
|
+
[vendor_invoice_action_enum_1.VendorInvoiceActionEnum.DELETE]: {
|
|
86
|
+
permissions: ["VENDOR_INVOICE_UPDATE"],
|
|
87
|
+
next: () => vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.DELETE_APPROVAL,
|
|
85
88
|
},
|
|
86
89
|
},
|
|
87
90
|
},
|
|
88
91
|
};
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
92
|
+
// import { IVendorInvoiceFlowContextData } from "../../api";
|
|
93
|
+
// import { VendorInvoiceActionEnum } from "../enums/vendor_invoice_action.enum";
|
|
94
|
+
// import { VendorInvoiceActionStatusEnum } from "../enums/vendor_invoice_action_status_enum";
|
|
95
|
+
// import { VendorInvoiceItemActionEnum } from "../enums/vendor_invoice_item_action.enum";
|
|
96
|
+
// import { VendorInvoiceItemStatus } from "../enums/vendor_invoice_item_status.enum";
|
|
97
|
+
// import { IVendorInvoiceItemEntity } from "../interface/vendor_invoice_item.entity.interface";
|
|
98
|
+
// import { FlowConfig, ParentChildFlowConfig } from "./flow-config.type";
|
|
99
|
+
// export type VendorInvoiceFlowConfig<S extends string, A extends string, CS extends string = never, CA extends string = never> = {
|
|
100
|
+
// parent?: FlowConfig<S, A>;
|
|
101
|
+
// child?: FlowConfig<CS, CA>;
|
|
102
|
+
// };
|
|
103
|
+
// export const vendorInvoiceConfigFlow: ParentChildFlowConfig<
|
|
104
|
+
// VendorInvoiceActionStatusEnum,
|
|
105
|
+
// VendorInvoiceActionEnum,
|
|
106
|
+
// VendorInvoiceItemStatus,
|
|
107
|
+
// VendorInvoiceItemActionEnum,
|
|
108
|
+
// IVendorInvoiceFlowContextData
|
|
109
|
+
// > = {
|
|
110
|
+
// parent: {
|
|
111
|
+
// [VendorInvoiceActionStatusEnum.PENDING_APPROVAL]: {
|
|
112
|
+
// actions: {
|
|
113
|
+
// [VendorInvoiceActionEnum.EDIT]: {
|
|
114
|
+
// permissions: ["VENDOR_INVOICE_UPDATE"],
|
|
115
|
+
// next: (data?: IVendorInvoiceFlowContextData) => {
|
|
116
|
+
// if (data && areAllVendorItemsInFinalState(data)) {
|
|
117
|
+
// if (areAllVendorItemsApproved(data)) {
|
|
118
|
+
// return VendorInvoiceActionStatusEnum.APPROVED;
|
|
119
|
+
// }
|
|
120
|
+
// if (areAllVendorItemsRejected(data)) {
|
|
121
|
+
// return VendorInvoiceActionStatusEnum.REJECTED;
|
|
122
|
+
// }
|
|
123
|
+
// // approved + deleted
|
|
124
|
+
// if (areAllVendorItemsInStates(data.items, [VendorInvoiceItemStatus.APPROVED, VendorInvoiceItemStatus.DELETED])) {
|
|
125
|
+
// return VendorInvoiceActionStatusEnum.APPROVED;
|
|
126
|
+
// }
|
|
127
|
+
// // rejected + deleted
|
|
128
|
+
// if (areAllVendorItemsInStates(data.items, [VendorInvoiceItemStatus.REJECTED, VendorInvoiceItemStatus.DELETED])) {
|
|
129
|
+
// return VendorInvoiceActionStatusEnum.REJECTED;
|
|
130
|
+
// }
|
|
131
|
+
// return VendorInvoiceActionStatusEnum.PARTIALLY_APPROVED;
|
|
132
|
+
// }
|
|
133
|
+
// return VendorInvoiceActionStatusEnum.PENDING_APPROVAL;
|
|
134
|
+
// },
|
|
135
|
+
// },
|
|
136
|
+
// [VendorInvoiceActionEnum.DELETE]: {
|
|
137
|
+
// permissions: ["VENDOR_INVOICE_UPDATE"],
|
|
138
|
+
// next: () => VendorInvoiceActionStatusEnum.DELETED,
|
|
139
|
+
// },
|
|
140
|
+
// },
|
|
141
|
+
// },
|
|
142
|
+
// [VendorInvoiceActionStatusEnum.APPROVED]: {
|
|
143
|
+
// actions: {
|
|
144
|
+
// [VendorInvoiceActionEnum.UPDATE_PAYMENT]: {
|
|
145
|
+
// permissions: ["VENDOR_INVOICE_PAYMENT_PROCESSOR"],
|
|
146
|
+
// next: () => VendorInvoiceActionStatusEnum.PAYMENT_DISBURSE,
|
|
147
|
+
// },
|
|
148
|
+
// },
|
|
149
|
+
// },
|
|
150
|
+
// [VendorInvoiceActionStatusEnum.PARTIALLY_APPROVED]: {
|
|
151
|
+
// actions: {
|
|
152
|
+
// [VendorInvoiceActionEnum.UPDATE_PAYMENT]: {
|
|
153
|
+
// permissions: ["VENDOR_INVOICE_PAYMENT_PROCESSOR"],
|
|
154
|
+
// next: () => VendorInvoiceActionStatusEnum.PAYMENT_DISBURSE,
|
|
155
|
+
// },
|
|
156
|
+
// },
|
|
157
|
+
// },
|
|
158
|
+
// },
|
|
159
|
+
// child: {
|
|
160
|
+
// [VendorInvoiceItemStatus.PENDING]: {
|
|
161
|
+
// actions: {
|
|
162
|
+
// [VendorInvoiceItemActionEnum.APPROVE]: {
|
|
163
|
+
// permissions: ["VENDOR_INVOICE_APPROVE"],
|
|
164
|
+
// next: () => VendorInvoiceItemStatus.APPROVED,
|
|
165
|
+
// },
|
|
166
|
+
// [VendorInvoiceItemActionEnum.PENDING]: {
|
|
167
|
+
// permissions: ["VENDOR_INVOICE_UPDATE"],
|
|
168
|
+
// next: () => VendorInvoiceItemStatus.PENDING,
|
|
169
|
+
// },
|
|
170
|
+
// [VendorInvoiceItemActionEnum.REJECT]: {
|
|
171
|
+
// permissions: ["VENDOR_INVOICE_APPROVE"],
|
|
172
|
+
// next: () => VendorInvoiceItemStatus.REJECTED,
|
|
173
|
+
// },
|
|
174
|
+
// [VendorInvoiceItemActionEnum.DELETE]: {
|
|
175
|
+
// permissions: ["VENDOR_INVOICE_UPDATE"],
|
|
176
|
+
// next: () => VendorInvoiceItemStatus.DELETED,
|
|
177
|
+
// },
|
|
178
|
+
// },
|
|
179
|
+
// },
|
|
180
|
+
// [VendorInvoiceItemStatus.DELETED]: {
|
|
181
|
+
// actions: {
|
|
182
|
+
// [VendorInvoiceItemActionEnum.PENDING]: {
|
|
183
|
+
// permissions: ["VENDOR_INVOICE_UPDATE"],
|
|
184
|
+
// next: () => VendorInvoiceItemStatus.PENDING,
|
|
185
|
+
// },
|
|
186
|
+
// },
|
|
187
|
+
// },
|
|
188
|
+
// },
|
|
189
|
+
// };
|
|
190
|
+
// function areAllVendorItemsApproved(data: IVendorInvoiceFlowContextData): boolean {
|
|
191
|
+
// const { items } = data;
|
|
192
|
+
// return items.length > 0 ? items.every((row) => row.status === VendorInvoiceItemStatus.APPROVED) : false;
|
|
193
|
+
// }
|
|
194
|
+
// function areAllVendorItemsRejected(data: IVendorInvoiceFlowContextData): boolean {
|
|
195
|
+
// const { items } = data;
|
|
196
|
+
// return items.length > 0 ? items.every((row) => row.status === VendorInvoiceItemStatus.REJECTED) : false;
|
|
197
|
+
// }
|
|
198
|
+
// function areAllVendorItemsInFinalState(data: IVendorInvoiceFlowContextData): boolean {
|
|
199
|
+
// const { items } = data;
|
|
200
|
+
// return items.length > 0
|
|
201
|
+
// ? items.every(
|
|
202
|
+
// (row) =>
|
|
203
|
+
// row.status === VendorInvoiceItemStatus.APPROVED || row.status === VendorInvoiceItemStatus.REJECTED || row.status === VendorInvoiceItemStatus.DELETED,
|
|
204
|
+
// )
|
|
205
|
+
// : false;
|
|
206
|
+
// }
|
|
207
|
+
// function areAllVendorItemsInStates(items: IVendorInvoiceItemEntity[], states: VendorInvoiceItemStatus[]): boolean {
|
|
208
|
+
// return items.every((row) => states.includes(row.status));
|
|
209
|
+
// }
|
|
@@ -15,4 +15,9 @@ export interface IVendorInvoiceEntity extends IEntityAuditColumn {
|
|
|
15
15
|
voucherDate?: Nullable<number>;
|
|
16
16
|
invoiceDocuments: string;
|
|
17
17
|
remark: Nullable<string>;
|
|
18
|
+
totalBasicAmount: number;
|
|
19
|
+
totalInvoiceAmount: number;
|
|
20
|
+
totalGstAmount: number;
|
|
21
|
+
totalTdsAmount: number;
|
|
22
|
+
totalNetAmount: number;
|
|
18
23
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { VendorInvoiceItemStatus } from "../enums/vendor_invoice_item_status.enum";
|
|
2
1
|
import { IEntityAuditColumn } from "./entity-audit-columns.interface";
|
|
3
|
-
import { Nullable } from "./entity.utils.interface";
|
|
2
|
+
import { EntityEnum, EnumEntityType, IEntityFilterData, Nullable } from "./entity.utils.interface";
|
|
4
3
|
export interface IVendorInvoiceItemEntity extends IEntityAuditColumn {
|
|
5
4
|
id: number;
|
|
6
5
|
vendorInvoiceId: number;
|
|
@@ -14,6 +13,9 @@ export interface IVendorInvoiceItemEntity extends IEntityAuditColumn {
|
|
|
14
13
|
netAmount: number;
|
|
15
14
|
quantity: number;
|
|
16
15
|
rate: number;
|
|
17
|
-
status: VendorInvoiceItemStatus;
|
|
18
16
|
remark: Nullable<string>;
|
|
17
|
+
gstAmount: number;
|
|
18
|
+
tdsAmount: number;
|
|
19
|
+
}
|
|
20
|
+
export interface IVendorInvoiceItemEntityFilterData extends IEntityFilterData<EnumEntityType<EntityEnum.VENDOR_INVOICE_ITEM>> {
|
|
19
21
|
}
|
|
@@ -2,6 +2,7 @@ import { EntityEnum, IEntityUpdateDto, Nullable } from "../interface/entity.util
|
|
|
2
2
|
import { RelationConfigs } from "../interface/relation-config.interface";
|
|
3
3
|
import { BaseEntityModel } from "./base.entity.model";
|
|
4
4
|
import { IVendorActionDataDto } from "../../api";
|
|
5
|
+
import { VendorActionEnum } from "../enums/vendor-action.enum";
|
|
5
6
|
import { VendorStatusEnum } from "../enums/vendor-status.enum";
|
|
6
7
|
import { VendorContractApplicabilityEnum } from "../enums/vendor_contract_applicability_enum";
|
|
7
8
|
import { VendorGstTypeEnum } from "../enums/vendor_gst_type_enum";
|
|
@@ -9,10 +10,9 @@ import { VendorLocationTypeEnum } from "../enums/vendor_location_type_enum";
|
|
|
9
10
|
import { VendorPanTypeEnum } from "../enums/vendor_pan_type_enum";
|
|
10
11
|
import { IUserEntity } from "../interface/user.entity.interface";
|
|
11
12
|
import { IVendorEntity } from "../interface/vendor.entity.interface";
|
|
12
|
-
import { OrganizationTypeEntityModel } from "./organization_type.entity.model";
|
|
13
13
|
import { IRowActions } from "./interface/row-actions.interface";
|
|
14
|
+
import { OrganizationTypeEntityModel } from "./organization_type.entity.model";
|
|
14
15
|
import { UserEntityModel } from "./user.entity.model";
|
|
15
|
-
import { VendorActionEnum } from "../enums/vendor-action.enum";
|
|
16
16
|
export declare class VendorEntityModel extends BaseEntityModel<EntityEnum.VENDOR> implements IVendorEntity {
|
|
17
17
|
id: number;
|
|
18
18
|
name: string;
|
|
@@ -42,6 +42,21 @@ export declare class VendorEntityModel extends BaseEntityModel<EntityEnum.VENDOR
|
|
|
42
42
|
organizationType?: OrganizationTypeEntityModel;
|
|
43
43
|
status: VendorStatusEnum;
|
|
44
44
|
remark: Nullable<string>;
|
|
45
|
+
static readonly VENDOR_ENTITY_DOCUMENT_TYPES: readonly ["pan", "gst"];
|
|
46
|
+
/**
|
|
47
|
+
* Default number of days added to the Invoice Date to calculate the Due Date,
|
|
48
|
+
* used as a fallback when the Vendor does not have a `paymentDueDays` value configured.
|
|
49
|
+
*
|
|
50
|
+
* @formula
|
|
51
|
+
* DueDate = InvoiceDate + (vendor.paymentDueDays ?? VendorEntityModel.DEFAULT_DUE_DAYS)
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* vendor.paymentDueDays = 30 → DueDate = InvoiceDate + 30
|
|
55
|
+
* vendor.paymentDueDays = null → DueDate = InvoiceDate + 7 (this constant)
|
|
56
|
+
*
|
|
57
|
+
* @see VendorEntityModel.paymentDueDays
|
|
58
|
+
*/
|
|
59
|
+
static readonly DEFAULT_DUE_DAYS = 7;
|
|
45
60
|
populateOrganizationTypeModel(organizationTypeEntityModels: OrganizationTypeEntityModel[]): null;
|
|
46
61
|
getPanNoFourthCharacter(): string;
|
|
47
62
|
static relationConfigs: RelationConfigs<[], EntityEnum.VENDOR>;
|
|
@@ -5,13 +5,13 @@ const entity_utils_interface_1 = require("../interface/entity.utils.interface");
|
|
|
5
5
|
const base_entity_model_1 = require("./base.entity.model");
|
|
6
6
|
const error_key_enum_1 = require("../../enums/error.key.enum");
|
|
7
7
|
const exceptions_1 = require("../../exceptions");
|
|
8
|
+
const utils_1 = require("../../utils");
|
|
8
9
|
const vendor_status_enum_1 = require("../enums/vendor-status.enum");
|
|
9
10
|
const vendor_contract_applicability_enum_1 = require("../enums/vendor_contract_applicability_enum");
|
|
10
11
|
const vendor_gst_type_enum_1 = require("../enums/vendor_gst_type_enum");
|
|
11
12
|
const vendor_location_type_enum_1 = require("../enums/vendor_location_type_enum");
|
|
12
13
|
const vendor_pan_type_enum_1 = require("../enums/vendor_pan_type_enum");
|
|
13
14
|
const vendor_flow_config_1 = require("../flow-configs/vendor-flow.config");
|
|
14
|
-
const utils_1 = require("../../utils");
|
|
15
15
|
class VendorEntityModel extends base_entity_model_1.BaseEntityModel {
|
|
16
16
|
constructor() {
|
|
17
17
|
super(...arguments);
|
|
@@ -116,4 +116,19 @@ class VendorEntityModel extends base_entity_model_1.BaseEntityModel {
|
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
exports.VendorEntityModel = VendorEntityModel;
|
|
119
|
+
VendorEntityModel.VENDOR_ENTITY_DOCUMENT_TYPES = ["pan", "gst"];
|
|
120
|
+
/**
|
|
121
|
+
* Default number of days added to the Invoice Date to calculate the Due Date,
|
|
122
|
+
* used as a fallback when the Vendor does not have a `paymentDueDays` value configured.
|
|
123
|
+
*
|
|
124
|
+
* @formula
|
|
125
|
+
* DueDate = InvoiceDate + (vendor.paymentDueDays ?? VendorEntityModel.DEFAULT_DUE_DAYS)
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* vendor.paymentDueDays = 30 → DueDate = InvoiceDate + 30
|
|
129
|
+
* vendor.paymentDueDays = null → DueDate = InvoiceDate + 7 (this constant)
|
|
130
|
+
*
|
|
131
|
+
* @see VendorEntityModel.paymentDueDays
|
|
132
|
+
*/
|
|
133
|
+
VendorEntityModel.DEFAULT_DUE_DAYS = 7;
|
|
119
134
|
VendorEntityModel.relationConfigs = [];
|
|
@@ -29,6 +29,11 @@ export declare class VendorInvoiceEntityModel extends BaseEntityModel<EntityEnum
|
|
|
29
29
|
updatedOn: number;
|
|
30
30
|
createdBy: number;
|
|
31
31
|
updatedBy: number;
|
|
32
|
+
totalBasicAmount: number;
|
|
33
|
+
totalInvoiceAmount: number;
|
|
34
|
+
totalGstAmount: number;
|
|
35
|
+
totalTdsAmount: number;
|
|
36
|
+
totalNetAmount: number;
|
|
32
37
|
vendor?: VendorEntityModel;
|
|
33
38
|
officeLocation?: OfficeLocationEntityModel;
|
|
34
39
|
vendorInvoiceItems?: VendorInvoiceItemEntityModel[];
|
|
@@ -61,4 +66,48 @@ export declare class VendorInvoiceEntityModel extends BaseEntityModel<EntityEnum
|
|
|
61
66
|
static getTotalNetAmount<T extends {
|
|
62
67
|
netAmount: number;
|
|
63
68
|
}>(data: T[]): number;
|
|
69
|
+
/**
|
|
70
|
+
* Generates the next sequential voucher number for a new Vendor Invoice.
|
|
71
|
+
*
|
|
72
|
+
* @format
|
|
73
|
+
* `<FY-1><FY><MM><DD><###>`
|
|
74
|
+
*
|
|
75
|
+
* Where:
|
|
76
|
+
* - `<FY-1><FY>` — 4-digit financial year code (e.g., "2526" for FY 2025–26)
|
|
77
|
+
* - `<MM>` — 2-digit month of today's date (e.g., "03" for March)
|
|
78
|
+
* - `<DD>` — 2-digit day of today's date (e.g., "27" for 27th)
|
|
79
|
+
* - `<###>` — 3-digit sequence number, continuous within the FY (001–999)
|
|
80
|
+
*
|
|
81
|
+
* @sequence
|
|
82
|
+
* The sequence (`###`) is FY-scoped — it does NOT reset daily or monthly.
|
|
83
|
+
* It only resets when the Financial Year changes.
|
|
84
|
+
* The next number is always `max(existing sequences in current FY) + 1`.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* // Today: 27 March 2026 (FY 2025–26 → fyCode = "2526")
|
|
88
|
+
* // Existing vouchers this FY: ["25260326001", "25260326002", "25260120003"]
|
|
89
|
+
* // maxSequence = 3
|
|
90
|
+
* // Result:
|
|
91
|
+
* getNextVoucherNumber(existingInvoices) // → "25260327004"
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* // Today: 27 March 2026, No existing vouchers in FY 2025–26
|
|
95
|
+
* // Result:
|
|
96
|
+
* getNextVoucherNumber([]) // → "25260327001"
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* // FY changes: Today: 01 April 2026 (FY 2026–27 → fyCode = "2627")
|
|
100
|
+
* // Existing vouchers: ["25260327999"] (from previous FY, ignored)
|
|
101
|
+
* // Result:
|
|
102
|
+
* getNextVoucherNumber(existingInvoices) // → "26270401001" (sequence resets)
|
|
103
|
+
*
|
|
104
|
+
* @throws {Error} If the sequence reaches 999 within the same FY
|
|
105
|
+
*
|
|
106
|
+
* @param existingVendorInvoices - All existing VendorInvoiceEntityModel instances.
|
|
107
|
+
* Invoices with undefined/null voucherNo are automatically skipped.
|
|
108
|
+
* Invoices from previous FYs are automatically ignored.
|
|
109
|
+
*
|
|
110
|
+
* @returns The next voucher number string in format `<FY-1><FY><MM><DD><###>`
|
|
111
|
+
*/
|
|
112
|
+
static getNextVoucherNumber(existingVendorInvoices: VendorInvoiceEntityModel[]): string;
|
|
64
113
|
}
|
|
@@ -21,12 +21,17 @@ class VendorInvoiceEntityModel extends base_entity_model_1.BaseEntityModel {
|
|
|
21
21
|
this.invoiceDate = 0;
|
|
22
22
|
this.invoiceDocuments = "";
|
|
23
23
|
this.status = vendor_invoice_status_enum_1.VendorInvoiceStatusEnum.PENDING;
|
|
24
|
-
this.actionStatus = vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.
|
|
24
|
+
this.actionStatus = vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.CREATE_APPROVAL;
|
|
25
25
|
this.remark = null;
|
|
26
26
|
this.createdOn = 0;
|
|
27
27
|
this.updatedOn = 0;
|
|
28
28
|
this.createdBy = 0;
|
|
29
29
|
this.updatedBy = 0;
|
|
30
|
+
this.totalBasicAmount = 0;
|
|
31
|
+
this.totalInvoiceAmount = 0;
|
|
32
|
+
this.totalGstAmount = 0;
|
|
33
|
+
this.totalTdsAmount = 0;
|
|
34
|
+
this.totalNetAmount = 0;
|
|
30
35
|
}
|
|
31
36
|
static fromEntity(entity) {
|
|
32
37
|
const result = new VendorInvoiceEntityModel(entity_utils_interface_1.EntityEnum.VENDOR_INVOICE);
|
|
@@ -37,8 +42,7 @@ class VendorInvoiceEntityModel extends base_entity_model_1.BaseEntityModel {
|
|
|
37
42
|
return this.constructor.prototype.constructor.relationConfigs || [];
|
|
38
43
|
}
|
|
39
44
|
getNextStatusForParent(currentUser, dto) {
|
|
40
|
-
|
|
41
|
-
const flowForStatus = (_a = vendor_invoice_flow_config_1.vendorInvoiceConfigFlow.parent) === null || _a === void 0 ? void 0 : _a[this.actionStatus];
|
|
45
|
+
const flowForStatus = vendor_invoice_flow_config_1.vendorInvoiceFlowConfig[this.actionStatus];
|
|
42
46
|
if (!flowForStatus) {
|
|
43
47
|
throw new exceptions_1.AppBadRequestException({
|
|
44
48
|
key: error_key_enum_1.ErrorKeyEnum.STATUS,
|
|
@@ -74,20 +78,20 @@ class VendorInvoiceEntityModel extends base_entity_model_1.BaseEntityModel {
|
|
|
74
78
|
message: [`Vendor invoice items are required for getting next status of Vendor Invoice.`],
|
|
75
79
|
});
|
|
76
80
|
}
|
|
77
|
-
const contextFlowData = {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
};
|
|
81
|
-
let nextStatus = vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.
|
|
81
|
+
// const contextFlowData: IVendorInvoiceFlowContextData = {
|
|
82
|
+
// invoice: this,
|
|
83
|
+
// items: this.vendorInvoiceItems,
|
|
84
|
+
// };
|
|
85
|
+
let nextStatus = vendor_invoice_action_status_enum_1.VendorInvoiceActionStatusEnum.CREATE_APPROVAL;
|
|
82
86
|
if (matchingPermissionConfig.next) {
|
|
83
|
-
nextStatus = matchingPermissionConfig.next(
|
|
87
|
+
nextStatus = matchingPermissionConfig.next();
|
|
84
88
|
}
|
|
85
89
|
return nextStatus;
|
|
86
90
|
}
|
|
87
91
|
getAvailableActions(currentUser, config) {
|
|
88
92
|
var _a;
|
|
89
93
|
const params = {
|
|
90
|
-
flowConfig: vendor_invoice_flow_config_1.
|
|
94
|
+
flowConfig: vendor_invoice_flow_config_1.vendorInvoiceFlowConfig,
|
|
91
95
|
currentStatus: this.actionStatus,
|
|
92
96
|
userPermissions: (_a = currentUser.permissions) !== null && _a !== void 0 ? _a : [],
|
|
93
97
|
visibilityData: this.getUpdateActionVisibility.bind(this, currentUser),
|
|
@@ -100,7 +104,6 @@ class VendorInvoiceEntityModel extends base_entity_model_1.BaseEntityModel {
|
|
|
100
104
|
return {};
|
|
101
105
|
}
|
|
102
106
|
static getTotalBasicAmount(data) {
|
|
103
|
-
// console.log("data", data);
|
|
104
107
|
return data.reduce((acc, item) => acc + item.basicAmount, 0);
|
|
105
108
|
}
|
|
106
109
|
static getTotalInvoiceAmount(data) {
|
|
@@ -115,6 +118,82 @@ class VendorInvoiceEntityModel extends base_entity_model_1.BaseEntityModel {
|
|
|
115
118
|
static getTotalNetAmount(data) {
|
|
116
119
|
return data.reduce((acc, item) => acc + item.netAmount, 0);
|
|
117
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* Generates the next sequential voucher number for a new Vendor Invoice.
|
|
123
|
+
*
|
|
124
|
+
* @format
|
|
125
|
+
* `<FY-1><FY><MM><DD><###>`
|
|
126
|
+
*
|
|
127
|
+
* Where:
|
|
128
|
+
* - `<FY-1><FY>` — 4-digit financial year code (e.g., "2526" for FY 2025–26)
|
|
129
|
+
* - `<MM>` — 2-digit month of today's date (e.g., "03" for March)
|
|
130
|
+
* - `<DD>` — 2-digit day of today's date (e.g., "27" for 27th)
|
|
131
|
+
* - `<###>` — 3-digit sequence number, continuous within the FY (001–999)
|
|
132
|
+
*
|
|
133
|
+
* @sequence
|
|
134
|
+
* The sequence (`###`) is FY-scoped — it does NOT reset daily or monthly.
|
|
135
|
+
* It only resets when the Financial Year changes.
|
|
136
|
+
* The next number is always `max(existing sequences in current FY) + 1`.
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* // Today: 27 March 2026 (FY 2025–26 → fyCode = "2526")
|
|
140
|
+
* // Existing vouchers this FY: ["25260326001", "25260326002", "25260120003"]
|
|
141
|
+
* // maxSequence = 3
|
|
142
|
+
* // Result:
|
|
143
|
+
* getNextVoucherNumber(existingInvoices) // → "25260327004"
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* // Today: 27 March 2026, No existing vouchers in FY 2025–26
|
|
147
|
+
* // Result:
|
|
148
|
+
* getNextVoucherNumber([]) // → "25260327001"
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* // FY changes: Today: 01 April 2026 (FY 2026–27 → fyCode = "2627")
|
|
152
|
+
* // Existing vouchers: ["25260327999"] (from previous FY, ignored)
|
|
153
|
+
* // Result:
|
|
154
|
+
* getNextVoucherNumber(existingInvoices) // → "26270401001" (sequence resets)
|
|
155
|
+
*
|
|
156
|
+
* @throws {Error} If the sequence reaches 999 within the same FY
|
|
157
|
+
*
|
|
158
|
+
* @param existingVendorInvoices - All existing VendorInvoiceEntityModel instances.
|
|
159
|
+
* Invoices with undefined/null voucherNo are automatically skipped.
|
|
160
|
+
* Invoices from previous FYs are automatically ignored.
|
|
161
|
+
*
|
|
162
|
+
* @returns The next voucher number string in format `<FY-1><FY><MM><DD><###>`
|
|
163
|
+
*/
|
|
164
|
+
static getNextVoucherNumber(existingVendorInvoices) {
|
|
165
|
+
// Always use today's date
|
|
166
|
+
const today = new Date();
|
|
167
|
+
// Get FY code e.g. "2526"
|
|
168
|
+
const fyCode = utils_1.DateCodeModel.getFinancialYearCode(today);
|
|
169
|
+
// Get MM and DD from today
|
|
170
|
+
const month = String(today.getMonth() + 1).padStart(2, "0");
|
|
171
|
+
const day = String(today.getDate()).padStart(2, "0");
|
|
172
|
+
// Base prefix e.g. "25260327"
|
|
173
|
+
const basePrefix = `${fyCode}${month}${day}`;
|
|
174
|
+
// Filter out undefined/null voucherNo AND filter only same FY
|
|
175
|
+
const matchingVoucherNumbers = existingVendorInvoices
|
|
176
|
+
.map((invoice) => invoice.voucherNo)
|
|
177
|
+
.filter((voucherNo) => !!voucherNo && voucherNo.startsWith(fyCode));
|
|
178
|
+
if (matchingVoucherNumbers.length === 0) {
|
|
179
|
+
return `${basePrefix}001`;
|
|
180
|
+
}
|
|
181
|
+
// Extract sequence numbers from ALL vouchers in this FY
|
|
182
|
+
const sequences = matchingVoucherNumbers
|
|
183
|
+
.map((voucherNo) => {
|
|
184
|
+
const match = voucherNo.match(/(\d{3})$/);
|
|
185
|
+
return match ? parseInt(match[1], 10) : null;
|
|
186
|
+
})
|
|
187
|
+
.filter((seq) => seq !== null);
|
|
188
|
+
if (sequences.length === 0) {
|
|
189
|
+
return `${basePrefix}001`;
|
|
190
|
+
}
|
|
191
|
+
const maxSequence = Math.max(...sequences);
|
|
192
|
+
if (maxSequence >= 999) {
|
|
193
|
+
throw new Error(`Voucher number sequence exhausted for FY ${fyCode}`);
|
|
194
|
+
}
|
|
195
|
+
return `${basePrefix}${String(maxSequence + 1).padStart(3, "0")}`;
|
|
196
|
+
}
|
|
118
197
|
}
|
|
119
198
|
exports.VendorInvoiceEntityModel = VendorInvoiceEntityModel;
|
|
120
199
|
VendorInvoiceEntityModel.relationConfigs = [
|
|
@@ -2,17 +2,21 @@ import { EntityEnum, Nullable } from "../interface/entity.utils.interface";
|
|
|
2
2
|
import { RelationConfigs } from "../interface/relation-config.interface";
|
|
3
3
|
import { BaseEntityModel } from "./base.entity.model";
|
|
4
4
|
import { IVendorInvoiceItemEntity } from "../interface/vendor_invoice_item.entity.interface";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { IGstRateEntity } from "../interface/gst_rate.entity.interface";
|
|
6
|
+
import { ITdsRateEntity } from "../interface/tds_rate.entity.interface";
|
|
7
|
+
import { IVendorEntity } from "../interface/vendor.entity.interface";
|
|
8
8
|
import { ExpenseHeadEntityModel } from "./expense_head.entity.model";
|
|
9
9
|
import { GstRateEntityModel } from "./gst_rate.entity.model";
|
|
10
10
|
import { TdsRateEntityModel } from "./tds_rate.entity.model";
|
|
11
|
+
import { VendorEntityModel } from "./vendor.entity.model";
|
|
11
12
|
import { VendorInvoiceEntityModel } from "./vendor_invoice.entity.model";
|
|
12
13
|
import { VoucherTypeEntityModel } from "./voucher_type.entity.model";
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
export interface IVendorInvoiceItemEntityAmounts {
|
|
15
|
+
gstAmount: number;
|
|
16
|
+
tdsAmount: number;
|
|
17
|
+
invoiceAmount: number;
|
|
18
|
+
netAmount: number;
|
|
19
|
+
}
|
|
16
20
|
export declare class VendorInvoiceItemEntityModel extends BaseEntityModel<EntityEnum.VENDOR_INVOICE_ITEM> implements IVendorInvoiceItemEntity {
|
|
17
21
|
id: number;
|
|
18
22
|
vendorInvoiceId: number;
|
|
@@ -26,8 +30,9 @@ export declare class VendorInvoiceItemEntityModel extends BaseEntityModel<Entity
|
|
|
26
30
|
netAmount: number;
|
|
27
31
|
quantity: number;
|
|
28
32
|
rate: number;
|
|
29
|
-
status: VendorInvoiceItemStatus;
|
|
30
33
|
remark: Nullable<string>;
|
|
34
|
+
gstAmount: number;
|
|
35
|
+
tdsAmount: number;
|
|
31
36
|
createdOn: number;
|
|
32
37
|
updatedOn: number;
|
|
33
38
|
createdBy: number;
|
|
@@ -46,15 +51,12 @@ export declare class VendorInvoiceItemEntityModel extends BaseEntityModel<Entity
|
|
|
46
51
|
], EntityEnum.VENDOR_INVOICE_ITEM>;
|
|
47
52
|
static fromEntity(entity: IVendorInvoiceItemEntity): VendorInvoiceItemEntityModel;
|
|
48
53
|
getRelationConfigs(): any[];
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
getUpdateActionVisibility(currentUser: UserEntityModel): {
|
|
58
|
-
[key: string]: () => boolean;
|
|
59
|
-
};
|
|
54
|
+
static calculateAmounts(params: {
|
|
55
|
+
basicAmount: number;
|
|
56
|
+
gstRateEntity: IGstRateEntity;
|
|
57
|
+
tdsRateEntity: ITdsRateEntity;
|
|
58
|
+
vendorEntity: VendorEntityModel;
|
|
59
|
+
}): IVendorInvoiceItemEntityAmounts;
|
|
60
|
+
static tdsRate(vendorEntity: IVendorEntity, tdsRateEntity: ITdsRateEntity): number;
|
|
61
|
+
static AMOUNT_KEYS: (keyof IVendorInvoiceItemEntityAmounts)[];
|
|
60
62
|
}
|
|
@@ -4,11 +4,7 @@ exports.VendorInvoiceItemEntityModel = void 0;
|
|
|
4
4
|
const relation_type_enum_1 = require("../enums/relation-type.enum");
|
|
5
5
|
const entity_utils_interface_1 = require("../interface/entity.utils.interface");
|
|
6
6
|
const base_entity_model_1 = require("./base.entity.model");
|
|
7
|
-
const
|
|
8
|
-
const exceptions_1 = require("../../exceptions");
|
|
9
|
-
const vendor_invoice_item_status_enum_1 = require("../enums/vendor_invoice_item_status.enum");
|
|
10
|
-
const utils_1 = require("../../utils");
|
|
11
|
-
const vendor_invoice_flow_config_1 = require("../flow-configs/vendor-invoice-flow.config");
|
|
7
|
+
const vendor_pan_type_enum_1 = require("../enums/vendor_pan_type_enum");
|
|
12
8
|
class VendorInvoiceItemEntityModel extends base_entity_model_1.BaseEntityModel {
|
|
13
9
|
constructor() {
|
|
14
10
|
super(...arguments);
|
|
@@ -24,12 +20,42 @@ class VendorInvoiceItemEntityModel extends base_entity_model_1.BaseEntityModel {
|
|
|
24
20
|
this.netAmount = 0;
|
|
25
21
|
this.quantity = 0;
|
|
26
22
|
this.rate = 0;
|
|
27
|
-
|
|
23
|
+
// status: VendorInvoiceItemStatus = VendorInvoiceItemStatus.PENDING;
|
|
28
24
|
this.remark = null;
|
|
25
|
+
this.gstAmount = 0;
|
|
26
|
+
this.tdsAmount = 0;
|
|
29
27
|
this.createdOn = 0;
|
|
30
28
|
this.updatedOn = 0;
|
|
31
29
|
this.createdBy = 0;
|
|
32
30
|
this.updatedBy = 0;
|
|
31
|
+
// getAvailableActions(
|
|
32
|
+
// currentUser: UserEntityModel,
|
|
33
|
+
// config?: {
|
|
34
|
+
// combinedActions?: Record<
|
|
35
|
+
// string,
|
|
36
|
+
// {
|
|
37
|
+
// combineActions: VendorInvoiceItemActionEnum[];
|
|
38
|
+
// label: string;
|
|
39
|
+
// }
|
|
40
|
+
// >;
|
|
41
|
+
// customLabels?: Partial<Record<VendorInvoiceItemActionEnum, string>>;
|
|
42
|
+
// },
|
|
43
|
+
// ): IRowActions<EntityEnum.VENDOR_INVOICE_ITEM>[] {
|
|
44
|
+
// const params = {
|
|
45
|
+
// flowConfig: vendorInvoiceConfigFlow.child,
|
|
46
|
+
// currentStatus: this.status,
|
|
47
|
+
// userPermissions: currentUser.permissions ?? [],
|
|
48
|
+
// visibilityData: this.getUpdateActionVisibility.bind(this, currentUser),
|
|
49
|
+
// combinedActions: config?.combinedActions,
|
|
50
|
+
// customLabels: config?.customLabels,
|
|
51
|
+
// };
|
|
52
|
+
// return EntityActionFlowResolverV2.getAvailableActionsData(params);
|
|
53
|
+
// }
|
|
54
|
+
// getUpdateActionVisibility(currentUser: UserEntityModel): {
|
|
55
|
+
// [key: string]: () => boolean;
|
|
56
|
+
// } {
|
|
57
|
+
// return {};
|
|
58
|
+
// }
|
|
33
59
|
}
|
|
34
60
|
static fromEntity(entity) {
|
|
35
61
|
const result = new VendorInvoiceItemEntityModel(entity_utils_interface_1.EntityEnum.VENDOR_INVOICE_ITEM);
|
|
@@ -39,68 +65,68 @@ class VendorInvoiceItemEntityModel extends base_entity_model_1.BaseEntityModel {
|
|
|
39
65
|
getRelationConfigs() {
|
|
40
66
|
return this.constructor.prototype.constructor.relationConfigs || [];
|
|
41
67
|
}
|
|
42
|
-
getNextStatus(dto, currentUser) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
68
|
+
// getNextStatus(dto: IVendorInvoiceItemUpdateDto, currentUser: IUserEntity): VendorInvoiceItemStatus {
|
|
69
|
+
// // const flow = vendorInvoiceConfigFlow as FlowConfig<
|
|
70
|
+
// // VendorInvoiceActionStatusEnum,
|
|
71
|
+
// // VendorInvoiceActionEnum,
|
|
72
|
+
// // VendorInvoiceItemStatus,
|
|
73
|
+
// // VendorInvoiceItemActionEnum
|
|
74
|
+
// // >;
|
|
75
|
+
// // const flowForStatus = flow.child[this.status];
|
|
76
|
+
// const flowForStatus = vendorInvoiceConfigFlow.child?.[this.status];
|
|
77
|
+
// if (!flowForStatus) {
|
|
78
|
+
// throw new AppBadRequestException({
|
|
79
|
+
// key: ErrorKeyEnum.STATUS,
|
|
80
|
+
// message: [`Status not found: ${this.status}`],
|
|
81
|
+
// });
|
|
82
|
+
// }
|
|
83
|
+
// if (!dto?.action) {
|
|
84
|
+
// throw new AppBadRequestException({
|
|
85
|
+
// key: ErrorKeyEnum.ACTION_DATA,
|
|
86
|
+
// message: ["dto.actionData is required"],
|
|
87
|
+
// });
|
|
88
|
+
// }
|
|
89
|
+
// const matchingPermissionConfig = flowForStatus.actions[dto.action];
|
|
90
|
+
// if (!matchingPermissionConfig) {
|
|
91
|
+
// throw new AppBadRequestException({
|
|
92
|
+
// key: ErrorKeyEnum.ACTION,
|
|
93
|
+
// message: [`Action '${dto.action}' is not valid for the current status.`],
|
|
94
|
+
// });
|
|
95
|
+
// }
|
|
96
|
+
// if (!currentUser.permissions || currentUser.permissions.length === 0) {
|
|
97
|
+
// throw new AppBadRequestException({
|
|
98
|
+
// key: ErrorKeyEnum.PERMISSIONS,
|
|
99
|
+
// message: ["Permission not available for currentUser"],
|
|
100
|
+
// });
|
|
101
|
+
// }
|
|
102
|
+
// const hasPermission = matchingPermissionConfig.permissions.some((permission: string) => currentUser.permissions?.includes(permission));
|
|
103
|
+
// if (!hasPermission) {
|
|
104
|
+
// throw new AppBadRequestException({
|
|
105
|
+
// key: ErrorKeyEnum.PERMISSION,
|
|
106
|
+
// message: [`Current user does not have permission to ${dto.action} vendor`],
|
|
107
|
+
// });
|
|
108
|
+
// }
|
|
109
|
+
// let nextStatus: VendorInvoiceItemStatus = VendorInvoiceItemStatus.PENDING;
|
|
110
|
+
// if (matchingPermissionConfig.next) {
|
|
111
|
+
// nextStatus = matchingPermissionConfig.next();
|
|
112
|
+
// }
|
|
113
|
+
// return nextStatus;
|
|
114
|
+
// }
|
|
115
|
+
static calculateAmounts(params) {
|
|
116
|
+
const { basicAmount, gstRateEntity, tdsRateEntity, vendorEntity } = params;
|
|
117
|
+
const gstAmount = basicAmount * (gstRateEntity.rate / 100);
|
|
118
|
+
const tdsAmount = basicAmount * (VendorInvoiceItemEntityModel.tdsRate(vendorEntity, tdsRateEntity) / 100);
|
|
119
|
+
const invoiceAmount = basicAmount + gstAmount;
|
|
120
|
+
const netAmount = invoiceAmount - tdsAmount;
|
|
121
|
+
return {
|
|
122
|
+
gstAmount,
|
|
123
|
+
tdsAmount,
|
|
124
|
+
invoiceAmount,
|
|
125
|
+
netAmount,
|
|
99
126
|
};
|
|
100
|
-
return utils_1.EntityActionFlowResolverV2.getAvailableActionsData(params);
|
|
101
127
|
}
|
|
102
|
-
|
|
103
|
-
return
|
|
128
|
+
static tdsRate(vendorEntity, tdsRateEntity) {
|
|
129
|
+
return vendorEntity.panType === vendor_pan_type_enum_1.VendorPanTypeEnum.AVAILABLE ? tdsRateEntity.panAvailableRate : tdsRateEntity.panNotAvailableRate;
|
|
104
130
|
}
|
|
105
131
|
}
|
|
106
132
|
exports.VendorInvoiceItemEntityModel = VendorInvoiceItemEntityModel;
|
|
@@ -151,3 +177,4 @@ VendorInvoiceItemEntityModel.relationConfigs = [
|
|
|
151
177
|
},
|
|
152
178
|
},
|
|
153
179
|
];
|
|
180
|
+
VendorInvoiceItemEntityModel.AMOUNT_KEYS = ["gstAmount", "tdsAmount", "netAmount", "invoiceAmount"];
|
|
@@ -3,8 +3,10 @@ export declare class CodeValidatorUtil {
|
|
|
3
3
|
static readonly TAN_REGEX: RegExp;
|
|
4
4
|
static readonly GST_REGEX: RegExp;
|
|
5
5
|
static readonly ADDHAR_REGEX: RegExp;
|
|
6
|
+
static readonly IFSC_REGEX: RegExp;
|
|
6
7
|
static isValidPAN(value: string): boolean;
|
|
7
8
|
static isValidTAN(value: string): boolean;
|
|
8
9
|
static isValidGST(value: string): boolean;
|
|
9
10
|
static isValidAddhar(value: string): boolean;
|
|
11
|
+
static isValidateIFSCCode(value: string): boolean;
|
|
10
12
|
}
|
|
@@ -15,6 +15,9 @@ class CodeValidatorUtil {
|
|
|
15
15
|
static isValidAddhar(value) {
|
|
16
16
|
return this.ADDHAR_REGEX.test(value);
|
|
17
17
|
}
|
|
18
|
+
static isValidateIFSCCode(value) {
|
|
19
|
+
return this.IFSC_REGEX.test(value === null || value === void 0 ? void 0 : value.toUpperCase());
|
|
20
|
+
}
|
|
18
21
|
}
|
|
19
22
|
exports.CodeValidatorUtil = CodeValidatorUtil;
|
|
20
23
|
// ---- private constants ----
|
|
@@ -22,3 +25,4 @@ CodeValidatorUtil.PAN_REGEX = /^[A-Z]{5}[0-9]{4}[A-Z]{1}$/;
|
|
|
22
25
|
CodeValidatorUtil.TAN_REGEX = /^[A-Z]{4}[0-9]{5}[A-Z]{1}$/;
|
|
23
26
|
CodeValidatorUtil.GST_REGEX = /^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}$/;
|
|
24
27
|
CodeValidatorUtil.ADDHAR_REGEX = /^[2-9]{1}[0-9]{3}[0-9]{4}[0-9]{4}$/;
|
|
28
|
+
CodeValidatorUtil.IFSC_REGEX = /^[A-Z]{4}0[A-Z0-9]{6}$/;
|
|
@@ -63,4 +63,16 @@ export declare class DateCodeModel {
|
|
|
63
63
|
currFY: string;
|
|
64
64
|
};
|
|
65
65
|
static getCurrentTimestampCode(): string;
|
|
66
|
+
/**
|
|
67
|
+
* Creates a DateCodeModel instance directly from a JavaScript Date object.
|
|
68
|
+
* Internally formats the date to "yyyyMMdd" and constructs the model.
|
|
69
|
+
*
|
|
70
|
+
* @param date - A valid JavaScript Date object
|
|
71
|
+
* @returns A new DateCodeModel instance representing the given date
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* const model = DateCodeModel.fromDateObject(new Date('2025-01-01'));
|
|
75
|
+
* // equivalent to: new DateCodeModel(DateCodeModel.fromDate(new Date('2025-01-01')))
|
|
76
|
+
*/
|
|
77
|
+
static fromDateObject(date: Date): DateCodeModel;
|
|
66
78
|
}
|
|
@@ -316,5 +316,19 @@ class DateCodeModel {
|
|
|
316
316
|
const minutes = String(nowIST.getUTCMinutes()).padStart(2, "0");
|
|
317
317
|
return `${year}${month}${day} ${hours}${minutes}`;
|
|
318
318
|
}
|
|
319
|
+
/**
|
|
320
|
+
* Creates a DateCodeModel instance directly from a JavaScript Date object.
|
|
321
|
+
* Internally formats the date to "yyyyMMdd" and constructs the model.
|
|
322
|
+
*
|
|
323
|
+
* @param date - A valid JavaScript Date object
|
|
324
|
+
* @returns A new DateCodeModel instance representing the given date
|
|
325
|
+
*
|
|
326
|
+
* @example
|
|
327
|
+
* const model = DateCodeModel.fromDateObject(new Date('2025-01-01'));
|
|
328
|
+
* // equivalent to: new DateCodeModel(DateCodeModel.fromDate(new Date('2025-01-01')))
|
|
329
|
+
*/
|
|
330
|
+
static fromDateObject(date) {
|
|
331
|
+
return new DateCodeModel(DateCodeModel.fromDate(date));
|
|
332
|
+
}
|
|
319
333
|
}
|
|
320
334
|
exports.DateCodeModel = DateCodeModel;
|
|
@@ -34,4 +34,15 @@ export declare function toTitleCase(input: string): string;
|
|
|
34
34
|
* @returns A title-cased, space-separated string
|
|
35
35
|
*/
|
|
36
36
|
export declare function camelCaseToTitle(input: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* Capitalizes the first character of a string.
|
|
39
|
+
*
|
|
40
|
+
* @param str - The string to capitalize
|
|
41
|
+
* @returns The string with its first character uppercased
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* capitalizeFirstWord('basicAmount') // 'BasicAmount'
|
|
45
|
+
* capitalizeFirstWord('totalNetAmount') // 'TotalNetAmount'
|
|
46
|
+
* capitalizeFirstWord('') // ''
|
|
47
|
+
*/
|
|
37
48
|
export declare function capitalizeFirstWord(str: string): string;
|
|
@@ -67,6 +67,17 @@ function camelCaseToTitle(input) {
|
|
|
67
67
|
// capitalize first letter
|
|
68
68
|
.replace(/^./, (char) => char.toUpperCase()));
|
|
69
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Capitalizes the first character of a string.
|
|
72
|
+
*
|
|
73
|
+
* @param str - The string to capitalize
|
|
74
|
+
* @returns The string with its first character uppercased
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* capitalizeFirstWord('basicAmount') // 'BasicAmount'
|
|
78
|
+
* capitalizeFirstWord('totalNetAmount') // 'TotalNetAmount'
|
|
79
|
+
* capitalizeFirstWord('') // ''
|
|
80
|
+
*/
|
|
70
81
|
function capitalizeFirstWord(str) {
|
|
71
82
|
if (!str)
|
|
72
83
|
return str;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "law-common",
|
|
3
|
-
"version": "10.63.
|
|
3
|
+
"version": "10.63.4-beta.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"files": [
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
"link": "npm run build && npm link",
|
|
17
17
|
"test": "jest",
|
|
18
18
|
"format": "prettier --write .",
|
|
19
|
-
"check-format": "prettier --check ."
|
|
19
|
+
"check-format": "prettier --check .",
|
|
20
|
+
"pull:link": "git pull && npm run link"
|
|
20
21
|
},
|
|
21
22
|
"keywords": [],
|
|
22
23
|
"author": "",
|