@mody-park-cha-raja/finance_common 4.26.0 → 4.26.1-beta.1

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 CHANGED
@@ -1,3 +1,5 @@
1
+ import * as XLSX from 'xlsx';
2
+
1
3
  declare const SPECIAL_FLATS: readonly string[];
2
4
  declare const FLAT_NUMBERS: readonly string[];
3
5
  declare const FLATS_BY_WING: ReadonlyMap<string, readonly string[]>;
@@ -383,6 +385,7 @@ declare class FlatModel {
383
385
  static readonly SPECIAL_FLATS: readonly string[];
384
386
  static readonly WINGS: readonly string[];
385
387
  static getDonationYear(): number;
388
+ static getTotalFlats(): number;
386
389
  static buildFlatNumber(wing: string, num: string): string;
387
390
  static isSpecialFlat(flatNo: string): boolean;
388
391
  static parseFlatNumber(flatNo: string): FlatParseResult;
@@ -653,6 +656,91 @@ declare enum OrderByDirection {
653
656
  DESC = "DESC"
654
657
  }
655
658
 
659
+ interface UserExpenseRow {
660
+ userId: number;
661
+ userName: string;
662
+ count: number;
663
+ cash: number;
664
+ upi: number;
665
+ bankTransfer: number;
666
+ total: number;
667
+ }
668
+ interface UserExpenseReportTotals {
669
+ count: number;
670
+ cash: number;
671
+ upi: number;
672
+ bankTransfer: number;
673
+ total: number;
674
+ }
675
+ interface UserExpenseReport {
676
+ year: number;
677
+ rows: UserExpenseRow[];
678
+ totals: UserExpenseReportTotals;
679
+ }
680
+ declare function buildUserExpenseReport(expenses: ExpenseModel[], year: number): UserExpenseReport;
681
+ declare function buildUserExpenseWorkbook(report: UserExpenseReport): XLSX.WorkBook;
682
+
683
+ interface WingCollectionDonationLike {
684
+ flatNo: string;
685
+ amount: number;
686
+ receiptNumber?: string;
687
+ paymentType?: string;
688
+ createdOn?: number;
689
+ }
690
+ interface WingCollectionRow {
691
+ flatNo: string;
692
+ status: FlatCollectionStatus;
693
+ amount: number;
694
+ count: number;
695
+ receiptNumber: string;
696
+ paymentType: string;
697
+ donationDate: string;
698
+ }
699
+ interface WingCollectionTotals {
700
+ flats: number;
701
+ paid: number;
702
+ pending: number;
703
+ amount: number;
704
+ cash: number;
705
+ upi: number;
706
+ bankTransfer: number;
707
+ }
708
+ interface WingCollectionReport {
709
+ year: number;
710
+ selection: string;
711
+ label: string;
712
+ rows: WingCollectionRow[];
713
+ totals: WingCollectionTotals;
714
+ }
715
+ declare const ALL_WINGS_SELECTION = "ALL";
716
+ declare function getWingSelectionLabel(selection: string): string;
717
+ declare function getWingSelectionSlug(selection: string): string;
718
+ declare function buildWingWiseCollectionReport(donations: WingCollectionDonationLike[], year: number, selection: string): WingCollectionReport;
719
+ declare function buildWingWiseCollectionWorkbook(report: WingCollectionReport): XLSX.WorkBook;
720
+
721
+ type XlsxSerializationType = 'base64' | 'array' | 'binary';
722
+ interface XlsxCellAddress {
723
+ r: number;
724
+ c: number;
725
+ }
726
+ interface XlsxMergeRange {
727
+ s: XlsxCellAddress;
728
+ e: XlsxCellAddress;
729
+ }
730
+ interface XlsxSheetOptions {
731
+ cols?: {
732
+ wch?: number;
733
+ }[];
734
+ merges?: XlsxMergeRange[];
735
+ }
736
+ interface XlsxSheetInput {
737
+ name: string;
738
+ aoa: (string | number)[][];
739
+ options?: XlsxSheetOptions;
740
+ }
741
+ declare function buildXlsxWorkbook(sheets: XlsxSheetInput[]): XLSX.WorkBook;
742
+ declare function serializeXlsx(workbook: XLSX.WorkBook, type: XlsxSerializationType): string | ArrayBuffer;
743
+
656
744
  interface IUserEntity extends IAuditColumnEntity {
657
745
  id: number;
658
746
  name: string;
@@ -807,4 +895,4 @@ interface IConfigurationUpdateDto extends IEntityUpdateDto<EntityType<EntityList
807
895
  interface IConfigurationSearchDto extends IEntityFilterData<EntityType<EntityList.CONFIGURATION>> {
808
896
  }
809
897
 
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 };
898
+ export { ALL_WINGS_SELECTION, 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, type UserExpenseReport, type UserExpenseReportTotals, type UserExpenseRow, UserHistoryModel, UserModel, VendorHistoryModel, VendorModel, VendorType, WINGS, type WingCollectionDonationLike, type WingCollectionReport, type WingCollectionRow, type WingCollectionTotals, type XlsxCellAddress, type XlsxMergeRange, type XlsxSerializationType, type XlsxSheetInput, type XlsxSheetOptions, buildUserExpenseReport, buildUserExpenseWorkbook, buildWingWiseCollectionReport, buildWingWiseCollectionWorkbook, buildXlsxWorkbook, convertNumberToWords, definedValues, diffArrays, entityListEntityModelMap, epochToReadableDate, getObjectDiffingKeys, getWingSelectionLabel, getWingSelectionSlug, groupBy, serializeXlsx };
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import * as XLSX from 'xlsx';
2
+
1
3
  declare const SPECIAL_FLATS: readonly string[];
2
4
  declare const FLAT_NUMBERS: readonly string[];
3
5
  declare const FLATS_BY_WING: ReadonlyMap<string, readonly string[]>;
@@ -383,6 +385,7 @@ declare class FlatModel {
383
385
  static readonly SPECIAL_FLATS: readonly string[];
384
386
  static readonly WINGS: readonly string[];
385
387
  static getDonationYear(): number;
388
+ static getTotalFlats(): number;
386
389
  static buildFlatNumber(wing: string, num: string): string;
387
390
  static isSpecialFlat(flatNo: string): boolean;
388
391
  static parseFlatNumber(flatNo: string): FlatParseResult;
@@ -653,6 +656,91 @@ declare enum OrderByDirection {
653
656
  DESC = "DESC"
654
657
  }
655
658
 
659
+ interface UserExpenseRow {
660
+ userId: number;
661
+ userName: string;
662
+ count: number;
663
+ cash: number;
664
+ upi: number;
665
+ bankTransfer: number;
666
+ total: number;
667
+ }
668
+ interface UserExpenseReportTotals {
669
+ count: number;
670
+ cash: number;
671
+ upi: number;
672
+ bankTransfer: number;
673
+ total: number;
674
+ }
675
+ interface UserExpenseReport {
676
+ year: number;
677
+ rows: UserExpenseRow[];
678
+ totals: UserExpenseReportTotals;
679
+ }
680
+ declare function buildUserExpenseReport(expenses: ExpenseModel[], year: number): UserExpenseReport;
681
+ declare function buildUserExpenseWorkbook(report: UserExpenseReport): XLSX.WorkBook;
682
+
683
+ interface WingCollectionDonationLike {
684
+ flatNo: string;
685
+ amount: number;
686
+ receiptNumber?: string;
687
+ paymentType?: string;
688
+ createdOn?: number;
689
+ }
690
+ interface WingCollectionRow {
691
+ flatNo: string;
692
+ status: FlatCollectionStatus;
693
+ amount: number;
694
+ count: number;
695
+ receiptNumber: string;
696
+ paymentType: string;
697
+ donationDate: string;
698
+ }
699
+ interface WingCollectionTotals {
700
+ flats: number;
701
+ paid: number;
702
+ pending: number;
703
+ amount: number;
704
+ cash: number;
705
+ upi: number;
706
+ bankTransfer: number;
707
+ }
708
+ interface WingCollectionReport {
709
+ year: number;
710
+ selection: string;
711
+ label: string;
712
+ rows: WingCollectionRow[];
713
+ totals: WingCollectionTotals;
714
+ }
715
+ declare const ALL_WINGS_SELECTION = "ALL";
716
+ declare function getWingSelectionLabel(selection: string): string;
717
+ declare function getWingSelectionSlug(selection: string): string;
718
+ declare function buildWingWiseCollectionReport(donations: WingCollectionDonationLike[], year: number, selection: string): WingCollectionReport;
719
+ declare function buildWingWiseCollectionWorkbook(report: WingCollectionReport): XLSX.WorkBook;
720
+
721
+ type XlsxSerializationType = 'base64' | 'array' | 'binary';
722
+ interface XlsxCellAddress {
723
+ r: number;
724
+ c: number;
725
+ }
726
+ interface XlsxMergeRange {
727
+ s: XlsxCellAddress;
728
+ e: XlsxCellAddress;
729
+ }
730
+ interface XlsxSheetOptions {
731
+ cols?: {
732
+ wch?: number;
733
+ }[];
734
+ merges?: XlsxMergeRange[];
735
+ }
736
+ interface XlsxSheetInput {
737
+ name: string;
738
+ aoa: (string | number)[][];
739
+ options?: XlsxSheetOptions;
740
+ }
741
+ declare function buildXlsxWorkbook(sheets: XlsxSheetInput[]): XLSX.WorkBook;
742
+ declare function serializeXlsx(workbook: XLSX.WorkBook, type: XlsxSerializationType): string | ArrayBuffer;
743
+
656
744
  interface IUserEntity extends IAuditColumnEntity {
657
745
  id: number;
658
746
  name: string;
@@ -807,4 +895,4 @@ interface IConfigurationUpdateDto extends IEntityUpdateDto<EntityType<EntityList
807
895
  interface IConfigurationSearchDto extends IEntityFilterData<EntityType<EntityList.CONFIGURATION>> {
808
896
  }
809
897
 
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 };
898
+ export { ALL_WINGS_SELECTION, 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, type UserExpenseReport, type UserExpenseReportTotals, type UserExpenseRow, UserHistoryModel, UserModel, VendorHistoryModel, VendorModel, VendorType, WINGS, type WingCollectionDonationLike, type WingCollectionReport, type WingCollectionRow, type WingCollectionTotals, type XlsxCellAddress, type XlsxMergeRange, type XlsxSerializationType, type XlsxSheetInput, type XlsxSheetOptions, buildUserExpenseReport, buildUserExpenseWorkbook, buildWingWiseCollectionReport, buildWingWiseCollectionWorkbook, buildXlsxWorkbook, convertNumberToWords, definedValues, diffArrays, entityListEntityModelMap, epochToReadableDate, getObjectDiffingKeys, getWingSelectionLabel, getWingSelectionSlug, groupBy, serializeXlsx };
package/dist/index.js CHANGED
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,11 +17,20 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
 
20
30
  // src/index.ts
21
31
  var index_exports = {};
22
32
  __export(index_exports, {
33
+ ALL_WINGS_SELECTION: () => ALL_WINGS_SELECTION,
23
34
  BadRequestException: () => BadRequestException,
24
35
  BaseEntityModel: () => BaseEntityModel,
25
36
  ConfigurationKey: () => ConfigurationKey,
@@ -63,13 +74,21 @@ __export(index_exports, {
63
74
  VendorModel: () => VendorModel,
64
75
  VendorType: () => VendorType,
65
76
  WINGS: () => WINGS,
77
+ buildUserExpenseReport: () => buildUserExpenseReport,
78
+ buildUserExpenseWorkbook: () => buildUserExpenseWorkbook,
79
+ buildWingWiseCollectionReport: () => buildWingWiseCollectionReport,
80
+ buildWingWiseCollectionWorkbook: () => buildWingWiseCollectionWorkbook,
81
+ buildXlsxWorkbook: () => buildXlsxWorkbook,
66
82
  convertNumberToWords: () => convertNumberToWords,
67
83
  definedValues: () => definedValues,
68
84
  diffArrays: () => diffArrays,
69
85
  entityListEntityModelMap: () => entityListEntityModelMap,
70
86
  epochToReadableDate: () => epochToReadableDate,
71
87
  getObjectDiffingKeys: () => getObjectDiffingKeys,
72
- groupBy: () => groupBy
88
+ getWingSelectionLabel: () => getWingSelectionLabel,
89
+ getWingSelectionSlug: () => getWingSelectionSlug,
90
+ groupBy: () => groupBy,
91
+ serializeXlsx: () => serializeXlsx
73
92
  });
74
93
  module.exports = __toCommonJS(index_exports);
75
94
 
@@ -965,6 +984,9 @@ var _FlatModel = class _FlatModel {
965
984
  static getDonationYear() {
966
985
  return (/* @__PURE__ */ new Date()).getFullYear();
967
986
  }
987
+ static getTotalFlats() {
988
+ return _FlatModel.FLAT_NUMBERS.length;
989
+ }
968
990
  static buildFlatNumber(wing, num) {
969
991
  return `${wing}-${num}`;
970
992
  }
@@ -1512,6 +1534,231 @@ var OrderByDirection = /* @__PURE__ */ ((OrderByDirection2) => {
1512
1534
  return OrderByDirection2;
1513
1535
  })(OrderByDirection || {});
1514
1536
 
1537
+ // src/utils/xlsx.utils.ts
1538
+ var XLSX = __toESM(require("xlsx"));
1539
+ function addressToCell(addr) {
1540
+ return { c: addr.c, r: addr.r };
1541
+ }
1542
+ function buildXlsxWorkbook(sheets) {
1543
+ const workbook = XLSX.utils.book_new();
1544
+ for (const { name, aoa, options } of sheets) {
1545
+ const worksheet = XLSX.utils.aoa_to_sheet(aoa);
1546
+ if (options) {
1547
+ if (options.cols) worksheet["!cols"] = options.cols;
1548
+ if (options.merges) {
1549
+ worksheet["!merges"] = options.merges.map((merge) => ({
1550
+ s: addressToCell(merge.s),
1551
+ e: addressToCell(merge.e)
1552
+ }));
1553
+ }
1554
+ }
1555
+ XLSX.utils.book_append_sheet(workbook, worksheet, name);
1556
+ }
1557
+ return workbook;
1558
+ }
1559
+ function serializeXlsx(workbook, type) {
1560
+ return XLSX.write(workbook, { type, bookType: "xlsx" });
1561
+ }
1562
+
1563
+ // src/utils/user-expense.report.ts
1564
+ function buildUserExpenseReport(expenses, year) {
1565
+ const map = /* @__PURE__ */ new Map();
1566
+ for (const e of expenses) {
1567
+ const userId = e.incurredBy ?? 0;
1568
+ const userName = e.incurredByUserName || (userId === 0 ? UserModel.mandalAccountUser().name : `User #${userId}`);
1569
+ let row = map.get(userId);
1570
+ if (!row) {
1571
+ row = { userId, userName, count: 0, cash: 0, upi: 0, bankTransfer: 0, total: 0 };
1572
+ map.set(userId, row);
1573
+ }
1574
+ row.count += 1;
1575
+ row.total += e.amount;
1576
+ if (e.paymentType === "UPI" /* UPI */) {
1577
+ row.upi += e.amount;
1578
+ } else if (e.paymentType === "Bank Transfer" /* BANK_TRANSFER */) {
1579
+ row.bankTransfer += e.amount;
1580
+ } else {
1581
+ row.cash += e.amount;
1582
+ }
1583
+ }
1584
+ const rows = [...map.values()].sort((a, b) => b.total - a.total);
1585
+ const totals = rows.reduce(
1586
+ (acc, r) => ({
1587
+ count: acc.count + r.count,
1588
+ cash: acc.cash + r.cash,
1589
+ upi: acc.upi + r.upi,
1590
+ bankTransfer: acc.bankTransfer + r.bankTransfer,
1591
+ total: acc.total + r.total
1592
+ }),
1593
+ { count: 0, cash: 0, upi: 0, bankTransfer: 0, total: 0 }
1594
+ );
1595
+ return { year, rows, totals };
1596
+ }
1597
+ function buildUserExpenseWorkbook(report) {
1598
+ const aoa = [
1599
+ ["User", "Expense Count", "Cash (INR)", "UPI (INR)", "Bank Transfer (INR)", "Total (INR)"]
1600
+ ];
1601
+ for (const row of report.rows) {
1602
+ aoa.push([row.userName, row.count, row.cash, row.upi, row.bankTransfer, row.total]);
1603
+ }
1604
+ aoa.push([
1605
+ "GRAND TOTAL",
1606
+ report.totals.count,
1607
+ report.totals.cash,
1608
+ report.totals.upi,
1609
+ report.totals.bankTransfer,
1610
+ report.totals.total
1611
+ ]);
1612
+ return buildXlsxWorkbook([
1613
+ {
1614
+ name: "User-wise Expense Report",
1615
+ aoa,
1616
+ options: {
1617
+ cols: [{ wch: 26 }, { wch: 14 }, { wch: 12 }, { wch: 12 }, { wch: 18 }, { wch: 12 }]
1618
+ }
1619
+ }
1620
+ ]);
1621
+ }
1622
+
1623
+ // src/utils/wing-wise-collection.report.ts
1624
+ var ALL_WINGS_SELECTION = "ALL";
1625
+ function getWingSelectionLabel(selection) {
1626
+ if (selection === ALL_WINGS_SELECTION) return "All Wings";
1627
+ if (FlatModel.SPECIAL_FLATS.includes(selection)) return selection;
1628
+ return `Wing ${selection}`;
1629
+ }
1630
+ function getWingSelectionSlug(selection) {
1631
+ if (selection === ALL_WINGS_SELECTION) return "all";
1632
+ if (FlatModel.SPECIAL_FLATS.includes(selection)) {
1633
+ return selection.toLowerCase().replace(/[^a-z0-9]+/g, "-");
1634
+ }
1635
+ return selection.toLowerCase();
1636
+ }
1637
+ function getFlatNumbersInScope(selection) {
1638
+ if (selection === ALL_WINGS_SELECTION) {
1639
+ return FlatModel.FLAT_NUMBERS.map((n) => n);
1640
+ }
1641
+ if (FlatModel.SPECIAL_FLATS.includes(selection)) {
1642
+ return [selection];
1643
+ }
1644
+ const wingFlats = FlatModel.FLATS_BY_WING.get(selection) ?? [];
1645
+ return wingFlats.map((num) => FlatModel.buildFlatNumber(selection, num));
1646
+ }
1647
+ function buildWingWiseCollectionReport(donations, year, selection) {
1648
+ const label = getWingSelectionLabel(selection);
1649
+ const donationsByFlat = /* @__PURE__ */ new Map();
1650
+ for (const d of donations) {
1651
+ const list = donationsByFlat.get(d.flatNo) ?? [];
1652
+ list.push(d);
1653
+ donationsByFlat.set(d.flatNo, list);
1654
+ }
1655
+ const rows = getFlatNumbersInScope(selection).map(
1656
+ (flatNo) => {
1657
+ const flatDonations = donationsByFlat.get(flatNo) ?? [];
1658
+ const amount = flatDonations.reduce((sum, d) => sum + d.amount, 0);
1659
+ const latest = flatDonations.reduce(
1660
+ (acc, d) => !acc || (d.createdOn ?? 0) > (acc.createdOn ?? 0) ? d : acc,
1661
+ null
1662
+ );
1663
+ return {
1664
+ flatNo,
1665
+ status: amount > 0 ? "Paid" : "Pending",
1666
+ amount,
1667
+ count: flatDonations.length,
1668
+ receiptNumber: latest?.receiptNumber ?? "",
1669
+ paymentType: latest?.paymentType ?? "",
1670
+ donationDate: latest?.createdOn ? epochToReadableDate(latest.createdOn, "short") : ""
1671
+ };
1672
+ }
1673
+ );
1674
+ rows.sort((a, b) => FlatModel.compareFlatNumbers(a.flatNo, b.flatNo));
1675
+ const totals = rows.reduce(
1676
+ (acc, r) => ({
1677
+ flats: acc.flats + 1,
1678
+ paid: acc.paid + (r.status === "Paid" ? 1 : 0),
1679
+ pending: acc.pending + (r.status === "Pending" ? 1 : 0),
1680
+ amount: acc.amount + r.amount,
1681
+ cash: acc.cash,
1682
+ upi: acc.upi,
1683
+ bankTransfer: acc.bankTransfer
1684
+ }),
1685
+ { flats: 0, paid: 0, pending: 0, amount: 0, cash: 0, upi: 0, bankTransfer: 0 }
1686
+ );
1687
+ for (const [flatNo, flatDonations] of donationsByFlat) {
1688
+ if (!getFlatNumbersInScope(selection).includes(flatNo)) continue;
1689
+ for (const d of flatDonations) {
1690
+ if (d.paymentType === "Cash" /* CASH */) {
1691
+ totals.cash += d.amount;
1692
+ } else if (d.paymentType === "UPI" /* UPI */) {
1693
+ totals.upi += d.amount;
1694
+ } else {
1695
+ totals.bankTransfer += d.amount;
1696
+ }
1697
+ }
1698
+ }
1699
+ return { year, selection, label, rows, totals };
1700
+ }
1701
+ function buildWingWiseCollectionWorkbook(report) {
1702
+ const aoa = [
1703
+ [
1704
+ `Mody Park Ganeshotsav Mandal - Wing-wise Collection Report (${report.label}) - ${report.year}`
1705
+ ],
1706
+ [
1707
+ `Assessment Cycle ${report.year} - Flats ${report.totals.flats}, Paid ${report.totals.paid}, Pending ${report.totals.pending}`
1708
+ ],
1709
+ [
1710
+ "S.No.",
1711
+ "Flat No",
1712
+ "Status",
1713
+ "Amount (INR)",
1714
+ "Receipt No",
1715
+ "Payment Type",
1716
+ "Donation Date"
1717
+ ]
1718
+ ];
1719
+ report.rows.forEach((row, index) => {
1720
+ aoa.push([
1721
+ index + 1,
1722
+ row.flatNo,
1723
+ row.status,
1724
+ row.amount,
1725
+ row.receiptNumber,
1726
+ row.paymentType,
1727
+ row.donationDate
1728
+ ]);
1729
+ });
1730
+ aoa.push([
1731
+ "",
1732
+ "GRAND TOTAL",
1733
+ `${report.totals.paid} Paid / ${report.totals.pending} Pending`,
1734
+ report.totals.amount,
1735
+ "",
1736
+ "",
1737
+ ""
1738
+ ]);
1739
+ return buildXlsxWorkbook([
1740
+ {
1741
+ name: "Wing-Wise Collection",
1742
+ aoa,
1743
+ options: {
1744
+ cols: [
1745
+ { wch: 8 },
1746
+ { wch: 10 },
1747
+ { wch: 12 },
1748
+ { wch: 14 },
1749
+ { wch: 18 },
1750
+ { wch: 14 },
1751
+ { wch: 14 }
1752
+ ],
1753
+ merges: [
1754
+ { s: { r: 0, c: 0 }, e: { r: 0, c: 6 } },
1755
+ { s: { r: 1, c: 0 }, e: { r: 1, c: 6 } }
1756
+ ]
1757
+ }
1758
+ }
1759
+ ]);
1760
+ }
1761
+
1515
1762
  // src/helpers/entity-filter-data.helper.ts
1516
1763
  var EntityFilterDataHelper = class {
1517
1764
  constructor(searchResponse) {
@@ -1610,6 +1857,7 @@ var USER_RELATION_CONFIG = {
1610
1857
  };
1611
1858
  // Annotate the CommonJS export names for ESM import in node:
1612
1859
  0 && (module.exports = {
1860
+ ALL_WINGS_SELECTION,
1613
1861
  BadRequestException,
1614
1862
  BaseEntityModel,
1615
1863
  ConfigurationKey,
@@ -1653,12 +1901,20 @@ var USER_RELATION_CONFIG = {
1653
1901
  VendorModel,
1654
1902
  VendorType,
1655
1903
  WINGS,
1904
+ buildUserExpenseReport,
1905
+ buildUserExpenseWorkbook,
1906
+ buildWingWiseCollectionReport,
1907
+ buildWingWiseCollectionWorkbook,
1908
+ buildXlsxWorkbook,
1656
1909
  convertNumberToWords,
1657
1910
  definedValues,
1658
1911
  diffArrays,
1659
1912
  entityListEntityModelMap,
1660
1913
  epochToReadableDate,
1661
1914
  getObjectDiffingKeys,
1662
- groupBy
1915
+ getWingSelectionLabel,
1916
+ getWingSelectionSlug,
1917
+ groupBy,
1918
+ serializeXlsx
1663
1919
  });
1664
1920
  //# sourceMappingURL=index.js.map