payservedb 8.7.0 → 8.7.2

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.
Files changed (186) hide show
  1. package/.env +2 -2
  2. package/ZOHO_INTEGRATION_SCHEMA.md +644 -644
  3. package/index.js +319 -319
  4. package/package.json +17 -17
  5. package/src/models/account.js +52 -52
  6. package/src/models/agent_departments.js +59 -59
  7. package/src/models/agent_notifications.js +53 -53
  8. package/src/models/agent_performance.js +127 -127
  9. package/src/models/agent_roles.js +77 -77
  10. package/src/models/agents.js +154 -154
  11. package/src/models/apilog.js +18 -18
  12. package/src/models/approvalsWorkflows.js +49 -49
  13. package/src/models/archivedapilog.js +18 -18
  14. package/src/models/asset.js +92 -92
  15. package/src/models/assetsAssignment.js +64 -64
  16. package/src/models/auditTrail.js +346 -346
  17. package/src/models/bankdetails.js +47 -47
  18. package/src/models/billerAddress.js +124 -124
  19. package/src/models/booking_invoice.js +165 -165
  20. package/src/models/bookinganalytics.js +63 -63
  21. package/src/models/bookingconfig.js +45 -45
  22. package/src/models/bookingproperty.js +179 -179
  23. package/src/models/bookingreservation.js +239 -239
  24. package/src/models/bookingrevenuerecord.js +84 -84
  25. package/src/models/budget.js +95 -95
  26. package/src/models/budgetCategory.js +19 -19
  27. package/src/models/campaigns.js +108 -108
  28. package/src/models/cashpayment.js +291 -291
  29. package/src/models/combinedUnits.js +62 -62
  30. package/src/models/combined_invoice.js +424 -424
  31. package/src/models/common_area_electricity.js +38 -38
  32. package/src/models/common_area_generator.js +41 -41
  33. package/src/models/common_area_utility_alert.js +37 -37
  34. package/src/models/common_area_water.js +39 -39
  35. package/src/models/communication_status.js +33 -33
  36. package/src/models/communication_user_opt.js +32 -32
  37. package/src/models/community_guidelines.js +35 -35
  38. package/src/models/company.js +53 -53
  39. package/src/models/coreBaseSettings.js +16 -16
  40. package/src/models/coreInvoiceSettings.js +100 -100
  41. package/src/models/counter_schema.js +21 -21
  42. package/src/models/country_tax.js +42 -42
  43. package/src/models/currency_settings.js +39 -39
  44. package/src/models/customer.js +214 -214
  45. package/src/models/customer_satisfaction_survey.js +278 -278
  46. package/src/models/customer_surveys.js +139 -139
  47. package/src/models/customer_tickets.js +239 -239
  48. package/src/models/dailyChecklist.js +312 -312
  49. package/src/models/default_payment_details.js +17 -17
  50. package/src/models/deliveryTimeMarks.js +18 -18
  51. package/src/models/document_type.js +19 -19
  52. package/src/models/dutyRosterChecklist.js +250 -250
  53. package/src/models/dutyroster.js +136 -136
  54. package/src/models/email.js +37 -37
  55. package/src/models/email_sms_queue.js +61 -61
  56. package/src/models/entry_exit.js +53 -53
  57. package/src/models/expense.js +99 -99
  58. package/src/models/expense_category.js +45 -45
  59. package/src/models/facility.js +71 -71
  60. package/src/models/facilityBillingPrices.js +29 -29
  61. package/src/models/facilityInvoice.js +240 -240
  62. package/src/models/facilityInvoicePayment.js +52 -52
  63. package/src/models/facilityInvoiceRecipient.js +32 -32
  64. package/src/models/facilityWalletTransactionsMetadata.js +236 -236
  65. package/src/models/facility_departements.js +20 -20
  66. package/src/models/facility_payment_details.js +20 -20
  67. package/src/models/facility_rating.js +78 -78
  68. package/src/models/facilityasset.js +25 -25
  69. package/src/models/faq.js +14 -14
  70. package/src/models/gl_account_double_entries.js +25 -25
  71. package/src/models/gl_accounts.js +56 -56
  72. package/src/models/gl_entries.js +49 -49
  73. package/src/models/goodsReceivedNotes.js +115 -115
  74. package/src/models/guard.js +47 -47
  75. package/src/models/handover.js +258 -258
  76. package/src/models/inspection_category.js +38 -38
  77. package/src/models/invoice.js +480 -480
  78. package/src/models/invoice_generation_approval.js +86 -86
  79. package/src/models/invoicing_schedule.js +40 -40
  80. package/src/models/item_inspection.js +96 -96
  81. package/src/models/knowledge_base.js +109 -109
  82. package/src/models/knowledge_base_rating.js +44 -44
  83. package/src/models/leaseagreement.js +237 -237
  84. package/src/models/leasetemplate.js +17 -17
  85. package/src/models/levy.js +223 -223
  86. package/src/models/levy_invoice_settings.js +26 -26
  87. package/src/models/levycontract.js +210 -210
  88. package/src/models/levytype.js +23 -23
  89. package/src/models/maintenance_service_vendor.js +38 -38
  90. package/src/models/maintenance_services.js +17 -17
  91. package/src/models/maintenancerequisition.js +31 -31
  92. package/src/models/master_workplan.js +32 -32
  93. package/src/models/master_workplan_child.js +34 -34
  94. package/src/models/message.js +38 -38
  95. package/src/models/module.js +21 -21
  96. package/src/models/notification.js +44 -44
  97. package/src/models/paymentTermsMarks.js +19 -19
  98. package/src/models/penalty.js +76 -76
  99. package/src/models/pendingCredentials.js +32 -32
  100. package/src/models/powerMeterCommunicationProtocol.js +17 -17
  101. package/src/models/powerMeterCustomerAccount.js +78 -78
  102. package/src/models/powerMeterCustomerBand.js +14 -14
  103. package/src/models/powerMeterDailyReading.js +30 -30
  104. package/src/models/powerMeterGateways.js +40 -40
  105. package/src/models/powerMeterMonthlyReading.js +34 -34
  106. package/src/models/powerMeterPowerCharges.js +85 -85
  107. package/src/models/powerMeterSettings.js +159 -159
  108. package/src/models/powerMeterSingleDayReading.js +32 -32
  109. package/src/models/powerMeters.js +116 -116
  110. package/src/models/powerMetersManufacturer.js +14 -14
  111. package/src/models/power_meter_account.js +81 -81
  112. package/src/models/power_meter_command_logs.js +30 -30
  113. package/src/models/power_meter_command_queue.js +33 -33
  114. package/src/models/power_meter_negative_balance.js +44 -44
  115. package/src/models/power_prepaid_credits.js +47 -47
  116. package/src/models/power_prepaid_debits.js +53 -53
  117. package/src/models/power_prepaid_orders.js +78 -78
  118. package/src/models/power_sms_notification.js +26 -26
  119. package/src/models/privacy_policy.js +19 -19
  120. package/src/models/propertyManagerContract.js +556 -556
  121. package/src/models/propertyManagerRevenue.js +195 -195
  122. package/src/models/purchaseOrderInvoice.js +74 -74
  123. package/src/models/purchase_order.js +213 -213
  124. package/src/models/purchase_request.js +110 -110
  125. package/src/models/quickbooks_config.js +52 -41
  126. package/src/models/refresh_token.js +23 -23
  127. package/src/models/reminder.js +197 -197
  128. package/src/models/report.js +13 -13
  129. package/src/models/resident.js +121 -121
  130. package/src/models/rfq_details.js +131 -131
  131. package/src/models/rfq_response.js +153 -153
  132. package/src/models/service_charge_invoice_upload.js +42 -42
  133. package/src/models/service_charge_payments.js +27 -27
  134. package/src/models/servicerequest.js +55 -55
  135. package/src/models/settings.js +62 -62
  136. package/src/models/short_urls.js +21 -21
  137. package/src/models/smart_meter_daily_consumption.js +44 -44
  138. package/src/models/sms_africastalking.js +20 -20
  139. package/src/models/sms_balance_notification.js +26 -26
  140. package/src/models/sms_meliora.js +20 -20
  141. package/src/models/staff.js +36 -36
  142. package/src/models/stocksandspare.js +161 -161
  143. package/src/models/suppliers.js +74 -74
  144. package/src/models/terms_and_conditions.js +19 -19
  145. package/src/models/tickets.js +186 -186
  146. package/src/models/tickets_category.js +72 -72
  147. package/src/models/unitManagementTemplate.js +44 -44
  148. package/src/models/unitasset.js +25 -25
  149. package/src/models/units.js +118 -118
  150. package/src/models/user.js +185 -185
  151. package/src/models/valueaddedservices.js +50 -79
  152. package/src/models/vas_invoices_upload.js +50 -50
  153. package/src/models/vas_payments.js +24 -24
  154. package/src/models/vasinvoice.js +192 -192
  155. package/src/models/vasvendor.js +57 -57
  156. package/src/models/visitLog.js +95 -95
  157. package/src/models/visitor.js +67 -67
  158. package/src/models/waitlist.js +45 -45
  159. package/src/models/wallet.js +44 -44
  160. package/src/models/wallet_transactions.js +50 -50
  161. package/src/models/water_invoice.js +351 -351
  162. package/src/models/water_meter_Command_Queue.js +33 -33
  163. package/src/models/water_meter_account.js +86 -86
  164. package/src/models/water_meter_billing.js +58 -58
  165. package/src/models/water_meter_combined_accounts.js +92 -92
  166. package/src/models/water_meter_communication.js +17 -17
  167. package/src/models/water_meter_communication_logs.js +39 -39
  168. package/src/models/water_meter_concentrator.js +70 -70
  169. package/src/models/water_meter_daily_history.js +32 -32
  170. package/src/models/water_meter_high_risk.js +36 -36
  171. package/src/models/water_meter_iot_cards.js +34 -34
  172. package/src/models/water_meter_loan_deduction.js +134 -134
  173. package/src/models/water_meter_manufacturer.js +35 -35
  174. package/src/models/water_meter_monthly_history.js +36 -36
  175. package/src/models/water_meter_negative_amounts.js +44 -44
  176. package/src/models/water_meter_settings.js +290 -290
  177. package/src/models/water_meter_single_day_history.js +34 -34
  178. package/src/models/water_meter_size.js +15 -15
  179. package/src/models/water_meters.js +133 -133
  180. package/src/models/water_meters_delivery.js +76 -76
  181. package/src/models/water_prepaid_credit.js +47 -47
  182. package/src/models/water_prepaid_debit.js +50 -50
  183. package/src/models/workorder.js +49 -49
  184. package/src/models/zohoAccount.js +453 -453
  185. package/src/models/zohoIntegration.js +262 -262
  186. package/src/models/zohoItem.js +504 -504
package/index.js CHANGED
@@ -1,319 +1,319 @@
1
- const mongoose = require("mongoose");
2
- require("dotenv").config();
3
-
4
- // Maintain a record of open connections for each database
5
- const connections = {};
6
-
7
- // Utility function to connect to MongoDB
8
- async function connectToMongoDB(
9
- dbName,
10
- secured,
11
- username,
12
- password,
13
- url,
14
- port,
15
- ) {
16
- try {
17
- if (secured === false) {
18
- const url_ = url + ":" + port;
19
- const connectionString = `mongodb://${url_}/${dbName}`;
20
- await mongoose.connect(connectionString, {
21
- useNewUrlParser: true,
22
- });
23
- console.log("Connected to MongoDB");
24
- } else {
25
- const url_ = `${username}:${password}@${url}:${port}`;
26
- const source = "?authSource=admin";
27
- const connectionString = `mongodb://${url_}/${dbName}${source}`;
28
- await mongoose.connect(connectionString, {
29
- useNewUrlParser: true,
30
- });
31
- console.log("Connected to MongoDB");
32
- }
33
- } catch (err) {
34
- console.error("Error connecting to MongoDB:", err);
35
- throw err;
36
- }
37
- }
38
-
39
- // Function to switch databases dynamically
40
- async function switchDB(dbName) {
41
- // Check if there's already a connection to the desired database
42
- if (connections[dbName]) {
43
- return connections[dbName]; // Return existing connection
44
- }
45
-
46
- try {
47
- // Use environment variables for connection parameters - same as in connectToMongoDB
48
- const username = process.env.MONGODB_USER;
49
- const password = process.env.MONGODB_PASSWORD;
50
- const url = process.env.MONGODB_HOST;
51
- const port = process.env.MONGODB_PORT;
52
- const source = "?authSource=admin";
53
-
54
- const connectionString = `mongodb://${username}:${password}@${url}:${port}/${dbName}${source}`;
55
- const dbConnection = await mongoose.createConnection(connectionString, {
56
- useNewUrlParser: true,
57
- });
58
-
59
- connections[dbName] = dbConnection; // Store the connection for reuse
60
- console.log(`Switched to database: ${dbName}`);
61
- return dbConnection;
62
- } catch (err) {
63
- console.error(`Error switching to database: ${dbName}`, err);
64
- throw err;
65
- }
66
- }
67
-
68
- // Importing all model files (Note: models may need to be re-registered for different connections)
69
- // This maintains backward compatibility for existing services
70
- const models = {
71
- User: require("./src/models/user"),
72
- Company: require("./src/models/company"),
73
- Customer: require("./src/models/customer"),
74
- FacilityEmailDetails: require("./src/models/email"),
75
- Module: require("./src/models/module"),
76
- Facility: require("./src/models/facility"),
77
- RefreshToken: require("./src/models/refresh_token"),
78
- ApiLog: require("./src/models/apilog"),
79
- ArchivedApiLog: require("./src/models/archivedapilog"),
80
- FacilityAsset: require("./src/models/facilityasset"),
81
- Unit: require("./src/models/units"),
82
- FAQ: require("./src/models/faq"),
83
- UnitAsset: require("./src/models/unitasset"),
84
- CombinedUnit: require("./src/models/combinedUnits"),
85
- Message: require("./src/models/message"),
86
- SMSAfricastalking: require("./src/models/sms_africastalking"),
87
- SMSMeliora: require("./src/models/sms_meliora"),
88
- EntryExit: require("./src/models/entry_exit"),
89
- Guard: require("./src/models/guard"),
90
- Visitor: require("./src/models/visitor"),
91
- VisitLog: require("./src/models/visitLog"),
92
- Settings: require("./src/models/settings"),
93
- Levy: require("./src/models/levy"),
94
- LevyType: require("./src/models/levytype"),
95
- LevyContract: require("./src/models/levycontract"),
96
- Invoice: require("./src/models/invoice"),
97
- CombinedInvoice: require("./src/models/combined_invoice"),
98
- InvoiceGeneration: require("./src/models/invoice_generation_approval"),
99
- ShortUrl: require("./src/models/short_urls"),
100
- InvoicingSchedule: require("./src/models/invoicing_schedule"),
101
- Reminder: require("./src/models/reminder"),
102
- Penalty: require("./src/models/penalty"),
103
- Notifiaction: require("./src/models/notification"),
104
- Resident: require("./src/models/resident"),
105
- Asset: require("./src/models/asset"),
106
- DutyRoster: require("./src/models/dutyroster"),
107
- LeaseTemplate: require("./src/models/leasetemplate"),
108
- Report: require("./src/models/report"),
109
- Ticket: require("./src/models/tickets"),
110
- Rating: require("./src/models/facility_rating"),
111
- Stocksandspare: require("./src/models/stocksandspare"),
112
- ServiceVendor: require("./src/models/maintenance_service_vendor"),
113
- MaintenanceServices: require("./src/models/maintenance_services"),
114
- StockRequisition: require("./src/models/maintenancerequisition"),
115
- LeaseAgreement: require("./src/models/leaseagreement"),
116
- WorkOrder: require("./src/models/workorder"),
117
- ValueAddedService: require("./src/models/valueaddedservices"),
118
- VasInvoice: require("./src/models/vasinvoice"),
119
- VasVendor: require("./src/models/vasvendor"),
120
- Staff: require("./src/models/staff"),
121
- ServiceRequest: require("./src/models/servicerequest"),
122
- CountryTaxRate: require("./src/models/country_tax"),
123
- WaterMeter: require("./src/models/water_meters"),
124
- DailyConsumption: require("./src/models/smart_meter_daily_consumption"),
125
- WaterMeterSettings: require("./src/models/water_meter_settings"),
126
- WaterCombinedMeterAccount: require("./src/models/water_meter_combined_accounts"),
127
- AnalogBilling: require("./src/models/water_meter_billing"),
128
- MeterSize: require("./src/models/water_meter_size"),
129
- WaterInvoice: require("./src/models/water_invoice"),
130
- MeterProtocol: require("./src/models/water_meter_communication"),
131
- MeterManufacturer: require("./src/models/water_meter_manufacturer"),
132
- SmsNotification: require("./src/models/sms_balance_notification"),
133
- MeterIotCard: require("./src/models/water_meter_iot_cards"),
134
- MetersDelivery: require("./src/models/water_meters_delivery"),
135
- Notification: require("./src/models/notification"),
136
- Concentrator: require("./src/models/water_meter_concentrator"),
137
- Handover: require("./src/models/handover"),
138
- Budget: require("./src/models/budget"),
139
- BudgetCategory: require("./src/models/budgetCategory"),
140
- Expense: require("./src/models/expense"),
141
- ExpenseCategory: require("./src/models/expense_category"),
142
- InvoiceSettings: require("./src/models/levy_invoice_settings"),
143
- Account: require("./src/models/account"),
144
- FacilityPaymentDetails: require("./src/models/facility_payment_details"),
145
- DefaultPaymentDetails: require("./src/models/default_payment_details"),
146
- Currency: require("./src/models/currency_settings"),
147
- WaterMeterAccount: require("./src/models/water_meter_account"),
148
- WaterMeterLoanDeduction: require("./src/models/water_meter_loan_deduction"),
149
- SingleDayWaterMeterHistory: require("./src/models/water_meter_single_day_history"),
150
- DailyWaterMeterHistory: require("./src/models/water_meter_daily_history"),
151
- MonthlyWaterMeterHistory: require("./src/models/water_meter_monthly_history"),
152
- WaterPrepaidCredit: require("./src/models/water_prepaid_credit"),
153
- WaterPrepaidDebit: require("./src/models/water_prepaid_debit"),
154
- MeterLog: require("./src/models/water_meter_communication_logs"),
155
- CashPayment: require("./src/models/cashpayment"),
156
- VasPayment: require("./src/models/vas_payments"),
157
- VasInvoicesQuickBooks: require("./src/models/vas_invoices_upload"),
158
- ServiceChargePayment: require("./src/models/service_charge_payments"),
159
- ServiceChargeInvoiceUpload: require("./src/models/service_charge_invoice_upload"),
160
- Campaign: require("./src/models/campaigns"),
161
- InspectionItem: require("./src/models/item_inspection"),
162
- Supplier: require("./src/models/suppliers"),
163
- PurchaseRequest: require("./src/models/purchase_request"),
164
- PurchaseOrder: require("./src/models/purchase_order"),
165
- PaymentTermMark: require("./src/models/paymentTermsMarks"),
166
- DeliveryTimeMark: require("./src/models/deliveryTimeMarks"),
167
- RFQDetails: require("./src/models/rfq_details"),
168
- RFQResponse: require("./src/models/rfq_response"),
169
- ApprovalWorkflow: require("./src/models/approvalsWorkflows"),
170
- CommonAreaElectricityReading: require("./src/models/common_area_electricity"),
171
- CommonAreaWaterReading: require("./src/models/common_area_water"),
172
- CommonAreaGeneratorReading: require("./src/models/common_area_generator"),
173
- CommonAreaUtilityAlert: require("./src/models/common_area_utility_alert"),
174
- BookingProperty: require("./src/models/bookingproperty"),
175
- BookingReservation: require("./src/models/bookingreservation"),
176
- BookingConfig: require("./src/models/bookingconfig"),
177
- BookingAnalytics: require("./src/models/bookinganalytics"),
178
- BookingInvoice: require("./src/models/booking_invoice"),
179
- BankDetails: require("./src/models/bankdetails"),
180
- RevenueRecord: require("./src/models/bookingrevenuerecord"),
181
- GLAccount: require("./src/models/gl_accounts"),
182
- GLEntry: require("./src/models/gl_entries"),
183
- GLAccountDoubleEntries: require("./src/models/gl_account_double_entries"),
184
- PendingCredential: require("./src/models/pendingCredentials"),
185
- UnitManagementTemplate: require("./src/models/unitManagementTemplate"),
186
- PropertyManagerRevenue: require("./src/models/propertyManagerRevenue"),
187
- PropertyManagerContract: require("./src/models/propertyManagerContract"),
188
- BillerAddress: require("./src/models/billerAddress"),
189
- AssetAssignment: require("./src/models/assetsAssignment"),
190
- Wallet: require("./src/models/wallet"),
191
- WalletTransaction: require("./src/models/wallet_transactions"),
192
- GoodsReceivedNote: require("./src/models/goodsReceivedNotes"),
193
- CommunicationStatus: require("./src/models/communication_status"),
194
- MeterCommandQueue: require("./src/models/water_meter_Command_Queue"),
195
- FacilityDepartment: require("./src/models/facility_departements"),
196
- EmailSmsQueue: require("./src/models/email_sms_queue"),
197
- PurchaseOrderInvoice: require("./src/models/purchaseOrderInvoice"),
198
- PowerMeterCustomerBand: require("./src/models/powerMeterCustomerBand"),
199
- PowerMeterCommunicationProtocol: require("./src/models/powerMeterCommunicationProtocol"),
200
- PowerMeterDailyReading: require("./src/models/powerMeterDailyReading"),
201
- PowerMeterPowerCharge: require("./src/models/powerMeterPowerCharges"),
202
- PowerMeterGateway: require("./src/models/powerMeterGateways"),
203
- PowerMeters: require("./src/models/powerMeters"),
204
- PowerMeterSingleDayReading: require("./src/models/powerMeterSingleDayReading"),
205
- PowerMeterAccount: require("./src/models/power_meter_account"),
206
- PowerMeterLog: require("./src/models/power_meter_command_logs"),
207
- PowerMeterManufacturer: require("./src/models/powerMetersManufacturer"),
208
- PowerMeterMonthlyReading: require("./src/models/powerMeterMonthlyReading"),
209
- PowerMeterSettings: require("./src/models/powerMeterSettings"),
210
- PowerPrepaidDebit: require("./src/models/power_prepaid_debits"),
211
- PowerPrepaidCredit: require("./src/models/power_prepaid_credits"),
212
- PowerNegativeBalance: require("./src/models/power_meter_negative_balance"),
213
- PowerCommandQueue: require("./src/models/power_meter_command_queue"),
214
- PowerNotification: require("./src/models/power_sms_notification"),
215
- PowerPrepaidOrder: require("./src/models/power_prepaid_orders"),
216
- FacilityWalletTransactionsMetadata: require("./src/models/facilityWalletTransactionsMetadata"),
217
- NegativeBalance: require("./src/models/water_meter_negative_amounts"),
218
- MasterWorkplan: require("./src/models/master_workplan"),
219
- MasterWorkplanChild: require("./src/models/master_workplan_child"),
220
- DutyRosterChecklist: require("./src/models/dutyRosterChecklist"),
221
- AuditTrail: require("./src/models/auditTrail"),
222
- DailyChecklist: require("./src/models/dailyChecklist"),
223
- CoreInvoiceSettings: require("./src/models/coreInvoiceSettings"),
224
- FacilityInvoice: require("./src/models/facilityInvoice"),
225
- CoreBaseSettings: require("./src/models/coreBaseSettings"),
226
- Recipient: require("./src/models/facilityInvoiceRecipient"),
227
- FacilityBillingPrice: require("./src/models/facilityBillingPrices"),
228
- FacilityInvoicePayment: require("./src/models/facilityInvoicePayment"),
229
- CommunicationUserOpt: require("./src/models/communication_user_opt"),
230
- Agent: require("./src/models/agents"),
231
- AgentPerformance: require("./src/models/agent_performance"),
232
- CustomerTicket: require("./src/models/customer_tickets"),
233
- CustomerSurvey: require("./src/models/customer_surveys"),
234
- KnowledgeBase: require("./src/models/knowledge_base"),
235
- KnowledgeBaseRating: require("./src/models/knowledge_base_rating"),
236
- AgentNotification: require("./src/models/agent_notifications"),
237
- TicketCategory: require("./src/models/tickets_category"),
238
- InspectionCategory: require("./src/models/inspection_category"),
239
- AgentRole: require("./src/models/agent_roles"),
240
- CustomerSatisfactionSurvey: require("./src/models/customer_satisfaction_survey"),
241
- AgentDepartment: require("./src/models/agent_departments"),
242
- DocumentType: require("./src/models/document_type"),
243
- Counter: require("./src/models/counter_schema"),
244
- ZohoIntegration: require("./src/models/zohoIntegration"),
245
- ZohoItem: require("./src/models/zohoItem"),
246
- ZohoAccount: require("./src/models/zohoAccount"),
247
- QuickBooksConfig: require("./src/models/quickbooks_config"),
248
- PrivacyPolicy: require("./src/models/privacy_policy"),
249
- TermsAndConditions: require("./src/models/terms_and_conditions"),
250
- CommunityGuidelines: require("./src/models/community_guidelines")
251
- };
252
-
253
- // Function to get models dynamically from a specific database connection
254
- async function getModelFromDB(dbConnection, modelName, schema) {
255
- if (!dbConnection.models[modelName]) {
256
- return dbConnection.model(modelName, schema); // Register the model in the db connection
257
- }
258
- return dbConnection.models[modelName]; // Return existing model if already registered
259
- }
260
-
261
- // Function to initialize service with specific models - NEW FEATURE
262
- function initializeService(modelNames = []) {
263
- let currentConnection = null;
264
-
265
- // Enhanced connect function that only registers specified models
266
- async function connectWithModels(
267
- dbName,
268
- secured,
269
- username,
270
- password,
271
- url,
272
- port,
273
- ) {
274
- await connectToMongoDB(dbName, secured, username, password, url, port);
275
- currentConnection = mongoose.connection;
276
-
277
- // Only register the models specified in modelNames
278
- modelNames.forEach((modelName) => {
279
- if (models[modelName]) {
280
- let schema;
281
-
282
- // Extract schema from the imported model
283
- if (models[modelName].schema) {
284
- schema = models[modelName].schema;
285
- } else {
286
- console.warn(`Unable to extract schema from model ${modelName}`);
287
- return;
288
- }
289
-
290
- if (!currentConnection.models[modelName]) {
291
- const modelInstance = currentConnection.model(modelName, schema);
292
- // Make model globally accessible through payservedb
293
- module.exports[modelName] = modelInstance;
294
- } else {
295
- module.exports[modelName] = currentConnection.models[modelName];
296
- }
297
- } else {
298
- console.warn(`Model ${modelName} not found in models registry`);
299
- }
300
- });
301
-
302
- return module.exports;
303
- }
304
-
305
- return {
306
- connectToMongoDB: connectWithModels,
307
- switchDB,
308
- getModelFromDB,
309
- getCurrentConnection: () => currentConnection,
310
- };
311
- }
312
-
313
- module.exports = {
314
- connectToMongoDB,
315
- switchDB,
316
- getModelFromDB,
317
- initializeService,
318
- ...models,
319
- };
1
+ const mongoose = require("mongoose");
2
+ require("dotenv").config();
3
+
4
+ // Maintain a record of open connections for each database
5
+ const connections = {};
6
+
7
+ // Utility function to connect to MongoDB
8
+ async function connectToMongoDB(
9
+ dbName,
10
+ secured,
11
+ username,
12
+ password,
13
+ url,
14
+ port,
15
+ ) {
16
+ try {
17
+ if (secured === false) {
18
+ const url_ = url + ":" + port;
19
+ const connectionString = `mongodb://${url_}/${dbName}`;
20
+ await mongoose.connect(connectionString, {
21
+ useNewUrlParser: true,
22
+ });
23
+ console.log("Connected to MongoDB");
24
+ } else {
25
+ const url_ = `${username}:${password}@${url}:${port}`;
26
+ const source = "?authSource=admin";
27
+ const connectionString = `mongodb://${url_}/${dbName}${source}`;
28
+ await mongoose.connect(connectionString, {
29
+ useNewUrlParser: true,
30
+ });
31
+ console.log("Connected to MongoDB");
32
+ }
33
+ } catch (err) {
34
+ console.error("Error connecting to MongoDB:", err);
35
+ throw err;
36
+ }
37
+ }
38
+
39
+ // Function to switch databases dynamically
40
+ async function switchDB(dbName) {
41
+ // Check if there's already a connection to the desired database
42
+ if (connections[dbName]) {
43
+ return connections[dbName]; // Return existing connection
44
+ }
45
+
46
+ try {
47
+ // Use environment variables for connection parameters - same as in connectToMongoDB
48
+ const username = process.env.MONGODB_USER;
49
+ const password = process.env.MONGODB_PASSWORD;
50
+ const url = process.env.MONGODB_HOST;
51
+ const port = process.env.MONGODB_PORT;
52
+ const source = "?authSource=admin";
53
+
54
+ const connectionString = `mongodb://${username}:${password}@${url}:${port}/${dbName}${source}`;
55
+ const dbConnection = await mongoose.createConnection(connectionString, {
56
+ useNewUrlParser: true,
57
+ });
58
+
59
+ connections[dbName] = dbConnection; // Store the connection for reuse
60
+ console.log(`Switched to database: ${dbName}`);
61
+ return dbConnection;
62
+ } catch (err) {
63
+ console.error(`Error switching to database: ${dbName}`, err);
64
+ throw err;
65
+ }
66
+ }
67
+
68
+ // Importing all model files (Note: models may need to be re-registered for different connections)
69
+ // This maintains backward compatibility for existing services
70
+ const models = {
71
+ User: require("./src/models/user"),
72
+ Company: require("./src/models/company"),
73
+ Customer: require("./src/models/customer"),
74
+ FacilityEmailDetails: require("./src/models/email"),
75
+ Module: require("./src/models/module"),
76
+ Facility: require("./src/models/facility"),
77
+ RefreshToken: require("./src/models/refresh_token"),
78
+ ApiLog: require("./src/models/apilog"),
79
+ ArchivedApiLog: require("./src/models/archivedapilog"),
80
+ FacilityAsset: require("./src/models/facilityasset"),
81
+ Unit: require("./src/models/units"),
82
+ FAQ: require("./src/models/faq"),
83
+ UnitAsset: require("./src/models/unitasset"),
84
+ CombinedUnit: require("./src/models/combinedUnits"),
85
+ Message: require("./src/models/message"),
86
+ SMSAfricastalking: require("./src/models/sms_africastalking"),
87
+ SMSMeliora: require("./src/models/sms_meliora"),
88
+ EntryExit: require("./src/models/entry_exit"),
89
+ Guard: require("./src/models/guard"),
90
+ Visitor: require("./src/models/visitor"),
91
+ VisitLog: require("./src/models/visitLog"),
92
+ Settings: require("./src/models/settings"),
93
+ Levy: require("./src/models/levy"),
94
+ LevyType: require("./src/models/levytype"),
95
+ LevyContract: require("./src/models/levycontract"),
96
+ Invoice: require("./src/models/invoice"),
97
+ CombinedInvoice: require("./src/models/combined_invoice"),
98
+ InvoiceGeneration: require("./src/models/invoice_generation_approval"),
99
+ ShortUrl: require("./src/models/short_urls"),
100
+ InvoicingSchedule: require("./src/models/invoicing_schedule"),
101
+ Reminder: require("./src/models/reminder"),
102
+ Penalty: require("./src/models/penalty"),
103
+ Notifiaction: require("./src/models/notification"),
104
+ Resident: require("./src/models/resident"),
105
+ Asset: require("./src/models/asset"),
106
+ DutyRoster: require("./src/models/dutyroster"),
107
+ LeaseTemplate: require("./src/models/leasetemplate"),
108
+ Report: require("./src/models/report"),
109
+ Ticket: require("./src/models/tickets"),
110
+ Rating: require("./src/models/facility_rating"),
111
+ Stocksandspare: require("./src/models/stocksandspare"),
112
+ ServiceVendor: require("./src/models/maintenance_service_vendor"),
113
+ MaintenanceServices: require("./src/models/maintenance_services"),
114
+ StockRequisition: require("./src/models/maintenancerequisition"),
115
+ LeaseAgreement: require("./src/models/leaseagreement"),
116
+ WorkOrder: require("./src/models/workorder"),
117
+ ValueAddedService: require("./src/models/valueaddedservices"),
118
+ VasInvoice: require("./src/models/vasinvoice"),
119
+ VasVendor: require("./src/models/vasvendor"),
120
+ Staff: require("./src/models/staff"),
121
+ ServiceRequest: require("./src/models/servicerequest"),
122
+ CountryTaxRate: require("./src/models/country_tax"),
123
+ WaterMeter: require("./src/models/water_meters"),
124
+ DailyConsumption: require("./src/models/smart_meter_daily_consumption"),
125
+ WaterMeterSettings: require("./src/models/water_meter_settings"),
126
+ WaterCombinedMeterAccount: require("./src/models/water_meter_combined_accounts"),
127
+ AnalogBilling: require("./src/models/water_meter_billing"),
128
+ MeterSize: require("./src/models/water_meter_size"),
129
+ WaterInvoice: require("./src/models/water_invoice"),
130
+ MeterProtocol: require("./src/models/water_meter_communication"),
131
+ MeterManufacturer: require("./src/models/water_meter_manufacturer"),
132
+ SmsNotification: require("./src/models/sms_balance_notification"),
133
+ MeterIotCard: require("./src/models/water_meter_iot_cards"),
134
+ MetersDelivery: require("./src/models/water_meters_delivery"),
135
+ Notification: require("./src/models/notification"),
136
+ Concentrator: require("./src/models/water_meter_concentrator"),
137
+ Handover: require("./src/models/handover"),
138
+ Budget: require("./src/models/budget"),
139
+ BudgetCategory: require("./src/models/budgetCategory"),
140
+ Expense: require("./src/models/expense"),
141
+ ExpenseCategory: require("./src/models/expense_category"),
142
+ InvoiceSettings: require("./src/models/levy_invoice_settings"),
143
+ Account: require("./src/models/account"),
144
+ FacilityPaymentDetails: require("./src/models/facility_payment_details"),
145
+ DefaultPaymentDetails: require("./src/models/default_payment_details"),
146
+ Currency: require("./src/models/currency_settings"),
147
+ WaterMeterAccount: require("./src/models/water_meter_account"),
148
+ WaterMeterLoanDeduction: require("./src/models/water_meter_loan_deduction"),
149
+ SingleDayWaterMeterHistory: require("./src/models/water_meter_single_day_history"),
150
+ DailyWaterMeterHistory: require("./src/models/water_meter_daily_history"),
151
+ MonthlyWaterMeterHistory: require("./src/models/water_meter_monthly_history"),
152
+ WaterPrepaidCredit: require("./src/models/water_prepaid_credit"),
153
+ WaterPrepaidDebit: require("./src/models/water_prepaid_debit"),
154
+ MeterLog: require("./src/models/water_meter_communication_logs"),
155
+ CashPayment: require("./src/models/cashpayment"),
156
+ VasPayment: require("./src/models/vas_payments"),
157
+ VasInvoicesQuickBooks: require("./src/models/vas_invoices_upload"),
158
+ ServiceChargePayment: require("./src/models/service_charge_payments"),
159
+ ServiceChargeInvoiceUpload: require("./src/models/service_charge_invoice_upload"),
160
+ Campaign: require("./src/models/campaigns"),
161
+ InspectionItem: require("./src/models/item_inspection"),
162
+ Supplier: require("./src/models/suppliers"),
163
+ PurchaseRequest: require("./src/models/purchase_request"),
164
+ PurchaseOrder: require("./src/models/purchase_order"),
165
+ PaymentTermMark: require("./src/models/paymentTermsMarks"),
166
+ DeliveryTimeMark: require("./src/models/deliveryTimeMarks"),
167
+ RFQDetails: require("./src/models/rfq_details"),
168
+ RFQResponse: require("./src/models/rfq_response"),
169
+ ApprovalWorkflow: require("./src/models/approvalsWorkflows"),
170
+ CommonAreaElectricityReading: require("./src/models/common_area_electricity"),
171
+ CommonAreaWaterReading: require("./src/models/common_area_water"),
172
+ CommonAreaGeneratorReading: require("./src/models/common_area_generator"),
173
+ CommonAreaUtilityAlert: require("./src/models/common_area_utility_alert"),
174
+ BookingProperty: require("./src/models/bookingproperty"),
175
+ BookingReservation: require("./src/models/bookingreservation"),
176
+ BookingConfig: require("./src/models/bookingconfig"),
177
+ BookingAnalytics: require("./src/models/bookinganalytics"),
178
+ BookingInvoice: require("./src/models/booking_invoice"),
179
+ BankDetails: require("./src/models/bankdetails"),
180
+ RevenueRecord: require("./src/models/bookingrevenuerecord"),
181
+ GLAccount: require("./src/models/gl_accounts"),
182
+ GLEntry: require("./src/models/gl_entries"),
183
+ GLAccountDoubleEntries: require("./src/models/gl_account_double_entries"),
184
+ PendingCredential: require("./src/models/pendingCredentials"),
185
+ UnitManagementTemplate: require("./src/models/unitManagementTemplate"),
186
+ PropertyManagerRevenue: require("./src/models/propertyManagerRevenue"),
187
+ PropertyManagerContract: require("./src/models/propertyManagerContract"),
188
+ BillerAddress: require("./src/models/billerAddress"),
189
+ AssetAssignment: require("./src/models/assetsAssignment"),
190
+ Wallet: require("./src/models/wallet"),
191
+ WalletTransaction: require("./src/models/wallet_transactions"),
192
+ GoodsReceivedNote: require("./src/models/goodsReceivedNotes"),
193
+ CommunicationStatus: require("./src/models/communication_status"),
194
+ MeterCommandQueue: require("./src/models/water_meter_Command_Queue"),
195
+ FacilityDepartment: require("./src/models/facility_departements"),
196
+ EmailSmsQueue: require("./src/models/email_sms_queue"),
197
+ PurchaseOrderInvoice: require("./src/models/purchaseOrderInvoice"),
198
+ PowerMeterCustomerBand: require("./src/models/powerMeterCustomerBand"),
199
+ PowerMeterCommunicationProtocol: require("./src/models/powerMeterCommunicationProtocol"),
200
+ PowerMeterDailyReading: require("./src/models/powerMeterDailyReading"),
201
+ PowerMeterPowerCharge: require("./src/models/powerMeterPowerCharges"),
202
+ PowerMeterGateway: require("./src/models/powerMeterGateways"),
203
+ PowerMeters: require("./src/models/powerMeters"),
204
+ PowerMeterSingleDayReading: require("./src/models/powerMeterSingleDayReading"),
205
+ PowerMeterAccount: require("./src/models/power_meter_account"),
206
+ PowerMeterLog: require("./src/models/power_meter_command_logs"),
207
+ PowerMeterManufacturer: require("./src/models/powerMetersManufacturer"),
208
+ PowerMeterMonthlyReading: require("./src/models/powerMeterMonthlyReading"),
209
+ PowerMeterSettings: require("./src/models/powerMeterSettings"),
210
+ PowerPrepaidDebit: require("./src/models/power_prepaid_debits"),
211
+ PowerPrepaidCredit: require("./src/models/power_prepaid_credits"),
212
+ PowerNegativeBalance: require("./src/models/power_meter_negative_balance"),
213
+ PowerCommandQueue: require("./src/models/power_meter_command_queue"),
214
+ PowerNotification: require("./src/models/power_sms_notification"),
215
+ PowerPrepaidOrder: require("./src/models/power_prepaid_orders"),
216
+ FacilityWalletTransactionsMetadata: require("./src/models/facilityWalletTransactionsMetadata"),
217
+ NegativeBalance: require("./src/models/water_meter_negative_amounts"),
218
+ MasterWorkplan: require("./src/models/master_workplan"),
219
+ MasterWorkplanChild: require("./src/models/master_workplan_child"),
220
+ DutyRosterChecklist: require("./src/models/dutyRosterChecklist"),
221
+ AuditTrail: require("./src/models/auditTrail"),
222
+ DailyChecklist: require("./src/models/dailyChecklist"),
223
+ CoreInvoiceSettings: require("./src/models/coreInvoiceSettings"),
224
+ FacilityInvoice: require("./src/models/facilityInvoice"),
225
+ CoreBaseSettings: require("./src/models/coreBaseSettings"),
226
+ Recipient: require("./src/models/facilityInvoiceRecipient"),
227
+ FacilityBillingPrice: require("./src/models/facilityBillingPrices"),
228
+ FacilityInvoicePayment: require("./src/models/facilityInvoicePayment"),
229
+ CommunicationUserOpt: require("./src/models/communication_user_opt"),
230
+ Agent: require("./src/models/agents"),
231
+ AgentPerformance: require("./src/models/agent_performance"),
232
+ CustomerTicket: require("./src/models/customer_tickets"),
233
+ CustomerSurvey: require("./src/models/customer_surveys"),
234
+ KnowledgeBase: require("./src/models/knowledge_base"),
235
+ KnowledgeBaseRating: require("./src/models/knowledge_base_rating"),
236
+ AgentNotification: require("./src/models/agent_notifications"),
237
+ TicketCategory: require("./src/models/tickets_category"),
238
+ InspectionCategory: require("./src/models/inspection_category"),
239
+ AgentRole: require("./src/models/agent_roles"),
240
+ CustomerSatisfactionSurvey: require("./src/models/customer_satisfaction_survey"),
241
+ AgentDepartment: require("./src/models/agent_departments"),
242
+ DocumentType: require("./src/models/document_type"),
243
+ Counter: require("./src/models/counter_schema"),
244
+ ZohoIntegration: require("./src/models/zohoIntegration"),
245
+ ZohoItem: require("./src/models/zohoItem"),
246
+ ZohoAccount: require("./src/models/zohoAccount"),
247
+ QuickBooksConfig: require("./src/models/quickbooks_config"),
248
+ PrivacyPolicy: require("./src/models/privacy_policy"),
249
+ TermsAndConditions: require("./src/models/terms_and_conditions"),
250
+ CommunityGuidelines: require("./src/models/community_guidelines")
251
+ };
252
+
253
+ // Function to get models dynamically from a specific database connection
254
+ async function getModelFromDB(dbConnection, modelName, schema) {
255
+ if (!dbConnection.models[modelName]) {
256
+ return dbConnection.model(modelName, schema); // Register the model in the db connection
257
+ }
258
+ return dbConnection.models[modelName]; // Return existing model if already registered
259
+ }
260
+
261
+ // Function to initialize service with specific models - NEW FEATURE
262
+ function initializeService(modelNames = []) {
263
+ let currentConnection = null;
264
+
265
+ // Enhanced connect function that only registers specified models
266
+ async function connectWithModels(
267
+ dbName,
268
+ secured,
269
+ username,
270
+ password,
271
+ url,
272
+ port,
273
+ ) {
274
+ await connectToMongoDB(dbName, secured, username, password, url, port);
275
+ currentConnection = mongoose.connection;
276
+
277
+ // Only register the models specified in modelNames
278
+ modelNames.forEach((modelName) => {
279
+ if (models[modelName]) {
280
+ let schema;
281
+
282
+ // Extract schema from the imported model
283
+ if (models[modelName].schema) {
284
+ schema = models[modelName].schema;
285
+ } else {
286
+ console.warn(`Unable to extract schema from model ${modelName}`);
287
+ return;
288
+ }
289
+
290
+ if (!currentConnection.models[modelName]) {
291
+ const modelInstance = currentConnection.model(modelName, schema);
292
+ // Make model globally accessible through payservedb
293
+ module.exports[modelName] = modelInstance;
294
+ } else {
295
+ module.exports[modelName] = currentConnection.models[modelName];
296
+ }
297
+ } else {
298
+ console.warn(`Model ${modelName} not found in models registry`);
299
+ }
300
+ });
301
+
302
+ return module.exports;
303
+ }
304
+
305
+ return {
306
+ connectToMongoDB: connectWithModels,
307
+ switchDB,
308
+ getModelFromDB,
309
+ getCurrentConnection: () => currentConnection,
310
+ };
311
+ }
312
+
313
+ module.exports = {
314
+ connectToMongoDB,
315
+ switchDB,
316
+ getModelFromDB,
317
+ initializeService,
318
+ ...models,
319
+ };