@mody-park-cha-raja/finance_common 4.21.0 → 4.21.1-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/index.d.mts +13 -3
- package/dist/index.d.ts +13 -3
- package/dist/index.js +22 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +21 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -58,6 +58,13 @@ declare enum SponsorTier {
|
|
|
58
58
|
GENERAL_SPONSOR = "General Sponsor"
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
declare enum TransactionEntityType {
|
|
62
|
+
DONATION = "donation",
|
|
63
|
+
SPONSOR = "sponsor",
|
|
64
|
+
EXPENSE = "expense",
|
|
65
|
+
DAAN_PETI = "daan_peti"
|
|
66
|
+
}
|
|
67
|
+
|
|
61
68
|
declare enum TransactionType {
|
|
62
69
|
INCOME = "Income",
|
|
63
70
|
EXPENSE = "Expense"
|
|
@@ -153,7 +160,8 @@ interface ITransactionEntity extends IAuditColumnEntity {
|
|
|
153
160
|
particulars: string;
|
|
154
161
|
amount: number;
|
|
155
162
|
balanceAfter: number;
|
|
156
|
-
referenceId:
|
|
163
|
+
referenceId: number | null;
|
|
164
|
+
entityType?: TransactionEntityType | null;
|
|
157
165
|
paymentType: PaymentType;
|
|
158
166
|
status?: EntityStatus;
|
|
159
167
|
}
|
|
@@ -442,7 +450,8 @@ declare class TransactionModel extends BaseEntityModel implements ITransactionEn
|
|
|
442
450
|
particulars: string;
|
|
443
451
|
amount: number;
|
|
444
452
|
balanceAfter: number;
|
|
445
|
-
referenceId:
|
|
453
|
+
referenceId: number | null;
|
|
454
|
+
entityType: TransactionEntityType | null;
|
|
446
455
|
paymentType: PaymentType;
|
|
447
456
|
status: EntityStatus;
|
|
448
457
|
createdOn: number;
|
|
@@ -454,6 +463,7 @@ declare class TransactionModel extends BaseEntityModel implements ITransactionEn
|
|
|
454
463
|
protected constructor();
|
|
455
464
|
static relations: Partial<Record<EntityList, IModelRelationConfig<EntityList>>>;
|
|
456
465
|
static populateFromEntity(entity: ITransactionEntity): TransactionModel;
|
|
466
|
+
static toReferenceId(entityType: TransactionEntityType | null | undefined, referenceId: number | null | undefined): string;
|
|
457
467
|
static toCashBookEntry(tx: TransactionModel): ICashBookEntry;
|
|
458
468
|
static toCashBook(txns: TransactionModel[]): ICashBookEntry[];
|
|
459
469
|
}
|
|
@@ -797,4 +807,4 @@ interface IConfigurationUpdateDto extends IEntityUpdateDto<EntityType<EntityList
|
|
|
797
807
|
interface IConfigurationSearchDto extends IEntityFilterData<EntityType<EntityList.CONFIGURATION>> {
|
|
798
808
|
}
|
|
799
809
|
|
|
800
|
-
export { BadRequestException, BaseEntityModel, ConfigurationKey, ConfigurationModel, ConfigurationType, DateCodeUtils, DateUtil, DonationHistoryModel, DonationModel, EntityFilterDataHelper, EntityHistoryOperation, EntityList, type EntityListEntityModelMap, type EntityModelType, EntityStatus, type EntityType, ExpenseHistoryModel, ExpenseModel, ExpenseType, FLATS_BY_WING, FLAT_NUMBERS, type FlatCollectionEntry, type FlatCollectionStatus, type FlatDonationLike, FlatModel, type FlatOption, type FlatParseResult, ForbiddenException, HttpException, type IAuditColumnEntity, type IBaseHistoryEntity, type ICashBookEntry, type IConfigurationCreateDto, type IConfigurationEntity, type IConfigurationSearchDto, type IConfigurationUpdateDto, type IDonationCreateDto, type IDonationEntity, type IDonationHistoryEntity, type IDonationSearchDto, type IDonationUpdateDto, type IDtoValidationError, type IEntityCreateDto, type IEntityFilterData, type IEntityFilterSearchData, type IEntityFilterSearchDataV2, type IEntityUpdateDto, type IExpenseCreateDto, type IExpenseEntity, type IExpenseHistoryEntity, type IExpenseSearchDto, type IExpenseUpdateDto, type IMappingPropertyEntry, type IModelRelationConfig, type ISearchV2Response, type ISponsorCreateDto, type ISponsorEntity, type ISponsorHistoryEntity, type ISponsorSearchDto, type ISponsorUpdateDto, type ITransactionCreateDto, type ITransactionEntity, type ITransactionHistoryEntity, type ITransactionSearchDto, type ITransactionUpdateDto, type IUserCreateDto, type IUserEntity, type IUserHistoryEntity, type IUserSearchDto, type IUserUpdateDto, type IVendorCreateDto, type IVendorEntity, type IVendorHistoryEntity, type IVendorSearchDto, type IVendorUpdateDto, NotFoundException, type Nullable, OrderByDirection, PAYMENT_OPTIONS, PaymentType, ReferenceIdPrefix, RelationType, SPECIAL_FLATS, SponsorHistoryModel, SponsorModel, SponsorTier, TransactionHistoryModel, TransactionModel, TransactionType, USER_RELATION_CONFIG, UnauthorizedException, UserHistoryModel, UserModel, VendorHistoryModel, VendorModel, VendorType, WINGS, convertNumberToWords, definedValues, diffArrays, entityListEntityModelMap, epochToReadableDate, getObjectDiffingKeys, groupBy };
|
|
810
|
+
export { BadRequestException, BaseEntityModel, ConfigurationKey, ConfigurationModel, ConfigurationType, DateCodeUtils, DateUtil, DonationHistoryModel, DonationModel, EntityFilterDataHelper, EntityHistoryOperation, EntityList, type EntityListEntityModelMap, type EntityModelType, EntityStatus, type EntityType, ExpenseHistoryModel, ExpenseModel, ExpenseType, FLATS_BY_WING, FLAT_NUMBERS, type FlatCollectionEntry, type FlatCollectionStatus, type FlatDonationLike, FlatModel, type FlatOption, type FlatParseResult, ForbiddenException, HttpException, type IAuditColumnEntity, type IBaseHistoryEntity, type ICashBookEntry, type IConfigurationCreateDto, type IConfigurationEntity, type IConfigurationSearchDto, type IConfigurationUpdateDto, type IDonationCreateDto, type IDonationEntity, type IDonationHistoryEntity, type IDonationSearchDto, type IDonationUpdateDto, type IDtoValidationError, type IEntityCreateDto, type IEntityFilterData, type IEntityFilterSearchData, type IEntityFilterSearchDataV2, type IEntityUpdateDto, type IExpenseCreateDto, type IExpenseEntity, type IExpenseHistoryEntity, type IExpenseSearchDto, type IExpenseUpdateDto, type IMappingPropertyEntry, type IModelRelationConfig, type ISearchV2Response, type ISponsorCreateDto, type ISponsorEntity, type ISponsorHistoryEntity, type ISponsorSearchDto, type ISponsorUpdateDto, type ITransactionCreateDto, type ITransactionEntity, type ITransactionHistoryEntity, type ITransactionSearchDto, type ITransactionUpdateDto, type IUserCreateDto, type IUserEntity, type IUserHistoryEntity, type IUserSearchDto, type IUserUpdateDto, type IVendorCreateDto, type IVendorEntity, type IVendorHistoryEntity, type IVendorSearchDto, type IVendorUpdateDto, NotFoundException, type Nullable, OrderByDirection, PAYMENT_OPTIONS, PaymentType, ReferenceIdPrefix, RelationType, SPECIAL_FLATS, SponsorHistoryModel, SponsorModel, SponsorTier, TransactionEntityType, TransactionHistoryModel, TransactionModel, TransactionType, USER_RELATION_CONFIG, UnauthorizedException, UserHistoryModel, UserModel, VendorHistoryModel, VendorModel, VendorType, WINGS, convertNumberToWords, definedValues, diffArrays, entityListEntityModelMap, epochToReadableDate, getObjectDiffingKeys, groupBy };
|
package/dist/index.d.ts
CHANGED
|
@@ -58,6 +58,13 @@ declare enum SponsorTier {
|
|
|
58
58
|
GENERAL_SPONSOR = "General Sponsor"
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
+
declare enum TransactionEntityType {
|
|
62
|
+
DONATION = "donation",
|
|
63
|
+
SPONSOR = "sponsor",
|
|
64
|
+
EXPENSE = "expense",
|
|
65
|
+
DAAN_PETI = "daan_peti"
|
|
66
|
+
}
|
|
67
|
+
|
|
61
68
|
declare enum TransactionType {
|
|
62
69
|
INCOME = "Income",
|
|
63
70
|
EXPENSE = "Expense"
|
|
@@ -153,7 +160,8 @@ interface ITransactionEntity extends IAuditColumnEntity {
|
|
|
153
160
|
particulars: string;
|
|
154
161
|
amount: number;
|
|
155
162
|
balanceAfter: number;
|
|
156
|
-
referenceId:
|
|
163
|
+
referenceId: number | null;
|
|
164
|
+
entityType?: TransactionEntityType | null;
|
|
157
165
|
paymentType: PaymentType;
|
|
158
166
|
status?: EntityStatus;
|
|
159
167
|
}
|
|
@@ -442,7 +450,8 @@ declare class TransactionModel extends BaseEntityModel implements ITransactionEn
|
|
|
442
450
|
particulars: string;
|
|
443
451
|
amount: number;
|
|
444
452
|
balanceAfter: number;
|
|
445
|
-
referenceId:
|
|
453
|
+
referenceId: number | null;
|
|
454
|
+
entityType: TransactionEntityType | null;
|
|
446
455
|
paymentType: PaymentType;
|
|
447
456
|
status: EntityStatus;
|
|
448
457
|
createdOn: number;
|
|
@@ -454,6 +463,7 @@ declare class TransactionModel extends BaseEntityModel implements ITransactionEn
|
|
|
454
463
|
protected constructor();
|
|
455
464
|
static relations: Partial<Record<EntityList, IModelRelationConfig<EntityList>>>;
|
|
456
465
|
static populateFromEntity(entity: ITransactionEntity): TransactionModel;
|
|
466
|
+
static toReferenceId(entityType: TransactionEntityType | null | undefined, referenceId: number | null | undefined): string;
|
|
457
467
|
static toCashBookEntry(tx: TransactionModel): ICashBookEntry;
|
|
458
468
|
static toCashBook(txns: TransactionModel[]): ICashBookEntry[];
|
|
459
469
|
}
|
|
@@ -797,4 +807,4 @@ interface IConfigurationUpdateDto extends IEntityUpdateDto<EntityType<EntityList
|
|
|
797
807
|
interface IConfigurationSearchDto extends IEntityFilterData<EntityType<EntityList.CONFIGURATION>> {
|
|
798
808
|
}
|
|
799
809
|
|
|
800
|
-
export { BadRequestException, BaseEntityModel, ConfigurationKey, ConfigurationModel, ConfigurationType, DateCodeUtils, DateUtil, DonationHistoryModel, DonationModel, EntityFilterDataHelper, EntityHistoryOperation, EntityList, type EntityListEntityModelMap, type EntityModelType, EntityStatus, type EntityType, ExpenseHistoryModel, ExpenseModel, ExpenseType, FLATS_BY_WING, FLAT_NUMBERS, type FlatCollectionEntry, type FlatCollectionStatus, type FlatDonationLike, FlatModel, type FlatOption, type FlatParseResult, ForbiddenException, HttpException, type IAuditColumnEntity, type IBaseHistoryEntity, type ICashBookEntry, type IConfigurationCreateDto, type IConfigurationEntity, type IConfigurationSearchDto, type IConfigurationUpdateDto, type IDonationCreateDto, type IDonationEntity, type IDonationHistoryEntity, type IDonationSearchDto, type IDonationUpdateDto, type IDtoValidationError, type IEntityCreateDto, type IEntityFilterData, type IEntityFilterSearchData, type IEntityFilterSearchDataV2, type IEntityUpdateDto, type IExpenseCreateDto, type IExpenseEntity, type IExpenseHistoryEntity, type IExpenseSearchDto, type IExpenseUpdateDto, type IMappingPropertyEntry, type IModelRelationConfig, type ISearchV2Response, type ISponsorCreateDto, type ISponsorEntity, type ISponsorHistoryEntity, type ISponsorSearchDto, type ISponsorUpdateDto, type ITransactionCreateDto, type ITransactionEntity, type ITransactionHistoryEntity, type ITransactionSearchDto, type ITransactionUpdateDto, type IUserCreateDto, type IUserEntity, type IUserHistoryEntity, type IUserSearchDto, type IUserUpdateDto, type IVendorCreateDto, type IVendorEntity, type IVendorHistoryEntity, type IVendorSearchDto, type IVendorUpdateDto, NotFoundException, type Nullable, OrderByDirection, PAYMENT_OPTIONS, PaymentType, ReferenceIdPrefix, RelationType, SPECIAL_FLATS, SponsorHistoryModel, SponsorModel, SponsorTier, TransactionHistoryModel, TransactionModel, TransactionType, USER_RELATION_CONFIG, UnauthorizedException, UserHistoryModel, UserModel, VendorHistoryModel, VendorModel, VendorType, WINGS, convertNumberToWords, definedValues, diffArrays, entityListEntityModelMap, epochToReadableDate, getObjectDiffingKeys, groupBy };
|
|
810
|
+
export { BadRequestException, BaseEntityModel, ConfigurationKey, ConfigurationModel, ConfigurationType, DateCodeUtils, DateUtil, DonationHistoryModel, DonationModel, EntityFilterDataHelper, EntityHistoryOperation, EntityList, type EntityListEntityModelMap, type EntityModelType, EntityStatus, type EntityType, ExpenseHistoryModel, ExpenseModel, ExpenseType, FLATS_BY_WING, FLAT_NUMBERS, type FlatCollectionEntry, type FlatCollectionStatus, type FlatDonationLike, FlatModel, type FlatOption, type FlatParseResult, ForbiddenException, HttpException, type IAuditColumnEntity, type IBaseHistoryEntity, type ICashBookEntry, type IConfigurationCreateDto, type IConfigurationEntity, type IConfigurationSearchDto, type IConfigurationUpdateDto, type IDonationCreateDto, type IDonationEntity, type IDonationHistoryEntity, type IDonationSearchDto, type IDonationUpdateDto, type IDtoValidationError, type IEntityCreateDto, type IEntityFilterData, type IEntityFilterSearchData, type IEntityFilterSearchDataV2, type IEntityUpdateDto, type IExpenseCreateDto, type IExpenseEntity, type IExpenseHistoryEntity, type IExpenseSearchDto, type IExpenseUpdateDto, type IMappingPropertyEntry, type IModelRelationConfig, type ISearchV2Response, type ISponsorCreateDto, type ISponsorEntity, type ISponsorHistoryEntity, type ISponsorSearchDto, type ISponsorUpdateDto, type ITransactionCreateDto, type ITransactionEntity, type ITransactionHistoryEntity, type ITransactionSearchDto, type ITransactionUpdateDto, type IUserCreateDto, type IUserEntity, type IUserHistoryEntity, type IUserSearchDto, type IUserUpdateDto, type IVendorCreateDto, type IVendorEntity, type IVendorHistoryEntity, type IVendorSearchDto, type IVendorUpdateDto, NotFoundException, type Nullable, OrderByDirection, PAYMENT_OPTIONS, PaymentType, ReferenceIdPrefix, RelationType, SPECIAL_FLATS, SponsorHistoryModel, SponsorModel, SponsorTier, TransactionEntityType, TransactionHistoryModel, TransactionModel, TransactionType, USER_RELATION_CONFIG, UnauthorizedException, UserHistoryModel, UserModel, VendorHistoryModel, VendorModel, VendorType, WINGS, convertNumberToWords, definedValues, diffArrays, entityListEntityModelMap, epochToReadableDate, getObjectDiffingKeys, groupBy };
|
package/dist/index.js
CHANGED
|
@@ -51,6 +51,7 @@ __export(index_exports, {
|
|
|
51
51
|
SponsorHistoryModel: () => SponsorHistoryModel,
|
|
52
52
|
SponsorModel: () => SponsorModel,
|
|
53
53
|
SponsorTier: () => SponsorTier,
|
|
54
|
+
TransactionEntityType: () => TransactionEntityType,
|
|
54
55
|
TransactionHistoryModel: () => TransactionHistoryModel,
|
|
55
56
|
TransactionModel: () => TransactionModel,
|
|
56
57
|
TransactionType: () => TransactionType,
|
|
@@ -475,6 +476,15 @@ var SponsorTier = /* @__PURE__ */ ((SponsorTier2) => {
|
|
|
475
476
|
return SponsorTier2;
|
|
476
477
|
})(SponsorTier || {});
|
|
477
478
|
|
|
479
|
+
// src/enums/transaction-entity-type.enum.ts
|
|
480
|
+
var TransactionEntityType = /* @__PURE__ */ ((TransactionEntityType3) => {
|
|
481
|
+
TransactionEntityType3["DONATION"] = "donation";
|
|
482
|
+
TransactionEntityType3["SPONSOR"] = "sponsor";
|
|
483
|
+
TransactionEntityType3["EXPENSE"] = "expense";
|
|
484
|
+
TransactionEntityType3["DAAN_PETI"] = "daan_peti";
|
|
485
|
+
return TransactionEntityType3;
|
|
486
|
+
})(TransactionEntityType || {});
|
|
487
|
+
|
|
478
488
|
// src/enums/transaction-type.enum.ts
|
|
479
489
|
var TransactionType = /* @__PURE__ */ ((TransactionType2) => {
|
|
480
490
|
TransactionType2["INCOME"] = "Income";
|
|
@@ -1122,7 +1132,8 @@ var _TransactionModel = class _TransactionModel extends BaseEntityModel {
|
|
|
1122
1132
|
this.particulars = "";
|
|
1123
1133
|
this.amount = 0;
|
|
1124
1134
|
this.balanceAfter = 0;
|
|
1125
|
-
this.referenceId =
|
|
1135
|
+
this.referenceId = null;
|
|
1136
|
+
this.entityType = null;
|
|
1126
1137
|
this.paymentType = "Cash" /* CASH */;
|
|
1127
1138
|
this.status = "Active" /* ACTIVE */;
|
|
1128
1139
|
this.createdOn = 0;
|
|
@@ -1133,9 +1144,16 @@ var _TransactionModel = class _TransactionModel extends BaseEntityModel {
|
|
|
1133
1144
|
static populateFromEntity(entity) {
|
|
1134
1145
|
return Object.assign(new _TransactionModel(), entity, {
|
|
1135
1146
|
amount: Number(entity.amount),
|
|
1136
|
-
balanceAfter: Number(entity.balanceAfter)
|
|
1147
|
+
balanceAfter: Number(entity.balanceAfter),
|
|
1148
|
+
referenceId: entity.referenceId != null ? Number(entity.referenceId) : null
|
|
1137
1149
|
});
|
|
1138
1150
|
}
|
|
1151
|
+
static toReferenceId(entityType, referenceId) {
|
|
1152
|
+
if (entityType == null) {
|
|
1153
|
+
return referenceId != null ? String(referenceId) : "";
|
|
1154
|
+
}
|
|
1155
|
+
return referenceId != null ? `${entityType}-${referenceId}` : entityType;
|
|
1156
|
+
}
|
|
1139
1157
|
static toCashBookEntry(tx) {
|
|
1140
1158
|
const isExpense = tx.type === "Expense" /* EXPENSE */;
|
|
1141
1159
|
return {
|
|
@@ -1144,7 +1162,7 @@ var _TransactionModel = class _TransactionModel extends BaseEntityModel {
|
|
|
1144
1162
|
receipt: isExpense ? 0 : tx.amount,
|
|
1145
1163
|
payment: isExpense ? tx.amount : 0,
|
|
1146
1164
|
balance: tx.balanceAfter,
|
|
1147
|
-
referenceId: tx.referenceId
|
|
1165
|
+
referenceId: _TransactionModel.toReferenceId(tx.entityType, tx.referenceId)
|
|
1148
1166
|
};
|
|
1149
1167
|
}
|
|
1150
1168
|
static toCashBook(txns) {
|
|
@@ -1615,6 +1633,7 @@ var USER_RELATION_CONFIG = {
|
|
|
1615
1633
|
SponsorHistoryModel,
|
|
1616
1634
|
SponsorModel,
|
|
1617
1635
|
SponsorTier,
|
|
1636
|
+
TransactionEntityType,
|
|
1618
1637
|
TransactionHistoryModel,
|
|
1619
1638
|
TransactionModel,
|
|
1620
1639
|
TransactionType,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/data/flats.ts","../src/enums/configuration-key.enum.ts","../src/enums/configuration-type.enum.ts","../src/enums/entity-history-operation.enum.ts","../src/enums/entity-status.enum.ts","../src/enums/expense-type.enum.ts","../src/enums/payment-type.enum.ts","../src/enums/reference-id-prefix.enum.ts","../src/enums/sponsor-tier.enum.ts","../src/enums/transaction-type.enum.ts","../src/enums/vendor-type.enum.ts","../src/data/payment-options.ts","../src/utils/date-code.utils.ts","../src/utils/date.utils.ts","../src/models/base.entity.model.ts","../src/models/donation-history.entity.model.ts","../src/models/donation.entity.model.ts","../src/models/expense-history.entity.model.ts","../src/models/expense.entity.model.ts","../src/utils/numberToWords.ts","../src/models/flat.entity.model.ts","../src/models/sponsor-history.entity.model.ts","../src/models/sponsor.entity.model.ts","../src/models/transaction-history.entity.model.ts","../src/models/transaction.entity.model.ts","../src/models/user-history.entity.model.ts","../src/models/user.entity.model.ts","../src/models/vendor-history.entity.model.ts","../src/models/vendor.entity.model.ts","../src/models/configuration.entity.model.ts","../src/utils/entity.utils.ts","../src/utils/entitiy-list-entity-model-map.ts","../src/utils/error.utils.ts","../src/utils/helper.fns.ts","../src/utils/relation-config.utils.ts","../src/utils/sql-utils.ts","../src/helpers/entity-filter-data.helper.ts","../src/interfaces/entities/user.entity.interface.ts"],"sourcesContent":["export * from \"./data/index\";\r\nexport * from \"./enums/index\";\r\nexport * from \"./helpers/index\";\r\nexport * from \"./interfaces/dtos\";\r\nexport * from \"./interfaces/index\";\r\nexport * from \"./models/index\";\r\nexport * from \"./types/index\";\r\nexport * from \"./utils/index\";\r\n","export const SPECIAL_FLATS: readonly string[] = [\r\n 'Devotee',\r\n 'Ex-Member Devotee',\r\n 'Others',\r\n];\r\n\r\nconst FLAT_NUMBERS_DATA: string[] = [\r\n 'A-101',\r\n 'A-102',\r\n 'A-103',\r\n 'A-104',\r\n 'A-105',\r\n 'A-106',\r\n 'A-201',\r\n 'A-202',\r\n 'A-203',\r\n 'A-204',\r\n 'A-205',\r\n 'A-206',\r\n 'A-301',\r\n 'A-302',\r\n 'A-303',\r\n 'A-304',\r\n 'A-305',\r\n 'A-306',\r\n 'A-401',\r\n 'A-402',\r\n 'A-403',\r\n 'A-404',\r\n 'A-405',\r\n 'A-406',\r\n 'A-501',\r\n 'A-502',\r\n 'A-503',\r\n 'A-504',\r\n 'A-505',\r\n 'A-506',\r\n 'A-601',\r\n 'A-602',\r\n 'A-603',\r\n 'A-604',\r\n 'A-605',\r\n 'A-606',\r\n 'A-701',\r\n 'A-702',\r\n 'A-703',\r\n 'A-704',\r\n 'A-705',\r\n 'A-706',\r\n 'A-801',\r\n 'A-802',\r\n 'A-803',\r\n 'A-804',\r\n 'A-805',\r\n 'A-806',\r\n 'B-101',\r\n 'B-102',\r\n 'B-103',\r\n 'B-104',\r\n 'B-201',\r\n 'B-202',\r\n 'B-203',\r\n 'B-204',\r\n 'B-301',\r\n 'B-302',\r\n 'B-303',\r\n 'B-304',\r\n 'B-401',\r\n 'B-402',\r\n 'B-403',\r\n 'B-404',\r\n 'B-501',\r\n 'B-502',\r\n 'B-503',\r\n 'B-504',\r\n 'B-601',\r\n 'B-602',\r\n 'B-603',\r\n 'B-604',\r\n 'B-701',\r\n 'B-702',\r\n 'B-703',\r\n 'B-704',\r\n 'B-801',\r\n 'B-802',\r\n 'B-803',\r\n 'B-804',\r\n 'C-101',\r\n 'C-102',\r\n 'C-103',\r\n 'C-104',\r\n 'C-201',\r\n 'C-202',\r\n 'C-203',\r\n 'C-204',\r\n 'C-301',\r\n 'C-302',\r\n 'C-303',\r\n 'C-304',\r\n 'C-401',\r\n 'C-402',\r\n 'C-403',\r\n 'C-404',\r\n 'C-501',\r\n 'C-502',\r\n 'C-503',\r\n 'C-504',\r\n 'C-601',\r\n 'C-602',\r\n 'C-603',\r\n 'C-604',\r\n 'C-701',\r\n 'C-702',\r\n 'C-703',\r\n 'C-704',\r\n 'C-801',\r\n 'C-802',\r\n 'C-803',\r\n 'C-804',\r\n 'D-101',\r\n 'D-102',\r\n 'D-103',\r\n 'D-104',\r\n 'D-201',\r\n 'D-202',\r\n 'D-203',\r\n 'D-204',\r\n 'D-301',\r\n 'D-302',\r\n 'D-303',\r\n 'D-304',\r\n 'D-401',\r\n 'D-402',\r\n 'D-403',\r\n 'D-404',\r\n 'D-501',\r\n 'D-502',\r\n 'D-503',\r\n 'D-504',\r\n 'D-601',\r\n 'D-602',\r\n 'D-603',\r\n 'D-604',\r\n 'D-701',\r\n 'D-702',\r\n 'D-703',\r\n 'D-704',\r\n 'D-801',\r\n 'D-802',\r\n 'D-803',\r\n 'D-804',\r\n 'E-101A',\r\n 'E-101B',\r\n 'E-201',\r\n 'E-202',\r\n 'E-203',\r\n 'E-204',\r\n 'E-301',\r\n 'E-302',\r\n 'E-303',\r\n 'E-304',\r\n 'E-401',\r\n 'E-402',\r\n 'E-403',\r\n 'E-404',\r\n 'E-501',\r\n 'E-502',\r\n 'E-503',\r\n 'E-504',\r\n 'E-601',\r\n 'E-602',\r\n 'E-603',\r\n 'E-604',\r\n 'E-701',\r\n 'E-702',\r\n 'E-703',\r\n 'E-704',\r\n 'E-801',\r\n 'E-802',\r\n 'E-803',\r\n 'E-804',\r\n 'F-101',\r\n 'F-102',\r\n 'F-103',\r\n 'F-104',\r\n 'F-201',\r\n 'F-202',\r\n 'F-203',\r\n 'F-204',\r\n 'F-301',\r\n 'F-302',\r\n 'F-303',\r\n 'F-304',\r\n 'F-401',\r\n 'F-402',\r\n 'F-403',\r\n 'F-404',\r\n 'F-501',\r\n 'F-502',\r\n 'F-503',\r\n 'F-504',\r\n 'F-601',\r\n 'F-602',\r\n 'F-603',\r\n 'F-604',\r\n 'F-701',\r\n 'F-702',\r\n 'F-703',\r\n 'F-704',\r\n 'F-801',\r\n 'F-802',\r\n 'F-803',\r\n 'F-804',\r\n 'G-101',\r\n 'G-102',\r\n 'G-103',\r\n 'G-104',\r\n 'G-201',\r\n 'G-202',\r\n 'G-203',\r\n 'G-204',\r\n 'G-301',\r\n 'G-302',\r\n 'G-303',\r\n 'G-304',\r\n 'G-401',\r\n 'G-402',\r\n 'G-403',\r\n 'G-404',\r\n 'G-501',\r\n 'G-502',\r\n 'G-503',\r\n 'G-504',\r\n 'G-601',\r\n 'G-602',\r\n 'G-603',\r\n 'G-604',\r\n 'G-701',\r\n 'G-702',\r\n 'G-703',\r\n 'G-704',\r\n 'G-801',\r\n 'G-802',\r\n 'G-803',\r\n 'G-804',\r\n 'H-101',\r\n 'H-102',\r\n 'H-103',\r\n 'H-104',\r\n 'H-201',\r\n 'H-202',\r\n 'H-203',\r\n 'H-204',\r\n 'H-301',\r\n 'H-302',\r\n 'H-303',\r\n 'H-304',\r\n 'H-401',\r\n 'H-402',\r\n 'H-403',\r\n 'H-404',\r\n 'H-501',\r\n 'H-502',\r\n 'H-503',\r\n 'H-504',\r\n 'H-601',\r\n 'H-602',\r\n 'H-603',\r\n 'H-604',\r\n 'H-701',\r\n 'H-702',\r\n 'H-703',\r\n 'H-704',\r\n 'H-801',\r\n 'H-802',\r\n 'H-803',\r\n 'H-804',\r\n 'I-101',\r\n 'I-102',\r\n 'I-103',\r\n 'I-104',\r\n 'I-201',\r\n 'I-202',\r\n 'I-203',\r\n 'I-204',\r\n 'I-301',\r\n 'I-302',\r\n 'I-303',\r\n 'I-304',\r\n 'I-401',\r\n 'I-402',\r\n 'I-403',\r\n 'I-404',\r\n 'I-501',\r\n 'I-502',\r\n 'I-503',\r\n 'I-504',\r\n 'I-601',\r\n 'I-602',\r\n 'I-603',\r\n 'I-604',\r\n 'I-701',\r\n 'I-702',\r\n 'I-703',\r\n 'I-704',\r\n 'I-801',\r\n 'I-802',\r\n 'I-803',\r\n 'I-804',\r\n];\r\n\r\nexport const FLAT_NUMBERS: readonly string[] = FLAT_NUMBERS_DATA;\r\n\r\nexport const FLATS_BY_WING: ReadonlyMap<string, readonly string[]> = (() => {\r\n const map = new Map<string, string[]>();\r\n for (const flat of FLAT_NUMBERS_DATA) {\r\n const [wing, num] = flat.split('-');\r\n if (!map.has(wing)) {\r\n map.set(wing, []);\r\n }\r\n map.get(wing)!.push(num);\r\n }\r\n return map;\r\n})();\r\n\r\nexport const WINGS: readonly string[] = (() => {\r\n const wings: string[] = [];\r\n for (const flat of FLAT_NUMBERS_DATA) {\r\n const [wing] = flat.split('-');\r\n if (!wings.includes(wing)) {\r\n wings.push(wing);\r\n }\r\n }\r\n return wings;\r\n})();\r\n","export enum ConfigurationKey {\r\n OPENING_BALANCE = \"opening_balance\",\r\n EDIT_ALLOWANCE_PERIOD = \"edit_allowance_period\",\r\n PAGE_SIZE = \"page_size\",\r\n}\r\n","export enum ConfigurationType {\r\n NUMBER = 'number',\r\n STRING = 'string',\r\n CRONJOB_EXPRESSION = 'cronjob_expression',\r\n JSON = 'json',\r\n}\r\n","export enum EntityHistoryOperation {\r\n CREATE = 'CREATE',\r\n UPDATE = 'UPDATE',\r\n DELETE = 'DELETE',\r\n}\r\n","export enum EntityStatus {\r\n ACTIVE = 'Active',\r\n DELETED = 'Deleted',\r\n}\r\n","export enum ExpenseType {\r\n DECORATION = 'Decoration',\r\n LIGHTING = 'Lighting',\r\n SOUND = 'Sound',\r\n PRASAD = 'Prasad',\r\n SECURITY = 'Security',\r\n TRANSPORTATION = 'Transportation',\r\n PRINTING = 'Printing',\r\n MISCELLANEOUS = 'Miscellaneous',\r\n}\r\n","export enum PaymentType {\r\n CASH = 'Cash',\r\n UPI = 'UPI',\r\n BANK_TRANSFER = 'Bank Transfer',\r\n}\r\n","export const ReferenceIdPrefix = {\r\n DONATION: 'DON',\r\n EXPENSE: 'EXP',\r\n SPONSOR: 'SPO',\r\n DAAN_PETI: 'DPB',\r\n} as const;\r\n","export enum SponsorTier {\r\n GOLD_SPONSOR = 'Gold Sponsor',\r\n SILVER_SPONSOR = 'Silver Sponsor',\r\n BRONZE_SPONSOR = 'Bronze Sponsor',\r\n GENERAL_SPONSOR = 'General Sponsor',\r\n}\r\n","export enum TransactionType {\r\n INCOME = 'Income',\r\n EXPENSE = 'Expense',\r\n}\r\n","export enum VendorType {\r\n SUPPLIER = 'Supplier',\r\n SERVICE_PROVIDER = 'Service Provider',\r\n CONTRACTOR = 'Contractor',\r\n OTHER = 'Other',\r\n}\r\n","import { PaymentType } from \"../enums\";\r\n\r\nexport const PAYMENT_OPTIONS: readonly { value: PaymentType; label: string }[] = [\r\n { value: PaymentType.CASH, label: \"Cash\" },\r\n { value: PaymentType.UPI, label: \"UPI\" },\r\n { value: PaymentType.BANK_TRANSFER, label: \"Bank Transfer\" },\r\n];\r\n","/**\r\n * Utility class for validating date codes in `YYYYMMDD` format.\r\n *\r\n * @example new DateCodeUtils(20240315)\r\n *\r\n * @methods\r\n * - `isValidYYYYMMDD()` — checks if the date code is a real calendar date. e.g. `new DateCodeUtils(20240315).isValidYYYYMMDD() // true`\r\n */\r\nexport class DateCodeUtils {\r\n stringifiedDateCode: string;\r\n constructor(private readonly dateCode: string | number) {\r\n this.stringifiedDateCode = String(this.dateCode);\r\n if (!this.isValidYYYYMMDD()) {\r\n throw new Error(\r\n `Invalid date code: \"${this.stringifiedDateCode}\". Expected format: YYYYMMDD.`,\r\n );\r\n }\r\n }\r\n\r\n isValidYYYYMMDD(): boolean {\r\n if (!/^\\d{8}$/.test(this.stringifiedDateCode)) return false;\r\n\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n if (month < 1 || month > 12) return false;\r\n if (day < 1 || day > 31) return false;\r\n\r\n const date = new Date(year, month - 1, day);\r\n return (\r\n date.getFullYear() === year &&\r\n date.getMonth() === month - 1 &&\r\n date.getDate() === day\r\n );\r\n }\r\n\r\n toLongDateString(): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n return new Date(year, month - 1, day).toLocaleDateString(\"en-US\", {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n });\r\n }\r\n\r\n addMonths(months: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year, month - 1 + months, day);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n addDays(days: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year, month - 1, day);\r\n date.setDate(date.getDate() + days);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n addWeeks(weeks: number): string {\r\n return this.addDays(weeks * 7);\r\n }\r\n\r\n addYears(years: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year + years, month - 1, day);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n private parseDateParts(): { year: number; month: number; day: number } {\r\n return {\r\n year: parseInt(this.stringifiedDateCode.substring(0, 4), 10),\r\n month: parseInt(this.stringifiedDateCode.substring(4, 6), 10),\r\n day: parseInt(this.stringifiedDateCode.substring(6, 8), 10),\r\n };\r\n }\r\n\r\n static getCurrentYear(): number {\r\n return new Date().getFullYear();\r\n }\r\n\r\n static daysDiff(dateCode: string | number): number {\r\n const { year, month, day } = new DateCodeUtils(dateCode).parseDateParts();\r\n const target = new Date(year, month - 1, day);\r\n const today = new Date();\r\n today.setHours(0, 0, 0, 0);\r\n\r\n const diffMs = target.getTime() - today.getTime();\r\n return Math.round(diffMs / (1000 * 60 * 60 * 24));\r\n }\r\n\r\n static getCurrentDateCode(): string {\r\n const today = new Date();\r\n const year = today.getFullYear();\r\n const month = String(today.getMonth() + 1).padStart(2, \"0\");\r\n const day = String(today.getDate()).padStart(2, \"0\");\r\n return `${year}${month}${day}`;\r\n }\r\n}\r\n","// src/common/helpers/date.util.ts\r\nexport class DateUtil {\r\n // Current time as epoch milliseconds\r\n static now(): number {\r\n return Date.now();\r\n }\r\n\r\n // Date object → epoch milliseconds\r\n static toEpoch(date: Date): number {\r\n return date.getTime();\r\n }\r\n\r\n // Epoch milliseconds → Date object\r\n static toDate(epoch: number): Date {\r\n return new Date(epoch);\r\n }\r\n\r\n // Epoch milliseconds → readable string\r\n static toReadable(epoch: number): string {\r\n return new Date(epoch).toISOString();\r\n }\r\n\r\n // Add days to epoch → returns epoch\r\n static addDays(epoch: number, days: number): number {\r\n return epoch + days * 24 * 60 * 60 * 1000;\r\n }\r\n\r\n // Add months to epoch → returns epoch\r\n static addMonths(epoch: number, months: number): number {\r\n const date = new Date(epoch);\r\n date.setMonth(date.getMonth() + months);\r\n return date.getTime();\r\n }\r\n\r\n // Add weeks to epoch → returns epoch\r\n static addWeeks(epoch: number, weeks: number): number {\r\n return this.addDays(epoch, weeks * 7);\r\n }\r\n\r\n // Add years to epoch → returns epoch\r\n static addYears(epoch: number, years: number): number {\r\n const date = new Date(epoch);\r\n date.setFullYear(date.getFullYear() + years);\r\n return date.getTime();\r\n }\r\n\r\n // Difference in days between two epochs\r\n static daysDifference(epoch1: number, epoch2: number): number {\r\n return Math.ceil((epoch2 - epoch1) / (1000 * 60 * 60 * 24));\r\n }\r\n\r\n // Check if epoch is today\r\n static isToday(epoch: number): boolean {\r\n const date = new Date(epoch);\r\n const today = new Date();\r\n return (\r\n date.getDate() === today.getDate() &&\r\n date.getMonth() === today.getMonth() &&\r\n date.getFullYear() === today.getFullYear()\r\n );\r\n }\r\n\r\n // Check if epoch is in the past\r\n static isPast(epoch: number): boolean {\r\n return epoch < Date.now();\r\n }\r\n\r\n // Check if epoch is in the future\r\n static isFuture(epoch: number): boolean {\r\n return epoch > Date.now();\r\n }\r\n}\r\n\r\n","import { ISearchV2Response } from \"../types/generic.dto.types\";\r\nimport {\r\n entityListEntityModelMap,\r\n IModelRelationConfig,\r\n RelationType,\r\n} from \"../utils\";\r\nimport { EntityList, EntityType } from \"../utils/entity.utils\";\r\n\r\nexport abstract class BaseEntityModel {\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {};\r\n\r\n // populateRelations(searchResponse: ISearchV2Response): this {\r\n // const relations = (this.constructor as typeof BaseEntityModel).relations;\r\n // for (const [prop, config] of Object.entries(relations)) {\r\n // const { relationType, mappingProperty, searchProperty, entity } = config!;\r\n // // @ts-ignore\r\n // const fkValue = this[mappingProperty];\r\n // const bucket = searchResponse[entity] ?? [];\r\n // if (!bucket.length) continue;\r\n\r\n // if (relationType === RelationType.ONE) {\r\n // // @ts-ignore\r\n // const match = bucket.find((e) => e[searchProperty] === fkValue);\r\n // if (match) {\r\n // const hydrated = (\r\n // entityListEntityModelMap[entity] as (\r\n // e: EntityType<EntityList>,\r\n // ) => any\r\n // )(match);\r\n // // recursively populate relations on the hydrated model\r\n // hydrated.populateRelations(searchResponse);\r\n // this[prop as keyof this] = hydrated;\r\n // }\r\n // } else {\r\n // const matches = bucket.filter(\r\n // (e: any) => e[searchProperty] === fkValue,\r\n // );\r\n // this[prop as keyof this] = matches.map((e: EntityType<EntityList>) => {\r\n // const hydrated = (\r\n // entityListEntityModelMap[entity] as (\r\n // e: EntityType<EntityList>,\r\n // ) => any\r\n // )(e);\r\n // // recursively populate relations on each hydrated model\r\n // hydrated.populateRelations(searchResponse);\r\n // return hydrated;\r\n // }) as this[keyof this];\r\n // }\r\n // }\r\n // return this;\r\n // }\r\n\r\n populateRelations(\r\n searchResponse: ISearchV2Response,\r\n visited = new Set<string>(),\r\n ): this {\r\n const selfKey = `${this.constructor.name}:${(this as any).id}`;\r\n if (visited.has(selfKey)) return this;\r\n visited.add(selfKey);\r\n\r\n const relations = (this.constructor as typeof BaseEntityModel).relations;\r\n for (const [, config] of Object.entries(relations)) {\r\n const { relationType, mappingProperties, searchProperty, entity } = config!;\r\n const bucket = searchResponse[entity] ?? [];\r\n if (!bucket.length) continue;\r\n\r\n const hydrateEntity = (raw: EntityType<EntityList>) => {\r\n const hydrated = (\r\n entityListEntityModelMap[entity] as (\r\n e: EntityType<EntityList>,\r\n ) => any\r\n )(raw);\r\n hydrated.populateRelations(searchResponse, visited);\r\n return hydrated;\r\n };\r\n\r\n if (relationType === RelationType.ONE) {\r\n for (const { sourceProperty, targetProperty } of mappingProperties) {\r\n // @ts-ignore\r\n const fkValue = this[sourceProperty];\r\n if (fkValue == null) continue;\r\n const match = bucket.find(\r\n (e: any) => e[searchProperty] === fkValue,\r\n );\r\n if (match) {\r\n (this as any)[targetProperty] = hydrateEntity(match);\r\n }\r\n }\r\n } else {\r\n const fkValues = mappingProperties\r\n .map((mp) => (this as any)[mp.sourceProperty])\r\n .filter((v: any) => v != null);\r\n const matches = bucket.filter((e: any) =>\r\n fkValues.includes(e[searchProperty]),\r\n );\r\n const targetProperty = mappingProperties[0]?.targetProperty;\r\n if (targetProperty && matches.length) {\r\n (this as any)[targetProperty] = matches.map(hydrateEntity);\r\n }\r\n }\r\n }\r\n return this;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IDonationHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class DonationHistoryModel\n extends BaseEntityModel\n implements IDonationHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.DONATION_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IDonationHistoryEntity,\n ): DonationHistoryModel {\n return Object.assign(new DonationHistoryModel(), entity);\n }\n}\n","import { EntityStatus, PaymentType } from \"../enums\";\r\nimport { IDonationEntity } from \"../interfaces\";\r\nimport {\r\n EntityList,\r\n IModelRelationConfig,\r\n RelationType,\r\n} from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\n\r\nexport class DonationModel extends BaseEntityModel implements IDonationEntity {\r\n id: number = 0;\r\n receiptNumber: string = \"\";\r\n flatNo: string = \"\";\r\n amount: number = 0;\r\n mobileNumber?: string;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n donationYear: number = new Date().getFullYear();\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: IDonationEntity): DonationModel {\r\n return Object.assign(new DonationModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n\r\n static getReceiptPrefix(flatNo: string): string {\r\n const year = new Date().getFullYear();\r\n if (flatNo === 'Devotee') return `MPCR-${year}-OD`;\r\n if (flatNo === 'Ex-Member Devotee') return `MPCR-${year}-EMD`;\r\n if (flatNo === 'Others') return `MPCR-${year}-OTH`;\r\n return `MPCR-${year}-${flatNo}`;\r\n }\r\n\r\n static generateReceiptNumber(flatNo: string, existingDonations: DonationModel[]): string {\r\n const count = existingDonations.filter(d => d.flatNo === flatNo).length + 1;\r\n const seq = String(count).padStart(2, '0');\r\n return `${DonationModel.getReceiptPrefix(flatNo)}-${seq}`;\r\n }\r\n\r\n static toWhatsAppNumber(mobile: string): string {\r\n const digits = mobile.replace(/\\D/g, '');\r\n if (digits.length === 0) return '';\r\n if (digits.length === 10) return `91${digits}`;\r\n return digits;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IExpenseHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class ExpenseHistoryModel\n extends BaseEntityModel\n implements IExpenseHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.EXPENSE_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IExpenseHistoryEntity,\n ): ExpenseHistoryModel {\n return Object.assign(new ExpenseHistoryModel(), entity);\n }\n}\n","import { EntityStatus, ExpenseType, PaymentType } from \"../enums\";\r\nimport { IExpenseEntity } from \"../interfaces\";\r\nimport { EntityList, IModelRelationConfig, RelationType } from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\nimport { VendorModel } from \"./vendor.entity.model\";\r\n\r\nexport class ExpenseModel extends BaseEntityModel implements IExpenseEntity {\r\n id: number = 0;\r\n name: string = \"\";\r\n type: ExpenseType = ExpenseType.MISCELLANEOUS;\r\n vendorId: number = 0;\r\n incurredBy: number = 0;\r\n amount: number = 0;\r\n billNumber?: string;\r\n remarks?: string;\r\n description?: string;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n incurredByUser?: UserModel;\r\n vendor?: VendorModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n { sourceProperty: \"incurredBy\", targetProperty: \"incurredByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n [EntityList.VENDOR]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"vendorId\", targetProperty: \"vendor\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.VENDOR,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: IExpenseEntity): ExpenseModel {\r\n return Object.assign(new ExpenseModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n\r\n get incurredByUserName() {\r\n return this.incurredByUser?.name;\r\n }\r\n\r\n get vendorName() {\r\n return this.vendor?.name ?? \"\";\r\n }\r\n}\r\n","export function convertNumberToWords(num: number): string {\r\n if (num === 0) return \"Zero Rupees Only\";\r\n\r\n const singleDigits = [\r\n \"\",\r\n \"One\",\r\n \"Two\",\r\n \"Three\",\r\n \"Four\",\r\n \"Five\",\r\n \"Six\",\r\n \"Seven\",\r\n \"Eight\",\r\n \"Nine\",\r\n ];\r\n const teenDigits = [\r\n \"Ten\",\r\n \"Eleven\",\r\n \"Twelve\",\r\n \"Thirteen\",\r\n \"Fourteen\",\r\n \"Fifteen\",\r\n \"Sixteen\",\r\n \"Seventeen\",\r\n \"Eighteen\",\r\n \"Nineteen\",\r\n ];\r\n const doubleDigits = [\r\n \"\",\r\n \"Ten\",\r\n \"Twenty\",\r\n \"Thirty\",\r\n \"Forty\",\r\n \"Fifty\",\r\n \"Sixty\",\r\n \"Seventy\",\r\n \"Eighty\",\r\n \"Ninety\",\r\n ];\r\n\r\n function convertGroup(val: number): string {\r\n let out = \"\";\r\n if (val >= 100) {\r\n out += singleDigits[Math.floor(val / 100)] + \" Hundred \";\r\n val %= 100;\r\n }\r\n if (val >= 10 && val < 20) {\r\n out += teenDigits[val - 10] + \" \";\r\n } else if (val >= 20) {\r\n out += doubleDigits[Math.floor(val / 10)] + \" \";\r\n val %= 10;\r\n if (val > 0) {\r\n out += singleDigits[val] + \" \";\r\n }\r\n } else if (val > 0) {\r\n out += singleDigits[val] + \" \";\r\n }\r\n return out.trim();\r\n }\r\n\r\n let temp = Math.floor(num);\r\n let words = \"\";\r\n\r\n if (temp >= 10000000) {\r\n const croresValue = Math.floor(temp / 10000000);\r\n words += convertGroup(croresValue) + \" Crore \";\r\n temp %= 10000000;\r\n }\r\n\r\n if (temp >= 100000) {\r\n const lakhsValue = Math.floor(temp / 100000);\r\n words += convertGroup(lakhsValue) + \" Lakh \";\r\n temp %= 100000;\r\n }\r\n\r\n if (temp >= 1000) {\r\n const thousandsValue = Math.floor(temp / 1000);\r\n words += convertGroup(thousandsValue) + \" Thousand \";\r\n temp %= 1000;\r\n }\r\n\r\n if (temp > 0) {\r\n words += convertGroup(temp);\r\n }\r\n\r\n return words.trim() + \" Rupees Only\";\r\n}\r\n","import {\r\n FLATS_BY_WING,\r\n FLAT_NUMBERS,\r\n SPECIAL_FLATS,\r\n WINGS,\r\n} from \"../data/flats\";\r\nimport { convertNumberToWords } from \"../utils/numberToWords\";\r\n\r\nexport interface FlatDonationLike {\r\n flatNo: string;\r\n amount: number;\r\n donationYear?: number;\r\n createdOn?: number;\r\n createdByUser?: { name?: string } | null;\r\n updatedByUser?: { name?: string } | null;\r\n}\r\n\r\nexport type FlatCollectionStatus = \"Paid\" | \"Pending\";\r\n\r\nexport interface FlatCollectionEntry {\r\n flatNumber: string;\r\n status: FlatCollectionStatus;\r\n amount: number;\r\n latestDonation?: FlatDonationLike | null;\r\n}\r\n\r\nexport interface FlatParseResult {\r\n wing?: string;\r\n num?: string;\r\n isSpecial: boolean;\r\n}\r\n\r\nexport interface FlatOption {\r\n label: string;\r\n value: string;\r\n}\r\n\r\nexport class FlatModel {\r\n static readonly FLAT_NUMBERS: readonly string[] = FLAT_NUMBERS;\r\n static readonly FLATS_BY_WING: ReadonlyMap<string, readonly string[]> =\r\n FLATS_BY_WING;\r\n static readonly SPECIAL_FLATS: readonly string[] = SPECIAL_FLATS;\r\n static readonly WINGS: readonly string[] = WINGS;\r\n\r\n static getDonationYear(): number {\r\n return new Date().getFullYear();\r\n }\r\n\r\n static buildFlatNumber(wing: string, num: string): string {\r\n return `${wing}-${num}`;\r\n }\r\n\r\n static isSpecialFlat(flatNo: string): boolean {\r\n return FlatModel.SPECIAL_FLATS.includes(flatNo);\r\n }\r\n\r\n static parseFlatNumber(flatNo: string): FlatParseResult {\r\n if (FlatModel.isSpecialFlat(flatNo)) {\r\n return { isSpecial: true };\r\n }\r\n const match = /^([A-Za-z])-([0-9]{1,3}[A-Za-z]?)$/.exec(flatNo);\r\n if (match) {\r\n return { wing: match[1], num: match[2], isSpecial: false };\r\n }\r\n return { isSpecial: false };\r\n }\r\n\r\n static getFlatOptions(wing: string): FlatOption[] {\r\n const wingFlats = FlatModel.FLATS_BY_WING.get(wing) ?? [];\r\n const all = [...wingFlats, ...FlatModel.SPECIAL_FLATS];\r\n return all.map((f) => ({\r\n label: FlatModel.isSpecialFlat(f) ? f : `${wing}-${f}`,\r\n value: f,\r\n }));\r\n }\r\n\r\n static getDisplayLabel(wing: string, flatNo: string): string {\r\n if (!flatNo) return \"\";\r\n if (FlatModel.isSpecialFlat(flatNo)) return flatNo;\r\n return `${wing}-${flatNo}`;\r\n }\r\n\r\n static computeCollectionStatus(\r\n donations: FlatDonationLike[],\r\n year: number,\r\n ): FlatCollectionEntry[] {\r\n return FlatModel.FLAT_NUMBERS.map((flatNumber) => {\r\n const flatDonations = donations.filter(\r\n (d) => d.donationYear === year && d.flatNo === flatNumber,\r\n );\r\n const amount = flatDonations.reduce((sum, d) => sum + d.amount, 0);\r\n const status: FlatCollectionStatus = amount > 0 ? \"Paid\" : \"Pending\";\r\n const latestDonation = flatDonations.length\r\n ? flatDonations.reduce((latest, d) =>\r\n (d.createdOn ?? 0) > (latest.createdOn ?? 0) ? d : latest,\r\n )\r\n : null;\r\n return { flatNumber, status, amount, latestDonation };\r\n });\r\n }\r\n\r\n static compareFlatNumbers(a: string, b: string): number {\r\n const isA = FlatModel.isSpecialFlat(a);\r\n const isB = FlatModel.isSpecialFlat(b);\r\n if (isA || isB) {\r\n if (isA && isB) {\r\n return (\r\n FlatModel.SPECIAL_FLATS.indexOf(a) -\r\n FlatModel.SPECIAL_FLATS.indexOf(b)\r\n );\r\n }\r\n return isA ? 1 : -1;\r\n }\r\n\r\n const pa = FlatModel.parseFlatNumber(a);\r\n const pb = FlatModel.parseFlatNumber(b);\r\n if (!pa.wing || !pa.num || !pb.wing || !pb.num) {\r\n return a < b ? -1 : a > b ? 1 : 0;\r\n }\r\n if (pa.wing !== pb.wing) {\r\n return pa.wing < pb.wing ? -1 : 1;\r\n }\r\n\r\n const numericA = Number(pa.num.replace(/[^0-9]/g, \"\"));\r\n const numericB = Number(pb.num.replace(/[^0-9]/g, \"\"));\r\n const floorA = Math.floor(numericA / 100);\r\n const floorB = Math.floor(numericB / 100);\r\n if (floorA !== floorB) return floorA - floorB;\r\n\r\n const unitA = numericA % 100;\r\n const unitB = numericB % 100;\r\n if (unitA !== unitB) return unitA - unitB;\r\n\r\n const suffixA = pa.num.replace(/\\d/g, \"\");\r\n const suffixB = pb.num.replace(/\\d/g, \"\");\r\n if (suffixA !== suffixB) return suffixA < suffixB ? -1 : 1;\r\n return 0;\r\n }\r\n\r\n static convertNumberToWords(num: number): string {\r\n return convertNumberToWords(num);\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { ISponsorHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class SponsorHistoryModel\n extends BaseEntityModel\n implements ISponsorHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.SPONSOR_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: ISponsorHistoryEntity,\n ): SponsorHistoryModel {\n return Object.assign(new SponsorHistoryModel(), entity);\n }\n}\n","import { EntityStatus, PaymentType } from \"../enums\";\r\nimport { ISponsorEntity } from \"../interfaces\";\r\nimport { EntityList, IModelRelationConfig, RelationType } from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\n\r\nexport class SponsorModel extends BaseEntityModel implements ISponsorEntity {\r\n id: number = 0;\r\n sponsorName: string = \"\";\r\n contactName: string = \"\";\r\n contactNo: string = \"\";\r\n sponsorFor: string = \"\";\r\n size: string = \"\";\r\n amount: number = 0;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: ISponsorEntity): SponsorModel {\r\n return Object.assign(new SponsorModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n\r\n get receiptNumber(): string {\r\n return `MPCR-SPR-${this.id}`;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { ITransactionHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class TransactionHistoryModel\n extends BaseEntityModel\n implements ITransactionHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.TRANSACTION_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: ITransactionHistoryEntity,\n ): TransactionHistoryModel {\n return Object.assign(new TransactionHistoryModel(), entity);\n }\n}\n","import { ICashBookEntry, ITransactionEntity } from \"../interfaces\";\r\nimport { EntityStatus, PaymentType, TransactionType } from \"../enums\";\r\nimport { EntityList, IModelRelationConfig, RelationType } from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\n\r\nexport class TransactionModel\r\n extends BaseEntityModel\r\n implements ITransactionEntity\r\n{\r\n id: number = 0;\r\n date: string = \"\";\r\n type: TransactionType = TransactionType.INCOME;\r\n particulars: string = \"\";\r\n amount: number = 0;\r\n balanceAfter: number = 0;\r\n referenceId: string = \"\";\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: ITransactionEntity): TransactionModel {\r\n return Object.assign(new TransactionModel(), entity, {\r\n amount: Number(entity.amount),\r\n balanceAfter: Number(entity.balanceAfter),\r\n });\r\n }\r\n\r\n static toCashBookEntry(tx: TransactionModel): ICashBookEntry {\r\n const isExpense = tx.type === TransactionType.EXPENSE;\r\n return {\r\n date: tx.date,\r\n particulars: tx.particulars,\r\n receipt: isExpense ? 0 : tx.amount,\r\n payment: isExpense ? tx.amount : 0,\r\n balance: tx.balanceAfter,\r\n referenceId: tx.referenceId,\r\n };\r\n }\r\n\r\n static toCashBook(txns: TransactionModel[]): ICashBookEntry[] {\r\n return txns.map(TransactionModel.toCashBookEntry);\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IUserHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class UserHistoryModel\n extends BaseEntityModel\n implements IUserHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.USER_HISTORY>>\n > = {};\n\n static populateFromEntity(entity: IUserHistoryEntity): UserHistoryModel {\n return Object.assign(new UserHistoryModel(), entity);\n }\n}\n","import { IUserEntity } from \"../interfaces\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class UserModel extends BaseEntityModel implements IUserEntity {\r\n id: number = 0;\r\n name: string = \"\";\r\n password: string = \"\";\r\n email: string = \"\";\r\n phone: string = \"\";\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n private static _superAdminEmail: string = \"\";\r\n\r\n static setSuperAdminEmail(email: string) {\r\n this._superAdminEmail = email;\r\n }\r\n\r\n static mandalAccountUser() {\r\n return { id: 0, name: \"Mandal Account\" } as UserModel;\r\n }\r\n\r\n static isSuperAdmin(email: string): boolean {\r\n return email === this._superAdminEmail;\r\n }\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: IUserEntity): UserModel {\r\n return Object.assign(new UserModel(), entity);\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IVendorHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class VendorHistoryModel\n extends BaseEntityModel\n implements IVendorHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.VENDOR_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IVendorHistoryEntity,\n ): VendorHistoryModel {\n return Object.assign(new VendorHistoryModel(), entity);\n }\n}\n","import { IVendorEntity } from \"../interfaces\";\r\nimport { EntityList, IModelRelationConfig, RelationType } from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\n\r\nexport class VendorModel extends BaseEntityModel implements IVendorEntity {\r\n id: number = 0;\r\n name: string = \"\";\r\n type: string = \"\";\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: IVendorEntity): VendorModel {\r\n return Object.assign(new VendorModel(), entity);\r\n }\r\n}\r\n","import { ConfigurationType } from \"../enums\";\r\nimport { IConfigurationEntity } from \"../interfaces\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class ConfigurationModel\r\n extends BaseEntityModel\r\n implements IConfigurationEntity\r\n{\r\n id: number = 0;\r\n key: string = \"\";\r\n value: string = \"\";\r\n type: ConfigurationType = ConfigurationType.STRING;\r\n label: string = \"\";\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: IConfigurationEntity): ConfigurationModel {\r\n return Object.assign(new ConfigurationModel(), entity);\r\n }\r\n\r\n static fallBackPageSize() {\r\n return this.defaultFallBackPageSize();\r\n }\r\n\r\n static defaultFallBackPageSize() {\r\n return 50;\r\n }\r\n}\r\n","import { IConfigurationEntity } from \"../interfaces/entities/configuration.entity.interface\";\r\nimport { IDonationHistoryEntity } from \"../interfaces/entities/donation-history.entity.interface\";\r\nimport { IDonationEntity } from \"../interfaces/entities/donation.entity.interface\";\r\nimport { IExpenseHistoryEntity } from \"../interfaces/entities/expense-history.entity.interface\";\r\nimport { IExpenseEntity } from \"../interfaces/entities/expense.entity.interface\";\r\nimport { ISponsorHistoryEntity } from \"../interfaces/entities/sponsor-history.entity.interface\";\r\nimport { ISponsorEntity } from \"../interfaces/entities/sponsor.entity.interface\";\r\nimport { ITransactionHistoryEntity } from \"../interfaces/entities/transaction-history.entity.interface\";\r\nimport { ITransactionEntity } from \"../interfaces/entities/transaction.entity.interface\";\r\nimport { IUserHistoryEntity } from \"../interfaces/entities/user-history.entity.interface\";\r\nimport { IUserEntity } from \"../interfaces/entities/user.entity.interface\";\r\nimport { IVendorHistoryEntity } from \"../interfaces/entities/vendor-history.entity.interface\";\r\nimport { IVendorEntity } from \"../interfaces/entities/vendor.entity.interface\";\r\nimport { ConfigurationModel } from \"../models/configuration.entity.model\";\r\nimport { DonationHistoryModel } from \"../models/donation-history.entity.model\";\r\nimport { DonationModel } from \"../models/donation.entity.model\";\r\nimport { ExpenseHistoryModel } from \"../models/expense-history.entity.model\";\r\nimport { ExpenseModel } from \"../models/expense.entity.model\";\r\nimport { SponsorHistoryModel } from \"../models/sponsor-history.entity.model\";\r\nimport { SponsorModel } from \"../models/sponsor.entity.model\";\r\nimport { TransactionHistoryModel } from \"../models/transaction-history.entity.model\";\r\nimport { TransactionModel } from \"../models/transaction.entity.model\";\r\nimport { UserHistoryModel } from \"../models/user-history.entity.model\";\r\nimport { UserModel } from \"../models/user.entity.model\";\r\nimport { VendorHistoryModel } from \"../models/vendor-history.entity.model\";\r\nimport { VendorModel } from \"../models/vendor.entity.model\";\r\n\r\nexport enum EntityList {\r\n DONATION = \"donation\",\r\n DONATION_HISTORY = \"donation_history\",\r\n USER = \"user\",\r\n USER_HISTORY = \"user_history\",\r\n EXPENSE = \"expense\",\r\n EXPENSE_HISTORY = \"expense_history\",\r\n VENDOR = \"vendor\",\r\n VENDOR_HISTORY = \"vendor_history\",\r\n TRANSACTION = \"transaction\",\r\n TRANSACTION_HISTORY = \"transaction_history\",\r\n SPONSOR = \"sponsor\",\r\n SPONSOR_HISTORY = \"sponsor_history\",\r\n CONFIGURATION = \"configuration\",\r\n}\r\n\r\nexport type EntityType<T extends EntityList> = T extends EntityList.DONATION\r\n ? IDonationEntity\r\n : T extends EntityList.DONATION_HISTORY\r\n ? IDonationHistoryEntity\r\n : T extends EntityList.USER\r\n ? IUserEntity\r\n : T extends EntityList.USER_HISTORY\r\n ? IUserHistoryEntity\r\n : T extends EntityList.EXPENSE\r\n ? IExpenseEntity\r\n : T extends EntityList.EXPENSE_HISTORY\r\n ? IExpenseHistoryEntity\r\n : T extends EntityList.VENDOR\r\n ? IVendorEntity\r\n : T extends EntityList.VENDOR_HISTORY\r\n ? IVendorHistoryEntity\r\n : T extends EntityList.TRANSACTION\r\n ? ITransactionEntity\r\n : T extends EntityList.TRANSACTION_HISTORY\r\n ? ITransactionHistoryEntity\r\n : T extends EntityList.SPONSOR\r\n ? ISponsorEntity\r\n : T extends EntityList.SPONSOR_HISTORY\r\n ? ISponsorHistoryEntity\r\n : T extends EntityList.CONFIGURATION\r\n ? IConfigurationEntity\r\n : never;\r\n\r\nexport type EntityModelType<T extends EntityList> =\r\n T extends EntityList.DONATION\r\n ? DonationModel\r\n : T extends EntityList.DONATION_HISTORY\r\n ? DonationHistoryModel\r\n : T extends EntityList.USER\r\n ? UserModel\r\n : T extends EntityList.USER_HISTORY\r\n ? UserHistoryModel\r\n : T extends EntityList.EXPENSE\r\n ? ExpenseModel\r\n : T extends EntityList.EXPENSE_HISTORY\r\n ? ExpenseHistoryModel\r\n : T extends EntityList.VENDOR\r\n ? VendorModel\r\n : T extends EntityList.VENDOR_HISTORY\r\n ? VendorHistoryModel\r\n : T extends EntityList.TRANSACTION\r\n ? TransactionModel\r\n : T extends EntityList.TRANSACTION_HISTORY\r\n ? TransactionHistoryModel\r\n : T extends EntityList.SPONSOR\r\n ? SponsorModel\r\n : T extends EntityList.SPONSOR_HISTORY\r\n ? SponsorHistoryModel\r\n : T extends EntityList.CONFIGURATION\r\n ? ConfigurationModel\r\n : never;\r\n\r\nexport type EntityListEntityModelMap = {\r\n [T in EntityList]: EntityModelType<T>[];\r\n};\r\n","import {\r\n ConfigurationModel,\r\n DonationHistoryModel,\r\n DonationModel,\r\n ExpenseHistoryModel,\r\n ExpenseModel,\r\n SponsorHistoryModel,\r\n SponsorModel,\r\n TransactionHistoryModel,\r\n TransactionModel,\r\n UserHistoryModel,\r\n UserModel,\r\n VendorHistoryModel,\r\n VendorModel,\r\n} from \"../models\";\r\nimport { EntityList } from \"./entity.utils\";\r\n\r\nexport const entityListEntityModelMap = {\r\n [EntityList.DONATION]: DonationModel.populateFromEntity,\r\n [EntityList.DONATION_HISTORY]: DonationHistoryModel.populateFromEntity,\r\n [EntityList.USER]: UserModel.populateFromEntity,\r\n [EntityList.USER_HISTORY]: UserHistoryModel.populateFromEntity,\r\n [EntityList.EXPENSE]: ExpenseModel.populateFromEntity,\r\n [EntityList.EXPENSE_HISTORY]: ExpenseHistoryModel.populateFromEntity,\r\n [EntityList.VENDOR]: VendorModel.populateFromEntity,\r\n [EntityList.VENDOR_HISTORY]: VendorHistoryModel.populateFromEntity,\r\n [EntityList.TRANSACTION]: TransactionModel.populateFromEntity,\r\n [EntityList.TRANSACTION_HISTORY]: TransactionHistoryModel.populateFromEntity,\r\n [EntityList.SPONSOR]: SponsorModel.populateFromEntity,\r\n [EntityList.SPONSOR_HISTORY]: SponsorHistoryModel.populateFromEntity,\r\n [EntityList.CONFIGURATION]: ConfigurationModel.populateFromEntity,\r\n};\r\n","export class HttpException extends Error {\r\n constructor(\r\n public readonly message: string,\r\n public readonly statusCode: number,\r\n public readonly key?: string,\r\n public readonly errors?: any,\r\n ) {\r\n super(message);\r\n this.name = this.constructor.name;\r\n if ((Error as any).captureStackTrace) {\r\n (Error as any).captureStackTrace(this, this.constructor);\r\n }\r\n }\r\n\r\n getResponse() {\r\n return {\r\n statusCode: this.statusCode,\r\n message: this.message,\r\n key: this.key,\r\n errors: this.errors,\r\n };\r\n }\r\n\r\n getStatus() {\r\n return this.statusCode;\r\n }\r\n}\r\n\r\nexport class BadRequestException extends HttpException {\r\n constructor(\r\n input: { key: string; message: string } | string | string[],\r\n errors?: any,\r\n ) {\r\n if (typeof input === \"object\" && !Array.isArray(input)) {\r\n super(input.message, 400, input.key, errors);\r\n } else {\r\n super(\r\n Array.isArray(input) ? input.join(\", \") : input,\r\n 400,\r\n undefined,\r\n errors,\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport class NotFoundException extends HttpException {\r\n constructor(input: { key: string; message: string } | string = \"Not Found\") {\r\n if (typeof input === \"object\") {\r\n super(input.message, 404, input.key);\r\n } else {\r\n super(input, 404);\r\n }\r\n }\r\n}\r\n\r\nexport class UnauthorizedException extends HttpException {\r\n constructor(\r\n input: { key: string; message: string } | string = \"Unauthorized\",\r\n ) {\r\n if (typeof input === \"object\") {\r\n super(input.message, 401, input.key);\r\n } else {\r\n super(input, 401);\r\n }\r\n }\r\n}\r\n\r\nexport class ForbiddenException extends HttpException {\r\n constructor(input: { key: string; message: string } | string = \"Forbidden\") {\r\n if (typeof input === \"object\") {\r\n super(input.message, 403, input.key);\r\n } else {\r\n super(input, 403);\r\n }\r\n }\r\n}\r\n","import { IAuditColumnEntity } from \"../helpers/audit-column.entity.interface\";\r\nimport { BadRequestException } from \"./error.utils\";\r\n\r\nexport function getObjectDiffingKeys<T extends Record<string, any>>(\r\n oldObject: T,\r\n newObject: T,\r\n): Partial<T> {\r\n const keysToExclude: (keyof IAuditColumnEntity)[] = [\r\n \"createdOn\",\r\n \"createdBy\",\r\n ];\r\n const keysOfOldObject = Object.keys(oldObject);\r\n const keysOfNewObject = Object.keys(newObject);\r\n\r\n if (keysOfOldObject.length !== keysOfNewObject.length) {\r\n throw new BadRequestException({\r\n key: \"objects\",\r\n message: `Different objects recieved for diffing. Please check & try again.`,\r\n });\r\n }\r\n\r\n const oldDiffingKeys = {} as T;\r\n const newDiffingKeys = {} as Partial<T>;\r\n\r\n for (const key of keysOfOldObject as Array<keyof T>) {\r\n if (keysToExclude.includes(key as keyof IAuditColumnEntity)) continue;\r\n\r\n const oldVal = oldObject[key];\r\n const newVal = newObject[key];\r\n\r\n if (JSON.stringify(oldVal) !== JSON.stringify(newVal)) {\r\n oldDiffingKeys[key] = oldVal;\r\n newDiffingKeys[key] = newVal;\r\n }\r\n }\r\n\r\n return newDiffingKeys;\r\n}\r\n\r\n/**\r\n * Compares two arrays and returns the difference between them.\r\n *\r\n * @template T - The type of elements in the arrays\r\n * @param {T[]} arr1 - The original array\r\n * @param {T[]} arr2 - The new array to compare against\r\n * @returns {{ present: T[], deleted: T[], added: T[] }} An object containing:\r\n * - `present` — items found in both arrays (intersection)\r\n * - `deleted` — items in `arr1` but not in `arr2`\r\n * - `added` — items in `arr2` but not in `arr1`\r\n *\r\n * @example\r\n * const arr1 = [1, 2, 3, 4];\r\n * const arr2 = [3, 4, 5, 6];\r\n *\r\n * diffArrays(arr1, arr2);\r\n * // {\r\n * // present: [3, 4],\r\n * // deleted: [1, 2],\r\n * // added: [5, 6]\r\n * // }\r\n */\r\nexport function diffArrays<T>(arr1: T[], arr2: T[]) {\r\n const set1 = new Set(arr1);\r\n const set2 = new Set(arr2);\r\n\r\n return {\r\n present: arr1.filter((item) => set2.has(item)),\r\n deleted: arr1.filter((item) => !set2.has(item)),\r\n added: arr2.filter((item) => !set1.has(item)),\r\n };\r\n}\r\n\r\n/**\r\n * Groups an array of objects by a specified key, returning a `Map` where each\r\n * unique value of the key becomes an entry containing all items that share that value.\r\n * Use this as a fallback if `Object.groupBy` (ES2024) is not available in your environment.\r\n *\r\n * @template T - The type of objects in the array\r\n * @param items - The array of objects to group\r\n * @param key - A key of `T` whose value will be used as the group identifier\r\n * @returns A `Map` where each key maps to an array of items belonging to that group\r\n *\r\n * @example\r\n * const grouped = groupBy(items, 'someKey');\r\n * grouped.get('keyValue1'); // [item1, item2]\r\n * grouped.get('keyValue2'); // [item3]\r\n */\r\nexport function groupBy<T>(items: T[], key: keyof T): Map<string, T[]> {\r\n const result = new Map<string, T[]>();\r\n for (const item of items) {\r\n const groupKey = String(item[key]);\r\n if (!result.has(groupKey)) {\r\n result.set(groupKey, []);\r\n }\r\n result.get(groupKey)!.push(item);\r\n }\r\n return result;\r\n}\r\n\r\nexport function definedValues<T>(arr: Array<T | undefined | null>): T[] {\r\n return arr.filter((value): value is T => value != null);\r\n}\r\n\r\n/**\r\n * Converts an epoch timestamp (milliseconds) into a human-readable date string.\r\n *\r\n * @param epoch - The epoch timestamp in milliseconds (number or numeric string)\r\n * @param format - Optional output format:\r\n * - `'short'` — locale-specific short date (e.g. \"25/12/2026\")\r\n * - `'long'` — locale-specific long date (e.g. \"25 December 2026\")\r\n * - `'short-dt'` — DD/MM/YY HH:MM (e.g. \"25/12/26 18:13\")\r\n * - `'iso'` — ISO 8601 string (default)\r\n * @returns The formatted date string, or '' if epoch is invalid\r\n *\r\n * @example\r\n * epochToReadableDate(1700000000000, 'long'); // \"14 November 2023\"\r\n * epochToReadableDate('1700000000000', 'short'); // \"14/11/2023\"\r\n * epochToReadableDate(1700000000000, 'short-dt'); // \"14/11/23 18:13\"\r\n * epochToReadableDate(1700000000000); // \"2023-11-14T18:13:20.000Z\"\r\n */\r\nexport function epochToReadableDate(\r\n epoch: number | string,\r\n format: 'short' | 'long' | 'short-dt' | 'iso' = 'iso',\r\n): string {\r\n const ms = typeof epoch === 'string' ? Number(epoch) : epoch;\r\n const date = new Date(ms);\r\n\r\n if (isNaN(date.getTime())) {\r\n console.warn(`epochToReadableDate: invalid epoch value received: ${epoch}`);\r\n return '';\r\n }\r\n\r\n switch (format) {\r\n case 'short':\r\n return date.toLocaleDateString('en-IN');\r\n case 'long':\r\n return date.toLocaleDateString('en-IN', {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n });\r\n case 'short-dt': {\r\n const istOffset = 5.5 * 60 * 60 * 1000;\r\n const d = new Date(date.getTime() + istOffset);\r\n const dd = String(d.getUTCDate()).padStart(2, '0');\r\n const mm = String(d.getUTCMonth() + 1).padStart(2, '0');\r\n const yy = String(d.getUTCFullYear()).slice(-2);\r\n const hh = String(d.getUTCHours()).padStart(2, '0');\r\n const min = String(d.getUTCMinutes()).padStart(2, '0');\r\n return `${dd}/${mm}/${yy} ${hh}:${min}`;\r\n }\r\n case 'iso':\r\n default:\r\n return date.toISOString();\r\n }\r\n}\r\n","import { EntityList, EntityType } from \".\";\r\n\r\nexport enum RelationType {\r\n ONE = \"ONE\",\r\n MANY = \"MANY\",\r\n}\r\n\r\nexport interface IMappingPropertyEntry {\r\n sourceProperty: string;\r\n targetProperty: string;\r\n}\r\n\r\nexport interface IModelRelationConfig<T extends EntityList> {\r\n relationType: RelationType;\r\n mappingProperties: IMappingPropertyEntry[];\r\n searchProperty: string;\r\n entity: EntityList;\r\n}\r\n","export enum OrderByDirection {\r\n ASC = \"ASC\",\r\n DESC = \"DESC\",\r\n}\r\n\r\n// export type IOrderByFilter<T> = {\r\n// column: keyof T;\r\n// direction: OrderByDirection;\r\n// };\r\n","import { BaseEntityModel } from \"../models\";\r\nimport { ISearchV2Response } from \"../types/generic.dto.types\";\r\nimport { BadRequestException, entityListEntityModelMap } from \"../utils\";\r\nimport {\r\n EntityList,\r\n EntityListEntityModelMap,\r\n EntityModelType,\r\n EntityType,\r\n} from \"../utils/entity.utils\";\r\n\r\n/**\r\n * Helper class for extracting typed entities from a `searchV2` response.\r\n *\r\n * @example new EntityFilterDataHelper(searchV2Response)\r\n *\r\n * @methods\r\n * - `getEntityFromList(name)` — returns typed entity array for the given `EntityList` key. e.g. `helper.getEntityFromList(EntityList.USER) // IUserEntity[]`\r\n */\r\nexport class EntityFilterDataHelper {\r\n entityModelsMap: EntityListEntityModelMap = {} as EntityListEntityModelMap;\r\n\r\n constructor(private readonly searchResponse: ISearchV2Response) {\r\n this.entityModelsMap = this.populateEntityModelsMap();\r\n }\r\n\r\n getEntityFromList<T extends EntityList>(name: T): EntityModelType<T>[] {\r\n return this.entityModelsMap[name] ?? [];\r\n }\r\n\r\n private populateEntityModelsMap(): EntityListEntityModelMap {\r\n const responseObj: EntityListEntityModelMap =\r\n {} as EntityListEntityModelMap;\r\n\r\n for (const key of Object.keys(this.searchResponse) as EntityList[]) {\r\n const populateFn = entityListEntityModelMap[key];\r\n if (!populateFn) continue;\r\n\r\n const raw = this.searchResponse[key];\r\n if (!Array.isArray(raw)) continue;\r\n\r\n // @ts-expect-error - conditional type EntityModelType<T> cannot be resolved in loop context\r\n (responseObj[key] as EntityModelType<typeof key>[]) = this.searchResponse[\r\n key\r\n ].map((entity) => {\r\n const model = (\r\n populateFn as (e: typeof entity) => EntityModelType<typeof key>\r\n )(entity);\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(),\r\n );\r\n return model;\r\n });\r\n }\r\n\r\n return responseObj;\r\n }\r\n\r\n getEntityModelsByFilter<T extends EntityList>(\r\n entityName: T,\r\n filter: { key: keyof EntityType<T> & string; value: any[] },\r\n ): EntityModelType<T>[] {\r\n const filteredModels = this.entityModelsMap[entityName].filter((model) =>\r\n filter.value.includes((model as any)[filter.key]),\r\n );\r\n\r\n if (filteredModels.length === 0) {\r\n throw new BadRequestException({\r\n key: `${filter.key}`,\r\n message: `${entityName} with values: ${filter.value.join(\", \")} not found. Please try with valid values.`,\r\n });\r\n }\r\n\r\n return filteredModels;\r\n }\r\n\r\n getEntityModelByFilter<T extends EntityList>(\r\n entityName: T,\r\n filter: { key: keyof EntityType<T> & string; value: any },\r\n ) {\r\n const filteredModel = this.entityModelsMap[entityName].filter(\r\n (model) => (model as any)[filter.key] === filter.value,\r\n );\r\n if (filteredModel.length === 0) {\r\n throw new BadRequestException({\r\n key: `${filter.key}`,\r\n message: `${entityName} with values: ${filter.value} not found. Please try with valid values.`,\r\n });\r\n }\r\n\r\n // console.log(\"filteredModel\", filteredModel);\r\n return filteredModel[0];\r\n }\r\n\r\n // populateRelationsFor(entityNames: EntityList[]): EntityListEntityModelMap {\r\n // for (const entityName of entityNames) {\r\n // const models = this.entityModelsMap[entityName];\r\n // if (!models) continue;\r\n // for (const model of models) {\r\n // (model as unknown as BaseEntityModel).populateRelations(\r\n // this.searchResponse,\r\n // );\r\n // }\r\n // }\r\n // return this.entityModelsMap;\r\n // }\r\n\r\n populateRelationsFor(entityNames: EntityList[]): EntityListEntityModelMap {\r\n for (const entityName of entityNames) {\r\n const models = this.entityModelsMap[entityName];\r\n if (!models) continue;\r\n for (const model of models) {\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(), // fresh set per top-level model\r\n );\r\n }\r\n }\r\n return this.entityModelsMap;\r\n }\r\n\r\n mergeEntity<T extends EntityList>(\r\n entityName: T,\r\n savedEntity: EntityType<T>,\r\n ): EntityModelType<T> {\r\n const populateFn = entityListEntityModelMap[entityName];\r\n const model = (populateFn as (e: EntityType<T>) => EntityModelType<T>)(\r\n savedEntity,\r\n );\r\n\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(),\r\n );\r\n\r\n return model;\r\n }\r\n}\r\n","import { IAuditColumnEntity } from \"../../helpers\";\r\nimport { IEntityFilterSearchData } from \"../../types\";\r\nimport { EntityList } from \"../../utils\";\r\n\r\nexport interface IUserEntity extends IAuditColumnEntity {\r\n id: number;\r\n name: string;\r\n password: string;\r\n email: string;\r\n phone: string;\r\n}\r\n\r\n/**\r\n * This is a common config for user entity\r\n * this will be used for createdBy & updatedBy\r\n * for the tables\r\n *\r\n * Adding column keys reduce the bandwidth that is used\r\n */\r\nexport const USER_RELATION_CONFIG: IEntityFilterSearchData<EntityList.USER> = {\r\n name: EntityList.USER,\r\n columnKeys: [\"id\", \"name\"],\r\n};\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,gBAAmC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,oBAA8B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AA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","names":["ConfigurationKey","ConfigurationType","EntityHistoryOperation","EntityStatus","ExpenseType","PaymentType","SponsorTier","TransactionType","VendorType","EntityList","RelationType","OrderByDirection"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/data/flats.ts","../src/enums/configuration-key.enum.ts","../src/enums/configuration-type.enum.ts","../src/enums/entity-history-operation.enum.ts","../src/enums/entity-status.enum.ts","../src/enums/expense-type.enum.ts","../src/enums/payment-type.enum.ts","../src/enums/reference-id-prefix.enum.ts","../src/enums/sponsor-tier.enum.ts","../src/enums/transaction-entity-type.enum.ts","../src/enums/transaction-type.enum.ts","../src/enums/vendor-type.enum.ts","../src/data/payment-options.ts","../src/utils/date-code.utils.ts","../src/utils/date.utils.ts","../src/models/base.entity.model.ts","../src/models/donation-history.entity.model.ts","../src/models/donation.entity.model.ts","../src/models/expense-history.entity.model.ts","../src/models/expense.entity.model.ts","../src/utils/numberToWords.ts","../src/models/flat.entity.model.ts","../src/models/sponsor-history.entity.model.ts","../src/models/sponsor.entity.model.ts","../src/models/transaction-history.entity.model.ts","../src/models/transaction.entity.model.ts","../src/models/user-history.entity.model.ts","../src/models/user.entity.model.ts","../src/models/vendor-history.entity.model.ts","../src/models/vendor.entity.model.ts","../src/models/configuration.entity.model.ts","../src/utils/entity.utils.ts","../src/utils/entitiy-list-entity-model-map.ts","../src/utils/error.utils.ts","../src/utils/helper.fns.ts","../src/utils/relation-config.utils.ts","../src/utils/sql-utils.ts","../src/helpers/entity-filter-data.helper.ts","../src/interfaces/entities/user.entity.interface.ts"],"sourcesContent":["export * from \"./data/index\";\r\nexport * from \"./enums/index\";\r\nexport * from \"./helpers/index\";\r\nexport * from \"./interfaces/dtos\";\r\nexport * from \"./interfaces/index\";\r\nexport * from \"./models/index\";\r\nexport * from \"./types/index\";\r\nexport * from \"./utils/index\";\r\n","export const SPECIAL_FLATS: readonly string[] = [\r\n 'Devotee',\r\n 'Ex-Member Devotee',\r\n 'Others',\r\n];\r\n\r\nconst FLAT_NUMBERS_DATA: string[] = [\r\n 'A-101',\r\n 'A-102',\r\n 'A-103',\r\n 'A-104',\r\n 'A-105',\r\n 'A-106',\r\n 'A-201',\r\n 'A-202',\r\n 'A-203',\r\n 'A-204',\r\n 'A-205',\r\n 'A-206',\r\n 'A-301',\r\n 'A-302',\r\n 'A-303',\r\n 'A-304',\r\n 'A-305',\r\n 'A-306',\r\n 'A-401',\r\n 'A-402',\r\n 'A-403',\r\n 'A-404',\r\n 'A-405',\r\n 'A-406',\r\n 'A-501',\r\n 'A-502',\r\n 'A-503',\r\n 'A-504',\r\n 'A-505',\r\n 'A-506',\r\n 'A-601',\r\n 'A-602',\r\n 'A-603',\r\n 'A-604',\r\n 'A-605',\r\n 'A-606',\r\n 'A-701',\r\n 'A-702',\r\n 'A-703',\r\n 'A-704',\r\n 'A-705',\r\n 'A-706',\r\n 'A-801',\r\n 'A-802',\r\n 'A-803',\r\n 'A-804',\r\n 'A-805',\r\n 'A-806',\r\n 'B-101',\r\n 'B-102',\r\n 'B-103',\r\n 'B-104',\r\n 'B-201',\r\n 'B-202',\r\n 'B-203',\r\n 'B-204',\r\n 'B-301',\r\n 'B-302',\r\n 'B-303',\r\n 'B-304',\r\n 'B-401',\r\n 'B-402',\r\n 'B-403',\r\n 'B-404',\r\n 'B-501',\r\n 'B-502',\r\n 'B-503',\r\n 'B-504',\r\n 'B-601',\r\n 'B-602',\r\n 'B-603',\r\n 'B-604',\r\n 'B-701',\r\n 'B-702',\r\n 'B-703',\r\n 'B-704',\r\n 'B-801',\r\n 'B-802',\r\n 'B-803',\r\n 'B-804',\r\n 'C-101',\r\n 'C-102',\r\n 'C-103',\r\n 'C-104',\r\n 'C-201',\r\n 'C-202',\r\n 'C-203',\r\n 'C-204',\r\n 'C-301',\r\n 'C-302',\r\n 'C-303',\r\n 'C-304',\r\n 'C-401',\r\n 'C-402',\r\n 'C-403',\r\n 'C-404',\r\n 'C-501',\r\n 'C-502',\r\n 'C-503',\r\n 'C-504',\r\n 'C-601',\r\n 'C-602',\r\n 'C-603',\r\n 'C-604',\r\n 'C-701',\r\n 'C-702',\r\n 'C-703',\r\n 'C-704',\r\n 'C-801',\r\n 'C-802',\r\n 'C-803',\r\n 'C-804',\r\n 'D-101',\r\n 'D-102',\r\n 'D-103',\r\n 'D-104',\r\n 'D-201',\r\n 'D-202',\r\n 'D-203',\r\n 'D-204',\r\n 'D-301',\r\n 'D-302',\r\n 'D-303',\r\n 'D-304',\r\n 'D-401',\r\n 'D-402',\r\n 'D-403',\r\n 'D-404',\r\n 'D-501',\r\n 'D-502',\r\n 'D-503',\r\n 'D-504',\r\n 'D-601',\r\n 'D-602',\r\n 'D-603',\r\n 'D-604',\r\n 'D-701',\r\n 'D-702',\r\n 'D-703',\r\n 'D-704',\r\n 'D-801',\r\n 'D-802',\r\n 'D-803',\r\n 'D-804',\r\n 'E-101A',\r\n 'E-101B',\r\n 'E-201',\r\n 'E-202',\r\n 'E-203',\r\n 'E-204',\r\n 'E-301',\r\n 'E-302',\r\n 'E-303',\r\n 'E-304',\r\n 'E-401',\r\n 'E-402',\r\n 'E-403',\r\n 'E-404',\r\n 'E-501',\r\n 'E-502',\r\n 'E-503',\r\n 'E-504',\r\n 'E-601',\r\n 'E-602',\r\n 'E-603',\r\n 'E-604',\r\n 'E-701',\r\n 'E-702',\r\n 'E-703',\r\n 'E-704',\r\n 'E-801',\r\n 'E-802',\r\n 'E-803',\r\n 'E-804',\r\n 'F-101',\r\n 'F-102',\r\n 'F-103',\r\n 'F-104',\r\n 'F-201',\r\n 'F-202',\r\n 'F-203',\r\n 'F-204',\r\n 'F-301',\r\n 'F-302',\r\n 'F-303',\r\n 'F-304',\r\n 'F-401',\r\n 'F-402',\r\n 'F-403',\r\n 'F-404',\r\n 'F-501',\r\n 'F-502',\r\n 'F-503',\r\n 'F-504',\r\n 'F-601',\r\n 'F-602',\r\n 'F-603',\r\n 'F-604',\r\n 'F-701',\r\n 'F-702',\r\n 'F-703',\r\n 'F-704',\r\n 'F-801',\r\n 'F-802',\r\n 'F-803',\r\n 'F-804',\r\n 'G-101',\r\n 'G-102',\r\n 'G-103',\r\n 'G-104',\r\n 'G-201',\r\n 'G-202',\r\n 'G-203',\r\n 'G-204',\r\n 'G-301',\r\n 'G-302',\r\n 'G-303',\r\n 'G-304',\r\n 'G-401',\r\n 'G-402',\r\n 'G-403',\r\n 'G-404',\r\n 'G-501',\r\n 'G-502',\r\n 'G-503',\r\n 'G-504',\r\n 'G-601',\r\n 'G-602',\r\n 'G-603',\r\n 'G-604',\r\n 'G-701',\r\n 'G-702',\r\n 'G-703',\r\n 'G-704',\r\n 'G-801',\r\n 'G-802',\r\n 'G-803',\r\n 'G-804',\r\n 'H-101',\r\n 'H-102',\r\n 'H-103',\r\n 'H-104',\r\n 'H-201',\r\n 'H-202',\r\n 'H-203',\r\n 'H-204',\r\n 'H-301',\r\n 'H-302',\r\n 'H-303',\r\n 'H-304',\r\n 'H-401',\r\n 'H-402',\r\n 'H-403',\r\n 'H-404',\r\n 'H-501',\r\n 'H-502',\r\n 'H-503',\r\n 'H-504',\r\n 'H-601',\r\n 'H-602',\r\n 'H-603',\r\n 'H-604',\r\n 'H-701',\r\n 'H-702',\r\n 'H-703',\r\n 'H-704',\r\n 'H-801',\r\n 'H-802',\r\n 'H-803',\r\n 'H-804',\r\n 'I-101',\r\n 'I-102',\r\n 'I-103',\r\n 'I-104',\r\n 'I-201',\r\n 'I-202',\r\n 'I-203',\r\n 'I-204',\r\n 'I-301',\r\n 'I-302',\r\n 'I-303',\r\n 'I-304',\r\n 'I-401',\r\n 'I-402',\r\n 'I-403',\r\n 'I-404',\r\n 'I-501',\r\n 'I-502',\r\n 'I-503',\r\n 'I-504',\r\n 'I-601',\r\n 'I-602',\r\n 'I-603',\r\n 'I-604',\r\n 'I-701',\r\n 'I-702',\r\n 'I-703',\r\n 'I-704',\r\n 'I-801',\r\n 'I-802',\r\n 'I-803',\r\n 'I-804',\r\n];\r\n\r\nexport const FLAT_NUMBERS: readonly string[] = FLAT_NUMBERS_DATA;\r\n\r\nexport const FLATS_BY_WING: ReadonlyMap<string, readonly string[]> = (() => {\r\n const map = new Map<string, string[]>();\r\n for (const flat of FLAT_NUMBERS_DATA) {\r\n const [wing, num] = flat.split('-');\r\n if (!map.has(wing)) {\r\n map.set(wing, []);\r\n }\r\n map.get(wing)!.push(num);\r\n }\r\n return map;\r\n})();\r\n\r\nexport const WINGS: readonly string[] = (() => {\r\n const wings: string[] = [];\r\n for (const flat of FLAT_NUMBERS_DATA) {\r\n const [wing] = flat.split('-');\r\n if (!wings.includes(wing)) {\r\n wings.push(wing);\r\n }\r\n }\r\n return wings;\r\n})();\r\n","export enum ConfigurationKey {\r\n OPENING_BALANCE = \"opening_balance\",\r\n EDIT_ALLOWANCE_PERIOD = \"edit_allowance_period\",\r\n PAGE_SIZE = \"page_size\",\r\n}\r\n","export enum ConfigurationType {\r\n NUMBER = 'number',\r\n STRING = 'string',\r\n CRONJOB_EXPRESSION = 'cronjob_expression',\r\n JSON = 'json',\r\n}\r\n","export enum EntityHistoryOperation {\r\n CREATE = 'CREATE',\r\n UPDATE = 'UPDATE',\r\n DELETE = 'DELETE',\r\n}\r\n","export enum EntityStatus {\r\n ACTIVE = 'Active',\r\n DELETED = 'Deleted',\r\n}\r\n","export enum ExpenseType {\r\n DECORATION = 'Decoration',\r\n LIGHTING = 'Lighting',\r\n SOUND = 'Sound',\r\n PRASAD = 'Prasad',\r\n SECURITY = 'Security',\r\n TRANSPORTATION = 'Transportation',\r\n PRINTING = 'Printing',\r\n MISCELLANEOUS = 'Miscellaneous',\r\n}\r\n","export enum PaymentType {\r\n CASH = 'Cash',\r\n UPI = 'UPI',\r\n BANK_TRANSFER = 'Bank Transfer',\r\n}\r\n","export const ReferenceIdPrefix = {\r\n DONATION: 'DON',\r\n EXPENSE: 'EXP',\r\n SPONSOR: 'SPO',\r\n DAAN_PETI: 'DPB',\r\n} as const;\r\n","export enum SponsorTier {\r\n GOLD_SPONSOR = 'Gold Sponsor',\r\n SILVER_SPONSOR = 'Silver Sponsor',\r\n BRONZE_SPONSOR = 'Bronze Sponsor',\r\n GENERAL_SPONSOR = 'General Sponsor',\r\n}\r\n","export enum TransactionEntityType {\n DONATION = 'donation',\n SPONSOR = 'sponsor',\n EXPENSE = 'expense',\n DAAN_PETI = 'daan_peti',\n}\n","export enum TransactionType {\r\n INCOME = 'Income',\r\n EXPENSE = 'Expense',\r\n}\r\n","export enum VendorType {\r\n SUPPLIER = 'Supplier',\r\n SERVICE_PROVIDER = 'Service Provider',\r\n CONTRACTOR = 'Contractor',\r\n OTHER = 'Other',\r\n}\r\n","import { PaymentType } from \"../enums\";\r\n\r\nexport const PAYMENT_OPTIONS: readonly { value: PaymentType; label: string }[] = [\r\n { value: PaymentType.CASH, label: \"Cash\" },\r\n { value: PaymentType.UPI, label: \"UPI\" },\r\n { value: PaymentType.BANK_TRANSFER, label: \"Bank Transfer\" },\r\n];\r\n","/**\r\n * Utility class for validating date codes in `YYYYMMDD` format.\r\n *\r\n * @example new DateCodeUtils(20240315)\r\n *\r\n * @methods\r\n * - `isValidYYYYMMDD()` — checks if the date code is a real calendar date. e.g. `new DateCodeUtils(20240315).isValidYYYYMMDD() // true`\r\n */\r\nexport class DateCodeUtils {\r\n stringifiedDateCode: string;\r\n constructor(private readonly dateCode: string | number) {\r\n this.stringifiedDateCode = String(this.dateCode);\r\n if (!this.isValidYYYYMMDD()) {\r\n throw new Error(\r\n `Invalid date code: \"${this.stringifiedDateCode}\". Expected format: YYYYMMDD.`,\r\n );\r\n }\r\n }\r\n\r\n isValidYYYYMMDD(): boolean {\r\n if (!/^\\d{8}$/.test(this.stringifiedDateCode)) return false;\r\n\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n if (month < 1 || month > 12) return false;\r\n if (day < 1 || day > 31) return false;\r\n\r\n const date = new Date(year, month - 1, day);\r\n return (\r\n date.getFullYear() === year &&\r\n date.getMonth() === month - 1 &&\r\n date.getDate() === day\r\n );\r\n }\r\n\r\n toLongDateString(): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n return new Date(year, month - 1, day).toLocaleDateString(\"en-US\", {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n });\r\n }\r\n\r\n addMonths(months: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year, month - 1 + months, day);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n addDays(days: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year, month - 1, day);\r\n date.setDate(date.getDate() + days);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n addWeeks(weeks: number): string {\r\n return this.addDays(weeks * 7);\r\n }\r\n\r\n addYears(years: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year + years, month - 1, day);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n private parseDateParts(): { year: number; month: number; day: number } {\r\n return {\r\n year: parseInt(this.stringifiedDateCode.substring(0, 4), 10),\r\n month: parseInt(this.stringifiedDateCode.substring(4, 6), 10),\r\n day: parseInt(this.stringifiedDateCode.substring(6, 8), 10),\r\n };\r\n }\r\n\r\n static getCurrentYear(): number {\r\n return new Date().getFullYear();\r\n }\r\n\r\n static daysDiff(dateCode: string | number): number {\r\n const { year, month, day } = new DateCodeUtils(dateCode).parseDateParts();\r\n const target = new Date(year, month - 1, day);\r\n const today = new Date();\r\n today.setHours(0, 0, 0, 0);\r\n\r\n const diffMs = target.getTime() - today.getTime();\r\n return Math.round(diffMs / (1000 * 60 * 60 * 24));\r\n }\r\n\r\n static getCurrentDateCode(): string {\r\n const today = new Date();\r\n const year = today.getFullYear();\r\n const month = String(today.getMonth() + 1).padStart(2, \"0\");\r\n const day = String(today.getDate()).padStart(2, \"0\");\r\n return `${year}${month}${day}`;\r\n }\r\n}\r\n","// src/common/helpers/date.util.ts\r\nexport class DateUtil {\r\n // Current time as epoch milliseconds\r\n static now(): number {\r\n return Date.now();\r\n }\r\n\r\n // Date object → epoch milliseconds\r\n static toEpoch(date: Date): number {\r\n return date.getTime();\r\n }\r\n\r\n // Epoch milliseconds → Date object\r\n static toDate(epoch: number): Date {\r\n return new Date(epoch);\r\n }\r\n\r\n // Epoch milliseconds → readable string\r\n static toReadable(epoch: number): string {\r\n return new Date(epoch).toISOString();\r\n }\r\n\r\n // Add days to epoch → returns epoch\r\n static addDays(epoch: number, days: number): number {\r\n return epoch + days * 24 * 60 * 60 * 1000;\r\n }\r\n\r\n // Add months to epoch → returns epoch\r\n static addMonths(epoch: number, months: number): number {\r\n const date = new Date(epoch);\r\n date.setMonth(date.getMonth() + months);\r\n return date.getTime();\r\n }\r\n\r\n // Add weeks to epoch → returns epoch\r\n static addWeeks(epoch: number, weeks: number): number {\r\n return this.addDays(epoch, weeks * 7);\r\n }\r\n\r\n // Add years to epoch → returns epoch\r\n static addYears(epoch: number, years: number): number {\r\n const date = new Date(epoch);\r\n date.setFullYear(date.getFullYear() + years);\r\n return date.getTime();\r\n }\r\n\r\n // Difference in days between two epochs\r\n static daysDifference(epoch1: number, epoch2: number): number {\r\n return Math.ceil((epoch2 - epoch1) / (1000 * 60 * 60 * 24));\r\n }\r\n\r\n // Check if epoch is today\r\n static isToday(epoch: number): boolean {\r\n const date = new Date(epoch);\r\n const today = new Date();\r\n return (\r\n date.getDate() === today.getDate() &&\r\n date.getMonth() === today.getMonth() &&\r\n date.getFullYear() === today.getFullYear()\r\n );\r\n }\r\n\r\n // Check if epoch is in the past\r\n static isPast(epoch: number): boolean {\r\n return epoch < Date.now();\r\n }\r\n\r\n // Check if epoch is in the future\r\n static isFuture(epoch: number): boolean {\r\n return epoch > Date.now();\r\n }\r\n}\r\n\r\n","import { ISearchV2Response } from \"../types/generic.dto.types\";\r\nimport {\r\n entityListEntityModelMap,\r\n IModelRelationConfig,\r\n RelationType,\r\n} from \"../utils\";\r\nimport { EntityList, EntityType } from \"../utils/entity.utils\";\r\n\r\nexport abstract class BaseEntityModel {\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {};\r\n\r\n // populateRelations(searchResponse: ISearchV2Response): this {\r\n // const relations = (this.constructor as typeof BaseEntityModel).relations;\r\n // for (const [prop, config] of Object.entries(relations)) {\r\n // const { relationType, mappingProperty, searchProperty, entity } = config!;\r\n // // @ts-ignore\r\n // const fkValue = this[mappingProperty];\r\n // const bucket = searchResponse[entity] ?? [];\r\n // if (!bucket.length) continue;\r\n\r\n // if (relationType === RelationType.ONE) {\r\n // // @ts-ignore\r\n // const match = bucket.find((e) => e[searchProperty] === fkValue);\r\n // if (match) {\r\n // const hydrated = (\r\n // entityListEntityModelMap[entity] as (\r\n // e: EntityType<EntityList>,\r\n // ) => any\r\n // )(match);\r\n // // recursively populate relations on the hydrated model\r\n // hydrated.populateRelations(searchResponse);\r\n // this[prop as keyof this] = hydrated;\r\n // }\r\n // } else {\r\n // const matches = bucket.filter(\r\n // (e: any) => e[searchProperty] === fkValue,\r\n // );\r\n // this[prop as keyof this] = matches.map((e: EntityType<EntityList>) => {\r\n // const hydrated = (\r\n // entityListEntityModelMap[entity] as (\r\n // e: EntityType<EntityList>,\r\n // ) => any\r\n // )(e);\r\n // // recursively populate relations on each hydrated model\r\n // hydrated.populateRelations(searchResponse);\r\n // return hydrated;\r\n // }) as this[keyof this];\r\n // }\r\n // }\r\n // return this;\r\n // }\r\n\r\n populateRelations(\r\n searchResponse: ISearchV2Response,\r\n visited = new Set<string>(),\r\n ): this {\r\n const selfKey = `${this.constructor.name}:${(this as any).id}`;\r\n if (visited.has(selfKey)) return this;\r\n visited.add(selfKey);\r\n\r\n const relations = (this.constructor as typeof BaseEntityModel).relations;\r\n for (const [, config] of Object.entries(relations)) {\r\n const { relationType, mappingProperties, searchProperty, entity } = config!;\r\n const bucket = searchResponse[entity] ?? [];\r\n if (!bucket.length) continue;\r\n\r\n const hydrateEntity = (raw: EntityType<EntityList>) => {\r\n const hydrated = (\r\n entityListEntityModelMap[entity] as (\r\n e: EntityType<EntityList>,\r\n ) => any\r\n )(raw);\r\n hydrated.populateRelations(searchResponse, visited);\r\n return hydrated;\r\n };\r\n\r\n if (relationType === RelationType.ONE) {\r\n for (const { sourceProperty, targetProperty } of mappingProperties) {\r\n // @ts-ignore\r\n const fkValue = this[sourceProperty];\r\n if (fkValue == null) continue;\r\n const match = bucket.find(\r\n (e: any) => e[searchProperty] === fkValue,\r\n );\r\n if (match) {\r\n (this as any)[targetProperty] = hydrateEntity(match);\r\n }\r\n }\r\n } else {\r\n const fkValues = mappingProperties\r\n .map((mp) => (this as any)[mp.sourceProperty])\r\n .filter((v: any) => v != null);\r\n const matches = bucket.filter((e: any) =>\r\n fkValues.includes(e[searchProperty]),\r\n );\r\n const targetProperty = mappingProperties[0]?.targetProperty;\r\n if (targetProperty && matches.length) {\r\n (this as any)[targetProperty] = matches.map(hydrateEntity);\r\n }\r\n }\r\n }\r\n return this;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IDonationHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class DonationHistoryModel\n extends BaseEntityModel\n implements IDonationHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.DONATION_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IDonationHistoryEntity,\n ): DonationHistoryModel {\n return Object.assign(new DonationHistoryModel(), entity);\n }\n}\n","import { EntityStatus, PaymentType } from \"../enums\";\r\nimport { IDonationEntity } from \"../interfaces\";\r\nimport {\r\n EntityList,\r\n IModelRelationConfig,\r\n RelationType,\r\n} from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\n\r\nexport class DonationModel extends BaseEntityModel implements IDonationEntity {\r\n id: number = 0;\r\n receiptNumber: string = \"\";\r\n flatNo: string = \"\";\r\n amount: number = 0;\r\n mobileNumber?: string;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n donationYear: number = new Date().getFullYear();\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: IDonationEntity): DonationModel {\r\n return Object.assign(new DonationModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n\r\n static getReceiptPrefix(flatNo: string): string {\r\n const year = new Date().getFullYear();\r\n if (flatNo === 'Devotee') return `MPCR-${year}-OD`;\r\n if (flatNo === 'Ex-Member Devotee') return `MPCR-${year}-EMD`;\r\n if (flatNo === 'Others') return `MPCR-${year}-OTH`;\r\n return `MPCR-${year}-${flatNo}`;\r\n }\r\n\r\n static generateReceiptNumber(flatNo: string, existingDonations: DonationModel[]): string {\r\n const count = existingDonations.filter(d => d.flatNo === flatNo).length + 1;\r\n const seq = String(count).padStart(2, '0');\r\n return `${DonationModel.getReceiptPrefix(flatNo)}-${seq}`;\r\n }\r\n\r\n static toWhatsAppNumber(mobile: string): string {\r\n const digits = mobile.replace(/\\D/g, '');\r\n if (digits.length === 0) return '';\r\n if (digits.length === 10) return `91${digits}`;\r\n return digits;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IExpenseHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class ExpenseHistoryModel\n extends BaseEntityModel\n implements IExpenseHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.EXPENSE_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IExpenseHistoryEntity,\n ): ExpenseHistoryModel {\n return Object.assign(new ExpenseHistoryModel(), entity);\n }\n}\n","import { EntityStatus, ExpenseType, PaymentType } from \"../enums\";\r\nimport { IExpenseEntity } from \"../interfaces\";\r\nimport { EntityList, IModelRelationConfig, RelationType } from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\nimport { VendorModel } from \"./vendor.entity.model\";\r\n\r\nexport class ExpenseModel extends BaseEntityModel implements IExpenseEntity {\r\n id: number = 0;\r\n name: string = \"\";\r\n type: ExpenseType = ExpenseType.MISCELLANEOUS;\r\n vendorId: number = 0;\r\n incurredBy: number = 0;\r\n amount: number = 0;\r\n billNumber?: string;\r\n remarks?: string;\r\n description?: string;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n incurredByUser?: UserModel;\r\n vendor?: VendorModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n { sourceProperty: \"incurredBy\", targetProperty: \"incurredByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n [EntityList.VENDOR]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"vendorId\", targetProperty: \"vendor\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.VENDOR,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: IExpenseEntity): ExpenseModel {\r\n return Object.assign(new ExpenseModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n\r\n get incurredByUserName() {\r\n return this.incurredByUser?.name;\r\n }\r\n\r\n get vendorName() {\r\n return this.vendor?.name ?? \"\";\r\n }\r\n}\r\n","export function convertNumberToWords(num: number): string {\r\n if (num === 0) return \"Zero Rupees Only\";\r\n\r\n const singleDigits = [\r\n \"\",\r\n \"One\",\r\n \"Two\",\r\n \"Three\",\r\n \"Four\",\r\n \"Five\",\r\n \"Six\",\r\n \"Seven\",\r\n \"Eight\",\r\n \"Nine\",\r\n ];\r\n const teenDigits = [\r\n \"Ten\",\r\n \"Eleven\",\r\n \"Twelve\",\r\n \"Thirteen\",\r\n \"Fourteen\",\r\n \"Fifteen\",\r\n \"Sixteen\",\r\n \"Seventeen\",\r\n \"Eighteen\",\r\n \"Nineteen\",\r\n ];\r\n const doubleDigits = [\r\n \"\",\r\n \"Ten\",\r\n \"Twenty\",\r\n \"Thirty\",\r\n \"Forty\",\r\n \"Fifty\",\r\n \"Sixty\",\r\n \"Seventy\",\r\n \"Eighty\",\r\n \"Ninety\",\r\n ];\r\n\r\n function convertGroup(val: number): string {\r\n let out = \"\";\r\n if (val >= 100) {\r\n out += singleDigits[Math.floor(val / 100)] + \" Hundred \";\r\n val %= 100;\r\n }\r\n if (val >= 10 && val < 20) {\r\n out += teenDigits[val - 10] + \" \";\r\n } else if (val >= 20) {\r\n out += doubleDigits[Math.floor(val / 10)] + \" \";\r\n val %= 10;\r\n if (val > 0) {\r\n out += singleDigits[val] + \" \";\r\n }\r\n } else if (val > 0) {\r\n out += singleDigits[val] + \" \";\r\n }\r\n return out.trim();\r\n }\r\n\r\n let temp = Math.floor(num);\r\n let words = \"\";\r\n\r\n if (temp >= 10000000) {\r\n const croresValue = Math.floor(temp / 10000000);\r\n words += convertGroup(croresValue) + \" Crore \";\r\n temp %= 10000000;\r\n }\r\n\r\n if (temp >= 100000) {\r\n const lakhsValue = Math.floor(temp / 100000);\r\n words += convertGroup(lakhsValue) + \" Lakh \";\r\n temp %= 100000;\r\n }\r\n\r\n if (temp >= 1000) {\r\n const thousandsValue = Math.floor(temp / 1000);\r\n words += convertGroup(thousandsValue) + \" Thousand \";\r\n temp %= 1000;\r\n }\r\n\r\n if (temp > 0) {\r\n words += convertGroup(temp);\r\n }\r\n\r\n return words.trim() + \" Rupees Only\";\r\n}\r\n","import {\r\n FLATS_BY_WING,\r\n FLAT_NUMBERS,\r\n SPECIAL_FLATS,\r\n WINGS,\r\n} from \"../data/flats\";\r\nimport { convertNumberToWords } from \"../utils/numberToWords\";\r\n\r\nexport interface FlatDonationLike {\r\n flatNo: string;\r\n amount: number;\r\n donationYear?: number;\r\n createdOn?: number;\r\n createdByUser?: { name?: string } | null;\r\n updatedByUser?: { name?: string } | null;\r\n}\r\n\r\nexport type FlatCollectionStatus = \"Paid\" | \"Pending\";\r\n\r\nexport interface FlatCollectionEntry {\r\n flatNumber: string;\r\n status: FlatCollectionStatus;\r\n amount: number;\r\n latestDonation?: FlatDonationLike | null;\r\n}\r\n\r\nexport interface FlatParseResult {\r\n wing?: string;\r\n num?: string;\r\n isSpecial: boolean;\r\n}\r\n\r\nexport interface FlatOption {\r\n label: string;\r\n value: string;\r\n}\r\n\r\nexport class FlatModel {\r\n static readonly FLAT_NUMBERS: readonly string[] = FLAT_NUMBERS;\r\n static readonly FLATS_BY_WING: ReadonlyMap<string, readonly string[]> =\r\n FLATS_BY_WING;\r\n static readonly SPECIAL_FLATS: readonly string[] = SPECIAL_FLATS;\r\n static readonly WINGS: readonly string[] = WINGS;\r\n\r\n static getDonationYear(): number {\r\n return new Date().getFullYear();\r\n }\r\n\r\n static buildFlatNumber(wing: string, num: string): string {\r\n return `${wing}-${num}`;\r\n }\r\n\r\n static isSpecialFlat(flatNo: string): boolean {\r\n return FlatModel.SPECIAL_FLATS.includes(flatNo);\r\n }\r\n\r\n static parseFlatNumber(flatNo: string): FlatParseResult {\r\n if (FlatModel.isSpecialFlat(flatNo)) {\r\n return { isSpecial: true };\r\n }\r\n const match = /^([A-Za-z])-([0-9]{1,3}[A-Za-z]?)$/.exec(flatNo);\r\n if (match) {\r\n return { wing: match[1], num: match[2], isSpecial: false };\r\n }\r\n return { isSpecial: false };\r\n }\r\n\r\n static getFlatOptions(wing: string): FlatOption[] {\r\n const wingFlats = FlatModel.FLATS_BY_WING.get(wing) ?? [];\r\n const all = [...wingFlats, ...FlatModel.SPECIAL_FLATS];\r\n return all.map((f) => ({\r\n label: FlatModel.isSpecialFlat(f) ? f : `${wing}-${f}`,\r\n value: f,\r\n }));\r\n }\r\n\r\n static getDisplayLabel(wing: string, flatNo: string): string {\r\n if (!flatNo) return \"\";\r\n if (FlatModel.isSpecialFlat(flatNo)) return flatNo;\r\n return `${wing}-${flatNo}`;\r\n }\r\n\r\n static computeCollectionStatus(\r\n donations: FlatDonationLike[],\r\n year: number,\r\n ): FlatCollectionEntry[] {\r\n return FlatModel.FLAT_NUMBERS.map((flatNumber) => {\r\n const flatDonations = donations.filter(\r\n (d) => d.donationYear === year && d.flatNo === flatNumber,\r\n );\r\n const amount = flatDonations.reduce((sum, d) => sum + d.amount, 0);\r\n const status: FlatCollectionStatus = amount > 0 ? \"Paid\" : \"Pending\";\r\n const latestDonation = flatDonations.length\r\n ? flatDonations.reduce((latest, d) =>\r\n (d.createdOn ?? 0) > (latest.createdOn ?? 0) ? d : latest,\r\n )\r\n : null;\r\n return { flatNumber, status, amount, latestDonation };\r\n });\r\n }\r\n\r\n static compareFlatNumbers(a: string, b: string): number {\r\n const isA = FlatModel.isSpecialFlat(a);\r\n const isB = FlatModel.isSpecialFlat(b);\r\n if (isA || isB) {\r\n if (isA && isB) {\r\n return (\r\n FlatModel.SPECIAL_FLATS.indexOf(a) -\r\n FlatModel.SPECIAL_FLATS.indexOf(b)\r\n );\r\n }\r\n return isA ? 1 : -1;\r\n }\r\n\r\n const pa = FlatModel.parseFlatNumber(a);\r\n const pb = FlatModel.parseFlatNumber(b);\r\n if (!pa.wing || !pa.num || !pb.wing || !pb.num) {\r\n return a < b ? -1 : a > b ? 1 : 0;\r\n }\r\n if (pa.wing !== pb.wing) {\r\n return pa.wing < pb.wing ? -1 : 1;\r\n }\r\n\r\n const numericA = Number(pa.num.replace(/[^0-9]/g, \"\"));\r\n const numericB = Number(pb.num.replace(/[^0-9]/g, \"\"));\r\n const floorA = Math.floor(numericA / 100);\r\n const floorB = Math.floor(numericB / 100);\r\n if (floorA !== floorB) return floorA - floorB;\r\n\r\n const unitA = numericA % 100;\r\n const unitB = numericB % 100;\r\n if (unitA !== unitB) return unitA - unitB;\r\n\r\n const suffixA = pa.num.replace(/\\d/g, \"\");\r\n const suffixB = pb.num.replace(/\\d/g, \"\");\r\n if (suffixA !== suffixB) return suffixA < suffixB ? -1 : 1;\r\n return 0;\r\n }\r\n\r\n static convertNumberToWords(num: number): string {\r\n return convertNumberToWords(num);\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { ISponsorHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class SponsorHistoryModel\n extends BaseEntityModel\n implements ISponsorHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.SPONSOR_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: ISponsorHistoryEntity,\n ): SponsorHistoryModel {\n return Object.assign(new SponsorHistoryModel(), entity);\n }\n}\n","import { EntityStatus, PaymentType } from \"../enums\";\r\nimport { ISponsorEntity } from \"../interfaces\";\r\nimport { EntityList, IModelRelationConfig, RelationType } from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\n\r\nexport class SponsorModel extends BaseEntityModel implements ISponsorEntity {\r\n id: number = 0;\r\n sponsorName: string = \"\";\r\n contactName: string = \"\";\r\n contactNo: string = \"\";\r\n sponsorFor: string = \"\";\r\n size: string = \"\";\r\n amount: number = 0;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: ISponsorEntity): SponsorModel {\r\n return Object.assign(new SponsorModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n\r\n get receiptNumber(): string {\r\n return `MPCR-SPR-${this.id}`;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { ITransactionHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class TransactionHistoryModel\n extends BaseEntityModel\n implements ITransactionHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.TRANSACTION_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: ITransactionHistoryEntity,\n ): TransactionHistoryModel {\n return Object.assign(new TransactionHistoryModel(), entity);\n }\n}\n","import { ICashBookEntry, ITransactionEntity } from \"../interfaces\";\r\nimport { EntityStatus, PaymentType, TransactionEntityType, TransactionType } from \"../enums\";\r\nimport { EntityList, IModelRelationConfig, RelationType } from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\n\r\nexport class TransactionModel\r\n extends BaseEntityModel\r\n implements ITransactionEntity\r\n{\r\n id: number = 0;\r\n date: string = \"\";\r\n type: TransactionType = TransactionType.INCOME;\r\n particulars: string = \"\";\r\n amount: number = 0;\r\n balanceAfter: number = 0;\r\n referenceId: number | null = null;\r\n entityType: TransactionEntityType | null = null;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: ITransactionEntity): TransactionModel {\r\n return Object.assign(new TransactionModel(), entity, {\r\n amount: Number(entity.amount),\r\n balanceAfter: Number(entity.balanceAfter),\r\n referenceId: entity.referenceId != null ? Number(entity.referenceId) : null,\r\n });\r\n }\r\n\r\n static toReferenceId(\r\n entityType: TransactionEntityType | null | undefined,\r\n referenceId: number | null | undefined,\r\n ): string {\r\n if (entityType == null) {\r\n return referenceId != null ? String(referenceId) : \"\";\r\n }\r\n return referenceId != null ? `${entityType}-${referenceId}` : entityType;\r\n }\r\n\r\n static toCashBookEntry(tx: TransactionModel): ICashBookEntry {\r\n const isExpense = tx.type === TransactionType.EXPENSE;\r\n return {\r\n date: tx.date,\r\n particulars: tx.particulars,\r\n receipt: isExpense ? 0 : tx.amount,\r\n payment: isExpense ? tx.amount : 0,\r\n balance: tx.balanceAfter,\r\n referenceId: TransactionModel.toReferenceId(tx.entityType, tx.referenceId),\r\n };\r\n }\r\n\r\n static toCashBook(txns: TransactionModel[]): ICashBookEntry[] {\r\n return txns.map(TransactionModel.toCashBookEntry);\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IUserHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class UserHistoryModel\n extends BaseEntityModel\n implements IUserHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.USER_HISTORY>>\n > = {};\n\n static populateFromEntity(entity: IUserHistoryEntity): UserHistoryModel {\n return Object.assign(new UserHistoryModel(), entity);\n }\n}\n","import { IUserEntity } from \"../interfaces\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class UserModel extends BaseEntityModel implements IUserEntity {\r\n id: number = 0;\r\n name: string = \"\";\r\n password: string = \"\";\r\n email: string = \"\";\r\n phone: string = \"\";\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n private static _superAdminEmail: string = \"\";\r\n\r\n static setSuperAdminEmail(email: string) {\r\n this._superAdminEmail = email;\r\n }\r\n\r\n static mandalAccountUser() {\r\n return { id: 0, name: \"Mandal Account\" } as UserModel;\r\n }\r\n\r\n static isSuperAdmin(email: string): boolean {\r\n return email === this._superAdminEmail;\r\n }\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: IUserEntity): UserModel {\r\n return Object.assign(new UserModel(), entity);\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IVendorHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class VendorHistoryModel\n extends BaseEntityModel\n implements IVendorHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.VENDOR_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IVendorHistoryEntity,\n ): VendorHistoryModel {\n return Object.assign(new VendorHistoryModel(), entity);\n }\n}\n","import { IVendorEntity } from \"../interfaces\";\r\nimport { EntityList, IModelRelationConfig, RelationType } from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\n\r\nexport class VendorModel extends BaseEntityModel implements IVendorEntity {\r\n id: number = 0;\r\n name: string = \"\";\r\n type: string = \"\";\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: IVendorEntity): VendorModel {\r\n return Object.assign(new VendorModel(), entity);\r\n }\r\n}\r\n","import { ConfigurationType } from \"../enums\";\r\nimport { IConfigurationEntity } from \"../interfaces\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class ConfigurationModel\r\n extends BaseEntityModel\r\n implements IConfigurationEntity\r\n{\r\n id: number = 0;\r\n key: string = \"\";\r\n value: string = \"\";\r\n type: ConfigurationType = ConfigurationType.STRING;\r\n label: string = \"\";\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: IConfigurationEntity): ConfigurationModel {\r\n return Object.assign(new ConfigurationModel(), entity);\r\n }\r\n\r\n static fallBackPageSize() {\r\n return this.defaultFallBackPageSize();\r\n }\r\n\r\n static defaultFallBackPageSize() {\r\n return 50;\r\n }\r\n}\r\n","import { IConfigurationEntity } from \"../interfaces/entities/configuration.entity.interface\";\r\nimport { IDonationHistoryEntity } from \"../interfaces/entities/donation-history.entity.interface\";\r\nimport { IDonationEntity } from \"../interfaces/entities/donation.entity.interface\";\r\nimport { IExpenseHistoryEntity } from \"../interfaces/entities/expense-history.entity.interface\";\r\nimport { IExpenseEntity } from \"../interfaces/entities/expense.entity.interface\";\r\nimport { ISponsorHistoryEntity } from \"../interfaces/entities/sponsor-history.entity.interface\";\r\nimport { ISponsorEntity } from \"../interfaces/entities/sponsor.entity.interface\";\r\nimport { ITransactionHistoryEntity } from \"../interfaces/entities/transaction-history.entity.interface\";\r\nimport { ITransactionEntity } from \"../interfaces/entities/transaction.entity.interface\";\r\nimport { IUserHistoryEntity } from \"../interfaces/entities/user-history.entity.interface\";\r\nimport { IUserEntity } from \"../interfaces/entities/user.entity.interface\";\r\nimport { IVendorHistoryEntity } from \"../interfaces/entities/vendor-history.entity.interface\";\r\nimport { IVendorEntity } from \"../interfaces/entities/vendor.entity.interface\";\r\nimport { ConfigurationModel } from \"../models/configuration.entity.model\";\r\nimport { DonationHistoryModel } from \"../models/donation-history.entity.model\";\r\nimport { DonationModel } from \"../models/donation.entity.model\";\r\nimport { ExpenseHistoryModel } from \"../models/expense-history.entity.model\";\r\nimport { ExpenseModel } from \"../models/expense.entity.model\";\r\nimport { SponsorHistoryModel } from \"../models/sponsor-history.entity.model\";\r\nimport { SponsorModel } from \"../models/sponsor.entity.model\";\r\nimport { TransactionHistoryModel } from \"../models/transaction-history.entity.model\";\r\nimport { TransactionModel } from \"../models/transaction.entity.model\";\r\nimport { UserHistoryModel } from \"../models/user-history.entity.model\";\r\nimport { UserModel } from \"../models/user.entity.model\";\r\nimport { VendorHistoryModel } from \"../models/vendor-history.entity.model\";\r\nimport { VendorModel } from \"../models/vendor.entity.model\";\r\n\r\nexport enum EntityList {\r\n DONATION = \"donation\",\r\n DONATION_HISTORY = \"donation_history\",\r\n USER = \"user\",\r\n USER_HISTORY = \"user_history\",\r\n EXPENSE = \"expense\",\r\n EXPENSE_HISTORY = \"expense_history\",\r\n VENDOR = \"vendor\",\r\n VENDOR_HISTORY = \"vendor_history\",\r\n TRANSACTION = \"transaction\",\r\n TRANSACTION_HISTORY = \"transaction_history\",\r\n SPONSOR = \"sponsor\",\r\n SPONSOR_HISTORY = \"sponsor_history\",\r\n CONFIGURATION = \"configuration\",\r\n}\r\n\r\nexport type EntityType<T extends EntityList> = T extends EntityList.DONATION\r\n ? IDonationEntity\r\n : T extends EntityList.DONATION_HISTORY\r\n ? IDonationHistoryEntity\r\n : T extends EntityList.USER\r\n ? IUserEntity\r\n : T extends EntityList.USER_HISTORY\r\n ? IUserHistoryEntity\r\n : T extends EntityList.EXPENSE\r\n ? IExpenseEntity\r\n : T extends EntityList.EXPENSE_HISTORY\r\n ? IExpenseHistoryEntity\r\n : T extends EntityList.VENDOR\r\n ? IVendorEntity\r\n : T extends EntityList.VENDOR_HISTORY\r\n ? IVendorHistoryEntity\r\n : T extends EntityList.TRANSACTION\r\n ? ITransactionEntity\r\n : T extends EntityList.TRANSACTION_HISTORY\r\n ? ITransactionHistoryEntity\r\n : T extends EntityList.SPONSOR\r\n ? ISponsorEntity\r\n : T extends EntityList.SPONSOR_HISTORY\r\n ? ISponsorHistoryEntity\r\n : T extends EntityList.CONFIGURATION\r\n ? IConfigurationEntity\r\n : never;\r\n\r\nexport type EntityModelType<T extends EntityList> =\r\n T extends EntityList.DONATION\r\n ? DonationModel\r\n : T extends EntityList.DONATION_HISTORY\r\n ? DonationHistoryModel\r\n : T extends EntityList.USER\r\n ? UserModel\r\n : T extends EntityList.USER_HISTORY\r\n ? UserHistoryModel\r\n : T extends EntityList.EXPENSE\r\n ? ExpenseModel\r\n : T extends EntityList.EXPENSE_HISTORY\r\n ? ExpenseHistoryModel\r\n : T extends EntityList.VENDOR\r\n ? VendorModel\r\n : T extends EntityList.VENDOR_HISTORY\r\n ? VendorHistoryModel\r\n : T extends EntityList.TRANSACTION\r\n ? TransactionModel\r\n : T extends EntityList.TRANSACTION_HISTORY\r\n ? TransactionHistoryModel\r\n : T extends EntityList.SPONSOR\r\n ? SponsorModel\r\n : T extends EntityList.SPONSOR_HISTORY\r\n ? SponsorHistoryModel\r\n : T extends EntityList.CONFIGURATION\r\n ? ConfigurationModel\r\n : never;\r\n\r\nexport type EntityListEntityModelMap = {\r\n [T in EntityList]: EntityModelType<T>[];\r\n};\r\n","import {\r\n ConfigurationModel,\r\n DonationHistoryModel,\r\n DonationModel,\r\n ExpenseHistoryModel,\r\n ExpenseModel,\r\n SponsorHistoryModel,\r\n SponsorModel,\r\n TransactionHistoryModel,\r\n TransactionModel,\r\n UserHistoryModel,\r\n UserModel,\r\n VendorHistoryModel,\r\n VendorModel,\r\n} from \"../models\";\r\nimport { EntityList } from \"./entity.utils\";\r\n\r\nexport const entityListEntityModelMap = {\r\n [EntityList.DONATION]: DonationModel.populateFromEntity,\r\n [EntityList.DONATION_HISTORY]: DonationHistoryModel.populateFromEntity,\r\n [EntityList.USER]: UserModel.populateFromEntity,\r\n [EntityList.USER_HISTORY]: UserHistoryModel.populateFromEntity,\r\n [EntityList.EXPENSE]: ExpenseModel.populateFromEntity,\r\n [EntityList.EXPENSE_HISTORY]: ExpenseHistoryModel.populateFromEntity,\r\n [EntityList.VENDOR]: VendorModel.populateFromEntity,\r\n [EntityList.VENDOR_HISTORY]: VendorHistoryModel.populateFromEntity,\r\n [EntityList.TRANSACTION]: TransactionModel.populateFromEntity,\r\n [EntityList.TRANSACTION_HISTORY]: TransactionHistoryModel.populateFromEntity,\r\n [EntityList.SPONSOR]: SponsorModel.populateFromEntity,\r\n [EntityList.SPONSOR_HISTORY]: SponsorHistoryModel.populateFromEntity,\r\n [EntityList.CONFIGURATION]: ConfigurationModel.populateFromEntity,\r\n};\r\n","export class HttpException extends Error {\r\n constructor(\r\n public readonly message: string,\r\n public readonly statusCode: number,\r\n public readonly key?: string,\r\n public readonly errors?: any,\r\n ) {\r\n super(message);\r\n this.name = this.constructor.name;\r\n if ((Error as any).captureStackTrace) {\r\n (Error as any).captureStackTrace(this, this.constructor);\r\n }\r\n }\r\n\r\n getResponse() {\r\n return {\r\n statusCode: this.statusCode,\r\n message: this.message,\r\n key: this.key,\r\n errors: this.errors,\r\n };\r\n }\r\n\r\n getStatus() {\r\n return this.statusCode;\r\n }\r\n}\r\n\r\nexport class BadRequestException extends HttpException {\r\n constructor(\r\n input: { key: string; message: string } | string | string[],\r\n errors?: any,\r\n ) {\r\n if (typeof input === \"object\" && !Array.isArray(input)) {\r\n super(input.message, 400, input.key, errors);\r\n } else {\r\n super(\r\n Array.isArray(input) ? input.join(\", \") : input,\r\n 400,\r\n undefined,\r\n errors,\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport class NotFoundException extends HttpException {\r\n constructor(input: { key: string; message: string } | string = \"Not Found\") {\r\n if (typeof input === \"object\") {\r\n super(input.message, 404, input.key);\r\n } else {\r\n super(input, 404);\r\n }\r\n }\r\n}\r\n\r\nexport class UnauthorizedException extends HttpException {\r\n constructor(\r\n input: { key: string; message: string } | string = \"Unauthorized\",\r\n ) {\r\n if (typeof input === \"object\") {\r\n super(input.message, 401, input.key);\r\n } else {\r\n super(input, 401);\r\n }\r\n }\r\n}\r\n\r\nexport class ForbiddenException extends HttpException {\r\n constructor(input: { key: string; message: string } | string = \"Forbidden\") {\r\n if (typeof input === \"object\") {\r\n super(input.message, 403, input.key);\r\n } else {\r\n super(input, 403);\r\n }\r\n }\r\n}\r\n","import { IAuditColumnEntity } from \"../helpers/audit-column.entity.interface\";\r\nimport { BadRequestException } from \"./error.utils\";\r\n\r\nexport function getObjectDiffingKeys<T extends Record<string, any>>(\r\n oldObject: T,\r\n newObject: T,\r\n): Partial<T> {\r\n const keysToExclude: (keyof IAuditColumnEntity)[] = [\r\n \"createdOn\",\r\n \"createdBy\",\r\n ];\r\n const keysOfOldObject = Object.keys(oldObject);\r\n const keysOfNewObject = Object.keys(newObject);\r\n\r\n if (keysOfOldObject.length !== keysOfNewObject.length) {\r\n throw new BadRequestException({\r\n key: \"objects\",\r\n message: `Different objects recieved for diffing. Please check & try again.`,\r\n });\r\n }\r\n\r\n const oldDiffingKeys = {} as T;\r\n const newDiffingKeys = {} as Partial<T>;\r\n\r\n for (const key of keysOfOldObject as Array<keyof T>) {\r\n if (keysToExclude.includes(key as keyof IAuditColumnEntity)) continue;\r\n\r\n const oldVal = oldObject[key];\r\n const newVal = newObject[key];\r\n\r\n if (JSON.stringify(oldVal) !== JSON.stringify(newVal)) {\r\n oldDiffingKeys[key] = oldVal;\r\n newDiffingKeys[key] = newVal;\r\n }\r\n }\r\n\r\n return newDiffingKeys;\r\n}\r\n\r\n/**\r\n * Compares two arrays and returns the difference between them.\r\n *\r\n * @template T - The type of elements in the arrays\r\n * @param {T[]} arr1 - The original array\r\n * @param {T[]} arr2 - The new array to compare against\r\n * @returns {{ present: T[], deleted: T[], added: T[] }} An object containing:\r\n * - `present` — items found in both arrays (intersection)\r\n * - `deleted` — items in `arr1` but not in `arr2`\r\n * - `added` — items in `arr2` but not in `arr1`\r\n *\r\n * @example\r\n * const arr1 = [1, 2, 3, 4];\r\n * const arr2 = [3, 4, 5, 6];\r\n *\r\n * diffArrays(arr1, arr2);\r\n * // {\r\n * // present: [3, 4],\r\n * // deleted: [1, 2],\r\n * // added: [5, 6]\r\n * // }\r\n */\r\nexport function diffArrays<T>(arr1: T[], arr2: T[]) {\r\n const set1 = new Set(arr1);\r\n const set2 = new Set(arr2);\r\n\r\n return {\r\n present: arr1.filter((item) => set2.has(item)),\r\n deleted: arr1.filter((item) => !set2.has(item)),\r\n added: arr2.filter((item) => !set1.has(item)),\r\n };\r\n}\r\n\r\n/**\r\n * Groups an array of objects by a specified key, returning a `Map` where each\r\n * unique value of the key becomes an entry containing all items that share that value.\r\n * Use this as a fallback if `Object.groupBy` (ES2024) is not available in your environment.\r\n *\r\n * @template T - The type of objects in the array\r\n * @param items - The array of objects to group\r\n * @param key - A key of `T` whose value will be used as the group identifier\r\n * @returns A `Map` where each key maps to an array of items belonging to that group\r\n *\r\n * @example\r\n * const grouped = groupBy(items, 'someKey');\r\n * grouped.get('keyValue1'); // [item1, item2]\r\n * grouped.get('keyValue2'); // [item3]\r\n */\r\nexport function groupBy<T>(items: T[], key: keyof T): Map<string, T[]> {\r\n const result = new Map<string, T[]>();\r\n for (const item of items) {\r\n const groupKey = String(item[key]);\r\n if (!result.has(groupKey)) {\r\n result.set(groupKey, []);\r\n }\r\n result.get(groupKey)!.push(item);\r\n }\r\n return result;\r\n}\r\n\r\nexport function definedValues<T>(arr: Array<T | undefined | null>): T[] {\r\n return arr.filter((value): value is T => value != null);\r\n}\r\n\r\n/**\r\n * Converts an epoch timestamp (milliseconds) into a human-readable date string.\r\n *\r\n * @param epoch - The epoch timestamp in milliseconds (number or numeric string)\r\n * @param format - Optional output format:\r\n * - `'short'` — locale-specific short date (e.g. \"25/12/2026\")\r\n * - `'long'` — locale-specific long date (e.g. \"25 December 2026\")\r\n * - `'short-dt'` — DD/MM/YY HH:MM (e.g. \"25/12/26 18:13\")\r\n * - `'iso'` — ISO 8601 string (default)\r\n * @returns The formatted date string, or '' if epoch is invalid\r\n *\r\n * @example\r\n * epochToReadableDate(1700000000000, 'long'); // \"14 November 2023\"\r\n * epochToReadableDate('1700000000000', 'short'); // \"14/11/2023\"\r\n * epochToReadableDate(1700000000000, 'short-dt'); // \"14/11/23 18:13\"\r\n * epochToReadableDate(1700000000000); // \"2023-11-14T18:13:20.000Z\"\r\n */\r\nexport function epochToReadableDate(\r\n epoch: number | string,\r\n format: 'short' | 'long' | 'short-dt' | 'iso' = 'iso',\r\n): string {\r\n const ms = typeof epoch === 'string' ? Number(epoch) : epoch;\r\n const date = new Date(ms);\r\n\r\n if (isNaN(date.getTime())) {\r\n console.warn(`epochToReadableDate: invalid epoch value received: ${epoch}`);\r\n return '';\r\n }\r\n\r\n switch (format) {\r\n case 'short':\r\n return date.toLocaleDateString('en-IN');\r\n case 'long':\r\n return date.toLocaleDateString('en-IN', {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n });\r\n case 'short-dt': {\r\n const istOffset = 5.5 * 60 * 60 * 1000;\r\n const d = new Date(date.getTime() + istOffset);\r\n const dd = String(d.getUTCDate()).padStart(2, '0');\r\n const mm = String(d.getUTCMonth() + 1).padStart(2, '0');\r\n const yy = String(d.getUTCFullYear()).slice(-2);\r\n const hh = String(d.getUTCHours()).padStart(2, '0');\r\n const min = String(d.getUTCMinutes()).padStart(2, '0');\r\n return `${dd}/${mm}/${yy} ${hh}:${min}`;\r\n }\r\n case 'iso':\r\n default:\r\n return date.toISOString();\r\n }\r\n}\r\n","import { EntityList, EntityType } from \".\";\r\n\r\nexport enum RelationType {\r\n ONE = \"ONE\",\r\n MANY = \"MANY\",\r\n}\r\n\r\nexport interface IMappingPropertyEntry {\r\n sourceProperty: string;\r\n targetProperty: string;\r\n}\r\n\r\nexport interface IModelRelationConfig<T extends EntityList> {\r\n relationType: RelationType;\r\n mappingProperties: IMappingPropertyEntry[];\r\n searchProperty: string;\r\n entity: EntityList;\r\n}\r\n","export enum OrderByDirection {\r\n ASC = \"ASC\",\r\n DESC = \"DESC\",\r\n}\r\n\r\n// export type IOrderByFilter<T> = {\r\n// column: keyof T;\r\n// direction: OrderByDirection;\r\n// };\r\n","import { BaseEntityModel } from \"../models\";\r\nimport { ISearchV2Response } from \"../types/generic.dto.types\";\r\nimport { BadRequestException, entityListEntityModelMap } from \"../utils\";\r\nimport {\r\n EntityList,\r\n EntityListEntityModelMap,\r\n EntityModelType,\r\n EntityType,\r\n} from \"../utils/entity.utils\";\r\n\r\n/**\r\n * Helper class for extracting typed entities from a `searchV2` response.\r\n *\r\n * @example new EntityFilterDataHelper(searchV2Response)\r\n *\r\n * @methods\r\n * - `getEntityFromList(name)` — returns typed entity array for the given `EntityList` key. e.g. `helper.getEntityFromList(EntityList.USER) // IUserEntity[]`\r\n */\r\nexport class EntityFilterDataHelper {\r\n entityModelsMap: EntityListEntityModelMap = {} as EntityListEntityModelMap;\r\n\r\n constructor(private readonly searchResponse: ISearchV2Response) {\r\n this.entityModelsMap = this.populateEntityModelsMap();\r\n }\r\n\r\n getEntityFromList<T extends EntityList>(name: T): EntityModelType<T>[] {\r\n return this.entityModelsMap[name] ?? [];\r\n }\r\n\r\n private populateEntityModelsMap(): EntityListEntityModelMap {\r\n const responseObj: EntityListEntityModelMap =\r\n {} as EntityListEntityModelMap;\r\n\r\n for (const key of Object.keys(this.searchResponse) as EntityList[]) {\r\n const populateFn = entityListEntityModelMap[key];\r\n if (!populateFn) continue;\r\n\r\n const raw = this.searchResponse[key];\r\n if (!Array.isArray(raw)) continue;\r\n\r\n // @ts-expect-error - conditional type EntityModelType<T> cannot be resolved in loop context\r\n (responseObj[key] as EntityModelType<typeof key>[]) = this.searchResponse[\r\n key\r\n ].map((entity) => {\r\n const model = (\r\n populateFn as (e: typeof entity) => EntityModelType<typeof key>\r\n )(entity);\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(),\r\n );\r\n return model;\r\n });\r\n }\r\n\r\n return responseObj;\r\n }\r\n\r\n getEntityModelsByFilter<T extends EntityList>(\r\n entityName: T,\r\n filter: { key: keyof EntityType<T> & string; value: any[] },\r\n ): EntityModelType<T>[] {\r\n const filteredModels = this.entityModelsMap[entityName].filter((model) =>\r\n filter.value.includes((model as any)[filter.key]),\r\n );\r\n\r\n if (filteredModels.length === 0) {\r\n throw new BadRequestException({\r\n key: `${filter.key}`,\r\n message: `${entityName} with values: ${filter.value.join(\", \")} not found. Please try with valid values.`,\r\n });\r\n }\r\n\r\n return filteredModels;\r\n }\r\n\r\n getEntityModelByFilter<T extends EntityList>(\r\n entityName: T,\r\n filter: { key: keyof EntityType<T> & string; value: any },\r\n ) {\r\n const filteredModel = this.entityModelsMap[entityName].filter(\r\n (model) => (model as any)[filter.key] === filter.value,\r\n );\r\n if (filteredModel.length === 0) {\r\n throw new BadRequestException({\r\n key: `${filter.key}`,\r\n message: `${entityName} with values: ${filter.value} not found. Please try with valid values.`,\r\n });\r\n }\r\n\r\n // console.log(\"filteredModel\", filteredModel);\r\n return filteredModel[0];\r\n }\r\n\r\n // populateRelationsFor(entityNames: EntityList[]): EntityListEntityModelMap {\r\n // for (const entityName of entityNames) {\r\n // const models = this.entityModelsMap[entityName];\r\n // if (!models) continue;\r\n // for (const model of models) {\r\n // (model as unknown as BaseEntityModel).populateRelations(\r\n // this.searchResponse,\r\n // );\r\n // }\r\n // }\r\n // return this.entityModelsMap;\r\n // }\r\n\r\n populateRelationsFor(entityNames: EntityList[]): EntityListEntityModelMap {\r\n for (const entityName of entityNames) {\r\n const models = this.entityModelsMap[entityName];\r\n if (!models) continue;\r\n for (const model of models) {\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(), // fresh set per top-level model\r\n );\r\n }\r\n }\r\n return this.entityModelsMap;\r\n }\r\n\r\n mergeEntity<T extends EntityList>(\r\n entityName: T,\r\n savedEntity: EntityType<T>,\r\n ): EntityModelType<T> {\r\n const populateFn = entityListEntityModelMap[entityName];\r\n const model = (populateFn as (e: EntityType<T>) => EntityModelType<T>)(\r\n savedEntity,\r\n );\r\n\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(),\r\n );\r\n\r\n return model;\r\n }\r\n}\r\n","import { IAuditColumnEntity } from \"../../helpers\";\r\nimport { IEntityFilterSearchData } from \"../../types\";\r\nimport { EntityList } from \"../../utils\";\r\n\r\nexport interface IUserEntity extends IAuditColumnEntity {\r\n id: number;\r\n name: string;\r\n password: string;\r\n email: string;\r\n phone: string;\r\n}\r\n\r\n/**\r\n * This is a common config for user entity\r\n * this will be used for createdBy & updatedBy\r\n * for the tables\r\n *\r\n * Adding column keys reduce the bandwidth that is used\r\n */\r\nexport const USER_RELATION_CONFIG: IEntityFilterSearchData<EntityList.USER> = {\r\n name: EntityList.USER,\r\n columnKeys: [\"id\", \"name\"],\r\n};\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,gBAAmC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,oBAA8B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EA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","names":["ConfigurationKey","ConfigurationType","EntityHistoryOperation","EntityStatus","ExpenseType","PaymentType","SponsorTier","TransactionEntityType","TransactionType","VendorType","EntityList","RelationType","OrderByDirection"]}
|
package/dist/index.mjs
CHANGED
|
@@ -401,6 +401,15 @@ var SponsorTier = /* @__PURE__ */ ((SponsorTier2) => {
|
|
|
401
401
|
return SponsorTier2;
|
|
402
402
|
})(SponsorTier || {});
|
|
403
403
|
|
|
404
|
+
// src/enums/transaction-entity-type.enum.ts
|
|
405
|
+
var TransactionEntityType = /* @__PURE__ */ ((TransactionEntityType3) => {
|
|
406
|
+
TransactionEntityType3["DONATION"] = "donation";
|
|
407
|
+
TransactionEntityType3["SPONSOR"] = "sponsor";
|
|
408
|
+
TransactionEntityType3["EXPENSE"] = "expense";
|
|
409
|
+
TransactionEntityType3["DAAN_PETI"] = "daan_peti";
|
|
410
|
+
return TransactionEntityType3;
|
|
411
|
+
})(TransactionEntityType || {});
|
|
412
|
+
|
|
404
413
|
// src/enums/transaction-type.enum.ts
|
|
405
414
|
var TransactionType = /* @__PURE__ */ ((TransactionType2) => {
|
|
406
415
|
TransactionType2["INCOME"] = "Income";
|
|
@@ -1048,7 +1057,8 @@ var _TransactionModel = class _TransactionModel extends BaseEntityModel {
|
|
|
1048
1057
|
this.particulars = "";
|
|
1049
1058
|
this.amount = 0;
|
|
1050
1059
|
this.balanceAfter = 0;
|
|
1051
|
-
this.referenceId =
|
|
1060
|
+
this.referenceId = null;
|
|
1061
|
+
this.entityType = null;
|
|
1052
1062
|
this.paymentType = "Cash" /* CASH */;
|
|
1053
1063
|
this.status = "Active" /* ACTIVE */;
|
|
1054
1064
|
this.createdOn = 0;
|
|
@@ -1059,9 +1069,16 @@ var _TransactionModel = class _TransactionModel extends BaseEntityModel {
|
|
|
1059
1069
|
static populateFromEntity(entity) {
|
|
1060
1070
|
return Object.assign(new _TransactionModel(), entity, {
|
|
1061
1071
|
amount: Number(entity.amount),
|
|
1062
|
-
balanceAfter: Number(entity.balanceAfter)
|
|
1072
|
+
balanceAfter: Number(entity.balanceAfter),
|
|
1073
|
+
referenceId: entity.referenceId != null ? Number(entity.referenceId) : null
|
|
1063
1074
|
});
|
|
1064
1075
|
}
|
|
1076
|
+
static toReferenceId(entityType, referenceId) {
|
|
1077
|
+
if (entityType == null) {
|
|
1078
|
+
return referenceId != null ? String(referenceId) : "";
|
|
1079
|
+
}
|
|
1080
|
+
return referenceId != null ? `${entityType}-${referenceId}` : entityType;
|
|
1081
|
+
}
|
|
1065
1082
|
static toCashBookEntry(tx) {
|
|
1066
1083
|
const isExpense = tx.type === "Expense" /* EXPENSE */;
|
|
1067
1084
|
return {
|
|
@@ -1070,7 +1087,7 @@ var _TransactionModel = class _TransactionModel extends BaseEntityModel {
|
|
|
1070
1087
|
receipt: isExpense ? 0 : tx.amount,
|
|
1071
1088
|
payment: isExpense ? tx.amount : 0,
|
|
1072
1089
|
balance: tx.balanceAfter,
|
|
1073
|
-
referenceId: tx.referenceId
|
|
1090
|
+
referenceId: _TransactionModel.toReferenceId(tx.entityType, tx.referenceId)
|
|
1074
1091
|
};
|
|
1075
1092
|
}
|
|
1076
1093
|
static toCashBook(txns) {
|
|
@@ -1540,6 +1557,7 @@ export {
|
|
|
1540
1557
|
SponsorHistoryModel,
|
|
1541
1558
|
SponsorModel,
|
|
1542
1559
|
SponsorTier,
|
|
1560
|
+
TransactionEntityType,
|
|
1543
1561
|
TransactionHistoryModel,
|
|
1544
1562
|
TransactionModel,
|
|
1545
1563
|
TransactionType,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data/flats.ts","../src/enums/configuration-key.enum.ts","../src/enums/configuration-type.enum.ts","../src/enums/entity-history-operation.enum.ts","../src/enums/entity-status.enum.ts","../src/enums/expense-type.enum.ts","../src/enums/payment-type.enum.ts","../src/enums/reference-id-prefix.enum.ts","../src/enums/sponsor-tier.enum.ts","../src/enums/transaction-type.enum.ts","../src/enums/vendor-type.enum.ts","../src/data/payment-options.ts","../src/utils/date-code.utils.ts","../src/utils/date.utils.ts","../src/models/base.entity.model.ts","../src/models/donation-history.entity.model.ts","../src/models/donation.entity.model.ts","../src/models/expense-history.entity.model.ts","../src/models/expense.entity.model.ts","../src/utils/numberToWords.ts","../src/models/flat.entity.model.ts","../src/models/sponsor-history.entity.model.ts","../src/models/sponsor.entity.model.ts","../src/models/transaction-history.entity.model.ts","../src/models/transaction.entity.model.ts","../src/models/user-history.entity.model.ts","../src/models/user.entity.model.ts","../src/models/vendor-history.entity.model.ts","../src/models/vendor.entity.model.ts","../src/models/configuration.entity.model.ts","../src/utils/entity.utils.ts","../src/utils/entitiy-list-entity-model-map.ts","../src/utils/error.utils.ts","../src/utils/helper.fns.ts","../src/utils/relation-config.utils.ts","../src/utils/sql-utils.ts","../src/helpers/entity-filter-data.helper.ts","../src/interfaces/entities/user.entity.interface.ts"],"sourcesContent":["export const SPECIAL_FLATS: readonly string[] = [\r\n 'Devotee',\r\n 'Ex-Member Devotee',\r\n 'Others',\r\n];\r\n\r\nconst FLAT_NUMBERS_DATA: string[] = [\r\n 'A-101',\r\n 'A-102',\r\n 'A-103',\r\n 'A-104',\r\n 'A-105',\r\n 'A-106',\r\n 'A-201',\r\n 'A-202',\r\n 'A-203',\r\n 'A-204',\r\n 'A-205',\r\n 'A-206',\r\n 'A-301',\r\n 'A-302',\r\n 'A-303',\r\n 'A-304',\r\n 'A-305',\r\n 'A-306',\r\n 'A-401',\r\n 'A-402',\r\n 'A-403',\r\n 'A-404',\r\n 'A-405',\r\n 'A-406',\r\n 'A-501',\r\n 'A-502',\r\n 'A-503',\r\n 'A-504',\r\n 'A-505',\r\n 'A-506',\r\n 'A-601',\r\n 'A-602',\r\n 'A-603',\r\n 'A-604',\r\n 'A-605',\r\n 'A-606',\r\n 'A-701',\r\n 'A-702',\r\n 'A-703',\r\n 'A-704',\r\n 'A-705',\r\n 'A-706',\r\n 'A-801',\r\n 'A-802',\r\n 'A-803',\r\n 'A-804',\r\n 'A-805',\r\n 'A-806',\r\n 'B-101',\r\n 'B-102',\r\n 'B-103',\r\n 'B-104',\r\n 'B-201',\r\n 'B-202',\r\n 'B-203',\r\n 'B-204',\r\n 'B-301',\r\n 'B-302',\r\n 'B-303',\r\n 'B-304',\r\n 'B-401',\r\n 'B-402',\r\n 'B-403',\r\n 'B-404',\r\n 'B-501',\r\n 'B-502',\r\n 'B-503',\r\n 'B-504',\r\n 'B-601',\r\n 'B-602',\r\n 'B-603',\r\n 'B-604',\r\n 'B-701',\r\n 'B-702',\r\n 'B-703',\r\n 'B-704',\r\n 'B-801',\r\n 'B-802',\r\n 'B-803',\r\n 'B-804',\r\n 'C-101',\r\n 'C-102',\r\n 'C-103',\r\n 'C-104',\r\n 'C-201',\r\n 'C-202',\r\n 'C-203',\r\n 'C-204',\r\n 'C-301',\r\n 'C-302',\r\n 'C-303',\r\n 'C-304',\r\n 'C-401',\r\n 'C-402',\r\n 'C-403',\r\n 'C-404',\r\n 'C-501',\r\n 'C-502',\r\n 'C-503',\r\n 'C-504',\r\n 'C-601',\r\n 'C-602',\r\n 'C-603',\r\n 'C-604',\r\n 'C-701',\r\n 'C-702',\r\n 'C-703',\r\n 'C-704',\r\n 'C-801',\r\n 'C-802',\r\n 'C-803',\r\n 'C-804',\r\n 'D-101',\r\n 'D-102',\r\n 'D-103',\r\n 'D-104',\r\n 'D-201',\r\n 'D-202',\r\n 'D-203',\r\n 'D-204',\r\n 'D-301',\r\n 'D-302',\r\n 'D-303',\r\n 'D-304',\r\n 'D-401',\r\n 'D-402',\r\n 'D-403',\r\n 'D-404',\r\n 'D-501',\r\n 'D-502',\r\n 'D-503',\r\n 'D-504',\r\n 'D-601',\r\n 'D-602',\r\n 'D-603',\r\n 'D-604',\r\n 'D-701',\r\n 'D-702',\r\n 'D-703',\r\n 'D-704',\r\n 'D-801',\r\n 'D-802',\r\n 'D-803',\r\n 'D-804',\r\n 'E-101A',\r\n 'E-101B',\r\n 'E-201',\r\n 'E-202',\r\n 'E-203',\r\n 'E-204',\r\n 'E-301',\r\n 'E-302',\r\n 'E-303',\r\n 'E-304',\r\n 'E-401',\r\n 'E-402',\r\n 'E-403',\r\n 'E-404',\r\n 'E-501',\r\n 'E-502',\r\n 'E-503',\r\n 'E-504',\r\n 'E-601',\r\n 'E-602',\r\n 'E-603',\r\n 'E-604',\r\n 'E-701',\r\n 'E-702',\r\n 'E-703',\r\n 'E-704',\r\n 'E-801',\r\n 'E-802',\r\n 'E-803',\r\n 'E-804',\r\n 'F-101',\r\n 'F-102',\r\n 'F-103',\r\n 'F-104',\r\n 'F-201',\r\n 'F-202',\r\n 'F-203',\r\n 'F-204',\r\n 'F-301',\r\n 'F-302',\r\n 'F-303',\r\n 'F-304',\r\n 'F-401',\r\n 'F-402',\r\n 'F-403',\r\n 'F-404',\r\n 'F-501',\r\n 'F-502',\r\n 'F-503',\r\n 'F-504',\r\n 'F-601',\r\n 'F-602',\r\n 'F-603',\r\n 'F-604',\r\n 'F-701',\r\n 'F-702',\r\n 'F-703',\r\n 'F-704',\r\n 'F-801',\r\n 'F-802',\r\n 'F-803',\r\n 'F-804',\r\n 'G-101',\r\n 'G-102',\r\n 'G-103',\r\n 'G-104',\r\n 'G-201',\r\n 'G-202',\r\n 'G-203',\r\n 'G-204',\r\n 'G-301',\r\n 'G-302',\r\n 'G-303',\r\n 'G-304',\r\n 'G-401',\r\n 'G-402',\r\n 'G-403',\r\n 'G-404',\r\n 'G-501',\r\n 'G-502',\r\n 'G-503',\r\n 'G-504',\r\n 'G-601',\r\n 'G-602',\r\n 'G-603',\r\n 'G-604',\r\n 'G-701',\r\n 'G-702',\r\n 'G-703',\r\n 'G-704',\r\n 'G-801',\r\n 'G-802',\r\n 'G-803',\r\n 'G-804',\r\n 'H-101',\r\n 'H-102',\r\n 'H-103',\r\n 'H-104',\r\n 'H-201',\r\n 'H-202',\r\n 'H-203',\r\n 'H-204',\r\n 'H-301',\r\n 'H-302',\r\n 'H-303',\r\n 'H-304',\r\n 'H-401',\r\n 'H-402',\r\n 'H-403',\r\n 'H-404',\r\n 'H-501',\r\n 'H-502',\r\n 'H-503',\r\n 'H-504',\r\n 'H-601',\r\n 'H-602',\r\n 'H-603',\r\n 'H-604',\r\n 'H-701',\r\n 'H-702',\r\n 'H-703',\r\n 'H-704',\r\n 'H-801',\r\n 'H-802',\r\n 'H-803',\r\n 'H-804',\r\n 'I-101',\r\n 'I-102',\r\n 'I-103',\r\n 'I-104',\r\n 'I-201',\r\n 'I-202',\r\n 'I-203',\r\n 'I-204',\r\n 'I-301',\r\n 'I-302',\r\n 'I-303',\r\n 'I-304',\r\n 'I-401',\r\n 'I-402',\r\n 'I-403',\r\n 'I-404',\r\n 'I-501',\r\n 'I-502',\r\n 'I-503',\r\n 'I-504',\r\n 'I-601',\r\n 'I-602',\r\n 'I-603',\r\n 'I-604',\r\n 'I-701',\r\n 'I-702',\r\n 'I-703',\r\n 'I-704',\r\n 'I-801',\r\n 'I-802',\r\n 'I-803',\r\n 'I-804',\r\n];\r\n\r\nexport const FLAT_NUMBERS: readonly string[] = FLAT_NUMBERS_DATA;\r\n\r\nexport const FLATS_BY_WING: ReadonlyMap<string, readonly string[]> = (() => {\r\n const map = new Map<string, string[]>();\r\n for (const flat of FLAT_NUMBERS_DATA) {\r\n const [wing, num] = flat.split('-');\r\n if (!map.has(wing)) {\r\n map.set(wing, []);\r\n }\r\n map.get(wing)!.push(num);\r\n }\r\n return map;\r\n})();\r\n\r\nexport const WINGS: readonly string[] = (() => {\r\n const wings: string[] = [];\r\n for (const flat of FLAT_NUMBERS_DATA) {\r\n const [wing] = flat.split('-');\r\n if (!wings.includes(wing)) {\r\n wings.push(wing);\r\n }\r\n }\r\n return wings;\r\n})();\r\n","export enum ConfigurationKey {\r\n OPENING_BALANCE = \"opening_balance\",\r\n EDIT_ALLOWANCE_PERIOD = \"edit_allowance_period\",\r\n PAGE_SIZE = \"page_size\",\r\n}\r\n","export enum ConfigurationType {\r\n NUMBER = 'number',\r\n STRING = 'string',\r\n CRONJOB_EXPRESSION = 'cronjob_expression',\r\n JSON = 'json',\r\n}\r\n","export enum EntityHistoryOperation {\r\n CREATE = 'CREATE',\r\n UPDATE = 'UPDATE',\r\n DELETE = 'DELETE',\r\n}\r\n","export enum EntityStatus {\r\n ACTIVE = 'Active',\r\n DELETED = 'Deleted',\r\n}\r\n","export enum ExpenseType {\r\n DECORATION = 'Decoration',\r\n LIGHTING = 'Lighting',\r\n SOUND = 'Sound',\r\n PRASAD = 'Prasad',\r\n SECURITY = 'Security',\r\n TRANSPORTATION = 'Transportation',\r\n PRINTING = 'Printing',\r\n MISCELLANEOUS = 'Miscellaneous',\r\n}\r\n","export enum PaymentType {\r\n CASH = 'Cash',\r\n UPI = 'UPI',\r\n BANK_TRANSFER = 'Bank Transfer',\r\n}\r\n","export const ReferenceIdPrefix = {\r\n DONATION: 'DON',\r\n EXPENSE: 'EXP',\r\n SPONSOR: 'SPO',\r\n DAAN_PETI: 'DPB',\r\n} as const;\r\n","export enum SponsorTier {\r\n GOLD_SPONSOR = 'Gold Sponsor',\r\n SILVER_SPONSOR = 'Silver Sponsor',\r\n BRONZE_SPONSOR = 'Bronze Sponsor',\r\n GENERAL_SPONSOR = 'General Sponsor',\r\n}\r\n","export enum TransactionType {\r\n INCOME = 'Income',\r\n EXPENSE = 'Expense',\r\n}\r\n","export enum VendorType {\r\n SUPPLIER = 'Supplier',\r\n SERVICE_PROVIDER = 'Service Provider',\r\n CONTRACTOR = 'Contractor',\r\n OTHER = 'Other',\r\n}\r\n","import { PaymentType } from \"../enums\";\r\n\r\nexport const PAYMENT_OPTIONS: readonly { value: PaymentType; label: string }[] = [\r\n { value: PaymentType.CASH, label: \"Cash\" },\r\n { value: PaymentType.UPI, label: \"UPI\" },\r\n { value: PaymentType.BANK_TRANSFER, label: \"Bank Transfer\" },\r\n];\r\n","/**\r\n * Utility class for validating date codes in `YYYYMMDD` format.\r\n *\r\n * @example new DateCodeUtils(20240315)\r\n *\r\n * @methods\r\n * - `isValidYYYYMMDD()` — checks if the date code is a real calendar date. e.g. `new DateCodeUtils(20240315).isValidYYYYMMDD() // true`\r\n */\r\nexport class DateCodeUtils {\r\n stringifiedDateCode: string;\r\n constructor(private readonly dateCode: string | number) {\r\n this.stringifiedDateCode = String(this.dateCode);\r\n if (!this.isValidYYYYMMDD()) {\r\n throw new Error(\r\n `Invalid date code: \"${this.stringifiedDateCode}\". Expected format: YYYYMMDD.`,\r\n );\r\n }\r\n }\r\n\r\n isValidYYYYMMDD(): boolean {\r\n if (!/^\\d{8}$/.test(this.stringifiedDateCode)) return false;\r\n\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n if (month < 1 || month > 12) return false;\r\n if (day < 1 || day > 31) return false;\r\n\r\n const date = new Date(year, month - 1, day);\r\n return (\r\n date.getFullYear() === year &&\r\n date.getMonth() === month - 1 &&\r\n date.getDate() === day\r\n );\r\n }\r\n\r\n toLongDateString(): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n return new Date(year, month - 1, day).toLocaleDateString(\"en-US\", {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n });\r\n }\r\n\r\n addMonths(months: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year, month - 1 + months, day);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n addDays(days: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year, month - 1, day);\r\n date.setDate(date.getDate() + days);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n addWeeks(weeks: number): string {\r\n return this.addDays(weeks * 7);\r\n }\r\n\r\n addYears(years: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year + years, month - 1, day);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n private parseDateParts(): { year: number; month: number; day: number } {\r\n return {\r\n year: parseInt(this.stringifiedDateCode.substring(0, 4), 10),\r\n month: parseInt(this.stringifiedDateCode.substring(4, 6), 10),\r\n day: parseInt(this.stringifiedDateCode.substring(6, 8), 10),\r\n };\r\n }\r\n\r\n static getCurrentYear(): number {\r\n return new Date().getFullYear();\r\n }\r\n\r\n static daysDiff(dateCode: string | number): number {\r\n const { year, month, day } = new DateCodeUtils(dateCode).parseDateParts();\r\n const target = new Date(year, month - 1, day);\r\n const today = new Date();\r\n today.setHours(0, 0, 0, 0);\r\n\r\n const diffMs = target.getTime() - today.getTime();\r\n return Math.round(diffMs / (1000 * 60 * 60 * 24));\r\n }\r\n\r\n static getCurrentDateCode(): string {\r\n const today = new Date();\r\n const year = today.getFullYear();\r\n const month = String(today.getMonth() + 1).padStart(2, \"0\");\r\n const day = String(today.getDate()).padStart(2, \"0\");\r\n return `${year}${month}${day}`;\r\n }\r\n}\r\n","// src/common/helpers/date.util.ts\r\nexport class DateUtil {\r\n // Current time as epoch milliseconds\r\n static now(): number {\r\n return Date.now();\r\n }\r\n\r\n // Date object → epoch milliseconds\r\n static toEpoch(date: Date): number {\r\n return date.getTime();\r\n }\r\n\r\n // Epoch milliseconds → Date object\r\n static toDate(epoch: number): Date {\r\n return new Date(epoch);\r\n }\r\n\r\n // Epoch milliseconds → readable string\r\n static toReadable(epoch: number): string {\r\n return new Date(epoch).toISOString();\r\n }\r\n\r\n // Add days to epoch → returns epoch\r\n static addDays(epoch: number, days: number): number {\r\n return epoch + days * 24 * 60 * 60 * 1000;\r\n }\r\n\r\n // Add months to epoch → returns epoch\r\n static addMonths(epoch: number, months: number): number {\r\n const date = new Date(epoch);\r\n date.setMonth(date.getMonth() + months);\r\n return date.getTime();\r\n }\r\n\r\n // Add weeks to epoch → returns epoch\r\n static addWeeks(epoch: number, weeks: number): number {\r\n return this.addDays(epoch, weeks * 7);\r\n }\r\n\r\n // Add years to epoch → returns epoch\r\n static addYears(epoch: number, years: number): number {\r\n const date = new Date(epoch);\r\n date.setFullYear(date.getFullYear() + years);\r\n return date.getTime();\r\n }\r\n\r\n // Difference in days between two epochs\r\n static daysDifference(epoch1: number, epoch2: number): number {\r\n return Math.ceil((epoch2 - epoch1) / (1000 * 60 * 60 * 24));\r\n }\r\n\r\n // Check if epoch is today\r\n static isToday(epoch: number): boolean {\r\n const date = new Date(epoch);\r\n const today = new Date();\r\n return (\r\n date.getDate() === today.getDate() &&\r\n date.getMonth() === today.getMonth() &&\r\n date.getFullYear() === today.getFullYear()\r\n );\r\n }\r\n\r\n // Check if epoch is in the past\r\n static isPast(epoch: number): boolean {\r\n return epoch < Date.now();\r\n }\r\n\r\n // Check if epoch is in the future\r\n static isFuture(epoch: number): boolean {\r\n return epoch > Date.now();\r\n }\r\n}\r\n\r\n","import { ISearchV2Response } from \"../types/generic.dto.types\";\r\nimport {\r\n entityListEntityModelMap,\r\n IModelRelationConfig,\r\n RelationType,\r\n} from \"../utils\";\r\nimport { EntityList, EntityType } from \"../utils/entity.utils\";\r\n\r\nexport abstract class BaseEntityModel {\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {};\r\n\r\n // populateRelations(searchResponse: ISearchV2Response): this {\r\n // const relations = (this.constructor as typeof BaseEntityModel).relations;\r\n // for (const [prop, config] of Object.entries(relations)) {\r\n // const { relationType, mappingProperty, searchProperty, entity } = config!;\r\n // // @ts-ignore\r\n // const fkValue = this[mappingProperty];\r\n // const bucket = searchResponse[entity] ?? [];\r\n // if (!bucket.length) continue;\r\n\r\n // if (relationType === RelationType.ONE) {\r\n // // @ts-ignore\r\n // const match = bucket.find((e) => e[searchProperty] === fkValue);\r\n // if (match) {\r\n // const hydrated = (\r\n // entityListEntityModelMap[entity] as (\r\n // e: EntityType<EntityList>,\r\n // ) => any\r\n // )(match);\r\n // // recursively populate relations on the hydrated model\r\n // hydrated.populateRelations(searchResponse);\r\n // this[prop as keyof this] = hydrated;\r\n // }\r\n // } else {\r\n // const matches = bucket.filter(\r\n // (e: any) => e[searchProperty] === fkValue,\r\n // );\r\n // this[prop as keyof this] = matches.map((e: EntityType<EntityList>) => {\r\n // const hydrated = (\r\n // entityListEntityModelMap[entity] as (\r\n // e: EntityType<EntityList>,\r\n // ) => any\r\n // )(e);\r\n // // recursively populate relations on each hydrated model\r\n // hydrated.populateRelations(searchResponse);\r\n // return hydrated;\r\n // }) as this[keyof this];\r\n // }\r\n // }\r\n // return this;\r\n // }\r\n\r\n populateRelations(\r\n searchResponse: ISearchV2Response,\r\n visited = new Set<string>(),\r\n ): this {\r\n const selfKey = `${this.constructor.name}:${(this as any).id}`;\r\n if (visited.has(selfKey)) return this;\r\n visited.add(selfKey);\r\n\r\n const relations = (this.constructor as typeof BaseEntityModel).relations;\r\n for (const [, config] of Object.entries(relations)) {\r\n const { relationType, mappingProperties, searchProperty, entity } = config!;\r\n const bucket = searchResponse[entity] ?? [];\r\n if (!bucket.length) continue;\r\n\r\n const hydrateEntity = (raw: EntityType<EntityList>) => {\r\n const hydrated = (\r\n entityListEntityModelMap[entity] as (\r\n e: EntityType<EntityList>,\r\n ) => any\r\n )(raw);\r\n hydrated.populateRelations(searchResponse, visited);\r\n return hydrated;\r\n };\r\n\r\n if (relationType === RelationType.ONE) {\r\n for (const { sourceProperty, targetProperty } of mappingProperties) {\r\n // @ts-ignore\r\n const fkValue = this[sourceProperty];\r\n if (fkValue == null) continue;\r\n const match = bucket.find(\r\n (e: any) => e[searchProperty] === fkValue,\r\n );\r\n if (match) {\r\n (this as any)[targetProperty] = hydrateEntity(match);\r\n }\r\n }\r\n } else {\r\n const fkValues = mappingProperties\r\n .map((mp) => (this as any)[mp.sourceProperty])\r\n .filter((v: any) => v != null);\r\n const matches = bucket.filter((e: any) =>\r\n fkValues.includes(e[searchProperty]),\r\n );\r\n const targetProperty = mappingProperties[0]?.targetProperty;\r\n if (targetProperty && matches.length) {\r\n (this as any)[targetProperty] = matches.map(hydrateEntity);\r\n }\r\n }\r\n }\r\n return this;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IDonationHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class DonationHistoryModel\n extends BaseEntityModel\n implements IDonationHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.DONATION_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IDonationHistoryEntity,\n ): DonationHistoryModel {\n return Object.assign(new DonationHistoryModel(), entity);\n }\n}\n","import { EntityStatus, PaymentType } from \"../enums\";\r\nimport { IDonationEntity } from \"../interfaces\";\r\nimport {\r\n EntityList,\r\n IModelRelationConfig,\r\n RelationType,\r\n} from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\n\r\nexport class DonationModel extends BaseEntityModel implements IDonationEntity {\r\n id: number = 0;\r\n receiptNumber: string = \"\";\r\n flatNo: string = \"\";\r\n amount: number = 0;\r\n mobileNumber?: string;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n donationYear: number = new Date().getFullYear();\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: IDonationEntity): DonationModel {\r\n return Object.assign(new DonationModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n\r\n static getReceiptPrefix(flatNo: string): string {\r\n const year = new Date().getFullYear();\r\n if (flatNo === 'Devotee') return `MPCR-${year}-OD`;\r\n if (flatNo === 'Ex-Member Devotee') return `MPCR-${year}-EMD`;\r\n if (flatNo === 'Others') return `MPCR-${year}-OTH`;\r\n return `MPCR-${year}-${flatNo}`;\r\n }\r\n\r\n static generateReceiptNumber(flatNo: string, existingDonations: DonationModel[]): string {\r\n const count = existingDonations.filter(d => d.flatNo === flatNo).length + 1;\r\n const seq = String(count).padStart(2, '0');\r\n return `${DonationModel.getReceiptPrefix(flatNo)}-${seq}`;\r\n }\r\n\r\n static toWhatsAppNumber(mobile: string): string {\r\n const digits = mobile.replace(/\\D/g, '');\r\n if (digits.length === 0) return '';\r\n if (digits.length === 10) return `91${digits}`;\r\n return digits;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IExpenseHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class ExpenseHistoryModel\n extends BaseEntityModel\n implements IExpenseHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.EXPENSE_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IExpenseHistoryEntity,\n ): ExpenseHistoryModel {\n return Object.assign(new ExpenseHistoryModel(), entity);\n }\n}\n","import { EntityStatus, ExpenseType, PaymentType } from \"../enums\";\r\nimport { IExpenseEntity } from \"../interfaces\";\r\nimport { EntityList, IModelRelationConfig, RelationType } from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\nimport { VendorModel } from \"./vendor.entity.model\";\r\n\r\nexport class ExpenseModel extends BaseEntityModel implements IExpenseEntity {\r\n id: number = 0;\r\n name: string = \"\";\r\n type: ExpenseType = ExpenseType.MISCELLANEOUS;\r\n vendorId: number = 0;\r\n incurredBy: number = 0;\r\n amount: number = 0;\r\n billNumber?: string;\r\n remarks?: string;\r\n description?: string;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n incurredByUser?: UserModel;\r\n vendor?: VendorModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n { sourceProperty: \"incurredBy\", targetProperty: \"incurredByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n [EntityList.VENDOR]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"vendorId\", targetProperty: \"vendor\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.VENDOR,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: IExpenseEntity): ExpenseModel {\r\n return Object.assign(new ExpenseModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n\r\n get incurredByUserName() {\r\n return this.incurredByUser?.name;\r\n }\r\n\r\n get vendorName() {\r\n return this.vendor?.name ?? \"\";\r\n }\r\n}\r\n","export function convertNumberToWords(num: number): string {\r\n if (num === 0) return \"Zero Rupees Only\";\r\n\r\n const singleDigits = [\r\n \"\",\r\n \"One\",\r\n \"Two\",\r\n \"Three\",\r\n \"Four\",\r\n \"Five\",\r\n \"Six\",\r\n \"Seven\",\r\n \"Eight\",\r\n \"Nine\",\r\n ];\r\n const teenDigits = [\r\n \"Ten\",\r\n \"Eleven\",\r\n \"Twelve\",\r\n \"Thirteen\",\r\n \"Fourteen\",\r\n \"Fifteen\",\r\n \"Sixteen\",\r\n \"Seventeen\",\r\n \"Eighteen\",\r\n \"Nineteen\",\r\n ];\r\n const doubleDigits = [\r\n \"\",\r\n \"Ten\",\r\n \"Twenty\",\r\n \"Thirty\",\r\n \"Forty\",\r\n \"Fifty\",\r\n \"Sixty\",\r\n \"Seventy\",\r\n \"Eighty\",\r\n \"Ninety\",\r\n ];\r\n\r\n function convertGroup(val: number): string {\r\n let out = \"\";\r\n if (val >= 100) {\r\n out += singleDigits[Math.floor(val / 100)] + \" Hundred \";\r\n val %= 100;\r\n }\r\n if (val >= 10 && val < 20) {\r\n out += teenDigits[val - 10] + \" \";\r\n } else if (val >= 20) {\r\n out += doubleDigits[Math.floor(val / 10)] + \" \";\r\n val %= 10;\r\n if (val > 0) {\r\n out += singleDigits[val] + \" \";\r\n }\r\n } else if (val > 0) {\r\n out += singleDigits[val] + \" \";\r\n }\r\n return out.trim();\r\n }\r\n\r\n let temp = Math.floor(num);\r\n let words = \"\";\r\n\r\n if (temp >= 10000000) {\r\n const croresValue = Math.floor(temp / 10000000);\r\n words += convertGroup(croresValue) + \" Crore \";\r\n temp %= 10000000;\r\n }\r\n\r\n if (temp >= 100000) {\r\n const lakhsValue = Math.floor(temp / 100000);\r\n words += convertGroup(lakhsValue) + \" Lakh \";\r\n temp %= 100000;\r\n }\r\n\r\n if (temp >= 1000) {\r\n const thousandsValue = Math.floor(temp / 1000);\r\n words += convertGroup(thousandsValue) + \" Thousand \";\r\n temp %= 1000;\r\n }\r\n\r\n if (temp > 0) {\r\n words += convertGroup(temp);\r\n }\r\n\r\n return words.trim() + \" Rupees Only\";\r\n}\r\n","import {\r\n FLATS_BY_WING,\r\n FLAT_NUMBERS,\r\n SPECIAL_FLATS,\r\n WINGS,\r\n} from \"../data/flats\";\r\nimport { convertNumberToWords } from \"../utils/numberToWords\";\r\n\r\nexport interface FlatDonationLike {\r\n flatNo: string;\r\n amount: number;\r\n donationYear?: number;\r\n createdOn?: number;\r\n createdByUser?: { name?: string } | null;\r\n updatedByUser?: { name?: string } | null;\r\n}\r\n\r\nexport type FlatCollectionStatus = \"Paid\" | \"Pending\";\r\n\r\nexport interface FlatCollectionEntry {\r\n flatNumber: string;\r\n status: FlatCollectionStatus;\r\n amount: number;\r\n latestDonation?: FlatDonationLike | null;\r\n}\r\n\r\nexport interface FlatParseResult {\r\n wing?: string;\r\n num?: string;\r\n isSpecial: boolean;\r\n}\r\n\r\nexport interface FlatOption {\r\n label: string;\r\n value: string;\r\n}\r\n\r\nexport class FlatModel {\r\n static readonly FLAT_NUMBERS: readonly string[] = FLAT_NUMBERS;\r\n static readonly FLATS_BY_WING: ReadonlyMap<string, readonly string[]> =\r\n FLATS_BY_WING;\r\n static readonly SPECIAL_FLATS: readonly string[] = SPECIAL_FLATS;\r\n static readonly WINGS: readonly string[] = WINGS;\r\n\r\n static getDonationYear(): number {\r\n return new Date().getFullYear();\r\n }\r\n\r\n static buildFlatNumber(wing: string, num: string): string {\r\n return `${wing}-${num}`;\r\n }\r\n\r\n static isSpecialFlat(flatNo: string): boolean {\r\n return FlatModel.SPECIAL_FLATS.includes(flatNo);\r\n }\r\n\r\n static parseFlatNumber(flatNo: string): FlatParseResult {\r\n if (FlatModel.isSpecialFlat(flatNo)) {\r\n return { isSpecial: true };\r\n }\r\n const match = /^([A-Za-z])-([0-9]{1,3}[A-Za-z]?)$/.exec(flatNo);\r\n if (match) {\r\n return { wing: match[1], num: match[2], isSpecial: false };\r\n }\r\n return { isSpecial: false };\r\n }\r\n\r\n static getFlatOptions(wing: string): FlatOption[] {\r\n const wingFlats = FlatModel.FLATS_BY_WING.get(wing) ?? [];\r\n const all = [...wingFlats, ...FlatModel.SPECIAL_FLATS];\r\n return all.map((f) => ({\r\n label: FlatModel.isSpecialFlat(f) ? f : `${wing}-${f}`,\r\n value: f,\r\n }));\r\n }\r\n\r\n static getDisplayLabel(wing: string, flatNo: string): string {\r\n if (!flatNo) return \"\";\r\n if (FlatModel.isSpecialFlat(flatNo)) return flatNo;\r\n return `${wing}-${flatNo}`;\r\n }\r\n\r\n static computeCollectionStatus(\r\n donations: FlatDonationLike[],\r\n year: number,\r\n ): FlatCollectionEntry[] {\r\n return FlatModel.FLAT_NUMBERS.map((flatNumber) => {\r\n const flatDonations = donations.filter(\r\n (d) => d.donationYear === year && d.flatNo === flatNumber,\r\n );\r\n const amount = flatDonations.reduce((sum, d) => sum + d.amount, 0);\r\n const status: FlatCollectionStatus = amount > 0 ? \"Paid\" : \"Pending\";\r\n const latestDonation = flatDonations.length\r\n ? flatDonations.reduce((latest, d) =>\r\n (d.createdOn ?? 0) > (latest.createdOn ?? 0) ? d : latest,\r\n )\r\n : null;\r\n return { flatNumber, status, amount, latestDonation };\r\n });\r\n }\r\n\r\n static compareFlatNumbers(a: string, b: string): number {\r\n const isA = FlatModel.isSpecialFlat(a);\r\n const isB = FlatModel.isSpecialFlat(b);\r\n if (isA || isB) {\r\n if (isA && isB) {\r\n return (\r\n FlatModel.SPECIAL_FLATS.indexOf(a) -\r\n FlatModel.SPECIAL_FLATS.indexOf(b)\r\n );\r\n }\r\n return isA ? 1 : -1;\r\n }\r\n\r\n const pa = FlatModel.parseFlatNumber(a);\r\n const pb = FlatModel.parseFlatNumber(b);\r\n if (!pa.wing || !pa.num || !pb.wing || !pb.num) {\r\n return a < b ? -1 : a > b ? 1 : 0;\r\n }\r\n if (pa.wing !== pb.wing) {\r\n return pa.wing < pb.wing ? -1 : 1;\r\n }\r\n\r\n const numericA = Number(pa.num.replace(/[^0-9]/g, \"\"));\r\n const numericB = Number(pb.num.replace(/[^0-9]/g, \"\"));\r\n const floorA = Math.floor(numericA / 100);\r\n const floorB = Math.floor(numericB / 100);\r\n if (floorA !== floorB) return floorA - floorB;\r\n\r\n const unitA = numericA % 100;\r\n const unitB = numericB % 100;\r\n if (unitA !== unitB) return unitA - unitB;\r\n\r\n const suffixA = pa.num.replace(/\\d/g, \"\");\r\n const suffixB = pb.num.replace(/\\d/g, \"\");\r\n if (suffixA !== suffixB) return suffixA < suffixB ? -1 : 1;\r\n return 0;\r\n }\r\n\r\n static convertNumberToWords(num: number): string {\r\n return convertNumberToWords(num);\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { ISponsorHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class SponsorHistoryModel\n extends BaseEntityModel\n implements ISponsorHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.SPONSOR_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: ISponsorHistoryEntity,\n ): SponsorHistoryModel {\n return Object.assign(new SponsorHistoryModel(), entity);\n }\n}\n","import { EntityStatus, PaymentType } from \"../enums\";\r\nimport { ISponsorEntity } from \"../interfaces\";\r\nimport { EntityList, IModelRelationConfig, RelationType } from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\n\r\nexport class SponsorModel extends BaseEntityModel implements ISponsorEntity {\r\n id: number = 0;\r\n sponsorName: string = \"\";\r\n contactName: string = \"\";\r\n contactNo: string = \"\";\r\n sponsorFor: string = \"\";\r\n size: string = \"\";\r\n amount: number = 0;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: ISponsorEntity): SponsorModel {\r\n return Object.assign(new SponsorModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n\r\n get receiptNumber(): string {\r\n return `MPCR-SPR-${this.id}`;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { ITransactionHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class TransactionHistoryModel\n extends BaseEntityModel\n implements ITransactionHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.TRANSACTION_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: ITransactionHistoryEntity,\n ): TransactionHistoryModel {\n return Object.assign(new TransactionHistoryModel(), entity);\n }\n}\n","import { ICashBookEntry, ITransactionEntity } from \"../interfaces\";\r\nimport { EntityStatus, PaymentType, TransactionType } from \"../enums\";\r\nimport { EntityList, IModelRelationConfig, RelationType } from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\n\r\nexport class TransactionModel\r\n extends BaseEntityModel\r\n implements ITransactionEntity\r\n{\r\n id: number = 0;\r\n date: string = \"\";\r\n type: TransactionType = TransactionType.INCOME;\r\n particulars: string = \"\";\r\n amount: number = 0;\r\n balanceAfter: number = 0;\r\n referenceId: string = \"\";\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: ITransactionEntity): TransactionModel {\r\n return Object.assign(new TransactionModel(), entity, {\r\n amount: Number(entity.amount),\r\n balanceAfter: Number(entity.balanceAfter),\r\n });\r\n }\r\n\r\n static toCashBookEntry(tx: TransactionModel): ICashBookEntry {\r\n const isExpense = tx.type === TransactionType.EXPENSE;\r\n return {\r\n date: tx.date,\r\n particulars: tx.particulars,\r\n receipt: isExpense ? 0 : tx.amount,\r\n payment: isExpense ? tx.amount : 0,\r\n balance: tx.balanceAfter,\r\n referenceId: tx.referenceId,\r\n };\r\n }\r\n\r\n static toCashBook(txns: TransactionModel[]): ICashBookEntry[] {\r\n return txns.map(TransactionModel.toCashBookEntry);\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IUserHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class UserHistoryModel\n extends BaseEntityModel\n implements IUserHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.USER_HISTORY>>\n > = {};\n\n static populateFromEntity(entity: IUserHistoryEntity): UserHistoryModel {\n return Object.assign(new UserHistoryModel(), entity);\n }\n}\n","import { IUserEntity } from \"../interfaces\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class UserModel extends BaseEntityModel implements IUserEntity {\r\n id: number = 0;\r\n name: string = \"\";\r\n password: string = \"\";\r\n email: string = \"\";\r\n phone: string = \"\";\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n private static _superAdminEmail: string = \"\";\r\n\r\n static setSuperAdminEmail(email: string) {\r\n this._superAdminEmail = email;\r\n }\r\n\r\n static mandalAccountUser() {\r\n return { id: 0, name: \"Mandal Account\" } as UserModel;\r\n }\r\n\r\n static isSuperAdmin(email: string): boolean {\r\n return email === this._superAdminEmail;\r\n }\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: IUserEntity): UserModel {\r\n return Object.assign(new UserModel(), entity);\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IVendorHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class VendorHistoryModel\n extends BaseEntityModel\n implements IVendorHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.VENDOR_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IVendorHistoryEntity,\n ): VendorHistoryModel {\n return Object.assign(new VendorHistoryModel(), entity);\n }\n}\n","import { IVendorEntity } from \"../interfaces\";\r\nimport { EntityList, IModelRelationConfig, RelationType } from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\n\r\nexport class VendorModel extends BaseEntityModel implements IVendorEntity {\r\n id: number = 0;\r\n name: string = \"\";\r\n type: string = \"\";\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: IVendorEntity): VendorModel {\r\n return Object.assign(new VendorModel(), entity);\r\n }\r\n}\r\n","import { ConfigurationType } from \"../enums\";\r\nimport { IConfigurationEntity } from \"../interfaces\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class ConfigurationModel\r\n extends BaseEntityModel\r\n implements IConfigurationEntity\r\n{\r\n id: number = 0;\r\n key: string = \"\";\r\n value: string = \"\";\r\n type: ConfigurationType = ConfigurationType.STRING;\r\n label: string = \"\";\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: IConfigurationEntity): ConfigurationModel {\r\n return Object.assign(new ConfigurationModel(), entity);\r\n }\r\n\r\n static fallBackPageSize() {\r\n return this.defaultFallBackPageSize();\r\n }\r\n\r\n static defaultFallBackPageSize() {\r\n return 50;\r\n }\r\n}\r\n","import { IConfigurationEntity } from \"../interfaces/entities/configuration.entity.interface\";\r\nimport { IDonationHistoryEntity } from \"../interfaces/entities/donation-history.entity.interface\";\r\nimport { IDonationEntity } from \"../interfaces/entities/donation.entity.interface\";\r\nimport { IExpenseHistoryEntity } from \"../interfaces/entities/expense-history.entity.interface\";\r\nimport { IExpenseEntity } from \"../interfaces/entities/expense.entity.interface\";\r\nimport { ISponsorHistoryEntity } from \"../interfaces/entities/sponsor-history.entity.interface\";\r\nimport { ISponsorEntity } from \"../interfaces/entities/sponsor.entity.interface\";\r\nimport { ITransactionHistoryEntity } from \"../interfaces/entities/transaction-history.entity.interface\";\r\nimport { ITransactionEntity } from \"../interfaces/entities/transaction.entity.interface\";\r\nimport { IUserHistoryEntity } from \"../interfaces/entities/user-history.entity.interface\";\r\nimport { IUserEntity } from \"../interfaces/entities/user.entity.interface\";\r\nimport { IVendorHistoryEntity } from \"../interfaces/entities/vendor-history.entity.interface\";\r\nimport { IVendorEntity } from \"../interfaces/entities/vendor.entity.interface\";\r\nimport { ConfigurationModel } from \"../models/configuration.entity.model\";\r\nimport { DonationHistoryModel } from \"../models/donation-history.entity.model\";\r\nimport { DonationModel } from \"../models/donation.entity.model\";\r\nimport { ExpenseHistoryModel } from \"../models/expense-history.entity.model\";\r\nimport { ExpenseModel } from \"../models/expense.entity.model\";\r\nimport { SponsorHistoryModel } from \"../models/sponsor-history.entity.model\";\r\nimport { SponsorModel } from \"../models/sponsor.entity.model\";\r\nimport { TransactionHistoryModel } from \"../models/transaction-history.entity.model\";\r\nimport { TransactionModel } from \"../models/transaction.entity.model\";\r\nimport { UserHistoryModel } from \"../models/user-history.entity.model\";\r\nimport { UserModel } from \"../models/user.entity.model\";\r\nimport { VendorHistoryModel } from \"../models/vendor-history.entity.model\";\r\nimport { VendorModel } from \"../models/vendor.entity.model\";\r\n\r\nexport enum EntityList {\r\n DONATION = \"donation\",\r\n DONATION_HISTORY = \"donation_history\",\r\n USER = \"user\",\r\n USER_HISTORY = \"user_history\",\r\n EXPENSE = \"expense\",\r\n EXPENSE_HISTORY = \"expense_history\",\r\n VENDOR = \"vendor\",\r\n VENDOR_HISTORY = \"vendor_history\",\r\n TRANSACTION = \"transaction\",\r\n TRANSACTION_HISTORY = \"transaction_history\",\r\n SPONSOR = \"sponsor\",\r\n SPONSOR_HISTORY = \"sponsor_history\",\r\n CONFIGURATION = \"configuration\",\r\n}\r\n\r\nexport type EntityType<T extends EntityList> = T extends EntityList.DONATION\r\n ? IDonationEntity\r\n : T extends EntityList.DONATION_HISTORY\r\n ? IDonationHistoryEntity\r\n : T extends EntityList.USER\r\n ? IUserEntity\r\n : T extends EntityList.USER_HISTORY\r\n ? IUserHistoryEntity\r\n : T extends EntityList.EXPENSE\r\n ? IExpenseEntity\r\n : T extends EntityList.EXPENSE_HISTORY\r\n ? IExpenseHistoryEntity\r\n : T extends EntityList.VENDOR\r\n ? IVendorEntity\r\n : T extends EntityList.VENDOR_HISTORY\r\n ? IVendorHistoryEntity\r\n : T extends EntityList.TRANSACTION\r\n ? ITransactionEntity\r\n : T extends EntityList.TRANSACTION_HISTORY\r\n ? ITransactionHistoryEntity\r\n : T extends EntityList.SPONSOR\r\n ? ISponsorEntity\r\n : T extends EntityList.SPONSOR_HISTORY\r\n ? ISponsorHistoryEntity\r\n : T extends EntityList.CONFIGURATION\r\n ? IConfigurationEntity\r\n : never;\r\n\r\nexport type EntityModelType<T extends EntityList> =\r\n T extends EntityList.DONATION\r\n ? DonationModel\r\n : T extends EntityList.DONATION_HISTORY\r\n ? DonationHistoryModel\r\n : T extends EntityList.USER\r\n ? UserModel\r\n : T extends EntityList.USER_HISTORY\r\n ? UserHistoryModel\r\n : T extends EntityList.EXPENSE\r\n ? ExpenseModel\r\n : T extends EntityList.EXPENSE_HISTORY\r\n ? ExpenseHistoryModel\r\n : T extends EntityList.VENDOR\r\n ? VendorModel\r\n : T extends EntityList.VENDOR_HISTORY\r\n ? VendorHistoryModel\r\n : T extends EntityList.TRANSACTION\r\n ? TransactionModel\r\n : T extends EntityList.TRANSACTION_HISTORY\r\n ? TransactionHistoryModel\r\n : T extends EntityList.SPONSOR\r\n ? SponsorModel\r\n : T extends EntityList.SPONSOR_HISTORY\r\n ? SponsorHistoryModel\r\n : T extends EntityList.CONFIGURATION\r\n ? ConfigurationModel\r\n : never;\r\n\r\nexport type EntityListEntityModelMap = {\r\n [T in EntityList]: EntityModelType<T>[];\r\n};\r\n","import {\r\n ConfigurationModel,\r\n DonationHistoryModel,\r\n DonationModel,\r\n ExpenseHistoryModel,\r\n ExpenseModel,\r\n SponsorHistoryModel,\r\n SponsorModel,\r\n TransactionHistoryModel,\r\n TransactionModel,\r\n UserHistoryModel,\r\n UserModel,\r\n VendorHistoryModel,\r\n VendorModel,\r\n} from \"../models\";\r\nimport { EntityList } from \"./entity.utils\";\r\n\r\nexport const entityListEntityModelMap = {\r\n [EntityList.DONATION]: DonationModel.populateFromEntity,\r\n [EntityList.DONATION_HISTORY]: DonationHistoryModel.populateFromEntity,\r\n [EntityList.USER]: UserModel.populateFromEntity,\r\n [EntityList.USER_HISTORY]: UserHistoryModel.populateFromEntity,\r\n [EntityList.EXPENSE]: ExpenseModel.populateFromEntity,\r\n [EntityList.EXPENSE_HISTORY]: ExpenseHistoryModel.populateFromEntity,\r\n [EntityList.VENDOR]: VendorModel.populateFromEntity,\r\n [EntityList.VENDOR_HISTORY]: VendorHistoryModel.populateFromEntity,\r\n [EntityList.TRANSACTION]: TransactionModel.populateFromEntity,\r\n [EntityList.TRANSACTION_HISTORY]: TransactionHistoryModel.populateFromEntity,\r\n [EntityList.SPONSOR]: SponsorModel.populateFromEntity,\r\n [EntityList.SPONSOR_HISTORY]: SponsorHistoryModel.populateFromEntity,\r\n [EntityList.CONFIGURATION]: ConfigurationModel.populateFromEntity,\r\n};\r\n","export class HttpException extends Error {\r\n constructor(\r\n public readonly message: string,\r\n public readonly statusCode: number,\r\n public readonly key?: string,\r\n public readonly errors?: any,\r\n ) {\r\n super(message);\r\n this.name = this.constructor.name;\r\n if ((Error as any).captureStackTrace) {\r\n (Error as any).captureStackTrace(this, this.constructor);\r\n }\r\n }\r\n\r\n getResponse() {\r\n return {\r\n statusCode: this.statusCode,\r\n message: this.message,\r\n key: this.key,\r\n errors: this.errors,\r\n };\r\n }\r\n\r\n getStatus() {\r\n return this.statusCode;\r\n }\r\n}\r\n\r\nexport class BadRequestException extends HttpException {\r\n constructor(\r\n input: { key: string; message: string } | string | string[],\r\n errors?: any,\r\n ) {\r\n if (typeof input === \"object\" && !Array.isArray(input)) {\r\n super(input.message, 400, input.key, errors);\r\n } else {\r\n super(\r\n Array.isArray(input) ? input.join(\", \") : input,\r\n 400,\r\n undefined,\r\n errors,\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport class NotFoundException extends HttpException {\r\n constructor(input: { key: string; message: string } | string = \"Not Found\") {\r\n if (typeof input === \"object\") {\r\n super(input.message, 404, input.key);\r\n } else {\r\n super(input, 404);\r\n }\r\n }\r\n}\r\n\r\nexport class UnauthorizedException extends HttpException {\r\n constructor(\r\n input: { key: string; message: string } | string = \"Unauthorized\",\r\n ) {\r\n if (typeof input === \"object\") {\r\n super(input.message, 401, input.key);\r\n } else {\r\n super(input, 401);\r\n }\r\n }\r\n}\r\n\r\nexport class ForbiddenException extends HttpException {\r\n constructor(input: { key: string; message: string } | string = \"Forbidden\") {\r\n if (typeof input === \"object\") {\r\n super(input.message, 403, input.key);\r\n } else {\r\n super(input, 403);\r\n }\r\n }\r\n}\r\n","import { IAuditColumnEntity } from \"../helpers/audit-column.entity.interface\";\r\nimport { BadRequestException } from \"./error.utils\";\r\n\r\nexport function getObjectDiffingKeys<T extends Record<string, any>>(\r\n oldObject: T,\r\n newObject: T,\r\n): Partial<T> {\r\n const keysToExclude: (keyof IAuditColumnEntity)[] = [\r\n \"createdOn\",\r\n \"createdBy\",\r\n ];\r\n const keysOfOldObject = Object.keys(oldObject);\r\n const keysOfNewObject = Object.keys(newObject);\r\n\r\n if (keysOfOldObject.length !== keysOfNewObject.length) {\r\n throw new BadRequestException({\r\n key: \"objects\",\r\n message: `Different objects recieved for diffing. Please check & try again.`,\r\n });\r\n }\r\n\r\n const oldDiffingKeys = {} as T;\r\n const newDiffingKeys = {} as Partial<T>;\r\n\r\n for (const key of keysOfOldObject as Array<keyof T>) {\r\n if (keysToExclude.includes(key as keyof IAuditColumnEntity)) continue;\r\n\r\n const oldVal = oldObject[key];\r\n const newVal = newObject[key];\r\n\r\n if (JSON.stringify(oldVal) !== JSON.stringify(newVal)) {\r\n oldDiffingKeys[key] = oldVal;\r\n newDiffingKeys[key] = newVal;\r\n }\r\n }\r\n\r\n return newDiffingKeys;\r\n}\r\n\r\n/**\r\n * Compares two arrays and returns the difference between them.\r\n *\r\n * @template T - The type of elements in the arrays\r\n * @param {T[]} arr1 - The original array\r\n * @param {T[]} arr2 - The new array to compare against\r\n * @returns {{ present: T[], deleted: T[], added: T[] }} An object containing:\r\n * - `present` — items found in both arrays (intersection)\r\n * - `deleted` — items in `arr1` but not in `arr2`\r\n * - `added` — items in `arr2` but not in `arr1`\r\n *\r\n * @example\r\n * const arr1 = [1, 2, 3, 4];\r\n * const arr2 = [3, 4, 5, 6];\r\n *\r\n * diffArrays(arr1, arr2);\r\n * // {\r\n * // present: [3, 4],\r\n * // deleted: [1, 2],\r\n * // added: [5, 6]\r\n * // }\r\n */\r\nexport function diffArrays<T>(arr1: T[], arr2: T[]) {\r\n const set1 = new Set(arr1);\r\n const set2 = new Set(arr2);\r\n\r\n return {\r\n present: arr1.filter((item) => set2.has(item)),\r\n deleted: arr1.filter((item) => !set2.has(item)),\r\n added: arr2.filter((item) => !set1.has(item)),\r\n };\r\n}\r\n\r\n/**\r\n * Groups an array of objects by a specified key, returning a `Map` where each\r\n * unique value of the key becomes an entry containing all items that share that value.\r\n * Use this as a fallback if `Object.groupBy` (ES2024) is not available in your environment.\r\n *\r\n * @template T - The type of objects in the array\r\n * @param items - The array of objects to group\r\n * @param key - A key of `T` whose value will be used as the group identifier\r\n * @returns A `Map` where each key maps to an array of items belonging to that group\r\n *\r\n * @example\r\n * const grouped = groupBy(items, 'someKey');\r\n * grouped.get('keyValue1'); // [item1, item2]\r\n * grouped.get('keyValue2'); // [item3]\r\n */\r\nexport function groupBy<T>(items: T[], key: keyof T): Map<string, T[]> {\r\n const result = new Map<string, T[]>();\r\n for (const item of items) {\r\n const groupKey = String(item[key]);\r\n if (!result.has(groupKey)) {\r\n result.set(groupKey, []);\r\n }\r\n result.get(groupKey)!.push(item);\r\n }\r\n return result;\r\n}\r\n\r\nexport function definedValues<T>(arr: Array<T | undefined | null>): T[] {\r\n return arr.filter((value): value is T => value != null);\r\n}\r\n\r\n/**\r\n * Converts an epoch timestamp (milliseconds) into a human-readable date string.\r\n *\r\n * @param epoch - The epoch timestamp in milliseconds (number or numeric string)\r\n * @param format - Optional output format:\r\n * - `'short'` — locale-specific short date (e.g. \"25/12/2026\")\r\n * - `'long'` — locale-specific long date (e.g. \"25 December 2026\")\r\n * - `'short-dt'` — DD/MM/YY HH:MM (e.g. \"25/12/26 18:13\")\r\n * - `'iso'` — ISO 8601 string (default)\r\n * @returns The formatted date string, or '' if epoch is invalid\r\n *\r\n * @example\r\n * epochToReadableDate(1700000000000, 'long'); // \"14 November 2023\"\r\n * epochToReadableDate('1700000000000', 'short'); // \"14/11/2023\"\r\n * epochToReadableDate(1700000000000, 'short-dt'); // \"14/11/23 18:13\"\r\n * epochToReadableDate(1700000000000); // \"2023-11-14T18:13:20.000Z\"\r\n */\r\nexport function epochToReadableDate(\r\n epoch: number | string,\r\n format: 'short' | 'long' | 'short-dt' | 'iso' = 'iso',\r\n): string {\r\n const ms = typeof epoch === 'string' ? Number(epoch) : epoch;\r\n const date = new Date(ms);\r\n\r\n if (isNaN(date.getTime())) {\r\n console.warn(`epochToReadableDate: invalid epoch value received: ${epoch}`);\r\n return '';\r\n }\r\n\r\n switch (format) {\r\n case 'short':\r\n return date.toLocaleDateString('en-IN');\r\n case 'long':\r\n return date.toLocaleDateString('en-IN', {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n });\r\n case 'short-dt': {\r\n const istOffset = 5.5 * 60 * 60 * 1000;\r\n const d = new Date(date.getTime() + istOffset);\r\n const dd = String(d.getUTCDate()).padStart(2, '0');\r\n const mm = String(d.getUTCMonth() + 1).padStart(2, '0');\r\n const yy = String(d.getUTCFullYear()).slice(-2);\r\n const hh = String(d.getUTCHours()).padStart(2, '0');\r\n const min = String(d.getUTCMinutes()).padStart(2, '0');\r\n return `${dd}/${mm}/${yy} ${hh}:${min}`;\r\n }\r\n case 'iso':\r\n default:\r\n return date.toISOString();\r\n }\r\n}\r\n","import { EntityList, EntityType } from \".\";\r\n\r\nexport enum RelationType {\r\n ONE = \"ONE\",\r\n MANY = \"MANY\",\r\n}\r\n\r\nexport interface IMappingPropertyEntry {\r\n sourceProperty: string;\r\n targetProperty: string;\r\n}\r\n\r\nexport interface IModelRelationConfig<T extends EntityList> {\r\n relationType: RelationType;\r\n mappingProperties: IMappingPropertyEntry[];\r\n searchProperty: string;\r\n entity: EntityList;\r\n}\r\n","export enum OrderByDirection {\r\n ASC = \"ASC\",\r\n DESC = \"DESC\",\r\n}\r\n\r\n// export type IOrderByFilter<T> = {\r\n// column: keyof T;\r\n// direction: OrderByDirection;\r\n// };\r\n","import { BaseEntityModel } from \"../models\";\r\nimport { ISearchV2Response } from \"../types/generic.dto.types\";\r\nimport { BadRequestException, entityListEntityModelMap } from \"../utils\";\r\nimport {\r\n EntityList,\r\n EntityListEntityModelMap,\r\n EntityModelType,\r\n EntityType,\r\n} from \"../utils/entity.utils\";\r\n\r\n/**\r\n * Helper class for extracting typed entities from a `searchV2` response.\r\n *\r\n * @example new EntityFilterDataHelper(searchV2Response)\r\n *\r\n * @methods\r\n * - `getEntityFromList(name)` — returns typed entity array for the given `EntityList` key. e.g. `helper.getEntityFromList(EntityList.USER) // IUserEntity[]`\r\n */\r\nexport class EntityFilterDataHelper {\r\n entityModelsMap: EntityListEntityModelMap = {} as EntityListEntityModelMap;\r\n\r\n constructor(private readonly searchResponse: ISearchV2Response) {\r\n this.entityModelsMap = this.populateEntityModelsMap();\r\n }\r\n\r\n getEntityFromList<T extends EntityList>(name: T): EntityModelType<T>[] {\r\n return this.entityModelsMap[name] ?? [];\r\n }\r\n\r\n private populateEntityModelsMap(): EntityListEntityModelMap {\r\n const responseObj: EntityListEntityModelMap =\r\n {} as EntityListEntityModelMap;\r\n\r\n for (const key of Object.keys(this.searchResponse) as EntityList[]) {\r\n const populateFn = entityListEntityModelMap[key];\r\n if (!populateFn) continue;\r\n\r\n const raw = this.searchResponse[key];\r\n if (!Array.isArray(raw)) continue;\r\n\r\n // @ts-expect-error - conditional type EntityModelType<T> cannot be resolved in loop context\r\n (responseObj[key] as EntityModelType<typeof key>[]) = this.searchResponse[\r\n key\r\n ].map((entity) => {\r\n const model = (\r\n populateFn as (e: typeof entity) => EntityModelType<typeof key>\r\n )(entity);\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(),\r\n );\r\n return model;\r\n });\r\n }\r\n\r\n return responseObj;\r\n }\r\n\r\n getEntityModelsByFilter<T extends EntityList>(\r\n entityName: T,\r\n filter: { key: keyof EntityType<T> & string; value: any[] },\r\n ): EntityModelType<T>[] {\r\n const filteredModels = this.entityModelsMap[entityName].filter((model) =>\r\n filter.value.includes((model as any)[filter.key]),\r\n );\r\n\r\n if (filteredModels.length === 0) {\r\n throw new BadRequestException({\r\n key: `${filter.key}`,\r\n message: `${entityName} with values: ${filter.value.join(\", \")} not found. Please try with valid values.`,\r\n });\r\n }\r\n\r\n return filteredModels;\r\n }\r\n\r\n getEntityModelByFilter<T extends EntityList>(\r\n entityName: T,\r\n filter: { key: keyof EntityType<T> & string; value: any },\r\n ) {\r\n const filteredModel = this.entityModelsMap[entityName].filter(\r\n (model) => (model as any)[filter.key] === filter.value,\r\n );\r\n if (filteredModel.length === 0) {\r\n throw new BadRequestException({\r\n key: `${filter.key}`,\r\n message: `${entityName} with values: ${filter.value} not found. Please try with valid values.`,\r\n });\r\n }\r\n\r\n // console.log(\"filteredModel\", filteredModel);\r\n return filteredModel[0];\r\n }\r\n\r\n // populateRelationsFor(entityNames: EntityList[]): EntityListEntityModelMap {\r\n // for (const entityName of entityNames) {\r\n // const models = this.entityModelsMap[entityName];\r\n // if (!models) continue;\r\n // for (const model of models) {\r\n // (model as unknown as BaseEntityModel).populateRelations(\r\n // this.searchResponse,\r\n // );\r\n // }\r\n // }\r\n // return this.entityModelsMap;\r\n // }\r\n\r\n populateRelationsFor(entityNames: EntityList[]): EntityListEntityModelMap {\r\n for (const entityName of entityNames) {\r\n const models = this.entityModelsMap[entityName];\r\n if (!models) continue;\r\n for (const model of models) {\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(), // fresh set per top-level model\r\n );\r\n }\r\n }\r\n return this.entityModelsMap;\r\n }\r\n\r\n mergeEntity<T extends EntityList>(\r\n entityName: T,\r\n savedEntity: EntityType<T>,\r\n ): EntityModelType<T> {\r\n const populateFn = entityListEntityModelMap[entityName];\r\n const model = (populateFn as (e: EntityType<T>) => EntityModelType<T>)(\r\n savedEntity,\r\n );\r\n\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(),\r\n );\r\n\r\n return model;\r\n }\r\n}\r\n","import { IAuditColumnEntity } from \"../../helpers\";\r\nimport { IEntityFilterSearchData } from \"../../types\";\r\nimport { EntityList } from \"../../utils\";\r\n\r\nexport interface IUserEntity extends IAuditColumnEntity {\r\n id: number;\r\n name: string;\r\n password: string;\r\n email: string;\r\n phone: string;\r\n}\r\n\r\n/**\r\n * This is a common config for user entity\r\n * this will be used for createdBy & updatedBy\r\n * for the tables\r\n *\r\n * Adding column keys reduce the bandwidth that is used\r\n */\r\nexport const USER_RELATION_CONFIG: IEntityFilterSearchData<EntityList.USER> = {\r\n name: EntityList.USER,\r\n columnKeys: [\"id\", \"name\"],\r\n};\r\n"],"mappings":";AAAO,IAAM,gBAAmC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,oBAA8B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAC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","names":["ConfigurationKey","ConfigurationType","EntityHistoryOperation","EntityStatus","ExpenseType","PaymentType","SponsorTier","TransactionType","VendorType","EntityList","RelationType","OrderByDirection"]}
|
|
1
|
+
{"version":3,"sources":["../src/data/flats.ts","../src/enums/configuration-key.enum.ts","../src/enums/configuration-type.enum.ts","../src/enums/entity-history-operation.enum.ts","../src/enums/entity-status.enum.ts","../src/enums/expense-type.enum.ts","../src/enums/payment-type.enum.ts","../src/enums/reference-id-prefix.enum.ts","../src/enums/sponsor-tier.enum.ts","../src/enums/transaction-entity-type.enum.ts","../src/enums/transaction-type.enum.ts","../src/enums/vendor-type.enum.ts","../src/data/payment-options.ts","../src/utils/date-code.utils.ts","../src/utils/date.utils.ts","../src/models/base.entity.model.ts","../src/models/donation-history.entity.model.ts","../src/models/donation.entity.model.ts","../src/models/expense-history.entity.model.ts","../src/models/expense.entity.model.ts","../src/utils/numberToWords.ts","../src/models/flat.entity.model.ts","../src/models/sponsor-history.entity.model.ts","../src/models/sponsor.entity.model.ts","../src/models/transaction-history.entity.model.ts","../src/models/transaction.entity.model.ts","../src/models/user-history.entity.model.ts","../src/models/user.entity.model.ts","../src/models/vendor-history.entity.model.ts","../src/models/vendor.entity.model.ts","../src/models/configuration.entity.model.ts","../src/utils/entity.utils.ts","../src/utils/entitiy-list-entity-model-map.ts","../src/utils/error.utils.ts","../src/utils/helper.fns.ts","../src/utils/relation-config.utils.ts","../src/utils/sql-utils.ts","../src/helpers/entity-filter-data.helper.ts","../src/interfaces/entities/user.entity.interface.ts"],"sourcesContent":["export const SPECIAL_FLATS: readonly string[] = [\r\n 'Devotee',\r\n 'Ex-Member Devotee',\r\n 'Others',\r\n];\r\n\r\nconst FLAT_NUMBERS_DATA: string[] = [\r\n 'A-101',\r\n 'A-102',\r\n 'A-103',\r\n 'A-104',\r\n 'A-105',\r\n 'A-106',\r\n 'A-201',\r\n 'A-202',\r\n 'A-203',\r\n 'A-204',\r\n 'A-205',\r\n 'A-206',\r\n 'A-301',\r\n 'A-302',\r\n 'A-303',\r\n 'A-304',\r\n 'A-305',\r\n 'A-306',\r\n 'A-401',\r\n 'A-402',\r\n 'A-403',\r\n 'A-404',\r\n 'A-405',\r\n 'A-406',\r\n 'A-501',\r\n 'A-502',\r\n 'A-503',\r\n 'A-504',\r\n 'A-505',\r\n 'A-506',\r\n 'A-601',\r\n 'A-602',\r\n 'A-603',\r\n 'A-604',\r\n 'A-605',\r\n 'A-606',\r\n 'A-701',\r\n 'A-702',\r\n 'A-703',\r\n 'A-704',\r\n 'A-705',\r\n 'A-706',\r\n 'A-801',\r\n 'A-802',\r\n 'A-803',\r\n 'A-804',\r\n 'A-805',\r\n 'A-806',\r\n 'B-101',\r\n 'B-102',\r\n 'B-103',\r\n 'B-104',\r\n 'B-201',\r\n 'B-202',\r\n 'B-203',\r\n 'B-204',\r\n 'B-301',\r\n 'B-302',\r\n 'B-303',\r\n 'B-304',\r\n 'B-401',\r\n 'B-402',\r\n 'B-403',\r\n 'B-404',\r\n 'B-501',\r\n 'B-502',\r\n 'B-503',\r\n 'B-504',\r\n 'B-601',\r\n 'B-602',\r\n 'B-603',\r\n 'B-604',\r\n 'B-701',\r\n 'B-702',\r\n 'B-703',\r\n 'B-704',\r\n 'B-801',\r\n 'B-802',\r\n 'B-803',\r\n 'B-804',\r\n 'C-101',\r\n 'C-102',\r\n 'C-103',\r\n 'C-104',\r\n 'C-201',\r\n 'C-202',\r\n 'C-203',\r\n 'C-204',\r\n 'C-301',\r\n 'C-302',\r\n 'C-303',\r\n 'C-304',\r\n 'C-401',\r\n 'C-402',\r\n 'C-403',\r\n 'C-404',\r\n 'C-501',\r\n 'C-502',\r\n 'C-503',\r\n 'C-504',\r\n 'C-601',\r\n 'C-602',\r\n 'C-603',\r\n 'C-604',\r\n 'C-701',\r\n 'C-702',\r\n 'C-703',\r\n 'C-704',\r\n 'C-801',\r\n 'C-802',\r\n 'C-803',\r\n 'C-804',\r\n 'D-101',\r\n 'D-102',\r\n 'D-103',\r\n 'D-104',\r\n 'D-201',\r\n 'D-202',\r\n 'D-203',\r\n 'D-204',\r\n 'D-301',\r\n 'D-302',\r\n 'D-303',\r\n 'D-304',\r\n 'D-401',\r\n 'D-402',\r\n 'D-403',\r\n 'D-404',\r\n 'D-501',\r\n 'D-502',\r\n 'D-503',\r\n 'D-504',\r\n 'D-601',\r\n 'D-602',\r\n 'D-603',\r\n 'D-604',\r\n 'D-701',\r\n 'D-702',\r\n 'D-703',\r\n 'D-704',\r\n 'D-801',\r\n 'D-802',\r\n 'D-803',\r\n 'D-804',\r\n 'E-101A',\r\n 'E-101B',\r\n 'E-201',\r\n 'E-202',\r\n 'E-203',\r\n 'E-204',\r\n 'E-301',\r\n 'E-302',\r\n 'E-303',\r\n 'E-304',\r\n 'E-401',\r\n 'E-402',\r\n 'E-403',\r\n 'E-404',\r\n 'E-501',\r\n 'E-502',\r\n 'E-503',\r\n 'E-504',\r\n 'E-601',\r\n 'E-602',\r\n 'E-603',\r\n 'E-604',\r\n 'E-701',\r\n 'E-702',\r\n 'E-703',\r\n 'E-704',\r\n 'E-801',\r\n 'E-802',\r\n 'E-803',\r\n 'E-804',\r\n 'F-101',\r\n 'F-102',\r\n 'F-103',\r\n 'F-104',\r\n 'F-201',\r\n 'F-202',\r\n 'F-203',\r\n 'F-204',\r\n 'F-301',\r\n 'F-302',\r\n 'F-303',\r\n 'F-304',\r\n 'F-401',\r\n 'F-402',\r\n 'F-403',\r\n 'F-404',\r\n 'F-501',\r\n 'F-502',\r\n 'F-503',\r\n 'F-504',\r\n 'F-601',\r\n 'F-602',\r\n 'F-603',\r\n 'F-604',\r\n 'F-701',\r\n 'F-702',\r\n 'F-703',\r\n 'F-704',\r\n 'F-801',\r\n 'F-802',\r\n 'F-803',\r\n 'F-804',\r\n 'G-101',\r\n 'G-102',\r\n 'G-103',\r\n 'G-104',\r\n 'G-201',\r\n 'G-202',\r\n 'G-203',\r\n 'G-204',\r\n 'G-301',\r\n 'G-302',\r\n 'G-303',\r\n 'G-304',\r\n 'G-401',\r\n 'G-402',\r\n 'G-403',\r\n 'G-404',\r\n 'G-501',\r\n 'G-502',\r\n 'G-503',\r\n 'G-504',\r\n 'G-601',\r\n 'G-602',\r\n 'G-603',\r\n 'G-604',\r\n 'G-701',\r\n 'G-702',\r\n 'G-703',\r\n 'G-704',\r\n 'G-801',\r\n 'G-802',\r\n 'G-803',\r\n 'G-804',\r\n 'H-101',\r\n 'H-102',\r\n 'H-103',\r\n 'H-104',\r\n 'H-201',\r\n 'H-202',\r\n 'H-203',\r\n 'H-204',\r\n 'H-301',\r\n 'H-302',\r\n 'H-303',\r\n 'H-304',\r\n 'H-401',\r\n 'H-402',\r\n 'H-403',\r\n 'H-404',\r\n 'H-501',\r\n 'H-502',\r\n 'H-503',\r\n 'H-504',\r\n 'H-601',\r\n 'H-602',\r\n 'H-603',\r\n 'H-604',\r\n 'H-701',\r\n 'H-702',\r\n 'H-703',\r\n 'H-704',\r\n 'H-801',\r\n 'H-802',\r\n 'H-803',\r\n 'H-804',\r\n 'I-101',\r\n 'I-102',\r\n 'I-103',\r\n 'I-104',\r\n 'I-201',\r\n 'I-202',\r\n 'I-203',\r\n 'I-204',\r\n 'I-301',\r\n 'I-302',\r\n 'I-303',\r\n 'I-304',\r\n 'I-401',\r\n 'I-402',\r\n 'I-403',\r\n 'I-404',\r\n 'I-501',\r\n 'I-502',\r\n 'I-503',\r\n 'I-504',\r\n 'I-601',\r\n 'I-602',\r\n 'I-603',\r\n 'I-604',\r\n 'I-701',\r\n 'I-702',\r\n 'I-703',\r\n 'I-704',\r\n 'I-801',\r\n 'I-802',\r\n 'I-803',\r\n 'I-804',\r\n];\r\n\r\nexport const FLAT_NUMBERS: readonly string[] = FLAT_NUMBERS_DATA;\r\n\r\nexport const FLATS_BY_WING: ReadonlyMap<string, readonly string[]> = (() => {\r\n const map = new Map<string, string[]>();\r\n for (const flat of FLAT_NUMBERS_DATA) {\r\n const [wing, num] = flat.split('-');\r\n if (!map.has(wing)) {\r\n map.set(wing, []);\r\n }\r\n map.get(wing)!.push(num);\r\n }\r\n return map;\r\n})();\r\n\r\nexport const WINGS: readonly string[] = (() => {\r\n const wings: string[] = [];\r\n for (const flat of FLAT_NUMBERS_DATA) {\r\n const [wing] = flat.split('-');\r\n if (!wings.includes(wing)) {\r\n wings.push(wing);\r\n }\r\n }\r\n return wings;\r\n})();\r\n","export enum ConfigurationKey {\r\n OPENING_BALANCE = \"opening_balance\",\r\n EDIT_ALLOWANCE_PERIOD = \"edit_allowance_period\",\r\n PAGE_SIZE = \"page_size\",\r\n}\r\n","export enum ConfigurationType {\r\n NUMBER = 'number',\r\n STRING = 'string',\r\n CRONJOB_EXPRESSION = 'cronjob_expression',\r\n JSON = 'json',\r\n}\r\n","export enum EntityHistoryOperation {\r\n CREATE = 'CREATE',\r\n UPDATE = 'UPDATE',\r\n DELETE = 'DELETE',\r\n}\r\n","export enum EntityStatus {\r\n ACTIVE = 'Active',\r\n DELETED = 'Deleted',\r\n}\r\n","export enum ExpenseType {\r\n DECORATION = 'Decoration',\r\n LIGHTING = 'Lighting',\r\n SOUND = 'Sound',\r\n PRASAD = 'Prasad',\r\n SECURITY = 'Security',\r\n TRANSPORTATION = 'Transportation',\r\n PRINTING = 'Printing',\r\n MISCELLANEOUS = 'Miscellaneous',\r\n}\r\n","export enum PaymentType {\r\n CASH = 'Cash',\r\n UPI = 'UPI',\r\n BANK_TRANSFER = 'Bank Transfer',\r\n}\r\n","export const ReferenceIdPrefix = {\r\n DONATION: 'DON',\r\n EXPENSE: 'EXP',\r\n SPONSOR: 'SPO',\r\n DAAN_PETI: 'DPB',\r\n} as const;\r\n","export enum SponsorTier {\r\n GOLD_SPONSOR = 'Gold Sponsor',\r\n SILVER_SPONSOR = 'Silver Sponsor',\r\n BRONZE_SPONSOR = 'Bronze Sponsor',\r\n GENERAL_SPONSOR = 'General Sponsor',\r\n}\r\n","export enum TransactionEntityType {\n DONATION = 'donation',\n SPONSOR = 'sponsor',\n EXPENSE = 'expense',\n DAAN_PETI = 'daan_peti',\n}\n","export enum TransactionType {\r\n INCOME = 'Income',\r\n EXPENSE = 'Expense',\r\n}\r\n","export enum VendorType {\r\n SUPPLIER = 'Supplier',\r\n SERVICE_PROVIDER = 'Service Provider',\r\n CONTRACTOR = 'Contractor',\r\n OTHER = 'Other',\r\n}\r\n","import { PaymentType } from \"../enums\";\r\n\r\nexport const PAYMENT_OPTIONS: readonly { value: PaymentType; label: string }[] = [\r\n { value: PaymentType.CASH, label: \"Cash\" },\r\n { value: PaymentType.UPI, label: \"UPI\" },\r\n { value: PaymentType.BANK_TRANSFER, label: \"Bank Transfer\" },\r\n];\r\n","/**\r\n * Utility class for validating date codes in `YYYYMMDD` format.\r\n *\r\n * @example new DateCodeUtils(20240315)\r\n *\r\n * @methods\r\n * - `isValidYYYYMMDD()` — checks if the date code is a real calendar date. e.g. `new DateCodeUtils(20240315).isValidYYYYMMDD() // true`\r\n */\r\nexport class DateCodeUtils {\r\n stringifiedDateCode: string;\r\n constructor(private readonly dateCode: string | number) {\r\n this.stringifiedDateCode = String(this.dateCode);\r\n if (!this.isValidYYYYMMDD()) {\r\n throw new Error(\r\n `Invalid date code: \"${this.stringifiedDateCode}\". Expected format: YYYYMMDD.`,\r\n );\r\n }\r\n }\r\n\r\n isValidYYYYMMDD(): boolean {\r\n if (!/^\\d{8}$/.test(this.stringifiedDateCode)) return false;\r\n\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n if (month < 1 || month > 12) return false;\r\n if (day < 1 || day > 31) return false;\r\n\r\n const date = new Date(year, month - 1, day);\r\n return (\r\n date.getFullYear() === year &&\r\n date.getMonth() === month - 1 &&\r\n date.getDate() === day\r\n );\r\n }\r\n\r\n toLongDateString(): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n return new Date(year, month - 1, day).toLocaleDateString(\"en-US\", {\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n });\r\n }\r\n\r\n addMonths(months: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year, month - 1 + months, day);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n addDays(days: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year, month - 1, day);\r\n date.setDate(date.getDate() + days);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n addWeeks(weeks: number): string {\r\n return this.addDays(weeks * 7);\r\n }\r\n\r\n addYears(years: number): string {\r\n const { year, month, day } = this.parseDateParts();\r\n\r\n const date = new Date(year + years, month - 1, day);\r\n\r\n const newYear = date.getFullYear();\r\n const newMonth = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const newDay = String(date.getDate()).padStart(2, \"0\");\r\n\r\n return `${newYear}${newMonth}${newDay}`;\r\n }\r\n\r\n private parseDateParts(): { year: number; month: number; day: number } {\r\n return {\r\n year: parseInt(this.stringifiedDateCode.substring(0, 4), 10),\r\n month: parseInt(this.stringifiedDateCode.substring(4, 6), 10),\r\n day: parseInt(this.stringifiedDateCode.substring(6, 8), 10),\r\n };\r\n }\r\n\r\n static getCurrentYear(): number {\r\n return new Date().getFullYear();\r\n }\r\n\r\n static daysDiff(dateCode: string | number): number {\r\n const { year, month, day } = new DateCodeUtils(dateCode).parseDateParts();\r\n const target = new Date(year, month - 1, day);\r\n const today = new Date();\r\n today.setHours(0, 0, 0, 0);\r\n\r\n const diffMs = target.getTime() - today.getTime();\r\n return Math.round(diffMs / (1000 * 60 * 60 * 24));\r\n }\r\n\r\n static getCurrentDateCode(): string {\r\n const today = new Date();\r\n const year = today.getFullYear();\r\n const month = String(today.getMonth() + 1).padStart(2, \"0\");\r\n const day = String(today.getDate()).padStart(2, \"0\");\r\n return `${year}${month}${day}`;\r\n }\r\n}\r\n","// src/common/helpers/date.util.ts\r\nexport class DateUtil {\r\n // Current time as epoch milliseconds\r\n static now(): number {\r\n return Date.now();\r\n }\r\n\r\n // Date object → epoch milliseconds\r\n static toEpoch(date: Date): number {\r\n return date.getTime();\r\n }\r\n\r\n // Epoch milliseconds → Date object\r\n static toDate(epoch: number): Date {\r\n return new Date(epoch);\r\n }\r\n\r\n // Epoch milliseconds → readable string\r\n static toReadable(epoch: number): string {\r\n return new Date(epoch).toISOString();\r\n }\r\n\r\n // Add days to epoch → returns epoch\r\n static addDays(epoch: number, days: number): number {\r\n return epoch + days * 24 * 60 * 60 * 1000;\r\n }\r\n\r\n // Add months to epoch → returns epoch\r\n static addMonths(epoch: number, months: number): number {\r\n const date = new Date(epoch);\r\n date.setMonth(date.getMonth() + months);\r\n return date.getTime();\r\n }\r\n\r\n // Add weeks to epoch → returns epoch\r\n static addWeeks(epoch: number, weeks: number): number {\r\n return this.addDays(epoch, weeks * 7);\r\n }\r\n\r\n // Add years to epoch → returns epoch\r\n static addYears(epoch: number, years: number): number {\r\n const date = new Date(epoch);\r\n date.setFullYear(date.getFullYear() + years);\r\n return date.getTime();\r\n }\r\n\r\n // Difference in days between two epochs\r\n static daysDifference(epoch1: number, epoch2: number): number {\r\n return Math.ceil((epoch2 - epoch1) / (1000 * 60 * 60 * 24));\r\n }\r\n\r\n // Check if epoch is today\r\n static isToday(epoch: number): boolean {\r\n const date = new Date(epoch);\r\n const today = new Date();\r\n return (\r\n date.getDate() === today.getDate() &&\r\n date.getMonth() === today.getMonth() &&\r\n date.getFullYear() === today.getFullYear()\r\n );\r\n }\r\n\r\n // Check if epoch is in the past\r\n static isPast(epoch: number): boolean {\r\n return epoch < Date.now();\r\n }\r\n\r\n // Check if epoch is in the future\r\n static isFuture(epoch: number): boolean {\r\n return epoch > Date.now();\r\n }\r\n}\r\n\r\n","import { ISearchV2Response } from \"../types/generic.dto.types\";\r\nimport {\r\n entityListEntityModelMap,\r\n IModelRelationConfig,\r\n RelationType,\r\n} from \"../utils\";\r\nimport { EntityList, EntityType } from \"../utils/entity.utils\";\r\n\r\nexport abstract class BaseEntityModel {\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {};\r\n\r\n // populateRelations(searchResponse: ISearchV2Response): this {\r\n // const relations = (this.constructor as typeof BaseEntityModel).relations;\r\n // for (const [prop, config] of Object.entries(relations)) {\r\n // const { relationType, mappingProperty, searchProperty, entity } = config!;\r\n // // @ts-ignore\r\n // const fkValue = this[mappingProperty];\r\n // const bucket = searchResponse[entity] ?? [];\r\n // if (!bucket.length) continue;\r\n\r\n // if (relationType === RelationType.ONE) {\r\n // // @ts-ignore\r\n // const match = bucket.find((e) => e[searchProperty] === fkValue);\r\n // if (match) {\r\n // const hydrated = (\r\n // entityListEntityModelMap[entity] as (\r\n // e: EntityType<EntityList>,\r\n // ) => any\r\n // )(match);\r\n // // recursively populate relations on the hydrated model\r\n // hydrated.populateRelations(searchResponse);\r\n // this[prop as keyof this] = hydrated;\r\n // }\r\n // } else {\r\n // const matches = bucket.filter(\r\n // (e: any) => e[searchProperty] === fkValue,\r\n // );\r\n // this[prop as keyof this] = matches.map((e: EntityType<EntityList>) => {\r\n // const hydrated = (\r\n // entityListEntityModelMap[entity] as (\r\n // e: EntityType<EntityList>,\r\n // ) => any\r\n // )(e);\r\n // // recursively populate relations on each hydrated model\r\n // hydrated.populateRelations(searchResponse);\r\n // return hydrated;\r\n // }) as this[keyof this];\r\n // }\r\n // }\r\n // return this;\r\n // }\r\n\r\n populateRelations(\r\n searchResponse: ISearchV2Response,\r\n visited = new Set<string>(),\r\n ): this {\r\n const selfKey = `${this.constructor.name}:${(this as any).id}`;\r\n if (visited.has(selfKey)) return this;\r\n visited.add(selfKey);\r\n\r\n const relations = (this.constructor as typeof BaseEntityModel).relations;\r\n for (const [, config] of Object.entries(relations)) {\r\n const { relationType, mappingProperties, searchProperty, entity } = config!;\r\n const bucket = searchResponse[entity] ?? [];\r\n if (!bucket.length) continue;\r\n\r\n const hydrateEntity = (raw: EntityType<EntityList>) => {\r\n const hydrated = (\r\n entityListEntityModelMap[entity] as (\r\n e: EntityType<EntityList>,\r\n ) => any\r\n )(raw);\r\n hydrated.populateRelations(searchResponse, visited);\r\n return hydrated;\r\n };\r\n\r\n if (relationType === RelationType.ONE) {\r\n for (const { sourceProperty, targetProperty } of mappingProperties) {\r\n // @ts-ignore\r\n const fkValue = this[sourceProperty];\r\n if (fkValue == null) continue;\r\n const match = bucket.find(\r\n (e: any) => e[searchProperty] === fkValue,\r\n );\r\n if (match) {\r\n (this as any)[targetProperty] = hydrateEntity(match);\r\n }\r\n }\r\n } else {\r\n const fkValues = mappingProperties\r\n .map((mp) => (this as any)[mp.sourceProperty])\r\n .filter((v: any) => v != null);\r\n const matches = bucket.filter((e: any) =>\r\n fkValues.includes(e[searchProperty]),\r\n );\r\n const targetProperty = mappingProperties[0]?.targetProperty;\r\n if (targetProperty && matches.length) {\r\n (this as any)[targetProperty] = matches.map(hydrateEntity);\r\n }\r\n }\r\n }\r\n return this;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IDonationHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class DonationHistoryModel\n extends BaseEntityModel\n implements IDonationHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.DONATION_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IDonationHistoryEntity,\n ): DonationHistoryModel {\n return Object.assign(new DonationHistoryModel(), entity);\n }\n}\n","import { EntityStatus, PaymentType } from \"../enums\";\r\nimport { IDonationEntity } from \"../interfaces\";\r\nimport {\r\n EntityList,\r\n IModelRelationConfig,\r\n RelationType,\r\n} from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\n\r\nexport class DonationModel extends BaseEntityModel implements IDonationEntity {\r\n id: number = 0;\r\n receiptNumber: string = \"\";\r\n flatNo: string = \"\";\r\n amount: number = 0;\r\n mobileNumber?: string;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n donationYear: number = new Date().getFullYear();\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: IDonationEntity): DonationModel {\r\n return Object.assign(new DonationModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n\r\n static getReceiptPrefix(flatNo: string): string {\r\n const year = new Date().getFullYear();\r\n if (flatNo === 'Devotee') return `MPCR-${year}-OD`;\r\n if (flatNo === 'Ex-Member Devotee') return `MPCR-${year}-EMD`;\r\n if (flatNo === 'Others') return `MPCR-${year}-OTH`;\r\n return `MPCR-${year}-${flatNo}`;\r\n }\r\n\r\n static generateReceiptNumber(flatNo: string, existingDonations: DonationModel[]): string {\r\n const count = existingDonations.filter(d => d.flatNo === flatNo).length + 1;\r\n const seq = String(count).padStart(2, '0');\r\n return `${DonationModel.getReceiptPrefix(flatNo)}-${seq}`;\r\n }\r\n\r\n static toWhatsAppNumber(mobile: string): string {\r\n const digits = mobile.replace(/\\D/g, '');\r\n if (digits.length === 0) return '';\r\n if (digits.length === 10) return `91${digits}`;\r\n return digits;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IExpenseHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class ExpenseHistoryModel\n extends BaseEntityModel\n implements IExpenseHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.EXPENSE_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IExpenseHistoryEntity,\n ): ExpenseHistoryModel {\n return Object.assign(new ExpenseHistoryModel(), entity);\n }\n}\n","import { EntityStatus, ExpenseType, PaymentType } from \"../enums\";\r\nimport { IExpenseEntity } from \"../interfaces\";\r\nimport { EntityList, IModelRelationConfig, RelationType } from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\nimport { VendorModel } from \"./vendor.entity.model\";\r\n\r\nexport class ExpenseModel extends BaseEntityModel implements IExpenseEntity {\r\n id: number = 0;\r\n name: string = \"\";\r\n type: ExpenseType = ExpenseType.MISCELLANEOUS;\r\n vendorId: number = 0;\r\n incurredBy: number = 0;\r\n amount: number = 0;\r\n billNumber?: string;\r\n remarks?: string;\r\n description?: string;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n incurredByUser?: UserModel;\r\n vendor?: VendorModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n { sourceProperty: \"incurredBy\", targetProperty: \"incurredByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n [EntityList.VENDOR]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"vendorId\", targetProperty: \"vendor\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.VENDOR,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: IExpenseEntity): ExpenseModel {\r\n return Object.assign(new ExpenseModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n\r\n get incurredByUserName() {\r\n return this.incurredByUser?.name;\r\n }\r\n\r\n get vendorName() {\r\n return this.vendor?.name ?? \"\";\r\n }\r\n}\r\n","export function convertNumberToWords(num: number): string {\r\n if (num === 0) return \"Zero Rupees Only\";\r\n\r\n const singleDigits = [\r\n \"\",\r\n \"One\",\r\n \"Two\",\r\n \"Three\",\r\n \"Four\",\r\n \"Five\",\r\n \"Six\",\r\n \"Seven\",\r\n \"Eight\",\r\n \"Nine\",\r\n ];\r\n const teenDigits = [\r\n \"Ten\",\r\n \"Eleven\",\r\n \"Twelve\",\r\n \"Thirteen\",\r\n \"Fourteen\",\r\n \"Fifteen\",\r\n \"Sixteen\",\r\n \"Seventeen\",\r\n \"Eighteen\",\r\n \"Nineteen\",\r\n ];\r\n const doubleDigits = [\r\n \"\",\r\n \"Ten\",\r\n \"Twenty\",\r\n \"Thirty\",\r\n \"Forty\",\r\n \"Fifty\",\r\n \"Sixty\",\r\n \"Seventy\",\r\n \"Eighty\",\r\n \"Ninety\",\r\n ];\r\n\r\n function convertGroup(val: number): string {\r\n let out = \"\";\r\n if (val >= 100) {\r\n out += singleDigits[Math.floor(val / 100)] + \" Hundred \";\r\n val %= 100;\r\n }\r\n if (val >= 10 && val < 20) {\r\n out += teenDigits[val - 10] + \" \";\r\n } else if (val >= 20) {\r\n out += doubleDigits[Math.floor(val / 10)] + \" \";\r\n val %= 10;\r\n if (val > 0) {\r\n out += singleDigits[val] + \" \";\r\n }\r\n } else if (val > 0) {\r\n out += singleDigits[val] + \" \";\r\n }\r\n return out.trim();\r\n }\r\n\r\n let temp = Math.floor(num);\r\n let words = \"\";\r\n\r\n if (temp >= 10000000) {\r\n const croresValue = Math.floor(temp / 10000000);\r\n words += convertGroup(croresValue) + \" Crore \";\r\n temp %= 10000000;\r\n }\r\n\r\n if (temp >= 100000) {\r\n const lakhsValue = Math.floor(temp / 100000);\r\n words += convertGroup(lakhsValue) + \" Lakh \";\r\n temp %= 100000;\r\n }\r\n\r\n if (temp >= 1000) {\r\n const thousandsValue = Math.floor(temp / 1000);\r\n words += convertGroup(thousandsValue) + \" Thousand \";\r\n temp %= 1000;\r\n }\r\n\r\n if (temp > 0) {\r\n words += convertGroup(temp);\r\n }\r\n\r\n return words.trim() + \" Rupees Only\";\r\n}\r\n","import {\r\n FLATS_BY_WING,\r\n FLAT_NUMBERS,\r\n SPECIAL_FLATS,\r\n WINGS,\r\n} from \"../data/flats\";\r\nimport { convertNumberToWords } from \"../utils/numberToWords\";\r\n\r\nexport interface FlatDonationLike {\r\n flatNo: string;\r\n amount: number;\r\n donationYear?: number;\r\n createdOn?: number;\r\n createdByUser?: { name?: string } | null;\r\n updatedByUser?: { name?: string } | null;\r\n}\r\n\r\nexport type FlatCollectionStatus = \"Paid\" | \"Pending\";\r\n\r\nexport interface FlatCollectionEntry {\r\n flatNumber: string;\r\n status: FlatCollectionStatus;\r\n amount: number;\r\n latestDonation?: FlatDonationLike | null;\r\n}\r\n\r\nexport interface FlatParseResult {\r\n wing?: string;\r\n num?: string;\r\n isSpecial: boolean;\r\n}\r\n\r\nexport interface FlatOption {\r\n label: string;\r\n value: string;\r\n}\r\n\r\nexport class FlatModel {\r\n static readonly FLAT_NUMBERS: readonly string[] = FLAT_NUMBERS;\r\n static readonly FLATS_BY_WING: ReadonlyMap<string, readonly string[]> =\r\n FLATS_BY_WING;\r\n static readonly SPECIAL_FLATS: readonly string[] = SPECIAL_FLATS;\r\n static readonly WINGS: readonly string[] = WINGS;\r\n\r\n static getDonationYear(): number {\r\n return new Date().getFullYear();\r\n }\r\n\r\n static buildFlatNumber(wing: string, num: string): string {\r\n return `${wing}-${num}`;\r\n }\r\n\r\n static isSpecialFlat(flatNo: string): boolean {\r\n return FlatModel.SPECIAL_FLATS.includes(flatNo);\r\n }\r\n\r\n static parseFlatNumber(flatNo: string): FlatParseResult {\r\n if (FlatModel.isSpecialFlat(flatNo)) {\r\n return { isSpecial: true };\r\n }\r\n const match = /^([A-Za-z])-([0-9]{1,3}[A-Za-z]?)$/.exec(flatNo);\r\n if (match) {\r\n return { wing: match[1], num: match[2], isSpecial: false };\r\n }\r\n return { isSpecial: false };\r\n }\r\n\r\n static getFlatOptions(wing: string): FlatOption[] {\r\n const wingFlats = FlatModel.FLATS_BY_WING.get(wing) ?? [];\r\n const all = [...wingFlats, ...FlatModel.SPECIAL_FLATS];\r\n return all.map((f) => ({\r\n label: FlatModel.isSpecialFlat(f) ? f : `${wing}-${f}`,\r\n value: f,\r\n }));\r\n }\r\n\r\n static getDisplayLabel(wing: string, flatNo: string): string {\r\n if (!flatNo) return \"\";\r\n if (FlatModel.isSpecialFlat(flatNo)) return flatNo;\r\n return `${wing}-${flatNo}`;\r\n }\r\n\r\n static computeCollectionStatus(\r\n donations: FlatDonationLike[],\r\n year: number,\r\n ): FlatCollectionEntry[] {\r\n return FlatModel.FLAT_NUMBERS.map((flatNumber) => {\r\n const flatDonations = donations.filter(\r\n (d) => d.donationYear === year && d.flatNo === flatNumber,\r\n );\r\n const amount = flatDonations.reduce((sum, d) => sum + d.amount, 0);\r\n const status: FlatCollectionStatus = amount > 0 ? \"Paid\" : \"Pending\";\r\n const latestDonation = flatDonations.length\r\n ? flatDonations.reduce((latest, d) =>\r\n (d.createdOn ?? 0) > (latest.createdOn ?? 0) ? d : latest,\r\n )\r\n : null;\r\n return { flatNumber, status, amount, latestDonation };\r\n });\r\n }\r\n\r\n static compareFlatNumbers(a: string, b: string): number {\r\n const isA = FlatModel.isSpecialFlat(a);\r\n const isB = FlatModel.isSpecialFlat(b);\r\n if (isA || isB) {\r\n if (isA && isB) {\r\n return (\r\n FlatModel.SPECIAL_FLATS.indexOf(a) -\r\n FlatModel.SPECIAL_FLATS.indexOf(b)\r\n );\r\n }\r\n return isA ? 1 : -1;\r\n }\r\n\r\n const pa = FlatModel.parseFlatNumber(a);\r\n const pb = FlatModel.parseFlatNumber(b);\r\n if (!pa.wing || !pa.num || !pb.wing || !pb.num) {\r\n return a < b ? -1 : a > b ? 1 : 0;\r\n }\r\n if (pa.wing !== pb.wing) {\r\n return pa.wing < pb.wing ? -1 : 1;\r\n }\r\n\r\n const numericA = Number(pa.num.replace(/[^0-9]/g, \"\"));\r\n const numericB = Number(pb.num.replace(/[^0-9]/g, \"\"));\r\n const floorA = Math.floor(numericA / 100);\r\n const floorB = Math.floor(numericB / 100);\r\n if (floorA !== floorB) return floorA - floorB;\r\n\r\n const unitA = numericA % 100;\r\n const unitB = numericB % 100;\r\n if (unitA !== unitB) return unitA - unitB;\r\n\r\n const suffixA = pa.num.replace(/\\d/g, \"\");\r\n const suffixB = pb.num.replace(/\\d/g, \"\");\r\n if (suffixA !== suffixB) return suffixA < suffixB ? -1 : 1;\r\n return 0;\r\n }\r\n\r\n static convertNumberToWords(num: number): string {\r\n return convertNumberToWords(num);\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { ISponsorHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class SponsorHistoryModel\n extends BaseEntityModel\n implements ISponsorHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.SPONSOR_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: ISponsorHistoryEntity,\n ): SponsorHistoryModel {\n return Object.assign(new SponsorHistoryModel(), entity);\n }\n}\n","import { EntityStatus, PaymentType } from \"../enums\";\r\nimport { ISponsorEntity } from \"../interfaces\";\r\nimport { EntityList, IModelRelationConfig, RelationType } from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\n\r\nexport class SponsorModel extends BaseEntityModel implements ISponsorEntity {\r\n id: number = 0;\r\n sponsorName: string = \"\";\r\n contactName: string = \"\";\r\n contactNo: string = \"\";\r\n sponsorFor: string = \"\";\r\n size: string = \"\";\r\n amount: number = 0;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: ISponsorEntity): SponsorModel {\r\n return Object.assign(new SponsorModel(), entity, {\r\n amount: Number(entity.amount),\r\n });\r\n }\r\n\r\n get receiptNumber(): string {\r\n return `MPCR-SPR-${this.id}`;\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { ITransactionHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class TransactionHistoryModel\n extends BaseEntityModel\n implements ITransactionHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.TRANSACTION_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: ITransactionHistoryEntity,\n ): TransactionHistoryModel {\n return Object.assign(new TransactionHistoryModel(), entity);\n }\n}\n","import { ICashBookEntry, ITransactionEntity } from \"../interfaces\";\r\nimport { EntityStatus, PaymentType, TransactionEntityType, TransactionType } from \"../enums\";\r\nimport { EntityList, IModelRelationConfig, RelationType } from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\n\r\nexport class TransactionModel\r\n extends BaseEntityModel\r\n implements ITransactionEntity\r\n{\r\n id: number = 0;\r\n date: string = \"\";\r\n type: TransactionType = TransactionType.INCOME;\r\n particulars: string = \"\";\r\n amount: number = 0;\r\n balanceAfter: number = 0;\r\n referenceId: number | null = null;\r\n entityType: TransactionEntityType | null = null;\r\n paymentType: PaymentType = PaymentType.CASH;\r\n status: EntityStatus = EntityStatus.ACTIVE;\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: ITransactionEntity): TransactionModel {\r\n return Object.assign(new TransactionModel(), entity, {\r\n amount: Number(entity.amount),\r\n balanceAfter: Number(entity.balanceAfter),\r\n referenceId: entity.referenceId != null ? Number(entity.referenceId) : null,\r\n });\r\n }\r\n\r\n static toReferenceId(\r\n entityType: TransactionEntityType | null | undefined,\r\n referenceId: number | null | undefined,\r\n ): string {\r\n if (entityType == null) {\r\n return referenceId != null ? String(referenceId) : \"\";\r\n }\r\n return referenceId != null ? `${entityType}-${referenceId}` : entityType;\r\n }\r\n\r\n static toCashBookEntry(tx: TransactionModel): ICashBookEntry {\r\n const isExpense = tx.type === TransactionType.EXPENSE;\r\n return {\r\n date: tx.date,\r\n particulars: tx.particulars,\r\n receipt: isExpense ? 0 : tx.amount,\r\n payment: isExpense ? tx.amount : 0,\r\n balance: tx.balanceAfter,\r\n referenceId: TransactionModel.toReferenceId(tx.entityType, tx.referenceId),\r\n };\r\n }\r\n\r\n static toCashBook(txns: TransactionModel[]): ICashBookEntry[] {\r\n return txns.map(TransactionModel.toCashBookEntry);\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IUserHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class UserHistoryModel\n extends BaseEntityModel\n implements IUserHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.USER_HISTORY>>\n > = {};\n\n static populateFromEntity(entity: IUserHistoryEntity): UserHistoryModel {\n return Object.assign(new UserHistoryModel(), entity);\n }\n}\n","import { IUserEntity } from \"../interfaces\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class UserModel extends BaseEntityModel implements IUserEntity {\r\n id: number = 0;\r\n name: string = \"\";\r\n password: string = \"\";\r\n email: string = \"\";\r\n phone: string = \"\";\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n private static _superAdminEmail: string = \"\";\r\n\r\n static setSuperAdminEmail(email: string) {\r\n this._superAdminEmail = email;\r\n }\r\n\r\n static mandalAccountUser() {\r\n return { id: 0, name: \"Mandal Account\" } as UserModel;\r\n }\r\n\r\n static isSuperAdmin(email: string): boolean {\r\n return email === this._superAdminEmail;\r\n }\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: IUserEntity): UserModel {\r\n return Object.assign(new UserModel(), entity);\r\n }\r\n}\r\n","import { EntityHistoryOperation } from \"../enums\";\nimport { IVendorHistoryEntity } from \"../interfaces\";\nimport { EntityList, IModelRelationConfig } from \"../utils\";\nimport { BaseEntityModel } from \"./base.entity.model\";\n\nexport class VendorHistoryModel\n extends BaseEntityModel\n implements IVendorHistoryEntity\n{\n id: number = 0;\n entityId: number = 0;\n data: string = \"\";\n operation: EntityHistoryOperation = EntityHistoryOperation.CREATE;\n\n createdOn: number = 0;\n updatedOn: number = 0;\n createdBy: number = 0;\n updatedBy: number = 0;\n\n protected constructor() {\n super();\n }\n\n static relations: Partial<\n Record<EntityList, IModelRelationConfig<EntityList.VENDOR_HISTORY>>\n > = {};\n\n static populateFromEntity(\n entity: IVendorHistoryEntity,\n ): VendorHistoryModel {\n return Object.assign(new VendorHistoryModel(), entity);\n }\n}\n","import { IVendorEntity } from \"../interfaces\";\r\nimport { EntityList, IModelRelationConfig, RelationType } from \"../utils\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\nimport { UserModel } from \"./user.entity.model\";\r\n\r\nexport class VendorModel extends BaseEntityModel implements IVendorEntity {\r\n id: number = 0;\r\n name: string = \"\";\r\n type: string = \"\";\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n createdByUser?: UserModel;\r\n updatedByUser?: UserModel;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static relations: Partial<\r\n Record<EntityList, IModelRelationConfig<EntityList>>\r\n > = {\r\n [EntityList.USER]: {\r\n relationType: RelationType.ONE,\r\n mappingProperties: [\r\n { sourceProperty: \"createdBy\", targetProperty: \"createdByUser\" },\r\n { sourceProperty: \"updatedBy\", targetProperty: \"updatedByUser\" },\r\n ],\r\n searchProperty: \"id\",\r\n entity: EntityList.USER,\r\n },\r\n };\r\n\r\n static populateFromEntity(entity: IVendorEntity): VendorModel {\r\n return Object.assign(new VendorModel(), entity);\r\n }\r\n}\r\n","import { ConfigurationType } from \"../enums\";\r\nimport { IConfigurationEntity } from \"../interfaces\";\r\nimport { BaseEntityModel } from \"./base.entity.model\";\r\n\r\nexport class ConfigurationModel\r\n extends BaseEntityModel\r\n implements IConfigurationEntity\r\n{\r\n id: number = 0;\r\n key: string = \"\";\r\n value: string = \"\";\r\n type: ConfigurationType = ConfigurationType.STRING;\r\n label: string = \"\";\r\n\r\n createdOn: number = 0;\r\n updatedOn: number = 0;\r\n createdBy: number = 0;\r\n updatedBy: number = 0;\r\n\r\n protected constructor() {\r\n super();\r\n }\r\n\r\n static populateFromEntity(entity: IConfigurationEntity): ConfigurationModel {\r\n return Object.assign(new ConfigurationModel(), entity);\r\n }\r\n\r\n static fallBackPageSize() {\r\n return this.defaultFallBackPageSize();\r\n }\r\n\r\n static defaultFallBackPageSize() {\r\n return 50;\r\n }\r\n}\r\n","import { IConfigurationEntity } from \"../interfaces/entities/configuration.entity.interface\";\r\nimport { IDonationHistoryEntity } from \"../interfaces/entities/donation-history.entity.interface\";\r\nimport { IDonationEntity } from \"../interfaces/entities/donation.entity.interface\";\r\nimport { IExpenseHistoryEntity } from \"../interfaces/entities/expense-history.entity.interface\";\r\nimport { IExpenseEntity } from \"../interfaces/entities/expense.entity.interface\";\r\nimport { ISponsorHistoryEntity } from \"../interfaces/entities/sponsor-history.entity.interface\";\r\nimport { ISponsorEntity } from \"../interfaces/entities/sponsor.entity.interface\";\r\nimport { ITransactionHistoryEntity } from \"../interfaces/entities/transaction-history.entity.interface\";\r\nimport { ITransactionEntity } from \"../interfaces/entities/transaction.entity.interface\";\r\nimport { IUserHistoryEntity } from \"../interfaces/entities/user-history.entity.interface\";\r\nimport { IUserEntity } from \"../interfaces/entities/user.entity.interface\";\r\nimport { IVendorHistoryEntity } from \"../interfaces/entities/vendor-history.entity.interface\";\r\nimport { IVendorEntity } from \"../interfaces/entities/vendor.entity.interface\";\r\nimport { ConfigurationModel } from \"../models/configuration.entity.model\";\r\nimport { DonationHistoryModel } from \"../models/donation-history.entity.model\";\r\nimport { DonationModel } from \"../models/donation.entity.model\";\r\nimport { ExpenseHistoryModel } from \"../models/expense-history.entity.model\";\r\nimport { ExpenseModel } from \"../models/expense.entity.model\";\r\nimport { SponsorHistoryModel } from \"../models/sponsor-history.entity.model\";\r\nimport { SponsorModel } from \"../models/sponsor.entity.model\";\r\nimport { TransactionHistoryModel } from \"../models/transaction-history.entity.model\";\r\nimport { TransactionModel } from \"../models/transaction.entity.model\";\r\nimport { UserHistoryModel } from \"../models/user-history.entity.model\";\r\nimport { UserModel } from \"../models/user.entity.model\";\r\nimport { VendorHistoryModel } from \"../models/vendor-history.entity.model\";\r\nimport { VendorModel } from \"../models/vendor.entity.model\";\r\n\r\nexport enum EntityList {\r\n DONATION = \"donation\",\r\n DONATION_HISTORY = \"donation_history\",\r\n USER = \"user\",\r\n USER_HISTORY = \"user_history\",\r\n EXPENSE = \"expense\",\r\n EXPENSE_HISTORY = \"expense_history\",\r\n VENDOR = \"vendor\",\r\n VENDOR_HISTORY = \"vendor_history\",\r\n TRANSACTION = \"transaction\",\r\n TRANSACTION_HISTORY = \"transaction_history\",\r\n SPONSOR = \"sponsor\",\r\n SPONSOR_HISTORY = \"sponsor_history\",\r\n CONFIGURATION = \"configuration\",\r\n}\r\n\r\nexport type EntityType<T extends EntityList> = T extends EntityList.DONATION\r\n ? IDonationEntity\r\n : T extends EntityList.DONATION_HISTORY\r\n ? IDonationHistoryEntity\r\n : T extends EntityList.USER\r\n ? IUserEntity\r\n : T extends EntityList.USER_HISTORY\r\n ? IUserHistoryEntity\r\n : T extends EntityList.EXPENSE\r\n ? IExpenseEntity\r\n : T extends EntityList.EXPENSE_HISTORY\r\n ? IExpenseHistoryEntity\r\n : T extends EntityList.VENDOR\r\n ? IVendorEntity\r\n : T extends EntityList.VENDOR_HISTORY\r\n ? IVendorHistoryEntity\r\n : T extends EntityList.TRANSACTION\r\n ? ITransactionEntity\r\n : T extends EntityList.TRANSACTION_HISTORY\r\n ? ITransactionHistoryEntity\r\n : T extends EntityList.SPONSOR\r\n ? ISponsorEntity\r\n : T extends EntityList.SPONSOR_HISTORY\r\n ? ISponsorHistoryEntity\r\n : T extends EntityList.CONFIGURATION\r\n ? IConfigurationEntity\r\n : never;\r\n\r\nexport type EntityModelType<T extends EntityList> =\r\n T extends EntityList.DONATION\r\n ? DonationModel\r\n : T extends EntityList.DONATION_HISTORY\r\n ? DonationHistoryModel\r\n : T extends EntityList.USER\r\n ? UserModel\r\n : T extends EntityList.USER_HISTORY\r\n ? UserHistoryModel\r\n : T extends EntityList.EXPENSE\r\n ? ExpenseModel\r\n : T extends EntityList.EXPENSE_HISTORY\r\n ? ExpenseHistoryModel\r\n : T extends EntityList.VENDOR\r\n ? VendorModel\r\n : T extends EntityList.VENDOR_HISTORY\r\n ? VendorHistoryModel\r\n : T extends EntityList.TRANSACTION\r\n ? TransactionModel\r\n : T extends EntityList.TRANSACTION_HISTORY\r\n ? TransactionHistoryModel\r\n : T extends EntityList.SPONSOR\r\n ? SponsorModel\r\n : T extends EntityList.SPONSOR_HISTORY\r\n ? SponsorHistoryModel\r\n : T extends EntityList.CONFIGURATION\r\n ? ConfigurationModel\r\n : never;\r\n\r\nexport type EntityListEntityModelMap = {\r\n [T in EntityList]: EntityModelType<T>[];\r\n};\r\n","import {\r\n ConfigurationModel,\r\n DonationHistoryModel,\r\n DonationModel,\r\n ExpenseHistoryModel,\r\n ExpenseModel,\r\n SponsorHistoryModel,\r\n SponsorModel,\r\n TransactionHistoryModel,\r\n TransactionModel,\r\n UserHistoryModel,\r\n UserModel,\r\n VendorHistoryModel,\r\n VendorModel,\r\n} from \"../models\";\r\nimport { EntityList } from \"./entity.utils\";\r\n\r\nexport const entityListEntityModelMap = {\r\n [EntityList.DONATION]: DonationModel.populateFromEntity,\r\n [EntityList.DONATION_HISTORY]: DonationHistoryModel.populateFromEntity,\r\n [EntityList.USER]: UserModel.populateFromEntity,\r\n [EntityList.USER_HISTORY]: UserHistoryModel.populateFromEntity,\r\n [EntityList.EXPENSE]: ExpenseModel.populateFromEntity,\r\n [EntityList.EXPENSE_HISTORY]: ExpenseHistoryModel.populateFromEntity,\r\n [EntityList.VENDOR]: VendorModel.populateFromEntity,\r\n [EntityList.VENDOR_HISTORY]: VendorHistoryModel.populateFromEntity,\r\n [EntityList.TRANSACTION]: TransactionModel.populateFromEntity,\r\n [EntityList.TRANSACTION_HISTORY]: TransactionHistoryModel.populateFromEntity,\r\n [EntityList.SPONSOR]: SponsorModel.populateFromEntity,\r\n [EntityList.SPONSOR_HISTORY]: SponsorHistoryModel.populateFromEntity,\r\n [EntityList.CONFIGURATION]: ConfigurationModel.populateFromEntity,\r\n};\r\n","export class HttpException extends Error {\r\n constructor(\r\n public readonly message: string,\r\n public readonly statusCode: number,\r\n public readonly key?: string,\r\n public readonly errors?: any,\r\n ) {\r\n super(message);\r\n this.name = this.constructor.name;\r\n if ((Error as any).captureStackTrace) {\r\n (Error as any).captureStackTrace(this, this.constructor);\r\n }\r\n }\r\n\r\n getResponse() {\r\n return {\r\n statusCode: this.statusCode,\r\n message: this.message,\r\n key: this.key,\r\n errors: this.errors,\r\n };\r\n }\r\n\r\n getStatus() {\r\n return this.statusCode;\r\n }\r\n}\r\n\r\nexport class BadRequestException extends HttpException {\r\n constructor(\r\n input: { key: string; message: string } | string | string[],\r\n errors?: any,\r\n ) {\r\n if (typeof input === \"object\" && !Array.isArray(input)) {\r\n super(input.message, 400, input.key, errors);\r\n } else {\r\n super(\r\n Array.isArray(input) ? input.join(\", \") : input,\r\n 400,\r\n undefined,\r\n errors,\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport class NotFoundException extends HttpException {\r\n constructor(input: { key: string; message: string } | string = \"Not Found\") {\r\n if (typeof input === \"object\") {\r\n super(input.message, 404, input.key);\r\n } else {\r\n super(input, 404);\r\n }\r\n }\r\n}\r\n\r\nexport class UnauthorizedException extends HttpException {\r\n constructor(\r\n input: { key: string; message: string } | string = \"Unauthorized\",\r\n ) {\r\n if (typeof input === \"object\") {\r\n super(input.message, 401, input.key);\r\n } else {\r\n super(input, 401);\r\n }\r\n }\r\n}\r\n\r\nexport class ForbiddenException extends HttpException {\r\n constructor(input: { key: string; message: string } | string = \"Forbidden\") {\r\n if (typeof input === \"object\") {\r\n super(input.message, 403, input.key);\r\n } else {\r\n super(input, 403);\r\n }\r\n }\r\n}\r\n","import { IAuditColumnEntity } from \"../helpers/audit-column.entity.interface\";\r\nimport { BadRequestException } from \"./error.utils\";\r\n\r\nexport function getObjectDiffingKeys<T extends Record<string, any>>(\r\n oldObject: T,\r\n newObject: T,\r\n): Partial<T> {\r\n const keysToExclude: (keyof IAuditColumnEntity)[] = [\r\n \"createdOn\",\r\n \"createdBy\",\r\n ];\r\n const keysOfOldObject = Object.keys(oldObject);\r\n const keysOfNewObject = Object.keys(newObject);\r\n\r\n if (keysOfOldObject.length !== keysOfNewObject.length) {\r\n throw new BadRequestException({\r\n key: \"objects\",\r\n message: `Different objects recieved for diffing. Please check & try again.`,\r\n });\r\n }\r\n\r\n const oldDiffingKeys = {} as T;\r\n const newDiffingKeys = {} as Partial<T>;\r\n\r\n for (const key of keysOfOldObject as Array<keyof T>) {\r\n if (keysToExclude.includes(key as keyof IAuditColumnEntity)) continue;\r\n\r\n const oldVal = oldObject[key];\r\n const newVal = newObject[key];\r\n\r\n if (JSON.stringify(oldVal) !== JSON.stringify(newVal)) {\r\n oldDiffingKeys[key] = oldVal;\r\n newDiffingKeys[key] = newVal;\r\n }\r\n }\r\n\r\n return newDiffingKeys;\r\n}\r\n\r\n/**\r\n * Compares two arrays and returns the difference between them.\r\n *\r\n * @template T - The type of elements in the arrays\r\n * @param {T[]} arr1 - The original array\r\n * @param {T[]} arr2 - The new array to compare against\r\n * @returns {{ present: T[], deleted: T[], added: T[] }} An object containing:\r\n * - `present` — items found in both arrays (intersection)\r\n * - `deleted` — items in `arr1` but not in `arr2`\r\n * - `added` — items in `arr2` but not in `arr1`\r\n *\r\n * @example\r\n * const arr1 = [1, 2, 3, 4];\r\n * const arr2 = [3, 4, 5, 6];\r\n *\r\n * diffArrays(arr1, arr2);\r\n * // {\r\n * // present: [3, 4],\r\n * // deleted: [1, 2],\r\n * // added: [5, 6]\r\n * // }\r\n */\r\nexport function diffArrays<T>(arr1: T[], arr2: T[]) {\r\n const set1 = new Set(arr1);\r\n const set2 = new Set(arr2);\r\n\r\n return {\r\n present: arr1.filter((item) => set2.has(item)),\r\n deleted: arr1.filter((item) => !set2.has(item)),\r\n added: arr2.filter((item) => !set1.has(item)),\r\n };\r\n}\r\n\r\n/**\r\n * Groups an array of objects by a specified key, returning a `Map` where each\r\n * unique value of the key becomes an entry containing all items that share that value.\r\n * Use this as a fallback if `Object.groupBy` (ES2024) is not available in your environment.\r\n *\r\n * @template T - The type of objects in the array\r\n * @param items - The array of objects to group\r\n * @param key - A key of `T` whose value will be used as the group identifier\r\n * @returns A `Map` where each key maps to an array of items belonging to that group\r\n *\r\n * @example\r\n * const grouped = groupBy(items, 'someKey');\r\n * grouped.get('keyValue1'); // [item1, item2]\r\n * grouped.get('keyValue2'); // [item3]\r\n */\r\nexport function groupBy<T>(items: T[], key: keyof T): Map<string, T[]> {\r\n const result = new Map<string, T[]>();\r\n for (const item of items) {\r\n const groupKey = String(item[key]);\r\n if (!result.has(groupKey)) {\r\n result.set(groupKey, []);\r\n }\r\n result.get(groupKey)!.push(item);\r\n }\r\n return result;\r\n}\r\n\r\nexport function definedValues<T>(arr: Array<T | undefined | null>): T[] {\r\n return arr.filter((value): value is T => value != null);\r\n}\r\n\r\n/**\r\n * Converts an epoch timestamp (milliseconds) into a human-readable date string.\r\n *\r\n * @param epoch - The epoch timestamp in milliseconds (number or numeric string)\r\n * @param format - Optional output format:\r\n * - `'short'` — locale-specific short date (e.g. \"25/12/2026\")\r\n * - `'long'` — locale-specific long date (e.g. \"25 December 2026\")\r\n * - `'short-dt'` — DD/MM/YY HH:MM (e.g. \"25/12/26 18:13\")\r\n * - `'iso'` — ISO 8601 string (default)\r\n * @returns The formatted date string, or '' if epoch is invalid\r\n *\r\n * @example\r\n * epochToReadableDate(1700000000000, 'long'); // \"14 November 2023\"\r\n * epochToReadableDate('1700000000000', 'short'); // \"14/11/2023\"\r\n * epochToReadableDate(1700000000000, 'short-dt'); // \"14/11/23 18:13\"\r\n * epochToReadableDate(1700000000000); // \"2023-11-14T18:13:20.000Z\"\r\n */\r\nexport function epochToReadableDate(\r\n epoch: number | string,\r\n format: 'short' | 'long' | 'short-dt' | 'iso' = 'iso',\r\n): string {\r\n const ms = typeof epoch === 'string' ? Number(epoch) : epoch;\r\n const date = new Date(ms);\r\n\r\n if (isNaN(date.getTime())) {\r\n console.warn(`epochToReadableDate: invalid epoch value received: ${epoch}`);\r\n return '';\r\n }\r\n\r\n switch (format) {\r\n case 'short':\r\n return date.toLocaleDateString('en-IN');\r\n case 'long':\r\n return date.toLocaleDateString('en-IN', {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n });\r\n case 'short-dt': {\r\n const istOffset = 5.5 * 60 * 60 * 1000;\r\n const d = new Date(date.getTime() + istOffset);\r\n const dd = String(d.getUTCDate()).padStart(2, '0');\r\n const mm = String(d.getUTCMonth() + 1).padStart(2, '0');\r\n const yy = String(d.getUTCFullYear()).slice(-2);\r\n const hh = String(d.getUTCHours()).padStart(2, '0');\r\n const min = String(d.getUTCMinutes()).padStart(2, '0');\r\n return `${dd}/${mm}/${yy} ${hh}:${min}`;\r\n }\r\n case 'iso':\r\n default:\r\n return date.toISOString();\r\n }\r\n}\r\n","import { EntityList, EntityType } from \".\";\r\n\r\nexport enum RelationType {\r\n ONE = \"ONE\",\r\n MANY = \"MANY\",\r\n}\r\n\r\nexport interface IMappingPropertyEntry {\r\n sourceProperty: string;\r\n targetProperty: string;\r\n}\r\n\r\nexport interface IModelRelationConfig<T extends EntityList> {\r\n relationType: RelationType;\r\n mappingProperties: IMappingPropertyEntry[];\r\n searchProperty: string;\r\n entity: EntityList;\r\n}\r\n","export enum OrderByDirection {\r\n ASC = \"ASC\",\r\n DESC = \"DESC\",\r\n}\r\n\r\n// export type IOrderByFilter<T> = {\r\n// column: keyof T;\r\n// direction: OrderByDirection;\r\n// };\r\n","import { BaseEntityModel } from \"../models\";\r\nimport { ISearchV2Response } from \"../types/generic.dto.types\";\r\nimport { BadRequestException, entityListEntityModelMap } from \"../utils\";\r\nimport {\r\n EntityList,\r\n EntityListEntityModelMap,\r\n EntityModelType,\r\n EntityType,\r\n} from \"../utils/entity.utils\";\r\n\r\n/**\r\n * Helper class for extracting typed entities from a `searchV2` response.\r\n *\r\n * @example new EntityFilterDataHelper(searchV2Response)\r\n *\r\n * @methods\r\n * - `getEntityFromList(name)` — returns typed entity array for the given `EntityList` key. e.g. `helper.getEntityFromList(EntityList.USER) // IUserEntity[]`\r\n */\r\nexport class EntityFilterDataHelper {\r\n entityModelsMap: EntityListEntityModelMap = {} as EntityListEntityModelMap;\r\n\r\n constructor(private readonly searchResponse: ISearchV2Response) {\r\n this.entityModelsMap = this.populateEntityModelsMap();\r\n }\r\n\r\n getEntityFromList<T extends EntityList>(name: T): EntityModelType<T>[] {\r\n return this.entityModelsMap[name] ?? [];\r\n }\r\n\r\n private populateEntityModelsMap(): EntityListEntityModelMap {\r\n const responseObj: EntityListEntityModelMap =\r\n {} as EntityListEntityModelMap;\r\n\r\n for (const key of Object.keys(this.searchResponse) as EntityList[]) {\r\n const populateFn = entityListEntityModelMap[key];\r\n if (!populateFn) continue;\r\n\r\n const raw = this.searchResponse[key];\r\n if (!Array.isArray(raw)) continue;\r\n\r\n // @ts-expect-error - conditional type EntityModelType<T> cannot be resolved in loop context\r\n (responseObj[key] as EntityModelType<typeof key>[]) = this.searchResponse[\r\n key\r\n ].map((entity) => {\r\n const model = (\r\n populateFn as (e: typeof entity) => EntityModelType<typeof key>\r\n )(entity);\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(),\r\n );\r\n return model;\r\n });\r\n }\r\n\r\n return responseObj;\r\n }\r\n\r\n getEntityModelsByFilter<T extends EntityList>(\r\n entityName: T,\r\n filter: { key: keyof EntityType<T> & string; value: any[] },\r\n ): EntityModelType<T>[] {\r\n const filteredModels = this.entityModelsMap[entityName].filter((model) =>\r\n filter.value.includes((model as any)[filter.key]),\r\n );\r\n\r\n if (filteredModels.length === 0) {\r\n throw new BadRequestException({\r\n key: `${filter.key}`,\r\n message: `${entityName} with values: ${filter.value.join(\", \")} not found. Please try with valid values.`,\r\n });\r\n }\r\n\r\n return filteredModels;\r\n }\r\n\r\n getEntityModelByFilter<T extends EntityList>(\r\n entityName: T,\r\n filter: { key: keyof EntityType<T> & string; value: any },\r\n ) {\r\n const filteredModel = this.entityModelsMap[entityName].filter(\r\n (model) => (model as any)[filter.key] === filter.value,\r\n );\r\n if (filteredModel.length === 0) {\r\n throw new BadRequestException({\r\n key: `${filter.key}`,\r\n message: `${entityName} with values: ${filter.value} not found. Please try with valid values.`,\r\n });\r\n }\r\n\r\n // console.log(\"filteredModel\", filteredModel);\r\n return filteredModel[0];\r\n }\r\n\r\n // populateRelationsFor(entityNames: EntityList[]): EntityListEntityModelMap {\r\n // for (const entityName of entityNames) {\r\n // const models = this.entityModelsMap[entityName];\r\n // if (!models) continue;\r\n // for (const model of models) {\r\n // (model as unknown as BaseEntityModel).populateRelations(\r\n // this.searchResponse,\r\n // );\r\n // }\r\n // }\r\n // return this.entityModelsMap;\r\n // }\r\n\r\n populateRelationsFor(entityNames: EntityList[]): EntityListEntityModelMap {\r\n for (const entityName of entityNames) {\r\n const models = this.entityModelsMap[entityName];\r\n if (!models) continue;\r\n for (const model of models) {\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(), // fresh set per top-level model\r\n );\r\n }\r\n }\r\n return this.entityModelsMap;\r\n }\r\n\r\n mergeEntity<T extends EntityList>(\r\n entityName: T,\r\n savedEntity: EntityType<T>,\r\n ): EntityModelType<T> {\r\n const populateFn = entityListEntityModelMap[entityName];\r\n const model = (populateFn as (e: EntityType<T>) => EntityModelType<T>)(\r\n savedEntity,\r\n );\r\n\r\n (model as unknown as BaseEntityModel).populateRelations(\r\n this.searchResponse,\r\n new Set<string>(),\r\n );\r\n\r\n return model;\r\n }\r\n}\r\n","import { IAuditColumnEntity } from \"../../helpers\";\r\nimport { IEntityFilterSearchData } from \"../../types\";\r\nimport { EntityList } from \"../../utils\";\r\n\r\nexport interface IUserEntity extends IAuditColumnEntity {\r\n id: number;\r\n name: string;\r\n password: string;\r\n email: string;\r\n phone: string;\r\n}\r\n\r\n/**\r\n * This is a common config for user entity\r\n * this will be used for createdBy & updatedBy\r\n * for the tables\r\n *\r\n * Adding column keys reduce the bandwidth that is used\r\n */\r\nexport const USER_RELATION_CONFIG: IEntityFilterSearchData<EntityList.USER> = {\r\n name: EntityList.USER,\r\n columnKeys: [\"id\", \"name\"],\r\n};\r\n"],"mappings":";AAAO,IAAM,gBAAmC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,oBAA8B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAC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","names":["ConfigurationKey","ConfigurationType","EntityHistoryOperation","EntityStatus","ExpenseType","PaymentType","SponsorTier","TransactionEntityType","TransactionType","VendorType","EntityList","RelationType","OrderByDirection"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mody-park-cha-raja/finance_common",
|
|
3
|
-
"version": "4.21.0",
|
|
3
|
+
"version": "4.21.1-beta.0",
|
|
4
4
|
"description": "Common interfaces, models, enums, and utilities for the Mody Park Cha Raja finance ecosystem",
|
|
5
5
|
"homepage": "https://github.com/mody-park-cha-raja/finance-common#readme",
|
|
6
6
|
"bugs": {
|