payservedb 5.9.8 → 6.0.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/index.js CHANGED
@@ -4,6 +4,9 @@ require("dotenv").config();
4
4
  // Maintain a record of open connections for each database
5
5
  const connections = {};
6
6
 
7
+ // Model registry to track loaded models
8
+ const modelRegistry = {};
9
+
7
10
  // Utility function to connect to MongoDB
8
11
  async function connectToMongoDB(
9
12
  dbName,
@@ -57,139 +60,150 @@ async function switchDB(dbName) {
57
60
  });
58
61
 
59
62
  connections[dbName] = dbConnection; // Store the connection for reuse
60
- console.log(`Switched to database: ${dbName}`);
63
+ // console.log(Switched to database: ${dbName});
61
64
  return dbConnection;
62
65
  } catch (err) {
63
- console.error(`Error switching to database: ${dbName}`, err);
66
+ // console.error(Error switching to database: ${dbName}, err);
64
67
  throw err;
65
68
  }
66
69
  }
67
70
 
68
- // Importing all model files (Note: models may need to be re-registered for different connections)
69
- const models = {
70
- User: require("./src/models/user"),
71
- AuditLog: require("./src/models/auditlog"),
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
- ArchivedAuditLog: require("./src/models/archivedauditlog"),
81
- FacilityAsset: require("./src/models/facilityasset"),
82
- Unit: require("./src/models/units"),
83
- FAQ: require("./src/models/faq"),
84
- UnitAsset: require("./src/models/unitasset"),
85
- CombinedUnit: require("./src/models/combinedUnits"),
86
- Message: require("./src/models/message"),
87
- SMSAfricastalking: require("./src/models/sms_africastalking"),
88
- SMSMeliora: require("./src/models/sms_meliora"),
89
- EntryExit: require("./src/models/entry_exit"),
90
- Guard: require("./src/models/guard"),
91
- Visitor: require("./src/models/visitor"),
92
- VisitLog: require("./src/models/visitLog"),
93
- Settings: require("./src/models/settings"),
94
- Levy: require("./src/models/levy"),
95
- LevyType: require("./src/models/levytype"),
96
- LevyContract: require("./src/models/levycontract"),
97
- Invoice: require("./src/models/invoice"),
98
- Reminder: require("./src/models/reminder"),
99
- Penalty: require("./src/models/penalty"),
100
- Notifiaction: require("./src/models/notification"),
101
- Resident: require("./src/models/resident"),
102
- Asset: require("./src/models/asset"),
103
- DutyRoster: require("./src/models/dutyroster"),
104
- LeaseTemplate: require("./src/models/leasetemplate"),
105
- Report: require("./src/models/report"),
106
- Ticket: require("./src/models/tickets"),
107
- Stocksandspare: require("./src/models/stocksandspare"),
108
- ServiceVendor: require("./src/models/maintenance_service_vendor"),
109
- MaintenanceServices: require("./src/models/maintenance_services"),
110
- StockRequisition: require("./src/models/maintenancerequisition"),
111
- LeaseAgreement: require("./src/models/leaseagreement"),
112
- WorkOrder: require("./src/models/workorder"),
113
- ValueAddedService: require("./src/models/valueaddedservices"),
114
- VasInvoice: require("./src/models/vasinvoice"),
115
- VasVendor: require("./src/models/vasvendor"),
116
- Staff: require("./src/models/staff"),
117
- ServiceRequest: require("./src/models/servicerequest"),
118
- CountryTaxRate: require("./src/models/country_tax"),
119
- WaterMeter: require("./src/models/water_meters"),
120
- DailyConsumption: require("./src/models/smart_meter_daily_consumption"),
121
- WaterMeterSettings: require("./src/models/water_meter_settings"),
122
- AnalogBilling: require("./src/models/water_meter_billing"),
123
- MeterSize: require("./src/models/water_meter_size"),
124
- WaterInvoice: require("./src/models/water_invoice"),
125
- MeterProtocol: require("./src/models/water_meter_communication"),
126
- MeterManufacturer: require("./src/models/water_meter_manufacturer"),
127
- MeterIotCard: require("./src/models/water_meter_iot_cards"),
128
- MetersDelivery: require("./src/models/water_meters_delivery"),
129
- Notification: require("./src/models/notification"),
130
- Concentrator: require("./src/models/water_meter_concentrator"),
131
- Handover: require("./src/models/handover"),
132
- Budget: require("./src/models/budget"),
133
- BudgetCategory: require("./src/models/budgetCategory"),
134
- Expense: require("./src/models/expense"),
135
- ExpenseCategory: require("./src/models/expense_category"),
136
- InvoiceSettings: require("./src/models/levy_invoice_settings"),
137
- Account: require("./src/models/account"),
138
- FacilityPaymentDetails: require("./src/models/facility_payment_details"),
139
- DefaultPaymentDetails: require("./src/models/default_payment_details"),
140
- Currency: require("./src/models/currency_settings"),
141
- WaterMeterAccount: require("./src/models/water_meter_account"),
142
- SingleDayWaterMeterHistory: require("./src/models/water_meter_single_day_history"),
143
- DailyWaterMeterHistory: require("./src/models/water_meter_daily_history"),
144
- MonthlyWaterMeterHistory: require("./src/models/water_meter_monthly_history"),
145
- WaterPrepaidCredit: require("./src/models/water_prepaid_credit"),
146
- WaterPrepaidDebit: require("./src/models/water_prepaid_debit"),
147
- MeterLog: require("./src/models/water_meter_communication_logs"),
148
- CashPayment: require("./src/models/cashpayment"),
149
- VasPayment: require("./src/models/vas_payments"),
150
- VasInvoicesQuickBooks: require("./src/models/vas_invoices_upload"),
151
- ServiceChargePayment: require("./src/models/service_charge_payments"),
152
- ServiceChargeInvoiceUpload: require("./src/models/service_charge_invoice_upload"),
153
- Campaign: require("./src/models/campaigns"),
154
- InspectionItem: require("./src/models/item_inspection"),
155
- Supplier: require("./src/models/suppliers"),
156
- PurchaseRequest: require("./src/models/purchase_request"),
157
- PurchaseOrder: require("./src/models/purchase_order"),
158
- PaymentTermMark: require("./src/models/paymentTermsMarks"),
159
- DeliveryTimeMark: require("./src/models/deliveryTimeMarks"),
160
- RFQDetails: require("./src/models/rfq_details"),
161
- RFQResponse: require("./src/models/rfq_response"),
162
- ApprovalWorkflow: require("./src/models/approvalsWorkflows"),
163
- CommonAreaElectricityReading: require("./src/models/common_area_electricity"),
164
- CommonAreaWaterReading: require("./src/models/common_area_water"),
165
- CommonAreaGeneratorReading: require("./src/models/common_area_generator"),
166
- CommonAreaUtilityAlert: require("./src/models/common_area_utility_alert"),
167
- BookingProperty: require("./src/models/bookingproperty"),
168
- BookingReservation: require("./src/models/bookingreservation"),
169
- BookingConfig: require("./src/models/bookingconfig"),
170
- BookingAnalytics: require("./src/models/bookinganalytics"),
171
- BookingInvoice: require("./src/models/booking_invoice"),
172
- BankDetails: require("./src/models/bankdetails"),
173
- RevenueRecord: require("./src/models/bookingrevenuerecord"),
174
- GLAccount: require("./src/models/gl_accounts"),
175
- GLEntry: require("./src/models/gl_entries"),
176
- GLAccountDoubleEntries: require("./src/models/gl_account_double_entries"),
177
- PendingCredential: require("./src/models/pendingCredentials"),
178
- UnitManagementTemplate: require("./src/models/unitManagementTemplate"),
179
- PropertyManagerRevenue: require("./src/models/propertyManagerRevenue"),
180
- PropertyManagerContract: require("./src/models/propertyManagerContract"),
181
- BillerAddress: require("./src/models/billerAddress"),
182
- AssetAssignment: require("./src/models/assetsAssignment"),
183
- Wallet: require("./src/models/wallet"),
184
- WalletTransaction: require("./src/models/wallet_transactions"),
185
- GoodsReceivedNote: require("./src/models/goodsReceivedNotes"),
186
- MeterCommandQueue: require("./src/models/water_meter_Command_Queue"),
187
- FacilityDepartment: require("./src/models/facility_departements"),
188
- EmailSmsQueue: require("./src/models/email_sms_queue"),
189
- PurchaseOrderInvoice: require("./src/models/purchaseOrderInvoice")
190
-
71
+ // Model path registry - maps model names to their file paths
72
+ const modelPaths = {
73
+ User: "./src/models/user",
74
+ AuditLog: "./src/models/auditlog",
75
+ Company: "./src/models/company",
76
+ Customer: "./src/models/customer",
77
+ FacilityEmailDetails: "./src/models/email",
78
+ Module: "./src/models/module",
79
+ Facility: "./src/models/facility",
80
+ RefreshToken: "./src/models/refresh_token",
81
+ ApiLog: "./src/models/apilog",
82
+ ArchivedApiLog: "./src/models/archivedapilog",
83
+ ArchivedAuditLog: "./src/models/archivedauditlog",
84
+ FacilityAsset: "./src/models/facilityasset",
85
+ Unit: "./src/models/units",
86
+ FAQ: "./src/models/faq",
87
+ UnitAsset: "./src/models/unitasset",
88
+ CombinedUnit: "./src/models/combinedUnits",
89
+ Message: "./src/models/message",
90
+ SMSAfricastalking: "./src/models/sms_africastalking",
91
+ SMSMeliora: "./src/models/sms_meliora",
92
+ EntryExit: "./src/models/entry_exit",
93
+ Guard: "./src/models/guard",
94
+ Visitor: "./src/models/visitor",
95
+ VisitLog: "./src/models/visitLog",
96
+ Settings: "./src/models/settings",
97
+ Levy: "./src/models/levy",
98
+ LevyType: "./src/models/levytype",
99
+ LevyContract: "./src/models/levycontract",
100
+ Invoice: "./src/models/invoice",
101
+ Reminder: "./src/models/reminder",
102
+ Penalty: "./src/models/penalty",
103
+ Notification: "./src/models/notification",
104
+ Resident: "./src/models/resident",
105
+ Asset: "./src/models/asset",
106
+ DutyRoster: "./src/models/dutyroster",
107
+ LeaseTemplate: "./src/models/leasetemplate",
108
+ Report: "./src/models/report",
109
+ Ticket: "./src/models/tickets",
110
+ Stocksandspare: "./src/models/stocksandspare",
111
+ ServiceVendor: "./src/models/maintenance_service_vendor",
112
+ MaintenanceServices: "./src/models/maintenance_services",
113
+ StockRequisition: "./src/models/maintenancerequisition",
114
+ LeaseAgreement: "./src/models/leaseagreement",
115
+ WorkOrder: "./src/models/workorder",
116
+ ValueAddedService: "./src/models/valueaddedservices",
117
+ VasInvoice: "./src/models/vasinvoice",
118
+ VasVendor: "./src/models/vasvendor",
119
+ Staff: "./src/models/staff",
120
+ ServiceRequest: "./src/models/servicerequest",
121
+ CountryTaxRate: "./src/models/country_tax",
122
+ WaterMeter: "./src/models/water_meters",
123
+ DailyConsumption: "./src/models/smart_meter_daily_consumption",
124
+ WaterMeterSettings: "./src/models/water_meter_settings",
125
+ AnalogBilling: "./src/models/water_meter_billing",
126
+ MeterSize: "./src/models/water_meter_size",
127
+ WaterInvoice: "./src/models/water_invoice",
128
+ MeterProtocol: "./src/models/water_meter_communication",
129
+ MeterManufacturer: "./src/models/water_meter_manufacturer",
130
+ MeterIotCard: "./src/models/water_meter_iot_cards",
131
+ MetersDelivery: "./src/models/water_meters_delivery",
132
+ Concentrator: "./src/models/water_meter_concentrator",
133
+ Handover: "./src/models/handover",
134
+ Budget: "./src/models/budget",
135
+ BudgetCategory: "./src/models/budgetCategory",
136
+ Expense: "./src/models/expense",
137
+ ExpenseCategory: "./src/models/expense_category",
138
+ InvoiceSettings: "./src/models/levy_invoice_settings",
139
+ Account: "./src/models/account",
140
+ FacilityPaymentDetails: "./src/models/facility_payment_details",
141
+ DefaultPaymentDetails: "./src/models/default_payment_details",
142
+ Currency: "./src/models/currency_settings",
143
+ WaterMeterAccount: "./src/models/water_meter_account",
144
+ SingleDayWaterMeterHistory: "./src/models/water_meter_single_day_history",
145
+ DailyWaterMeterHistory: "./src/models/water_meter_daily_history",
146
+ MonthlyWaterMeterHistory: "./src/models/water_meter_monthly_history",
147
+ WaterPrepaidCredit: "./src/models/water_prepaid_credit",
148
+ WaterPrepaidDebit: "./src/models/water_prepaid_debit",
149
+ MeterLog: "./src/models/water_meter_communication_logs",
150
+ CashPayment: "./src/models/cashpayment",
151
+ VasPayment: "./src/models/vas_payments",
152
+ VasInvoicesQuickBooks: "./src/models/vas_invoices_upload",
153
+ ServiceChargePayment: "./src/models/service_charge_payments",
154
+ ServiceChargeInvoiceUpload: "./src/models/service_charge_invoice_upload",
155
+ Campaign: "./src/models/campaigns",
156
+ InspectionItem: "./src/models/item_inspection",
157
+ Supplier: "./src/models/suppliers",
158
+ PurchaseRequest: "./src/models/purchase_request",
159
+ PurchaseOrder: "./src/models/purchase_order",
160
+ PaymentTermMark: "./src/models/paymentTermsMarks",
161
+ DeliveryTimeMark: "./src/models/deliveryTimeMarks",
162
+ RFQDetails: "./src/models/rfq_details",
163
+ RFQResponse: "./src/models/rfq_response",
164
+ ApprovalWorkflow: "./src/models/approvalsWorkflows",
165
+ CommonAreaElectricityReading: "./src/models/common_area_electricity",
166
+ CommonAreaWaterReading: "./src/models/common_area_water",
167
+ CommonAreaGeneratorReading: "./src/models/common_area_generator",
168
+ CommonAreaUtilityAlert: "./src/models/common_area_utility_alert",
169
+ BookingProperty: "./src/models/bookingproperty",
170
+ BookingReservation: "./src/models/bookingreservation",
171
+ BookingConfig: "./src/models/bookingconfig",
172
+ BookingAnalytics: "./src/models/bookinganalytics",
173
+ BookingInvoice: "./src/models/booking_invoice",
174
+ BankDetails: "./src/models/bankdetails",
175
+ RevenueRecord: "./src/models/bookingrevenuerecord",
176
+ GLAccount: "./src/models/gl_accounts",
177
+ GLEntry: "./src/models/gl_entries",
178
+ GLAccountDoubleEntries: "./src/models/gl_account_double_entries",
179
+ PendingCredential: "./src/models/pendingCredentials",
180
+ UnitManagementTemplate: "./src/models/unitManagementTemplate",
181
+ PropertyManagerRevenue: "./src/models/propertyManagerRevenue",
182
+ PropertyManagerContract: "./src/models/propertyManagerContract",
183
+ BillerAddress: "./src/models/billerAddress",
184
+ AssetAssignment: "./src/models/assetsAssignment",
185
+ Wallet: "./src/models/wallet",
186
+ WalletTransaction: "./src/models/wallet_transactions",
187
+ GoodsReceivedNote: "./src/models/goodsReceivedNotes",
188
+ MeterCommandQueue: "./src/models/water_meter_Command_Queue",
189
+ FacilityDepartment: "./src/models/facility_departements",
190
+ EmailSmsQueue: "./src/models/email_sms_queue",
191
+ PurchaseOrderInvoice: "./src/models/purchaseOrderInvoice"
191
192
  };
192
193
 
194
+ // Function to load specific models on demand
195
+ function loadModel(modelName) {
196
+ if (!modelPaths[modelName]) {
197
+ throw new Error(Model in registry);
198
+ }
199
+
200
+ if (!modelRegistry[modelName]) {
201
+ modelRegistry[modelName] = require(modelPaths[modelName]);
202
+ }
203
+
204
+ return modelRegistry[modelName];
205
+ }
206
+
193
207
  // Function to get models dynamically from a specific database connection
194
208
  async function getModelFromDB(dbConnection, modelName, schema) {
195
209
  if (!dbConnection.models[modelName]) {
@@ -198,9 +212,85 @@ async function getModelFromDB(dbConnection, modelName, schema) {
198
212
  return dbConnection.models[modelName]; // Return existing model if already registered
199
213
  }
200
214
 
215
+ // Function to load multiple models at once
216
+ function loadModels(modelNames) {
217
+ const models = {};
218
+ modelNames.forEach(modelName => {
219
+ models[modelName] = loadModel(modelName);
220
+ });
221
+ return models;
222
+ }
223
+
224
+ // Function to get available model names
225
+ function getAvailableModels() {
226
+ return Object.keys(modelPaths);
227
+ }
228
+
229
+ // Function to initialize service with specific models
230
+ function initializeService(modelNames = []) {
231
+ const serviceSchemas = {};
232
+ const serviceModels = {};
233
+ let currentConnection = null;
234
+
235
+ // Load schemas for specified models
236
+ modelNames.forEach(modelName => {
237
+ if (!modelPaths[modelName]) {
238
+ // console.warn(Warning: Model ${modelName} not found in registry);
239
+ return;
240
+ }
241
+ serviceSchemas[modelName] = loadModel(modelName);
242
+ });
243
+
244
+ // Enhanced connect function that also registers models
245
+ async function connectWithModels(dbName, secured, username, password, url, port) {
246
+ await connectToMongoDB(dbName, secured, username, password, url, port);
247
+ currentConnection = mongoose.connection;
248
+
249
+ // Register models with the current connection
250
+ modelNames.forEach(modelName => {
251
+ if (serviceSchemas[modelName] && !currentConnection.models[modelName]) {
252
+ serviceModels[modelName] = currentConnection.model(modelName, serviceSchemas[modelName]);
253
+ } else if (currentConnection.models[modelName]) {
254
+ serviceModels[modelName] = currentConnection.models[modelName];
255
+ }
256
+ });
257
+
258
+ return serviceModels;
259
+ }
260
+
261
+ // Enhanced switchDB function that also registers models
262
+ async function switchDBWithModels(dbName) {
263
+ const dbConnection = await switchDB(dbName);
264
+
265
+ // Register models with the new connection
266
+ const dbModels = {};
267
+ modelNames.forEach(modelName => {
268
+ if (serviceSchemas[modelName]) {
269
+ dbModels[modelName] = getModelFromDB(dbConnection, modelName, serviceSchemas[modelName]);
270
+ }
271
+ });
272
+
273
+ return { connection: dbConnection, models: dbModels };
274
+ }
275
+
276
+ return {
277
+ schemas: serviceSchemas,
278
+ models: serviceModels,
279
+ connectToMongoDB: connectWithModels,
280
+ switchDB: switchDBWithModels,
281
+ getModelFromDB,
282
+ loadModel,
283
+ loadModels,
284
+ getCurrentConnection: () => currentConnection
285
+ };
286
+ }
287
+
201
288
  module.exports = {
202
289
  connectToMongoDB,
203
290
  switchDB,
204
291
  getModelFromDB,
205
- ...models, // Spread operator to export all models
206
- };
292
+ loadModel,
293
+ loadModels,
294
+ getAvailableModels,
295
+ initializeService
296
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "payservedb",
3
- "version": "5.9.8",
3
+ "version": "6.0.0",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1"
@@ -25,18 +25,22 @@ const CustomerSchema = new mongoose.Schema({
25
25
  type: String,
26
26
  required: true
27
27
  },
28
- nextOfKinName: {
29
- type: String,
30
- required: true
31
- },
32
- nextOfKinRelationship: {
33
- type: String,
34
- required: true
35
- },
36
- nextOfKinContact: {
37
- type: String,
38
- required: true
39
- },
28
+ nextOfKin: [
29
+ {
30
+ name: {
31
+ type: String,
32
+ },
33
+ relationship: {
34
+ type: String,
35
+ },
36
+ phoneNumber: {
37
+ type: String,
38
+ },
39
+ email: {
40
+ type: String,
41
+ }
42
+ }
43
+ ],
40
44
  customerType: {
41
45
  type: String,
42
46
  required: true