payservedb 6.5.8 → 6.5.9

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 (141) hide show
  1. package/.env +2 -2
  2. package/index.js +277 -277
  3. package/package.json +17 -17
  4. package/src/models/account.js +35 -35
  5. package/src/models/apilog.js +18 -18
  6. package/src/models/approvalsWorkflows.js +49 -49
  7. package/src/models/archivedapilog.js +18 -18
  8. package/src/models/archivedauditlog.js +83 -83
  9. package/src/models/asset.js +92 -92
  10. package/src/models/assetsAssignment.js +64 -64
  11. package/src/models/auditTrail.js +319 -319
  12. package/src/models/auditlog.js +83 -83
  13. package/src/models/bankdetails.js +40 -40
  14. package/src/models/billerAddress.js +119 -119
  15. package/src/models/booking_invoice.js +151 -151
  16. package/src/models/bookinganalytics.js +63 -63
  17. package/src/models/bookingconfig.js +45 -45
  18. package/src/models/bookingproperty.js +122 -122
  19. package/src/models/bookingreservation.js +192 -192
  20. package/src/models/bookingrevenuerecord.js +84 -84
  21. package/src/models/budget.js +95 -95
  22. package/src/models/budgetCategory.js +19 -19
  23. package/src/models/campaigns.js +94 -94
  24. package/src/models/cashpayment.js +264 -264
  25. package/src/models/combinedUnits.js +62 -62
  26. package/src/models/common_area_electricity.js +38 -38
  27. package/src/models/common_area_generator.js +41 -41
  28. package/src/models/common_area_utility_alert.js +37 -37
  29. package/src/models/common_area_water.js +39 -39
  30. package/src/models/communication_status.js +33 -33
  31. package/src/models/company.js +53 -53
  32. package/src/models/country_tax.js +42 -42
  33. package/src/models/currency_settings.js +39 -39
  34. package/src/models/customer.js +208 -208
  35. package/src/models/dailyChecklist.js +97 -0
  36. package/src/models/default_payment_details.js +17 -17
  37. package/src/models/deliveryTimeMarks.js +18 -18
  38. package/src/models/dutyRosterChecklist.js +250 -250
  39. package/src/models/dutyroster.js +136 -136
  40. package/src/models/email.js +37 -37
  41. package/src/models/email_sms_queue.js +61 -61
  42. package/src/models/entry_exit.js +53 -53
  43. package/src/models/expense.js +99 -99
  44. package/src/models/expense_category.js +45 -45
  45. package/src/models/facility.js +61 -61
  46. package/src/models/facilityWalletTransactionsMetadata.js +236 -236
  47. package/src/models/facility_departements.js +20 -20
  48. package/src/models/facility_payment_details.js +20 -20
  49. package/src/models/facilityasset.js +25 -25
  50. package/src/models/faq.js +18 -18
  51. package/src/models/gl_account_double_entries.js +25 -25
  52. package/src/models/gl_accounts.js +56 -56
  53. package/src/models/gl_entries.js +49 -49
  54. package/src/models/goodsReceivedNotes.js +115 -115
  55. package/src/models/guard.js +47 -47
  56. package/src/models/handover.js +246 -246
  57. package/src/models/invoice.js +336 -336
  58. package/src/models/item_inspection.js +67 -67
  59. package/src/models/leaseagreement.js +226 -226
  60. package/src/models/leasetemplate.js +17 -17
  61. package/src/models/levy.js +206 -206
  62. package/src/models/levy_invoice_settings.js +26 -26
  63. package/src/models/levycontract.js +117 -117
  64. package/src/models/levytype.js +23 -23
  65. package/src/models/maintenance_service_vendor.js +38 -38
  66. package/src/models/maintenance_services.js +17 -17
  67. package/src/models/maintenancerequisition.js +31 -31
  68. package/src/models/master_workplan.js +32 -32
  69. package/src/models/master_workplan_child.js +34 -34
  70. package/src/models/message.js +38 -38
  71. package/src/models/module.js +21 -21
  72. package/src/models/notification.js +44 -44
  73. package/src/models/paymentTermsMarks.js +19 -19
  74. package/src/models/penalty.js +76 -76
  75. package/src/models/pendingCredentials.js +32 -32
  76. package/src/models/powerMeterCustomerAccount.js +78 -78
  77. package/src/models/powerMeterCustomerBand.js +14 -14
  78. package/src/models/powerMeterDailyReading.js +30 -30
  79. package/src/models/powerMeterMonthlyReading.js +34 -34
  80. package/src/models/powerMeterPowerCharges.js +53 -53
  81. package/src/models/powerMeterSettings.js +138 -138
  82. package/src/models/powerMeterSingleDayReading.js +32 -32
  83. package/src/models/powerMeters.js +65 -65
  84. package/src/models/powerMetersManufacturer.js +14 -14
  85. package/src/models/propertyManagerContract.js +556 -556
  86. package/src/models/propertyManagerRevenue.js +195 -195
  87. package/src/models/purchaseOrderInvoice.js +74 -74
  88. package/src/models/purchase_order.js +213 -213
  89. package/src/models/purchase_request.js +110 -110
  90. package/src/models/refresh_token.js +23 -23
  91. package/src/models/reminder.js +197 -197
  92. package/src/models/report.js +13 -13
  93. package/src/models/resident.js +121 -121
  94. package/src/models/rfq_details.js +131 -131
  95. package/src/models/rfq_response.js +153 -153
  96. package/src/models/service_charge_invoice_upload.js +42 -42
  97. package/src/models/service_charge_payments.js +27 -27
  98. package/src/models/servicerequest.js +55 -55
  99. package/src/models/settings.js +62 -62
  100. package/src/models/smart_meter_daily_consumption.js +44 -44
  101. package/src/models/sms_africastalking.js +20 -20
  102. package/src/models/sms_balance_notification.js +26 -26
  103. package/src/models/sms_meliora.js +20 -20
  104. package/src/models/staff.js +36 -36
  105. package/src/models/stocksandspare.js +161 -161
  106. package/src/models/suppliers.js +74 -74
  107. package/src/models/tickets.js +121 -121
  108. package/src/models/unitManagementTemplate.js +44 -44
  109. package/src/models/unitasset.js +25 -25
  110. package/src/models/units.js +117 -117
  111. package/src/models/user.js +186 -186
  112. package/src/models/valueaddedservices.js +79 -79
  113. package/src/models/vas_invoices_upload.js +50 -50
  114. package/src/models/vas_payments.js +24 -24
  115. package/src/models/vasinvoice.js +192 -192
  116. package/src/models/vasvendor.js +57 -57
  117. package/src/models/visitLog.js +86 -86
  118. package/src/models/visitor.js +67 -67
  119. package/src/models/waitlist.js +45 -45
  120. package/src/models/wallet.js +44 -44
  121. package/src/models/wallet_transactions.js +50 -50
  122. package/src/models/water_invoice.js +305 -305
  123. package/src/models/water_meter_Command_Queue.js +33 -33
  124. package/src/models/water_meter_account.js +78 -78
  125. package/src/models/water_meter_billing.js +58 -58
  126. package/src/models/water_meter_communication.js +17 -17
  127. package/src/models/water_meter_communication_logs.js +30 -30
  128. package/src/models/water_meter_concentrator.js +66 -66
  129. package/src/models/water_meter_daily_history.js +32 -32
  130. package/src/models/water_meter_iot_cards.js +34 -34
  131. package/src/models/water_meter_manufacturer.js +35 -35
  132. package/src/models/water_meter_monthly_history.js +36 -36
  133. package/src/models/water_meter_negative_amounts.js +38 -38
  134. package/src/models/water_meter_settings.js +180 -180
  135. package/src/models/water_meter_single_day_history.js +34 -34
  136. package/src/models/water_meter_size.js +15 -15
  137. package/src/models/water_meters.js +134 -134
  138. package/src/models/water_meters_delivery.js +76 -76
  139. package/src/models/water_prepaid_credit.js +47 -47
  140. package/src/models/water_prepaid_debit.js +50 -50
  141. package/src/models/workorder.js +49 -49
@@ -1,250 +1,250 @@
1
- const mongoose = require("mongoose");
2
-
3
- const DutyRosterChecklistSchema = new mongoose.Schema(
4
- {
5
- dutyRosterId: {
6
- type: mongoose.Schema.Types.ObjectId,
7
- ref: "DutyRoster",
8
- required: true,
9
- },
10
- facilityId: {
11
- type: mongoose.Schema.Types.ObjectId,
12
- ref: "Facility",
13
- required: true,
14
- },
15
- staffId: {
16
- type: mongoose.Schema.Types.ObjectId,
17
- ref: "User",
18
- required: true,
19
- },
20
- masterWorkplanId: {
21
- type: mongoose.Schema.Types.ObjectId,
22
- ref: "MasterWorkplan",
23
- required: true,
24
- },
25
- // Array of tasks with their individual dates and status
26
- tasks: [
27
- {
28
- childWorkplanId: {
29
- type: mongoose.Schema.Types.ObjectId,
30
- ref: "ChildWorkplan",
31
- required: true,
32
- },
33
- // Each task can have multiple scheduled dates
34
- scheduledDates: [
35
- {
36
- date: {
37
- type: Date,
38
- required: true,
39
- },
40
- status: {
41
- type: String,
42
- enum: [
43
- "pending",
44
- "completed",
45
- "missed",
46
- "cancelled",
47
- "in-progress",
48
- ],
49
- default: "pending",
50
- required: true,
51
- },
52
- completedAt: {
53
- type: Date,
54
- },
55
- completedBy: {
56
- type: mongoose.Schema.Types.ObjectId,
57
- ref: "User",
58
- },
59
- notes: {
60
- type: String,
61
- maxlength: 500,
62
- },
63
- // Time tracking
64
- startTime: String,
65
- endTime: String,
66
- actualDuration: Number, // in minutes
67
- },
68
- ],
69
- // Task metadata
70
- priority: {
71
- type: String,
72
- enum: ["low", "medium", "high", "critical"],
73
- default: "medium",
74
- },
75
- estimatedDuration: Number, // in minutes
76
- isRecurring: {
77
- type: Boolean,
78
- default: false,
79
- },
80
- recurringPattern: {
81
- type: String,
82
- enum: ["daily", "weekly", "monthly", "custom"],
83
- },
84
- },
85
- ],
86
- // Overall checklist metadata
87
- period: {
88
- startDate: {
89
- type: Date,
90
- required: true,
91
- },
92
- endDate: {
93
- type: Date,
94
- required: true,
95
- },
96
- },
97
- // Summary statistics
98
- summary: {
99
- totalTasks: {
100
- type: Number,
101
- default: 0,
102
- },
103
- completedTasks: {
104
- type: Number,
105
- default: 0,
106
- },
107
- pendingTasks: {
108
- type: Number,
109
- default: 0,
110
- },
111
- missedTasks: {
112
- type: Number,
113
- default: 0,
114
- },
115
- completionPercentage: {
116
- type: Number,
117
- default: 0,
118
- min: 0,
119
- max: 100,
120
- },
121
- },
122
- status: {
123
- type: String,
124
- enum: ["active", "completed", "expired", "cancelled"],
125
- default: "active",
126
- },
127
- },
128
- {
129
- timestamps: true,
130
- },
131
- );
132
-
133
- // Pre-save middleware to update summary statistics
134
- DutyRosterChecklistSchema.pre("save", function (next) {
135
- // Validate period dates
136
- if (this.period.startDate >= this.period.endDate) {
137
- return next(new Error("End date must be after start date"));
138
- }
139
-
140
- // Calculate summary statistics
141
- let totalScheduledDates = 0;
142
- let completedScheduledDates = 0;
143
- let pendingScheduledDates = 0;
144
- let missedScheduledDates = 0;
145
-
146
- this.tasks.forEach((task) => {
147
- task.scheduledDates.forEach((scheduledDate) => {
148
- totalScheduledDates++;
149
- switch (scheduledDate.status) {
150
- case "completed":
151
- completedScheduledDates++;
152
- break;
153
- case "pending":
154
- case "in-progress":
155
- pendingScheduledDates++;
156
- break;
157
- case "missed":
158
- missedScheduledDates++;
159
- break;
160
- }
161
- });
162
- });
163
-
164
- this.summary.totalTasks = totalScheduledDates;
165
- this.summary.completedTasks = completedScheduledDates;
166
- this.summary.pendingTasks = pendingScheduledDates;
167
- this.summary.missedTasks = missedScheduledDates;
168
- this.summary.completionPercentage =
169
- totalScheduledDates > 0
170
- ? Math.round((completedScheduledDates / totalScheduledDates) * 100)
171
- : 0;
172
-
173
- next();
174
- });
175
-
176
- // Static method to generate dates between start and end date
177
- DutyRosterChecklistSchema.statics.generateDateRange = function (
178
- startDate,
179
- endDate,
180
- frequency = "daily",
181
- ) {
182
- const dates = [];
183
- const current = new Date(startDate);
184
- const end = new Date(endDate);
185
-
186
- while (current <= end) {
187
- dates.push(new Date(current));
188
-
189
- switch (frequency) {
190
- case "daily":
191
- current.setDate(current.getDate() + 1);
192
- break;
193
- case "weekly":
194
- current.setDate(current.getDate() + 7);
195
- break;
196
- case "monthly":
197
- current.setMonth(current.getMonth() + 1);
198
- break;
199
- default:
200
- current.setDate(current.getDate() + 1);
201
- }
202
- }
203
-
204
- return dates;
205
- };
206
-
207
- // Instance method to update task status
208
- DutyRosterChecklistSchema.methods.updateTaskStatus = function (
209
- taskId,
210
- dateId,
211
- status,
212
- completedBy,
213
- notes,
214
- ) {
215
- const task = this.tasks.id(taskId);
216
- if (!task) {
217
- throw new Error("Task not found");
218
- }
219
-
220
- const scheduledDate = task.scheduledDates.id(dateId);
221
- if (!scheduledDate) {
222
- throw new Error("Scheduled date not found");
223
- }
224
-
225
- scheduledDate.status = status;
226
- if (status === "completed") {
227
- scheduledDate.completedAt = new Date();
228
- scheduledDate.completedBy = completedBy;
229
- }
230
- if (notes) {
231
- scheduledDate.notes = notes;
232
- }
233
-
234
- return this.save();
235
- };
236
-
237
- // Add indexes for efficient queries
238
- DutyRosterChecklistSchema.index({ dutyRosterId: 1 });
239
- DutyRosterChecklistSchema.index({ facilityId: 1, staffId: 1 });
240
- DutyRosterChecklistSchema.index({ masterWorkplanId: 1 });
241
- DutyRosterChecklistSchema.index({ "period.startDate": 1, "period.endDate": 1 });
242
- DutyRosterChecklistSchema.index({ "tasks.scheduledDates.date": 1 });
243
- DutyRosterChecklistSchema.index({ status: 1 });
244
-
245
- const DutyRosterChecklist = mongoose.model(
246
- "DutyRosterChecklist",
247
- DutyRosterChecklistSchema,
248
- );
249
-
250
- module.exports = DutyRosterChecklist;
1
+ const mongoose = require("mongoose");
2
+
3
+ const DutyRosterChecklistSchema = new mongoose.Schema(
4
+ {
5
+ dutyRosterId: {
6
+ type: mongoose.Schema.Types.ObjectId,
7
+ ref: "DutyRoster",
8
+ required: true,
9
+ },
10
+ facilityId: {
11
+ type: mongoose.Schema.Types.ObjectId,
12
+ ref: "Facility",
13
+ required: true,
14
+ },
15
+ staffId: {
16
+ type: mongoose.Schema.Types.ObjectId,
17
+ ref: "User",
18
+ required: true,
19
+ },
20
+ masterWorkplanId: {
21
+ type: mongoose.Schema.Types.ObjectId,
22
+ ref: "MasterWorkplan",
23
+ required: true,
24
+ },
25
+ // Array of tasks with their individual dates and status
26
+ tasks: [
27
+ {
28
+ childWorkplanId: {
29
+ type: mongoose.Schema.Types.ObjectId,
30
+ ref: "ChildWorkplan",
31
+ required: true,
32
+ },
33
+ // Each task can have multiple scheduled dates
34
+ scheduledDates: [
35
+ {
36
+ date: {
37
+ type: Date,
38
+ required: true,
39
+ },
40
+ status: {
41
+ type: String,
42
+ enum: [
43
+ "pending",
44
+ "completed",
45
+ "missed",
46
+ "cancelled",
47
+ "in-progress",
48
+ ],
49
+ default: "pending",
50
+ required: true,
51
+ },
52
+ completedAt: {
53
+ type: Date,
54
+ },
55
+ completedBy: {
56
+ type: mongoose.Schema.Types.ObjectId,
57
+ ref: "User",
58
+ },
59
+ notes: {
60
+ type: String,
61
+ maxlength: 500,
62
+ },
63
+ // Time tracking
64
+ startTime: String,
65
+ endTime: String,
66
+ actualDuration: Number, // in minutes
67
+ },
68
+ ],
69
+ // Task metadata
70
+ priority: {
71
+ type: String,
72
+ enum: ["low", "medium", "high", "critical"],
73
+ default: "medium",
74
+ },
75
+ estimatedDuration: Number, // in minutes
76
+ isRecurring: {
77
+ type: Boolean,
78
+ default: false,
79
+ },
80
+ recurringPattern: {
81
+ type: String,
82
+ enum: ["daily", "weekly", "monthly", "custom"],
83
+ },
84
+ },
85
+ ],
86
+ // Overall checklist metadata
87
+ period: {
88
+ startDate: {
89
+ type: Date,
90
+ required: true,
91
+ },
92
+ endDate: {
93
+ type: Date,
94
+ required: true,
95
+ },
96
+ },
97
+ // Summary statistics
98
+ summary: {
99
+ totalTasks: {
100
+ type: Number,
101
+ default: 0,
102
+ },
103
+ completedTasks: {
104
+ type: Number,
105
+ default: 0,
106
+ },
107
+ pendingTasks: {
108
+ type: Number,
109
+ default: 0,
110
+ },
111
+ missedTasks: {
112
+ type: Number,
113
+ default: 0,
114
+ },
115
+ completionPercentage: {
116
+ type: Number,
117
+ default: 0,
118
+ min: 0,
119
+ max: 100,
120
+ },
121
+ },
122
+ status: {
123
+ type: String,
124
+ enum: ["active", "completed", "expired", "cancelled"],
125
+ default: "active",
126
+ },
127
+ },
128
+ {
129
+ timestamps: true,
130
+ },
131
+ );
132
+
133
+ // Pre-save middleware to update summary statistics
134
+ DutyRosterChecklistSchema.pre("save", function (next) {
135
+ // Validate period dates
136
+ if (this.period.startDate >= this.period.endDate) {
137
+ return next(new Error("End date must be after start date"));
138
+ }
139
+
140
+ // Calculate summary statistics
141
+ let totalScheduledDates = 0;
142
+ let completedScheduledDates = 0;
143
+ let pendingScheduledDates = 0;
144
+ let missedScheduledDates = 0;
145
+
146
+ this.tasks.forEach((task) => {
147
+ task.scheduledDates.forEach((scheduledDate) => {
148
+ totalScheduledDates++;
149
+ switch (scheduledDate.status) {
150
+ case "completed":
151
+ completedScheduledDates++;
152
+ break;
153
+ case "pending":
154
+ case "in-progress":
155
+ pendingScheduledDates++;
156
+ break;
157
+ case "missed":
158
+ missedScheduledDates++;
159
+ break;
160
+ }
161
+ });
162
+ });
163
+
164
+ this.summary.totalTasks = totalScheduledDates;
165
+ this.summary.completedTasks = completedScheduledDates;
166
+ this.summary.pendingTasks = pendingScheduledDates;
167
+ this.summary.missedTasks = missedScheduledDates;
168
+ this.summary.completionPercentage =
169
+ totalScheduledDates > 0
170
+ ? Math.round((completedScheduledDates / totalScheduledDates) * 100)
171
+ : 0;
172
+
173
+ next();
174
+ });
175
+
176
+ // Static method to generate dates between start and end date
177
+ DutyRosterChecklistSchema.statics.generateDateRange = function (
178
+ startDate,
179
+ endDate,
180
+ frequency = "daily",
181
+ ) {
182
+ const dates = [];
183
+ const current = new Date(startDate);
184
+ const end = new Date(endDate);
185
+
186
+ while (current <= end) {
187
+ dates.push(new Date(current));
188
+
189
+ switch (frequency) {
190
+ case "daily":
191
+ current.setDate(current.getDate() + 1);
192
+ break;
193
+ case "weekly":
194
+ current.setDate(current.getDate() + 7);
195
+ break;
196
+ case "monthly":
197
+ current.setMonth(current.getMonth() + 1);
198
+ break;
199
+ default:
200
+ current.setDate(current.getDate() + 1);
201
+ }
202
+ }
203
+
204
+ return dates;
205
+ };
206
+
207
+ // Instance method to update task status
208
+ DutyRosterChecklistSchema.methods.updateTaskStatus = function (
209
+ taskId,
210
+ dateId,
211
+ status,
212
+ completedBy,
213
+ notes,
214
+ ) {
215
+ const task = this.tasks.id(taskId);
216
+ if (!task) {
217
+ throw new Error("Task not found");
218
+ }
219
+
220
+ const scheduledDate = task.scheduledDates.id(dateId);
221
+ if (!scheduledDate) {
222
+ throw new Error("Scheduled date not found");
223
+ }
224
+
225
+ scheduledDate.status = status;
226
+ if (status === "completed") {
227
+ scheduledDate.completedAt = new Date();
228
+ scheduledDate.completedBy = completedBy;
229
+ }
230
+ if (notes) {
231
+ scheduledDate.notes = notes;
232
+ }
233
+
234
+ return this.save();
235
+ };
236
+
237
+ // Add indexes for efficient queries
238
+ DutyRosterChecklistSchema.index({ dutyRosterId: 1 });
239
+ DutyRosterChecklistSchema.index({ facilityId: 1, staffId: 1 });
240
+ DutyRosterChecklistSchema.index({ masterWorkplanId: 1 });
241
+ DutyRosterChecklistSchema.index({ "period.startDate": 1, "period.endDate": 1 });
242
+ DutyRosterChecklistSchema.index({ "tasks.scheduledDates.date": 1 });
243
+ DutyRosterChecklistSchema.index({ status: 1 });
244
+
245
+ const DutyRosterChecklist = mongoose.model(
246
+ "DutyRosterChecklist",
247
+ DutyRosterChecklistSchema,
248
+ );
249
+
250
+ module.exports = DutyRosterChecklist;